diff --git a/workspace/assets/css/wissen.css b/workspace/assets/css/wissen.css index 094c2604..8bccbd8c 100644 --- a/workspace/assets/css/wissen.css +++ b/workspace/assets/css/wissen.css @@ -314,3 +314,13 @@ .schalter, .schalter__gleis, .schalter__punkt { transition: none; } .kachel:hover { transform: none; } } + +/* Bestätigung in derselben Zeile wie Fehler, aber nicht in Warnrot -- + eine Erfolgsmeldung in Rot liest sich wie ein Problem. */ +.fehler[data-gut="ja"] { + color: #79d1a2; + padding: 9px 13px; + background: rgba(95, 201, 154, .09); + border: 1px solid rgba(95, 201, 154, .3); + border-radius: var(--radius-klein); +} diff --git a/workspace/assets/js/wissen.js b/workspace/assets/js/wissen.js index 503caed0..86b61c8d 100644 --- a/workspace/assets/js/wissen.js +++ b/workspace/assets/js/wissen.js @@ -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; } diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 9b4a8438..145e22e3 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -7,9 +7,9 @@ - - - + + +
@@ -134,7 +134,7 @@ - - + +