From 7d09e7f2b01f72db518f7cf906d887c22a49387e Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 16 Oct 2026 22:13:16 -0700 Subject: The wheel coasts wherever the pointer is while a feed or a thread is up. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The coast only took a notch whose target sat inside the feed or the thread, so a pointer resting on the rail, the header or the wallet column beside the feed on a wide screen got the browser's plain scroll (Adam, 2026-10-16: "when my cursor is hovered over the right side bar or any part of the page that's not the feed, wheeling scrolls without coasting. can we make it coast no matter where my pointer is?"). Now the question is whether a feed or a thread is the page on screen; the pointer's spot only matters when it is over something that takes the wheel itself — a text box, the chips strip, the lightbox, the pager, a box that scrolls on its own — and on a page with no feed on it (the wallet) the wheel stays the browser's. feed-wheel-reverse-test: the fixture's page carries a feed unless told otherwise; a notch with the pointer over the wallet column, or over nothing in particular, coasts; one on a page without a feed does not. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01J1Kon8bxJoHRpJdSzshCkp --- src/app.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/app.js b/src/app.js index 6f4d10b..f904cc3 100644 --- a/src/app.js +++ b/src/app.js @@ -6617,12 +6617,20 @@ if (INTENT_URI) { // selection, and a drag that moved isn't a click on what it started on. (() => { if (typeof window === 'undefined' || matchMedia('(prefers-reduced-motion: reduce)').matches) return; - const SCOPE = '.feed-page, .notes-feed, .thread-page'; // a thread scrolls the same as a feed (Adam, 2026-10-16) + // The wheel coasts whenever a feed or a thread is the page being scrolled + // — wherever the pointer happens to be: over the posts, the header, the + // rail, the wallet column beside the feed on a wide screen (Adam, + // 2026-10-16: "when my cursor is hovered over the right side bar or any + // part of the page that's not the feed, wheeling scrolls without + // coasting. can we make it coast no matter where my pointer is?") — + // except over something that takes the wheel itself: a text box, the + // chips strip, the lightbox, the pager, a box that scrolls on its own. + const SCOPE = '.feed-page, .notes-feed, .thread-page'; // the pages that coast (a thread scrolls the same as a feed) const TAU = 325; // ms: how quickly a coast dies down (the phone's feel) const VMAX = 16; // px/ms const inScope = (t) => { const el = t && t.closest ? t : t && t.parentElement; - if (!el || !el.closest(SCOPE)) return false; + if (!el || !document.querySelector(SCOPE)) return false; // (A video or an audio player is part of the feed: a notch over a clip // coasts like one over the words — the wheel does nothing to a player // itself, so there is nothing to leave it. Adam, 2026-10-16: "over a -- cgit v1.2.3