var metalsmith = require('metalsmith') var layouts = require('metalsmith-layouts') var markdown = require('metalsmith-markdown') var collections = require('metalsmith-collections') var pagination = require('metalsmith-pagination') var paths = require('metalsmith-paths') var filemetadata = require('metalsmith-filemetadata') var matters = require('metalsmith-matters') var fs = require('fs'); var moment = require('moment'); var handlebars = require('handlebars'); var hlayouts = require('handlebars-layouts'); handlebars.registerHelper(hlayouts(handlebars)); handlebars.registerPartial('base', fs.readFileSync('templates/base.hbs', 'utf8')); handlebars.registerHelper('formatDate', function(date) { return moment(new Date(date)).format('MMMM D, YYYY HH:mm:ss'); }); handlebars.registerHelper('formatTimestamp', function(date) { return moment(date, 'X').format('MMMM D, YYYY HH:mm:ss'); }); function compareWith(v1, v2, operator) { var itm = false; switch (operator) { case '==': itm = (v1 == v2); break; case '!=': itm = (v1 != v2); break; case '===': itm = (v1 === v2); break; case '<': itm = (v1 < v2); break; case '<=': itm = (v1 <= v2); break; case '>': itm = (v1 > v2); break; case '>=': itm = (v1 >= v2); break; } return itm; } handlebars.registerHelper('eachCond', function(context, member, operator, cond, options) { var tot = ''; for (var i = 0; i < context.length; i++) { var itm = false; var v1 = context[i][member]; if (compareWith(v1, cond, operator)) { tot += options.fn(context[i]); } } return tot; }); handlebars.registerHelper('ifCond', function (v1, operator, v2, options) { if (compareWith(v1, v2, operator)) { return options.fn(this); } else { return options.inverse(this); } }); metalsmith(__dirname) .source('recettes') .metadata(require('./config/metadata')) .frontmatter(false) .use(matters(require('./config/matters'))) .use(filemetadata(require('./config/filemetadata'))) .use(collections(require('./config/collections'))) .use(markdown(require('./config/markdown'))) .use(pagination(require('./config/pagination'))) .use(paths(require('./config/paths'))) .use(layouts(require('./config/layouts'))) .use(copyVendor()) .destination('build') .build(function (err) { if (err) { throw err } }) function debugCollection() { return function(files, metalsmith, done) { console.log(files); for (var i in files) { console.log(i + ' -> ' + ' (' + files[i].collection + ')'); console.log(files[i]); } return done(); } } function debugMeta(metaname) { return function(files, metalsmith, done) { if (metaname !== undefined) { console.log(metalsmith.metadata()[metaname]); } else { console.log(metalsmith.metadata()); } return done(); } } function debugPagination() { return function(files, metalsmith, done) { for (var i in files) { var f = files[i]; if (f !== undefined && f.path != undefined) { console.log(f.path); } } return done(); } } function copyVendor() { return function(files, metalsmith, done){ var bufferMoment = fs.readFileSync('styles/customHighlight.css'); files['styles/customHighlight.css'] = { contents: bufferMoment }; return done(); }; }