frontend: Mitgeliefertes Dokument heißt „Werkbaum" (Tippfehler korrigiert)

„Werkbank" war ein Vertipper, gemeint war der Projektname.

- WERKBAUM_NAME auf „Werkbaum" gesetzt.
- `loadDocs()` zieht den Namen bei bereits angelegten Dokumenten nach — aber
  nur, solange er unverändert der ausgelieferte „Werkbank" ist. Eine eigene
  Umbenennung des Nutzers bleibt stehen; ein fremdes Dokument, das zufällig
  „Werkbank" heißt, wird nicht angefasst (die Regel greift über die
  reservierte id, nicht über den Namen).

Verifiziert im Browser: Bestandszustand mit drei Dokumenten (Example,
id=werkbaum/„Werkbank", eigenes d9/„Werkbank") -> nach dem Laden ist nur
id=werkbaum umbenannt, d9 bleibt unberührt; frischer Zustand zeigt „Example"
und „Werkbaum" im Wähler, Wechsel rendert 75 Knoten ohne Warnung.
Vitest 37/37.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-07-27 14:10:06 +02:00
co-authored by Claude Opus 4.8
parent 6fb45ff37a
commit e160015fc7
3 changed files with 14 additions and 5 deletions
+5 -3
View File
@@ -620,9 +620,9 @@ als `max-width`/`max-height` im CSS**, weil die gespeicherte Größe ein fester
px-Wert ist: schrumpft das Panel später (Zug am großen Splitter, Drehung, px-Wert ist: schrumpft das Panel später (Zug am großen Splitter, Drehung,
Bildschirmtastatur), würde der Editor sonst auf 0 gedrückt. Bildschirmtastatur), würde der Editor sonst auf 0 gedrückt.
## D27 — „Werkbank": Werkbaums eigener Plan als mitgeliefertes Dokument ## D27 — „Werkbaum": der eigene Plan als mitgeliefertes Dokument
Neben dem Beispiel (D22) liegt ein zweites mitgeliefertes Dokument im Wähler: Neben dem Beispiel (D22) liegt ein zweites mitgeliefertes Dokument im Wähler:
**„Werkbank"** — Werkbaum selbst, mit Werkbaum geplant (Bestand + mögliche **„Werkbaum"** — Werkbaum selbst, mit Werkbaum geplant (Bestand + mögliche
Weiterentwicklung). Damit ist der interessanteste Beispielbaum ohne Umweg über Weiterentwicklung). Damit ist der interessanteste Beispielbaum ohne Umweg über
einen `?sourceUrl=`-Link erreichbar; zugleich dient er als lebende einen `?sourceUrl=`-Link erreichbar; zugleich dient er als lebende
Projektübersicht. Projektübersicht.
@@ -644,7 +644,9 @@ kehrte bei **jedem** Laden zurück. Das aktive Dokument bleibt beim Anlegen
unverändert — niemand wird aus seinem Text gerissen. unverändert — niemand wird aus seinem Text gerissen.
**Fester Name, nicht lokalisiert** — wie „Example" (D22): Dokumentnamen sind **Fester Name, nicht lokalisiert** — wie „Example" (D22): Dokumentnamen sind
Nutzerdaten. Der Reset (D22) setzt jetzt **beide** mitgelieferten Dokumente auf Nutzerdaten. (Die erste Fassung hieß durch einen Tippfehler „Werkbank";
`loadDocs()` zieht den Namen nach — aber **nur**, solange er unverändert der
ausgelieferte ist, damit eine eigene Umbenennung stehen bleibt.) Der Reset (D22) setzt jetzt **beide** mitgelieferten Dokumente auf
ihren Auslieferungsstand zurück; eigene Dokumente bleiben weiterhin unangetastet. ihren Auslieferungsstand zurück; eigene Dokumente bleiben weiterhin unangetastet.
**Offen:** Der Text wird nach dem Anlegen nicht mehr aktualisiert. Erscheint **Offen:** Der Text wird nach dem Anlegen nicht mehr aktualisiert. Erscheint
+1 -1
View File
@@ -106,7 +106,7 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
`werkbaum-ui`/`werkbaum-lang`/Update-Flags — **andere Dokumente bleiben stehen** `werkbaum-ui`/`werkbaum-lang`/Update-Flags — **andere Dokumente bleiben stehen**
(nicht mehr pauschal alle `werkbaum-*` löschen!). Das letzte gelöschte Dokument (nicht mehr pauschal alle `werkbaum-*` löschen!). Das letzte gelöschte Dokument
wird als Beispiel neu gesät. wird als Beispiel neu gesät.
- Mitgeliefertes Dokument „Werkbank" (D27): `app.js` importiert - Mitgeliefertes Dokument „Werkbaum" (D27): `app.js` importiert
`../../docs/examples/example-werkbaum.werkbaum?raw` — die Beispieldatei ist `../../docs/examples/example-werkbaum.werkbaum?raw` — die Beispieldatei ist
damit **Build-Eingabe**, Umbenennen/Verschieben bricht den Build (Zugriff damit **Build-Eingabe**, Umbenennen/Verschieben bricht den Build (Zugriff
außerhalb des Roots erlaubt `server.fs.allow:['..']`). `seedShippedDocs()` legt außerhalb des Roots erlaubt `server.fs.allow:['..']`). `seedShippedDocs()` legt
+8 -1
View File
@@ -1318,7 +1318,9 @@ let hadStoredUI = false; /* gab es beim Laden schon gespeicherte GUI-Einstellun
const EXAMPLE_ID = 'example', EXAMPLE_NAME = 'Example'; const EXAMPLE_ID = 'example', EXAMPLE_NAME = 'Example';
/* Zweites mitgeliefertes Dokument: Werkbaum selbst (D27). Fester Name wie beim /* Zweites mitgeliefertes Dokument: Werkbaum selbst (D27). Fester Name wie beim
Beispiel — Dokumentnamen sind Nutzerdaten und werden nicht übersetzt (D22). */ Beispiel — Dokumentnamen sind Nutzerdaten und werden nicht übersetzt (D22). */
const WERKBAUM_ID = 'werkbaum', WERKBAUM_NAME = 'Werkbank'; const WERKBAUM_ID = 'werkbaum', WERKBAUM_NAME = 'Werkbaum';
/* Die erste Fassung hieß versehentlich „Werkbank" (Tippfehler). */
const WERKBAUM_NAME_ALT = 'Werkbank';
let docs = []; /* [{id, name, text}] */ let docs = []; /* [{id, name, text}] */
let activeId = null; let activeId = null;
function uid(){ return 'd' + Date.now().toString(36) + Math.random().toString(36).slice(2, 7); } function uid(){ return 'd' + Date.now().toString(36) + Math.random().toString(36).slice(2, 7); }
@@ -1376,6 +1378,11 @@ function loadDocs(){
docs[0].name = EXAMPLE_NAME; docs[0].name = EXAMPLE_NAME;
} }
seedShippedDocs(); seedShippedDocs();
/* Namensfix für die kurzlebige Fassung mit dem Tippfehler — nur, solange der
ausgelieferte Name unverändert ist; eine eigene Umbenennung bleibt stehen
(Dokumentnamen sind Nutzerdaten, D22). */
const wb = docs.find(d => d.id === WERKBAUM_ID);
if(wb && wb.name === WERKBAUM_NAME_ALT) wb.name = WERKBAUM_NAME;
activeId = docs.some(d => d.id === a) ? a : docs[0].id; activeId = docs.some(d => d.id === a) ? a : docs[0].id;
} }
function saveSrc(){ function saveSrc(){