aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHayleigh Thompson <me@hayleigh.dev>2023-08-22 23:33:25 +0100
committerHayleigh Thompson <me@hayleigh.dev>2023-08-22 23:33:25 +0100
commit3f5114d3ad44347763e5b53e69b31c38e38f9a97 (patch)
treec8df3a7940a35cb0e59a9766985a01b17f2ba1db
parentedf35e664157a1403c83f584dc8a99367a56e195 (diff)
downloadlustre-3f5114d3ad44347763e5b53e69b31c38e38f9a97.tar.gz
lustre-3f5114d3ad44347763e5b53e69b31c38e38f9a97.zip
:bug: Fixed a regression where an elements classes would duplicate every render.
-rw-r--r--lib/src/runtime.ffi.mjs16
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/src/runtime.ffi.mjs b/lib/src/runtime.ffi.mjs
index 3fc0d91..59c5883 100644
--- a/lib/src/runtime.ffi.mjs
+++ b/lib/src/runtime.ffi.mjs
@@ -91,8 +91,8 @@ function morphElement(prev, curr, ns, parent) {
while (currAttr.head) {
currAttrs.set(
currAttr.head[0],
- currAttr.head[0] === "class" && prev.className
- ? `${prev.className} ${currAttr.head[1]}`
+ currAttr.head[0] === "class" && currAttrs.has("class")
+ ? `${currAttrs.get("class")} ${currAttr.head[1]}`
: currAttr.head[1]
);
@@ -176,7 +176,7 @@ function morphElement(prev, curr, ns, parent) {
function morphAttr(el, name, value) {
switch (typeof value) {
case "string":
- el.setAttribute(name, value);
+ if (el.getAttribute(name) !== value) el.setAttribute(name, value);
break;
// Boolean attributes work a bit differently in HTML. Their presence always
@@ -223,6 +223,11 @@ function toJsValue(value) {
// TEXT ------------------------------------------------------------------------
function createText(prev, curr) {
+ if (!curr[0]) {
+ prev?.remove();
+ return null;
+ }
+
const el = document.createTextNode(curr[0]);
if (prev) prev.replaceWith(el);
@@ -233,6 +238,11 @@ function morphText(prev, curr) {
const prevValue = prev.nodeValue;
const currValue = curr[0];
+ if (!currValue) {
+ prev?.remove();
+ return null;
+ }
+
if (prevValue !== currValue) prev.nodeValue = currValue;
return prev;