Changeset 8c91ed3 in Klonkt


Ignore:
Timestamp:
08/19/2026 06:43:41 PM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
5869b1f
Parents:
3a3a882
Message:

Covers in de leesweergave

Een bericht in de leesstroom begon met kale tekst: de cover ontbrak,
terwijl hij op de berichtpagina, in de tijdlijn en in Grid gewoon staat.
Nu staat hij er ook, boven de titel, in dezelfde volgorde als post.ejs.

Twee dingen komen van post-card en niet van post.ejs. De SLUIER: op de
berichtpagina hangt de NSFW-waarschuwing als banner boven de pagina,
want daar staat een bericht -- in een stroom kan dat niet, want de buren
rollen voorbij en dan is het beeld onderweg al te zien. En thumb(), want
hier staan er meerdere onder elkaar in een stroom die dooraanvult.

De hoogte is begrensd op 45svh. Een paneel is min-height:100svh en snapt;
een staande foto op volle breedte zou titel en eerste alinea onder de
vouw duwen, en dan begint elk bericht met een plaat waar je langs moet
scrollen om te zien wat het is.

Nagekeken en niet aangenomen: beide voedingen van readerItems() halen
SELECT p.* op, dus cover_image_url, cover_video_url, cover_alt, nsfw en
content_warning komen mee. Een versmalde kolommenlijst zou hier niets
opleveren zonder ergens te klagen.

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

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/assets/css/style.css

    r3a3a882 r8c91ed3  
    24532453/* Een lijn tussen twee berichten: zonder grens is een stroom een lange brij. */
    24542454.feed-reader .read-post + .read-post { border-top: 1px solid color-mix(in srgb, currentColor 12%, transparent); }
     2455
     2456/* De cover vult de leeskolom. Eigen regel, niet .post-cover hergebruikt: die
     2457   heeft een marge van 2rem die hier tegen de scroll-snap aan duwt.
     2458   De hoogtebegrenzing is er met opzet. Een paneel is min-height:100svh en snapt,
     2459   dus een staande foto op volle breedte zou de titel en de eerste alinea onder
     2460   de vouw duwen -- dan begint elk bericht met een plaat waar je langs moet
     2461   scrollen om te zien wat het IS. */
     2462.feed-reader .read-cover {
     2463    margin: 0 0 1.2rem;
     2464    border-radius: 10px;
     2465    overflow: hidden;
     2466}
     2467.feed-reader .read-cover img,
     2468.feed-reader .read-cover video {
     2469    display: block;
     2470    width: 100%;
     2471    height: auto;
     2472    max-height: 45svh;
     2473    object-fit: cover;
     2474}
    24552475
    24562476.feed-reader .read-head { padding-bottom: .5rem; }
  • src/views/partials/read-article.ejs

    r3a3a882 r8c91ed3  
    2525      Een <a> en niet alleen een tik-afhandelaar: dat werkt ook met een
    2626      toetsenbord, met een schermlezer, en met cmd-klik. %>
     27  <%# De cover hoort hier net zo goed als op de berichtpagina: het is het beeld
     28      van het stuk, en zonder hem begint elk bericht in de stroom met kale tekst.
     29      Boven de titel, in dezelfde volgorde als post.ejs.
     30
     31      Twee dingen komen hier van post-card en NIET van post.ejs:
     32
     33      - De SLUIER. Op de berichtpagina hangt de waarschuwing als banner boven de
     34        hele pagina, want daar staat een bericht. In een stroom kan dat niet: de
     35        buren rollen gewoon voorbij, dus het beeld moet zijn eigen sluier dragen
     36        of het is onderweg al te zien. De afhandelaar zit gedelegeerd op
     37        document (shell.ejs), dus hij werkt ook op wat de client later aanschuift.
     38      - thumb(). De bron kan het volle bestand zijn en hier staan er meerdere
     39        onder elkaar in een stroom die dooraanvult.
     40
     41      cover_image_url en cover_video_url komen mee: beide voedingen van
     42      readerItems() halen `SELECT p.*` op (routes/posts.js, de pinned- en de
     43      gewone feed-query). Nagekeken, want een versmalde lijst zou hier niets
     44      opleveren zonder ergens te klagen. %>
     45  <% if (post.cover_image_url || post.cover_video_url) { %>
     46    <figure class="read-cover<%= post.nsfw ? ' nsfw-media' : '' %>">
     47      <% if (post.cover_image_url) { %>
     48        <img src="<%= thumb(post.cover_image_url, 1280) %>"
     49             srcset="<%= thumb(post.cover_image_url, 640) %> 640w, <%= thumb(post.cover_image_url, 1280) %> 1280w"
     50             sizes="(min-width: 768px) 46rem, 100vw"
     51             alt="<%= post.cover_alt || '' %>" loading="lazy" decoding="async"<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>>
     52      <% } else { %>
     53        <video src="<%= post.cover_video_url %>" poster="<%= thumb(post.cover_video_url, 1280) %>"
     54               controls loop muted playsinline preload="metadata"></video>
     55      <% } %>
     56      <% if (post.nsfw) { %><span class="nsfw-veil"><%- include('nsfw-veil', { cw: post.content_warning }) %></span><% } %>
     57    </figure>
     58  <% } %>
     59
    2760  <header class="read-head">
    2861    <h1 class="read-title"><a href="<%= _b %>/<%= post.slug %>"><%= post.title || '' %></a></h1>
Note: See TracChangeset for help on using the changeset viewer.