Farbschema folgt zunächst der Systemeinstellung, lässt sich per Knopf in der Kopfzeile umstellen und wird dann gemerkt. Bei gesperrtem Speicher (privates Fenster) greift wieder die Systemeinstellung. theme.js steht bewusst OHNE defer und vor dem Inhalt: es setzt die Farbklasse, bevor gezeichnet wird. Mit defer blitzte beim Laden kurz die helle Fassung auf. Eine eigene Datei statt eines <script>-Blocks, weil die CSP nur script-src 'self' erlaubt - inline wäre blockiert. Fusszeile zeigt Version oder Commit, gleiches Muster wie die Kantone-App: die CI reicht beides als Build-Argument durch, lokal erscheint der Build-Zeitpunkt. Der ändert sich bei jedem Neubau und zeigt damit sofort, ob wirklich der neue Stand läuft. Beim Ergänzen der Dunkel-Varianten hatte mein Ersetzer die eben eingefügten dark:-Klassen selbst nochmal getroffen und daraus Paare wie "dark:text-slate-300 dark:text-slate-600" gemacht - bereinigt. 81 Tests, alle grün. Neu darunter: die Fusszeile zeigt Tag bzw. Commit, theme.js steht vor <body> und ohne defer, der Umschalter ist da. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GR4bNaj9GtRu57J4Niii8o
49 lines
1.8 KiB
HTML
49 lines
1.8 KiB
HTML
{% extends "basis.html" %}
|
|
{% block titel %}Bearbeiten{% endblock %}
|
|
{% block inhalt %}
|
|
|
|
<h1 class="text-xl font-bold mb-4">
|
|
{{ 'Entwurf nachtragen' if item.status == 'draft' else 'Bearbeiten' }}
|
|
</h1>
|
|
|
|
<div class="grid md:grid-cols-2 gap-5">
|
|
<div class="karte">
|
|
{% if item.bilder %}
|
|
<img src="/uploads/{{ item.hauptbild.image_url }}" alt=""
|
|
class="w-full object-cover">
|
|
{% if item.bilder|length > 1 %}
|
|
<div class="grid grid-cols-4 gap-1 p-1">
|
|
{% for b in item.bilder %}
|
|
<img src="/uploads/{{ b.image_url }}" alt="" loading="lazy"
|
|
class="aspect-square object-cover rounded-lg
|
|
{{ 'ring-2 ring-marke-600' if b.is_primary }}">
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% else %}
|
|
<div class="aspect-[3/4] grid place-items-center text-slate-300 dark:text-slate-600">kein Bild</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<form method="post" action="/kleid/{{ item.id }}/bearbeiten"
|
|
enctype="multipart/form-data" class="karte p-4 space-y-4">
|
|
<input type="hidden" name="csrf" value="{{ csrf }}">
|
|
{% include "_felder.html" %}
|
|
|
|
<div>
|
|
<label class="etikett" for="fotos">Weitere Fotos</label>
|
|
<input class="feld py-2" id="fotos" type="file" name="dateien"
|
|
accept="image/*" multiple>
|
|
</div>
|
|
|
|
<button class="knopf-haupt w-full">
|
|
{{ 'Veröffentlichen' if item.status == 'draft' else 'Speichern' }}
|
|
</button>
|
|
{% if item.status != 'draft' %}
|
|
<a href="/kleid/{{ item.id }}" class="knopf-still w-full">Abbrechen</a>
|
|
{% endif %}
|
|
</form>
|
|
</div>
|
|
|
|
{% endblock %}
|