From: Kai Moritz Date: Thu, 18 Jun 2026 22:33:07 +0000 (+0000) Subject: import-in-astro.sh: Nav-Stubs für Seiten mit mehreren Elternteilen X-Git-Url: http://juplo.de/gitweb/?a=commitdiff_plain;h=0cd770c0c2afacffa5af07261421abe7abf6f280;p=maven-thymeleaf-skin import-in-astro.sh: Nav-Stubs für Seiten mit mehreren Elternteilen Wenn eine Seite in stili-json in mehreren childs-Listen auftaucht (z.B. *-mojo.html sowohl in plugin-info.html.childs als auch in index.html.childs), wurde bisher nur der kanonische Ort (aus crumbs/path) berücksichtigt. Das Skript erstellt jetzt zusätzlich leere Stub-Content-Dateien an allen nicht-kanonischen Positionen im Verzeichnisbaum. Die Stubs haben denselben Frontmatter wie die kanonische Datei (inkl. url), aber keinen Body und keine Routing-Datei. Dadurch erscheint die Seite an mehreren Stellen im Nav-Baum des Renderers, wobei alle Links auf dieselbe URL zeigen. CLAUDE.md dokumentiert das Konzept inkl. Beispiel. Co-Authored-By: Claude Sonnet 4.6 --- diff --git a/CLAUDE.md b/CLAUDE.md index 94a2d4a..2d0187b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -30,6 +30,24 @@ Das Projekt verwendet den **Maven Wrapper** (`mvnw` / `mvnw.cmd`), der Maven aut - `mvnw` — Unix-Startskript (Apache Maven Wrapper 3.3.2) - `mvnw.cmd` — Windows-Startskript (Apache Maven Wrapper 3.3.2) +## Multi-Parent-Einträge im Navigationsmenü (`import-in-astro.sh`) + +Eine Seite kann in `stili-json` in mehreren `childs`-Listen gleichzeitig auftauchen — z.B. erscheinen Mojo-Seiten eines Maven-Plugins sowohl in `plugin-info.html.childs` (ihre kanonische Position) als auch in `index.html.childs` (als Direktzugang von der Startseite). + +Das Import-Skript unterscheidet: + +- **Kanonischer Ort** — bestimmt durch `crumbs`/`path` der Seite. Hier entsteht die vollständige Content-Datei mit Body sowie die zugehörige Routing-Datei. Die `url` dieser Datei ist maßgeblich (z.B. für ``). +- **Stub-Datei** — für jeden weiteren Elternteil (dessen `childs` die Seite enthält, der aber nicht dem kanonischen Elternteil entspricht) wird eine zusätzliche Content-Datei am entsprechenden Ort im Verzeichnisbaum angelegt. Der Stub enthält denselben Frontmatter (Titel, URL, Weight, Params), aber einen leeren Body und **keine** eigene Routing-Datei. + +Beide Dateien haben dieselbe `url` — Nav-Links an beiden Positionen zeigen also auf dieselbe Seite. Die Nav-Logik des Renderers (Astro: `buildNavTree`) zeigt die Seite an beiden Stellen im Menü. + +**Beispiel** `create-mojo.html` (hibernate-maven-plugin): + +| Datei | Typ | Grund | +|---|---|---| +| `project-reports/plugin-info/create-mojo.html` | Kanonisch (mit Body + Routing) | `crumbs: ["project-reports.html", "plugin-info.html"]` | +| `create-mojo.html` (root-Ebene) | Stub (kein Body, kein Routing) | auch in `index.html.childs` | + ## Maven-Site-Dokumentation neu generieren Die Markdown-Dateien unter `src/site/markdown/` sind aus README.md abgeleitet und werden **manuell auf Anforderung** neu generiert. diff --git a/src/main/resources/import-in-astro.sh b/src/main/resources/import-in-astro.sh index f0aac3f..667d99e 100755 --- a/src/main/resources/import-in-astro.sh +++ b/src/main/resources/import-in-astro.sh @@ -216,6 +216,46 @@ for SOURCE in $(find "$SCRIPT_DIR" -maxdepth 1 -mindepth 1 -type f -name '*.html } > "$ROUTING_TARGET" echo "Routing: $ROUTING_TARGET" + + # Create nav stubs for pages that appear in multiple childs lists. + # The canonical location comes from crumbs/path; extra parents get empty-body stubs + # at their child path so the page appears in multiple places in the nav tree. + if [[ "$FILE" != "index.html" ]]; then + CRUMBS_LENGTH=$(echo "$PAGE" | jq '.crumbs | length') + if [[ "$CRUMBS_LENGTH" -gt 0 ]]; then + CANONICAL_PARENT=$(echo "$PAGE" | jq -r '.crumbs[-1]') + else + CANONICAL_PARENT="index.html" + fi + while IFS= read -r EXTRA_PARENT_HREF; do + [[ -z "$EXTRA_PARENT_HREF" ]] && continue + EXTRA_PARENT_PAGE=$(echo "$JSON" | jq --arg href "$EXTRA_PARENT_HREF" '.pages[] | select(.href == $href)') + EXTRA_PARENT_PATH=$(echo "$EXTRA_PARENT_PAGE" | jq -r '.path') + if [[ "$EXTRA_PARENT_HREF" == "index.html" ]]; then + STUB_PREFIX="" + else + EXTRA_HREF_NOEXT="${EXTRA_PARENT_HREF%.html}" + [[ -n "$EXTRA_PARENT_PATH" && "${EXTRA_PARENT_PATH: -1}" != "/" ]] && EXTRA_PARENT_PATH="${EXTRA_PARENT_PATH}/" + STUB_PREFIX="${EXTRA_PARENT_PATH}${EXTRA_HREF_NOEXT}/" + fi + STUB_CONTENT_REL="${STUB_PREFIX}${FILE}" + [[ "$STUB_CONTENT_REL" == "$CONTENT_REL" ]] && continue + STUB_CONTENT_TARGET="$CONTENT_BASE/$STUB_CONTENT_REL" + mkdir -p "$(dirname "$STUB_CONTENT_TARGET")" + { + echo "---" + echo "title: $TITLE_YAML" + echo "weight: $WEIGHT" + echo "url: $PAGE_URL" + echo "params:" + echo " current: $CURRENT_BOOL" + [[ "$CURRENT_BOOL" == "false" ]] && echo " canonical: $CANONICAL_URL" + echo "---" + } > "$STUB_CONTENT_TARGET" + echo "Stub: $STUB_CONTENT_TARGET" + done < <(echo "$JSON" | jq -r --arg file "$FILE" --arg canonical "$CANONICAL_PARENT" \ + '.pages[] | select(.childs | contains([$file])) | select(.href != $canonical) | .href') + fi done mkdir -p "$PUBLIC_BASE"