diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-06 12:01:31 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-12 12:38:31 +0200 |
commit | 8991a77656de2e904087832df646e5dfd20b05a4 (patch) | |
tree | 0d4cb6e609f1517e902d426d80fd52b380977880 /web/path.js | |
parent | 1b328cbc26315577c0e27af6e63514ea762a8d7f (diff) | |
download | aconf-8991a77656de2e904087832df646e5dfd20b05a4.tar.bz2 aconf-8991a77656de2e904087832df646e5dfd20b05a4.tar.xz |
web client: path module
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; + } + }; +}); |