art-standard-lib
Version:
The Standard Library for JavaScript that aught to be.
133 lines (116 loc) • 4.24 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var ParseUrl, compactFlatten, escapeRegExp, findUrlOrigin, ref,
slice = [].slice;
ref = require('./RegExpExtensions'), escapeRegExp = ref.escapeRegExp, findUrlOrigin = ref.findUrlOrigin;
compactFlatten = require('./Core').compactFlatten;
module.exports = ParseUrl = (function() {
var generateQuery, parsedGlobalQuery;
function ParseUrl() {}
parsedGlobalQuery = null;
ParseUrl.sameOrigin = function(url, origin) {
var ref1, ref2;
if (origin == null) {
origin = (ref1 = global.document) != null ? (ref2 = ref1.location) != null ? ref2.origin : void 0 : void 0;
}
origin = origin.match(findUrlOrigin)[0];
return RegExp("^((" + (escapeRegExp(origin)) + ")|(?![a-z]+\\:))", "i").test(url);
};
ParseUrl.parseQuery = function(qs) {
var i, isCurrentLocation, j, key, len, obj, pair, ref1, ref2, val;
if ((isCurrentLocation = qs == null) && parsedGlobalQuery) {
return parsedGlobalQuery;
}
qs || (qs = ((ref1 = global.location) != null ? ref1.search : void 0) || "");
obj = {};
ref2 = qs.replace(/^\?/, '').split('&');
for (j = 0, len = ref2.length; j < len; j++) {
pair = ref2[j];
if ((i = pair.indexOf('=')) >= 0) {
key = pair.slice(0, i);
val = pair.slice(i + 1);
if (key.length > 0) {
obj[key] = decodeURIComponent(val);
}
} else {
obj[pair] = true;
}
}
if (isCurrentLocation) {
parsedGlobalQuery = obj;
}
return obj;
};
ParseUrl.generateQuery = generateQuery = function(o) {
var k, parts, v;
parts = (function() {
var results;
results = [];
for (k in o) {
v = o[k];
if (v != null) {
results.push((encodeURIComponent(k)) + "=" + (encodeURIComponent(v)));
}
}
return results;
})();
return parts.join("&");
};
ParseUrl.urlJoin = function() {
var paths, uri;
uri = arguments[0], paths = 2 <= arguments.length ? slice.call(arguments, 1) : [];
return uri.replace(/\/+$/, '') + '/' + (paths.join('/').replace(/\/\/+/, '\/')).replace(/^\/+/, '');
};
ParseUrl.urlResolve = function() {
var concatPaths, paths, uri;
uri = arguments[0], paths = 2 <= arguments.length ? slice.call(arguments, 1) : [];
concatPaths = paths.join('/').replace(/\/\/+/, '\/');
if (/^\//.test(paths[0])) {
return new URL(concatPaths, uri).href;
} else {
return (uri.replace(/\/$/, '')) + "/" + concatPaths;
}
};
ParseUrl.appendQuery = function(uri, o) {
var str;
if ((o != null) && (str = generateQuery(o)).length > 0) {
return "" + uri + (uri.match(/\?/) ? "&" : "?") + str;
} else {
return uri;
}
};
ParseUrl.parseUrl = function(url) {
var __, a, anchor, fileName, host, hostWithPort, m, password, path, pathName, port, protocol, query, username;
m = url.match(/(([A-Za-z]+):(\/\/)?)?(([\-;&=\+\$,\w]+)(:([\-;:&=\+\$,\w]+))?@)?([A-Za-z0-9\.\-]+)(:([0-9]+))?(\/[\+~%\/\.\w\-]*)?(\?([\-\+=&;%@\.\w,]*))?(\#([\.\!\/\\\w]*))?/);
if (!m) {
return void 0;
}
__ = m[0], __ = m[1], protocol = m[2], __ = m[3], __ = m[4], username = m[5], __ = m[6], password = m[7], host = m[8], __ = m[9], port = m[10], pathName = m[11], __ = m[12], query = m[13], __ = m[14], anchor = m[15];
if (pathName) {
a = pathName.split("/");
fileName = a[a.length - 1];
path = (a.slice(0, a.length - 1)).join("/");
}
host = host.toLowerCase();
hostWithPort = host;
if (port) {
hostWithPort += ":" + port;
}
return {
protocol: protocol,
username: username,
password: password,
hostWithPort: hostWithPort,
host: host,
port: port,
pathName: pathName,
path: path,
fileName: fileName,
query: query && ParseUrl.parseQuery(query),
anchor: anchor
};
};
return ParseUrl;
})();
}).call(this);
//# sourceMappingURL=ParseUrl.js.map