Ignore:
Timestamp:
08/18/2026 06:47:58 PM (3 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
7cf8144
Parents:
03ff677
git-author:
Bart <bart@…> (08/18/2026 05:13:14 AM)
git-committer:
Bart <bart@…> (08/18/2026 06:47:58 PM)
Message:

Tijdlijn | Grid | Lezen: de leesweergave krijgt een ingang

De leesweergave bestond wel maar was alleen te bereiken door /read in te tikken.
Nu staat ze als derde optie in dezelfde pil.

Een <a>, geen <button>, en met opzet NIET de klasse view-switch-btn: de
gedelegeerde klik in shell.ejs pakt alles met die klasse op, zet
body[data-feed-view] erop en springt op niet-feedpagina's terug naar home. Die
had deze link opgegeten.

Door er een link naartoe te leggen kwamen twee fouten boven die er al zaten:

  1. De route gaf ELKE htmx-aanvraag één kaal artikel terug, want de leesmodule had ?partial=1 geleend -- en dat betekent op deze site al iets anders: "de pagina zonder de schil". Een gebooste link naar /read schoof dus één artikel in #pcms-main: geen stroom, geen script. De module vraagt nu ?fragment=1, en al het andere gaat naar pages/read waar renderPage zelf over de schil beslist.
  1. PAGE_CLASSES in shell.ejs is een witte lijst, en 'on-read' stond er niet in. Bij een htmx-navigatie werd de class dus weggefilterd en sloeg ELKE regel van de leesweergave (.on-read ...) niet aan: geen schermhoge berichten, geen snappen, geen wegschuivende balken. Bij intikken ging het goed, want dan zet de shell de class zelf -- vandaar dat het onzichtbaar bleef.

Beide nagelopen in de browser: de pil navigeert, on-read staat er, min-height is
de schermhoogte, snappen staat aan, en de opgeslagen feed-view blijft ongemoeid.

MOD_V naar 3 (read.js) en style.css naar v68 (nieuwe selector).

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/partials/view-switcher.ejs

    r03ff677 r2d2fd8c  
    88  // Pagina's zonder actieve feed-weergave → niets in de pill is 'actief' (Solo/Cirkel
    99  // + 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']
     10  var _neutral = ['on-shows','on-downloads','on-post','on-epk','on-linkbio','on-newsletter','on-archive','on-read']
    1111                   .some(function(c){ return _bc.indexOf(c) >= 0; });
     12  var _onRead = _bc.indexOf('on-read') >= 0;
     13  var _sbR = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
    1214%>
    1315<div class="view-switcher-wrap">
     
    4547        <span><%= t('switch.grid') %></span>
    4648      </button>
     49      <%# Lezen is GEEN in-place omschakeling maar een andere route (/read), dus
     50          een <a> en niet een <button>. En bewust NIET de klasse view-switch-btn:
     51          de gedelegeerde klik in shell.ejs pakt alles met die klasse op, zet
     52          body[data-feed-view] erop en springt op niet-feedpagina's terug naar
     53          home -- dat zou deze link opeten. Andere klasse, zelfde uiterlijk.
     54          aria-selected staat hier vast: syncAria() raakt alleen .view-switch-btn
     55          aan, dus de actieve staat op /read blijft staan na een htmx-navigatie. %>
     56      <a class="view-switch-link" href="<%= _sbR %>/read" role="tab"
     57         aria-selected="<%= _onRead ? '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      </a>
    4761    </div>
    4862    <% if (!_neutral) { %>
Note: See TracChangeset for help on using the changeset viewer.