From 6eda01863920ae45d56a65563a7f956a429fced8 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sun, 11 Oct 2026 22:47:47 -0700 Subject: Feed: a picture opens in the media pager, with the feed's other pictures a swipe away. Tapping a picture in a feed row used to open it alone (the lightbox); it now opens the media grid's pager on that picture, over the feed's pictures in the feed's own order — every picture of a post before the next post's (a repost's inner post, the feed's moderation) — so a swipe up or down, or any arrow key (up/down as before, now left/right too), steps to the next or previous one. A tap on the picture that opened it still closes it, as a full-screen picture always has; once the reader has moved on, the first tap shows the post's details and actions, and the next (or Escape, or the ×) closes the pager with the feed landed on that post (glideToPost, once the pop has brought the feed back). The pager's pictures pinch to zoom (attachZoom, now exported, without its wheel — the wheel is the pager's; at 1× one finger is the pager's swipe). Pictures in threads, profiles and chats still open alone. tools/feed-picture-pager-test.js; image-tap-test and lightbox-scroll-test accept the pager as the full-screen picture. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- tools/image-tap-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tools/image-tap-test.js') diff --git a/tools/image-tap-test.js b/tools/image-tap-test.js index 2bf840b..d3bcb7e 100644 --- a/tools/image-tap-test.js +++ b/tools/image-tap-test.js @@ -56,7 +56,7 @@ try { const beside = process.env.DBG && await page.evaluate(([x, y]) => { const e = document.elementFromPoint(x, y); const chain = []; for (let n = e; n && chain.length < 5; n = n.parentElement) chain.push(n.tagName + '.' + (n.className || '').toString().split(' ').join('.') + (n.onclick ? '[click]' : '')); return chain; }, [r.x + 8, r.y + r.h / 2]); await page.mouse.click(r.x + 8, r.y + r.h / 2); await sleep(1200); - const band = await page.evaluate(() => ({ thread: !!document.querySelector('.thread-page'), lightbox: !!document.querySelector('.lightbox') })); + const band = await page.evaluate(() => ({ thread: !!document.querySelector('.thread-page'), lightbox: !!document.querySelector('.lightbox, .media-pager') })); check('a tap on the blank band opens the post', band.thread && !band.lightbox, JSON.stringify(band)); await page.goBack(); await sleep(1200); @@ -64,7 +64,7 @@ try { const r2 = await page.evaluate(() => { const b = document.querySelector('.notes-feed img.note-img').getBoundingClientRect(); return { x: b.left, y: b.top, w: b.width, h: b.height }; }); await page.mouse.click(r2.x + r2.w / 2, r2.y + r2.h / 2); await sleep(800); - const pic = await page.evaluate(() => ({ thread: !!document.querySelector('.thread-page'), lightbox: !!document.querySelector('.lightbox') })); + const pic = await page.evaluate(() => ({ thread: !!document.querySelector('.thread-page'), lightbox: !!document.querySelector('.lightbox, .media-pager') })); check('a tap on the picture opens the picture', pic.lightbox && !pic.thread, JSON.stringify(pic)); } finally { await browser.close(); server.stop(true); } console.log(ok ? '\n✅ bands open the post, the picture opens the picture' : '\n❌ failed'); -- cgit v1.2.3