diff options
author | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-03-20 18:38:04 -0400 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-03-26 09:11:13 -0400 |
commit | 9038f2102663a308e8af50f873788877bbe36ade (patch) | |
tree | 8b91c003ecf80ba8de77c03618760377bc93ccd8 /src/components/script/dom/htmlfieldsetelement.rs | |
parent | e95aa0febdad07bf8812f4d66cf49883f855c4df (diff) | |
download | servo-9038f2102663a308e8af50f873788877bbe36ade.tar.gz servo-9038f2102663a308e8af50f873788877bbe36ade.zip |
Support live HTMLCollection for FieldSet.elements
Diffstat (limited to 'src/components/script/dom/htmlfieldsetelement.rs')
-rw-r--r-- | src/components/script/dom/htmlfieldsetelement.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/components/script/dom/htmlfieldsetelement.rs b/src/components/script/dom/htmlfieldsetelement.rs index 5bbd13c2b79..fa1cd8e4c2f 100644 --- a/src/components/script/dom/htmlfieldsetelement.rs +++ b/src/components/script/dom/htmlfieldsetelement.rs @@ -10,11 +10,11 @@ use dom::document::Document; use dom::element::{Element, HTMLFieldSetElementTypeId}; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlformelement::HTMLFormElement; -use dom::htmlcollection::HTMLCollection; +use dom::htmlcollection::{HTMLCollection, CollectionFilter}; use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::validitystate::ValidityState; -use servo_util::str::DOMString; +use servo_util::str::{DOMString, StaticStringVec}; #[deriving(Encodable)] pub struct HTMLFieldSetElement { @@ -68,12 +68,20 @@ impl HTMLFieldSetElement { ~"" } + // http://www.whatwg.org/html/#dom-fieldset-elements pub fn Elements(&self, abstract_self: &JS<HTMLFieldSetElement>) -> JS<HTMLCollection> { + struct ElementsFilter; + impl CollectionFilter for ElementsFilter { + fn filter(&self, elem: &JS<Element>, root: &JS<Node>) -> bool { + static tag_names: StaticStringVec = &["button", "fieldset", "input", + "keygen", "object", "output", "select", "textarea"]; + let root: &JS<Element> = &ElementCast::to(root).unwrap(); + elem != root && tag_names.iter().any(|&tag_name| tag_name == elem.get().tag_name) + } + } let node: JS<Node> = NodeCast::from(abstract_self); - let element: JS<Element> = ElementCast::from(abstract_self); - let window = &window_from_node(&node); - let listed_elements = ["button", "fieldset", "input", "keygen", "object", "output", "select", "textarea"]; - HTMLCollection::create(window, &node, |elem| *elem != element && listed_elements.iter().any(|&tag_name| tag_name == elem.get().tag_name)) + let filter = ~ElementsFilter; + HTMLCollection::create_live(&window_from_node(&node), &node, ~filter) } pub fn WillValidate(&self) -> bool { |