Allow returning text in skooma bind method

This commit is contained in:
Talia 2023-09-19 17:36:19 +02:00
parent 8d9dc8ae7f
commit 939c564f03
Signed by: darkwiiplayer
GPG key ID: 7808674088232B3E
2 changed files with 11 additions and 5 deletions

View file

@ -297,6 +297,7 @@
Therefore one cannot use tagged template literals with <code>text</code> Therefore one cannot use tagged template literals with <code>text</code>
as this would return a document fragment which cannot be replaced. as this would return a document fragment which cannot be replaced.
</div> </div>
If the element is a string, it is turned into a text node before insertion.
</dd> </dd>
<dt>Update function</dt> <dt>Update function</dt>
<code> <code>

View file

@ -81,9 +81,9 @@ const node = (name, args, options) => {
const custom = getCustom(args) const custom = getCustom(args)
if ("nameFilter" in options) name = options.nameFilter(name) if ("nameFilter" in options) name = options.nameFilter(name)
if (options.xmlns) if (options.xmlns)
element = document.createElementNS(options.xmlns, name, {is: custom}) element = document.createElementNS(options.xmlns, name, custom ?? {is: custom})
else else
element = document.createElement(name, {is: custom}) element = document.createElement(name, custom ?? {is: custom})
parseArgs(element, null, args) parseArgs(element, null, args)
return element return element
} }
@ -104,11 +104,16 @@ export const bind = transform => {
const update = (...data) => { const update = (...data) => {
const next = transform(...data) const next = transform(...data)
if (next) { if (next) {
if (typeof next == "string") {
element.innerText = next
return element
} else {
if (element) element.replaceWith(next) if (element) element.replaceWith(next)
element = inject(next) element = inject(next)
return element return element
} }
} }
}
return update return update
} }