diff options
-rw-r--r-- | components/script/dom/htmlcollection.rs | 24 | ||||
-rw-r--r-- | components/script/dom/htmlfieldsetelement.rs | 7 |
2 files changed, 11 insertions, 20 deletions
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs index 8a95b558793..86f977c843a 100644 --- a/components/script/dom/htmlcollection.rs +++ b/components/script/dom/htmlcollection.rs @@ -16,7 +16,7 @@ use servo_util::namespace; use servo_util::str::{DOMString, split_html_space_chars}; use std::ascii::AsciiExt; -use std::iter::FilterMap; +use std::iter::{FilterMap, Skip}; use string_cache::{Atom, Namespace}; pub trait CollectionFilter : JSTraceable { @@ -63,10 +63,7 @@ impl HTMLCollection { namespace_filter: Option<Namespace> } impl CollectionFilter for AllElementFilter { - fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool { - if NodeCast::from_ref(elem) == root { - return false - } + fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool { match self.namespace_filter { None => true, Some(ref namespace) => *elem.namespace() == *namespace @@ -89,10 +86,7 @@ impl HTMLCollection { ascii_lower_tag: Atom, } impl CollectionFilter for TagNameFilter { - fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool { - if NodeCast::from_ref(elem) == root { - return false - } + fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool { if elem.html_element_in_html_document() { *elem.local_name() == self.ascii_lower_tag } else { @@ -123,10 +117,7 @@ impl HTMLCollection { namespace_filter: Option<Namespace> } impl CollectionFilter for TagNameNSFilter { - fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool { - if NodeCast::from_ref(elem) == root { - return false - } + fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool { let ns_match = match self.namespace_filter { Some(ref namespace) => { *elem.namespace() == *namespace @@ -150,8 +141,8 @@ impl HTMLCollection { classes: Vec<Atom> } impl CollectionFilter for ClassNameFilter { - fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool { - (NodeCast::from_ref(elem) != root) && self.classes.iter().all(|class| elem.has_class(class)) + fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool { + self.classes.iter().all(|class| elem.has_class(class)) } } let filter = ClassNameFilter { @@ -176,8 +167,9 @@ impl HTMLCollection { fn traverse<'a>(root: JSRef<'a, Node>) -> FilterMap<'a, JSRef<'a, Node>, JSRef<'a, Element>, - TreeIterator<'a>> { + Skip<TreeIterator<'a>>> { root.traverse_preorder() + .skip(1) .filter_map(ElementCast::to_ref) } } diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs index 1dfdaa063b9..3ed4a82200c 100644 --- a/components/script/dom/htmlfieldsetelement.rs +++ b/components/script/dom/htmlfieldsetelement.rs @@ -6,7 +6,7 @@ use dom::attr::Attr; use dom::attr::AttrHelpers; use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding; use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding::HTMLFieldSetElementMethods; -use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLFieldSetElementDerived, NodeCast}; +use dom::bindings::codegen::InheritTypes::{HTMLFieldSetElementDerived, NodeCast}; use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLLegendElementDerived}; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector}; @@ -54,11 +54,10 @@ impl<'a> HTMLFieldSetElementMethods for JSRef<'a, HTMLFieldSetElement> { #[jstraceable] struct ElementsFilter; impl CollectionFilter for ElementsFilter { - fn filter<'a>(&self, elem: JSRef<'a, Element>, root: JSRef<'a, Node>) -> bool { + fn filter<'a>(&self, elem: JSRef<'a, Element>, _root: JSRef<'a, Node>) -> bool { static TAG_NAMES: StaticStringVec = &["button", "fieldset", "input", "keygen", "object", "output", "select", "textarea"]; - let root: JSRef<Element> = ElementCast::to_ref(root).unwrap(); - elem != root && TAG_NAMES.iter().any(|&tag_name| tag_name == elem.local_name().as_slice()) + TAG_NAMES.iter().any(|&tag_name| tag_name == elem.local_name().as_slice()) } } let node: JSRef<Node> = NodeCast::from_ref(self); |