Changeset 2bd31d6 in Klonkt for src/assets/js/mod/messages.js
- Timestamp:
- 08/08/2026 01:48:05 AM (5 weeks ago)
- Branches:
- main
- Children:
- 50e80ac
- Parents:
- 02c6231
- git-author:
- Robin <roboburr@…> (08/08/2026 01:47:50 AM)
- git-committer:
- Robin <roboburr@…> (08/08/2026 01:48:05 AM)
- File:
-
- 1 edited
-
src/assets/js/mod/messages.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/messages.js
r02c6231 r2bd31d6 126 126 } 127 127 128 // Zwaaien ter plekke: een seintje is geen paginawissel. 129 // 130 // Het formulier blijft een echt formulier -- zonder JS post het en leidt de 131 // route om, precies als vroeger. Hier onderscheppen we het en sturen het met 132 // fetch, zoals like/boost in de Krant het al deden. 133 // 134 // LET OP DE VERZENDKNOP. Deze formulieren hebben er MEERDERE ("Wat leuk!", 135 // "Hoe gaat het?", "Terug"), elk met een eigen name="text". FormData(f) neemt 136 // de aangeklikte knop NIET mee -- dat doet de browser alleen bij een echte 137 // verzending. Zonder submitter vertrekt er dus een zwaai zonder tekst, en die 138 // weigert de route. Vandaar submitter, met een terugval op de eerste knop. 139 document.addEventListener('submit', function (e) { 140 var f = e.target.closest && e.target.closest('.msg-wave, .msg-quickreply'); 141 if (!f || f.dataset.sending) return; 142 e.preventDefault(); 143 var knoppen = [].slice.call(f.querySelectorAll('button')); 144 var knop = e.submitter || knoppen[0]; 145 if (!knop) return; 146 f.dataset.sending = '1'; 147 knoppen.forEach(function (b) { b.disabled = true; }); 148 var body = new URLSearchParams(); 149 new FormData(f).forEach(function (v, k) { body.append(k, v); }); 150 if (knop.name) body.set(knop.name, knop.value); 151 fetch(f.action, { 152 method: 'POST', body: body, 153 headers: { 'X-Requested-With': 'fetch' }, 154 credentials: 'same-origin', 155 }) 156 .then(function (r) { return r.ok ? r.json() : null; }) 157 .then(function (j) { 158 if (!j || !j.ok) throw new Error('geweigerd'); 159 // Gelukt: de knoppen maken plaats voor de bevestiging. Zwaaien is 160 // eenmalig -- anders dan een like valt het niet terug te draaien, dus 161 // een aan/uit-knop zou liegen over wat er kan. 162 var klaar = document.createElement('span'); 163 klaar.className = 'msg-wave-done'; 164 klaar.textContent = '👋 ' + (f.dataset.sent || ''); 165 f.replaceChildren(klaar); 166 }) 167 .catch(function () { 168 // Mislukt: alles terug zoals het was, zodat een tweede poging kan. 169 delete f.dataset.sending; 170 knoppen.forEach(function (b) { b.disabled = false; }); 171 f.classList.add('is-failed'); 172 setTimeout(function () { f.classList.remove('is-failed'); }, 600); 173 }); 174 }); 175 128 176 function start() { reindex(); apply(); wireBookmarklet(); } 129 177 start();
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)