]>
git.wh0rd.org - tt-rss.git/blob - lib/dojo/_base/url.js.uncompressed.js
1 define("dojo/_base/url", ["./kernel"], function(dojo
) {
5 // This module contains dojo._Url
8 ore
= new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
9 ire
= new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
14 // resolve uri components relative to each other
15 for(var i
= 1; i
<_a
.length
; i
++){
16 if(!_a
[i
]){ continue; }
18 // Safari doesn't support this.constructor so we have to be explicit
19 // FIXME: Tracked (and fixed) in Webkit bug 3537.
20 // http://bugs.webkit.org/show_bug.cgi?id=3537
21 var relobj
= new _Url(_a
[i
]+""),
22 uriobj
= new _Url(uri
[0]+"");
30 if(relobj
.fragment
!= n
){
31 uriobj
.fragment
= relobj
.fragment
;
34 }else if(!relobj
.scheme
){
35 relobj
.scheme
= uriobj
.scheme
;
37 if(!relobj
.authority
){
38 relobj
.authority
= uriobj
.authority
;
40 if(relobj
.path
.charAt(0) != "/"){
41 var path
= uriobj
.path
.substring(0,
42 uriobj
.path
.lastIndexOf("/") + 1) + relobj
.path
;
44 var segs
= path
.split("/");
45 for(var j
= 0; j
< segs
.length
; j
++){
47 // flatten "./" references
48 if(j
== segs
.length
- 1){
54 }else if(j
> 0 && !(j
== 1 && segs
[0] == "") &&
55 segs
[j
] == ".." && segs
[j
-1] != ".."){
56 // flatten "../" references
57 if(j
== (segs
.length
- 1)){
61 segs
.splice(j
- 1, 2);
66 relobj
.path
= segs
.join("/");
73 uri
.push(relobj
.scheme
, ":");
76 uri
.push("//", relobj
.authority
);
78 uri
.push(relobj
.path
);
80 uri
.push("?", relobj
.query
);
83 uri
.push("#", relobj
.fragment
);
87 this.uri
= uri
.join("");
89 // break the uri into its main components
90 var r
= this.uri
.match(ore
);
92 this.scheme
= r
[2] || (r
[1] ? "" : n
);
93 this.authority
= r
[4] || (r
[3] ? "" : n
);
94 this.path
= r
[5]; // can never be undefined
95 this.query
= r
[7] || (r
[6] ? "" : n
);
96 this.fragment
= r
[9] || (r
[8] ? "" : n
);
98 if(this.authority
!= n
){
99 // server based naming authority
100 r
= this.authority
.match(ire
);
102 this.user
= r
[3] || n
;
103 this.password
= r
[4] || n
;
104 this.host
= r
[6] || r
[7]; // ipv6 || ipv4
105 this.port
= r
[9] || n
;
108 _Url
.prototype.toString = function(){ return this.uri
; };
110 return dojo
._Url
= _Url
;