Changeset a29c8c8 in Klonkt for src/assets/js/guardian.js
- Timestamp:
- 08/07/2026 01:51:38 PM (5 weeks ago)
- Branches:
- main
- Children:
- 7cfe35a
- Parents:
- 792af53
- git-author:
- Robin <roboburr@…> (08/07/2026 01:51:36 PM)
- git-committer:
- roboburr <roboburr@…> (08/07/2026 01:51:38 PM)
- File:
-
- 1 edited
-
src/assets/js/guardian.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/guardian.js
r792af53 ra29c8c8 72 72 card.appendChild(a); 73 73 } 74 card.appendChild(helpState(h)); 74 75 return card; 76 } 77 78 /** Hoe lang geleden, grof. Een oppik vervalt niet maar hoort wel te verouderen. */ 79 function ago(ms) { 80 var u = Math.floor(ms / 3600000); 81 if (u < 1) return T.help_just_now || 'just now'; 82 if (u < 24) return (T.help_hours || '{n}h ago').replace('{n}', u); 83 return (T.help_days || '{n}d ago').replace('{n}', Math.floor(u / 24)); 84 } 85 86 /** 87 * De gedeelde staat van een hulpvraag (shaer-lgo): wie er al op af is, of het 88 * is afgesloten, en de twee knoppen. 89 * 90 * De faalstand hier is NIET veilig: 'iedereen denkt dat het geregeld is' is 91 * gevaarlijker dan geen markering. Dus bij twijfel toont dit OPEN, en een oude 92 * oppik verkleurt in plaats van te verdwijnen -- anders ziet een hulpvraag er 93 * onaangeroerd uit terwijl er iemand mee bezig is. 94 */ 95 function helpState(h) { 96 var st = h.state || { open: true, pickedUpBy: [], handled: null, ageMs: null }; 97 var box = el('div', 'g-help-state'); 98 99 if (st.handled) { 100 var wie = st.handled.handle || handleOf(st.handled.uri); 101 box.appendChild(el('div', 'g-help-done', (T.help_handled_by || 'Handled by {who}').replace('{who}', wie))); 102 // Geen terugdraaiknop: leeft de vraag nog, dan wordt hij opnieuw gesteld. 103 box.appendChild(el('p', 'small g-empty', T.help_handled_note || '')); 104 return box; 105 } 106 107 (st.pickedUpBy || []).forEach(function (p) { 108 var line = (T.help_picked_by || '{who} is looking into this').replace('{who}', p.handle || handleOf(p.uri)); 109 box.appendChild(el('div', 'g-help-pick', line)); 110 }); 111 // Oud, maar niet weg. Dit is het verschil tussen 'er is iemand mee bezig' en 112 // 'er was ooit iemand mee bezig'. 113 if (st.ageMs != null && st.ageMs > 3600000) { 114 box.appendChild(el('div', 'g-help-age small', ago(st.ageMs))); 115 } 116 117 var row = el('div', 'row'); 118 var mij = (st.pickedUpBy || []).some(function (p) { return p.uri === S.me; }); 119 if (!mij) { 120 var pick = el('button', 'small', T.help_pick || 'I am on it'); 121 pick.addEventListener('click', function () { markHelp(h, 'pickup', pick); }); 122 row.appendChild(pick); 123 } 124 var done = el('button', 'quiet small', T.help_close || 'Mark handled'); 125 // Een stevige bevestiging, en nooit een window.confirm: dat verstopt een 126 // uitleg achter een OK die mensen wegklikken. Zelfde lijn als het loslaten 127 // van een ward. 128 done.addEventListener('click', function () { 129 done.hidden = true; 130 var ask = el('div', 'g-confirm'); 131 ask.appendChild(el('p', 'small', T.help_close_ask || '')); 132 var ja = el('button', 'small', T.help_close_yes || 'Yes, handled'); 133 ja.addEventListener('click', function () { markHelp(h, 'handled', ja); }); 134 var nee = el('button', 'quiet small', T.release_no || 'No'); 135 nee.addEventListener('click', function () { ask.remove(); done.hidden = false; }); 136 ask.appendChild(ja); ask.appendChild(nee); 137 box.appendChild(ask); 138 }); 139 row.appendChild(done); 140 box.appendChild(row); 141 return box; 142 } 143 144 function markHelp(h, kind, btn) { 145 if (btn) btn.disabled = true; 146 fetch('/guardian/api/help/' + kind, { 147 method: 'POST', headers: { 'Content-Type': 'application/json' }, 148 body: JSON.stringify({ note: h.object_uri, ward: h.actor_uri, site: S.site }), 149 }).then(refresh).catch(function () { if (btn) btn.disabled = false; }); 75 150 } 76 151
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)