fix(studio): Lauf-Anzeige ohne geöffneten Fall zurücksetzen

Nachtrag zu ffbdd51. _renderLauf lief nur über _stagesIdle, und das wiederum
nur beim Laden eines Falls. Schloss man den Fall oder öffnete das Studio ohne
Fall, blieb der Stand-Kasten mit den Angaben des zuletzt geöffneten Falls
stehen, beim allerersten Aufruf war er leer.

Zwei Absicherungen. Der Leerzustand setzt Fall und Frischedaten zurück und
zeichnet die Spalte einmal neu, und das Dokument bringt den Ausgangstext
bereits mit.

Sechs Prüfungen dafür.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-08-02 19:28:39 +00:00
Ursprung ffbdd5170c
Commit f8d32b1d18
3 geänderte Dateien mit 346 neuen und 315 gelöschten Zeilen

Datei anzeigen

@@ -170,6 +170,14 @@ const Studio = {
const cols = document.getElementById('studio-cols');
if (cols) cols.classList.toggle('idle', on);
document.getElementById('studio-empty').style.display = on ? '' : 'none';
// Ohne Fall wuerde die Lauf-Anzeige sonst mit dem Stand des zuletzt
// geoeffneten Falls stehen bleiben. Nur beim Leerschalten neu zeichnen,
// beim Oeffnen macht das loadDetail mit den richtigen Daten.
if (on) {
this.incident = null;
this.fresh = null;
this._renderLauf();
}
},
// === Linke Spalte: Reiter "Fälle" / "Quellen" ===

Datei anzeigen

@@ -396,7 +396,7 @@
selben Ziel nebeneinander stehen. Die Beschriftung des Knopfes
richtet sich nach dem Zustand des Falls, siehe _renderLauf. -->
<div class="lauf-stand" id="lauf-stand">
<div class="ls-haupt" id="ls-haupt"></div>
<div class="ls-haupt" id="ls-haupt">Kein Fall geöffnet</div>
<div class="ls-neben" id="ls-neben"></div>
<button class="ls-btn" id="ls-btn" data-stage="full" disabled
onclick="Studio.laufKnopf()">

Datei anzeigen

@@ -43,6 +43,7 @@ function element(id) {
toggle: (n, an) => { if (an) klassen.add(n); else klassen.delete(n); },
contains: (n) => klassen.has(n),
},
style: {},
_kinder: {},
querySelector(sel) {
const k = sel.replace('.', '');
@@ -55,7 +56,8 @@ function element(id) {
const IDS = ['lauf-stand', 'ls-haupt', 'ls-neben', 'ls-btn', 'ls-hinweis',
'lauf-kette', 'lauf-fortschritt', 'lauf-schritte', 'start-panel',
'art-summary-meta', 'art-fc-meta', 'art-snap-meta', 'art-tl-meta'];
'art-summary-meta', 'art-fc-meta', 'art-snap-meta', 'art-tl-meta',
'studio-cols', 'studio-empty'];
const elemente = {};
const meldungen = [];
const aufrufe = [];
@@ -91,6 +93,14 @@ const Studio = vm.runInContext(
'var Studio = {\n' + quelle.slice(von, bis) + '\n'
+ ' incident: null, fresh: null, _runningStage: null,\n'
+ ' async runStage(s) { this._letzterStart = s; },\n'
// _showEmpty steht ausserhalb des herausgeloesten Blocks, deshalb hier
// wortgleich nachgebildet.
+ ' _showEmpty(on) {\n'
+ ' const c = document.getElementById("studio-cols");\n'
+ ' if (c) c.classList.toggle("idle", on);\n'
+ ' document.getElementById("studio-empty").style.display = on ? "" : "none";\n'
+ ' if (on) { this.incident = null; this.fresh = null; this._renderLauf(); }\n'
+ ' },\n'
+ '};\nStudio;', kontext);
const LAGE = { id: 7, title: 'Ceuta', type: 'adhoc' };
@@ -307,6 +317,19 @@ async function main() {
pruefe('J2 und behandelt den Fall wie leer',
g('ls-haupt').textContent.includes('Noch keine Artikel'));
console.log('\nK) Der Leerzustand räumt die Anzeige auf');
neu('aktuell');
Studio._renderLauf();
pruefe('K1 zunächst steht der Stand des Falls da',
g('ls-haupt').textContent.includes('neuesten Stand'));
Studio._showEmpty(true);
pruefe('K2 danach steht dort kein alter Stand mehr',
g('ls-haupt').textContent === 'Kein Fall geöffnet', g('ls-haupt').textContent);
pruefe('K3 die Kette ist geleert', g('lauf-kette').innerHTML === '');
pruefe('K4 die Schrittliste ist geleert', g('lauf-schritte').innerHTML === '');
pruefe('K5 der Knopf ist gesperrt', g('ls-btn').disabled === true);
pruefe('K6 der Fall ist wirklich losgelassen', Studio.incident === null);
console.log('\nErgebnis: ' + ok + ' bestanden, ' + fail + ' fehlgeschlagen');
process.exit(fail ? 1 : 0);
}