diff options
author | Ms2ger <ms2ger@gmail.com> | 2015-03-30 14:12:20 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2015-04-02 13:07:51 +0200 |
commit | c8106da277faf76e612a4e88d0d2e5f9fbe9f885 (patch) | |
tree | 16f4de451b3f17de355e793c3d106fce8f477a71 /components/script/dom/htmlfieldsetelement.rs | |
parent | bc8ed81dc1c7d37209693461bcd24d8ea386597c (diff) | |
download | servo-c8106da277faf76e612a4e88d0d2e5f9fbe9f885.tar.gz servo-c8106da277faf76e612a4e88d0d2e5f9fbe9f885.zip |
Rewrite NodeChildrenIterator to return Temporary.
Diffstat (limited to 'components/script/dom/htmlfieldsetelement.rs')
-rw-r--r-- | components/script/dom/htmlfieldsetelement.rs | 72 |
1 files changed, 43 insertions, 29 deletions
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs index 7ed7455581e..39088810eab 100644 --- a/components/script/dom/htmlfieldsetelement.rs +++ b/components/script/dom/htmlfieldsetelement.rs @@ -8,7 +8,7 @@ use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding; use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding::HTMLFieldSetElementMethods; use dom::bindings::codegen::InheritTypes::{HTMLFieldSetElementDerived, NodeCast}; use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLLegendElementDerived}; -use dom::bindings::js::{JSRef, Temporary}; +use dom::bindings::js::{JSRef, Temporary, RootedReference}; use dom::document::Document; use dom::element::{AttributeHandlers, Element, ElementHelpers}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; @@ -93,20 +93,27 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLFieldSetElement> { let node: JSRef<Node> = NodeCast::from_ref(*self); node.set_disabled_state(true); node.set_enabled_state(false); - let maybe_legend = node.children().find(|node| node.is_htmllegendelement()); - let filtered: Vec<JSRef<Node>> = node.children().filter(|child| { - maybe_legend.map_or(true, |legend| legend != *child) - }).collect(); - for descendant in filtered.iter().flat_map(|child| child.traverse_preorder()) { - match descendant.type_id() { - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) | - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement)) | - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) | - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement)) => { - descendant.set_disabled_state(true); - descendant.set_enabled_state(false); - }, - _ => () + let maybe_legend = node.children() + .map(|node| node.root()) + .find(|node| node.r().is_htmllegendelement()); + + for child in node.children() { + let child = child.root(); + if Some(child.r()) == maybe_legend.r() { + continue; + } + + for descendant in child.r().traverse_preorder() { + match descendant.type_id() { + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) | + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement)) | + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) | + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement)) => { + descendant.set_disabled_state(true); + descendant.set_enabled_state(false); + }, + _ => () + } } } }, @@ -124,20 +131,27 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLFieldSetElement> { let node: JSRef<Node> = NodeCast::from_ref(*self); node.set_disabled_state(false); node.set_enabled_state(true); - let maybe_legend = node.children().find(|node| node.is_htmllegendelement()); - let filtered: Vec<JSRef<Node>> = node.children().filter(|child| { - maybe_legend.map_or(true, |legend| legend != *child) - }).collect(); - for descendant in filtered.iter().flat_map(|child| child.traverse_preorder()) { - match descendant.type_id() { - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) | - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement)) | - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) | - NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement)) => { - descendant.check_disabled_attribute(); - descendant.check_ancestors_disabled_state_for_form_control(); - }, - _ => () + let maybe_legend = node.children() + .map(|node| node.root()) + .find(|node| node.r().is_htmllegendelement()); + + for child in node.children() { + let child = child.root(); + if Some(child.r()) == maybe_legend.r() { + continue; + } + + for descendant in child.r().traverse_preorder() { + match descendant.type_id() { + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) | + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement)) | + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) | + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement)) => { + descendant.check_disabled_attribute(); + descendant.check_ancestors_disabled_state_for_form_control(); + }, + _ => () + } } } }, |