Changeset 2a76184 in Klonkt for src/assets/js/guardian.js


Ignore:
Timestamp:
07/28/2026 09:11:34 AM (6 weeks ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
65abc85
Parents:
bdb78e4
Message:

Guardians kunnen linkvoorbeelden aan- en uitzetten per ward

De eerste echte gated feature met een knop erbij. De gate bestond al server-side
(sites.external_embeds, uit voor een ward), maar er was geen enkele manier om
hem te bewegen: een ward zag dus nooit een linkvoorbeeld, en daar was niets aan
te doen behalve in de database duiken. Dat is precies de verkeerde plek voor een
beslissing die volgens het ontwerp bij de guardians hoort.

In de Guardian-PWA staat nu per ward een knop die de huidige stand toont en
omzet. Het endpoint accepteert het alleen van een COMMITTED guardian van die
ward, en alleen voor een ward die wij hosten: de instelling van een ward
elders hoort op de server van die ward thuis, dus die tonen we als
niet-instelbaar in plaats van te doen alsof.

Changed files:
src/routes/guardian.js

  • POST /guardian/wards/embeds, met controle op guardian-van-deze-ward en lokale ward
  • wardEmbedSetting(): huidige stand mee in de wards-lijst (null = niet van ons)

src/assets/js/guardian.js

  • knop per ward, toont de stand en zet hem om

src/services/i18n.js

  • guardian.embeds_on / embeds_off in nl, en, de

remarks: 219 tests groen. Federeren van deze instelling naar een remote ward is
een volgende stap (hoort bij shaer-3kp).

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

File:
1 edited

Legend:

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

    rbdb78e4 r2a76184  
    117117      wave.addEventListener('click', function () { sendWave(w.other_uri, wave); });
    118118      row.appendChild(wave);
     119      // Gated feature: external (non-fediverse) embeds. Off by default for a
     120      // ward; only a guardian can open it, and the gate is enforced server-side
     121      // when the feed is built, so this button is the only thing that moves it.
     122      if (w.embeds !== null && w.embeds !== undefined) {
     123        var emb = el('button', 'quiet small', (w.embeds ? T.embeds_on : T.embeds_off) || 'Embeds');
     124        emb.addEventListener('click', function () {
     125          emb.disabled = true;
     126          fetch('/guardian/wards/embeds', {
     127            method: 'POST', headers: { 'Content-Type': 'application/json' },
     128            body: JSON.stringify({ uri: w.other_uri, allow: !w.embeds }),
     129          }).then(function (r) { return r.json(); })
     130            .then(function () { refresh(); })
     131            .catch(function () { emb.disabled = false; });
     132        });
     133        row.appendChild(emb);
     134      }
    119135      var btn = el('button', 'quiet small', T.release);
    120136      // Releasing a ward is heavy and hard to undo (coming back needs a fresh
Note: See TracChangeset for help on using the changeset viewer.