@klodd/ds 5.16.1 → 5.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/js/turbo-nav.js +34 -0
- package/package.json +1 -1
package/js/turbo-nav.js
CHANGED
|
@@ -66,6 +66,15 @@
|
|
|
66
66
|
let currentController = null;
|
|
67
67
|
let inFlightSwap = null; // Promise som resolvar nar pagaende VT/swap ar klar.
|
|
68
68
|
|
|
69
|
+
/*--------------------------------------------------------------
|
|
70
|
+
Track senaste pathname+search sa popstate-handlern kan skilja
|
|
71
|
+
mellan riktig back/forward-nav (path/search andras) och hash-
|
|
72
|
+
only-nav (browser default scroll-to-anchor + hashchange). Vid
|
|
73
|
+
hash-only ska turbo INTE fetch+swap - det skulle overrida
|
|
74
|
+
browser-default-scrollen med scrollTo(0, cachedScroll=0).
|
|
75
|
+
--------------------------------------------------------------*/
|
|
76
|
+
let lastPathSearch = window.location.pathname + window.location.search;
|
|
77
|
+
|
|
69
78
|
/*--------------------------------------------------------------
|
|
70
79
|
Lank-eligibility: ska denna <a> hanteras av Turbo eller browsern?
|
|
71
80
|
--------------------------------------------------------------*/
|
|
@@ -316,6 +325,13 @@
|
|
|
316
325
|
history.pushState( mergeState( { scrollY: 0 } ), '', finalUrl );
|
|
317
326
|
}
|
|
318
327
|
|
|
328
|
+
// Spara nya path+search sa popstate-handlern kan upptacka
|
|
329
|
+
// hash-only-navigations (path/search aterstaller, bara hash byter).
|
|
330
|
+
try {
|
|
331
|
+
const parsed = new URL( finalUrl );
|
|
332
|
+
lastPathSearch = parsed.pathname + parsed.search;
|
|
333
|
+
} catch ( _ ) { /* ignore */ }
|
|
334
|
+
|
|
319
335
|
// Notify subscribers (nav-optimistic.js, hero-roll.js, future modules).
|
|
320
336
|
document.dispatchEvent( new CustomEvent( 'turbo:navigated', {
|
|
321
337
|
detail: { url: finalUrl, fromUrl: fromUrl, popstate: !! options.popstate },
|
|
@@ -357,8 +373,26 @@
|
|
|
357
373
|
turbo: true via mergeState sa popstate-handling vet att vi ar
|
|
358
374
|
i turbo-modell hela vagen. Browser-internals (scroll-cache,
|
|
359
375
|
etc.) bevaras eftersom vi merge:ar istallet for replace:ar.
|
|
376
|
+
|
|
377
|
+
Chrome firar popstate aven for hash-only-navs pa samma
|
|
378
|
+
dokument (a href="#x"-klick laggs som history-entry + ev.
|
|
379
|
+
popstate beroende pa browser-version). Vi vill INTE turbo-
|
|
380
|
+
fetch+swap i de fallen - browser default-scroll till anchor
|
|
381
|
+
+ hashchange-event hanterar det helt natively. Att fetch+swap
|
|
382
|
+
trots det leder till scrollTo(0, 0) i swap-callbacken (state
|
|
383
|
+
null fran browser-skapad entry), vilket overrider anchor-
|
|
384
|
+
scrollen och blir "scrollade tillbaka till toppen"-bugg.
|
|
385
|
+
|
|
386
|
+
Detektion: jamfor nuvarande pathname+search mot lastPathSearch
|
|
387
|
+
(updateras vid varje lyckad navigateTo). Identiska = hash-only.
|
|
360
388
|
--------------------------------------------------------------*/
|
|
361
389
|
window.addEventListener( 'popstate', function () {
|
|
390
|
+
const currentPathSearch = window.location.pathname + window.location.search;
|
|
391
|
+
if ( currentPathSearch === lastPathSearch ) {
|
|
392
|
+
// Hash-only-nav pa samma dokument - browser default + hashchange
|
|
393
|
+
// gor jobbet. Inget att swappa.
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
362
396
|
navigateTo( window.location.href, { popstate: true } );
|
|
363
397
|
} );
|
|
364
398
|
|