From 1cce5ec492ed19cc89477a8417f7c37bca50a4da Mon Sep 17 00:00:00 2001 From: DeeCee03 Date: Fri, 7 Aug 2026 17:36:54 +0200 Subject: [PATCH] Slides lassen sich anlegen, kopieren, loeschen und umsortieren MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wie viele Slides ein Post hat, stand bisher im Code. SLIDES war ein festes Array, der Stand speicherte nur Einstellungen dazu, und die durchgehende Flaeche lag als 5400 px in der CSS. Jetzt entsteht SLIDES aus einem Deck. Jeder Eintrag ist entweder eine mitgelieferte Vorlage (ref) oder eine selbst angelegte Slide; eigene Texte liegen als Ueberschreibung daneben. Fuer Vorlagen wandert damit nur ein Verweis in den Stand, keine Kopie -- eine Aenderung an der Vorlage im Code kommt weiterhin bei allen an, die sie nicht angefasst haben. Haette man die Slides vollstaendig in den Stand geschrieben, waeren sie dort eingefroren. Unter der Slide-Auswahl stehen vier Knoepfe: neu, kopieren, loeschen, verschieben. Die Felder pro Slide (Verschiebungen, Muster, Layout) wandern im Gleichschritt mit. Bleibt eine einzige Slide uebrig, ist der Post ein Einzelbild: die Kopfzeile sagt es und der ZIP-Knopf verschwindet. Neu ist die Gruppe "Inhalt (nur diese Slide)" mit Tag, Ueberschrift, Fließtext und der Auswahl des Screenshots. Getippt wird Text, nicht Auszeichnung: *Wort* setzt den Akzent, ein Zeilenumbruch bricht die Zeile um. Gespeichert wird trotzdem fertiges Markup, weil die Vorlagen es so mitbringen. Beim Bildwechsel folgt das Rahmenformat dem Seitenverhaeltnis der Aufnahme, sonst stuende ein Hochformat in einem Querformat-Rahmen. Alle Screens werden vorgeladen, nicht nur die gerade benutzten -- ein Bild, das erst beim Auswaehlen geladen wuerde, fehlte im Export. Der Stand steht auf v6. Ein Stand ohne Deck stammt aus der Zeit fester fuenf Slides und behaelt die Vorlagen. Dabei abgesichert: Der Tastaturschutz rief e.target.matches auf. Ist nichts fokussiert, ist das Ziel das Dokument und hat kein matches. Seit der Neuaufbau den zuletzt fokussierten Knopf entfernt, ist das erreichbar. Geprueft mit 17 Faellen ueber das DevTools-Protokoll: anlegen, tippen, Screenshot tauschen, kopieren, schieben, loeschen, Neustart. Dazu ein Export einer selbst angelegten Slide und der volle Durchlauf der bestehenden elf. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 30 ++++- post1.html | 348 ++++++++++++++++++++++++++++++++++++++++++++++++++--- rules.md | 6 + 3 files changed, 368 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5312423..b2044ed 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,35 @@ Downloads landen direkt in `~/Downloads`, ohne Browser-Dialog. | Projekt | Datei | Inhalt | |---|---|---| -| Post 1 · Lösung | `post1.html` | Carousel, 5 Slides | +| Post 1 · Lösung | `post1.html` | Carousel, Anzahl frei | + +### Slides anlegen und wegnehmen + +Wie viele Slides ein Post hat, steht nicht fest. Unter der Slide-Auswahl: + +| Knopf | Wirkung | +|---|---| +| `+ Neu` | leere Slide dahinter einfügen | +| `Kopie` | die gewählte Slide samt Text, Bild und Verschiebungen verdoppeln | +| `Löschen` | die gewählte Slide wegnehmen (die letzte bleibt stehen) | +| `←` `→` | eine Position nach vorn oder hinten | + +Bei einer einzigen Slide ist der Post ein **Einzelbild** — die Kopfzeile sagt +es, und der ZIP-Knopf verschwindet. + +Unter **Inhalt (nur diese Slide)** stehen Tag, Überschrift, Fließtext und die +Auswahl des Screenshots. Getippt wird Text, keine Auszeichnung: `*Wort*` setzt +den Akzent, ein Zeilenumbruch bricht die Zeile um. Das Rahmenformat folgt beim +Wechsel automatisch dem Seitenverhältnis der gewählten Aufnahme. + +> Die Tags sind gestalterisch ausgeblendet (`visibility: hidden` auf `.badge`). +> Der eingetippte Tag beschriftet deshalb vorerst nur den Slide-Knopf im +> Bedienfeld. + +**Mitgelieferte Slides bleiben Vorlagen.** Der Stand speichert für sie nur +einen Verweis und die Felder, die du überschrieben hast — eine Änderung an der +Vorlage im Code kommt dadurch weiterhin bei allen an, die sie nicht angefasst +haben. Selbst angelegte Slides stehen vollständig im Stand. **Das Projekt speichert seinen Stand** — Einstellungen, Layouts, Muster und alle Verschiebungen aus dem Canvas überleben einen Reload. „Projekt diff --git a/post1.html b/post1.html index d1a9f7d..ea43f1d 100644 --- a/post1.html +++ b/post1.html @@ -33,6 +33,22 @@ height: 100vh; overflow: hidden; display: flex; } + /* Inhaltsfelder der gewaehlten Slide. Eine Spalte, damit lange Texte nicht + in einer schmalen Zelle kleben. */ + #inhalt { display: flex; flex-direction: column; gap: 4px; } + .inh-label { font-size: 11px; color: #8A8F9B; letter-spacing: .04em; margin-top: 4px; } + #inhalt input, #inhalt textarea, #inhalt select { + width: 100%; box-sizing: border-box; + background: #22242C; color: #D6DAE3; border: 1px solid #2E313B; + border-radius: 7px; padding: 7px 8px; + font-family: inherit; font-size: 12px; line-height: 1.45; + } + #inhalt textarea { resize: vertical; min-height: 46px; } + #inhalt input:focus, #inhalt textarea:focus, #inhalt select:focus { + outline: none; border-color: var(--accent-yellow); + } + #slide-ops button { flex: none; padding: 8px 10px; } + .saved { font-size: 11px; color: #6FCF97; opacity: 0; transition: opacity .2s; margin-left: 6px; @@ -314,14 +330,14 @@ } /* ─── Durchgehendes Carousel ────────────────────────────────────────────── - Der Post ist ein einziges 5400 x 1350 grosses Blatt, das in fünf 1080er - Fenster geschnitten wird. Jede Slide zeigt ihren Ausschnitt, indem die + Der Post ist ein einziges durchgehendes Blatt, das in 1080er Fenster + geschnitten wird. Seine Breite folgt der Anzahl der Slides (--sheet-w). Jede Slide zeigt ihren Ausschnitt, indem die Ebene um index * 1080 nach links verschoben wird. Elemente auf den Nähten werden dadurch zerschnitten und laufen auf der nächsten Slide weiter. */ .continuum { position: absolute; top: 0; height: 100%; left: calc(var(--slide-i, 0) * -1080px); - width: 5400px; + width: var(--sheet-w, 5400px); pointer-events: none; opacity: var(--int-mul, 1); } @@ -340,7 +356,7 @@ } /* Ein Band über die volle Breite: die Klammer, die alle fünf zusammenhält. */ .ct-band { - left: 0; width: 5400px; height: 54px; bottom: 96px; + left: 0; width: var(--sheet-w, 5400px); height: 54px; bottom: 96px; background: var(--shape-line); } .ct-g { color: var(--gmark-color); } @@ -409,7 +425,7 @@ .sheet { position: absolute; top: 0; height: 100%; left: calc(var(--slide-i, 0) * -1080px); - width: 5400px; z-index: 1; + width: var(--sheet-w, 5400px); z-index: 1; } .page { position: absolute; top: 0; width: 1080px; height: 1350px; } @@ -768,13 +784,25 @@