]>
git.wh0rd.org - tt-rss.git/blob - lib/dojo/_base/url.js.uncompressed.js
1 define("dojo/_base/url", ["./kernel"], function(dojo
){
6 ore
= new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
7 ire
= new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
12 // resolve uri components relative to each other
13 for(var i
= 1; i
<_a
.length
; i
++){
14 if(!_a
[i
]){ continue; }
16 // Safari doesn't support this.constructor so we have to be explicit
17 // FIXME: Tracked (and fixed) in Webkit bug 3537.
18 // http://bugs.webkit.org/show_bug.cgi?id=3537
19 var relobj
= new _Url(_a
[i
]+""),
20 uriobj
= new _Url(uri
[0]+"");
28 if(relobj
.fragment
!= n
){
29 uriobj
.fragment
= relobj
.fragment
;
32 }else if(!relobj
.scheme
){
33 relobj
.scheme
= uriobj
.scheme
;
35 if(!relobj
.authority
){
36 relobj
.authority
= uriobj
.authority
;
38 if(relobj
.path
.charAt(0) != "/"){
39 var path
= uriobj
.path
.substring(0,
40 uriobj
.path
.lastIndexOf("/") + 1) + relobj
.path
;
42 var segs
= path
.split("/");
43 for(var j
= 0; j
< segs
.length
; j
++){
45 // flatten "./" references
46 if(j
== segs
.length
- 1){
52 }else if(j
> 0 && !(j
== 1 && segs
[0] == "") &&
53 segs
[j
] == ".." && segs
[j
-1] != ".."){
54 // flatten "../" references
55 if(j
== (segs
.length
- 1)){
59 segs
.splice(j
- 1, 2);
64 relobj
.path
= segs
.join("/");
71 uri
.push(relobj
.scheme
, ":");
74 uri
.push("//", relobj
.authority
);
76 uri
.push(relobj
.path
);
78 uri
.push("?", relobj
.query
);
81 uri
.push("#", relobj
.fragment
);
85 this.uri
= uri
.join("");
87 // break the uri into its main components
88 var r
= this.uri
.match(ore
);
90 this.scheme
= r
[2] || (r
[1] ? "" : n
);
91 this.authority
= r
[4] || (r
[3] ? "" : n
);
92 this.path
= r
[5]; // can never be undefined
93 this.query
= r
[7] || (r
[6] ? "" : n
);
94 this.fragment
= r
[9] || (r
[8] ? "" : n
);
96 if(this.authority
!= n
){
97 // server based naming authority
98 r
= this.authority
.match(ire
);
100 this.user
= r
[3] || n
;
101 this.password
= r
[4] || n
;
102 this.host
= r
[6] || r
[7]; // ipv6 || ipv4
103 this.port
= r
[9] || n
;
106 _Url
.prototype.toString = function(){ return this.uri
; };
108 return dojo
._Url
= _Url
;