From 0a403679e37baa7e199d851ae5df895cac3cee36 Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 8 May 2026 17:51:42 +0200 Subject: [PATCH] =?UTF-8?q?Phase=209a:=20Card-Edit-Page=20f=C3=BCr=20alle?= =?UTF-8?q?=203=20CardTypes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Route /cards/[id]/edit. Lädt die Karte, zeigt typ-spezifisches Form (basic/basic-reverse: front+back, cloze: text+extra mit Cluster-Counter und Live-Preview), PATCHt die fields. CardType ist read-only — Type-Wechsel würde die Reviews-Tabelle brechen. Cloze-Editor zeigt erkannte Cluster-IDs ("c1, c2 → 2 Reviews") und warnt, wenn Text ohne {{cN::…}}-Markup gespeichert würde. Live- Vorschau rendert den Prompt mit dem ersten Cluster maskiert. Decks-Detail-Page: Karten-Eintrag verlinkt jetzt aufs Edit, Cloze- Karten zeigen ihren `text`-Anschnitt statt "(leer) → (leer)". Delete- Button bleibt am rechten Rand. svelte-check 354 files 0 errors. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/routes/cards/[id]/edit/+page.svelte | 236 ++++++++++++++++++ apps/web/src/routes/decks/[id]/+page.svelte | 15 +- 2 files changed, 247 insertions(+), 4 deletions(-) create mode 100644 apps/web/src/routes/cards/[id]/edit/+page.svelte diff --git a/apps/web/src/routes/cards/[id]/edit/+page.svelte b/apps/web/src/routes/cards/[id]/edit/+page.svelte new file mode 100644 index 0000000..ea10954 --- /dev/null +++ b/apps/web/src/routes/cards/[id]/edit/+page.svelte @@ -0,0 +1,236 @@ + + + + Karte bearbeiten · Cards + + +
+ {#if loading} +

Lade…

+ {:else if error} +

Fehler: {error}

+ {:else if card} + ← Zurück zum Deck +
+

Karte bearbeiten

+ + {cardType} + +
+

+ Der Card-Type kann nicht geändert werden — die Reviews-Tabelle hängt am Type. +

+ +
+ {#if cardType === 'cloze'} +
+ +

+ {'{{c1::Antwort}}'} definiert eine Lücke. Pro Cluster-ID + (c1, c2, …) entsteht ein eigenes Review. +

+ {#if text.trim() && clusterIds.length === 0} +

+ Mindestens ein {'{{cN::…}}'}-Cluster wird gebraucht. +

+ {:else if clusterIds.length > 0} +

+ {clusterIds.length} Cluster erkannt: c{clusterIds.join(', c')} → {clusterIds.length} + Reviews. +

+ {/if} +
+ + {#if clozePreviewHtml} +
+
+ Vorschau (c{clusterIds[0]} maskiert) +
+
{@html clozePreviewHtml}
+
+ {/if} + + + {:else} +
+
+ + {#if front.trim()} +
+
Vorschau
+
{@html frontHtml}
+
+ {/if} +
+
+ + {#if back.trim()} +
+
Vorschau
+
{@html backHtml}
+
+ {/if} +
+
+ {/if} + +
+
+ + Abbrechen +
+ +
+
+ {/if} +
diff --git a/apps/web/src/routes/decks/[id]/+page.svelte b/apps/web/src/routes/decks/[id]/+page.svelte index 2ba9a8f..e2feb20 100644 --- a/apps/web/src/routes/decks/[id]/+page.svelte +++ b/apps/web/src/routes/decks/[id]/+page.svelte @@ -121,17 +121,24 @@