diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2014-07-09 14:30:30 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2014-07-09 14:30:30 -0700 |
commit | 10a0f984c3c92cc83bed6e5ac73cce6db80985b9 (patch) | |
tree | 23e5e4d08a9028d543c93d29769f85feda12c21b /src/components/script/dom/node.rs | |
parent | cb7828c76e29aa6a13cc95275b5b3847bf9fa2d4 (diff) | |
parent | b6edd5318f3fe5c751d1c011e87adbfe0cac4fcc (diff) | |
download | servo-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.rs | 23 |
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, |