Changeset 013e16c in Klonkt for src/assets/js/mod/admin-site-edit.js
- Timestamp:
- 08/13/2026 01:09:24 PM (4 weeks ago)
- Branches:
- main
- Children:
- f50a84b
- Parents:
- f59a46c
- git-author:
- Robin <roboburr@…> (08/13/2026 01:01:18 PM)
- git-committer:
- Robin <roboburr@…> (08/13/2026 01:09:24 PM)
- File:
-
- 1 edited
-
src/assets/js/mod/admin-site-edit.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/admin-site-edit.js
rf59a46c r013e16c 135 135 })(); 136 136 137 // MusicBrainz-paneel (shaer-mbz). Binnen run(), niet op moduleniveau: deze138 // modules krijgen bij elke paginawissel opnieuw init(), en een blok dat maar139 // een keer per sessie draait is precies wat shaer-5s1 opleverde.140 wireMusicBrainz();141 137 } 142 143 // ── MusicBrainz: ben jij dit? (shaer-mbz) ─────────────────────────144 //145 // De kandidaten komen van de server, want MusicBrainz eist een verzoek per146 // seconde per APPLICATIE en een User-Agent met contact -- allebei niet vanuit147 // een browser af te dwingen.148 //149 // WIJ KIEZEN NIET. Ook niet als er precies een treffer is: een verkeerd geraden150 // MBID zet jouw naam onder andermans werk. De knop staat er, de klik is van de151 // artiest. En de keuze gaat mee met de Opslaan-knop van de pagina -- een eigen152 // formulier kan hier niet, want deze pagina IS er een.153 function wireMusicBrainz() {154 const knop = document.getElementById('mb-zoek-btn');155 const veld = document.getElementById('mb-q');156 const uit = document.getElementById('mb-uit');157 const idVeld = document.getElementById('mb-id');158 const naamVeld = document.getElementById('mb-naam');159 const huidig = document.getElementById('mb-huidig');160 if (!knop || !veld || !uit || !idVeld || knop.__wired) return;161 knop.__wired = true;162 163 const el = (tag, cls, tekst) => {164 const e = document.createElement(tag);165 if (cls) e.className = cls;166 // textContent en nooit innerHTML: dit is tekst uit een vreemd register.167 if (tekst != null) e.textContent = tekst;168 return e;169 };170 171 function zet(mbid, naam) {172 idVeld.value = mbid || '';173 naamVeld.value = naam || '';174 if (huidig) {175 huidig.hidden = !mbid;176 const n = document.getElementById('mb-huidig-naam');177 const a = document.getElementById('mb-huidig-link');178 if (n) n.textContent = naam || mbid || '';179 if (a) a.href = mbid ? `https://musicbrainz.org/artist/${mbid}` : '#';180 }181 uit.hidden = true;182 uit.replaceChildren();183 }184 185 const wis = document.getElementById('mb-wis');186 if (wis) wis.addEventListener('click', () => zet('', ''));187 188 async function zoek() {189 const q = (veld.value || '').trim();190 if (!q) return;191 uit.hidden = false;192 uit.replaceChildren(el('p', 'form-hint', T.asite_mb_busy || 'Zoeken…'));193 knop.disabled = true;194 try {195 const r = await fetch(`api/musicbrainz?q=${encodeURIComponent(q)}`, { credentials: 'same-origin' });196 const j = await r.json();197 toon((j && j.kandidaten) || []);198 } catch {199 uit.replaceChildren(el('p', 'form-hint', T.asite_mb_fail || 'MusicBrainz is even niet bereikbaar.'));200 } finally {201 knop.disabled = false;202 }203 }204 205 function toon(kandidaten) {206 if (!kandidaten.length) {207 uit.replaceChildren(el('p', 'form-hint', T.asite_mb_none || 'Niets gevonden.'));208 return;209 }210 const lijst = el('ul', 'mb-lijst');211 for (const k of kandidaten) {212 const li = el('li', 'mb-kandidaat');213 li.appendChild(el('strong', null, k.naam));214 // De toelichting is het hele punt: er zijn drie bands die Nirvana heten,215 // en zonder dit veld kiest iemand de verkeerde.216 const bij = [k.toelichting, k.soort, k.land, k.jaren].filter(Boolean).join(' · ');217 if (bij) li.appendChild(el('small', 'mb-bij', bij));218 const open = el('a', 'mb-open', T.asite_mb_open || 'Bekijk op MusicBrainz');219 open.href = k.url; open.target = '_blank'; open.rel = 'noopener';220 li.appendChild(open);221 const b = el('button', 'btn', T.asite_mb_pick || 'Dit ben ik');222 b.type = 'button';223 b.addEventListener('click', () => zet(k.mbid, k.naam));224 li.appendChild(b);225 lijst.appendChild(li);226 }227 uit.replaceChildren(lijst);228 }229 230 knop.addEventListener('click', zoek);231 veld.addEventListener('keydown', (e) => { if (e.key === 'Enter') { e.preventDefault(); zoek(); } });232 }
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)