diff --git a/src/core/drive/morph_renderer.js b/src/core/drive/morph_renderer.js
index 87401ee23..4c25246a1 100644
--- a/src/core/drive/morph_renderer.js
+++ b/src/core/drive/morph_renderer.js
@@ -29,6 +29,7 @@ export class MorphRenderer extends Renderer {
this.isMorphingTurboFrame = this.#isFrameReloadedWithMorph(currentElement)
Idiomorph.morph(currentElement, newElement, {
+ ignoreActiveValue: true,
morphStyle: morphStyle,
callbacks: {
beforeNodeAdded: this.#shouldAddElement,
diff --git a/src/tests/fixtures/page_refresh.html b/src/tests/fixtures/page_refresh.html
index f7f577d56..6a9cc4b5e 100644
--- a/src/tests/fixtures/page_refresh.html
+++ b/src/tests/fixtures/page_refresh.html
@@ -88,6 +88,13 @@
Element with Stimulus controller
+
Link with params to refresh the page
Link to another page
diff --git a/src/tests/functional/page_refresh_tests.js b/src/tests/functional/page_refresh_tests.js
index 9db411665..ead9247b0 100644
--- a/src/tests/functional/page_refresh_tests.js
+++ b/src/tests/functional/page_refresh_tests.js
@@ -7,7 +7,8 @@ import {
nextEventNamed,
nextEventOnTarget,
noNextEventOnTarget,
- noNextEventNamed
+ noNextEventNamed,
+ getSearchParam
} from "../helpers/page"
test("renders a page refresh with morphing", async ({ page }) => {
@@ -81,6 +82,24 @@ test("renders a page refresh with morphing when the paths are the same but searc
await nextEventNamed(page, "turbo:render", { renderMethod: "morph" })
})
+test("renders a page refresh with morphing when the GET form paths are the same but search params are diferent", async ({ page }) => {
+ await page.goto("/src/tests/fixtures/page_refresh.html")
+
+ const input = page.locator("form[method=get] input[name=query]")
+
+ await input.fill("Search")
+ await nextEventNamed(page, "turbo:render", { renderMethod: "morph" })
+
+ await expect(input).toBeFocused()
+ expect(getSearchParam(page.url(), "query")).toEqual("Search")
+
+ await input.press("?")
+ await nextEventNamed(page, "turbo:render", { renderMethod: "morph" })
+
+ await expect(input).toBeFocused()
+ expect(getSearchParam(page.url(), "query")).toEqual("Search?")
+})
+
test("doesn't morph when the turbo-refresh-method meta tag is not 'morph'", async ({ page }) => {
await page.goto("/src/tests/fixtures/page_refresh_replace.html")
@@ -181,12 +200,12 @@ test("it preserves focus across morphs", async ({ page }) => {
const input = await page.locator("#form input[type=text]")
- await input.fill("Discard me")
+ await input.fill("Preserve me")
await input.press("Enter")
await nextEventNamed(page, "turbo:render", { renderMethod: "morph" })
await expect(input).toBeFocused()
- await expect(input).toHaveValue("")
+ await expect(input).toHaveValue("Preserve me")
})
test("it preserves focus and the [data-turbo-permanent] element's value across morphs", async ({ page }) => {