fix(menü): mitgelieferte Dokumente sind nicht mehr umbenennbar (D81-Nachtrag 3)
Ihr Name ist Auslieferungsstand: Wiederherstellen stellt ihn mit her, der Neu-laden-Vergleich prüft ihn, und ein umbenanntes, aber unverändertes Beispiel bekäme weiter still neue Fassungen nachgezogen (das Nachziehen hängt an id + Text-Fingerabdruck, nicht am Namen). Kein Stift an mitgelieferten Zeilen; renameDoc() prüft es selbst. Löschen bleibt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
4e200e4d9b
commit
ca4c6f98d8
@@ -19,6 +19,7 @@ reverse.
|
|||||||
|
|
||||||
## 2026-08-27
|
## 2026-08-27
|
||||||
|
|
||||||
|
- Shipped documents are no longer renamable — their name is part of the delivered state, and a renamed but unedited example would still silently receive new versions
|
||||||
- Fix: sharing from an instance without its own backend (GitHub Pages) failed with HTTP 405 — the share button now probes the default address and asks for the server instead
|
- Fix: sharing from an instance without its own backend (GitHub Pages) failed with HTTP 405 — the share button now probes the default address and asks for the server instead
|
||||||
|
|
||||||
## 2026-08-26
|
## 2026-08-26
|
||||||
|
|||||||
@@ -7053,3 +7053,34 @@ steht da, und Löschen fragt nach); Wiederherstellen wirkt nur noch über den
|
|||||||
`restoreDoc()` prüft das selbst (`d.id !== activeId` → nichts), statt sich
|
`restoreDoc()` prüft das selbst (`d.id !== activeId` → nichts), statt sich
|
||||||
auf den Aufrufer zu verlassen. Der D81-Haupttext oben beschreibt insoweit
|
auf den Aufrufer zu verlassen. Der D81-Haupttext oben beschreibt insoweit
|
||||||
den Zwischenstand von einem Tag.
|
den Zwischenstand von einem Tag.
|
||||||
|
|
||||||
|
**Nachtrag 3 — mitgelieferte Dokumente sind nicht mehr umbenennbar.**
|
||||||
|
Nutzer-Einwand samt Verdacht, das Umbenennen mache „Probleme beim Neuladen".
|
||||||
|
Die Prüfung ergab: Es bricht nichts — und genau das ist das Problem. Das
|
||||||
|
Nachziehen neuer Fassungen (D27) hängt an **id und Text-Fingerabdruck**, der
|
||||||
|
Name spielt keine Rolle: Ein umbenanntes, aber textlich unverändertes
|
||||||
|
Beispiel bekäme beim nächsten Laden weiter still die neue Fassung — ein
|
||||||
|
Dokument, das der Nutzer per Umbenennung gedanklich zu seinem gemacht hat,
|
||||||
|
tauschte ohne Vorwarnung den Inhalt. Dazu zwei Merkwürdigkeiten derselben
|
||||||
|
Wurzel: Bloßes Umbenennen aktivierte den Neu-laden-Knopf (der Vergleich
|
||||||
|
prüft Text UND Name), und Wiederherstellen setzte den Namen kommentarlos mit
|
||||||
|
zurück; und die Menü-Gruppe „Mitgeliefert" zeigte einen fremden Namen, denn
|
||||||
|
die Gruppierung läuft über die id.
|
||||||
|
|
||||||
|
**Entschieden: kein Stift an mitgelieferten Zeilen**, und `renameDoc()`
|
||||||
|
prüft es selbst statt sich auf das ausgeblendete Symbol zu verlassen. Der
|
||||||
|
Name gehört bei mitgelieferten Dokumenten zum **Auslieferungsstand** — er
|
||||||
|
wird beim Wiederherstellen mitgestellt und beim Vergleich mitgeprüft; dann
|
||||||
|
darf er auch nicht separat editierbar sein. **Löschen bleibt** je Zeile: Das
|
||||||
|
ist eine andere Aussage („will ich nicht haben"), und das Nachziehen
|
||||||
|
respektiert sie längst (gelöscht bleibt gelöscht, D27).
|
||||||
|
|
||||||
|
Das ist eine **bewusste Abkehr** von der D22/D27-Linie „Dokumentnamen sind
|
||||||
|
Nutzerdaten, eine Umbenennung bleibt stehen" — für genau diese zwei
|
||||||
|
Dokumente, deren Name eben keine Nutzerdaten ist, sondern Teil der
|
||||||
|
Auslieferung. Die Bestandsregeln (Adoption, Namensfix „Werkbank", Umbenennung
|
||||||
|
überlebt das Nachziehen) bleiben unangetastet: Wer früher umbenannt hat,
|
||||||
|
behält seinen Namen; nur das UI bietet es nicht mehr an. Wer das Beispiel
|
||||||
|
als Basis für einen eigenen Plan will, ändert den Text (dann stoppt das
|
||||||
|
Nachziehen ohnehin) oder legt ein eigenes Dokument an; ein „Duplizieren" im
|
||||||
|
Menü wäre die saubere Antwort darauf, ist aber ein eigenes Feature.
|
||||||
|
|||||||
@@ -532,7 +532,8 @@
|
|||||||
|
|
||||||
#ed.docs.picker
|
#ed.docs.picker
|
||||||
The app header reads "Werkbaum > name": the chip opens the menu, grouped by
|
The app header reads "Werkbaum > name": the chip opens the menu, grouped by
|
||||||
kind (shipped, yours, sources), with rename and delete on each row. Restore
|
kind (shipped, yours, sources), with rename and delete on each row (shipped
|
||||||
|
ones keep their delivered name). Restore
|
||||||
lives on the editor title bar's reload button instead, acting only on the
|
lives on the editor title bar's reload button instead, acting only on the
|
||||||
open document. The menu scrolls as a whole instead of being cut off on
|
open document. The menu scrolls as a whole instead of being cut off on
|
||||||
small screens, and on the phone it is reachable from both panes.
|
small screens, and on the phone it is reachable from both panes.
|
||||||
|
|||||||
@@ -158,6 +158,11 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
|
|||||||
docurl.js, headless getestet) und trägt Umbenennen/Löschen als Symbole
|
docurl.js, headless getestet) und trägt Umbenennen/Löschen als Symbole
|
||||||
**je Zeile** — `renameDoc/deleteDoc` nehmen deshalb eine **id**, nicht das
|
**je Zeile** — `renameDoc/deleteDoc` nehmen deshalb eine **id**, nicht das
|
||||||
aktive Dokument, und Verwaltungs-Aktionen lassen das Menü offen.
|
aktive Dokument, und Verwaltungs-Aktionen lassen das Menü offen.
|
||||||
|
**Mitgelieferte Dokumente sind nicht umbenennbar** (D81-Nachtrag 3): kein
|
||||||
|
Stift an ihrer Zeile, und `renameDoc()` prüft es selbst — ihr Name ist
|
||||||
|
Auslieferungsstand (Restore stellt ihn wieder her), und ein umbenanntes,
|
||||||
|
unverändertes Beispiel bekäme weiter still neue Fassungen (das Nachziehen
|
||||||
|
hängt an id + Text-Fingerabdruck, nicht am Namen).
|
||||||
Wiederherstellen gibt es im Menü bewusst **nicht** (D81-Nachtrag 2): Es
|
Wiederherstellen gibt es im Menü bewusst **nicht** (D81-Nachtrag 2): Es
|
||||||
läuft über den Neu-laden-Knopf der Titelzeile und wirkt nur auf das
|
läuft über den Neu-laden-Knopf der Titelzeile und wirkt nur auf das
|
||||||
geöffnete Dokument — `restoreDoc()` prüft das selbst. Die Editor-Titelzeile heißt wieder „Text-Editor" und trägt die
|
geöffnete Dokument — `restoreDoc()` prüft das selbst. Die Editor-Titelzeile heißt wieder „Text-Editor" und trägt die
|
||||||
|
|||||||
+12
-6
@@ -3577,11 +3577,14 @@ const IC_RENAME = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" st
|
|||||||
const IC_DELETE = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/></svg>';
|
const IC_DELETE = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/></svg>';
|
||||||
/* Eine Menüzeile: Wählen-Knopf + Zeilen-Aktionen als GESCHWISTER — ein Knopf
|
/* Eine Menüzeile: Wählen-Knopf + Zeilen-Aktionen als GESCHWISTER — ein Knopf
|
||||||
im Knopf wäre ungültiges HTML. Die Aktionen sind immer sichtbar (Touch
|
im Knopf wäre ungültiges HTML. Die Aktionen sind immer sichtbar (Touch
|
||||||
kennt kein Hover): Umbenennen und Löschen, beides überall. Wiederherstellen
|
kennt kein Hover): Löschen überall, Umbenennen nur bei NICHT
|
||||||
gibt es hier bewusst NICHT (D81-Nachtrag 2): Es wirkt über den
|
mitgelieferten Dokumenten (D81-Nachtrag 3) — der Name gehört dort zum
|
||||||
Neu-laden-Knopf der Editor-Titelzeile nur auf das geöffnete Dokument —
|
Auslieferungsstand, und ein umbenanntes, aber unverändertes Beispiel
|
||||||
ein ungeöffnetes zurückzusetzen, ohne zu sehen, was man verwirft, ergäbe
|
bekäme weiter still neue Fassungen nachgezogen (das Nachziehen hängt an id
|
||||||
keinen Sinn. */
|
und Text-Fingerabdruck, D27). Wiederherstellen gibt es hier ebenfalls
|
||||||
|
NICHT (D81-Nachtrag 2): Es wirkt über den Neu-laden-Knopf der
|
||||||
|
Editor-Titelzeile nur auf das geöffnete Dokument — ein ungeöffnetes
|
||||||
|
zurückzusetzen, ohne zu sehen, was man verwirft, ergäbe keinen Sinn. */
|
||||||
function docRowHtml(d){
|
function docRowHtml(d){
|
||||||
if(d.id === renamingId){
|
if(d.id === renamingId){
|
||||||
/* Inline-Umbenennen direkt im Menü (kein window.prompt — das ist in
|
/* Inline-Umbenennen direkt im Menü (kein window.prompt — das ist in
|
||||||
@@ -3604,7 +3607,7 @@ function docRowHtml(d){
|
|||||||
`<span class="doccheck" aria-hidden="true">✓</span>` +
|
`<span class="doccheck" aria-hidden="true">✓</span>` +
|
||||||
`<span class="docitem-name">${esc(d.name)}</span>${zusatz}</button>` +
|
`<span class="docitem-name">${esc(d.name)}</span>${zusatz}</button>` +
|
||||||
`<span class="docacts">` +
|
`<span class="docacts">` +
|
||||||
iconBtn('rename', t('docRename'), IC_RENAME) +
|
(shippedStateOf(d.id) ? '' : iconBtn('rename', t('docRename'), IC_RENAME)) +
|
||||||
iconBtn('delete', t('docDelete'), IC_DELETE, ' docdelbtn') +
|
iconBtn('delete', t('docDelete'), IC_DELETE, ' docdelbtn') +
|
||||||
`</span></div>`;
|
`</span></div>`;
|
||||||
}
|
}
|
||||||
@@ -4089,6 +4092,9 @@ function finishNewDoc(){
|
|||||||
}
|
}
|
||||||
function renameDoc(id){
|
function renameDoc(id){
|
||||||
if(!docs.some(x => x.id === id)) return;
|
if(!docs.some(x => x.id === id)) return;
|
||||||
|
/* Mitgelieferte nicht (D81-Nachtrag 3): Ihr Name ist Auslieferungsstand.
|
||||||
|
Die Prüfung liegt hier, nicht nur am ausgeblendeten Stift. */
|
||||||
|
if(shippedStateOf(id)) return;
|
||||||
renamingId = id; /* Zeilen-Aktion (D81): jedes Dokument, nicht nur das aktive */
|
renamingId = id; /* Zeilen-Aktion (D81): jedes Dokument, nicht nur das aktive */
|
||||||
renameIsNew = false;
|
renameIsNew = false;
|
||||||
renderDocMenu();
|
renderDocMenu();
|
||||||
|
|||||||
Reference in New Issue
Block a user