aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/note.js
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-05 13:13:54 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-05 13:13:54 +0200
commit92b7afcb186d7aaf475939d58a0385f408425eeb (patch)
treea0283cdda0e91cf1af2a1ff7b1a0a896d3a4d1f4 /packages/meshbay-hub/src/meshbay_hub/static/note.js
parent97fa4cf78a826050b9d1df0b484a7794861cda80 (diff)
downloadmeshbay-main.tar.gz
feat(hub): say "N groups unreachable" on Search for a few seconds, not for goodHEAD0.18main
The line sat above the results for as long as the page was open. It is now said once a cross-group pass is over, for five seconds, in the same passing note as "Link copied" — moved out of copy-link.js into note.js (`say(text, ms)`), one note at a time for the whole page. The `.search-unreachable` rule goes with the line it styled. The copy-link probe now also checks in Chrome that the note goes by itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/note.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/note.js24
1 files changed, 24 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/note.js b/packages/meshbay-hub/src/meshbay_hub/static/note.js
new file mode 100644
index 0000000..f55c307
--- /dev/null
+++ b/packages/meshbay-hub/src/meshbay_hub/static/note.js
@@ -0,0 +1,24 @@
+/**
+ * A line said once and gone, in the playlists' note (style.css
+ * `.playlist-note`): "Link copied", "2 groups unreachable". Not a dialog —
+ * nothing here is anyone's to dismiss.
+ *
+ * Appended to the body rather than rendered by a view, because the views that
+ * speak include modals and a context menu that has already closed. One note
+ * at a time: a second replaces the first and restarts the clock.
+ */
+
+let _note = null;
+let _timer = null;
+
+export function say(text, ms = 2500) {
+ if (!_note) {
+ _note = document.createElement('div');
+ _note.className = 'playlist-note page-note';
+ _note.setAttribute('role', 'status');
+ }
+ _note.textContent = text;
+ document.body.appendChild(_note);
+ clearTimeout(_timer);
+ _timer = setTimeout(() => { if (_note) _note.remove(); }, ms);
+}