metalsmith-layouts/lib/index.js

46 lines
1.2 KiB
JavaScript
Raw Normal View History

2014-02-04 21:47:35 -08:00
var consolidate = require('consolidate');
var debug = require('debug')('metalsmith-templates');
2014-02-04 21:47:35 -08:00
var each = require('async').each;
var extend = require('extend');
2014-02-04 21:47:35 -08:00
/**
* Expose `plugin`.
*/
module.exports = plugin;
/**
* Metalsmith plugin to run files through any template in a template `dir`.
*
* @param {String} dir
* @return {Function}
*/
function plugin(opts){
opts = opts || {};
opts.dir = opts.dir || 'templates';
if (!opts.engine) throw new Error('"engine" option required');
return function(files, metalsmith, done){
2014-02-05 11:44:18 -08:00
var metadata = metalsmith.metadata();
2014-02-04 21:47:35 -08:00
each(Object.keys(files), convert, done);
function convert(file, done){
debug('converting file: %s', file);
var data = extend({}, metadata, files[file]);
2014-02-04 21:47:35 -08:00
var template = data.template;
if (!template) return done();
var tmpl = metalsmith.join(opts.dir, template);
debug('stringify file: %s', file);
2014-02-06 11:33:50 -08:00
data.contents = data.contents.toString();
2014-02-04 21:47:35 -08:00
consolidate[opts.engine](tmpl, data, function(err, str){
if (err) return done(err);
debug('converted file: %s', file);
files[file].contents = new Buffer(str);
2014-02-04 21:47:35 -08:00
done();
});
}
};
}