script/dom/html/
htmlmapelement.rs1use dom_struct::dom_struct;
6use html5ever::{LocalName, Prefix};
7use js::rust::HandleObject;
8
9use crate::dom::bindings::codegen::Bindings::HTMLMapElementBinding::HTMLMapElementMethods;
10use crate::dom::bindings::inheritance::Castable;
11use crate::dom::bindings::root::{DomRoot, MutNullableDom};
12use crate::dom::bindings::str::DOMString;
13use crate::dom::document::Document;
14use crate::dom::html::htmlareaelement::HTMLAreaElement;
15use crate::dom::html::htmlcollection::HTMLCollection;
16use crate::dom::html::htmlelement::HTMLElement;
17use crate::dom::node::{Node, NodeTraits, ShadowIncluding};
18use crate::script_runtime::CanGc;
19
20#[dom_struct]
21pub(crate) struct HTMLMapElement {
22 htmlelement: HTMLElement,
23 areas: MutNullableDom<HTMLCollection>,
25}
26
27impl HTMLMapElement {
28 fn new_inherited(
29 local_name: LocalName,
30 prefix: Option<Prefix>,
31 document: &Document,
32 ) -> HTMLMapElement {
33 HTMLMapElement {
34 htmlelement: HTMLElement::new_inherited(local_name, prefix, document),
35 areas: Default::default(),
36 }
37 }
38
39 pub(crate) fn new(
40 local_name: LocalName,
41 prefix: Option<Prefix>,
42 document: &Document,
43 proto: Option<HandleObject>,
44 can_gc: CanGc,
45 ) -> DomRoot<HTMLMapElement> {
46 Node::reflect_node_with_proto(
47 Box::new(HTMLMapElement::new_inherited(local_name, prefix, document)),
48 document,
49 proto,
50 can_gc,
51 )
52 }
53
54 pub(crate) fn get_area_elements(&self) -> Vec<DomRoot<HTMLAreaElement>> {
55 self.upcast::<Node>()
56 .traverse_preorder(ShadowIncluding::No)
57 .filter_map(DomRoot::downcast::<HTMLAreaElement>)
58 .collect()
59 }
60}
61
62impl HTMLMapElementMethods<crate::DomTypeHolder> for HTMLMapElement {
63 make_getter!(Name, "name");
65
66 make_atomic_setter!(SetName, "name");
68
69 fn Areas(&self, can_gc: CanGc) -> DomRoot<HTMLCollection> {
71 self.areas.or_init(|| {
74 HTMLCollection::new_with_filter_fn(
75 &self.owner_window(),
76 self.upcast(),
77 |element, _| element.is::<HTMLAreaElement>(),
78 can_gc,
79 )
80 })
81 }
82}