From b149e73fcd30602fd2312e26aca86c2b769bbc01 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 2 Aug 2023 21:54:46 -0300 Subject: infra: html: make deep Template resolving opt-in via utility Just always resolving was causing some bugs. --- src/util/html.js | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'src/util/html.js') 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) { -- cgit 1.3.0-6-gf8a5