From 290d6cc16439874a2c4cee5987a18535d7d442dc Mon Sep 17 00:00:00 2001 From: Helen Date: Mon, 18 Mar 2024 10:18:04 -0700 Subject: [PATCH 1/3] fix bug in beforeNodeMorphed --- src/core/streams/actions/morph.js | 22 ++++++++++++---------- src/tests/unit/stream_element_tests.js | 13 +++++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/core/streams/actions/morph.js b/src/core/streams/actions/morph.js index d177bfd01..42e655c95 100644 --- a/src/core/streams/actions/morph.js +++ b/src/core/streams/actions/morph.js @@ -26,17 +26,19 @@ function beforeNodeRemoved(node) { } function beforeNodeMorphed(target, newElement) { - if (target instanceof HTMLElement && !target.hasAttribute("data-turbo-permanent")) { - const event = dispatch("turbo:before-morph-element", { - cancelable: true, - target, - detail: { - newElement - } - }) - return !event.defaultPrevented + if (target instanceof HTMLElement) { + if (!target.hasAttribute("data-turbo-permanent")) { + const event = dispatch("turbo:before-morph-element", { + cancelable: true, + target, + detail: { + newElement + } + }) + return !event.defaultPrevented + } + return false } - return false } function beforeAttributeUpdated(attributeName, target, mutationType) { diff --git a/src/tests/unit/stream_element_tests.js b/src/tests/unit/stream_element_tests.js index 1e3b99f92..0d3e04b61 100644 --- a/src/tests/unit/stream_element_tests.js +++ b/src/tests/unit/stream_element_tests.js @@ -210,6 +210,19 @@ test("action=morph", async () => { assert.equal(subject.find("h1#hello")?.textContent, "Hello Turbo Morphed") }) +test("action=morph with text content change", async () => { + const templateElement = createTemplateElement(`
Hello Turbo Morphed
`) + const element = createStreamElement("morph", "hello", templateElement) + + assert.equal(subject.find("div#hello")?.textContent, "Hello Turbo") + + subject.append(element) + await nextAnimationFrame() + + assert.ok(subject.find("div#hello")) + assert.equal(subject.find("div#hello")?.textContent, "Hello Turbo Morphed") +}) + test("action=morph children-only", async () => { const templateElement = createTemplateElement(`

Hello Turbo Morphed

`) const element = createStreamElement("morph", "hello", templateElement) From 0ce534b3a244084a5a05a4ef344c6b2f571cecfa Mon Sep 17 00:00:00 2001 From: Helen Date: Mon, 18 Mar 2024 10:19:38 -0700 Subject: [PATCH 2/3] improve readability --- src/core/streams/actions/morph.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/core/streams/actions/morph.js b/src/core/streams/actions/morph.js index 42e655c95..e0813e12d 100644 --- a/src/core/streams/actions/morph.js +++ b/src/core/streams/actions/morph.js @@ -26,19 +26,20 @@ function beforeNodeRemoved(node) { } function beforeNodeMorphed(target, newElement) { - if (target instanceof HTMLElement) { - if (!target.hasAttribute("data-turbo-permanent")) { - const event = dispatch("turbo:before-morph-element", { - cancelable: true, - target, - detail: { - newElement - } - }) - return !event.defaultPrevented - } - return false + if (!(target instanceof HTMLElement)) { + return + } + if (!target.hasAttribute("data-turbo-permanent")) { + const event = dispatch("turbo:before-morph-element", { + cancelable: true, + target, + detail: { + newElement + } + }) + return !event.defaultPrevented } + return false } function beforeAttributeUpdated(attributeName, target, mutationType) { From 9c2bd18ff21d49bd9fc3d6df98822689d49c4b49 Mon Sep 17 00:00:00 2001 From: Helen Date: Mon, 25 Mar 2024 08:57:37 -0700 Subject: [PATCH 3/3] revert style change --- src/core/streams/actions/morph.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/core/streams/actions/morph.js b/src/core/streams/actions/morph.js index e0813e12d..42e655c95 100644 --- a/src/core/streams/actions/morph.js +++ b/src/core/streams/actions/morph.js @@ -26,20 +26,19 @@ function beforeNodeRemoved(node) { } function beforeNodeMorphed(target, newElement) { - if (!(target instanceof HTMLElement)) { - return - } - if (!target.hasAttribute("data-turbo-permanent")) { - const event = dispatch("turbo:before-morph-element", { - cancelable: true, - target, - detail: { - newElement - } - }) - return !event.defaultPrevented + if (target instanceof HTMLElement) { + if (!target.hasAttribute("data-turbo-permanent")) { + const event = dispatch("turbo:before-morph-element", { + cancelable: true, + target, + detail: { + newElement + } + }) + return !event.defaultPrevented + } + return false } - return false } function beforeAttributeUpdated(attributeName, target, mutationType) {