- Alle fehler-Boxen: role=alert + tabindex=-1 - Login: aria-invalid/aria-describedby auf Feldern bei Fehler - Pflichtfelder: aria-required=true ergänzt
62 lines
3.0 KiB
HTML
62 lines
3.0 KiB
HTML
{% extends "base.html" %}
|
|
{% block titel %}{{ titel }} — Spiele-Redaktion{% endblock %}
|
|
{% block inhalt %}
|
|
<h1 class="text-2xl font-bold mb-2">{{ titel }}</h1>
|
|
<p class="text-slate-600 mb-4 max-w-3xl">
|
|
Redaktionslisten als Datei herunterladen:
|
|
<strong>CSV</strong> (Semikolon-getrennt, UTF-8 mit BOM — direkt in Excel
|
|
öffnbar) oder <strong>PDF</strong> (formatierte Tabelle mit Datum und
|
|
Seitenzahlen). Admins und Redakteure können alle Listen exportieren;
|
|
Rezensentinnen und Rezensenten die Planungsliste.
|
|
</p>
|
|
|
|
{% if fehler %}
|
|
<div class="mb-4 px-4 py-3 rounded-lg border bg-red-50 border-red-200 text-red-700 text-sm" role="alert" tabindex="-1">{{ fehler }}</div>
|
|
{% endif %}
|
|
|
|
<div class="grid gap-4 md:grid-cols-3 mb-6">
|
|
{% for karte in karten %}
|
|
<div class="bg-white border border-slate-200 rounded-xl shadow-sm p-4 flex flex-col
|
|
{% if not karte.verfuegbar %}opacity-60{% endif %}">
|
|
<div class="flex items-start justify-between mb-2">
|
|
<h2 class="font-semibold text-slate-800">{{ karte.titel }}</h2>
|
|
{% if karte.verfuegbar %}
|
|
<span class="text-xs text-slate-500 bg-slate-100 rounded-full px-2 py-0.5 whitespace-nowrap">{{ karte.anzahl }} Einträge</span>
|
|
{% else %}
|
|
<span class="text-xs text-amber-700 bg-amber-50 border border-amber-200 rounded-full px-2 py-0.5 whitespace-nowrap">Nicht verfügbar</span>
|
|
{% endif %}
|
|
</div>
|
|
<p class="text-sm text-slate-600 mb-4 flex-1">{{ karte.beschreibung }}</p>
|
|
|
|
{% if karte.erlaubt %}
|
|
{% if karte.verfuegbar %}
|
|
<div class="flex gap-2">
|
|
<a href="/export/{{ karte.key }}/csv"
|
|
class="flex-1 text-center bg-emerald-600 hover:bg-emerald-700 text-white font-medium px-3 py-2 rounded-lg text-sm">
|
|
CSV herunterladen
|
|
</a>
|
|
<a href="/export/{{ karte.key }}/pdf"
|
|
class="flex-1 text-center bg-slate-700 hover:bg-slate-800 text-white font-medium px-3 py-2 rounded-lg text-sm">
|
|
PDF herunterladen
|
|
</a>
|
|
</div>
|
|
{% else %}
|
|
<p class="text-xs text-slate-500">Das zugehörige Plugin ist nicht geladen — kein Export möglich.</p>
|
|
{% endif %}
|
|
{% else %}
|
|
<p class="text-xs text-slate-400 italic">Nur für Admins und Redakteure — du hast hier keinen Export-Zugriff.</p>
|
|
{% endif %}
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<div class="bg-white border border-slate-200 rounded-xl shadow-sm p-4 text-sm text-slate-600">
|
|
<h3 class="font-semibold text-slate-800 mb-1">Hinweise zu den Formaten</h3>
|
|
<ul class="list-disc list-inside space-y-1">
|
|
<li><strong>CSV:</strong> Semikolon als Trennzeichen (Excel mit deutschem Gebietsschema), UTF-8 mit Byte-Order-Mark — Umlaute und ß bleiben erhalten.</li>
|
|
<li><strong>PDF:</strong> A4, deutsche Kopfzeile auf jeder Seite, Erstell-Datum und Seitenzahlen („Seite X von Y“).</li>
|
|
<li>Jeder Download wird im <a href="/audit-log" class="text-emerald-700 underline">Audit-Log</a> protokolliert (nur Admins einsehbar).</li>
|
|
</ul>
|
|
</div>
|
|
{% endblock %}
|