source: Klonkt/src/views/partials/view-switcher.ejs@ 3a3a882

main
Last change on this file since 3a3a882 was 3a3a882, checked in by Robin <roboburr@…>, 3 weeks ago

Lezen staat in de cirkel zichtbaar maar dood, in plaats van weg

De knop verdween daar helemaal, met het argument dat een knop die niets
doet erger is dan geen knop. In de praktijk pakte dat andersom uit: de
pil werd smaller op de cirkel en breder op solo, en die sprong leest als
'er is hier iets weg' -- terwijl juist NIET duidelijk werd dat Lezen
bestaat en er alleen hier niet kan. Nu staat hij er grijs bij, met een
titel die zegt waarom, en is Grid zichtbaar de enige mogelijkheid.

Wat daarmee vervalt: de aparte cirkel-voorkeur ('pcms-cirkel-view').
Die kon nog maar een waarde hebben. De solo-keuze blijft onaangeroerd --
op de cirkel schrijven we niets meer naar localStorage, dus je komt thuis
in de weergave die je achterliet.

Drie plekken rekenden erop dat de knop er niet was en zijn meegegaan: de
terugval 'is dit de enige knop, dan brengt hij je naar de standaard' (er
zijn er nu twee, en op de cirkel hoort Grid juist de enige te blijven),
de aria-sync (een dode knop kan nooit de actieve zijn) en de klik-
afhandeling (expliciet op sw.disabled, niet vertrouwen op dat een
disabled button geen click vuurt -- deze listener hangt op document).

Co-Authored-By: Claude Opus 5 <noreply@…>

  • Property mode set to 100644
File size: 5.2 KB
Line 
1<%# View switcher partial — Tijdlijn / Grid + grid-cols picker.
2 Mounted in shell.ejs once, visible on every non-admin page. Click
3 handlers are wired in shell.ejs via event-delegation on document so
4 HTMX-swapped content keeps working without rebinding. %>
5<%
6 var _bc = (typeof bodyClass === 'string') ? bodyClass : '';
7 var _onShows = _bc.indexOf('on-shows') >= 0;
8 // Pagina's zonder actieve feed-weergave → niets in de pill is 'actief' (Solo/Cirkel
9 // + Tijdlijn/Grid grijs). Alleen Agenda krijgt z'n eigen is-active op de agenda.
10 var _neutral = ['on-shows','on-downloads','on-post','on-epk','on-linkbio','on-newsletter','on-archive']
11 .some(function(c){ return _bc.indexOf(c) >= 0; });
12 // Lezen bestaat alleen waar een leessectie is, en dat is de eigen feed. De
13 // cirkel toont berichten van ANDEREN, opgehaald van hun servers -- daar is
14 // "het hele stuk" niet iets wat wij in handen hebben.
15 //
16 // De knop verdween daar eerst helemaal, met het argument dat een knop die
17 // niets doet erger is dan geen knop. In de praktijk pakte dat andersom uit:
18 // de pil werd smaller op de cirkel en breder op solo, en die sprong leest als
19 // "er is hier iets weg" -- terwijl juist NIET duidelijk werd dat Lezen
20 // bestaat en hier alleen niet kan. Hij staat er nu dood bij: zichtbaar, grijs
21 // en niet aan te klikken. Dan is er maar een mogelijkheid, Grid, en je ziet
22 // meteen dat dat geen toeval is maar de enige.
23 var _leesUit = _bc.indexOf('on-cirkel') >= 0;
24 var _gridStandaard = (typeof site !== 'undefined' && site && site.feed_view_default === 'grid');
25%>
26<div class="view-switcher-wrap">
27 <div class="container">
28 <% if (typeof premiumUnlocked !== 'undefined' && premiumUnlocked && typeof agendaEnabled !== 'undefined' && agendaEnabled) {
29 var _sbA = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
30 %>
31 <div class="agenda-pill">
32 <a class="vs-agenda<%= _onShows ? ' is-active' : '' %>" href="<%= _sbA %>/shows" aria-label="Agenda — evenementen">
33 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>
34 <span><%= t('switch.agenda') %></span>
35 </a>
36 </div>
37 <% } %>
38 <% if (typeof hasCirkel !== 'undefined' && hasCirkel) {
39 var _onCirkel = (typeof bodyClass === 'string' && bodyClass.indexOf('on-cirkel') >= 0);
40 var _sb = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
41 %>
42 <div class="feed-scope" role="tablist" aria-label="Solo of cirkel">
43 <a class="feed-scope-btn<%= (!_neutral && !_onCirkel) ? ' is-active' : '' %>" href="<%= _sb %>/"
44 role="tab" aria-selected="<%= (!_neutral && !_onCirkel) ? 'true' : 'false' %>"><%= t('switch.solo') %></a>
45 <a class="feed-scope-btn<%= (!_neutral && _onCirkel) ? ' is-active' : '' %>" href="<%= _sb %>/cirkel"
46 role="tab" aria-selected="<%= (!_neutral && _onCirkel) ? 'true' : 'false' %>"><%= t('switch.circle') %></a>
47 </div>
48 <% } %>
49 <div class="view-switcher" role="tablist" aria-label="Weergave">
50
51 <%# Lezen is de standaardweergave sinds Tijdlijn weg is: hele berichten,
52 één per scherm. De chronologische lijst bestaat nog wel als opmaak
53 (.feed-timeline, ook op de cirkel en het archief), maar is geen KEUZE
54 meer -- daar was Lezen de betere vorm van. %>
55 <button type="button" class="view-switch-btn" data-view="reader" role="tab"
56 <%- _leesUit ? 'disabled aria-disabled="true" tabindex="-1" title="' + t('switch.reader_solo_only') + '"' : '' %>
57 aria-selected="<%= (!_leesUit && !_neutral && !_gridStandaard) ? 'true' : 'false' %>">
58 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"/><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"/></svg>
59 <span><%= t('switch.reader') %></span>
60 </button>
61 <button type="button" class="view-switch-btn" data-view="grid" role="tab"
62 aria-selected="<%= (!_neutral && (_leesUit || _gridStandaard)) ? 'true' : 'false' %>">
63 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg>
64 <span><%= t('switch.grid') %></span>
65 </button>
66 </div>
67 <% if (!_neutral) { %>
68 <div class="grid-cols-picker" aria-label="Aantal kolommen">
69 <button type="button" class="grid-cols-btn" data-cols="2" title="2 kolommen">2</button>
70 <button type="button" class="grid-cols-btn" data-cols="3" title="3 kolommen">3</button>
71 <button type="button" class="grid-cols-btn" data-cols="4" title="4 kolommen">4</button>
72 </div>
73 <% } %>
74 </div>
75</div>
Note: See TracBrowser for help on using the repository browser.