summaryrefslogtreecommitdiffstats
path: root/web/path.js
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-06 12:01:31 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-12 12:38:31 +0200
commit8991a77656de2e904087832df646e5dfd20b05a4 (patch)
tree0d4cb6e609f1517e902d426d80fd52b380977880 /web/path.js
parent1b328cbc26315577c0e27af6e63514ea762a8d7f (diff)
downloadaconf-8991a77656de2e904087832df646e5dfd20b05a4.tar.bz2
aconf-8991a77656de2e904087832df646e5dfd20b05a4.tar.xz
web client: path module
Diffstat (limited to 'web/path.js')
-rw-r--r--web/path.js48
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;
+ }
+ };
+});