munin/templates/papierkorb.html
Thomas Adamek 466f1e40af Workspaces, Änderungshistorie, Papierkorb, Nutzungsübersicht, Hilfe
Umsetzung der Ausbaustufen 2.1, 3.6, 3.8, 3.9, 4.1, 4.2, 4.4, 4.6,
5.1–5.4 (Details in AUSBAUSTUFEN.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 07:44:52 +02:00

116 lines
5.3 KiB
HTML

{{template "kopf" .}}
<div class="seitenkopf">
<div class="seitenkopf-titel">
<h1>Papierkorb {{template "hilfelink" "weboberflaeche#papierkorb"}}</h1>
<span class="hilfe">Gelöschte Einträge liegen hier {{.Data.RetentionDays}} Tage mitsamt ihrem Verlauf
und werden danach endgültig entfernt. Für Agenten und die Suche sind sie
schon jetzt unsichtbar.</span>
</div>
</div>
{{$slug := .Project.Slug}}
{{$von := .Data.Von}}
{{$csrf := .CSRFToken}}
{{if $von}}
<p class="hilfe">Nur, was „{{$von}}“ gelöscht hat ·
<a href="/p/{{$slug}}/trash">Filter aufheben</a></p>
{{end}}
{{if .Data.Entries}}
<div class="tabelle-huelle">
<table class="tabelle">
<thead>
<tr>
<th class="schmal"><span class="unsichtbar">Auswahl</span></th>
<th>Eintrag</th>
<th>Gelöscht von</th>
<th>Gelöscht am</th>
<th class="schmal rechts">Aktionen</th>
</tr>
</thead>
<tbody>
{{range .Data.Entries}}
<tr>
{{/* Das Kästchen steht in der Tabelle, gehört aber zum
Sammelformular unter der Tabelle: Das Attribut form="…"
verbindet ein Feld mit einem Formular, das woanders auf der
Seite steht. So kann jede Zeile zusätzlich ihre eigenen
kleinen Formulare haben — Formulare ineinander zu
schachteln erlaubt HTML nämlich nicht. */}}
<td class="schmal">
<input type="checkbox" name="slugs" value="{{.Slug}}" form="papierkorb-auswahl"
aria-label="{{.Title}} auswählen">
</td>
<td>
{{.Title}}<br>
<code class="hilfe">{{.Slug}}</code>
<span class="hilfe">· Fassung {{.Version}}</span>
</td>
<td>
{{if .DeletedBy}}
<a href="/p/{{$slug}}/trash?von={{.DeletedBy}}" title="Nur zeigen, was dieser Zugang gelöscht hat">{{.DeletedBy}}</a>
{{else}}<span class="hilfe">unbekannt</span>{{end}}
</td>
<td class="hilfe">{{datum .DeletedAt}}</td>
<td class="schmal rechts">
<div class="reihe">
<form method="POST" action="/p/{{$slug}}/trash/restore" class="reihe">
<input type="hidden" name="csrf_token" value="{{$csrf}}">
<input type="hidden" name="von" value="{{$von}}">
<input type="hidden" name="slugs" value="{{.Slug}}">
<button type="submit" class="zweitrangig">Wiederherstellen</button>
</form>
<form method="POST" action="/p/{{$slug}}/trash/purge" class="reihe"
data-confirm="„{{.Title}}“ endgültig löschen? Das lässt sich nicht rückgängig machen — auch der Verlauf ist dann weg.">
<input type="hidden" name="csrf_token" value="{{$csrf}}">
<input type="hidden" name="von" value="{{$von}}">
<input type="hidden" name="slugs" value="{{.Slug}}">
<button type="submit" class="warnung">Endgültig löschen</button>
</form>
</div>
</td>
</tr>
{{end}}
</tbody>
</table>
</div>
{{/* Sammelformular für die angehakten Kästchen. Zwei Knöpfe, zwei Ziele:
formaction am Knopf überschreibt das action des Formulars. Die Rückfrage
steht nur am gefährlichen Knopf (static/confirm.js liest sie dort). */}}
<form method="POST" action="/p/{{$slug}}/trash/restore" id="papierkorb-auswahl" class="sammelleiste">
<input type="hidden" name="csrf_token" value="{{$csrf}}">
<input type="hidden" name="von" value="{{$von}}">
<span class="hilfe">Ausgewählte Einträge:</span>
<button type="submit" class="zweitrangig">Wiederherstellen</button>
<button type="submit" class="warnung" formaction="/p/{{$slug}}/trash/purge"
data-confirm="Die ausgewählten Einträge endgültig löschen? Das lässt sich nicht rückgängig machen.">Endgültig löschen</button>
</form>
{{/* Ist nach einem Zugang gefiltert, lässt sich alles, was er gelöscht hat, in
einem Zug zurückholen — der typische Fall, wenn ein Agent zu gründlich
aufgeräumt hat. Ohne JavaScript: Das Formular trägt jeden angezeigten
Bezeichner als verstecktes Feld. */}}
{{if $von}}
<form method="POST" action="/p/{{$slug}}/trash/restore" class="reihe papierkorb-alle"
data-confirm="Alle {{len .Data.Entries}} Einträge wiederherstellen, die „{{$von}}“ gelöscht hat?">
<input type="hidden" name="csrf_token" value="{{$csrf}}">
<input type="hidden" name="von" value="{{$von}}">
{{range .Data.Entries}}<input type="hidden" name="slugs" value="{{.Slug}}">{{end}}
<button type="submit">Alle {{len .Data.Entries}} von „{{$von}}“ wiederherstellen</button>
</form>
{{end}}
{{else}}
<div class="leer">
{{if $von}}
<p>„{{$von}}“ hat nichts gelöscht, das noch im Papierkorb liegt.</p>
{{else}}
<p>Der Papierkorb ist leer.</p>
{{end}}
</div>
{{end}}
{{template "fuss" .}}