diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-09-15 12:22:54 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-09-15 12:22:54 +0200 |
commit | 2a52326a454a23444bd8f0395a9ab8a1f5f68831 (patch) | |
tree | cf5f447e84e3b4ac2d74d7092d8c522bd6e67b79 /lib/book.js | |
parent | 87e4ee1eeb9918cbf151407c66b3377014612d5d (diff) | |
download | gitbook-2a52326a454a23444bd8f0395a9ab8a1f5f68831.zip gitbook-2a52326a454a23444bd8f0395a9ab8a1f5f68831.tar.gz gitbook-2a52326a454a23444bd8f0395a9ab8a1f5f68831.tar.bz2 |
Improve conrefs to handle all absolute file paths correctly
Add test for it
Diffstat (limited to 'lib/book.js')
-rw-r--r-- | lib/book.js | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/lib/book.js b/lib/book.js index 980e505..08dd6dc 100644 --- a/lib/book.js +++ b/lib/book.js @@ -10,6 +10,7 @@ var fs = require("./utils/fs"); var parseNavigation = require("./utils/navigation"); var parseProgress = require("./utils/progress"); var pageUtil = require("./utils/page"); +var pathUtil = require("./utils/path"); var batch = require("./utils/batch"); var links = require("./utils/links"); var i18n = require("./utils/i18n"); @@ -636,8 +637,7 @@ Book.prototype.fileExists = function(filename) { // Check if a file path is inside the book Book.prototype.fileIsInBook = function(filename) { - filename = path.normalize(filename); - return (filename.substr(0, this.root.length) === this.root); + return pathUtil.isInRoot(this.root, filename); }; // Read a file @@ -716,26 +716,12 @@ Book.prototype.getConfig = function(key, def) { // Resolve a path in the book source // Enforce that the output path in the root folder Book.prototype.resolve = function() { - var input = _.chain(arguments) - .toArray() - .reduce(function(current, p) { - // Handle path relative to book root ('/README.md') - if (p[0] == '/' || p[0] == '\\') return p.slice(1); - - return path.join(current, p); - }) - .value(); - - - var result = path.resolve(this.root, input); - - if (!this.fileIsInBook(result)) { - err = new Error("EACCESS: '" + result + "' not in '" + this.root + "'"); - err.code = "EACCESS"; - throw err; - } + return pathUtil.resolveInRoot.apply(null, [this.root].concat(_.toArray(arguments))); +}; - return result +// Convert an abslute path into a relative path to this +Book.prototype.relative = function(p) { + return path.relative(this.root, p); }; // Normalize a path to .html and convert README -> index |