aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-09-27 22:34:33 -0700
committerAdam Soltys <[email protected]>2026-09-27 22:34:33 -0700
commit3b3ccf7bcab9bf5344714fb8722667a49a06e53f (patch)
tree4dc6324a5e908a7b117fe98b439f7f4842a666eb /src/app.js
parentd7a3171968ba1a09f46cd15b04f2dae21a99aee2 (diff)
downloadcoinosv3-3b3ccf7bcab9bf5344714fb8722667a49a06e53f.tar.gz
coinosv3-3b3ccf7bcab9bf5344714fb8722667a49a06e53f.zip
The default public feed is Popular, not the firehose: what people reacted to, in your language, with the machine posts gone.
A brand-new post has no reactions yet (of 73 fresh English posts on the four relays, one had two), so Popular starts from the other end: the latest reactions, reposts and zaps, counted per post by distinct people, then the posts two or more people touched. Older pages walk the reactions back in time; new ones arrive by a two-minute poll. At the door, JSON and other machine output are dropped, and so is anything not in the reader's language (script first, then a vote of function words among the Latin-script languages the app speaks; unknown passes). The raw firehose stays at /feed/all. A language selector sits under every feed, and changing it rebuilds the curated ones. A tall video scrolled past used to let go of its media at once and collapse, shifting the page under a thumb; it now waits a moment and holds its height until the clip is back. A tap on a full-screen picture closes it. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01VhUKyXKtsJ67QAFfb7QR9D
Diffstat (limited to 'src/app.js')
-rw-r--r--src/app.js5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/app.js b/src/app.js
index 5d6eb40..d31c75c 100644
--- a/src/app.js
+++ b/src/app.js
@@ -557,7 +557,7 @@ function imageViewer() {
return h('div', {
class: 'lightbox', onClick: close,
role: 'dialog', 'aria-modal': 'true',
- }, h('img', { src: ui.lightbox, alt: '', onClick: (e) => e.stopPropagation() }),
+ }, h('img', { src: ui.lightbox, alt: '', onClick: (e) => { e.stopPropagation(); close(); } }), // a tap on the picture closes it too: the × is small and far
// stop the bubble: the backdrop closes too, and two pops walk out of the room
h('button', { class: 'lightbox-x', 'aria-label': t('close'), onClick: (e) => { e.stopPropagation(); close(); } }, '\u00d7'));
}
@@ -2821,6 +2821,7 @@ function languagePicker() {
setLang(code);
await loadLocale(code); // fetch the locale's strings before re-rendering
applyDir();
+ featureHook('langChanged');
render();
},
},
@@ -5574,7 +5575,7 @@ const ctx = {
wallet.saveFeatureState('prefs', p);
try { wallet.saveCache(); } catch {}
},
- brandHeader, activeAccount, setAccounts: (list) => { accounts = list; },
+ brandHeader, languagePicker, activeAccount, setAccounts: (list) => { accounts = list; },
getAccounts: () => accounts,
claimTargets, enterWallet, activateAccount, commitAccount,
// cross-feature calls (e.g. gifts asking the ark feature for ark-gift