diff --git a/PROGRESS.md b/PROGRESS.md index 75418e7..ae6cc80 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -56,6 +56,15 @@ and until now nothing set them. --- +## 2026-09-10 — A folder counts what it holds + +An OPML subscription has no entries of its own, so its row always read `0 unread` no matter how much +was waiting inside it. Unread and saved are now summed from the feeds it holds -- from all of them, +not just the ones a search filter left showing, so the number doesn't move as you type. The badge +caps at `999+` (the real figure is in its tooltip); a four-digit count ate the title beside it. + +--- + ## 2026-09-10 — Sidebar alignment The feed list had four different left edges: a row with no children skipped the chevron entirely, so diff --git a/web/index.html b/web/index.html index e852574..e5310aa 100644 --- a/web/index.html +++ b/web/index.html @@ -457,6 +457,13 @@ function renderFeeds(){ } for(const [f,depth] of order){ const kids=shown.filter(c=>c.group===f.id).length; + // A subscription holds no entries itself, so its counts are the sum of what is inside -- + // taken from every feed it holds, not just the ones a filter left showing. + const mine=S.feeds.filter(c=>c.group===f.id); + const sum=k=>mine.reduce((n,c)=>n+(c[k]||0),0); + const [unread,eps,saved]=mine.length + ? [sum('unread'),sum('entries'),sum('downloaded')] + : [f.unread,f.entries,f.downloaded]; const el=document.createElement('div'); el.className='feed'+(S.feed===f.id?' sel':'')+(depth?' child':'')+(kids?' group':''); const open = kids && (expanded.has(f.id) || q); @@ -464,11 +471,11 @@ function renderFeeds(){ `${kids?'▶':''}`+ artHTML(f.image,f.title||f.id)+ `