From 0c2c3a379eb338311bec282542364a2abd71ed61 Mon Sep 17 00:00:00 2001 From: rays Date: Fri, 16 Oct 2026 19:22:29 +0000 Subject: [PATCH] No + on the Signals folder's row, so it is like any folder's (#265) Co-Authored-By: Claude Opus 5.5 --- docs/signals.md | 8 ++++---- tests/ui/app.spec.js | 5 +++-- web/CHANGELOG.md | 2 +- web/app.css | 3 --- web/src/signals.ts | 4 +--- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/docs/signals.md b/docs/signals.md index c20f4ec..a621fe4 100644 --- a/docs/signals.md +++ b/docs/signals.md @@ -13,16 +13,16 @@ their Signals that has not heard about the item yet. ## What someone sees - **The sidebar.** A Signals folder comes first in the feed list, under All Subscriptions (#255, - #256). It is closed or open as an OPML's folder is, remembered in each browser. A + at the right - of the folder's row opens New signal. Inside the folder are the person's Signals, each with its - words under its name and its unread count. + #256). It is closed or open as an OPML's folder is, remembered in each browser. Its row is like + any folder's (#265); New signal is the + on the folder's page. Inside the folder are the + person's Signals, each with its items and unread counted under its name. - **An icon of its own** (#261), chosen in the Signal's dialog from all of Font Awesome Free 7.3.1, the set the page's own icons come from: 2,883 icons, solid, regular and brands, searched by name and Font Awesome's search terms ("ai" finds the robot). Without one, a Signal shows its initials. **Let Jev pick** asks Jev to choose (#263), and a Signal made without an icon gets Jev's pick by itself, a moment after it is made. Every Signal's tile is in the accent tint the folder has. - **Each Signal's row** says "12 items ยท 3 unread", as a feed's row counts its own. -- **The folder's page** lists the Signals, as an OPML's page lists its feeds, with a + of its own. +- **The folder's page** lists the Signals, as an OPML's page lists its feeds, with the + for a new one. - **A Signal's page** is an ordinary item list: All, Unread, Downloaded and Pinned, search and sort. Its header says what it listens for (the sentence, or the words), and that nothing is picked out without a key. Edit changes the name, the words or the sentence; Delete removes the Signal diff --git a/tests/ui/app.spec.js b/tests/ui/app.spec.js index 0743311..7b4072f 100644 --- a/tests/ui/app.spec.js +++ b/tests/ui/app.spec.js @@ -2079,8 +2079,9 @@ test('a Signal holds the items Jev says fit its keywords, read where they are re const { id: feed } = await (await page.request.post('/api/feeds', { data: { url: 'http://127.0.0.1:8792/signal.xml' } })).json(); await page.reload(); - // The + on the folder's own row (#256); making one opens the folder to show it. - await page.locator('#feedlist .sigs .sigadd').click(); + // The + on the folder's page (#265); making one opens the folder to show it. + await page.locator('#feedlist .sigs').click(); + await page.locator('#content .acts [data-a="new"]').click(); await page.locator('#sgname').fill('F1'); await page.locator('#sgkwin').fill('monaco'); await page.keyboard.press('Enter'); diff --git a/web/CHANGELOG.md b/web/CHANGELOG.md index 25308f7..836d622 100644 --- a/web/CHANGELOG.md +++ b/web/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Signals pick what matters out of the noise of every feed you subscribe to: New signal takes a name, the words to listen for and, if those are not enough, a sentence saying what you mean, and its page lists the items from your feeds that are about it, read and unread as in their own feeds. Settings takes your TypeSafe key, which Signals need (#254). They are kept in a Signals folder first in the feed list, under All Subscriptions, closed or open as an OPML is, with a + on its row for a new one and its own page listing them (#255, #256). Each can have an icon of its own, searched for among all of Font Awesome Free, in place of its initials (#261), or Jev's pick of one, which a Signal made without an icon gets by itself; each Signal's row counts its items and unread as a feed's does (#263). +- Signals pick what matters out of the noise of every feed you subscribe to: New signal takes a name, the words to listen for and, if those are not enough, a sentence saying what you mean, and its page lists the items from your feeds that are about it, read and unread as in their own feeds. Settings takes your TypeSafe key, which Signals need (#254). They are kept in a Signals folder first in the feed list, under All Subscriptions, closed or open as an OPML is, with its own page listing them and a + there for a new one (#255, #256, #265). Each can have an icon of its own, searched for among all of Font Awesome Free, in place of its initials (#261), or Jev's pick of one, which a Signal made without an icon gets by itself; each Signal's row counts its items and unread as a feed's does (#263). - A list opens at once when you have seen it before or the page fetched it ahead: All Subscriptions and the feeds with something unread are fetched when the page loads, and a feed or filter as the pointer or a finger reaches it, then refreshed behind once shown. A list that has to be waited for shows a spinner instead of nothing (#247). Currently Listening and the Directory's front page are fetched ahead the same way and open at once (#248). ### Changed diff --git a/web/app.css b/web/app.css index a1e0785..7ada77e 100644 --- a/web/app.css +++ b/web/app.css @@ -607,9 +607,6 @@ input:focus,select:focus{outline:0;border-color:var(--accent)} .iconcell{height:40px;border-radius:8px;display:grid;place-items:center;color:var(--dim)} .iconcell:hover,.iconcell[aria-selected="true"]{background:var(--raise);color:var(--fg)} .iconcell .ficon{width:20px;height:20px} -/* New signal, on the folder's row before its count. */ -.sigadd{width:26px;height:26px;margin-right:-4px} -.sigadd .i{width:12px;height:12px} /* Only a folder has a triangle, hung in the margin so every feed's art lines up with the places above it. The button is the row's full height and 24 px wide: a near miss used to open the folder's page, and 16 px left the triangle cramped against the art. */ diff --git a/web/src/signals.ts b/web/src/signals.ts index 73009df..17c0327 100644 --- a/web/src/signals.ts +++ b/web/src/signals.ts @@ -50,13 +50,11 @@ function signalFolder(list: HTMLElement, q: string){ list.appendChild(feedRow(SIGNALS,'sigs', ``+ sigArt()+`
Signals${n?plural(n,'signal'):'What matters, out of the noise'}
`+ - // The + before the count, so the counts line up with the Signals' under it. - ``+ + // No + of its own (#265): a row like any folder's. New signal is on the folder's page. badgeHTML(S.signals.reduce((k,s)=>k+s.unread,0)), ()=>selectFeed(SIGNALS))); const row=list.lastElementChild!; $('.chev',row).onclick=(ev: Event)=>{ ev.stopPropagation(); toggleGroup(SIGNALS); }; - $('.sigadd',row).onclick=(ev: Event)=>{ ev.stopPropagation(); signalModal(); nav(false); }; if(!open) return; for(const sg of mine){ const el=feedRow(':signal:'+sg.id,'child',