153 lines
3.9 KiB
JavaScript
153 lines
3.9 KiB
JavaScript
/**
|
|
* Config
|
|
*/
|
|
|
|
process.env.TZ = 'America/New_York'
|
|
|
|
/**
|
|
* Modules
|
|
*/
|
|
|
|
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');
|
|
var registerHelpers = require('metalsmith-register-helpers');
|
|
var match = require('multimatch');
|
|
|
|
/**
|
|
* Helpers
|
|
*/
|
|
|
|
// generate metadata for lab membership (used in buildPubs, buildGrants, and /people/index.md)
|
|
var buildMembers = require('./stages/build-members.js')
|
|
// generate metadata for publications (used in /papers/index.md)
|
|
var buildPubs = require('./stages/build-pubs.js');
|
|
// generate metadata for grants (used in /grants/index.md)
|
|
var buildGrants = require('./stages/build-grants.js');
|
|
// use mathjax to render inline-latex
|
|
var renderTeX = require('./stages/render-tex.js');
|
|
|
|
/**
|
|
* Build.
|
|
*/
|
|
|
|
var metalsmith = Metalsmith(__dirname)
|
|
.source('./src')
|
|
.destination('./site')
|
|
// Disable posting of drafts
|
|
.use(drafts())
|
|
.use(registerHelpers({
|
|
directory: "./helpers"
|
|
}))
|
|
// 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/Grant Details (required for inline rendering)
|
|
.use(buildMembers())
|
|
.use(buildPubs())
|
|
.use(buildGrants())
|
|
// 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 Rant & 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 Lab Member Metadata
|
|
.use(branch(['people/*.html', '!**/index.html'])
|
|
.use(layouts({
|
|
engine: "handlebars",
|
|
default: "member.hbs"
|
|
}))
|
|
)
|
|
// Final Render Pass
|
|
.use(branch('**/*.html')
|
|
// Render LaTeX inlined into the HTML
|
|
.use(renderTeX())
|
|
// Assign a mimir-specific layout to the mimir subdirectory
|
|
.use(branch('research/mimir/*.html')
|
|
.use(function(files, smith, done) {
|
|
for(i in files){ files[i].layout = 'mimir.hbs' }
|
|
done();
|
|
})
|
|
)
|
|
// Render outer layouts
|
|
.use(layouts({
|
|
engine: "handlebars",
|
|
default: "default.hbs",
|
|
directory: "layouts",
|
|
partials: "partials"
|
|
}))
|
|
)
|
|
// Validate
|
|
.use(linkchecker({
|
|
allowRegex: /^(\/resources|\/slides)/,
|
|
allowRedirect: true
|
|
}))
|
|
// Compress
|
|
.use(uglify())
|
|
// Compile
|
|
.build(function(err){
|
|
if (err) throw err;
|
|
});
|
|
|