2015-11-06 21:40:58 +01:00
|
|
|
var Metalsmith = require('metalsmith');
|
|
|
|
var markdown = require('metalsmith-markdown');
|
|
|
|
var collections = require('metalsmith-collections');
|
|
|
|
var layouts = require('metalsmith-layouts');
|
|
|
|
var branch = require('metalsmith-branch');
|
|
|
|
var sass = require('metalsmith-sass');
|
|
|
|
var elevate = require('metalsmith-elevate');
|
|
|
|
var ignore = require('metalsmith-ignore');
|
|
|
|
var collectionGrouping = require('metalsmith-collection-grouping');
|
2015-11-06 22:36:13 +01:00
|
|
|
var fingerprint = require('metalsmith-fingerprint-ignore');
|
2015-12-11 04:02:39 +01:00
|
|
|
var excerpts = require('metalsmith-better-excerpts');
|
2016-04-21 01:26:38 +02:00
|
|
|
var finalhandler = require('finalhandler')
|
|
|
|
var http = require('http')
|
|
|
|
var serveStatic = require('serve-static')
|
2015-11-06 21:40:58 +01:00
|
|
|
|
|
|
|
var metalsmith = Metalsmith(__dirname);
|
|
|
|
metalsmith
|
|
|
|
.source('contents')
|
|
|
|
.destination('build')
|
|
|
|
|
|
|
|
.use(collections({
|
|
|
|
pages: {
|
|
|
|
pattern: '*.md'
|
|
|
|
},
|
|
|
|
codes: {
|
|
|
|
pattern: 'codes/*.md',
|
|
|
|
sortBy: 'code'
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
|
|
|
|
.use(collectionGrouping({
|
|
|
|
codes: {
|
|
|
|
groupBy: 'set', // set instead of class, because class is a reserved word...
|
|
|
|
meta: 'codes/classes.json'
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
|
|
|
|
.use(branch('*.scss')
|
|
|
|
.use(sass())
|
|
|
|
)
|
|
|
|
|
2015-11-06 23:29:11 +01:00
|
|
|
.use(fingerprint({
|
|
|
|
pattern: ['style.css', 'favicon.ico']
|
|
|
|
}))
|
2015-11-06 22:36:13 +01:00
|
|
|
|
2015-11-06 21:40:58 +01:00
|
|
|
.use(branch('**/*.md')
|
|
|
|
.use(markdown())
|
2015-12-11 04:02:39 +01:00
|
|
|
.use(excerpts({pruneLength: 400}))
|
2015-11-06 21:40:58 +01:00
|
|
|
.use(layouts({
|
|
|
|
engine: 'jade',
|
|
|
|
directory: 'templates',
|
|
|
|
default: 'code.jade',
|
|
|
|
pretty: true
|
|
|
|
}))
|
|
|
|
)
|
|
|
|
|
|
|
|
.use(elevate('codes/*.html'))
|
|
|
|
.use(ignore('**/*.json'))
|
|
|
|
|
|
|
|
.build(function (err) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('Build successful!');
|
2016-04-21 01:26:38 +02:00
|
|
|
|
|
|
|
if (process.argv[2] != 'without-preview') startPreviewServer();
|
|
|
|
});
|
|
|
|
|
|
|
|
function startPreviewServer() {
|
|
|
|
http.createServer(function(req, res){
|
|
|
|
var done = finalhandler(req, res)
|
|
|
|
var serve = serveStatic('build', {'index': ['index.html'], 'extensions': ['html']})
|
|
|
|
serve(req, res, done)
|
|
|
|
}).listen(4887)
|
|
|
|
|
|
|
|
console.log('A local webserver has been launched, visit localhost:4887 in your browser to preview your build.');
|
|
|
|
console.log('Exit this process to kill the webserver :-)');
|
|
|
|
console.log('To build without the local webserver use `node build without-preview`');
|
|
|
|
}
|