From 5082f3cad3f8f730ab4cc21f6b6cdf05c37436dd Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Fri, 5 Jun 2015 15:01:01 -0400 Subject: Implement template reloading --- app/node_modules/oktemplate/index.js | 59 +++++++++++++++++++++++--------- app/node_modules/oktemplate/package.json | 1 + 2 files changed, 43 insertions(+), 17 deletions(-) (limited to 'app/node_modules') diff --git a/app/node_modules/oktemplate/index.js b/app/node_modules/oktemplate/index.js index f2c2e07..ae9d1b1 100644 --- a/app/node_modules/oktemplate/index.js +++ b/app/node_modules/oktemplate/index.js @@ -4,6 +4,7 @@ var path = require('path'); var glob = require('glob'); var stringify = require('json-to-html'); var Liquid = require('liquid-node'); +var chokidar = require('chokidar'); /** * Define any custom liquid filters here. @@ -40,19 +41,56 @@ var filters = { */ function OKTemplateRepo(options) { options = options || {}; + var self = this; var root = this._root = options.root || 'templates'; - var ext = 'liquid'; + // TODO Support more templates? + var ext = this._ext = 'liquid'; var cache = this._cache = {}; var engine = this._engine = new Liquid.Engine; + var debug = options.debug; + var globString = this._globString = root + '/*.' + ext engine.registerFilters(filters); engine.fileSystem = new Liquid.LocalFileSystem(root, ext); + this._populateCache(engine, cache, ext); + + if (debug) { + var watcher = chokidar.watch(globString); + watcher.on('change', reloadTemplate); + watcher.on('add', reloadTemplate); + } + + function reloadTemplate(path) { + self._loadTemplate(path); + } } OKTemplateRepo.prototype.getTemplate = function getTemplate(name) { return this._cache[name]; } +OKTemplateRepo.prototype._loadTemplate = function loadTemplate(filePath) { + var engine = this._engine + var name = path.basename(filePath, '.' + this._ext); + var templateString = fs.readFileSync(filePath, {encoding: 'UTF8'}); + if (!this._cache[name]) + this._cache[name] = {}; + + var template = this._cache[name] + template.name = name; + template.templateString = templateString; + template.render = render + + function render(data) { + return Q.promise(function(resolve, reject) { + // TODO Not sure if this caches parsed templates behind the scenes? + engine.parseAndRender(templateString, data) + .then(resolve) + .catch(reject); + }); + } +} + /** * Go through our template dir and read the template files * into memory as strings. @@ -60,22 +98,9 @@ OKTemplateRepo.prototype.getTemplate = function getTemplate(name) { */ OKTemplateRepo.prototype._populateCache = function _populateCache(engine, cache, ext) { var self = this; - var files = glob.sync(this._root + '/*.' + ext); - files.forEach(function eachFile(file) { - var name = path.basename(file, '.' + ext); - var templateString = fs.readFileSync(file, {encoding: 'UTF8'}); - cache[name] = { - name: name, - templateString: templateString, - render: function(data) { - return Q.promise(function(resolve, reject) { - // TODO Not sure if this caches parsed templates behind the scenes? - engine.parseAndRender(templateString, data) - .then(resolve) - .catch(reject); - }); - } - } + var files = glob.sync(this._globString); + files.forEach(function eachFile(path) { + self._loadTemplate(path); }); } diff --git a/app/node_modules/oktemplate/package.json b/app/node_modules/oktemplate/package.json index 70e94e3..61d90e8 100644 --- a/app/node_modules/oktemplate/package.json +++ b/app/node_modules/oktemplate/package.json @@ -10,6 +10,7 @@ "license": "None", "dependencies": { "bluebird": "^2.9.21", + "chokidar": "^1.0.3", "glob": "^5.0.3", "json-to-html": "^0.1.2", "liquid-node": "^2.5.0", -- cgit v1.2.3-70-g09d2