script/dom/html/
htmlmapelement.rs1use dom_struct::dom_struct;
6use html5ever::{LocalName, Prefix};
7use js::context::JSContext;
8use js::rust::HandleObject;
9
10use crate::dom::bindings::codegen::Bindings::HTMLMapElementBinding::HTMLMapElementMethods;
11use crate::dom::bindings::inheritance::Castable;
12use crate::dom::bindings::root::{DomRoot, MutNullableDom};
13use crate::dom::bindings::str::DOMString;
14use crate::dom::document::Document;
15use crate::dom::html::htmlareaelement::HTMLAreaElement;
16use crate::dom::html::htmlcollection::HTMLCollection;
17use crate::dom::html::htmlelement::HTMLElement;
18use crate::dom::node::{Node, NodeTraits, ShadowIncluding};
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 cx: &mut js::context::JSContext,
41 local_name: LocalName,
42 prefix: Option<Prefix>,
43 document: &Document,
44 proto: Option<HandleObject>,
45 ) -> DomRoot<HTMLMapElement> {
46 Node::reflect_node_with_proto(
47 cx,
48 Box::new(HTMLMapElement::new_inherited(local_name, prefix, document)),
49 document,
50 proto,
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!(cx, SetName, "name");
68
69 fn Areas(&self, cx: &mut JSContext) -> DomRoot<HTMLCollection> {
71 self.areas.or_init(|| {
74 HTMLCollection::new_with_filter_fn(
75 cx,
76 &self.owner_window(),
77 self.upcast(),
78 |element, _| element.is::<HTMLAreaElement>(),
79 )
80 })
81 }
82}