summaryrefslogtreecommitdiffstats
path: root/lib/book.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-09-15 12:22:54 +0200
committerSamy Pessé <samypesse@gmail.com>2015-09-15 12:22:54 +0200
commit2a52326a454a23444bd8f0395a9ab8a1f5f68831 (patch)
treecf5f447e84e3b4ac2d74d7092d8c522bd6e67b79 /lib/book.js
parent87e4ee1eeb9918cbf151407c66b3377014612d5d (diff)
downloadgitbook-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.js28
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