Abspielen spielt ab
Im Aufmacher der Startseite stand „Abspielen", und wer draufdrückte, landete auf der Detailseite. Gemessen am laufenden Server: beide Knöpfe riefen dieselbe Funktion — `oeffnen` —, der eine hiess nur anders. Drei Dinge waren falsch, alle an derselben Stelle: **Der Knopf log.** Jetzt startet er den Spieler, mit Fortsetzen ab der Stelle, an der man war. Ohne Datei — eine ganze Serie — heisst er „Ansehen" und führt dorthin, wo man wählen kann. **Eine angefangene Folge war kein Film.** Sie lief durch `alsHero` mit `art: 'filme'` und ihrer eigenen Kennung; der Klick ging auf `#/filme/<Folgenkennung>` und endete in „Diesen Film gibt es nicht mehr". Nachgemessen im Browser, dann `angefangenAlsHero` dafür gebaut: die Detailseite gehört der Serie, der Fortschritt der Folge. **Ein geplanter Titel sah aus wie jeder andere.** Jetzt steht statt des Knopfes „Bald ist es soweit" mit dem Termin, wie auf der Detailseite. Dafür nennt `/home/continue` und `/home/next` nun Datei, Länge und Termin, und die Vorschläge bringen ihre Dateien mit — ohne die konnte der Aufmacher gar nicht abspielen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
343b0cdcfb
commit
f10fb4c1bc
@@ -4,7 +4,8 @@ import {
|
||||
} from '../api';
|
||||
import { leer, fehlerzeile, meldung } from '../util';
|
||||
import { kachel, alsKachel, angefangenAlsKachel, reihe } from '../card';
|
||||
import { hero, alsHero, type Heroeintrag } from '../hero';
|
||||
import { hero, alsHero, angefangenAlsHero, type Heroeintrag } from '../hero';
|
||||
import { spieler } from '../spieler';
|
||||
|
||||
type Art = 'filme' | 'serien';
|
||||
|
||||
@@ -24,7 +25,12 @@ export function startseite(
|
||||
const wurzel = document.createElement('div');
|
||||
wurzel.innerHTML = '<div class="spinner"></div>';
|
||||
|
||||
void (async () => {
|
||||
// **Benannt, damit der Spieler sie danach neu bauen kann.** Wer aus dem
|
||||
// Aufmacher heraus zu Ende schaut, soll die Zeile „Fortsetzen" nicht
|
||||
// unverändert wiederfinden.
|
||||
void aufbauen();
|
||||
|
||||
async function aufbauen(): Promise<void> {
|
||||
try {
|
||||
// **Alles auf einmal anfragen.** Bei fünf Mediatheken wären es sonst
|
||||
// acht Anfragen nacheinander, und die Startseite baut sich vor den
|
||||
@@ -56,16 +62,28 @@ export function startseite(
|
||||
heroTitel.push(e);
|
||||
};
|
||||
|
||||
weiter.items.forEach(e => dazu(alsHero(e as never, 'serien' in e ? 'serien' : 'filme')));
|
||||
weiter.items.forEach(e => dazu(angefangenAlsHero(e)));
|
||||
bibliotheken.forEach((b, i) => {
|
||||
const art: Art = b.kind === 'Shows' ? 'serien' : 'filme';
|
||||
bestaende[i]?.items.forEach(e => dazu(alsHero(e as never, art)));
|
||||
});
|
||||
vorschlag.items.forEach(e => dazu(alsHero(e as never, 'filme')));
|
||||
vorschlag.items.forEach(e => dazu(alsHero(e, 'filme')));
|
||||
|
||||
const aufmacher = hero(heroTitel,
|
||||
(art, id) => oeffnen(art, id),
|
||||
(art, id) => oeffnen(art, id));
|
||||
e => {
|
||||
// Ohne Datei gibt es nichts zu starten — dann führt der Knopf
|
||||
// dorthin, wo man wählen kann.
|
||||
if (e.dateiId === null) { oeffnen(e.art, e.id); return; }
|
||||
spieler({
|
||||
dateiId: e.dateiId,
|
||||
titelId: e.standId,
|
||||
name: e.titel,
|
||||
ab: e.stelle,
|
||||
laenge: e.laenge,
|
||||
danach: () => void aufbauen(),
|
||||
});
|
||||
});
|
||||
if (aufmacher) wurzel.appendChild(aufmacher);
|
||||
|
||||
if (weiter.items.length) {
|
||||
@@ -106,7 +124,7 @@ export function startseite(
|
||||
wurzel.innerHTML = '';
|
||||
wurzel.appendChild(fehlerzeile(meldung(fehler)));
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
return wurzel;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user