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'); const cols = document.getElementById('studio-cols');
if (cols) cols.classList.toggle('idle', on); if (cols) cols.classList.toggle('idle', on);
document.getElementById('studio-empty').style.display = on ? '' : 'none'; 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" === // === Linke Spalte: Reiter "Fälle" / "Quellen" ===

Datei anzeigen

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

Datei anzeigen

@@ -43,6 +43,7 @@ function element(id) {
toggle: (n, an) => { if (an) klassen.add(n); else klassen.delete(n); }, toggle: (n, an) => { if (an) klassen.add(n); else klassen.delete(n); },
contains: (n) => klassen.has(n), contains: (n) => klassen.has(n),
}, },
style: {},
_kinder: {}, _kinder: {},
querySelector(sel) { querySelector(sel) {
const k = sel.replace('.', ''); const k = sel.replace('.', '');
@@ -55,7 +56,8 @@ function element(id) {
const IDS = ['lauf-stand', 'ls-haupt', 'ls-neben', 'ls-btn', 'ls-hinweis', const IDS = ['lauf-stand', 'ls-haupt', 'ls-neben', 'ls-btn', 'ls-hinweis',
'lauf-kette', 'lauf-fortschritt', 'lauf-schritte', 'start-panel', '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 elemente = {};
const meldungen = []; const meldungen = [];
const aufrufe = []; const aufrufe = [];
@@ -91,6 +93,14 @@ const Studio = vm.runInContext(
'var Studio = {\n' + quelle.slice(von, bis) + '\n' 'var Studio = {\n' + quelle.slice(von, bis) + '\n'
+ ' incident: null, fresh: null, _runningStage: null,\n' + ' incident: null, fresh: null, _runningStage: null,\n'
+ ' async runStage(s) { this._letzterStart = s; },\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); + '};\nStudio;', kontext);
const LAGE = { id: 7, title: 'Ceuta', type: 'adhoc' }; const LAGE = { id: 7, title: 'Ceuta', type: 'adhoc' };
@@ -307,6 +317,19 @@ async function main() {
pruefe('J2 und behandelt den Fall wie leer', pruefe('J2 und behandelt den Fall wie leer',
g('ls-haupt').textContent.includes('Noch keine Artikel')); 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'); console.log('\nErgebnis: ' + ok + ' bestanden, ' + fail + ' fehlgeschlagen');
process.exit(fail ? 1 : 0); process.exit(fail ? 1 : 0);
} }