| 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.
|
|---|
| 13 | var _b = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
|
|---|
| 14 | %>
|
|---|
| 15 |
|
|---|
| 16 | <div class="read-stream" id="read-stream" data-base="<%= _b %>">
|
|---|
| 17 | <%- include('../partials/read-article', {
|
|---|
| 18 | post: post, entry: entry, newerPost: newerPost, olderPost: olderPost,
|
|---|
| 19 | }) %>
|
|---|
| 20 | </div>
|
|---|
| 21 |
|
|---|
| 22 | <%# De weg terug. Blijft staan als de balken weg zijn -- een scherm zonder
|
|---|
| 23 | uitgang is geen scherm maar een val. %>
|
|---|
| 24 | <nav class="read-exit" aria-label="<%= t('read.exit_label') %>">
|
|---|
| 25 | <a class="read-hand" href="<%= _b %>/" title="<%= t('read.exit') %>" aria-label="<%= t('read.exit') %>">👋</a>
|
|---|
| 26 | </nav>
|
|---|
| 27 |
|
|---|
| 28 | <noscript>
|
|---|
| 29 | <nav class="read-fallback">
|
|---|
| 30 | <% if (newerPost) { %><a href="<%= _b %>/read/<%= newerPost.slug %>">← <%= newerPost.title %></a><% } %>
|
|---|
| 31 | <% if (olderPost) { %><a href="<%= _b %>/read/<%= olderPost.slug %>"><%= olderPost.title %> →</a><% } %>
|
|---|
| 32 | </nav>
|
|---|
| 33 | </noscript>
|
|---|
| 34 |
|
|---|
| 35 | <style>
|
|---|
| 36 | /* Alles onder .on-read: dit is een nieuw scherm op een LIVE site, dus niets
|
|---|
| 37 | hiervan mag daarbuiten iets aanraken. */
|
|---|
| 38 |
|
|---|
| 39 | /* De balken schuiven weg zodra je leest. Transform en niet display: een
|
|---|
| 40 | schuivende balk laat zien dat hij terugkomt, een verdwijnende niet. */
|
|---|
| 41 | .on-read #pcms-chrome,
|
|---|
| 42 | .on-read .bottom-tab {
|
|---|
| 43 | transition: transform .28s ease, opacity .28s ease;
|
|---|
| 44 | will-change: transform;
|
|---|
| 45 | }
|
|---|
| 46 | .on-read.read-chrome-weg #pcms-chrome { transform: translateY(-100%); opacity: 0; }
|
|---|
| 47 | .on-read.read-chrome-weg .bottom-tab { transform: translateY(100%); opacity: 0; }
|
|---|
| 48 |
|
|---|
| 49 | /* De vrije ruimte onder de laatste post moet weg: anders eindigt het document
|
|---|
| 50 | ver onder het laatste bericht en klopt "bij de rand" niet meer. */
|
|---|
| 51 | .on-read #pcms-main { padding-bottom: 0; }
|
|---|
| 52 |
|
|---|
| 53 | /* PROXIMITY, geen mandatory. Een bericht dat langer is dan het scherm moet je
|
|---|
| 54 | rustig kunnen doorlezen; mandatory zou je bij elke pauze terugtrekken naar
|
|---|
| 55 | een grens. Zo snapt hij alleen als je in de buurt van een grens bent. */
|
|---|
| 56 | .on-read .read-stream { scroll-snap-type: y proximity; }
|
|---|
| 57 | .on-read .read-post {
|
|---|
| 58 | scroll-snap-align: start;
|
|---|
| 59 | scroll-snap-stop: normal;
|
|---|
| 60 | min-height: 100svh;
|
|---|
| 61 | max-width: 46rem;
|
|---|
| 62 | margin: 0 auto;
|
|---|
| 63 | padding: 2rem 1.2rem 4rem;
|
|---|
| 64 | box-sizing: border-box;
|
|---|
| 65 | }
|
|---|
| 66 | /* Een lijn tussen twee berichten: zonder grens is een stroom een lange brij. */
|
|---|
| 67 | .on-read .read-post + .read-post { border-top: 1px solid color-mix(in srgb, currentColor 12%, transparent); }
|
|---|
| 68 |
|
|---|
| 69 | .on-read .read-head { padding-bottom: .5rem; }
|
|---|
| 70 | .on-read .read-title { font-size: clamp(1.6rem, 4vw, 2.4rem); line-height: 1.15; margin: 0 0 .3rem; }
|
|---|
| 71 | .on-read .read-when { font-size: .85rem; opacity: .6; margin: 0; }
|
|---|
| 72 |
|
|---|
| 73 | /* Bezig / mislukt: de lezer hoort te merken dat er iets gebeurt, en vooral dat
|
|---|
| 74 | er NIETS gebeurde als het misging. */
|
|---|
| 75 | .on-read .read-laden { text-align: center; padding: 1.2rem; opacity: .6; font-size: .9rem; }
|
|---|
| 76 | .on-read .read-eind { text-align: center; padding: 2rem 1rem 3rem; opacity: .5; font-size: .9rem; }
|
|---|
| 77 |
|
|---|
| 78 | .on-read .read-exit { position: fixed; right: 1rem; bottom: 1rem; z-index: 60; }
|
|---|
| 79 | .on-read .read-hand {
|
|---|
| 80 | display: grid; place-items: center; width: 3rem; height: 3rem;
|
|---|
| 81 | font-size: 1.5rem; text-decoration: none; border-radius: 50%;
|
|---|
| 82 | background: var(--paper, #fff); box-shadow: 0 2px 10px rgba(0,0,0,.18);
|
|---|
| 83 | }
|
|---|
| 84 | .on-read .read-fallback { display: flex; gap: 1rem; padding: 1rem 1.2rem; }
|
|---|
| 85 |
|
|---|
| 86 | @media (prefers-reduced-motion: reduce) {
|
|---|
| 87 | .on-read #pcms-chrome, .on-read .bottom-tab { transition: none; }
|
|---|
| 88 | .on-read .read-stream { scroll-snap-type: none; }
|
|---|
| 89 | }
|
|---|
| 90 | </style>
|
|---|