1 /*
2  * Copyright (C) 2018 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #include "lexbor/html/interfaces/template_element.h"
8 #include "lexbor/html/interfaces/document.h"
9 
10 
11 lxb_html_template_element_t *
lxb_html_template_element_interface_create(lxb_html_document_t * document)12 lxb_html_template_element_interface_create(lxb_html_document_t *document)
13 {
14     lxb_html_template_element_t *element;
15 
16     element = lexbor_mraw_calloc(document->dom_document.mraw,
17                                  sizeof(lxb_html_template_element_t));
18     if (element == NULL) {
19         return NULL;
20     }
21 
22     lxb_dom_node_t *node = lxb_dom_interface_node(element);
23 
24     node->owner_document = lxb_html_document_original_ref(document);
25     node->type = LXB_DOM_NODE_TYPE_ELEMENT;
26 
27     element->content = lxb_dom_document_fragment_interface_create(node->owner_document);
28     if (element->content == NULL) {
29         return lxb_html_template_element_interface_destroy(element);
30     }
31 
32     element->content->node.ns = LXB_NS_HTML;
33     element->content->host = lxb_dom_interface_element(element);
34 
35     return element;
36 }
37 
38 lxb_html_template_element_t *
lxb_html_template_element_interface_destroy(lxb_html_template_element_t * template_element)39 lxb_html_template_element_interface_destroy(lxb_html_template_element_t *template_element)
40 {
41     (void) lxb_dom_document_fragment_interface_destroy(template_element->content);
42     (void) lxb_dom_node_interface_destroy(lxb_dom_interface_node(template_element));
43 
44     return NULL;
45 }
46