Skip to content

Commit b531b94

Browse files
committed
refactor
1 parent 45f0c5f commit b531b94

File tree

3 files changed

+77
-91
lines changed

3 files changed

+77
-91
lines changed

index.js

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,53 @@
1-
/*!
2-
* helper-markdown <https://github.com/jonschlinkert/helper-markdown>
3-
*
4-
* Copyright (c) 2014 Jon Schlinkert, contributors.
5-
* Licensed under the MIT license.
6-
*/
7-
81
'use strict';
92

10-
var isObject = require('isobject');
3+
var hljs = require('highlight.js');
4+
var utils = require('handlebars-utils');
115
var Remarkable = require('remarkable');
12-
var merge = require('mixin-deep');
13-
14-
module.exports = function markdown(config) {
15-
if (typeof config === 'string') {
16-
return helper.apply(this, arguments);
17-
}
6+
var defaults = { html: true, breaks: true, highlight: highlight };
187

19-
config = config || {};
20-
if (config.fn || config.hash || arguments.length > 1) {
21-
return helper.apply(this, arguments);
8+
module.exports = function(config) {
9+
if (typeof config === 'string' || utils.isOptions(config)) {
10+
return markdown.apply(defaults, arguments);
2211
}
2312

24-
function helper(context, options) {
25-
if (typeof context === 'string') {
26-
var opts = merge({}, config, options);
27-
var md = new Remarkable(opts);
28-
return md.render(context);
13+
function markdown(str, locals, options) {
14+
if (typeof str !== 'string') {
15+
options = locals;
16+
locals = str;
17+
str = true;
2918
}
3019

31-
if (isObject(context) && typeof context.fn === 'function') {
32-
options = context;
33-
context = {};
20+
if (utils.isOptions(locals)) {
21+
options = locals;
22+
locals = {};
3423
}
3524

36-
options = merge({ html: true, breaks: true }, config, options);
37-
options = merge({}, options, options.markdown, options.hash);
38-
if (options.hasOwnProperty('lang')) {
39-
options.langPrefix = options.lang;
25+
var ctx = utils.context(this, locals, options);
26+
var opts = utils.options(this, locals, options);
27+
opts = Object.assign({}, defaults, config, opts);
28+
29+
if (opts.hasOwnProperty('lang')) {
30+
opts.langPrefix = opts.lang;
4031
}
4132

42-
var md = new Remarkable(options);
43-
var ctx = merge({}, options, (this.context || this), context);
44-
return md.render(options.fn(ctx));
33+
var md = new Remarkable(opts);
34+
var val = utils.value(str, ctx, options);
35+
return md.render(val);
4536
}
46-
47-
return helper;
37+
return markdown;
4838
};
39+
40+
function highlight(code, lang) {
41+
try {
42+
try {
43+
return hljs.highlight(lang, code).value;
44+
} catch (err) {
45+
if (!/Unknown language/i.test(err.message)) {
46+
throw err;
47+
}
48+
return hljs.highlightAuto(code).value;
49+
}
50+
} catch (err) {
51+
return code;
52+
}
53+
}

package.json

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,19 @@
2525
"test": "mocha"
2626
},
2727
"dependencies": {
28-
"isobject": "^2.0.0",
29-
"mixin-deep": "^1.1.3",
30-
"remarkable": "^1.6.0"
28+
"handlebars-utils": "^1.0.2",
29+
"highlight.js": "^9.12.0",
30+
"remarkable": "^1.7.1"
3131
},
3232
"devDependencies": {
33-
"gulp-format-md": "^0.1.5",
34-
"handlebars": "^4.0.5",
35-
"highlight.js": "^9.1.0",
36-
"lodash": "^3.10.1",
37-
"mocha": "*",
38-
"should": "*"
33+
"gulp-format-md": "^1.0.0",
34+
"handlebars": "^4.0.10",
35+
"lodash": "^4.17.4",
36+
"mocha": "^3.4.2"
3937
},
4038
"keywords": [
4139
"block",
40+
"compile",
4241
"engine",
4342
"expression",
4443
"function",
@@ -49,7 +48,9 @@
4948
"markdown",
5049
"md",
5150
"remarkable",
52-
"template"
51+
"render",
52+
"template",
53+
"templates"
5354
],
5455
"verb": {
5556
"toc": true,
@@ -73,13 +74,9 @@
7374
"reflinks": [
7475
"assemble",
7576
"handlebars",
76-
"lodash",
7777
"templates",
7878
"underscore",
79-
"verb",
80-
"generate",
81-
"generate-helper",
82-
"helpers"
79+
"verb"
8380
],
8481
"lint": {
8582
"reflinks": true

test/test.js

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,104 +2,88 @@
22

33
require('mocha');
44
var _ = require('lodash');
5-
var should = require('should');
5+
var assert = require('assert');
66
var handlebars = require('handlebars');
7-
var hljs = require('highlight.js');
87
var markdown = require('..');
98

10-
function highlight(code, lang) {
11-
try {
12-
try {
13-
return hljs.highlight(lang, code).value;
14-
} catch (err) {
15-
if (!/Unknown language/i.test(err.message)) {
16-
throw err;
17-
}
18-
return hljs.highlightAuto(code).value;
19-
}
20-
} catch (err) {
21-
return code;
22-
}
23-
}
24-
25-
describe('sync', function() {
26-
describe('markdown helper', function() {
9+
describe('helper-markdown', function() {
10+
describe('main export', function() {
2711
it('should render markdown:', function() {
28-
markdown('# heading').should.equal('<h1>heading</h1>\n');
12+
assert.equal(markdown('# heading'), '<h1>heading</h1>\n');
2913
});
3014

3115
it('should highlight code blocks', function() {
32-
var html = markdown('```js\nvar foo = "bar";\n```\n', {highlight: highlight});
33-
html.should.equal('<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
16+
var html = markdown('```js\nvar foo = "bar";\n```\n', {});
17+
assert.equal(html, '<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
3418
});
3519

3620
it('should pass options to remarkable', function() {
37-
var a = markdown('abc https://github.com/jonschlinkert/remarkable xyz', {highlight: highlight, linkify: true});
38-
a.should.equal('<p>abc <a href="https://github.com/jonschlinkert/remarkable">https://github.com/jonschlinkert/remarkable</a> xyz</p>\n');
21+
var a = markdown('abc https://github.com/jonschlinkert/remarkable xyz', {linkify: true});
22+
assert.equal(a, '<p>abc <a href="https://github.com/jonschlinkert/remarkable">https://github.com/jonschlinkert/remarkable</a> xyz</p>\n');
3923

40-
var b = markdown('abc https://github.com/jonschlinkert/remarkable xyz', {highlight: highlight, linkify: false});
41-
b.should.equal('<p>abc https://github.com/jonschlinkert/remarkable xyz</p>\n');
24+
var b = markdown('abc https://github.com/jonschlinkert/remarkable xyz', {linkify: false});
25+
assert.equal(b, '<p>abc https://github.com/jonschlinkert/remarkable xyz</p>\n');
4226
});
4327

4428
it('should pass options to highlight.js:', function() {
45-
var html = markdown('```js\nvar foo = "bar";\n```\n', {highlight: highlight, langPrefix: 'language-'});
46-
html.should.equal('<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
29+
var html = markdown('```js\nvar foo = "bar";\n```\n', {langPrefix: 'language-'});
30+
assert.equal(html, '<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
4731
});
4832
});
4933

5034
describe('handlebars:', function() {
5135
it('should work as a handlebars helper:', function() {
52-
handlebars.registerHelper('markdown', markdown({highlight: highlight}));
53-
handlebars.compile('{{#markdown}}# {{title}}{{/markdown}}')({title: 'heading'}).should.equal('<h1>heading</h1>\n');
36+
handlebars.registerHelper('markdown', markdown({}));
37+
assert.equal(handlebars.compile('{{#markdown}}# heading{{/markdown}}')(), '<h1>heading</h1>\n');
5438
});
5539

5640
it('should pass hash options to remarkable:', function() {
57-
handlebars.registerHelper('markdown', markdown({highlight: highlight}));
41+
handlebars.registerHelper('markdown', markdown({}));
5842

5943
// `linkify: true`
6044
var a = handlebars.compile('{{#markdown linkify=true}}abc https://github.com/jonschlinkert/remarkable xyz{{/markdown}}')();
61-
a.should.equal('<p>abc <a href="https://github.com/jonschlinkert/remarkable">https://github.com/jonschlinkert/remarkable</a> xyz</p>\n');
45+
assert.equal(a, '<p>abc <a href="https://github.com/jonschlinkert/remarkable">https://github.com/jonschlinkert/remarkable</a> xyz</p>\n');
6246

6347
// `linkify: false`
6448
var b = handlebars.compile('{{#markdown linkify=false}}abc https://github.com/jonschlinkert/remarkable xyz{{/markdown}}')();
65-
b.should.equal('<p>abc https://github.com/jonschlinkert/remarkable xyz</p>\n');
49+
assert.equal(b, '<p>abc https://github.com/jonschlinkert/remarkable xyz</p>\n');
6650
});
6751

6852
it('should pass hash options to highlight.js:', function() {
69-
handlebars.registerHelper('markdown', markdown({highlight: highlight}));
53+
handlebars.registerHelper('markdown', markdown({}));
7054

7155
// `langPrefix = language-`
7256
var a = handlebars.compile('{{#markdown}}```js\nvar foo = "bar";\n```\n{{/markdown}}')();
73-
a.should.equal('<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
57+
assert.equal(a, '<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
7458

7559
// `langPrefix = language-`
7660
var b = handlebars.compile('{{#markdown langPrefix="language-"}}```js\nvar foo = "bar";\n```\n{{/markdown}}')();
77-
b.should.equal('<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
61+
assert.equal(b, '<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = <span class="hljs-string">"bar"</span>;\n</code></pre>\n');
7862
});
7963
});
8064

8165
describe('lodash:', function() {
8266
it('should work as a lodash mixin:', function() {
8367
_.mixin({markdown: markdown});
84-
_.template('<%= _.markdown("# " + title) %>')({title: 'heading'}).should.equal('<h1>heading</h1>\n');
68+
assert.equal(_.template('<%= _.markdown("# heading") %>')({}), '<h1>heading</h1>\n');
8569
});
8670

8771
it('should pass options to remarkable:', function() {
88-
_.mixin({markdown: markdown({highlight: highlight})});
72+
_.mixin({markdown: markdown({})});
8973
var a = _.template('<%= _.markdown("foo\\n```js\\nvar foo = {};\\n```\\nbar") %>')({});
90-
a.should.equal('<p>foo</p>\n<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = {};\n</code></pre>\n<p>bar</p>\n');
74+
assert.equal(a, '<p>foo</p>\n<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = {};\n</code></pre>\n<p>bar</p>\n');
9175

9276
var b = _.template('<%= _.markdown("foo\\n```js\\nvar foo = {};\\n```\\nbar", {langPrefix: \'language-\'}) %>')({});
93-
b.should.equal('<p>foo</p>\n<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = {};\n</code></pre>\n<p>bar</p>\n');
77+
assert.equal(b, '<p>foo</p>\n<pre><code class="language-js"><span class="hljs-keyword">var</span> foo = {};\n</code></pre>\n<p>bar</p>\n');
9478
});
9579

9680
it('should work when passed to lodash as a string:', function() {
97-
_.template('<%= markdown("# heading") %>')({markdown: markdown}).should.equal('<h1>heading</h1>\n');
81+
assert.equal(_.template('<%= markdown("# heading") %>')({markdown: markdown}), '<h1>heading</h1>\n');
9882
});
9983

10084
it('should work as a lodash import:', function() {
10185
var settings = {imports: {markdown: markdown}};
102-
_.template('<%= markdown("# heading") %>', settings)({}).should.equal('<h1>heading</h1>\n');
86+
assert.equal(_.template('<%= markdown("# heading") %>', settings)({}), '<h1>heading</h1>\n');
10387
});
10488
});
10589
});

0 commit comments

Comments
 (0)