From b7a9a34ef5e10d4504daf4dec3fc5bf80df5f455 Mon Sep 17 00:00:00 2001 From: Grace Kind Date: Sun, 31 May 2026 22:07:12 -0500 Subject: [PATCH] Update post thread scroll --- package.json | 2 +- src/css/style.css | 7 ++----- src/js/errorLogs.js | 4 ++++ src/js/views/home.view.js | 10 ++++++---- src/js/views/postThread.view.js | 15 +++++---------- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 920bc7bb..8f24f0d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "impro", - "version": "0.14.138", + "version": "0.14.139", "type": "module", "scripts": { "start": "rm -rf build && NODE_ENV=development eleventy --serve", diff --git a/src/css/style.css b/src/css/style.css index 23936ec2..fb7c8ebb 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -300,6 +300,7 @@ video { left: 0; width: 100%; min-height: 100%; + min-height: calc(100dvh - var(--safe-area-inset-bottom)); background-color: var(--background-color); } @@ -832,10 +833,6 @@ header { height: var(--chat-detail-header-height); } -#post-detail-view { - overflow-anchor: none; -} - .header > .header-row { display: flex; flex-direction: row; @@ -1939,7 +1936,7 @@ button.sidebar-plugin-nav-item { } .post-thread { - min-height: 100vh; + min-height: calc(100dvh - 46px - var(--safe-area-inset-bottom)); } .post-thread-reply-prompt { diff --git a/src/js/errorLogs.js b/src/js/errorLogs.js index f650cb36..6c7ad8c6 100644 --- a/src/js/errorLogs.js +++ b/src/js/errorLogs.js @@ -50,4 +50,8 @@ export function enableErrorLogs() { showMessage(args.join(" ")); consoleError(...args); }; + + window.logMessage = (...args) => { + showMessage(args.map((a) => JSON.stringify(a)).join(" ")); + }; } diff --git a/src/js/views/home.view.js b/src/js/views/home.view.js index a29eb80c..fd32fd31 100644 --- a/src/js/views/home.view.js +++ b/src/js/views/home.view.js @@ -265,15 +265,16 @@ class HomeView extends View { }); }); - let isFirstTabScroll = true; + let prevTabScrollFeedUri = null; // Scroll to active tab when current feed uri changes pageEffect(root, () => { const pinnedItems = dataLayer.derived.$hydratedPinnedItems.get(); if (!pinnedItems) return; - $currentFeedUri.get(); - const behavior = isFirstTabScroll ? "instant" : "smooth"; - isFirstTabScroll = false; + const currentFeedUri = $currentFeedUri.get(); + if (currentFeedUri === prevTabScrollFeedUri) return; + const behavior = prevTabScrollFeedUri ? "smooth" : "instant"; + prevTabScrollFeedUri = currentFeedUri; requestAnimationFrame(() => { const container = root.querySelector( ".tab-bar-horizontal-scroll-container", @@ -284,6 +285,7 @@ class HomeView extends View { if (activeTabButton) { activeTabButton.scrollIntoView({ behavior, + inline: "nearest", block: "nearest", }); } diff --git a/src/js/views/postThread.view.js b/src/js/views/postThread.view.js index b793d8ce..a20905d1 100644 --- a/src/js/views/postThread.view.js +++ b/src/js/views/postThread.view.js @@ -574,20 +574,15 @@ class PostThreadView extends View { } } else { // First appearance: snap to top - scrollToLargePost(); + const headerHeight = + root.querySelector("header")?.getBoundingClientRect().height ?? 0; + const largePostTop = largePost.getBoundingClientRect().top; + const offset = largePostTop - headerHeight; + window.scrollBy(0, offset); } } }); - function scrollToLargePost() { - const largePost = root.querySelector(".large-post"); - if (!largePost) return; - const headerHeight = - root.querySelector("header")?.getBoundingClientRect().height ?? 0; - const offset = largePost.getBoundingClientRect().top - headerHeight; - window.scrollBy(0, offset); - } - root.addEventListener("page-enter", async () => { let requests = []; if (isAuthenticated) { -- 2.51.2