munin/templates/trash.html
2026-10-19 10:13:56 +02:00

116 lines
5.3 KiB
HTML

{{template "header" .}}
<div class="page-header">
<div class="page-header-title">
<h1>Papierkorb {{template "helplink" "weboberflaeche#papierkorb"}}</h1>
<span class="help">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.From}}
{{$csrf := .CSRFToken}}
{{if $von}}
<p class="help">Nur, was „{{$von}}“ gelöscht hat ·
<a href="/p/{{$slug}}/trash">Filter aufheben</a></p>
{{end}}
{{if .Data.Entries}}
<div class="table-wrap">
<table class="styled-table">
<thead>
<tr>
<th class="narrow"><span class="invisible">Auswahl</span></th>
<th>Eintrag</th>
<th>Gelöscht von</th>
<th>Gelöscht am</th>
<th class="narrow right">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="narrow">
<input type="checkbox" name="slugs" value="{{.Slug}}" form="papierkorb-auswahl"
aria-label="{{.Title}} auswählen">
</td>
<td>
{{.Title}}<br>
<code class="help">{{.Slug}}</code>
<span class="help">· 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="help">unbekannt</span>{{end}}
</td>
<td class="help">{{datetime .DeletedAt}}</td>
<td class="narrow right">
<div class="row">
<form method="POST" action="/p/{{$slug}}/trash/restore" class="row">
<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="secondary">Wiederherstellen</button>
</form>
<form method="POST" action="/p/{{$slug}}/trash/purge" class="row"
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="warning">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="bulk-bar">
<input type="hidden" name="csrf_token" value="{{$csrf}}">
<input type="hidden" name="von" value="{{$von}}">
<span class="help">Ausgewählte Einträge:</span>
<button type="submit" class="secondary">Wiederherstellen</button>
<button type="submit" class="warning" 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="row trash-all"
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="empty">
{{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 "footer" .}}