var fs = require('fs'); var path = require('path'); var glob = require('glob'); var LiquidEngine = require('liquid-node').Engine; var liquid = new LiquidEngine(); /** * Manages templates. Only supports Mustache currently/ */ function OKTemplateRepo(options) { options = options || {}; this._root = options.root || 'www'; this._ext = options.ext || '.mustache'; this._cache = {}; this._populateCache(this._cache); } OKTemplateRepo.prototype.getTemplate = function getTemplate(name) { return this._cache[name]; } /** * Go through our template dir and read the template files * into memory as strings. * Assumes all templates fit into memory. */ OKTemplateRepo.prototype._populateCache = function _populateCache(cache) { var self = this; var files = glob.sync(this._root + '/*' + this._ext); files.forEach(function eachFile(file) { var name = path.basename(file, self._ext); var templateString = fs.readFileSync(file, {encoding: 'UTF8'}); cache[name] = { name: name, templateString: templateString, render: function(data) { // TODO Not sure if this caches parsed templates behind the scenes? return liquid.parseAndRender(templateString, data); } } }); } module.exports = OKTemplateRepo;