From 71c036ed06e028143b97318475266d83c965b1e8 Mon Sep 17 00:00:00 2001 From: Matthew Beale Date: Tue, 22 Aug 2017 18:52:02 -0700 Subject: [PATCH] Add swigRaw option Writer may not want their HTML to be processed by the swig templating system that hexo applies to HTML by default. Offer an option to disable swig from template via the {% raw %} tag. --- README.md | 4 +++- index.js | 3 ++- lib/renderer.js | 12 ++++++++++-- test/index.js | 24 ++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 508de64..57f0eb7 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,8 @@ marked: smartLists: true smartypants: true modifyAnchors: '' - autolink: true + autolink: true, + swigRaw: false ``` - **gfm** - Enables [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown) @@ -39,6 +40,7 @@ marked: - **smartypants** - Use "smart" typograhic punctuation for things like quotes and dashes. - **modifyAnchors** - Use for transform anchorIds. if 1 to lowerCase and if 2 to upperCase. - **autolink** - Enable autolink for URLs. E.g. `http://hexo.io` will become `http://hexo.io`. +- **swigRaw** - Escape the output in a swig `{% raw %}` tag. This will keep your template from being parse by the default hexo swig renderer. [Markdown]: http://daringfireball.net/projects/markdown/ [marked]: https://github.com/chjj/marked diff --git a/index.js b/index.js index dd245ae..14ec347 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,8 @@ hexo.config.marked = assign({ smartLists: true, smartypants: true, modifyAnchors: '', - autolink: true + autolink: true, + swigRaw: false }, hexo.config.marked); hexo.extend.renderer.register('md', 'html', renderer, true); diff --git a/lib/renderer.js b/lib/renderer.js index b0cd9a7..a114ed3 100644 --- a/lib/renderer.js +++ b/lib/renderer.js @@ -95,7 +95,15 @@ marked.setOptions({ }); module.exports = function(data, options) { - return marked(data.text, assign({ + let mergedOptions = assign({ renderer: new Renderer() - }, this.config.marked, options)); + }, this.config.marked, options); + + let rendered = marked(data.text, mergedOptions); + + if (mergedOptions.swigRaw) { + rendered = '{% raw %}' + rendered + '{% endraw %}'; + } + + return rendered; }; diff --git a/test/index.js b/test/index.js index 68ba71c..e99814c 100644 --- a/test/index.js +++ b/test/index.js @@ -177,4 +177,28 @@ describe('Marked renderer', function() { ].join('\n')); }); }); + + describe('swigRaw option true', function() { + var ctx = { + config: { + marked: { + swigRaw: true + } + } + }; + + var renderer = require('../lib/renderer'); + + var body = '{{foo}}'; + + it('returnd values are escaped', function() { + var r = renderer.bind(ctx); + var result = r({text: body}); + + result.should.eql([ + '{% raw %}

{{foo}}

', + '{% endraw %}' + ].join('\n')); + }); + }); });