]> juplo.de Git - maven-thymeleaf-skin/commitdiff
import-in-astro.sh: Nav-Stubs für Seiten mit mehreren Elternteilen
authorKai Moritz <kai.milan.moritz@googlemail.com>
Thu, 18 Jun 2026 22:33:07 +0000 (22:33 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Thu, 18 Jun 2026 22:33:07 +0000 (22:33 +0000)
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 <noreply@anthropic.com>
CLAUDE.md
src/main/resources/import-in-astro.sh

index 94a2d4af9f2fd373d919207ddc4c9b5ef868b170..2d0187b09b9c09443f73d2716d5fb054b2648f40 100644 (file)
--- 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 `<link rel="canonical">`).
+- **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.
index f0aac3feeabd5e9bc7db8b00b84321e6de15e7a9..667d99edebb24ae29b90ed5f91a6fe6fe68c54b9 100755 (executable)
@@ -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"