aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/htmlfieldsetelement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/htmlfieldsetelement.rs')
-rw-r--r--src/components/script/dom/htmlfieldsetelement.rs20
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 {