From aeab25257472904d7ef7039e25acb794bc147e16 Mon Sep 17 00:00:00 2001 From: Jared Wray Date: Wed, 24 Apr 2024 12:05:24 -0700 Subject: [PATCH 1/3] removing helper-for-markdown --- lib/markdown.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- test/markdown.js | 1 - 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/markdown.js b/lib/markdown.js index 7e2cc6e..f2d0135 100644 --- a/lib/markdown.js +++ b/lib/markdown.js @@ -1,4 +1,7 @@ 'use strict'; +const hljs = require('highlight.js'); +const utils = require('handlebars-utils'); +const Remarkable = require('remarkable'); /** * Expose markdown `helpers` (for performance we're using getters so @@ -34,7 +37,7 @@ Object.defineProperty(helpers, 'markdown', { get: function() { // this is defined as a getter to avoid calling this function // unless the helper is actually used - return markdown || (markdown = require('helper-for-markdown')()); + return markdown || (markdown = helpersForMarkdown()); } }); @@ -53,3 +56,52 @@ Object.defineProperty(helpers, 'markdown', { */ helpers.md = require('helper-md'); + + +function helpersForMarkdown(config) { + const defaults = { html: true, breaks: true, highlight: highlight }; + if (typeof config === 'string' || utils.isOptions(config)) { + return markdown.apply(defaults, arguments); + } + + function markdown(str, locals, options) { + if (typeof str !== 'string') { + options = locals; + locals = str; + str = true; + } + + if (utils.isOptions(locals)) { + options = locals; + locals = {}; + } + + const ctx = utils.context(this, locals, options); + let opts = utils.options(this, locals, options); + opts = Object.assign({}, defaults, config, opts); + + if (opts.hasOwnProperty('lang')) { + opts.langPrefix = opts.lang; + } + + const md = new Remarkable(opts); + const val = utils.value(str, ctx, options); + return md.render(val); + } + return markdown; +}; + +function highlight(code, lang) { + try { + try { + return hljs.highlight(lang, code).value; + } catch (err) { + if (!/Unknown language/i.test(err.message)) { + throw err; + } + return hljs.highlightAuto(code).value; + } + } catch (err) { + return code; + } +} diff --git a/package.json b/package.json index b8b21d8..33eb79b 100644 --- a/package.json +++ b/package.json @@ -127,8 +127,8 @@ "handlebars-utils": "^1.0.6", "has-value": "^2.0.2", "helper-date": "^1.0.1", - "helper-for-markdown": "^1.0.2", "helper-md": "^0.2.2", + "highlight.js": "^11.9.0", "html-tag": "^2.0.0", "is-even": "^1.0.0", "is-glob": "^4.0.3", diff --git a/test/markdown.js b/test/markdown.js index d9e7248..960e93b 100644 --- a/test/markdown.js +++ b/test/markdown.js @@ -15,7 +15,6 @@ describe('markdown', function() { assert.equal(template({title: 'Markdown Test'}), '

Markdown Test

\n'); }); it('should define the object', function() { - markdownHelper.markdown = require('helper-for-markdown')(); assert.equal(typeof markdownHelper.markdown, 'function'); }); }); From beb239afbb9c735bcb2cb6707a16c36a0f0d543f Mon Sep 17 00:00:00 2001 From: Jared Wray Date: Thu, 25 Apr 2024 06:51:58 -0700 Subject: [PATCH 2/3] adding in unit tests --- lib/markdown.js | 24 ++++++++---------------- test/markdown.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/lib/markdown.js b/lib/markdown.js index f2d0135..cdb6ee0 100644 --- a/lib/markdown.js +++ b/lib/markdown.js @@ -37,7 +37,7 @@ Object.defineProperty(helpers, 'markdown', { get: function() { // this is defined as a getter to avoid calling this function // unless the helper is actually used - return markdown || (markdown = helpersForMarkdown()); + return markdown || (markdown = this.helpersForMarkdown()); } }); @@ -58,8 +58,8 @@ Object.defineProperty(helpers, 'markdown', { helpers.md = require('helper-md'); -function helpersForMarkdown(config) { - const defaults = { html: true, breaks: true, highlight: highlight }; +helpers.helpersForMarkdown = function(config) { + const defaults = { html: true, breaks: true, highlight: helpers.highlightFormMarkdown }; if (typeof config === 'string' || utils.isOptions(config)) { return markdown.apply(defaults, arguments); } @@ -91,17 +91,9 @@ function helpersForMarkdown(config) { return markdown; }; -function highlight(code, lang) { - try { - try { - return hljs.highlight(lang, code).value; - } catch (err) { - if (!/Unknown language/i.test(err.message)) { - throw err; - } - return hljs.highlightAuto(code).value; - } - } catch (err) { - return code; - } +helpers.highlightFormMarkdown = function(code, lang) { + if(lang) { + return hljs.highlight(code, {language: lang}).value; + } + return hljs.highlightAuto(code).value; } diff --git a/test/markdown.js b/test/markdown.js index 960e93b..a9be93b 100644 --- a/test/markdown.js +++ b/test/markdown.js @@ -17,6 +17,35 @@ describe('markdown', function() { it('should define the object', function() { assert.equal(typeof markdownHelper.markdown, 'function'); }); + it('should set the object', function() { + markdownHelper.markdown = function() {}; + assert.equal(typeof markdownHelper.markdown, 'function'); + }); + }); + + describe('helpers for markdown', function() { + it('should apply the correct config', function() { + var markdown = markdownHelper.helpersForMarkdown({html: true, breaks: true, highlight: function() {}}); + assert.equal(typeof markdown, 'function'); + var markdownAgain = markdownHelper.helpersForMarkdown('foo'); + assert.equal(typeof markdownAgain, 'string'); + }); + it('should the lang property', function() { + var markdown = markdownHelper.helpersForMarkdown({html: true, breaks: true, highlight: function() {}}); + var md = '## foo\n\n```js\nvar foo = "bar";\n```'; + var locals = {}; + var options = {lang: 'en'}; + markdown(md, locals, options); + assert.equal(typeof markdown, 'function'); + }); + it('test that highlighjs renders', function() { + var result = markdownHelper.highlightFormMarkdown('var foo = "bar";', 'js'); + assert.equal(result, 'var foo = "bar";'); + }); + it('test that highlighjs no lang', function() { + var result = markdownHelper.highlightFormMarkdown('var foo = "bar";'); + assert.equal(result, 'var foo = "bar";'); + }); }); describe('md', function() { From 23369b63af6126039eeee301503a5faa91f8183d Mon Sep 17 00:00:00 2001 From: Jared Wray Date: Thu, 25 Apr 2024 06:53:55 -0700 Subject: [PATCH 3/3] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index e052bc5..162f282 100644 --- a/README.md +++ b/README.md @@ -236,8 +236,6 @@ Visit the: [code](lib/logging.js) | [unit tests](test/logging.js) | [issues](htt ### [markdown helpers](#markdown) -Visit the: [code](lib/markdown.js) | [unit tests](test/markdown.js) | [issues](https://github.com/jonathas/handlebars-helpers/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+markdown+helpers)) - * **[markdown](#markdown)** ([code](lib/markdown.js#Lundefined) | [tests](test/markdown.js#L10)) * **[md](#md)** ([code](lib/markdown.js#L55) | [tests](test/markdown.js#L18))