diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2023-08-02 21:54:46 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2023-08-02 21:55:15 -0300 |
commit | b149e73fcd30602fd2312e26aca86c2b769bbc01 (patch) | |
tree | 49f75db1ae730cc7b0c00160120afb1205338f7b /src/util | |
parent | 473740f69dcbad408b0d84567c2bb2de97e8a4aa (diff) |
infra: html: make deep Template resolving opt-in via utility
Just always resolving was causing some bugs.
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/html.js | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/util/html.js b/src/util/html.js index 26dd6495..d7d03732 100644 --- a/src/util/html.js +++ b/src/util/html.js @@ -494,6 +494,10 @@ export class Attributes { } } +export function resolve(tagOrTemplate) { + return Template.resolve(tagOrTemplate); +} + export function template(description) { return new Template(description); } @@ -785,13 +789,7 @@ export class Template { slots[slotName] = this.getSlotValue(slotName); } - // Get outta here with that recursive Template bollocks! - const content = this.description.content(slots); - if (content instanceof Template) { - return content.content; - } else { - return content; - } + return this.description.content(slots); } set description(_value) { @@ -806,6 +804,24 @@ export class Template { return this.content.toString(); } + static resolve(tagOrTemplate) { + // Flattens contents of a template, recursively "resolving" until a + // non-template is ready (or just returns a provided non-template + // argument as-is). + + if (!(tagOrTemplate instanceof Template)) { + return tagOrTemplate; + } + + let {content} = tagOrTemplate; + + while (content instanceof Template) { + content = content.content; + } + + return content; + } + [inspect.custom]() { const {annotation} = this.description; if (annotation) { |