Changeset 6401681 in Klonkt for src/assets/js/mod/admin-site-edit.js
- Timestamp:
- 08/13/2026 01:08:32 PM (4 weeks ago)
- Branches:
- main
- Children:
- f59a46c
- Parents:
- 5300652
- git-author:
- Robin <roboburr@…> (08/13/2026 12:16:47 PM)
- git-committer:
- Robin <roboburr@…> (08/13/2026 01:08:32 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
r5300652 r6401681 134 134 } 135 135 })(); 136 137 // MusicBrainz-paneel (shaer-mbz). Binnen run(), niet op moduleniveau: deze 138 // modules krijgen bij elke paginawissel opnieuw init(), en een blok dat maar 139 // een keer per sessie draait is precies wat shaer-5s1 opleverde. 140 wireMusicBrainz(); 136 141 } 142 143 // ── MusicBrainz: ben jij dit? (shaer-mbz) ───────────────────────── 144 // 145 // De kandidaten komen van de server, want MusicBrainz eist een verzoek per 146 // seconde per APPLICATIE en een User-Agent met contact -- allebei niet vanuit 147 // een browser af te dwingen. 148 // 149 // WIJ KIEZEN NIET. Ook niet als er precies een treffer is: een verkeerd geraden 150 // MBID zet jouw naam onder andermans werk. De knop staat er, de klik is van de 151 // artiest. En de keuze gaat mee met de Opslaan-knop van de pagina -- een eigen 152 // 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)