diff options
Diffstat (limited to 'lib/template.js')
-rw-r--r-- | lib/template.js | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/lib/template.js b/lib/template.js index 315a373..76bb9ab 100644 --- a/lib/template.js +++ b/lib/template.js @@ -1,15 +1,50 @@ var _ = require("lodash"); var Q = require("q"); +var path = require("path"); var nunjucks = require("nunjucks"); +var git = require("./utils/git"); +var fs = require("./utils/fs"); var pkg = require("../package.json"); + +// The loader should handle relative and git url +var BookLoader = nunjucks.Loader.extend({ + async: true, + + init: function(book) { + this.book = book; + }, + + getSource: function(fileurl, callback) { + var that = this; + + git.resolveFile(fileurl) + .then(function(filepath) { + // Is local file + if (!filepath) filepath = path.resolve(that.book.root, fileurl); + else that.book.logDebug("resolve from git", fileurl, "to", filepath) + + // Read file from absolute path + return fs.readFile(filepath) + .then(function(source) { + return { + src: source.toString(), + path: filepath + } + }); + }) + .nodeify(callback); + } +}); + + var TemplateEngine = function(book) { this.book = book; // Nunjucks env this.env = new nunjucks.Environment( - new nunjucks.FileSystemLoader(book.root), + new BookLoader(book), { // Escaping is done after by the markdown parser autoescape: false |