source: Klonkt/src/views/pages/read.ejs@ 7421147

main
Last change on this file since 7421147 was 7421147, checked in by Bart <bart@…>, 3 weeks ago

Leesweergave: de twee zinnen die het script plaatst, zijn nu vertaalbaar

'Je bent bij het begin van het archief.' en de laadfout stonden hard in
mod/read.js -- terwijl read.exit in dezelfde commit wél in drie talen ging. Een
Engelse of Duitse lezer kreeg Nederlands aan het eind van het archief. Ze komen
nu van data-i18n op de stroom, dezelfde afspraak als de zoekteksten van de
topnav (mod/chrome.js).

En drie klassenamen die in het Nederlands waren blijven steken naast negen
Engelse: read-chrome-weg, read-laden en read-eind heten nu read-chrome-hidden,
read-loading en read-end.

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

  • Property mode set to 100644
File size: 4.3 KB
Line 
1<%
2// De leesweergave: berichten achter elkaar, één per beeld, en de balken gaan weg.
3//
4// Barts idee, naar bartoverkamp.nl -- maar NIET met de truc die daar staat.
5// Daar wordt bij de rand naar de andere kant gesprongen en het artikel
6// "vloeiend" in beeld gezet; dat is een naad die je verbergt. Hier groeit de
7// stroom gewoon: bij de onderrand hangt de client de oudere buur eronder, bij de
8// bovenrand de nieuwere erboven, en de browser snapt naar de berichtgrenzen.
9// Dan is er geen naad om te verbergen.
10//
11// Zonder JavaScript blijft dit één leesbaar bericht met twee gewone links. Een
12// leesweergave die alleen met script bestaat, bestaat niet voor wie het uitzet.
13var _b = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
14%>
15
16<%# De teksten die het script zelf plaatst, komen van hier -- zoals de
17 zoekteksten van de topnav (zie mod/chrome.js). Een zin die in het
18 script staat, staat in één taal, en dat is nooit de taal van de lezer. %>
19<div class="read-stream" id="read-stream" data-base="<%= _b %>"
20 data-i18n="<%= JSON.stringify({ end: t('read.end'), load_error: t('read.load_error') }) %>">
21 <%- include('../partials/read-article', {
22 post: post, entry: entry, newerPost: newerPost, olderPost: olderPost,
23 }) %>
24</div>
25
26<%# De weg terug. Blijft staan als de balken weg zijn -- een scherm zonder
27 uitgang is geen scherm maar een val. %>
28<nav class="read-exit" aria-label="<%= t('read.exit_label') %>">
29 <a class="read-hand" href="<%= _b %>/" title="<%= t('read.exit') %>" aria-label="<%= t('read.exit') %>">👋</a>
30</nav>
31
32<noscript>
33 <nav class="read-fallback">
34 <% if (newerPost) { %><a href="<%= _b %>/read/<%= newerPost.slug %>">← <%= newerPost.title %></a><% } %>
35 <% if (olderPost) { %><a href="<%= _b %>/read/<%= olderPost.slug %>"><%= olderPost.title %> →</a><% } %>
36 </nav>
37</noscript>
38
39<style>
40/* Alles onder .on-read: dit is een nieuw scherm op een LIVE site, dus niets
41 hiervan mag daarbuiten iets aanraken. */
42
43/* De balken schuiven weg zodra je leest. Transform en niet display: een
44 schuivende balk laat zien dat hij terugkomt, een verdwijnende niet. */
45.on-read #pcms-chrome,
46.on-read .bottom-tab {
47 transition: transform .28s ease, opacity .28s ease;
48 will-change: transform;
49}
50.on-read.read-chrome-hidden #pcms-chrome { transform: translateY(-100%); opacity: 0; }
51.on-read.read-chrome-hidden .bottom-tab { transform: translateY(100%); opacity: 0; }
52
53/* De vrije ruimte onder de laatste post moet weg: anders eindigt het document
54 ver onder het laatste bericht en klopt "bij de rand" niet meer. */
55.on-read #pcms-main { padding-bottom: 0; }
56
57/* PROXIMITY, geen mandatory. Een bericht dat langer is dan het scherm moet je
58 rustig kunnen doorlezen; mandatory zou je bij elke pauze terugtrekken naar
59 een grens. Zo snapt hij alleen als je in de buurt van een grens bent. */
60.on-read .read-stream { scroll-snap-type: y proximity; }
61.on-read .read-post {
62 scroll-snap-align: start;
63 scroll-snap-stop: normal;
64 min-height: 100svh;
65 max-width: 46rem;
66 margin: 0 auto;
67 padding: 2rem 1.2rem 4rem;
68 box-sizing: border-box;
69}
70/* Een lijn tussen twee berichten: zonder grens is een stroom een lange brij. */
71.on-read .read-post + .read-post { border-top: 1px solid color-mix(in srgb, currentColor 12%, transparent); }
72
73.on-read .read-head { padding-bottom: .5rem; }
74.on-read .read-title { font-size: clamp(1.6rem, 4vw, 2.4rem); line-height: 1.15; margin: 0 0 .3rem; }
75.on-read .read-when { font-size: .85rem; opacity: .6; margin: 0; }
76
77/* Bezig / mislukt: de lezer hoort te merken dat er iets gebeurt, en vooral dat
78 er NIETS gebeurde als het misging. */
79.on-read .read-loading { text-align: center; padding: 1.2rem; opacity: .6; font-size: .9rem; }
80.on-read .read-end { text-align: center; padding: 2rem 1rem 3rem; opacity: .5; font-size: .9rem; }
81
82.on-read .read-exit { position: fixed; right: 1rem; bottom: 1rem; z-index: 60; }
83.on-read .read-hand {
84 display: grid; place-items: center; width: 3rem; height: 3rem;
85 font-size: 1.5rem; text-decoration: none; border-radius: 50%;
86 background: var(--paper, #fff); box-shadow: 0 2px 10px rgba(0,0,0,.18);
87}
88.on-read .read-fallback { display: flex; gap: 1rem; padding: 1rem 1.2rem; }
89
90@media (prefers-reduced-motion: reduce) {
91 .on-read #pcms-chrome, .on-read .bottom-tab { transition: none; }
92 .on-read .read-stream { scroll-snap-type: none; }
93}
94</style>
Note: See TracBrowser for help on using the repository browser.