152 lines
3.9 KiB
JavaScript
152 lines
3.9 KiB
JavaScript
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 tags = require('metalsmith-tags')
|
|
|
|
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.registerPartial('index', fs.readFileSync('templates/index.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(addCategory())
|
|
.use(collections(require('./config/collections')))
|
|
.use(markdown(require('./config/markdown')))
|
|
.use(pagination(require('./config/pagination')))
|
|
.use(paths(require('./config/paths')))
|
|
.use(tags(require('./config/tags')))
|
|
.use(layouts(require('./config/layouts')))
|
|
.use(copyVendor())
|
|
.destination('build')
|
|
.build(function (err) {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
})
|
|
|
|
function addCategory() {
|
|
|
|
return function(files, metalsmith, done) {
|
|
|
|
for (var f in files) {
|
|
if (f.indexOf('.md') > 0) {
|
|
var idx = f.indexOf('/');
|
|
var cat = f.substring(0, idx);
|
|
|
|
files[f].category = cat;
|
|
}
|
|
}
|
|
|
|
return done();
|
|
}
|
|
}
|
|
|
|
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 copyVendor() {
|
|
|
|
return function(files, metalsmith, done){
|
|
|
|
var bufferMoment = fs.readFileSync('styles/customHighlight.css');
|
|
files['styles/customHighlight.css'] = {
|
|
contents: bufferMoment
|
|
};
|
|
|
|
return done();
|
|
};
|
|
}
|
|
|