From 83a7f519264aa93465361e381dacac55cf21b54a Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sun, 14 Jun 2026 08:58:04 +0000 Subject: [PATCH] CLAUDE.md: BlogNav off-Logik und About-Navigation-Status aktualisiert off-Klassen-Abschnitt: Herleitung jetzt korrekt aus Hugo-Template-Quellen (frontend-Branch) dokumentiert statt aus HTML-Output-Analyse. Standalone-Seiten-Abschnitt: Status von "offener Punkt" auf "implementiert via BlogNav" aktualisiert; nur Projects-Baum fehlt noch. Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9c6797fa..445af951 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -170,11 +170,21 @@ Quelle: https://docs.astro.build/en/guides/rss/ **Was:** `BlogNav.astro` berechnet den Navigationszustand vollständig in TypeScript-Variablen (`onBlog`, `onArchive`, `onCategoriesIndex`, `onCategoryTerm`, etc.) und rendert das HTML anhand dieser Flags. -**Warum:** Hugo's `menu/tree.html` ist ein rekursives Partial, das den Baum traversiert und dabei Hugo-interne Konzepte wie `.IsDescendant`, `.Ancestors`, `.Eq` nutzt. Diese existieren in Astro nicht. Statt einer allgemeinen Lösung wurde für den Blog-Ast (der einzige aktuell implementierte Ast) eine explizite State-Machine gewählt, die die konkreten Seitentypen des Blogs kennt und die entsprechenden CSS-Klassen (`off`, `sub`, `selected`, `active`) direkt ableitet. +**Warum:** Hugo's `menu/tree.html` ist ein rekursives Partial, das den Baum traversiert und dabei Hugo-interne Konzepte wie `.IsDescendant`, `.Ancestors`, `.Eq` nutzt. Diese existieren in Astro nicht. Statt einer allgemeinen Lösung wurde eine explizite State-Machine gewählt, die die konkreten Seitentypen kennt und die CSS-Klassen (`off`, `sub`, `selected`, `active`) direkt ableitet. -**Entscheidungsgrundlage:** Die `off`-Klassen wurden durch Analyse des Hugo-HTML-Outputs für alle relevanten Seitentypen ermittelt (Homepage, `/blog/`, Archiv-Seiten, Jahres-Seiten, Blog-Posts, Categories/Tags-Index, Categories/Tags-Term). +**Wichtige Regel:** `#submenu li.s.off { display: none }` (Classic-Layout). Ein `ul.s` ohne `active` blendet sich nicht selbst aus — nur `li.s.nav-leaf` und `li.s.off` sind hidden. -**Wichtige Regel:** Ein `li.s.off`-Element ist via CSS (`#submenu li.s.off { display: none }`) ausgeblendet. Ein `ul.s` (ohne `active`) blendet sich selbst nicht aus — nur `li.s.nav-leaf` und `li.s.off` sind hidden. Diese CSS-Regel war entscheidend für die korrekte Implementierung der Navigation. +**`off`-Klassen-Logik** (aus Hugo-Template-Quellen im `frontend`-Branch hergeleitet): + +Hugo verwendet zwei verschiedene Menü-Templates: +- `layouts/_partials/menu/blog.html` — für Blog-Seiten: Blog immer sichtbar, alle anderen Sections immer `off` +- `layouts/_partials/menu/default.html` + `tree.html` — für alle anderen Seiten: Section-Index-Seiten (`IsNode=true`) blenden alle anderen Sections aus; auf der Homepage und regulären Root-Seiten (Impressum, Datenschutz) sind alle Sections sichtbar (Kind- bzw. Geschwister-Logik in `tree.html`) + +Daraus ergibt sich für `BlogNav.astro`: +- `blogSectionOff = onAbout` — Blog im Submenu hidden nur auf `/about.html` (Section-Index) +- `aboutOff = blogSelected` — About im Submenu hidden nur auf Blog-Seiten + +Wenn Projects implementiert wird: `blogSectionOff |= onProjects`, `aboutOff |= onProjects`. --- @@ -210,13 +220,11 @@ Quelle: https://docs.astro.build/en/guides/rss/ --- -#### Standalone-Seiten ohne Navigation (Offener Punkt) - -**Was:** Die Seiten `about.html`, `impressum.html` und `datenschutz.html` haben keinen `menu`-Slot befüllt und zeigen daher keine Seitennavigation. +#### Standalone-Seiten: Navigation über BlogNav -**Warum:** Hugo zeigt auf Standalone-Seiten eine vollständige Site-Navigation (Blog-Baum + Projects-Baum + About-Baum). Die Implementierung dafür würde eine `SiteNav`-Komponente erfordern, die alle Sektionen kennt — inklusive der Projects-Seiten mit deren `current`-Flag-Logik. Das ist deutlich aufwendiger als `BlogNav` und wurde für die Migration zurückgestellt. +**Was:** Die Seiten `about.html`, `impressum.html` und `datenschutz.html` nutzen `BlogNav.astro` im `menu`-Slot. Der About-Eintrag im Submenu zeigt sich korrekt als ausgewählt auf `/about.html` und als sichtbar (ohne `off`) auf Impressum/Datenschutz. -**Zukünftige Aufgabe:** Eine `SiteNav.astro`-Komponente, die alle Hauptsektionen rendert und die `menu/tree.html`-Logik für Projects (only show `current: true` pages unless on path) repliziert. +**Offener Punkt — Projects-Baum:** Hugo zeigt auf allen Seiten auch den Projects-Baum im Submenu (mit spezieller `current`-Flag-Logik für Projektversionen, aus `menu/tree.html`). Dieser fehlt noch. Sobald Projects implementiert wird, muss `BlogNav.astro` um den Projects-Ast erweitert werden (oder die Komponente wird in `SiteNav.astro` umbenannt). --- -- 2.39.5