Changeset f06ed56 in Klonkt for src/assets/js/guardian.js


Ignore:
Timestamp:
08/10/2026 03:42:31 AM (4 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
7e53594
Parents:
8064da1
Message:

Een logboek, zodat de reden ergens blijft staan

Guardianship-events waren vluchtig: onGuardianshipEvent wekte de long-poll,
zocht in een tabel van zeven soorten of er een push bij hoorde, en liet de rest
vallen. Elf van de achttien soorten verdwenen spoorloos, met hun inhoud. Een
weigering droeg reason: 'not_a_teapot' tot precies daar en niet verder --
terwijl §4.2 eist dat de ward en zijn guardians die reden te HOREN krijgen, en
niet dat ze hem afleiden uit een aanbod dat opeens weg is.

Vastleggen en melden zijn nu twee dingen. Alles komt in ap_guardian_events;
welke gebeurtenis een mens wakker maakt blijft de aparte, korte lijst die het
altijd al was.

Ingeklapt en onderaan, want hier vraagt niets om een antwoord. Zou dit tussen
de wachtrijen staan, dan wordt "moet ik iets doen" onleesbaar -- dezelfde reden
waarom de afgehandelde hulpvragen daar al staan.

200 per account, jongste eerst. Een logboek dat oneindig groeit wordt er een
die niemand opent, en afkappen aan de verkeerde kant zou hem onbruikbaar maken
op het moment dat er juist iets gebeurt. Schrijffouten worden geslikt: het
logboek is bijzaak en mag de commit of de weigering zelf nooit meesleuren.

Onbekende soorten vallen in de PWA terug op hun ruwe naam. Zichtbaar en lelijk
is beter dan netjes en afwezig.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/guardian.js

    r8064da1 rf06ed56  
    355355  // and are grouped into the panels by ward, so they are cached here rather
    356356  // than rendered into a section of their own.
    357   var FEED = [], FOLLOWS = [];
     357  var FEED = [], FOLLOWS = [], EVENTS = [];
    358358
    359359  function sectionInto(panel, title, items, empty, build) {
     
    984984    return card;
    985985  }
     986  /**
     987   * Het logboek. Apart geladen en apart getoond: dit is geschiedenis, geen
     988   * wachtrij. Faalt hij, dan blijft de sectie gewoon weg -- een guardian mist
     989   * er niets door dat om hem vraagt.
     990   */
     991  function loadEvents() {
     992    return fetch('/guardian/api/events?site=' + encodeURIComponent(S.site))
     993      .then(function (r) { return r.json(); })
     994      .then(function (d) { if (d && !d.error) { EVENTS = d.items || []; renderLog(); } })
     995      .catch(function () { /* geen logboek is geen storing */ });
     996  }
     997
     998  /** Een regel per gebeurtenis: wat er gebeurde, om wie, en waarom. */
     999  function eventLine(e) {
     1000    var wie = e.candidate || e.guardian || e.ward || e.follower || e.target || '';
     1001    var stuk = (T['ev_' + e.kind] || e.kind);
     1002    if (wie) stuk += ' - ' + handleOf(wie, wie);
     1003    // De REDEN is waarvoor dit logboek bestaat: zonder haar merkte een ward een
     1004    // weigering alleen doordat er iets uit een lijst verdween.
     1005    if (e.reason) stuk += ' (' + (T['evr_' + e.reason] || e.reason) + ')';
     1006    var row = el('div', 'g-card');
     1007    row.appendChild(el('span', 'who grow', stuk));
     1008    row.appendChild(el('span', 'when', when(e, e.created)));
     1009    return row;
     1010  }
     1011
     1012  function renderLog() {
     1013    var host = document.getElementById('g-log');
     1014    if (!host) return;
     1015    host.textContent = '';
     1016    if (!EVENTS.length) return;
     1017    var lijst = el('div', 'g-gates');
     1018    lijst.hidden = !S._logOpen;
     1019    EVENTS.forEach(function (e) { lijst.appendChild(eventLine(e)); });
     1020    var kop = el('button', 'quiet small g-gates-toggle');
     1021    var zet = function () {
     1022      kop.textContent = (lijst.hidden ? (T.log_show || 'Show history') : (T.log_hide || 'Hide history'))
     1023        + ' (' + EVENTS.length + ')';
     1024    };
     1025    zet();
     1026    kop.addEventListener('click', function () {
     1027      lijst.hidden = !lijst.hidden; S._logOpen = !lijst.hidden; zet();
     1028    });
     1029    host.appendChild(kop); host.appendChild(lijst);
     1030  }
     1031
    9861032  function loadFollowReqs() {
    9871033    return fetch('/guardian/api/follow-requests?site=' + encodeURIComponent(S.site))
     
    11381184  });
    11391185
    1140   renderAll(); pushState(); loadFeed(); loadFollowReqs();
     1186  renderAll(); pushState(); loadFeed(); loadFollowReqs(); loadEvents();
    11411187
    11421188  // De push die de melding brengt is meteen het teken dat de staat veranderd is.
Note: See TracChangeset for help on using the changeset viewer.