Changeset c26cc18 in Klonkt for src/views


Ignore:
Timestamp:
07/24/2026 06:04:03 PM (7 weeks ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
780a7c6
Parents:
1a2d8ac
Message:

Guardian-PWA: duidelijker + verstuurde offer altijd zichtbaar

Twee klachten opgelost.

"Ik zie niet dat ik verstuurd heb": de offer werd wél opgeslagen, maar als de
directe bezorging aan de remote ward faalde gaf de flow 502 en ververste de
PWA niet, dus de kaart verscheen niet. Nu: bezorging is async met retry (de
delivery-queue), de handshake geeft altijd 202 (opgeslagen) met een
delivered-vlag, en de PWA ververst altijd en toont de offer onder een eigen
sectie "Verzonden aanvragen · wacht op antwoord". Faalt de eerste bezorging,
dan meldt de UI dat we blijven proberen.

"Mag allemaal duidelijker": de pagina is herzien met vaste secties met kop en
uitleg: Hulpverzoeken (met teller), Ward adopteren (met uitleg wat er gebeurt),
Verzonden aanvragen, Mijn wards (actief-tag), Meldingen. Statussen als tags,
nette lege staten, alles via i18n (nl/en/de).

Changed files:
src/services/ActivityPubService.js

  • deliverToActor: enqueue+retry+logging, geeft {delivered, inbox}

src/services/guardianship/handshake.js

src/routes/guardian.js

  • /adopt niet meer hard falen op bezorg-hik; delivered terug; meer strings

src/views/pages/guardian.ejs

  • herziene, duidelijke secties

src/assets/js/guardian.js

  • aparte "Verzonden aanvragen"-sectie, altijd verversen na adopt

src/assets/css/guardian.css

  • sectie-koppen, status-tags, nette lege staten

src/services/i18n.js

  • uitgebreide guardian.*-teksten nl/en/de

remarks: als de offer "niet binnenkomt" bij de ward, moet diens Klonkt de
nieuwe code draaien (demo/beta/demohub zijn bij); een oude Klonkt of Mastodon
snapt de Offer-Relationship niet.

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

File:
1 edited

Legend:

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

    r1a2d8ac rc26cc18  
    44  <meta charset="utf-8">
    55  <meta name="viewport" content="width=device-width, initial-scale=1">
    6   <title>Klonkt Guardian</title>
     6  <title><%= t('guardian.app_name') %></title>
    77  <link rel="manifest" href="/guardian/manifest.webmanifest">
    88  <link rel="icon" href="/guardian/icon.svg" type="image/svg+xml">
     
    1313  <header class="g-head">
    1414    <span class="g-buoy">🛟</span>
    15     <h1>Guardian</h1>
     15    <div class="g-head-txt">
     16      <h1><%= t('guardian.app_name') %></h1>
     17      <p class="g-sub"><%= t('guardian.tagline') %></p>
     18    </div>
    1619    <% if (sites.length > 1) { %>
    17     <select id="site-picker" aria-label="Account">
     20    <select id="site-picker" aria-label="<%= t('guardian.acting_as') %>">
    1821      <% for (const s of sites) { %>
    1922      <option value="<%= s.slug %>" <%= s.slug === state.site ? 'selected' : '' %>>@<%= s.slug %></option>
     
    2124    </select>
    2225    <% } else { %>
    23     <span class="g-me">@<%= state.site %></span>
     26    <span class="g-me" title="<%= t('guardian.acting_as') %>">@<%= state.site %></span>
    2427    <% } %>
    2528  </header>
    2629
    2730  <main>
    28     <!-- Berichtencentrum: hulpverzoeken eerst, dat is waar dit voor bestaat. -->
     31    <!-- 1. Berichtencentrum: hulpverzoeken. Dat is waar dit voor bestaat. -->
    2932    <section id="help-section">
    30       <h2><%= t('guardian.help_title') %></h2>
     33      <div class="g-sec-head">
     34        <h2><%= t('guardian.help_title') %></h2>
     35        <span id="help-count" class="g-badge" hidden></span>
     36      </div>
     37      <p class="g-sec-sub"><%= t('guardian.help_sub') %></p>
    3138      <div id="help-list" class="g-list"></div>
    32       <p id="help-empty" class="g-empty" hidden><%= t('guardian.help_empty') %></p>
     39      <p id="help-empty" class="g-empty"><%= t('guardian.help_empty') %></p>
    3340    </section>
    3441
    35     <section id="wards-section">
    36       <h2><%= t('guardian.wards_title') %></h2>
     42    <!-- 2. Nieuwe ward adopteren. -->
     43    <section id="adopt-section">
     44      <div class="g-sec-head"><h2><%= t('guardian.adopt_title') %></h2></div>
     45      <p class="g-sec-sub"><%= t('guardian.adopt_sub') %></p>
    3746      <form id="adopt-form" autocomplete="off">
    38         <input id="adopt-handle" type="text" inputmode="email"
     47        <input id="adopt-handle" type="text" inputmode="email" autocomplete="off"
    3948               placeholder="@kind@server.eu" aria-label="<%= t('guardian.adopt_label') %>">
    40         <button type="submit"><%= t('guardian.adopt_btn') %></button>
     49        <button type="submit" id="adopt-btn"><%= t('guardian.adopt_btn') %></button>
    4150      </form>
    4251      <p id="adopt-msg" class="g-msg" hidden></p>
    43       <div id="wards-list" class="g-list"></div>
    44       <div id="offers-list" class="g-list"></div>
    45       <p id="wards-empty" class="g-empty" hidden><%= t('guardian.wards_empty') %></p>
    4652    </section>
    4753
     54    <!-- 3. Verzonden aanvragen (nog niet beantwoord). -->
     55    <section id="pending-section" hidden>
     56      <div class="g-sec-head"><h2><%= t('guardian.pending_title') %></h2></div>
     57      <p class="g-sec-sub"><%= t('guardian.pending_sub') %></p>
     58      <div id="pending-list" class="g-list"></div>
     59    </section>
     60
     61    <!-- 4. Mijn wards (geaccepteerd). -->
     62    <section id="wards-section">
     63      <div class="g-sec-head"><h2><%= t('guardian.wards_title') %></h2></div>
     64      <div id="wards-list" class="g-list"></div>
     65      <p id="wards-empty" class="g-empty"><%= t('guardian.wards_empty') %></p>
     66    </section>
     67
     68    <!-- 5. Meldingen. -->
    4869    <section id="push-section">
    49       <h2><%= t('guardian.push_title') %></h2>
    50       <p class="g-sub"><%= t('guardian.push_sub') %></p>
    51       <button id="push-toggle" data-on-label="<%= t('guardian.push_off') %>"
     70      <div class="g-sec-head"><h2><%= t('guardian.push_title') %></h2></div>
     71      <p class="g-sec-sub"><%= t('guardian.push_sub') %></p>
     72      <button id="push-toggle" class="quiet" data-on-label="<%= t('guardian.push_off') %>"
    5273              data-off-label="<%= t('guardian.push_on') %>"><%= t('guardian.push_on') %></button>
    5374      <p id="push-msg" class="g-msg" hidden></p>
Note: See TracChangeset for help on using the changeset viewer.