Changeset e667d26 in Klonkt for src/assets/js/guardian.js
- Timestamp:
- 08/09/2026 07:28:31 AM (4 weeks ago)
- Branches:
- main
- Children:
- c832064
- Parents:
- 82c3356
- git-author:
- Robin <roboburr@…> (08/09/2026 07:28:29 AM)
- git-committer:
- roboburr <roboburr@…> (08/09/2026 07:28:31 AM)
- File:
-
- 1 edited
-
src/assets/js/guardian.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/guardian.js
r82c3356 re667d26 108 108 */ 109 109 function helpState(h) { 110 var st = h.state || { open: true, pickedUpBy: [], handled: null, ageMs: null };110 var st = h.state || { open: true, pickedUpBy: [], handled: null, oldestPickupAt: null }; 111 111 var box = el('div', 'g-help-state'); 112 112 … … 133 133 // Oud, maar niet weg. Dit is het verschil tussen 'er is iemand mee bezig' en 134 134 // 'er was ooit iemand mee bezig'. 135 if (st.ageMs != null && st.ageMs > 3600000) { 136 box.appendChild(el('div', 'g-help-age small', ago(st.ageMs))); 135 // De leeftijd wordt HIER uitgerekend, niet op de server: een verschil met 136 // `now` in het antwoord maakt dat antwoord elke milliseconde anders, en dan 137 // kan de ETag nooit gelijk zijn. 138 var oud = st.oldestPickupAt ? (Date.now() - Date.parse(st.oldestPickupAt)) : null; 139 if (oud != null && !isNaN(oud) && oud > 3600000) { 140 box.appendChild(el('div', 'g-help-age small', ago(oud))); 137 141 } 138 142 … … 894 898 } 895 899 900 901 // De scrollpositie overleeft een verversing (Barts melding, 9-8). renderAll 902 // bouwt lijsten opnieuw op; staat de pagina daarbij even korter, dan springt 903 // de browser omhoog en ben je kwijt waar je was. Meten en terugzetten is 904 // genoeg -- en het is het verschil tussen een scherm dat bijwerkt en een 905 // scherm dat onder je handen wegschuift. 906 function metBehoudVanScroll(fn) { 907 var y = window.scrollY || document.documentElement.scrollTop || 0; 908 fn(); 909 if (y) window.scrollTo(0, y); 910 } 911 896 912 function renderAll() { renderHelp(); renderPending(); renderWards(); } 897 913 … … 963 979 return fetch('/guardian/api/state?site=' + encodeURIComponent(S.site)) 964 980 .then(function (r) { return r.json(); }) 965 .then(function (s) { if (s && !s.error) { S = s; T = s.strings || T; renderAll(); } })981 .then(function (s) { if (s && !s.error) { S = s; T = s.strings || T; metBehoudVanScroll(renderAll); } }) 966 982 .then(loadFeed).then(loadFollowReqs); 967 983 } … … 978 994 // opnieuw getekend. 979 995 var pollBezig = false; 996 var laatsteState = null; // de vorige body, om onnodig hertekenen te herkennen 997 980 998 function longPoll() { 981 999 if (pollBezig || document.hidden) return; 982 1000 pollBezig = true; 1001 var t0 = Date.now(); 983 1002 fetch('/guardian/api/state?wait=25&site=' + encodeURIComponent(S.site)) 984 1003 .then(function (r) { 985 1004 pollBezig = false; 986 1005 if (r.status === 304) return null; // stilte 987 return r.json().then(function (s) { 988 if (s && !s.error) { S = s; T = s.strings || T; renderAll(); } 1006 return r.text().then(function (tekst) { 1007 // ZELFDE INHOUD, NIET HERTEKENEN. De 304 zou dit al moeten afvangen, 1008 // maar een enkel veld dat per verzoek verandert (er stond een levende 1009 // klok in) maakt elke ETag anders, en dan tekent het paneel zichzelf 1010 // stuk terwijl je scrollt. Dit is de tweede grendel, aan de kant die 1011 // de gebruiker merkt. 1012 if (tekst === laatsteState) return null; 1013 laatsteState = tekst; 1014 var s; try { s = JSON.parse(tekst); } catch (e) { return null; } 1015 if (s && !s.error) { S = s; T = s.strings || T; metBehoudVanScroll(renderAll); } 989 1016 return loadFeed().then(loadFollowReqs); 990 1017 }); 991 1018 }) 992 .then(function () { setTimeout(longPoll, 200); }) 1019 .then(function () { 1020 // EEN LANGE POLL DIE METEEN TERUGKEERT MAG GEEN LUS WORDEN. Wachtte de 1021 // server niet (een fout, een tussenliggende proxy, iets wat we nog niet 1022 // weten), dan houden we zelf de rem erop. Anders vervangt een defect de 1023 // ene tik van 45 seconden door duizend per minuut. 1024 var snel = Date.now() - t0 < 2000; 1025 setTimeout(longPoll, snel ? 3000 : 200); 1026 }) 993 1027 .catch(function () { 994 1028 // Netwerk weg of server herstart: niet meteen opnieuw beuken.
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)