Nav wird jetzt für alle Seiten aus einer einzigen Stelle (layout.html-Block) gerendert: auf dem Handy ein per Checkbox-Hack aufklappbares Menü (kein JavaScript), ab 960px Breite per CSS in eine permanente, dunkle Seitenleiste im enconf-Look verwandelt — dieselbe Markup-Struktur bedient beide Layouts, kein separates Desktop-Template. <details>/<summary> wurde bewusst NICHT verwendet: aktuelle Chromium-Versionen steuern dessen Auf-/Zuklapp-Zustand über eine CSS-resistente interne Animation (auch mit !important nicht überschreibbar), per Headless-Screenshot verifiziert. Zusätzlich: Tabellen (vorher komplett ungestylt, betraf v. a. das Register) haben jetzt echte Gestaltung inkl. horizontal scrollbarem Wrapper für schmale Bildschirme, Listenkarten ohne Link-Wrapper (Nutzer-/Abteilungsliste) bekommen dieselbe Kartenoptik wie verlinkte Einträge, und destruktive Aktionen (Löschen/Deaktivieren) sind jetzt visuell von primären Aktionen unterschieden. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
66 lines
2.8 KiB
HTML
66 lines
2.8 KiB
HTML
{{define "betreiber-werkzeug-form"}}<!doctype html>
|
|
<html lang="de">
|
|
<head>{{template "head" .}}</head>
|
|
<body>
|
|
{{template "nav" .Nav}}
|
|
<div class="page">
|
|
<p><a href="/betreiber/werkzeuge">← Werkzeugkatalog</a></p>
|
|
<h1>{{.Title}}</h1>
|
|
<p class="hinweis">
|
|
Jede Zusicherung hier (AVV, Verarbeitungsort, Training-Opt-out,
|
|
Zertifizierungen) muss belegbar sein — Quelle und letzte Prüfung sind
|
|
Pflicht.
|
|
</p>
|
|
{{if .Error}}<p class="fehler">{{.Error}}</p>{{end}}
|
|
<form method="post" action="{{if .ID}}/betreiber/werkzeuge/{{.ID}}{{else}}/betreiber/werkzeuge{{end}}">
|
|
<label for="name">Name</label>
|
|
<input type="text" id="name" name="name" value="{{.Name}}" required>
|
|
|
|
<label for="anbieter">Anbieter</label>
|
|
<input type="text" id="anbieter" name="anbieter" value="{{.Anbieter}}" required>
|
|
|
|
<fieldset>
|
|
<legend>Verarbeitungsort</legend>
|
|
{{$gewaehlt := .Verarbeitungsort}}
|
|
{{range .Verarbeitungsorte}}
|
|
<label><input type="radio" name="verarbeitungsort" value="{{.}}" {{if eq . $gewaehlt}}checked{{end}} required> {{.}}</label>
|
|
{{end}}
|
|
</fieldset>
|
|
|
|
<label><input type="checkbox" name="avv_verfuegbar" {{if .AVVVerfuegbar}}checked{{end}}> AVV verfügbar</label>
|
|
<label for="avv_url">AVV-URL</label>
|
|
<input type="text" id="avv_url" name="avv_url" value="{{.AVVURL}}">
|
|
|
|
<label><input type="checkbox" name="training_opt_out" {{if .TrainingOptOut}}checked{{end}}> Training-Opt-out möglich</label>
|
|
<label><input type="checkbox" name="training_standard" {{if .TrainingStandard}}checked{{end}}> Training standardmäßig aus</label>
|
|
|
|
<label for="aufbewahrung_tage">Aufbewahrung (Tage)</label>
|
|
<input type="number" id="aufbewahrung_tage" name="aufbewahrung_tage" min="0" value="{{.AufbewahrungTage}}">
|
|
|
|
<label for="zertifizierungen">Zertifizierungen (kommagetrennt)</label>
|
|
<input type="text" id="zertifizierungen" name="zertifizierungen" value="{{.Zertifizierungen}}">
|
|
|
|
<label for="geeignete_zwecke">Geeignete Zwecke (kommagetrennt)</label>
|
|
<input type="text" id="geeignete_zwecke" name="geeignete_zwecke" value="{{.GeeigneteZwecke}}">
|
|
|
|
<label for="einschraenkungen">Einschränkungen (kommagetrennt)</label>
|
|
<input type="text" id="einschraenkungen" name="einschraenkungen" value="{{.Einschraenkungen}}">
|
|
|
|
<label for="letzte_pruefung">Letzte Prüfung</label>
|
|
<input type="date" id="letzte_pruefung" name="letzte_pruefung" value="{{.LetztePruefung}}" required>
|
|
|
|
<label for="quelle">Quelle (Beleg)</label>
|
|
<input type="text" id="quelle" name="quelle" value="{{.Quelle}}" required>
|
|
|
|
<button type="submit">Speichern</button>
|
|
</form>
|
|
{{if .ID}}
|
|
<form method="post" action="/betreiber/werkzeuge/{{.ID}}/loeschen" onsubmit="return confirm('Werkzeug wirklich löschen?')">
|
|
<button type="submit" class="entfernen">Werkzeug löschen</button>
|
|
</form>
|
|
{{end}}
|
|
</div>
|
|
</body>
|
|
</html>
|
|
{{end}}
|