source: Klonkt/src/views/pages/guardian.ejs@ 6089c53

main
Last change on this file since 6089c53 was 0202104, checked in by Robin Genis <roboburr@…>, 6 weeks ago

De gebruikerskant van 3.6: de ward ziet zijn vangnet, de guardian handelt

Drie oppervlakken rondgemaakt op de beschikbaarheid die er sinds vanmorgen
server-side in zit.

Berichten (de ward): de guardians-balk toont per guardian de buddy-list-stip
met het label erbij: beschikbaar, afwezig tot een datum, offline. Het kind ziet
de echte omvang van zijn vangnet, niet alleen de namen. Owner-only omdat de
pagina dat is.

De Guardian-PWA (de guardian): in het paneel per kind staan de mede-guardians
met dezelfde stippen; op een slapende verschijnt de bewuste, zeldzame
vervolgstap "Voorstel: loslaten bij afwezigheid", die langs dezelfde
C2S-pijplijn loopt als de Shaer-apps (Offer van shaer:Lapse, lokaal ward opent
direct, remote ward krijgt het voorstel bezorgd). Lopende lapses staan als
kaart bij de aanvragen, met Eens/Oneens over de bestaande offer-draad en de zin
die het frame bewaakt. En "Even afwezig": een week of een maand, een directe
note met shaer:away naar alle wards, lokaal direct toegepast.

Shaer (beide apps): de lapse-kaart toont stemknoppen alleen aan leden van de
set. De ward kijkt mee naar wat zijn guardians beslissen; het is daar niet de
rechter, om precies de reden uit de editor's note van 3.6.3.

Onderweg gerepareerd: parseStamp kende alleen strings, waardoor een epoch-ms
endTime als lege datum rendde ("unavailable till" zonder datum).

Changed files:
src/routes/posts.js

  • /messages geeft de guardians hun beschikbaarheid mee

src/views/pages/messages.ejs

  • de stip en het label per guardian, met de opmaak erbij

src/routes/guardian.js

  • dashboardState: mede-guardians met status per lokaal kind, plus lapses
  • POST /guardian/api/away en /guardian/api/lapse
  • de nieuwe labels in uiStrings

src/assets/js/guardian.js

  • de guardians-sectie in het paneel, de lapse-kaart, de afwezig-knoppen

src/views/pages/guardian.ejs

  • de "Even afwezig"-sectie

src/assets/css/guardian.css

  • de stippen en de lapse-kaart

src/middleware/render.js

  • parseStamp accepteert epoch ms

src/services/i18n.js

  • de labels en teksten in nl, en, de

remarks: end-to-end in de browser nagelopen op de wegwerp-database: het kind
ziet oma afwezig-tot, opa offline en guard beschikbaar; de guardian opent het
paneel, stelt de lapse voor op de slapende opa (kaart verschijnt, eigen stem
geteld), drukt "A week", en bij het kind staat guard meteen op afwezig tot
5 augustus. 276 tests groen. Niet uitgerold.

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

  • Property mode set to 100644
File size: 4.4 KB
RevLine 
[318d0c2]1<!DOCTYPE html>
2<html lang="<%= lang %>">
3<head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1">
[c26cc18]6 <title><%= t('guardian.app_name') %></title>
[318d0c2]7 <link rel="manifest" href="/guardian/manifest.webmanifest">
8 <link rel="icon" href="/guardian/icon.svg" type="image/svg+xml">
9 <meta name="theme-color" content="#ff6b35">
[fcd6964]10 <link rel="stylesheet" href="/guardian/app.css">
[318d0c2]11</head>
12<body>
13 <header class="g-head">
14 <span class="g-buoy">🛟</span>
[c26cc18]15 <div class="g-head-txt">
16 <h1><%= t('guardian.app_name') %></h1>
17 <p class="g-sub"><%= t('guardian.tagline') %></p>
18 </div>
[318d0c2]19 <% if (sites.length > 1) { %>
[c26cc18]20 <select id="site-picker" aria-label="<%= t('guardian.acting_as') %>">
[318d0c2]21 <% for (const s of sites) { %>
22 <option value="<%= s.slug %>" <%= s.slug === state.site ? 'selected' : '' %>>@<%= s.slug %></option>
23 <% } %>
24 </select>
25 <% } else { %>
[c26cc18]26 <span class="g-me" title="<%= t('guardian.acting_as') %>">@<%= state.site %></span>
[318d0c2]27 <% } %>
[f1c50f9]28 <form method="post" action="/guardian/invite" style="display:inline">
29 <button class="quiet small" type="submit">Invite a guardian</button>
30 </form>
31</header>
[318d0c2]32
33 <main>
[70677e96]34 <!-- 1. Hulpverzoeken, uitgelicht over alle wards heen. Dat is waar dit voor
35 bestaat, en het moet opvallen zonder dat je eerst een kind opent.
36 De volledige geschiedenis per kind staat in dat kind zijn paneel. -->
[318d0c2]37 <section id="help-section">
[c26cc18]38 <div class="g-sec-head">
39 <h2><%= t('guardian.help_title') %></h2>
40 <span id="help-count" class="g-badge" hidden></span>
41 </div>
42 <p class="g-sec-sub"><%= t('guardian.help_sub') %></p>
[318d0c2]43 <div id="help-list" class="g-list"></div>
[c26cc18]44 <p id="help-empty" class="g-empty"><%= t('guardian.help_empty') %></p>
[318d0c2]45 </section>
46
[c26cc18]47 <!-- 2. Nieuwe ward adopteren. -->
48 <section id="adopt-section">
49 <div class="g-sec-head"><h2><%= t('guardian.adopt_title') %></h2></div>
50 <p class="g-sec-sub"><%= t('guardian.adopt_sub') %></p>
[318d0c2]51 <form id="adopt-form" autocomplete="off">
[c26cc18]52 <input id="adopt-handle" type="text" inputmode="email" autocomplete="off"
[318d0c2]53 placeholder="@kind@server.eu" aria-label="<%= t('guardian.adopt_label') %>">
[c26cc18]54 <button type="submit" id="adopt-btn"><%= t('guardian.adopt_btn') %></button>
[318d0c2]55 </form>
56 <p id="adopt-msg" class="g-msg" hidden></p>
[c26cc18]57 </section>
58
59 <!-- 3. Verzonden aanvragen (nog niet beantwoord). -->
60 <section id="pending-section" hidden>
61 <div class="g-sec-head"><h2><%= t('guardian.pending_title') %></h2></div>
62 <p class="g-sec-sub"><%= t('guardian.pending_sub') %></p>
63 <div id="pending-list" class="g-list"></div>
64 </section>
65
[70677e96]66 <!-- 4. Mijn wards. Elk kind is een regel die opent naar een paneel met
67 alles over dat kind: instellingen, volgverzoeken, hulpvragen en
68 recente berichten. Een guardian denkt per kind, niet per functie. -->
[c26cc18]69 <section id="wards-section">
70 <div class="g-sec-head"><h2><%= t('guardian.wards_title') %></h2></div>
[318d0c2]71 <div id="wards-list" class="g-list"></div>
[c26cc18]72 <p id="wards-empty" class="g-empty"><%= t('guardian.wards_empty') %></p>
[318d0c2]73 </section>
74
[0202104]75 <!-- 4b. Even afwezig (FEP-633c 3.6.1): de verantwoordelijke handeling.
76 Wie zich afmeldt telt niet mee in de besluiten, en een enkel
77 antwoord brengt je meteen terug. Alleen zichtbaar met wards. -->
78 <section id="away-section" hidden>
79 <div class="g-sec-head"><h2><%= t('guardian.away_title') %></h2></div>
80 <p class="g-sec-sub"><%= t('guardian.away_sub') %></p>
81 <div class="g-away-row">
82 <button id="away-week" class="quiet small"><%= t('guardian.away_week') %></button>
83 <button id="away-month" class="quiet small"><%= t('guardian.away_month') %></button>
84 </div>
85 <p id="away-msg" class="g-msg" hidden></p>
86 </section>
87
[c26cc18]88 <!-- 5. Meldingen. -->
[318d0c2]89 <section id="push-section">
[c26cc18]90 <div class="g-sec-head"><h2><%= t('guardian.push_title') %></h2></div>
91 <p class="g-sec-sub"><%= t('guardian.push_sub') %></p>
92 <button id="push-toggle" class="quiet" data-on-label="<%= t('guardian.push_off') %>"
[318d0c2]93 data-off-label="<%= t('guardian.push_on') %>"><%= t('guardian.push_on') %></button>
94 <p id="push-msg" class="g-msg" hidden></p>
95 </section>
96 </main>
97
98 <script type="application/json" id="guardian-state"><%- JSON.stringify(state) %></script>
[fcd6964]99 <script src="/guardian/app.js" defer></script>
[318d0c2]100</body>
101</html>
Note: See TracBrowser for help on using the repository browser.