-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathurl.js
67 lines (57 loc) · 1.22 KB
/
url.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
var schemeRe = /^(?:[a-z]+:)?\/\//i;
var selfDirRe = /\/[\.]{1,2}\//;
function _normalizeUrl(url) {
// fast path if no ./ or ../ are present in the url
if (!selfDirRe.test(url)) {
return url;
}
var newUrl = [];
var oldUrl = url.split("/");
for (var i = 0, l = oldUrl.length; i < l; i++) {
if (oldUrl[i] == "..") {
newUrl.pop();
} else if (oldUrl[i] == ".") {
continue;
} else {
newUrl.push(oldUrl[i]);
}
}
return newUrl.join("/");
}
function resolveURL() {
var len = arguments.length;
if (len === 0)
return "";
var base = "";
for (var i = 0; i < len; i++) {
var part = arguments[i];
if (typeof part !== "string" || part === "") {
continue;
}
if (schemeRe.test(part)) {
base = part;
}
else {
if (part[0] === "/") {
part = part.substr(1);
}
if (base[base.length - 1] === "/") {
base = base.substr(0, base.length - 1);
}
base = base + "/" + part;
}
}
return _normalizeUrl(base);
}
function parseBaseURL(url) {
var slash = url.lastIndexOf("/");
if (slash >= 0) {
return url.substring(0, slash + 1);
} else {
return url;
}
}
module.exports = {
resolveURL,
parseBaseURL,
};