Wissen: Kategorie muss ausdruecklich gewaehlt werden

Filipes PDF ueber TikTok LIVE Studio landete unter "TikTok - Grundlagen
& Funktionen" statt unter "Streaming mit PC". Ursache ist ein Denkfehler
von mir, kein Bedienfehler:

Das Kategoriefeld war mit dem ERSTEN Eintrag der Liste vorbelegt. Wer es
nicht bewusst aendert, merkt nichts -- die Pflichtangabe hat still fuer
ihn entschieden. Eine Vorbelegung, die niemand gewaehlt hat, ist keine
Voreinstellung, sondern ein Fehler mit Ansage.

Jetzt steht dort "- Kategorie waehlen -", und ohne Auswahl geht das
Formular nicht ab (Browser blockt, zusaetzlich eigene Pruefung).
Vorbelegt wird nur noch, wenn man AUS einer Kategorie heraus hochlaedt
-- dann ist es eine informierte Annahme statt einer geratenen.

Ausserdem: zwanzig Eintraege in einer flachen Liste findet man nicht.
Das Feld ist jetzt nach denselben sechs Welten gruppiert wie die
Kacheln auf der Seite (optgroup). Geprueft: alle 20 waehlbar,
"Streaming mit PC" ist dabei.

Nach dem Veroeffentlichen steht in einer gruenen Zeile, WO die Anleitung
gelandet ist -- sonst merkt man einen Irrtum erst, wenn man sie
irgendwann sucht. Die Meldung nutzt dieselbe Zeile wie Fehler, aber
nicht dieselbe Farbe: Eine Erfolgsmeldung in Warnrot liest sich wie ein
Problem.

Bereits hochgeladene PDFs lassen sich ueber "Bearbeiten" umhaengen --
die Datei bleibt dabei unberuehrt.
This commit is contained in:
2026-08-28 13:40:14 +02:00
parent 4d7d9b183b
commit 79f0186494
15 changed files with 129 additions and 78 deletions
+45 -4
View File
@@ -22,7 +22,14 @@
if (text !== undefined) k.textContent = text;
return k;
};
const melde = (t) => { $('fehler').textContent = t || ''; };
/* Dieselbe Zeile fuer Fehler und Bestaetigungen -- aber nicht
dieselbe Farbe. Eine Erfolgsmeldung in Warnrot liest sich wie ein
Problem. */
const melde = (text, gut = false) => {
const e = $('fehler');
e.textContent = text || '';
if (gut) e.dataset.gut = 'ja'; else delete e.dataset.gut;
};
const datum = (iso) => (iso ? iso.slice(0, 10).split('-').reverse().join('.') : '');
const groesse = (b) => (b >= 1048576 ? (b / 1048576).toFixed(1) + ' MB' : Math.round(b / 1024) + ' KB');
@@ -322,7 +329,13 @@
$('n-datei-block').hidden = !!eintrag;
$('n-titel').value = eintrag ? eintrag.titel : '';
$('n-beschreibung').value = eintrag ? (eintrag.beschreibung || '') : '';
$('n-kategorie').value = eintrag ? eintrag.kategorie : (zustand().k || aufbau.kategorien[0].schluessel);
/* NICHT die erste Kategorie vorbelegen. Genau daran ist eine PDF
ueber TikTok LIVE Studio unter "TikTok - Grundlagen" gelandet:
Das Feld stand still auf dem ersten Eintrag der Liste, und wer es
nicht bewusst aendert, merkt es nicht. Vorbelegt wird nur, wenn
man aus EINER Kategorie heraus hochlaedt -- dann ist es eine
informierte Annahme, keine geratene. */
$('n-kategorie').value = eintrag ? eintrag.kategorie : (zustand().k || '');
$('n-stufe').value = eintrag ? eintrag.stufe : 'einsteiger';
$('n-geraet').value = eintrag ? eintrag.geraet : 'egal';
$('n-tags').value = eintrag ? eintrag.tags.join(', ') : '';
@@ -353,7 +366,26 @@
f.append(o);
}
};
setz('n-kategorie', aufbau.kategorien.map((k) => [k.schluessel, k.nr + '. ' + k.name]));
/* Nach Welten gruppiert -- dieselbe Gliederung wie auf der Seite.
Zwanzig Eintraege in einer flachen Liste findet man nicht. */
const kf = $('n-kategorie');
kf.textContent = '';
const platzhalter = document.createElement('option');
platzhalter.value = '';
platzhalter.textContent = '— Kategorie wählen —';
platzhalter.disabled = true;
kf.append(platzhalter);
for (const welt of aufbau.welten) {
const gruppe = document.createElement('optgroup');
gruppe.label = welt.name;
for (const k of aufbau.kategorien.filter((x) => x.welt === welt.schluessel)) {
const o = document.createElement('option');
o.value = k.schluessel;
o.textContent = k.name;
gruppe.append(o);
}
if (gruppe.children.length) kf.append(gruppe);
}
setz('n-stufe', Object.entries(aufbau.stufen));
setz('n-geraet', Object.entries(aufbau.geraete));
@@ -442,6 +474,11 @@
veroeffentlicht: $('n-datum').value,
};
if (angaben.titel.length < 3) { $('n-fehler').textContent = 'Der Titel fehlt.'; return; }
if (!angaben.kategorie) {
$('n-fehler').textContent = 'Wähle die Kategorie aus, in der die Anleitung stehen soll.';
$('n-kategorie').focus();
return;
}
knopf.disabled = true;
try {
@@ -463,8 +500,12 @@
$('n-fehler').textContent = (await a.json().catch(() => ({}))).fehler || 'Das hat nicht geklappt.';
return;
}
const kat = aufbau.kategorien.find((k) => k.schluessel === angaben.kategorie);
formularSchliessen();
melde('');
/* Sagen, WO sie gelandet ist -- sonst merkt man einen Irrtum erst,
wenn man sie irgendwann sucht. */
melde(`„${angaben.titel}“ liegt jetzt unter „${kat ? kat.name : angaben.kategorie}“.`, true);
setTimeout(() => melde(''), 7000);
$('n-stand').textContent = '';
await laden_();
} catch { /* umgeleitet */ } finally { knopf.disabled = false; }