Changeset 70dbef4 in Klonkt for src/views/shell.ejs


Ignore:
Timestamp:
08/19/2026 06:15:33 PM (3 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
3a3a882
Parents:
70e9147
git-author:
Bart <bart@…> (08/19/2026 05:44:15 PM)
git-committer:
Bart <bart@…> (08/19/2026 06:15:33 PM)
Message:

De cirkel opent in Grid, en onthoudt dat apart

Grid is daar de standaard: je komt binnen in tegels, niet in de lijst. De knop
blijft een tuimelaar, dus terug naar de lijst kan gewoon.

DIE KEUZE STAAT NU LOS van je gewone voorkeur, en dat is geen extraatje maar
nodig. Op de cirkel betekent 'reader' iets anders dan thuis -- daar bestaat
Lezen niet (het zijn berichten van anderen, van hun servers), dus het valt er
terug op de gewone lijst. Deelden ze één sleutel, dan zou Grid uitzetten op de
cirkel je THUISWEERGAVE veranderen: je komt terug en de feed is niet meer wat je
achterliet. Nu schrijft de cirkel naar pcms-cirkel-view en de rest naar
pcms-feed-view.

En de weergave wordt opnieuw bepaald bij elke htmx-navigatie, niet alleen bij
het laden: van huis naar de cirkel en terug wisselt niet alleen welke knop er
staat maar ook welke onthouden keuze geldt.

Nagelopen in de browser, de hele rondgang: op solo Lezen kiezen, naar de cirkel
(opent in Grid, solo-keuze lekt niet mee), daar Grid uitzetten (lijst,
cirkelsleutel 'list', solo-voorkeur onaangeroerd), en terug thuis staat Lezen er
nog gewoon.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/shell.ejs

    r70e9147 r70dbef4  
    547547(function() {
    548548  var body = document.body;
    549   // Restore feed view + grid cols from localStorage (overrides server default)
     549
     550  // DE CIRKEL HEEFT EEN EIGEN KEUZE, met een eigen standaard: Grid.
     551  //
     552  // Twee redenen om die apart te houden van de gewone voorkeur. Ten eerste is
     553  // Lezen daar geen optie (dat zijn berichten van anderen, van hun servers), dus
     554  // "reader" betekent er iets anders dan hier: de gewone lijst. Ten tweede zou
     555  // een tuimeling op de cirkel anders je SOLO-weergave veranderen -- je zet daar
     556  // Grid uit en komt thuis in een andere feed terug dan je achterliet.
     557  var CIRKEL_SLEUTEL = 'pcms-cirkel-view';
     558  function opCirkel() { return body.classList.contains('on-cirkel'); }
     559
     560  /** Zet de weergave die bij DEZE pagina hoort. Draait bij init en bij elke nav. */
     561  function pasWeergaveToe() {
     562    try {
     563      if (opCirkel()) {
     564        // Alles behalve een uitdrukkelijke 'list' is grid: dat is de standaard.
     565        body.dataset.feedView = (localStorage.getItem(CIRKEL_SLEUTEL) === 'list') ? 'reader' : 'grid';
     566        return;
     567      }
     568      var v = localStorage.getItem('pcms-feed-view');
     569      // 'timeline' bestaat niet meer als keuze, maar staat nog in de localStorage
     570      // van iedereen die hier eerder was. Zonder deze vertaling zou zo iemand een
     571      // weergave houden die nergens meer een knop heeft: de pil helemaal grijs, en
     572      // een feed die niet is wat hij koos. Lezen is waar Tijdlijn in opging.
     573      if (v === 'timeline') v = 'reader';
     574      if (v === 'grid' || v === 'reader') body.dataset.feedView = v;
     575    } catch (e) { /* geen opslag: de server-standaard blijft staan */ }
     576  }
     577  pasWeergaveToe();
     578
    550579  try {
    551     var v = localStorage.getItem('pcms-feed-view');
    552     // 'timeline' bestaat niet meer als keuze, maar staat nog in de localStorage
    553     // van iedereen die hier eerder was. Zonder deze vertaling zou zo iemand een
    554     // weergave houden die nergens meer een knop heeft: de pil helemaal grijs, en
    555     // een feed die niet is wat hij koos. Lezen is waar Tijdlijn in opging.
    556     if (v === 'timeline') v = 'reader';
    557     if (v === 'grid' || v === 'reader') body.dataset.feedView = v;
    558580    var c = parseInt(localStorage.getItem('pcms-grid-cols'), 10);
    559581    if (c === 2 || c === 3 || c === 4) body.dataset.gridCols = String(c);
     
    587609  // dáár weet syncAria de juiste pagina-class — los van de afterSettle-timing.
    588610  // Een vertraagde herhaling wint eventuele resterende races (OOB-chrome-swap).
    589   document.body.addEventListener('htmx:afterSettle', function(){ syncAria(); setTimeout(syncAria, 60); });
    590   document.body.addEventListener('pcmsNav', function(){ syncAria(); setTimeout(syncAria, 60); });
     611  // Eerst de weergave die bij de NIEUWE pagina hoort, dan pas de pil bijwerken:
     612  // van de cirkel naar huis en terug wisselt niet alleen de knop maar ook welke
     613  // onthouden keuze telt.
     614  document.body.addEventListener('htmx:afterSettle', function(){ pasWeergaveToe(); syncAria(); setTimeout(syncAria, 60); });
     615  document.body.addEventListener('pcmsNav', function(){ pasWeergaveToe(); syncAria(); setTimeout(syncAria, 60); });
    591616
    592617  // Pages where the body actually has a feed to toggle. On these the
     
    621646      }
    622647      body.dataset.feedView = view;
    623       try { localStorage.setItem('pcms-feed-view', view); } catch(_) {}
     648      // Op de cirkel onthouden we los, want daar betekent 'reader' de gewone
     649      // lijst en hoort het je thuisweergave niet aan te raken.
     650      try {
     651        if (opCirkel()) localStorage.setItem(CIRKEL_SLEUTEL, view === 'grid' ? 'grid' : 'list');
     652        else localStorage.setItem('pcms-feed-view', view);
     653      } catch(_) {}
    624654      syncAria();
    625655      // On non-feed pages the switcher acts as a navigation: take the
Note: See TracChangeset for help on using the changeset viewer.