Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
John McEleney
/
casperjs
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
faf6a4fe
...
faf6a4feedad0165f7187ef2c689ab94db9b0973
authored
2012-10-31 20:40:28 +0100
by
Nicolas Perriault
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
removed obsolete vendor script
1 parent
60d03524
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
289 deletions
modules/vendors/URI.js
modules/vendors/URI.js
deleted
100644 → 0
View file @
60d0352
/*
* Copyright © 2007 Dominic Mitchell
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* Neither the name of the Dominic Mitchell nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* An URI datatype. Based upon examples in RFC3986.
*
* TODO %-escaping
* TODO split apart authority
* TODO split apart query_string (on demand, anyway)
* TODO handle parameters containing empty strings properly
* TODO keyword escaping
*
* @(#) $Id$
*/
// Globals we introduce.
var
URI
;
var
URIQuery
;
// Introduce a new scope to define some private helper functions.
(
function
()
{
//// HELPER FUNCTIONS /////
// RFC3986 §5.2.3 (Merge Paths)
function
merge
(
base
,
rel_path
)
{
var
dirname
=
/^
(
.*
)\/
/
;
if
(
base
.
authority
&&
!
base
.
path
)
{
return
"/"
+
rel_path
;
}
else
{
return
base
.
getPath
().
match
(
dirname
)[
0
]
+
rel_path
;
}
}
// Match two path segments, where the second is ".." and the first must
// not be "..".
var
DoubleDot
=
/
\/((?!\.\.\/)[^\/]
*
)\/\.\.\/
/
;
function
remove_dot_segments
(
path
)
{
if
(
!
path
)
{
return
""
;
}
// Remove any single dots
var
newpath
=
path
.
replace
(
/
\/\.\/
/g
,
'/'
);
// Remove any trailing single dots.
newpath
=
newpath
.
replace
(
/
\/\.
$/
,
'/'
);
// Remove any double dots and the path previous. NB: We can't use
// the "g", modifier because we are changing the string that we're
// matching over.
while
(
newpath
.
match
(
DoubleDot
))
{
newpath
=
newpath
.
replace
(
DoubleDot
,
'/'
);
}
// Remove any trailing double dots.
newpath
=
newpath
.
replace
(
/
\/([^\/]
*
)\/\.\.
$/
,
'/'
);
// If there are any remaining double dot bits, then they're wrong
// and must be nuked. Again, we can't use the g modifier.
while
(
newpath
.
match
(
/
\/\.\.\/
/
))
{
newpath
=
newpath
.
replace
(
/
\/\.\.\/
/
,
'/'
);
}
return
newpath
;
}
// give me an ordered list of keys of this object
function
hashkeys
(
obj
)
{
var
list
=
[];
for
(
var
key
in
obj
)
{
if
(
obj
.
hasOwnProperty
(
key
))
{
list
.
push
(
key
);
}
}
return
list
.
sort
();
}
// TODO: Make these do something
function
uriEscape
(
source
)
{
return
source
;
}
function
uriUnescape
(
source
)
{
return
source
;
}
//// URI CLASS /////
// Constructor for the URI object. Parse a string into its components.
// note that this 'exports' 'URI' to the 'global namespace'
URI
=
function
(
str
)
{
if
(
!
str
)
{
str
=
""
;
}
// Based on the regex in RFC2396 Appendix B.
var
parser
=
/^
(?:([^
:
\/
?
\#]
+
)
:
)?(?:\/\/([^\/
?
\#]
*
))?([^
?
\#]
*
)(?:\?([^\#]
*
))?(?:\#(
.*
))?
/
;
var
result
=
str
.
match
(
parser
);
// Keep the results in private variables.
var
scheme
=
result
[
1
]
||
null
;
var
authority
=
result
[
2
]
||
null
;
var
path
=
result
[
3
]
||
null
;
var
query
=
result
[
4
]
||
null
;
var
fragment
=
result
[
5
]
||
null
;
// Set up accessors.
this
.
getScheme
=
function
()
{
return
scheme
;
};
this
.
setScheme
=
function
(
newScheme
)
{
scheme
=
newScheme
;
};
this
.
getAuthority
=
function
()
{
return
authority
;
};
this
.
setAuthority
=
function
(
newAuthority
)
{
authority
=
newAuthority
;
};
this
.
getPath
=
function
()
{
return
path
;
};
this
.
setPath
=
function
(
newPath
)
{
path
=
newPath
;
};
this
.
getQuery
=
function
()
{
return
query
;
};
this
.
setQuery
=
function
(
newQuery
)
{
query
=
newQuery
;
};
this
.
getFragment
=
function
()
{
return
fragment
;
};
this
.
setFragment
=
function
(
newFragment
)
{
fragment
=
newFragment
;
};
};
// Restore the URI to it's stringy glory.
URI
.
prototype
.
toString
=
function
()
{
var
str
=
""
;
if
(
this
.
getScheme
())
{
str
+=
this
.
getScheme
()
+
":"
;
}
if
(
this
.
getAuthority
())
{
str
+=
"//"
+
this
.
getAuthority
();
}
if
(
this
.
getPath
())
{
str
+=
this
.
getPath
();
}
if
(
this
.
getQuery
())
{
str
+=
"?"
+
this
.
getQuery
();
}
if
(
this
.
getFragment
())
{
str
+=
"#"
+
this
.
getFragment
();
}
return
str
;
};
// RFC3986 §5.2.2. Transform References;
URI
.
prototype
.
resolve
=
function
(
base
)
{
var
target
=
new
URI
();
if
(
this
.
getScheme
())
{
target
.
setScheme
(
this
.
getScheme
());
target
.
setAuthority
(
this
.
getAuthority
());
target
.
setPath
(
remove_dot_segments
(
this
.
getPath
()));
target
.
setQuery
(
this
.
getQuery
());
}
else
{
if
(
this
.
getAuthority
())
{
target
.
setAuthority
(
this
.
getAuthority
());
target
.
setPath
(
remove_dot_segments
(
this
.
getPath
()));
target
.
setQuery
(
this
.
getQuery
());
}
else
{
// XXX Original spec says "if defined and empty"…;
if
(
!
this
.
getPath
())
{
target
.
setPath
(
base
.
getPath
());
if
(
this
.
getQuery
())
{
target
.
setQuery
(
this
.
getQuery
());
}
else
{
target
.
setQuery
(
base
.
getQuery
());
}
}
else
{
if
(
this
.
getPath
().
charAt
(
0
)
===
'/'
)
{
target
.
setPath
(
remove_dot_segments
(
this
.
getPath
()));
}
else
{
target
.
setPath
(
merge
(
base
,
this
.
getPath
()));
target
.
setPath
(
remove_dot_segments
(
target
.
getPath
()));
}
target
.
setQuery
(
this
.
getQuery
());
}
target
.
setAuthority
(
base
.
getAuthority
());
}
target
.
setScheme
(
base
.
getScheme
());
}
target
.
setFragment
(
this
.
getFragment
());
return
target
;
};
URI
.
prototype
.
parseQuery
=
function
()
{
return
URIQuery
.
fromString
(
this
.
getQuery
(),
this
.
querySeparator
);
};
//// URIQuery CLASS /////
URIQuery
=
function
()
{
this
.
params
=
{};
this
.
separator
=
"&"
;
};
URIQuery
.
fromString
=
function
(
sourceString
,
separator
)
{
var
result
=
new
URIQuery
();
if
(
separator
)
{
result
.
separator
=
separator
;
}
result
.
addStringParams
(
sourceString
);
return
result
;
};
// From http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
// (application/x-www-form-urlencoded).
//
// NB: The user can get this.params and modify it directly.
URIQuery
.
prototype
.
addStringParams
=
function
(
sourceString
)
{
var
kvp
=
sourceString
.
split
(
this
.
separator
);
var
list
,
key
,
value
;
for
(
var
i
=
0
;
i
<
kvp
.
length
;
i
++
)
{
// var [key,value] = kvp.split("=", 2) only works on >= JS 1.7
list
=
kvp
[
i
].
split
(
"="
,
2
);
key
=
uriUnescape
(
list
[
0
].
replace
(
/
\+
/g
,
" "
));
value
=
uriUnescape
(
list
[
1
].
replace
(
/
\+
/g
,
" "
));
if
(
!
this
.
params
.
hasOwnProperty
(
key
))
{
this
.
params
[
key
]
=
[];
}
this
.
params
[
key
].
push
(
value
);
}
};
URIQuery
.
prototype
.
getParam
=
function
(
key
)
{
if
(
this
.
params
.
hasOwnProperty
(
key
))
{
return
this
.
params
[
key
][
0
];
}
return
null
;
};
URIQuery
.
prototype
.
toString
=
function
()
{
var
kvp
=
[];
var
keys
=
hashkeys
(
this
.
params
);
var
ik
,
ip
;
for
(
ik
=
0
;
ik
<
keys
.
length
;
ik
++
)
{
for
(
ip
=
0
;
ip
<
this
.
params
[
keys
[
ik
]].
length
;
ip
++
)
{
kvp
.
push
(
keys
[
ik
].
replace
(
/ /g
,
"+"
)
+
"="
+
this
.
params
[
keys
[
ik
]][
ip
].
replace
(
/ /g
,
"+"
));
}
}
return
kvp
.
join
(
this
.
separator
);
};
})();
Please
register
or
sign in
to post a comment