- Timestamp:
- 08/20/2026 12:54:30 AM (3 weeks ago)
- Branches:
- main
- Children:
- 48481cd
- Parents:
- 598f090
- Location:
- src/views
- Files:
-
- 4 edited
-
pages/admin-site-edit.ejs (modified) (1 diff)
-
pages/home.ejs (modified) (1 diff)
-
partials/view-switcher.ejs (modified) (2 diffs)
-
shell.ejs (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/views/pages/admin-site-edit.ejs
r598f090 re46ebaa 196 196 <fieldset> 197 197 <legend><%= t('asite.feed_view') %></legend> 198 <%# Twee vragen, en ze zijn niet hetzelfde: WELKE tweede weergave je site 199 aanbiedt naast Grid, en waarin hij opent. %> 200 <label> 201 <span><%= t('asite.feed_alt') %></span> 202 <select name="feed_alt_view"> 203 <% var _a = ['timeline','auto'].indexOf(site.feed_alt_view) >= 0 ? site.feed_alt_view : 'reader'; %> 204 <option value="reader" <%= _a === 'reader' ? 'selected' : '' %>><%= t('asite.feed_alt_reader') %></option> 205 <option value="timeline" <%= _a === 'timeline' ? 'selected' : '' %>><%= t('asite.feed_alt_timeline') %></option> 206 <option value="auto" <%= _a === 'auto' ? 'selected' : '' %>><%= t('asite.feed_alt_auto') %></option> 207 </select> 208 </label> 198 209 <label> 199 210 <span><%= t('asite.feed_default') %></span> 200 211 <select name="feed_view_default"> 201 <option value="reader" <%= site.feed_view_default !== 'grid' ? 'selected' : '' %>><%= t('asite.feed_ reader') %></option>212 <option value="reader" <%= site.feed_view_default !== 'grid' ? 'selected' : '' %>><%= t('asite.feed_alt_' + _a) %></option> 202 213 <option value="grid" <%= site.feed_view_default === 'grid' ? 'selected' : '' %>><%= t('asite.feed_grid') %></option> 203 214 </select> -
src/views/pages/home.ejs
r598f090 re46ebaa 67 67 <% if (typeof readerItems !== 'undefined' && readerItems && readerItems.length) { %> 68 68 <section class="feed-reader" aria-label="<%= t('switch.reader') %>"> 69 <%# Terug naar boven. Staat IN de HTML en niet in JavaScript, zodat hij er ook 70 is als de module niet laadt -- dan doet hij niets, maar hij springt ook niet 71 opeens in beeld. Verschijnt pas als je ver genoeg bent (mod/read.js). %> 72 <button type="button" id="read-top" class="read-top" aria-label="<%= t('read.to_top') %>" title="<%= t('read.to_top') %>"> 73 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="19" x2="12" y2="5"/><polyline points="5 12 12 5 19 12"/></svg> 74 </button> 69 75 <div class="read-stream" id="read-stream" data-base="<%= _base %>"> 70 76 <% readerItems.forEach(function(it) { %> -
src/views/partials/view-switcher.ejs
r598f090 re46ebaa 23 23 var _leesUit = _bc.indexOf('on-cirkel') >= 0; 24 24 var _gridStandaard = (typeof site !== 'undefined' && site && site.feed_view_default === 'grid'); 25 // Welke tweede weergave biedt deze site aan? Bij 'auto' tekenen we ZE ALLEBEI 26 // en laat de CSS er per viewport een zien -- Lezen op mobiel, Tijdlijn op 27 // desktop. Dat scheelt een resize-afhandeling en een knop die van naam 28 // verspringt terwijl je kijkt. 29 var _alt = (typeof site !== 'undefined' && site && site.feed_alt_view) || 'reader'; 30 if (['reader', 'timeline', 'auto'].indexOf(_alt) < 0) _alt = 'reader'; 31 var _tweede = _alt === 'auto' ? ['reader', 'timeline'] : [_alt]; 32 // De tijdlijn WERKT wel in de cirkel -- dat is er zelfs de natuurlijke vorm. 33 // Alleen Lezen kan daar niet, want dat zijn berichten van anderen. 34 var _dood = function (v) { return v === 'reader' && _leesUit; }; 35 // Staat er GEEN levende tweede knop, dan is Grid het enige dat overblijft en 36 // hoort die aan te staan. Bij een tijdlijn-site is dat in de cirkel niet zo: 37 // daar werkt de tijdlijn gewoon. 38 var _alleenGrid = _tweede.every(_dood); 39 var _icoon = { 40 reader: '<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"/>', 41 timeline: '<line x1="8" y1="6" x2="21" y2="6"/><line x1="8" y1="12" x2="21" y2="12"/><line x1="8" y1="18" x2="21" y2="18"/><line x1="3" y1="6" x2="3.01" y2="6"/><line x1="3" y1="12" x2="3.01" y2="12"/><line x1="3" y1="18" x2="3.01" y2="18"/>', 42 }; 25 43 %> 26 44 <div class="view-switcher-wrap"> … … 49 67 <div class="view-switcher" role="tablist" aria-label="Weergave"> 50 68 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> 69 <%# De tweede weergave naast Grid. Welke dat is, staat in de instellingen 70 van de site (feed_alt_view). Bij 'auto' staan ze er allebei en kiest 71 een mediaquery; vandaar de klasse vs-alleen-*. %> 72 <% _tweede.forEach(function (v) { %> 73 <button type="button" class="view-switch-btn<%= _alt === 'auto' ? ' vs-alleen-' + (v === 'reader' ? 'mobiel' : 'desktop') : '' %>" 74 data-view="<%= v %>" role="tab" 75 <%- _dood(v) ? 'disabled aria-disabled="true" tabindex="-1" title="' + t('switch.reader_solo_only') + '"' : '' %> 76 aria-selected="<%= (!_dood(v) && !_neutral && !_gridStandaard) ? 'true' : 'false' %>"> 77 <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"><%- _icoon[v] %></svg> 78 <span><%= t('switch.' + v) %></span> 60 79 </button> 80 <% }); %> 61 81 <button type="button" class="view-switch-btn" data-view="grid" role="tab" 62 aria-selected="<%= (!_neutral && (_ leesUit|| _gridStandaard)) ? 'true' : 'false' %>">82 aria-selected="<%= (!_neutral && (_alleenGrid || _gridStandaard)) ? 'true' : 'false' %>"> 63 83 <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 84 <span><%= t('switch.grid') %></span> -
src/views/shell.ejs
r598f090 re46ebaa 222 222 223 223 <!-- v9 stylesheet (full palette system) --> 224 <link rel="stylesheet" href="/assets/css/style.css?v=7 2">224 <link rel="stylesheet" href="/assets/css/style.css?v=77"> 225 225 <script> 226 226 /* iOS safe-area, built by hand. env(safe-area-inset-top) resolves to 0 on this iOS in … … 345 345 </head> 346 346 347 <body class="<%= bodyClass || 'on-home' %> has-bottom-tab" data-js="chrome<%= (typeof pageJs !== 'undefined' && pageJs) ? ' ' + pageJs : '' %>" data-feed-view="<%- _e(safeSite.feed_view_default === 'grid' ? 'grid' : 'reader') %>" data-grid-cols="3" data-site-base="<%- _e((typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '') %>">347 <body class="<%= bodyClass || 'on-home' %> has-bottom-tab" data-js="chrome<%= (typeof pageJs !== 'undefined' && pageJs) ? ' ' + pageJs : '' %>" data-feed-view="<%- _e(safeSite.feed_view_default === 'grid' ? 'grid' : (["timeline","auto"].indexOf(safeSite.feed_alt_view) >= 0 ? safeSite.feed_alt_view : "reader")) %>" data-feed-alt="<%- _e(["timeline","auto"].indexOf(safeSite.feed_alt_view) >= 0 ? safeSite.feed_alt_view : "reader") %>" data-grid-cols="3" data-site-base="<%- _e((typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '') %>"> 348 348 349 349 <% if (typeof isViewer !== 'undefined' && isViewer) { %> … … 505 505 // Eén nummer voor de hele map. Te vaak bumpen kost één download; te weinig 506 506 // bumpen kost een bugfix die nooit aankomt. 507 var MOD_V = 4;507 var MOD_V = 13; 508 508 509 509 // name -> 1 (aan het laden) of de module-namespace (geladen). Een module … … 559 559 // 'pcms-feed-view' en wordt hier nergens geschreven, zodat je thuiskomt in de 560 560 // weergave die je achterliet. 561 var CIRKEL_SLEUTEL = 'pcms-cirkel-view'; 561 562 function opCirkel() { return body.classList.contains('on-cirkel'); } 562 563 … … 565 566 try { 566 567 if (opCirkel()) { 567 body.dataset.feedView = 'grid'; // de enige mogelijkheid daar 568 // Lezen kan hier niet -- dat zijn berichten van ANDEREN, van hun servers, 569 // en "het hele stuk" hebben wij niet in handen. De knop staat er wel maar 570 // dood. Een TIJDLIJN kan hier juist bij uitstek: dat is de natuurlijke 571 // vorm van een cirkel. 572 // 573 // Beschikbaar, niet verplicht. Dit dwong eerst 'timeline' af zodra de 574 // site geen Lezen-site was, en dan kon je in de cirkel geen Grid meer 575 // kiezen. Nu is Grid de landing en is Tijdlijn een keuze ernaast. 576 var altC = body.dataset.feedAlt || 'reader'; 577 var tijdlijnHier = altC === 'timeline' 578 || (altC === 'auto' && window.matchMedia('(min-width: 768px)').matches); 579 var magC = tijdlijnHier ? ['grid', 'timeline'] : ['grid']; 580 // Een EIGEN geheugen, en niet dat van solo. Twee redenen: hier kun je 581 // alleen uit Grid en Tijdlijn kiezen, dus een solo-keuze 'reader' zegt 582 // hier niets; en andersom mag een tuimeling hier je thuisweergave niet 583 // veranderen -- dan kom je thuis in iets anders dan je achterliet. 584 // (Dit geheugen stond er eerder al, verdween toen de cirkel nog maar een 585 // mogelijkheid had, en is nu weer nodig omdat Tijdlijn een echte keuze is.) 586 var vC = null; 587 try { vC = localStorage.getItem(CIRKEL_SLEUTEL); } catch (e) { /* geen opslag */ } 588 body.dataset.feedView = magC.indexOf(vC) >= 0 ? vC : 'grid'; 568 589 return; 569 590 } 570 591 var v = localStorage.getItem('pcms-feed-view'); 571 // 'timeline' bestaat niet meer als keuze, maar staat nog in de localStorage 572 // van iedereen die hier eerder was. Zonder deze vertaling zou zo iemand een 573 // weergave houden die nergens meer een knop heeft: de pil helemaal grijs, en 574 // een feed die niet is wat hij koos. Lezen is waar Tijdlijn in opging. 575 if (v === 'timeline') v = 'reader'; 576 if (v === 'grid' || v === 'reader') body.dataset.feedView = v; 592 // 'timeline' is sinds 20-8 weer een geldige keuze, maar alleen op een site 593 // die hem AANBIEDT. Wie de tijdlijn koos op de ene site en daarna een 594 // Lezen-site bezoekt, moet daar niet op een weergave landen die er geen 595 // knop heeft: dan staat de pil grijs en is de feed niet wat hij koos. 596 // Vandaar de toets tegen wat deze site biedt, in plaats van een vaste 597 // vertaling naar 'reader'. 598 var alt = body.dataset.feedAlt || 'reader'; 599 var mag = alt === 'auto' ? ['grid', 'reader', 'timeline'] : ['grid', alt]; 600 if (mag.indexOf(v) >= 0) body.dataset.feedView = v; 577 601 } catch (e) { /* geen opslag: de server-standaard blijft staan */ } 578 602 } … … 647 671 // veranderen: die moet je terugvinden zoals je hem achterliet. 648 672 try { 649 if (!opCirkel()) localStorage.setItem('pcms-feed-view', view); 673 // De cirkel heeft zijn eigen geheugen, zodat een keuze daar je 674 // thuisweergave niet aanraakt en andersom. 675 if (opCirkel()) localStorage.setItem(CIRKEL_SLEUTEL, view); 676 else localStorage.setItem('pcms-feed-view', view); 650 677 } catch(_) {} 651 678 syncAria();
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)