HTMLCollection::create returns live collections by default

This commit is contained in:
Bruno de Oliveira Abinader 2014-03-20 18:39:38 -04:00
parent a7f8d754d2
commit 3a8a0927e2
4 changed files with 13 additions and 26 deletions

View file

@ -450,7 +450,7 @@ impl Document {
} }
} }
let filter = ~ImagesFilter; let filter = ~ImagesFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn Embeds(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> { pub fn Embeds(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> {
@ -462,7 +462,7 @@ impl Document {
} }
} }
let filter = ~EmbedsFilter; let filter = ~EmbedsFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn Plugins(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> { pub fn Plugins(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> {
@ -480,7 +480,7 @@ impl Document {
} }
} }
let filter = ~LinksFilter; let filter = ~LinksFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn Forms(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> { pub fn Forms(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> {
@ -492,7 +492,7 @@ impl Document {
} }
} }
let filter = ~FormsFilter; let filter = ~FormsFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn Scripts(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> { pub fn Scripts(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> {
@ -504,7 +504,7 @@ impl Document {
} }
} }
let filter = ~ScriptsFilter; let filter = ~ScriptsFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn Anchors(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> { pub fn Anchors(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> {
@ -516,7 +516,7 @@ impl Document {
} }
} }
let filter = ~AnchorsFilter; let filter = ~AnchorsFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn Applets(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> { pub fn Applets(&self, abstract_self: &JS<Document>) -> JS<HTMLCollection> {
@ -528,7 +528,7 @@ impl Document {
} }
} }
let filter = ~AppletsFilter; let filter = ~AppletsFilter;
HTMLCollection::create_live(&self.window, &NodeCast::from(abstract_self), filter) HTMLCollection::create(&self.window, &NodeCast::from(abstract_self), filter)
} }
pub fn create_collection<T>(&self, callback: |elem: &JS<Node>| -> Option<JS<T>>) -> ~[JS<T>] { pub fn create_collection<T>(&self, callback: |elem: &JS<Node>| -> Option<JS<T>>) -> ~[JS<T>] {

View file

@ -51,23 +51,10 @@ impl HTMLCollection {
} }
impl HTMLCollection { impl HTMLCollection {
pub fn create_live(window: &JS<Window>, root: &JS<Node>, filter: ~CollectionFilter) -> JS<HTMLCollection> { pub fn create(window: &JS<Window>, root: &JS<Node>, filter: ~CollectionFilter) -> JS<HTMLCollection> {
HTMLCollection::new(window, Live(root.clone(), filter)) HTMLCollection::new(window, Live(root.clone(), filter))
} }
pub fn create(window: &JS<Window>, root: &JS<Node>, predicate: |elem: &JS<Element>| -> bool) -> JS<HTMLCollection> {
let mut elements = ~[];
for child in root.traverse_preorder() {
if child.is_element() {
let elem: JS<Element> = ElementCast::to(&child).unwrap();
if predicate(&elem) {
elements.push(elem);
}
}
}
HTMLCollection::new(window, Static(elements))
}
pub fn by_tag_name(window: &JS<Window>, root: &JS<Node>, tag: DOMString) pub fn by_tag_name(window: &JS<Window>, root: &JS<Node>, tag: DOMString)
-> JS<HTMLCollection> { -> JS<HTMLCollection> {
struct TagNameFilter { struct TagNameFilter {
@ -81,7 +68,7 @@ impl HTMLCollection {
let filter = TagNameFilter { let filter = TagNameFilter {
tag: tag tag: tag
}; };
HTMLCollection::create_live(window, root, ~filter) HTMLCollection::create(window, root, ~filter)
} }
pub fn by_tag_name_ns(window: &JS<Window>, root: &JS<Node>, tag: DOMString, pub fn by_tag_name_ns(window: &JS<Window>, root: &JS<Node>, tag: DOMString,
@ -99,7 +86,7 @@ impl HTMLCollection {
tag: tag, tag: tag,
namespace: namespace namespace: namespace
}; };
HTMLCollection::create_live(window, root, ~filter) HTMLCollection::create(window, root, ~filter)
} }
pub fn by_class_name(window: &JS<Window>, root: &JS<Node>, classes: DOMString) pub fn by_class_name(window: &JS<Window>, root: &JS<Node>, classes: DOMString)
@ -115,7 +102,7 @@ impl HTMLCollection {
let filter = ClassNameFilter { let filter = ClassNameFilter {
classes: classes.split(' ').map(|class| class.into_owned()).to_owned_vec() classes: classes.split(' ').map(|class| class.into_owned()).to_owned_vec()
}; };
HTMLCollection::create_live(window, root, ~filter) HTMLCollection::create(window, root, ~filter)
} }
} }

View file

@ -50,6 +50,6 @@ impl HTMLDataListElement {
} }
let node: JS<Node> = NodeCast::from(abstract_self); let node: JS<Node> = NodeCast::from(abstract_self);
let filter = ~HTMLDataListOptionsFilter; let filter = ~HTMLDataListOptionsFilter;
HTMLCollection::create_live(&window_from_node(&node), &node, filter) HTMLCollection::create(&window_from_node(&node), &node, filter)
} }
} }

View file

@ -81,7 +81,7 @@ impl HTMLFieldSetElement {
} }
let node: JS<Node> = NodeCast::from(abstract_self); let node: JS<Node> = NodeCast::from(abstract_self);
let filter = ~ElementsFilter; let filter = ~ElementsFilter;
HTMLCollection::create_live(&window_from_node(&node), &node, ~filter) HTMLCollection::create(&window_from_node(&node), &node, filter)
} }
pub fn WillValidate(&self) -> bool { pub fn WillValidate(&self) -> bool {