aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/node.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2014-07-09 14:30:30 -0700
committerPatrick Walton <pcwalton@mimiga.net>2014-07-09 14:30:30 -0700
commit10a0f984c3c92cc83bed6e5ac73cce6db80985b9 (patch)
tree23e5e4d08a9028d543c93d29769f85feda12c21b /src/components/script/dom/node.rs
parentcb7828c76e29aa6a13cc95275b5b3847bf9fa2d4 (diff)
parentb6edd5318f3fe5c751d1c011e87adbfe0cac4fcc (diff)
downloadservo-10a0f984c3c92cc83bed6e5ac73cce6db80985b9.tar.gz
servo-10a0f984c3c92cc83bed6e5ac73cce6db80985b9.zip
Merge pull request #2772 from saneyuki/match
Implement Element.matches().
Diffstat (limited to 'src/components/script/dom/node.rs')
-rw-r--r--src/components/script/dom/node.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index 9892f0b5f27..b7904dd9ca8 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -396,6 +396,7 @@ pub trait NodeHelpers {
fn query_selector_all(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>>;
fn remove_self(&self);
+ fn matches(&self, selectors: DOMString) -> Fallible<bool>;
}
impl<'a> NodeHelpers for JSRef<'a, Node> {
@@ -648,6 +649,28 @@ impl<'a> NodeHelpers for JSRef<'a, Node> {
None => ()
}
}
+
+ // http://dom.spec.whatwg.org/#dom-element-matches
+ fn matches(&self, selectors: DOMString) -> Fallible<bool> {
+ assert!(self.is_element());
+ // Step 1.
+ let namespace = NamespaceMap::new();
+ match parse_selector_list(tokenize(selectors.as_slice()).map(|(token, _)| token).collect(), &namespace) {
+ // Step 2.
+ None => return Err(Syntax),
+ // Step 3.
+ Some(ref selectors) => {
+ for selector in selectors.iter() {
+ assert!(selector.pseudo_element.is_none());
+ let mut _shareable: bool = false;
+ if matches_compound_selector(selector.compound_selectors.deref(), self, &mut _shareable) {
+ return Ok(true);
+ }
+ }
+ }
+ }
+ Ok(false)
+ }
}
/// If the given untrusted node address represents a valid DOM node in the given runtime,