CyTube/lib/web/jade.js

61 lines
1.5 KiB
JavaScript
Raw Normal View History

/**
* web/jade.js - Provides functionality for rendering/serving jade templates
*
* @author Calvin Montgomery <cyzon@cyzon.us>
*/
var jade = require('jade');
var fs = require('fs');
var path = require('path');
var templates = path.join(__dirname, '..', '..', 'templates');
var cache = {};
/**
* Merges locals with globals for jade rendering
*
* @param {Object} locals - The locals to merge
* @return {Object} an object containing globals and locals
*/
function merge(locals) {
var _locals = {
siteTitle: 'CyTube Beta',
siteDescription: 'Free, open source synchtube',
siteAuthor: 'Calvin "calzoneman" "cyzon" Montgomery'
};
if (typeof locals !== 'object') {
return _locals;
}
for (var key in locals) {
_locals[key] = locals[key];
}
return _locals;
}
/**
* Renders and serves a jade template
*
* @param res - The HTTP response
* @param view - The view to render
* @param locals - The locals to pass to the renderer
*/
function sendJade(res, view, locals) {
if (!(view in cache) || process.env['DEBUG']) {
var file = path.join(templates, view + '.jade');
var fn = jade.compile(fs.readFileSync(file), {
2013-12-25 21:18:21 +00:00
filename: file,
pretty: true
});
cache[view] = fn;
}
2014-01-09 23:43:07 +00:00
var start = Date.now();
var html = cache[view](merge(locals));
2014-01-09 23:43:07 +00:00
var end = Date.now();
console.log(view + " " + (end - start) + "ms");
res.send(html);
}
module.exports = {
sendJade: sendJade
};