From 939c564f0311ccf96b6807f3cf621d87bc0c705b Mon Sep 17 00:00:00 2001 From: DarkWiiPlayer Date: Tue, 19 Sep 2023 17:36:19 +0200 Subject: [PATCH] Allow returning text in skooma bind method --- page/skooma.html | 1 + skooma.js | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/page/skooma.html b/page/skooma.html index a429771..4d40c29 100644 --- a/page/skooma.html +++ b/page/skooma.html @@ -297,6 +297,7 @@ Therefore one cannot use tagged template literals with text as this would return a document fragment which cannot be replaced. + If the element is a string, it is turned into a text node before insertion.
Update function
diff --git a/skooma.js b/skooma.js index 9933a4a..d912a2f 100644 --- a/skooma.js +++ b/skooma.js @@ -81,9 +81,9 @@ const node = (name, args, options) => { const custom = getCustom(args) if ("nameFilter" in options) name = options.nameFilter(name) if (options.xmlns) - element = document.createElementNS(options.xmlns, name, {is: custom}) + element = document.createElementNS(options.xmlns, name, custom ?? {is: custom}) else - element = document.createElement(name, {is: custom}) + element = document.createElement(name, custom ?? {is: custom}) parseArgs(element, null, args) return element } @@ -104,9 +104,14 @@ export const bind = transform => { const update = (...data) => { const next = transform(...data) if (next) { - if (element) element.replaceWith(next) - element = inject(next) - return element + if (typeof next == "string") { + element.innerText = next + return element + } else { + if (element) element.replaceWith(next) + element = inject(next) + return element + } } } return update