diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-03-22 10:54:47 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-03-22 10:59:25 +0100 |
commit | e07719a86c779c8777bae4969313023b37dc671e (patch) | |
tree | a46398a30357304e3a414fab34cf69aaf1ffa163 /lib/template | |
parent | fa5bee6ca374108ba806442cc7f7c422df8811c4 (diff) | |
download | gitbook-e07719a86c779c8777bae4969313023b37dc671e.zip gitbook-e07719a86c779c8777bae4969313023b37dc671e.tar.gz gitbook-e07719a86c779c8777bae4969313023b37dc671e.tar.bz2 |
Fix template search paths to use plugins listed first
Diffstat (limited to 'lib/template')
-rw-r--r-- | lib/template/fs-loader.js | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/lib/template/fs-loader.js b/lib/template/fs-loader.js index 00c4743..7f469bb 100644 --- a/lib/template/fs-loader.js +++ b/lib/template/fs-loader.js @@ -13,7 +13,7 @@ function isRelative(filename) { var Loader = nunjucks.Loader.extend({ init: function(searchPaths) { - this.searchPaths = searchPaths.map(path.normalize); + this.searchPaths = _.map(searchPaths, path.normalize); }, getSource: function(fullpath) { @@ -38,18 +38,37 @@ var Loader = nunjucks.Loader.extend({ }, resolve: function(from, to) { + var searchPaths = this.searchPaths; + // Relative template like "./test.html" if (isRelative(to) && from) { return path.resolve(path.dirname(from), to); } + // Determine in which search folder we currently are + var originalSearchPath = _.chain(this.searchPaths) + .sortBy(function(s) { + return -s.length; + }) + .find(function(basePath) { + return (from && from.indexOf(basePath) === 0); + }) + .value(); + var originalFilename = originalSearchPath? path.relative(originalSearchPath, from) : null; + + // If we are including same file from a different search path + // Slice the search paths to avoid including from previous ones + if (originalFilename == to) { + var currentIndex = searchPaths.indexOf(originalSearchPath); + searchPaths = searchPaths.slice(currentIndex + 1); + } + // Absolute template to resolve in root folder - var resultFolder = _.find(this.searchPaths, function(basePath) { + var resultFolder = _.find(searchPaths, function(basePath) { var p = path.resolve(basePath, to); return ( p.indexOf(basePath) === 0 - && p != from && fs.existsSync(p) ); }); |