##// END OF EJS Templates
added markRelease task
added markRelease task

File last commit:

r65:0c74a0572161 v1.2.13 default
r68:bed8af5ffbac v1.2.15 default
Show More
Uri.js
235 lines | 6.1 KiB | application/javascript | JavascriptLexer
define(["dojo/_base/declare", "./log/trace!"], function (declare, trace) {
trace.warn("THIS MODULE IS DEPRECATED! use uri-js or similar alternatives.");
function parseURI(uri) {
var schema, host, port, path, query, hash, i;
if (typeof (uri) == "string") {
if ((i = uri.indexOf(":")) >= 0 &&
uri.substr(0, i).match(/^\w+$/)) {
schema = uri.substr(0, i);
uri = uri.substr(i + 1);
}
if (uri.indexOf("//") === 0) {
uri = uri.substr(2);
if ((i = uri.indexOf("/")) >= 0) {
host = uri.substr(0, i);
uri = uri.substr(i);
} else {
host = uri;
uri = "";
}
}
if ((i = uri.indexOf("?")) >= 0) {
path = uri.substr(0, i);
uri = uri.substr(i + 1);
} else {
path = uri;
uri = "";
if ((i = path.indexOf("#")) >= 0) {
hash = path.substr(i + 1);
path = path.substr(0, i);
}
}
if ((i = uri.indexOf("#")) >= 0) {
query = uri.substr(0, i);
hash = uri.substr(i + 1);
} else {
query = uri;
}
}
if (host && (i = host.lastIndexOf(":")) >= 0) {
port = host.substr(i + 1);
host = host.substr(0, i);
}
return {
schema: schema,
host: host,
port: port,
path: path,
query: query,
hash: hash
};
}
function makeURI(options) {
var uri = [];
if (options.schema)
uri.push(options.schema, ":");
if (options.host)
uri.push("//", options.host);
if (options.host && options.port)
uri.push(":", options.port);
if (options.path) {
if (options.host && options.path[0] != "/")
uri.push("/");
uri.push(options.path);
} else if (options.host) {
uri.push("/");
}
if (options.query)
uri.push("?", options.query);
if (options.hash)
uri.push("#", options.hash);
return uri.join("");
}
function reducePath(parts) {
var balance = 0,
result = [],
isRoot;
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
switch (part) {
case "..":
if (balance > 0) {
result.pop();
} else {
if (isRoot)
throw new Error("Unbalanced path: " + parts);
result.push(part);
}
balance--;
break;
case ".":
break;
case "":
if (i === 0) {
isRoot = true;
result.push(part);
}
break;
default:
result.push(part);
balance++;
break;
}
}
return result.join("/");
}
var meta = {
schema: null,
host: null,
port: null,
path: null,
query: null,
hash: null
};
var URI = declare(null, {
constructor: function (opts) {
trace.warn("This class is deprecated use uri-js or similar");
if (typeof (opts) == "string")
opts = parseURI(opts);
for (var p in meta)
if (p in opts)
this[p] = opts[p];
},
clone: function () {
return new URI(this);
},
combine: function (rel) {
var me = this;
if (typeof (rel) === "string")
rel = new URI(rel);
else
rel = rel.clone();
// //some.host:123/path?q=a#123
if (rel.host)
return rel;
// /abs/path?q=a#123
if (rel.path && rel.path[0] == "/") {
if (me.host) {
rel.schema = me.schema;
rel.host = me.host;
rel.port = me.port;
}
return rel;
}
var base = me.clone();
// rel/path?a=b#cd
if (rel.path) {
var segments = base.getSegments();
segments.pop();
segments.push.apply(segments, rel.getSegments());
base.path = reducePath(segments);
}
// ?q=a#123
if (rel.query)
base.query = rel.query;
if (rel.hash)
base.hase = rel.hash;
return base;
},
optimize: function () {
this.path = reducePath(this.getSegments());
},
getSegments: function () {
if (typeof (this.path) === "string")
return this.path.split("/");
else
return [];
},
toString: function () {
var uri = [],
me = this;
if (me.schema)
uri.push(me.schema, ":");
if (me.host)
uri.push("//", me.host);
if (me.host && me.port)
uri.push(":", me.port);
if (me.path) {
if (me.host && me.path[0] != "/")
uri.push("/");
uri.push(me.path);
} else if (me.host) {
uri.push("/");
}
if (me.query)
uri.push("?", me.query);
if (me.hash)
uri.push("#", me.hash);
return uri.join("");
}
});
URI.combine = function (base, rel) {
if (typeof (base) === "string")
base = new URI(base);
return base.combine(rel).toString();
};
return URI;
});