docs: Beispiel-Dokument zeigt die neuen Features (INITIAL, D27-Nachtrag)
Das mitgelieferte „Example" führt jetzt alles vor: eingeklapptes Concept-Kapitel (>) mit "-Hinweis am Wurzelknoten, Knoten-ID #cms mit Langbeschreibung hinter ---, eine Abhängigkeit samt bewusster Diskrepanz (Landing page [x], effektiv geplant — Farbe + [x]-Marke + gepunktete Kante), eine Zugabe (+ Dark mode) und die Hosting-Wahl als =-Gruppe. Damit Bestandsnutzer die neue Fassung sehen, zieht seedShippedDocs das Beispiel jetzt wie das Werkbaum-Dokument per Fingerabdruck nach (werkbaum-seeded-example, D27-Nachtrag) — nur bei unverändertem Text, der Reset setzt beide Merker. 21 Knoten, 0 Warnungen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
1cd1d30d1b
commit
c6f42f8da1
@@ -698,6 +698,17 @@ Der Altwert `'1'` aus der ersten Fassung sagt nichts über den Textstand; dort
|
|||||||
wird bewusst nichts überschrieben, nur der Merker ersetzt. Wer aus dieser kurzen
|
wird bewusst nichts überschrieben, nur der Merker ersetzt. Wer aus dieser kurzen
|
||||||
Zwischenfassung kommt, holt den aktuellen Stand über den Reset.
|
Zwischenfassung kommt, holt den aktuellen Stand über den Reset.
|
||||||
|
|
||||||
|
**Nachtrag — das Nachziehen gilt jetzt auch für das Beispiel-Dokument.** Als
|
||||||
|
das Beispiel die neuen Notations-Features (IDs, Abhängigkeiten, `=`, Falten,
|
||||||
|
Beschreibungen) vorführen sollte, stand es vor demselben Problem wie damals
|
||||||
|
der Werkbaum-Plan: Ohne Merker erreicht eine neue INITIAL-Fassung
|
||||||
|
Bestandsnutzer nie — ihr unverändertes Beispiel sieht nur wie „bearbeitet“
|
||||||
|
aus. Ein zweiter Fingerabdruck (`werkbaum-seeded-example`) überträgt die
|
||||||
|
D27-Regeln wörtlich: nachgezogen wird nur, solange der Text exakt die zuletzt
|
||||||
|
ausgelieferte Fassung ist; bearbeitete Texte werden nie angefasst; ein
|
||||||
|
gelöschtes Beispiel wird vom Nachziehen nicht wiederbelebt (das macht bei
|
||||||
|
Bedarf `deleteDoc`/Reset). Der Reset setzt beide Merker mit.
|
||||||
|
|
||||||
## D28 — „Was ist neu?": neu in Produktion, gelber Strahlenkranz
|
## D28 — „Was ist neu?": neu in Produktion, gelber Strahlenkranz
|
||||||
Dokumente von außen (mitgeliefert, D27; per `?sourceUrl=`, D23) ändern sich,
|
Dokumente von außen (mitgeliefert, D27; per `?sourceUrl=`, D23) ändern sich,
|
||||||
ohne dass der Betrachter es merkt. Sie zeigen deshalb, was sich seit seinem
|
ohne dass der Betrachter es merkt. Sie zeigen deshalb, was sich seit seinem
|
||||||
|
|||||||
+4
-1
@@ -102,7 +102,10 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
|
|||||||
- Beispiel-Dokument (D22): reservierte id `EXAMPLE_ID = 'example'`, fester
|
- Beispiel-Dokument (D22): reservierte id `EXAMPLE_ID = 'example'`, fester
|
||||||
englischer Name `EXAMPLE_NAME = 'Example'` (nicht lokalisiert). `loadDocs()`
|
englischer Name `EXAMPLE_NAME = 'Example'` (nicht lokalisiert). `loadDocs()`
|
||||||
adoptiert einen Alt-Zustand (zufällige id, „Beispiel") nur, wenn dessen
|
adoptiert einen Alt-Zustand (zufällige id, „Beispiel") nur, wenn dessen
|
||||||
`text === INITIAL` (nie echte Nutzerinhalte). `resetToDefaults()` setzt **nur**
|
`text === INITIAL` (nie echte Nutzerinhalte). Eine neue INITIAL-Fassung wird
|
||||||
|
wie beim Werkbaum-Dokument per Fingerabdruck nachgezogen
|
||||||
|
(`werkbaum-seeded-example`, D27-Nachtrag) — nur bei unverändertem Text; der
|
||||||
|
Reset setzt beide Merker. `resetToDefaults()` setzt **nur**
|
||||||
das Beispiel-Dokument (id `example`) auf `INITIAL`/„Example" zurück und verwirft
|
das Beispiel-Dokument (id `example`) auf `INITIAL`/„Example" zurück und verwirft
|
||||||
`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
|
||||||
|
|||||||
+28
-5
@@ -12,7 +12,8 @@ import WERKBAUM_DOC from '../../docs/examples/werkbaum.werkbaum?raw';
|
|||||||
|
|
||||||
const INITIAL = `%% Project structure – Sprint 14
|
const INITIAL = `%% Project structure – Sprint 14
|
||||||
[~] Website relaunch (XL) https://wiki.example.com/relaunch
|
[~] Website relaunch (XL) https://wiki.example.com/relaunch
|
||||||
- [x] Concept (M)
|
" Folded chapters are done — click the ▸ to peek inside.
|
||||||
|
- > [x] Concept (M)
|
||||||
- [x] Audience analysis (S)
|
- [x] Audience analysis (S)
|
||||||
- [x] Sitemap (XS)
|
- [x] Sitemap (XS)
|
||||||
- [~] Implementation (XL)
|
- [~] Implementation (XL)
|
||||||
@@ -23,13 +24,20 @@ const INITIAL = `%% Project structure – Sprint 14
|
|||||||
- [ ] Android (M)
|
- [ ] Android (M)
|
||||||
- [ ] iOS (M)
|
- [ ] iOS (M)
|
||||||
- [!] Backend (L) @ben @carla
|
- [!] Backend (L) @ben @carla
|
||||||
- [ ] CMS integration (M)
|
- [ ] CMS integration #cms (M)
|
||||||
| [ ] WordPress
|
| [ ] WordPress
|
||||||
| [?] Headless CMS
|
| [?] Headless CMS
|
||||||
| [-] Custom build %% too much effort
|
| [-] Custom build %% too much effort
|
||||||
- [?] Hosting (M)
|
- [x] Landing page (S) :#cms %% done, but effectively waiting for the CMS
|
||||||
| Cooperative Community Cloud https://hostsharing.net
|
+ [?] Dark mode (S) %% nice to have, never on the cheapest path
|
||||||
| On-premise`;
|
- [?] Hosting (M) %% exactly one of these, hence =
|
||||||
|
= [ ] Cooperative Community Cloud https://hostsharing.net
|
||||||
|
= [?] On-premise
|
||||||
|
|
||||||
|
---
|
||||||
|
#cms
|
||||||
|
The articles live in the CMS, so everything that shows content
|
||||||
|
depends on it — the dotted arrows point at what is needed.`;
|
||||||
|
|
||||||
const src = document.getElementById('src');
|
const src = document.getElementById('src');
|
||||||
const out = document.getElementById('out');
|
const out = document.getElementById('out');
|
||||||
@@ -2029,6 +2037,7 @@ fsBtn.addEventListener('click', () => {
|
|||||||
const LS_UI = 'werkbaum-ui', LS_SRC = 'werkbaum-src';
|
const LS_UI = 'werkbaum-ui', LS_SRC = 'werkbaum-src';
|
||||||
const LS_DOCS = 'werkbaum-docs', LS_ACTIVE = 'werkbaum-active';
|
const LS_DOCS = 'werkbaum-docs', LS_ACTIVE = 'werkbaum-active';
|
||||||
const LS_SEEDED = 'werkbaum-seeded'; /* mitgelieferte Dokumente schon angelegt? */
|
const LS_SEEDED = 'werkbaum-seeded'; /* mitgelieferte Dokumente schon angelegt? */
|
||||||
|
const LS_SEEDED_EXAMPLE = 'werkbaum-seeded-example'; /* Fingerabdruck der ausgelieferten INITIAL-Fassung (D27-Nachtrag) */
|
||||||
let restoring = false; /* unterdrückt Speichern während des Wiederherstellens */
|
let restoring = false; /* unterdrückt Speichern während des Wiederherstellens */
|
||||||
let hadStoredUI = false; /* gab es beim Laden schon gespeicherte GUI-Einstellungen? */
|
let hadStoredUI = false; /* gab es beim Laden schon gespeicherte GUI-Einstellungen? */
|
||||||
|
|
||||||
@@ -2094,6 +2103,19 @@ function seedShippedDocs(){
|
|||||||
doc.text = WERKBAUM_DOC;
|
doc.text = WERKBAUM_DOC;
|
||||||
}
|
}
|
||||||
try{ localStorage.setItem(LS_SEEDED, fp); }catch(_){}
|
try{ localStorage.setItem(LS_SEEDED, fp); }catch(_){}
|
||||||
|
/* Dasselbe Nachziehen für das Beispiel-Dokument (D27-Nachtrag): Ohne den
|
||||||
|
Merker erreichte eine neue Fassung von INITIAL Bestandsnutzer nie —
|
||||||
|
ihr unverändertes Beispiel sähe nur wie „bearbeitet" aus. Nachgezogen
|
||||||
|
wird nur, solange der Text exakt die zuletzt ausgelieferte Fassung ist;
|
||||||
|
ein gelöschtes Beispiel wird hier nicht wiederbelebt. */
|
||||||
|
const exFp = fingerprint(INITIAL);
|
||||||
|
let exSeen = null;
|
||||||
|
try{ exSeen = localStorage.getItem(LS_SEEDED_EXAMPLE); }catch(_){}
|
||||||
|
const ex = docs.find(d => d.id === EXAMPLE_ID);
|
||||||
|
if(exSeen && exSeen !== exFp && ex && fingerprint(ex.text) === exSeen){
|
||||||
|
ex.text = INITIAL;
|
||||||
|
}
|
||||||
|
try{ localStorage.setItem(LS_SEEDED_EXAMPLE, exFp); }catch(_){}
|
||||||
/* Nur vergleichen, solange der Text der ausgelieferte ist — hat der Nutzer ihn
|
/* Nur vergleichen, solange der Text der ausgelieferte ist — hat der Nutzer ihn
|
||||||
bearbeitet, gibt es keine saubere Vergleichsbasis (D28). */
|
bearbeitet, gibt es keine saubere Vergleichsbasis (D28). */
|
||||||
const shipped = docs.find(d => d.id === WERKBAUM_ID);
|
const shipped = docs.find(d => d.id === WERKBAUM_ID);
|
||||||
@@ -3162,6 +3184,7 @@ function resetToDefaults(){
|
|||||||
/* Merker auf den jetzt ausgelieferten Stand setzen (D27) — sonst hielte ein
|
/* Merker auf den jetzt ausgelieferten Stand setzen (D27) — sonst hielte ein
|
||||||
Altwert die spätere Nachzieh-Logik davon ab, den Text je zu aktualisieren. */
|
Altwert die spätere Nachzieh-Logik davon ab, den Text je zu aktualisieren. */
|
||||||
try{ localStorage.setItem(LS_SEEDED, fingerprint(WERKBAUM_DOC)); }catch(_){}
|
try{ localStorage.setItem(LS_SEEDED, fingerprint(WERKBAUM_DOC)); }catch(_){}
|
||||||
|
try{ localStorage.setItem(LS_SEEDED_EXAMPLE, fingerprint(INITIAL)); }catch(_){}
|
||||||
activeId = EXAMPLE_ID;
|
activeId = EXAMPLE_ID;
|
||||||
persistDocs();
|
persistDocs();
|
||||||
logUpdate('🔄 Mitgelieferte Dokumente und Einstellungen zurückgesetzt');
|
logUpdate('🔄 Mitgelieferte Dokumente und Einstellungen zurückgesetzt');
|
||||||
|
|||||||
Reference in New Issue
Block a user