« get me outta code hell

html: new Stationery class for instantiating Templates - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-06-12 14:51:08 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-06-12 14:51:08 -0300
commitf12890facba502805f03a64c76f386c4531abbcc (patch)
tree2709849226850f0781098bf4e1c2d467ebdb3266 /src
parentc8fabb4ad0e13758c13d58c86b9859c63ff127b0 (diff)
html: new Stationery class for instantiating Templates
Diffstat (limited to 'src')
-rw-r--r--src/util/html.js25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/util/html.js b/src/util/html.js
index f5c1dee..b75820e 100644
--- a/src/util/html.js
+++ b/src/util/html.js
@@ -489,7 +489,10 @@ export class Template {
   #slotValues = {};
 
   constructor(description) {
-    Template.validateDescription(description);
+    if (!description[Stationery.validated]) {
+      Template.validateDescription(description);
+    }
+
     this.#description = description;
   }
 
@@ -779,3 +782,23 @@ export class Template {
     return this.content.toString();
   }
 }
+
+export function stationery(description) {
+  return new Stationery(description);
+}
+
+export class Stationery {
+  #templateDescription = null;
+
+  static validated = Symbol('Stationery.validated');
+
+  constructor(templateDescription) {
+    Template.validateDescription(templateDescription);
+    templateDescription[Stationery.validated] = true;
+    this.#templateDescription = templateDescription;
+  }
+
+  template() {
+    return new Template(this.#templateDescription);
+  }
+}