summaryrefslogtreecommitdiffstats
path: root/theme/javascript/utils/path.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2014-04-25 15:12:19 +0200
committerSamy Pessé <samypesse@gmail.com>2014-04-25 15:12:19 +0200
commit47e9506397afb37fea8f164e1fc41b625fdcd1bc (patch)
tree4a40ace0ca658c8b9cb72095f275f35bdd9459dc /theme/javascript/utils/path.js
parentb8a3d0e254f4e4a52fa21fa729b44a708373514c (diff)
downloadgitbook-47e9506397afb37fea8f164e1fc41b625fdcd1bc.zip
gitbook-47e9506397afb37fea8f164e1fc41b625fdcd1bc.tar.gz
gitbook-47e9506397afb37fea8f164e1fc41b625fdcd1bc.tar.bz2
Fix #153 and Improve pushState navigation
Diffstat (limited to 'theme/javascript/utils/path.js')
-rw-r--r--theme/javascript/utils/path.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/theme/javascript/utils/path.js b/theme/javascript/utils/path.js
new file mode 100644
index 0000000..2f4c49e
--- /dev/null
+++ b/theme/javascript/utils/path.js
@@ -0,0 +1,47 @@
+define([], function() {
+ // Joins path segments. Preserves initial "/" and resolves ".." and "."
+ // Does not support using ".." to go above/outside the root.
+ // This means that join("foo", "../../bar") will not resolve to "../bar"
+ function join(/* path segments */) {
+ // Split the inputs into a list of path commands.
+ var parts = [];
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ parts = parts.concat(arguments[i].split("/"));
+ }
+ // Interpret the path commands to get the new resolved path.
+ var newParts = [];
+ for (i = 0, l = parts.length; i < l; i++) {
+ var part = parts[i];
+ // Remove leading and trailing slashes
+ // Also remove "." segments
+ if (!part || part === ".") continue;
+ // Interpret ".." to pop the last segment
+ if (part === "..") newParts.pop();
+ // Push new path segments.
+ else newParts.push(part);
+ }
+ // Preserve the initial slash if there was one.
+ if (parts[0] === "") newParts.unshift("");
+ // Turn back into a single string path.
+ return newParts.join("/") || (newParts.length ? "/" : ".");
+ }
+
+ // A simple function to get the dirname of a path
+ // Trailing slashes are ignored. Leading slash is preserved.
+ function dirname(path) {
+ return join(path, "..");
+ }
+
+ // test if a path or url is absolute
+ function isAbsolute(path) {
+ if (!path) return false;
+
+ return (path[0] == "/" || path.indexOf("http://") == 0 || path.indexOf("https://") == 0);
+ }
+
+ return {
+ dirname: dirname,
+ join: join,
+ isAbsolute: isAbsolute
+ };
+}) \ No newline at end of file