stdweb/webapi/html_elements/
template.rs1use webcore::value::Reference;
2use webcore::try_from::TryInto;
3use webapi::event_target::{IEventTarget, EventTarget};
4use webapi::node::{INode, Node};
5use webapi::element::{IElement, Element};
6use webapi::html_element::{IHtmlElement, HtmlElement};
7use webapi::document_fragment::DocumentFragment;
8
9#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
16#[reference(instance_of = "HTMLTemplateElement")]
17#[reference(subclass_of(EventTarget, Node, Element, HtmlElement))]
18pub struct TemplateElement( Reference );
19
20impl IEventTarget for TemplateElement {}
21impl INode for TemplateElement {}
22impl IElement for TemplateElement {}
23impl IHtmlElement for TemplateElement {}
24
25impl TemplateElement {
26 #[inline]
31 pub fn content ( &self ) -> DocumentFragment {
32 js! (
33 return @{self}.content;
34 ).try_into().unwrap()
35 }
36}
37
38#[cfg(all(test, feature = "web_test"))]
39mod tests {
40 use super::*;
41 use webapi::html_element::HtmlElement;
42 use webapi::node::{Node, INode, CloneKind};
43
44 #[test]
45 fn test_template_content_with_clone_node() {
46 let tpl: TemplateElement = Node::from_html("<template><span>aaabbbcccddd</span></template>")
47 .unwrap()
48 .try_into()
49 .unwrap();
50
51 let n = tpl.content().clone_node(CloneKind::Deep).unwrap();
52 let child_nodes = n.child_nodes();
53 assert_eq!(child_nodes.len(), 1);
54
55 let span_element: HtmlElement = child_nodes.iter().next().unwrap().try_into().unwrap();
56
57 assert_eq!(span_element.node_name(), "SPAN");
58 assert_eq!(js!( return @{span_element}.innerHTML; ), "aaabbbcccddd");
59 }
60}