d9ba2f7bbe
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>
42 lines
1.7 KiB
HTML
42 lines
1.7 KiB
HTML
{{- /* 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>
|