diff --git a/tests/ui/app.spec.ts b/tests/ui/app.spec.ts index 537ba76..4da04d3 100644 --- a/tests/ui/app.spec.ts +++ b/tests/ui/app.spec.ts @@ -1549,6 +1549,10 @@ test('All Subscriptions marks everything read, across every feed', async ({ page await expect(page.locator('#detail [data-a="read"][title="Mark read"]')).toBeVisible(); await expect(all.locator('.badge')).not.toHaveText('0'); + // Checking every feed is the top bar's alone; the header had a second button for it (#416). + await expect(page.locator('#content .acts button')).toHaveCount(1); + await expect(page.locator('#scanAll')).toBeVisible(); + page.once('dialog', d => d.accept()); await page.locator('#content .acts [data-a="readall"]').click(); await expect(all.locator('.badge')).toHaveText('0'); diff --git a/web/CHANGELOG.md b/web/CHANGELOG.md index fb9a38e..0a64d6a 100644 --- a/web/CHANGELOG.md +++ b/web/CHANGELOG.md @@ -17,6 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - iPX opens and reads without a connection: the lists it has fetched (All Subscriptions, Unread and the feeds it preloads or you opened) are kept on the device with the pictures in their unread items, up to 200 MB of them, and items read or flagged and places in an episode while offline are sent when the connection is back. Signing out clears it all (#389). - An open page, or the home-screen app, takes up a new version of iPX by itself once it reconnects after a deploy, back on the item you had open; while something is playing, a dialog is open or a search is typed, it offers a reload instead (#388). +### Removed + +- The Check every feed button in All Subscriptions' header, which did what the top bar's does (#416). + ### Fixed - Swiping, or j, through more than 50 items no longer stops at the 50th until a reload: the next ones are fetched as you near the end, and Load more on the Unread tab no longer skips as many unread items as you had read (#383). - On the Unread tab, a short list read through no longer asks the server for more that is not there, or shows a count of 0 items beside the items still on screen (#385). diff --git a/web/src/feedpage.ts b/web/src/feedpage.ts index 42629dd..360ec6d 100644 --- a/web/src/feedpage.ts +++ b/web/src/feedpage.ts @@ -62,7 +62,6 @@ function renderFeed(){ subscribe to, newest first ยท ${unreadAll} unread
-
`) + ` @@ -182,7 +181,6 @@ async function feedAction(a: string,f: Feed){ } /// All Subscriptions' own buttons: a feed's, across every feed you read. async function allAction(a: string){ - if(a==='scanall') return scanAll(); if(a==='readall'){ const n=S.feeds.reduce((k,x)=>k+(x.unread||0),0); if(!n){ toast('Nothing unread'); return; } diff --git a/web/src/feeds.ts b/web/src/feeds.ts index 4c546bd..e10cfda 100644 --- a/web/src/feeds.ts +++ b/web/src/feeds.ts @@ -64,7 +64,7 @@ function paintScanning(){ const self=spinFeed!==null&&spinFeed===S.feed, any=document.body.classList.contains('scan-any'); document.body.classList.toggle('scan-this',self); // Turning was all that said a check was running, and with motion reduced nothing turns (#310). - for(const b of $$('#scanAll,.fhead [data-a=scanall],.fhead [data-a=scan]')){ + for(const b of $$('#scanAll,.fhead [data-a=scan]')){ const on=b.dataset.a==='scan'?self:any; b.dataset.label??=b.getAttribute('aria-label')!; if(on) b.setAttribute('aria-busy','true'); else b.removeAttribute('aria-busy');