Website/build.js

114 lines
2.7 KiB
JavaScript

var extname = require('path').extname;
var Metalsmith = require('metalsmith');
var drafts = require('metalsmith-drafts');
var markdown = require('metalsmith-markdown');
var layouts = require('metalsmith-layouts');
var inplace = require('metalsmith-in-place');
var uglify = require('metalsmith-uglify');
var rename = require('metalsmith-rename');
var metadata = require('metalsmith-metadata');
var fingerprint = require('metalsmith-fingerprint');
var branch = require('metalsmith-branch');
var assets = require('metalsmith-assets');
var paths = require('metalsmith-paths');
var linkchecker = require('metalsmith-broken-link-checker');
var rootpath = require('metalsmith-rootpath');
var collections = require('metalsmith-collections');
var filenamedate = require('metalsmith-date-in-filename');
/**
* Helpers
*/
var buildPubs = require('./stages/build-pubs.js');
var renderTeX = require('./stages/render-tex.js');
/**
* Build.
*/
var metalsmith = Metalsmith(__dirname)
.source('./src')
.destination('./site')
// Disable posting of drafts
.use(drafts())
// Generate Cache-Busted CSS files
.use(fingerprint({
pattern: 'css/*.css'
}))
// Load metadata: CV, Lab Members/Affiliates, and Pubs
// Required for buildPubs
.use(metadata({
okennedy: "metadata/okennedy.json",
odinLab: "metadata/lab.json",
altPubs: "metadata/publications.json",
}))
// Helper Stage: Render Publication Details (required for inline rendering)
.use(buildPubs())
// Extract Path to Root (required for inline rendering)
.use(rootpath())
// Extract Dates from Filenames (required for inline rendering)
.use(filenamedate(false))
// Render Page-Specific Handlebars
.use(inplace({
engine: "handlebars"
}))
// Render Markdown
.use(markdown({
pattern: "**/*.md"
}))
// Load Path Information (Must come After Markdown Rendering)
.use(paths({
property: "paths"
}))
// Group News Article Collections
.use(collections({
news: {
pattern: 'news/*.html',
sortBy: 'date',
reverse: true,
limit: 5
},
rants: {
pattern: 'rants/*.html',
sortBy: 'date',
reverse: true,
limit: 3
}
}))
// Render News Article Headers
.use(branch('rants/**/*.html')
.use(layouts({
engine: "handlebars",
default: "article.hbs"
}))
)
.use(branch('news/**/*.html')
.use(layouts({
engine: "handlebars",
default: "article.hbs"
}))
)
// Render HTML
.use(branch()
.pattern('**/*.html')
.use(renderTeX())
.use(layouts({
engine: "handlebars",
default: "default.hbs"
}))
)
// Validate
.use(linkchecker({
allowRegex: /^(\/resources|\/slides)/,
allowRedirect: true
}))
// Compress
.use(uglify())
// Compile
.build(function(err){
if (err) throw err;
});