59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
/*
|
|
*
|
|
* Utils (hoganjs-utils.js)
|
|
* Author: rtfpessoa
|
|
*
|
|
*/
|
|
|
|
(function() {
|
|
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
var hogan = require('hogan.js');
|
|
|
|
var templatesPath = path.resolve(__dirname, 'templates');
|
|
var templatesCache = {};
|
|
|
|
function HoganJsUtils() {
|
|
}
|
|
|
|
HoganJsUtils.prototype.render = function(namespace, view, params) {
|
|
var templateKey = this._templateKey(namespace, view);
|
|
|
|
var template = this._getTemplate(templateKey);
|
|
if (template) {
|
|
return template.render(params);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
HoganJsUtils.prototype._getTemplate = function(templateKey) {
|
|
var template = this._readFromCache(templateKey);
|
|
|
|
if (!template && fs) {
|
|
var templatePath = path.join(templatesPath, templateKey);
|
|
var templateContent = fs.readFileSync(templatePath + '.mustache', 'utf8');
|
|
template = hogan.compile(templateContent);
|
|
this._addToCache(templateKey, template);
|
|
}
|
|
|
|
return template;
|
|
};
|
|
|
|
HoganJsUtils.prototype._addToCache = function(templateKey, template) {
|
|
templatesCache[templateKey] = template;
|
|
};
|
|
|
|
HoganJsUtils.prototype._readFromCache = function(templateKey) {
|
|
return global.browserTemplates && global.browserTemplates[templateKey] || templatesCache[templateKey];
|
|
};
|
|
|
|
HoganJsUtils.prototype._templateKey = function(namespace, view) {
|
|
return namespace + '-' + view;
|
|
};
|
|
|
|
module.exports.HoganJsUtils = new HoganJsUtils();
|
|
|
|
})();
|