diff options
Diffstat (limited to 'lib/output/conrefs.js')
-rw-r--r-- | lib/output/conrefs.js | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/lib/output/conrefs.js b/lib/output/conrefs.js index 2883c7b..fb2d5bb 100644 --- a/lib/output/conrefs.js +++ b/lib/output/conrefs.js @@ -1,7 +1,9 @@ var util = require('util'); +var path = require('path'); var Output = require('./base'); var Git = require('../utils/git'); +var fs = require('../utils/fs'); var pathUtil = require('../utils/path'); /* @@ -14,9 +16,52 @@ function ConrefsLoader() { } util.inherits(ConrefsLoader, Output); -// Resolve an include in the template engine +// Read a template by its source URL +ConrefsLoader.prototype.onGetTemplate = function(sourceURL) { + var that = this; + + return this.git.resolve(sourceURL) + .then(function(filepath) { + // Is local file + if (!filepath) { + filepath = that.book.resolve(sourceURL); + } else { + that.book.log.debug.ln('resolve from git', sourceURL, 'to', filepath); + } + + // Read file from absolute path + return fs.readFile(filepath) + .then(function(source) { + return source.toString('utf8'); + //return that.engine.interpolate(filepath, source); + }) + .then(function(source) { + return { + src: source, + path: filepath + }; + }); + }); +}; + +// Generate a source URL for a template ConrefsLoader.prototype.onResolveTemplate = function(from, to) { + // If origin is in the book, we enforce result file to be in the book + if (this.book.isInBook(from)) { + return this.book.resolve( + this.book.relative(path.dirname(from)), + to + ); + } + + // If origin is in a git repository, we resolve file in the git repository + var gitRoot = this.git.resolveRoot(from); + if (gitRoot) { + return pathUtil.resolveInRoot(gitRoot, to); + } + // If origin is not in the book (include from a git content ref) + return path.resolve(path.dirname(from), to); }; module.exports = ConrefsLoader; |