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


Ignore:
Timestamp:
08/07/2026 11:58:49 PM (5 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
a9bc6ab
Parents:
9ce14b8
git-author:
Robin <roboburr@…> (08/07/2026 11:58:47 PM)
git-committer:
roboburr <roboburr@…> (08/07/2026 11:58:49 PM)
Message:

Waarschuwen voor wat er blijft hangen (shaer-nf9)

Barts opdracht: waarschuw bij het openen en het accepteren van een gate-voorstel.
Zijn zin was "Een geopende poort gaat niet meer dicht!"

DIE ZIN STAAT ER NIET, EN DAT IS MET OPZET. Als uitspraak over de INSTELLING is
hij onwaar: shaer-ahy eist het tegendeel en de code doet het -- een voorstel
draagt true of false. Een waarschuwing die aantoonbaar niet klopt neemt de rest
van het scherm mee in zijn val zodra iemand het merkt.

Wat wel onomkeerbaar is, is het GEVOLG, en die versie is zwaarder:

Wat hier doorheen komt, komt niet meer terug. Je kunt deze instelling later
weer dichtzetten -- wat je kind gezien heeft niet.

Independence krijgt zijn eigen tekst, want dat draagt gezag over en is wel echt
onomkeerbaar (shaer-90v). Welke tekst je krijgt volgt uit de catalogus, dus een
nieuwe gate hoeft niets te bedenken.

ONBEKEND KRIJGT DE ZWAARSTE. Een guardian elders kan iets voorstellen dat onze
catalogus niet kent. Bij twijfel waarschuwen we zwaarder, niet lichter -- de
faalstand die pijn doet is een guardian die iets doorlaat omdat het scherm er
licht over deed.

ALLEEN BIJ OPENZETTEN. Dichtzetten laat niets nieuws door, en een waarschuwing
die overal staat wordt nergens gelezen.

BIJ ACCEPTEREN KON HET GEVRAAGDE NIET. De bead stelde voor te tonen of jouw
antwoord de drempel haalt, want gatedProgress bestaat al. Maar die werkt op een
LOKALE slug, en er zijn geen lokale wards -- voor deze kaart komt hij altijd op
null uit. Een verzonnen "1 van 2" zou hier het gevaarlijkste getal op het scherm
zijn: het leest als "er kan nog iemand na mij". Er staat nu wat waar is: wij zien
de telling niet, die loopt op de server van het kind, en jouw ja kan de doorslag
geven -- want de tally settelt op het moment dat de drempel gehaald is.

Geen window.confirm, zoals bij het loslaten van een ward: de uitleg staat er, en
dan pas de knop. Drie talen. Vier toetsen, twee vallen om bij mutatie. 619/619.

File:
1 edited

Legend:

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

    r9ce14b8 rb2646cc  
    285285      .replace('{who}', handleOf(g.proposer || ''))
    286286      .replace('{ward}', handleOf(g.ward))));
     287    // Wat het betekent als dit doorgaat, VOOR de knoppen (shaer-nf9). Alleen bij
     288    // openzetten -- dichtzetten laat niets nieuws door.
     289    //
     290    // En eerlijk over wat wij niet zien: de stemmen worden geteld op de server
     291    // van het kind, niet hier. Er zijn geen lokale wards, dus gatedProgress komt
     292    // voor deze kaart altijd op null uit. Een verzonnen "1 van 2" zou hier het
     293    // gevaarlijkste getal op het scherm zijn -- het leest als "er kan nog iemand
     294    // na mij". Wat we wel weten en wat de waarschuwing draagt: jouw ja kan de
     295    // doorslag geven, want de telling settelt op het moment dat de drempel
     296    // gehaald is.
     297    if (g.consequence) {
     298      var warn = el('div', 'g-warn');
     299      warn.appendChild(el('p', 'small', warnText(g.consequence)));
     300      warn.appendChild(el('p', 'small g-dim', T.warn_tally_elsewhere || ''));
     301      card.appendChild(warn);
     302    }
     303
    287304    var row = el('div', 'row');
    288305    var yes = el('button', 'small', T.gated_agree || 'Agree');
     
    341358  }
    342359
    343   function gateButton(w, feature, current, proposeLabel, onLabel, offLabel) {
     360  function gateButton(w, feature, current, proposeLabel, onLabel, offLabel, consequence) {
    344361    var known = current === true || current === false;
    345362    var btn = el('button', 'quiet small', (known ? (current ? onLabel : offLabel) : proposeLabel) || feature);
     363    var allow = known ? !current : true;
     364
     365    // ALLEEN BIJ OPENZETTEN waarschuwen (shaer-nf9). Dichtzetten laat niets
     366    // nieuws door, en een waarschuwing die overal staat wordt nergens gelezen.
     367    // Geen window.confirm: dat verstopt de uitleg achter een OK die mensen
     368    // wegklikken. Zelfde vorm als het loslaten van een ward.
    346369    btn.addEventListener('click', function () {
     370      if (!allow) return doPropose();
     371      btn.hidden = true;
     372      var ask = el('div', 'g-confirm');
     373      ask.appendChild(el('p', 'small', warnText(consequence)));
     374      var ja = el('button', 'small', T.warn_go || 'Yes, propose this');
     375      ja.addEventListener('click', function () { ask.remove(); btn.hidden = false; doPropose(); });
     376      var nee = el('button', 'quiet small', T.warn_back || 'No, go back');
     377      nee.addEventListener('click', function () { ask.remove(); btn.hidden = false; });
     378      ask.appendChild(ja); ask.appendChild(nee);
     379      btn.parentNode.appendChild(ask);
     380    });
     381
     382    function doPropose() {
    347383      btn.disabled = true;
    348384      fetch('/guardian/wards/embeds', {
    349385        method: 'POST', headers: { 'Content-Type': 'application/json' },
    350         body: JSON.stringify({ uri: w.other_uri, feature: feature, allow: known ? !current : true }),
     386        body: JSON.stringify({ uri: w.other_uri, feature: feature, allow: allow }),
    351387      }).then(function (r) { return r.json(); })
    352388        .then(function (j) {
     
    359395        })
    360396        .catch(function () { btn.disabled = false; });
    361     });
     397    }
    362398    return btn;
     399  }
     400
     401  /** De juiste waarschuwing bij een gevolg. Onbekend krijgt de zwaarste: een
     402   *  gate die wij niet kennen kunnen we ook niet geruststellend beschrijven. */
     403  function warnText(consequence) {
     404    if (consequence === 'irreversible') return T.warn_irreversible || '';
     405    if (consequence === 'unknown') return T.warn_unknown || '';
     406    return T.warn_reversible || '';
    363407  }
    364408
     
    553597      var openzetten = T.gate_propose_open || T.gate_propose || 'Propose';
    554598      var dichtzetten = T.gate_propose_close || T.gate_propose || 'Propose';
    555       row.appendChild(gateButton(w, g.feature, g.value, openzetten, dichtzetten, openzetten));
     599      row.appendChild(gateButton(w, g.feature, g.value, openzetten, dichtzetten, openzetten,
     600        g.reversible === false ? 'irreversible' : 'reversible'));
    556601    }
    557602    return row;
Note: See TracChangeset for help on using the changeset viewer.