diff options
Diffstat (limited to 'web/path.js')
-rw-r--r-- | web/path.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/web/path.js b/web/path.js new file mode 100644 index 0000000..bb60c76 --- /dev/null +++ b/web/path.js @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2012-2014 Kaarle Ritvanen + * See LICENSE file for license details + */ + +define(["underscore"], function(_) { + function split(path) { + var res = []; + while (path && path != "/") { + var comp = path.match(/^\/([^\\\/]|\\.)+/)[0]; + res.push(comp.substring(1)); + path = path.substring(comp.length); + } + return res; + } + + function escape(name) { + if (!_.isString(name)) return String(name); + name = name.replace(/([\\\/])/g, "\\$1"); + if (isNaN(Number(name))) return name; + return "\\" + name; + } + + function join() { + var arg = _.toArray(arguments); + if (arg.length == 1) return arg[0]; + + var path = arg.shift(); + var name = arg.shift(); + + arg.unshift((path == "/" ? "" : path) + "/" + escape(name)); + + return join.apply(undefined, arg); + } + + return { + split: split, + join: join, + isSubordinate: function(p1, p2, real) { + p1 = split(p1); + p2 = split(p2); + if (real && p1.length <= p2.length) return false; + for (var i = 0; i < p2.length; i++) + if (p1[i] != p2[i]) return false; + return true; + } + }; +}); |