aboutsummaryrefslogtreecommitdiff
path: root/html/DOM_helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/DOM_helpers.js')
-rw-r--r--html/DOM_helpers.js27
1 files changed, 24 insertions, 3 deletions
diff --git a/html/DOM_helpers.js b/html/DOM_helpers.js
index 2bff966..4fe118d 100644
--- a/html/DOM_helpers.js
+++ b/html/DOM_helpers.js
@@ -1,5 +1,7 @@
/**
- * Hachette operations on DOM elements
+ * This file is part of Haketilo.
+ *
+ * Function: Operations on DOM elements.
*
* Copyright (C) 2021 Wojtek Kosior
* Redistribution terms are gathered in the `copyright' file.
@@ -10,9 +12,27 @@ function by_id(id)
return document.getElementById(id);
}
+const known_templates = new Map();
+
+function get_template(template_id)
+{
+ let template = known_templates.get(template_id) || null;
+ if (template)
+ return template;
+
+ for (const template_node of document.getElementsByTagName("TEMPLATE")) {
+ template = template_node.content.getElementById(template_id);
+ if (template)
+ break;
+ }
+
+ known_templates.set(template_id, template);
+ return template;
+}
+
function clone_template(template_id)
{
- const clone = document.getElementById(template_id).cloneNode(true);
+ const clone = get_template(template_id).cloneNode(true);
const result_object = {};
const to_process = [clone];
@@ -24,7 +44,7 @@ function clone_template(template_id)
result_object[template_key] = element;
element.removeAttribute("id");
- element.removeAttribute("template_key");
+ element.removeAttribute("data-template");
for (const child of element.children)
to_process.push(child);
@@ -36,6 +56,7 @@ function clone_template(template_id)
/*
* EXPORTS_START
* EXPORT by_id
+ * EXPORT get_template
* EXPORT clone_template
* EXPORTS_END
*/