{
treffer.innerHTML = '';
try {
const liste = await vorschlaege(art, id,
suche.value.trim(), jahrfeld.value ? Number(jahrfeld.value) : undefined);
treffer.innerHTML = '';
if (liste.length === 0) { treffer.appendChild(leer('Nichts gefunden.')); return; }
const zeilen: HTMLButtonElement[] = [];
liste.forEach(v => {
const zeile = document.createElement('button');
zeile.className = 'vorschlag';
// **Mit Plakat.** „Dark" von 2017 und „Dark Shadows" von 1966 sind an
// einer Textzeile kaum zu unterscheiden, am Plakat in einer
// Zehntelsekunde. Der Server liefert die Adresse längst mit; sie wurde
// bisher weggeworfen.
const bild = document.createElement('div');
bild.className = 'vorschlag-bild';
if (v.posterUrl) {
const img = document.createElement('img');
img.src = v.posterUrl;
img.alt = '';
img.loading = 'lazy';
img.onload = () => bild.classList.add('geladen');
bild.appendChild(img);
}
const text = document.createElement('div');
text.className = 'vorschlag-text';
text.innerHTML =
`${esc(v.title)}`
+ `${esc(v.year ?? '')} · TMDB ${v.tmdbId}
`
+ `${esc((v.overview ?? '').slice(0, 160))}
`;
zeile.append(bild, text);
zeile.onclick = async () => {
// **Sichtbar machen, dass etwas passiert.**
//
// Ein Klick löste einen Abruf bei TMDB aus, der Bilder nachlädt und
// mehrere Sekunden braucht — und die Oberfläche sah aus wie vorher.
// Wer nichts sieht, klickt noch einmal, und dann laufen zwei.
zeilen.forEach(z => { z.disabled = true; });
zeile.classList.add('laeuft');
const lauf = document.createElement('span');
lauf.className = 'vorschlag-lauf';
lauf.innerHTML = 'Wird zugeordnet…';
zeile.appendChild(lauf);
try {
await zuordnen(art, id, v.tmdbId);
// Erst melden, dann schliessen: sonst blitzt nur der Dialog weg,
// und es bleibt offen, ob es geklappt hat.
lauf.innerHTML = 'Übernommen.';
d.close();
fertig?.();
} catch (fehler) {
lauf.remove();
zeile.classList.remove('laeuft');
zeilen.forEach(z => { z.disabled = false; });
treffer.appendChild(fehlerzeile(meldung(fehler)));
}
};
zeilen.push(zeile);
treffer.appendChild(zeile);
});
} catch (fehler) {
treffer.innerHTML = '';
treffer.appendChild(fehlerzeile(meldung(fehler)));
}
}
}