URL comparison

Background reading: http://dev.w3.org/csswg/selectors/#local-pseudo
and http://url.spec.whatwg.org/

:local-link() seems like a special case API for doing URL comparison
within the context of selectors. It seems like a great feature, but
I'd like it if we could agree on common comparison rules so that when
we eventually introduce the JavaScript equivalent they're not wildly

Requests I've heard before I looked at :local-link():

* Simple equality
* Ignore fragment
* Ignore fragment and query
* Compare query, but ignore order (e.g. ?x&y will be identical to
?y&x, which is normally not the case)
* Origin equality (ignores username/password/path/query/fragment)
* Further normalization (browsers don't normalize as much as they
could during parsing, but maybe this should be an operation to modify
the URL object rather than a comparison option)

:local-link() seems to ask for: Ignore fragment and query and only
look at a subset of path segments. However, :local-link() also ignores
port/scheme which is not typical. We try to keep everything
origin-scoped (ignoring username/password probably makes sense).
Furthermore, :local-link() ignores a final empty path segment, which
seems to mimic some popular server architectures (although those
ignore most empty path segments, not just the final), but does not
match URL architecture.

For JavaScript I think the basic API will have to be something like:

url.equals(url2, {query:"ignore-order"})
url.equals(url2, {query:"ignore-order", upto:"fragment"}) // ignores fragment
url.equals(url2, {upto:"path"}) // compares everything before path,
including username/password
url.origin == url2.origin // ignores username/password
url.equals(url2, {pathSegments:2}) // implies ignoring query/fragment

or some such. Better ideas more than welcome.


Received on Thursday, 25 April 2013 11:34:45 UTC