aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/document.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/document.rs')
-rw-r--r--components/script/dom/document.rs80
1 files changed, 19 insertions, 61 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 2f939a471a2..de06f82dc0e 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -497,55 +497,6 @@ pub struct Document {
status_code: Option<u16>,
}
-#[derive(JSTraceable, MallocSizeOf)]
-struct ImagesFilter;
-impl CollectionFilter for ImagesFilter {
- fn filter(&self, elem: &Element, _root: &Node) -> bool {
- elem.is::<HTMLImageElement>()
- }
-}
-
-#[derive(JSTraceable, MallocSizeOf)]
-struct EmbedsFilter;
-impl CollectionFilter for EmbedsFilter {
- fn filter(&self, elem: &Element, _root: &Node) -> bool {
- elem.is::<HTMLEmbedElement>()
- }
-}
-
-#[derive(JSTraceable, MallocSizeOf)]
-struct LinksFilter;
-impl CollectionFilter for LinksFilter {
- fn filter(&self, elem: &Element, _root: &Node) -> bool {
- (elem.is::<HTMLAnchorElement>() || elem.is::<HTMLAreaElement>()) &&
- elem.has_attribute(&local_name!("href"))
- }
-}
-
-#[derive(JSTraceable, MallocSizeOf)]
-struct FormsFilter;
-impl CollectionFilter for FormsFilter {
- fn filter(&self, elem: &Element, _root: &Node) -> bool {
- elem.is::<HTMLFormElement>()
- }
-}
-
-#[derive(JSTraceable, MallocSizeOf)]
-struct ScriptsFilter;
-impl CollectionFilter for ScriptsFilter {
- fn filter(&self, elem: &Element, _root: &Node) -> bool {
- elem.is::<HTMLScriptElement>()
- }
-}
-
-#[derive(JSTraceable, MallocSizeOf)]
-struct AnchorsFilter;
-impl CollectionFilter for AnchorsFilter {
- fn filter(&self, elem: &Element, _root: &Node) -> bool {
- elem.is::<HTMLAnchorElement>() && elem.has_attribute(&local_name!("href"))
- }
-}
-
#[allow(non_snake_case)]
impl Document {
pub fn note_node_with_dirty_descendants(&self, node: &Node) {
@@ -4907,16 +4858,18 @@ impl DocumentMethods<crate::DomTypeHolder> for Document {
// https://html.spec.whatwg.org/multipage/#dom-document-images
fn Images(&self) -> DomRoot<HTMLCollection> {
self.images.or_init(|| {
- let filter = Box::new(ImagesFilter);
- HTMLCollection::create(&self.window, self.upcast(), filter)
+ HTMLCollection::new_with_filter_fn(&self.window, self.upcast(), |element, _| {
+ element.is::<HTMLImageElement>()
+ })
})
}
// https://html.spec.whatwg.org/multipage/#dom-document-embeds
fn Embeds(&self) -> DomRoot<HTMLCollection> {
self.embeds.or_init(|| {
- let filter = Box::new(EmbedsFilter);
- HTMLCollection::create(&self.window, self.upcast(), filter)
+ HTMLCollection::new_with_filter_fn(&self.window, self.upcast(), |element, _| {
+ element.is::<HTMLEmbedElement>()
+ })
})
}
@@ -4928,32 +4881,37 @@ impl DocumentMethods<crate::DomTypeHolder> for Document {
// https://html.spec.whatwg.org/multipage/#dom-document-links
fn Links(&self) -> DomRoot<HTMLCollection> {
self.links.or_init(|| {
- let filter = Box::new(LinksFilter);
- HTMLCollection::create(&self.window, self.upcast(), filter)
+ HTMLCollection::new_with_filter_fn(&self.window, self.upcast(), |element, _| {
+ (element.is::<HTMLAnchorElement>() || element.is::<HTMLAreaElement>()) &&
+ element.has_attribute(&local_name!("href"))
+ })
})
}
// https://html.spec.whatwg.org/multipage/#dom-document-forms
fn Forms(&self) -> DomRoot<HTMLCollection> {
self.forms.or_init(|| {
- let filter = Box::new(FormsFilter);
- HTMLCollection::create(&self.window, self.upcast(), filter)
+ HTMLCollection::new_with_filter_fn(&self.window, self.upcast(), |element, _| {
+ element.is::<HTMLFormElement>()
+ })
})
}
// https://html.spec.whatwg.org/multipage/#dom-document-scripts
fn Scripts(&self) -> DomRoot<HTMLCollection> {
self.scripts.or_init(|| {
- let filter = Box::new(ScriptsFilter);
- HTMLCollection::create(&self.window, self.upcast(), filter)
+ HTMLCollection::new_with_filter_fn(&self.window, self.upcast(), |element, _| {
+ element.is::<HTMLScriptElement>()
+ })
})
}
// https://html.spec.whatwg.org/multipage/#dom-document-anchors
fn Anchors(&self) -> DomRoot<HTMLCollection> {
self.anchors.or_init(|| {
- let filter = Box::new(AnchorsFilter);
- HTMLCollection::create(&self.window, self.upcast(), filter)
+ HTMLCollection::new_with_filter_fn(&self.window, self.upcast(), |element, _| {
+ element.is::<HTMLAnchorElement>() && element.has_attribute(&local_name!("href"))
+ })
})
}