From 2b349136635034377ba26e3d449404cfdd27f36e Mon Sep 17 00:00:00 2001 From: Grace Kind Date: Fri, 14 Aug 2026 08:36:45 -0500 Subject: [PATCH] Update router logic --- package.json | 2 +- src/js/router.js | 17 +++++++++++------ src/js/views/home.view.js | 1 - 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 453b3671..370ff0c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "impro", - "version": "0.18.193", + "version": "0.18.194", "type": "module", "scripts": { "start": "rm -rf \"${BUILD_DIR:-build}\" && NODE_ENV=development eleventy --serve", diff --git a/src/js/router.js b/src/js/router.js index 46388369..fc1d3fba 100644 --- a/src/js/router.js +++ b/src/js/router.js @@ -258,16 +258,15 @@ export class Router extends EventEmitter { window.dispatchEvent(new CustomEvent("page-transition")); // Strip query parameters for route matching (but keep full path for caching) const pathname = path.split("?")[0]; - if (this.currentPage) { + const outgoingPage = this.currentPage; + if (outgoingPage) { // Safari can keep processing a focused search control after its page is // hidden. Release focus before moving the page into the route cache. const activeElement = document.activeElement; - if (activeElement && this.currentPage.contains(activeElement)) { + if (activeElement && outgoingPage.contains(activeElement)) { activeElement.blur(); } - this.currentPage.dispatchEvent(new CustomEvent("page-exit")); - this.currentPage.classList.remove("page-visible"); - this.currentPage.classList.add("page-hidden"); + outgoingPage.dispatchEvent(new CustomEvent("page-exit")); } if (this.pages.has(path)) { // Return to existing page @@ -278,6 +277,8 @@ export class Router extends EventEmitter { const scrollY = this.scrollStates.get(path) ?? 0; this.currentPage.classList.remove("page-hidden"); this.currentPage.classList.add("page-visible"); + outgoingPage.classList.remove("page-visible"); + outgoingPage.classList.add("page-hidden"); // Scroll before dispatching so a "manual" view's own scroll wins const scrollRestore = routeInfo.options.scrollRestore ?? "back"; switch (scrollRestore) { @@ -315,7 +316,7 @@ export class Router extends EventEmitter { const view = await viewGetter(); const newPage = document.createElement("div"); - newPage.classList.add("page", "page-visible"); + newPage.classList.add("page", "page-hidden"); const container = options.layout === false ? this.containers.bare : this.containers.default; container.appendChild(newPage); @@ -328,6 +329,10 @@ export class Router extends EventEmitter { layout: options.layout === false ? null : this.layout, container: this.currentPage, }); + this.currentPage.classList.remove("page-hidden"); + this.currentPage.classList.add("page-visible"); + outgoingPage?.classList.remove("page-visible"); + outgoingPage?.classList.add("page-hidden"); this.currentPage.dispatchEvent(new CustomEvent("page-enter")); this.emit("page-shown", this.currentPage); } diff --git a/src/js/views/home.view.js b/src/js/views/home.view.js index d3f633e3..7d8d0299 100644 --- a/src/js/views/home.view.js +++ b/src/js/views/home.view.js @@ -400,7 +400,6 @@ export default async function homeView({ preloadHiddenFeeds(pinnedItems); initializePostSeenObservers(pinnedItems); - window.scrollTo(0, 0); }); // Ensure current user before loading feed to prevent flash of unfiltered feed -- 2.51.2