feature: Wiki — verlinktes Werkstattwissen mit Gruppen-Navigation

Neue Hugo-Sektion /wiki als 'effektives Wiki' im KISS-Sinn:
- Zweispaltiges Layout: gruppierte Seitenleiste (nach Frontmatter 'group')
  mit Live-Filter + Inhalt mit TOC und 'zuletzt bearbeitet'/bearbeiten-Link
- Übersichtsseite gruppiert alle Einträge; WIKI im Hauptmenü
- Seiten ohne group landen unter 'Allgemein' (robust)
- Start-Inhalte: Meta-Seite (wie es funktioniert), Typus (→ Bibliothek),
  Dateiablage/Benennung; Archetype setzt group/summary
- Bewusst dateibasiert: jede Seite verlinkt zur Bearbeitung ins Repo

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 11:56:35 +02:00
parent 37fdc9019c
commit d9ba2f7bbe
10 changed files with 225 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
{{- /* Wiki-Seitenleiste: alle Wiki-Seiten nach `group` gruppiert, mit Filter.
Seiten ohne `group` landen unter „Allgemein“. */ -}}
{{- $cur := .RelPermalink -}}
{{- $pages := where site.RegularPages "Section" "wiki" -}}
{{- $groups := dict -}}
{{- range $pages -}}
{{- $g := .Params.group | default "Allgemein" -}}
{{- $existing := index $groups $g | default slice -}}
{{- $groups = merge $groups (dict $g ($existing | append .)) -}}
{{- end -}}
<nav class="wiki-nav" aria-label="Wiki-Navigation">
<a class="wiki-nav-home{{ if .IsSection }} is-current{{ end }}" href="/wiki/">Übersicht</a>
<input class="wiki-filter" type="search" placeholder="filtern…" aria-label="Wiki filtern" autocomplete="off" />
{{- range $g, $ps := $groups }}
<div class="wiki-nav-group">
<div class="wiki-nav-title">{{ $g }}</div>
<ul>
{{- range sort $ps "Title" }}
<li><a href="{{ .RelPermalink }}"{{ if eq .RelPermalink $cur }} class="is-current" aria-current="page"{{ end }}>{{ .LinkTitle }}</a></li>
{{- end }}
</ul>
</div>
{{- end }}
</nav>
<script>
(function () {
if (window.__wikiFilter) return; window.__wikiFilter = 1;
var inp = document.querySelector('.wiki-filter'); if (!inp) return;
inp.addEventListener('input', function () {
var q = inp.value.trim().toLowerCase();
document.querySelectorAll('.wiki-nav-group').forEach(function (g) {
var any = false;
g.querySelectorAll('li').forEach(function (li) {
var hit = li.textContent.toLowerCase().indexOf(q) > -1;
li.style.display = hit ? '' : 'none'; if (hit) any = true;
});
g.style.display = any ? '' : 'none';
});
});
})();
</script>
+42
View File
@@ -0,0 +1,42 @@
{{ define "main" }}
<div class="wiki">
<aside class="wiki-side">{{ partial "wiki-nav.html" . }}</aside>
<article class="wiki-page">
<header class="wiki-head">
<p class="wiki-rubric">Wiki</p>
<h1>{{ .Title }}</h1>
</header>
<div class="single-content">{{ .Content }}</div>
{{ $pages := where site.RegularPages "Section" "wiki" }}
{{ $groups := dict }}
{{ range $pages }}
{{ $g := .Params.group | default "Allgemein" }}
{{ $existing := index $groups $g | default slice }}
{{ $groups = merge $groups (dict $g ($existing | append .)) }}
{{ end }}
{{ if $pages }}
<div class="wiki-index">
{{ range $g, $ps := $groups }}
<section class="wiki-group">
<h2>{{ $g }}</h2>
<ul>
{{ range sort $ps "Title" }}
<li>
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
{{ with .Params.summary }}<span class="text-muted"> — {{ . }}</span>{{ end }}
</li>
{{ end }}
</ul>
</section>
{{ end }}
</div>
{{ else }}
<p class="text-muted"><em>Noch keine Einträge — der erste entsteht im Redaktions-Editor.</em></p>
{{ end }}
</article>
</div>
{{ end }}
+33
View File
@@ -0,0 +1,33 @@
{{ define "main" }}
<div class="wiki">
<aside class="wiki-side">{{ partial "wiki-nav.html" . }}</aside>
<article class="wiki-page">
<header class="wiki-head">
<p class="wiki-rubric">Wiki{{ with .Params.group }} · {{ . }}{{ end }}</p>
<h1>{{ .Title }}</h1>
{{ with .Params.summary }}<p class="single-summary">{{ . }}</p>{{ end }}
</header>
{{ $hasToC := .Params.toc | default false }}
{{ $headers := findRE "<h[2-6]" .Content }}
{{ if and $hasToC (ge (len $headers) 2) }}
<nav class="toc">
<strong>Inhalt</strong>
<div class="toc-content">{{ .TableOfContents }}</div>
</nav>
{{ end }}
<div class="single-content wiki-content">
{{ .Content }}
</div>
<footer class="wiki-foot">
{{ if .Lastmod }}<span>Zuletzt bearbeitet am {{ .Lastmod.Format "02.01.2006" }}</span>{{ end }}
{{ with .File }}
<a href="{{ site.Params.repoURL }}/_edit/branch/main/content/{{ .Path }}" rel="nofollow">bearbeiten ↗</a>
{{ end }}
</footer>
</article>
</div>
{{ end }}