forked from websanova/js-url
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjs-url.js
78 lines (66 loc) · 2.67 KB
/
js-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
68
69
70
71
72
73
74
75
76
77
78
/******************************************
* Websanova.com
*
* Resources for web entrepreneurs
*
* @author Websanova
* @copyright Copyright (c) 2012 Websanova.
* @license This websanova JavaScript url is dual licensed under the MIT and GPL licenses.
* @link http://www.websanova.com
* @github http://github.com/websanova/js-url
* @version 1.7.1
*
******************************************/
window.url = (function() {
function isNumeric(arg) {
return !isNaN(parseFloat(arg)) && isFinite(arg);
}
return function url(arg, url) {
var _ls = url || window.location.toString();
if(_ls.substring(0,2) === '//') _ls = 'http:' + _ls;
else if(_ls.split('://').length === 1) _ls = 'http://' + _ls;
url = _ls.split('/');
var _l = {auth:''}, host = url[2].split('@');
if(host.length === 1) host = host[0].split(':');
else{ _l.auth = host[0]; host = host[1].split(':'); }
_l.protocol=url[0], _l.hostname=host[0], _l.port=(host[1]||'80'), _l.pathname='/' + url.slice(3, url.length).join('/').split('?')[0];
var _p = _l.pathname;
if(_p.split('.').length === 1 && _p[_p.length-1] !== '/') _p += '/';
var _h = _l.hostname, _hs = _h.split('.'), _ps = _p.split('/');
if(!arg) return _ls;
else if(arg === 'hostname') return _h;
else if(arg === 'domain') return _hs.slice(-2).join('.');
else if(arg === 'tld') return _hs.slice(-1).join('.');
else if(arg === 'sub') return _hs.slice(0, _hs.length - 2).join('.');
else if(arg === 'port') return _l.port || '80';
else if(arg === 'protocol') return _l.protocol.split(':')[0];
else if(arg === 'auth') return _l.auth;
else if(arg === 'user') return _l.auth.split(':')[0];
else if(arg === 'pass') return _l.auth.split(':')[1] || '';
else if(arg === 'path') return _p;
else if(arg[0] === '.')
{
arg = arg.substring(1);
if(isNumeric(arg)) {arg = parseInt(arg); return _hs[arg < 0 ? _hs.length + arg : arg-1] || ''; }
}
else if(isNumeric(arg)){ arg = parseInt(arg); return _ps[arg < 0 ? _ps.length + arg : arg] || ''; }
else if(arg === 'file') return _ps.slice(-1)[0];
else if(arg === 'filename') return _ps.slice(-1)[0].split('.')[0];
else if(arg === 'fileext') return _ps.slice(-1)[0].split('.')[1] || '';
else if(arg[0] === '?' || arg[0] === '#')
{
var params = _ls, param = null;
if(arg[0] === '?') params = (params.split('?')[1] || '').split('#')[0];
else if(arg[0] === '#') params = (params.split('#')[1] || '');
if(!arg[1]) return params;
arg = arg.substring(1);
params = params.split('&');
for(var i=0,ii=params.length; i<ii; i++)
{
param = params[i].split('=');
if(param[0] === arg) return param[1];
}
}
return '';
}
})();