munin/templates/partials.html
2026-09-15 20:36:26 +02:00

118 lines
4.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{/*
Gemeinsame Bausteine aller Seiten.
Statt eines verschachtelten Layout-Templates gibt es hier Blöcke, die jede
Seite einbindet. Das ist etwas mehr Tipparbeit je Seite, dafür braucht es
keine Template-Vererbung — und man sieht jeder Seitendatei an, wie sie
aufgebaut ist.
html-anfang / html-ende Dokumentrahmen (auch von der Anmeldeseite genutzt)
kopf / fuss Rahmen, Kopfleiste und Seitenleiste
*/}}
{{define "html-anfang"}}<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{.Title}} – Munin</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
{{end}}
{{define "html-ende"}}
<script src="/static/confirm.js"></script>
</body>
</html>
{{end}}
{{define "kopf"}}{{template "html-anfang" .}}
{{/* Schmale Kopfleiste über die ganze Breite: Marke und Abmelden. Alles
Weitere steht in der Seitenleiste. */}}
<header class="kopfleiste">
<div class="kopfleiste-innen">
<a class="marke-wort" href="/">Munin</a>
<form method="POST" action="/logout" class="reihe">
<input type="hidden" name="csrf_token" value="{{.CSRFToken}}">
<button type="submit" class="wie-link">Abmelden</button>
</form>
</div>
</header>
<div class="gerüst">
{{/* ── Seitenleiste ──────────────────────────────────────────────────────
Enthält drei Gruppen: die Projekte, die Bereiche des aktuellen Projekts
und dessen Schlagworte. Die Schlagworte stehen hier statt als Filterzeile
über der Liste — sie sind Navigation, und die Liste bekommt so mehr Platz. */}}
<aside class="seitenleiste">
{{if .Session.IsPlatformAdmin}}
<nav class="nav-gruppe">
<h2 class="nav-titel">Projekte</h2>
<ul class="nav-liste">
{{$aktuell := .Project.Slug}}
{{range .Nav.Projects}}
<li><a href="/p/{{.Slug}}/" {{if eq $aktuell .Slug}}class="aktiv"{{end}}>{{.Name}}</a></li>
{{end}}
</ul>
<ul class="nav-liste leise">
<li><a href="/admin/projects" {{if eq .Bereich "projekte"}}class="aktiv"{{end}}>Verwalten…</a></li>
</ul>
</nav>
{{end}}
{{/* Die Bereiche des aktuellen Projekts. Die Überschrift ist der
Projektname — für einen Projekt-Key ist das zugleich die einzige
Ortsangabe, denn eine Projektliste bekommt er nicht zu sehen. */}}
{{if .Project.Slug}}
<nav class="nav-gruppe">
<h2 class="nav-titel">{{.Project.Name}}</h2>
<ul class="nav-liste">
<li><a href="/p/{{.Project.Slug}}/" {{if eq .Bereich "eintraege"}}class="aktiv"{{end}}>Einträge</a></li>
{{if .Session.CanManageKeys}}
<li><a href="/p/{{.Project.Slug}}/keys" {{if eq .Bereich "zugaenge"}}class="aktiv"{{end}}>Zugänge</a></li>
{{end}}
<li><a href="/p/{{.Project.Slug}}/audit" {{if eq .Bereich "protokoll"}}class="aktiv"{{end}}>Protokoll</a></li>
</ul>
</nav>
{{if .Nav.Tags}}
<nav class="nav-gruppe schlagworte">
<h2 class="nav-titel">Schlagworte</h2>
<ul class="nav-liste">
{{$slug := .Project.Slug}}{{$tag := .AktivesTag}}
{{range .Nav.Tags}}
<li>
<a href="/p/{{$slug}}/?tag={{.Tag}}" {{if eq $tag .Tag}}class="aktiv"{{end}}>
<span class="nav-text">{{.Tag}}</span>
<span class="nav-zahl">{{.Count}}</span>
</a>
</li>
{{end}}
</ul>
</nav>
{{end}}
{{end}}
{{if .Session.IsPlatformAdmin}}
<nav class="nav-gruppe">
<h2 class="nav-titel">Plattform</h2>
<ul class="nav-liste">
<li><a href="/admin/audit">Protokoll (alle)</a></li>
</ul>
</nav>
{{end}}
</aside>
<main class="inhalt">
{{if .Error}}<div class="meldung fehler">{{.Error}}</div>{{end}}
{{if .Flash}}<div class="meldung hinweis">{{.Flash}}</div>{{end}}
{{end}}
{{define "fuss"}}
</main>
</div>
{{template "html-ende" .}}
{{end}}