docpad-plugin-marked
Version:
Markdown rendering for DocPad, using Marked
62 lines (56 loc) • 1.78 kB
JavaScript
// Generated by CoffeeScript 2.5.1
// Export Plugin
module.exports = function(BasePlugin) {
var MarkedPlugin;
return MarkedPlugin = (function() {
// Define Plugin
class MarkedPlugin extends BasePlugin {
// Render some content
render(opts, next) {
var config, inExtension, marked, outExtension, renderer;
// Prepare
config = this.config;
({inExtension, outExtension} = opts);
// Check our extensions
if ((inExtension === 'md' || inExtension === 'markdown') && (outExtension === null || outExtension === 'html')) {
// Requires
marked = require('marked');
marked.setOptions(config.markedOptions);
if (config.markedRenderer) {
renderer = new marked.Renderer();
Object.keys(config.markedRenderer).forEach(function(key) {
return renderer[key] = config.markedRenderer[key];
});
return marked(opts.content, {
renderer: renderer
}, function(err, result) {
opts.content = result;
return next(err);
});
}
// Render
// use async form of marked in case highlight function requires it
return marked(opts.content, function(err, result) {
opts.content = result;
return next(err);
});
} else {
// Done
return next();
}
}
};
// Plugin name
MarkedPlugin.prototype.name = 'marked';
// Plugin configuration
MarkedPlugin.prototype.config = {
markedOptions: {
pedantic: false,
gfm: true,
sanitize: false,
highlight: null
}
};
return MarkedPlugin;
}).call(this);
};