verb
Version:
Verb makes it easy to build project documentation using simple markdown templates, with zero configuration required.
78 lines (61 loc) • 1.95 kB
JavaScript
/**
* Verb <https://github.com/assemble/verb>
* Generate markdown documentation for GitHub projects.
*
* Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors.
* Licensed under the MIT license.
*/
;
var path = require('path');
var file = require('fs-utils');
var matter = require('gray-matter');
var marked = require('marked');
var extras = require('marked-extras');
var _ = require('lodash');
module.exports = function (verb) {
var verbOpts = _.extend({}, verb.options);
var utils = verb.utils;
// marked.js extras and defaults
verbOpts.marked = verbOpts.marked || {};
var markedDefaults = extras.markedDefaults;
exports.html = function (patterns, options) {
var opts = _.defaults({}, options, verbOpts, {
ext: options.ext || verb.ext,
sep: '\n'
}, markedDefaults);
verb.ext = opts.ext;
// HTML layouts
var defaultCwd = verb.cwd('docs', 'layouts');
opts.layouts = verb.cwd(opts.layouts || defaultCwd);
// Set marked.js options
extras.init(opts.marked);
marked.setOptions(opts);
var src = '';
var localDocs = verb.cwd(opts.docs || 'docs', patterns + '*');
try {
src = require(patterns);
} catch (e) {
src = file.expand(localDocs).map(function (filepath) {
filepath = path.resolve(filepath);
var page = matter.read(filepath);
// Extend the context
verb.context = _.extend(
verb.context,
verb.page.context,
opts,
page.context
);
var output = verb.template(page.content, verb.context);
// Convert markdown to HTML
var markup = marked(output);
// If a layout is defined in the options, use it
if (opts.layout) {
markup = verb.layout(markup, verb.context, opts);
}
return markup;
}).join(opts.sep);
}
return utils.adjust.headings(src);
};
return exports;
};