From 304999d54af103cfa80ae249ff481d3e91d43a3c Mon Sep 17 00:00:00 2001 From: henrikvilhelmberglund Date: Sat, 21 Sep 2024 13:22:59 +0200 Subject: [PATCH 1/5] fix: decode hash when clicking on same hash to correctly scroll on non ascii --- packages/kit/src/runtime/client/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index f828720b88c0..d2adedc53407 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -2093,7 +2093,7 @@ function _start_router() { if (hash === '' || (hash === 'top' && a.ownerDocument.getElementById('top') === null)) { window.scrollTo({ top: 0 }); } else { - a.ownerDocument.getElementById(hash)?.scrollIntoView(); + a.ownerDocument.getElementById(decodeURIComponent(hash))?.scrollIntoView(); } return; From 802219a472962201bf8931205e228381037ce1b3 Mon Sep 17 00:00:00 2001 From: henrikvilhelmberglund Date: Sat, 21 Sep 2024 13:28:05 +0200 Subject: [PATCH 2/5] chore: changeset --- .changeset/smooth-dogs-travel.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/smooth-dogs-travel.md diff --git a/.changeset/smooth-dogs-travel.md b/.changeset/smooth-dogs-travel.md new file mode 100644 index 000000000000..00a4538ce494 --- /dev/null +++ b/.changeset/smooth-dogs-travel.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +decode the hash when clicking the same hash to correctly scroll for non ascii hashes From 534a5b06013d56df94ca231c90e744d5509e8619 Mon Sep 17 00:00:00 2001 From: henrikvilhelmberglund Date: Sat, 21 Sep 2024 13:34:09 +0200 Subject: [PATCH 3/5] chore: fix changeset --- .changeset/smooth-dogs-travel.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/smooth-dogs-travel.md b/.changeset/smooth-dogs-travel.md index 00a4538ce494..2852fc7801c3 100644 --- a/.changeset/smooth-dogs-travel.md +++ b/.changeset/smooth-dogs-travel.md @@ -1,5 +1,5 @@ --- -'@sveltejs/kit': minor +'@sveltejs/kit': patch --- -decode the hash when clicking the same hash to correctly scroll for non ascii hashes +fix: decode the hash when clicking the same hash to correctly scroll for non ascii hashes From 055ce68ae30507059c07c1946992886918dc394a Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 11 Oct 2024 10:22:19 +0800 Subject: [PATCH 4/5] Update .changeset/smooth-dogs-travel.md --- .changeset/smooth-dogs-travel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/smooth-dogs-travel.md b/.changeset/smooth-dogs-travel.md index 2852fc7801c3..0a33331f1f5f 100644 --- a/.changeset/smooth-dogs-travel.md +++ b/.changeset/smooth-dogs-travel.md @@ -2,4 +2,4 @@ '@sveltejs/kit': patch --- -fix: decode the hash when clicking the same hash to correctly scroll for non ascii hashes +fix: decode non ASCII anchor hashes when scrolling into view From 99f2ba6806cb4de00e4901817cc0b9943e27efe6 Mon Sep 17 00:00:00 2001 From: Chew Tee Ming Date: Fri, 11 Oct 2024 11:22:25 +0800 Subject: [PATCH 5/5] add test --- .../basics/src/routes/anchor/anchor/+page.svelte | 1 + .../apps/basics/test/cross-platform/client.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/kit/test/apps/basics/src/routes/anchor/anchor/+page.svelte b/packages/kit/test/apps/basics/src/routes/anchor/anchor/+page.svelte index 2cf545d88a6b..c977dfcf429c 100644 --- a/packages/kit/test/apps/basics/src/routes/anchor/anchor/+page.svelte +++ b/packages/kit/test/apps/basics/src/routes/anchor/anchor/+page.svelte @@ -8,3 +8,4 @@

The browser scrolls to me

+Anchor demo (non-ASCII) diff --git a/packages/kit/test/apps/basics/test/cross-platform/client.test.js b/packages/kit/test/apps/basics/test/cross-platform/client.test.js index 6d367cf414c6..27ee113a79b4 100644 --- a/packages/kit/test/apps/basics/test/cross-platform/client.test.js +++ b/packages/kit/test/apps/basics/test/cross-platform/client.test.js @@ -280,6 +280,20 @@ test.describe('Scrolling', () => { expect(await in_view('#go-to-encöded')).toBe(true); }); + test('url-supplied non-ascii anchor works on navigation to page after manual scroll', async ({ + page, + in_view, + clicknav + }) => { + await page.goto('/anchor'); + await clicknav('#non-ascii-anchor'); + await page.evaluate(() => { + window.scrollTo(0, 50); + }); + await page.locator('#non-ascii-anchor').click(); + expect(await in_view('#go-to-encöded')).toBe(true); + }); + test('url-supplied anchor with special characters works on navigation to page', async ({ page, in_view,