Changeset a5a6249 in Klonkt for src/views/pages/ward.ejs


Ignore:
Timestamp:
08/12/2026 07:52:13 PM (3 months ago)
Author:
Robin <roboburr@…>
Children:
084b046
Parents:
303bfc4
Message:

De Ward PWA: de feed en de reddingsboei

Plak 2. Nu valt er iets te doen op /ward in plaats van alleen te kijken.

DE FEED. Dezelfde bron als de Krant (getTimeline) en dezelfde partial
voor de body (renderNoteBody), zodat een post er overal hetzelfde uitziet:
opmaak, media, quote-kaart, embed. Alleen kale content doorgeven zou een
lege regel opleveren waar een foto hoort, precies de fout die het
guardian-dashboard ooit had.

DE BOEI, en die is hier BETER dan in de app. Shaer maakt een
schermafdruk van de kaart, met al het gedoe van buiten beeld renderen.
Op de server weten we wélke note het is, dus de hulpvraag draagt de note
zelf mee. Een guardian ziet daardoor de echte post en niet een plaatje
dat er ooit op leek.

Slepen met pointer-events, want dat is het enige dat op een telefoon en
met een muis hetzelfde doet. touch-action: none op de boei houdt de
pagina stil tijdens het slepen; zonder dat vecht het met scrollen en
verlies je hem halverwege. De kaart eronder licht op, want mikken met een
vinger zonder terugkoppeling is gokken. Een tik zonder slepen vraagt hulp
zonder dat er een post bij hoort, en de grote knop bovenaan doet
hetzelfde.

Changed files:
src/routes/ward.js

  • /api/feed met afgemaakte body per kaart
  • /api/help: direct bericht aan ALLE guardians, met de note erbij; 409 als er geen guardians zijn, want dan is er niets te vragen

src/views/pages/ward.ejs

  • feed-sectie, zwevende boei, hulpdialoog

src/assets/js/ward.js

  • kaarten tekenen, slepen, mikken, versturen

src/assets/css/ward.css

  • kaarten, boei, dialoog, sr-only

src/services/i18n.js

  • acht nieuwe sleutels in nl, en, de

test/ward-pwa.test.js

  • de feed levert een gerenderde body; de boei weigert zonder guardians; een vreemde kan hem niet afvuren

remarks: 889 tests groen. Slepen is alleen in code getest, niet met een
echte vinger op een echt scherm; dat is aan Robin op dev.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/pages/ward.ejs

    r303bfc4 ra5a6249  
    2121    </section>
    2222
     23    <section id="feed">
     24      <h2><%= state.strings.feed %></h2>
     25      <div class="cards" id="card-list"></div>
     26      <p class="empty" id="feed-empty" hidden><%= state.strings.feedEmpty %></p>
     27    </section>
     28
    2329    <section id="guardians">
    2430      <h2><%= state.strings.guardians %></h2>
    … …  
    3844  </main>
    3945
     46  <!-- De reddingsboei zweeft boven de pagina en is sleepbaar, net als in
     47       Shaer. Een knop, geen plaatje: dan werkt hij ook met een toetsenbord en
     48       leest een schermlezer hem voor. -->
     49  <button id="buoy" type="button" aria-describedby="buoy-hint">🛟</button>
     50  <p id="buoy-hint" class="sr-only"><%= state.strings.buoyHint %></p>
     51
     52  <dialog id="help-dialog">
     53    <form method="dialog">
     54      <h2 id="help-title"></h2>
     55      <label for="help-words"><%= state.strings.helpWords %></label>
     56      <textarea id="help-words" rows="3" maxlength="500"></textarea>
     57      <menu>
     58        <button value="cancel"><%= state.strings.cancel %></button>
     59        <button id="help-send" value="send" class="primary"><%= state.strings.helpSend %></button>
     60      </menu>
     61    </form>
     62  </dialog>
     63
    4064  <!-- De begintoestand reist als JSON mee, zodat de pagina meteen compleet is
    4165       en niet eerst leeg staat te wachten op een fetch. Geen inline script:
Note: See TracChangeset for help on using the changeset viewer.