From 6505f949f82d234da6b350b290a04b2b0bcb9d0f Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sun, 5 Jul 2026 17:56:45 +0000 Subject: [PATCH] =?utf8?q?rename=20BlogNav.astro=20=E2=86=92=20SitemapNav.?= =?utf8?q?astro?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Die Komponente verwaltet die Navigation für alle drei Hauptbereiche (Blog, Projects, About) — nicht nur den Blog. Der neue Name spiegelt den tatsächlichen Zweck als seitenweite Sitemap-Navigation wider. Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 16 ++++++++-------- src/components/ProjectPage.astro | 4 ++-- .../{BlogNav.astro => SitemapNav.astro} | 0 src/pages/[slug].astro | 4 ++-- src/pages/about.html.astro | 4 ++-- src/pages/agb.html.astro | 4 ++-- src/pages/blog/archive/[year].astro | 4 ++-- src/pages/blog/archive/index.astro | 4 ++-- src/pages/blog/categories/index.astro | 4 ++-- src/pages/blog/index.astro | 4 ++-- src/pages/blog/tags/index.astro | 4 ++-- src/pages/categories/[term].astro | 4 ++-- src/pages/contact.html.astro | 4 ++-- src/pages/datenschutz.html.astro | 4 ++-- src/pages/google-analytics.html.astro | 4 ++-- src/pages/haftung-inhalte.html.astro | 4 ++-- src/pages/haftung-links.html.astro | 4 ++-- src/pages/impressum.html.astro | 4 ++-- src/pages/index.astro | 4 ++-- src/pages/projects/index.astro | 4 ++-- src/pages/tags/[term].astro | 4 ++-- src/pages/urheberrechte.html.astro | 4 ++-- 22 files changed, 48 insertions(+), 48 deletions(-) rename src/components/{BlogNav.astro => SitemapNav.astro} (100%) diff --git a/CLAUDE.md b/CLAUDE.md index 88e62686..b4ce2aa1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,7 +23,7 @@ src/ content/ blog/ ← Blog-Artikel als Markdown (Content Collection, glob-Loader) projects/ ← Projektdokumentation als HTML + YAML-Frontmatter (Custom Loader) - components/ ← Wiederverwendbare Astro-Komponenten (BlogNav.astro, ProjectPage.astro, …) + components/ ← Wiederverwendbare Astro-Komponenten (SitemapNav.astro, ProjectPage.astro, …) lib/ ← Shared TypeScript-Helpers (posts.ts, projects.ts) styles/ ← SCSS-Quellen public/ @@ -50,7 +50,7 @@ body └── footer#footer Copyright + Footer-Links ``` -Seiten befüllen die Slots mit ``. Den `menu`-Slot übernimmt immer `BlogNav.astro`. +Seiten befüllen die Slots mit ``. Den `menu`-Slot übernimmt immer `SitemapNav.astro`. --- @@ -85,9 +85,9 @@ Das Menü unter `nav#nav` ist bewusst am **Ende des HTML** platziert und dient p Ein `ul.s` ohne `active` blendet sich **nicht selbst** aus — nur `li.s.off` ist hidden. -### Implementierung: `BlogNav.astro` +### Implementierung: `SitemapNav.astro` -`BlogNav.astro` empfängt `currentUrl` als Parameter und berechnet daraus vollständig in TypeScript alle Navigationszustände (`onBlog`, `onArchive`, `onCategoriesIndex`, `onProjectsSection` etc.). Alle CSS-Klassen werden direkt aus diesen Variablen abgeleitet. Nie werden Items per `{condition &&
  • }` weggelassen — nur die `off`-Klasse steuert die Sichtbarkeit via CSS. +`SitemapNav.astro` empfängt `currentUrl` als Parameter und berechnet daraus vollständig in TypeScript alle Navigationszustände (`onBlog`, `onArchive`, `onCategoriesIndex`, `onProjectsSection` etc.). Alle CSS-Klassen werden direkt aus diesen Variablen abgeleitet. Nie werden Items per `{condition &&
  • }` weggelassen — nur die `off`-Klasse steuert die Sichtbarkeit via CSS. ### Section-`off`-Logik @@ -122,7 +122,7 @@ Dabei ist `isSibling` nur aktiv, wenn die aktuelle Seite kein Section-Index-Node ### About-Bereich: Seitenstruktur -Der About-Seitenbaum ist statisch in `BlogNav.astro` als TypeScript-Konstante (`NavPage[]`) definiert. Sortiert nach weight: +Der About-Seitenbaum ist statisch in `SitemapNav.astro` als TypeScript-Konstante (`NavPage[]`) definiert. Sortiert nach weight: ``` /about.html @@ -152,7 +152,7 @@ Der Projects-Bereich unterscheidet zwischen **sichtbaren** und **nicht sichtbare **Alias-Einträge (`params.alias: true`):** Seiten, die in `stili-json` in mehreren `childs`-Listen auftauchen, werden vom Import-Skript an mehreren Stellen im Content-Tree abgelegt. Die primäre Datei (kanonischer Ort, mit Body + Routing) folgt den `crumbs`/`path`-Feldern. Zusätzliche **Stub-Dateien** (leer, kein Routing) entstehen an den weiteren Positionen und erhalten `params.alias: true`. -In `BlogNav.astro` werden Alias-Nodes mit der CSS-Klasse `alias` versehen. In der `off`-Berechnung überspringen Alias-Nodes `isCurrent` und `isAncestor` — dadurch sind sie im Classic-Layout versteckt, wenn die Seite aktiv ist (der kanonische Eintrag übernimmt die Darstellung). Sichtbar sind sie als Geschwister (normale `isSibling`-Logik). +In `SitemapNav.astro` werden Alias-Nodes mit der CSS-Klasse `alias` versehen. In der `off`-Berechnung überspringen Alias-Nodes `isCurrent` und `isAncestor` — dadurch sind sie im Classic-Layout versteckt, wenn die Seite aktiv ist (der kanonische Eintrag übernimmt die Darstellung). Sichtbar sind sie als Geschwister (normale `isSibling`-Logik). Alias-Nodes erhalten zusätzlich einen Barrierefreiheits-Hinweis im Markup: ` (Schnellzugriff)` direkt nach dem Titel-Element (`` oder ``). Der Hinweis steht **außerhalb** von `` und ist damit nie fett — auch nicht wenn die Seite aktiv ist. Im Layout „None" (kein CSS) erscheint der Hinweis, damit Nutzende von Text-Browsern und Screen-Readern erkennen, dass dieser Eintrag ein Zusatzzugang zu einer auch anderswo gelisteten Seite ist. Im CSS (`base/navigation.scss`: `#submenu .alias-hint { display: none }`) wird er im Classic-Layout ausgeblendet (da `navigation.scss` unter `:root[data-layout="classic"]` eingebunden ist — siehe Abschnitt „CSS-Layouts" unten). Der kanonische Eintrag erhält keinen Hinweis. @@ -171,7 +171,7 @@ Alias-Nodes erhalten zusätzlich einen Barrierefreiheits-Hinweis im Markup: ` - + diff --git a/src/components/BlogNav.astro b/src/components/SitemapNav.astro similarity index 100% rename from src/components/BlogNav.astro rename to src/components/SitemapNav.astro diff --git a/src/pages/[slug].astro b/src/pages/[slug].astro index 147466cd..aad427fa 100644 --- a/src/pages/[slug].astro +++ b/src/pages/[slug].astro @@ -2,7 +2,7 @@ import { render } from 'astro:content'; import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import TaxonomyAside from '../components/TaxonomyAside.astro'; import { getAllPosts, postUrl as getPostUrl, getSummary } from '../lib/posts'; @@ -74,7 +74,7 @@ const dateDisplay = date.toLocaleDateString('en-US', { month: 'long', day: 'nume - + diff --git a/src/pages/about.html.astro b/src/pages/about.html.astro index 23920f6a..635ffa5c 100644 --- a/src/pages/about.html.astro +++ b/src/pages/about.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/about.html')!; @@ -58,7 +58,7 @@ const crumbs = [ - + diff --git a/src/pages/agb.html.astro b/src/pages/agb.html.astro index 1253ef18..46394619 100644 --- a/src/pages/agb.html.astro +++ b/src/pages/agb.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/agb.html')!; @@ -150,6 +150,6 @@ const crumbs = [ - + diff --git a/src/pages/blog/archive/[year].astro b/src/pages/blog/archive/[year].astro index 270f9823..be9d0bb3 100644 --- a/src/pages/blog/archive/[year].astro +++ b/src/pages/blog/archive/[year].astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../../../layouts/BaseLayout.astro'; import Breadcrumb from '../../../components/Breadcrumb.astro'; -import BlogNav from '../../../components/BlogNav.astro'; +import SitemapNav from '../../../components/SitemapNav.astro'; import { getAllPosts, postUrl, wordCount } from '../../../lib/posts'; export async function getStaticPaths() { @@ -62,6 +62,6 @@ const crumbs = [ - + diff --git a/src/pages/blog/archive/index.astro b/src/pages/blog/archive/index.astro index ac9dffd5..72e6917c 100644 --- a/src/pages/blog/archive/index.astro +++ b/src/pages/blog/archive/index.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../../../layouts/BaseLayout.astro'; import Breadcrumb from '../../../components/Breadcrumb.astro'; -import BlogNav from '../../../components/BlogNav.astro'; +import SitemapNav from '../../../components/SitemapNav.astro'; import { getAllPosts, postUrl, wordCount } from '../../../lib/posts'; const currentUrl = '/blog/archive/'; @@ -59,6 +59,6 @@ const crumbs = [ - + diff --git a/src/pages/blog/categories/index.astro b/src/pages/blog/categories/index.astro index 64d7e5f3..6c2e4b68 100644 --- a/src/pages/blog/categories/index.astro +++ b/src/pages/blog/categories/index.astro @@ -2,7 +2,7 @@ import { getCollection } from 'astro:content'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import Breadcrumb from '../../../components/Breadcrumb.astro'; -import BlogNav from '../../../components/BlogNav.astro'; +import SitemapNav from '../../../components/SitemapNav.astro'; const currentUrl = '/blog/categories/'; @@ -47,6 +47,6 @@ const crumbs = [ - + diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index cb2d7ae6..0e3ed5f8 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../../layouts/BaseLayout.astro'; import Breadcrumb from '../../components/Breadcrumb.astro'; -import BlogNav from '../../components/BlogNav.astro'; +import SitemapNav from '../../components/SitemapNav.astro'; import { getAllPosts, postUrl, getSummary, wordCount } from '../../lib/posts'; const currentUrl = '/blog/'; @@ -109,6 +109,6 @@ const crumbs = [ - + diff --git a/src/pages/blog/tags/index.astro b/src/pages/blog/tags/index.astro index 6a27f525..5c4d5570 100644 --- a/src/pages/blog/tags/index.astro +++ b/src/pages/blog/tags/index.astro @@ -2,7 +2,7 @@ import { getCollection } from 'astro:content'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import Breadcrumb from '../../../components/Breadcrumb.astro'; -import BlogNav from '../../../components/BlogNav.astro'; +import SitemapNav from '../../../components/SitemapNav.astro'; const currentUrl = '/blog/tags/'; @@ -47,6 +47,6 @@ const crumbs = [ - + diff --git a/src/pages/categories/[term].astro b/src/pages/categories/[term].astro index 9505e9ae..14acd16c 100644 --- a/src/pages/categories/[term].astro +++ b/src/pages/categories/[term].astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../../layouts/BaseLayout.astro'; import Breadcrumb from '../../components/Breadcrumb.astro'; -import BlogNav from '../../components/BlogNav.astro'; +import SitemapNav from '../../components/SitemapNav.astro'; import { getAllPosts, postUrl, wordCount } from '../../lib/posts'; export async function getStaticPaths() { @@ -78,6 +78,6 @@ const crumbs = [ - + diff --git a/src/pages/contact.html.astro b/src/pages/contact.html.astro index 7cc610df..658a61a1 100644 --- a/src/pages/contact.html.astro +++ b/src/pages/contact.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/contact.html')!; @@ -44,6 +44,6 @@ const crumbs = [ - + diff --git a/src/pages/datenschutz.html.astro b/src/pages/datenschutz.html.astro index 25a87a30..89e89b89 100644 --- a/src/pages/datenschutz.html.astro +++ b/src/pages/datenschutz.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/datenschutz.html')!; @@ -107,7 +107,7 @@ const crumbs = [ - + diff --git a/src/pages/google-analytics.html.astro b/src/pages/google-analytics.html.astro index d505cd43..fa577b89 100644 --- a/src/pages/google-analytics.html.astro +++ b/src/pages/google-analytics.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/google-analytics.html')!; @@ -50,6 +50,6 @@ const crumbs = [ - + diff --git a/src/pages/haftung-inhalte.html.astro b/src/pages/haftung-inhalte.html.astro index 04bb17ec..7fae5a78 100644 --- a/src/pages/haftung-inhalte.html.astro +++ b/src/pages/haftung-inhalte.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/haftung-inhalte.html')!; @@ -33,6 +33,6 @@ const crumbs = [ - + diff --git a/src/pages/haftung-links.html.astro b/src/pages/haftung-links.html.astro index 2b77c912..1dbc88af 100644 --- a/src/pages/haftung-links.html.astro +++ b/src/pages/haftung-links.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/haftung-links.html')!; @@ -31,6 +31,6 @@ const crumbs = [ - + diff --git a/src/pages/impressum.html.astro b/src/pages/impressum.html.astro index b78e652f..e0550535 100644 --- a/src/pages/impressum.html.astro +++ b/src/pages/impressum.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/impressum.html')!; @@ -40,7 +40,7 @@ const crumbs = [ - + diff --git a/src/pages/index.astro b/src/pages/index.astro index 8d49bc90..9eb13e34 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,6 +1,6 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { getAllPosts, postUrl } from '../lib/posts'; const currentUrl = '/'; @@ -55,6 +55,6 @@ const recentPosts = (await getAllPosts()).slice(0, 5); - + diff --git a/src/pages/projects/index.astro b/src/pages/projects/index.astro index e7930bb6..978332f4 100644 --- a/src/pages/projects/index.astro +++ b/src/pages/projects/index.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../../layouts/BaseLayout.astro'; import Breadcrumb from '../../components/Breadcrumb.astro'; -import BlogNav from '../../components/BlogNav.astro'; +import SitemapNav from '../../components/SitemapNav.astro'; import { getVisibleProjectNavTrees } from '../../lib/projects'; const projects = await getVisibleProjectNavTrees(); @@ -26,6 +26,6 @@ const crumbs = [{ title: 'Home', url: '/' }, { title: 'Projects' }]; - + diff --git a/src/pages/tags/[term].astro b/src/pages/tags/[term].astro index e29b3bf0..29f942da 100644 --- a/src/pages/tags/[term].astro +++ b/src/pages/tags/[term].astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../../layouts/BaseLayout.astro'; import Breadcrumb from '../../components/Breadcrumb.astro'; -import BlogNav from '../../components/BlogNav.astro'; +import SitemapNav from '../../components/SitemapNav.astro'; import { getAllPosts, postUrl, wordCount } from '../../lib/posts'; export async function getStaticPaths() { @@ -78,6 +78,6 @@ const crumbs = [ - + diff --git a/src/pages/urheberrechte.html.astro b/src/pages/urheberrechte.html.astro index 8158ad93..550ee21b 100644 --- a/src/pages/urheberrechte.html.astro +++ b/src/pages/urheberrechte.html.astro @@ -1,7 +1,7 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import Breadcrumb from '../components/Breadcrumb.astro'; -import BlogNav from '../components/BlogNav.astro'; +import SitemapNav from '../components/SitemapNav.astro'; import { aboutSection, findAboutPath } from '../lib/about'; const _path = findAboutPath(aboutSection, '/urheberrechte.html')!; @@ -33,6 +33,6 @@ const crumbs = [ - + -- 2.39.5