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>
116 lines
5.3 KiB
HTML
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" .}}
|