From 1ef5578e026d45224733b540abcf9910f7916f8c Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Thu, 7 May 2026 11:29:06 +0200 Subject: [PATCH] feat(v3): v3 wird Default unter /antrag/{drs}, v2 zieht nach /v2/antrag/{drs} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Routen: - /antrag/{drs} → v3 (Standard, Bürger:innen-Modus single column) - /v2/antrag/{drs} → v2 (alter Profi-Modus, weiterhin erreichbar) - /v3/antrag/{drs} → Alias auf v3 (für alte Bookmarks) UI-Hinweise auf alternative Ansichten ausgeblendet: - v3-Topbar-Pill "Bürger:innen-Modus · Beta" + "→ Profi-Modus"-Toggle raus - v2-Topbar-Link "→ Bürger:innen-Modus · v3 Beta" raus Im Admin-Bereich (/v2/admin/stand) neuer Block "Alternative Ansichten" mit Beispiel-Drucksache, Live-Link auf v3 (Default) und v2 (Profi). Nur Admins sehen die Hinweise auf v2. Trennlinien-Cleanup im Rest-Block: - Doppellinie unter Abstimmungsergebnis aufgelöst (.v3-rest hatte border-top, das v3-section.border-bottom doppelt war). - Neue Trennlinien via Klasse v3-rest-divider-top vor: · Teilen-Block (zwischen Ähnliche und Teilen) · Aktions-Links (zwischen Teilen und administrativem Bereich) Co-Authored-By: Claude Opus 4.7 (1M context) --- app/main.py | 25 ++++++++++---- app/static/v3/v3.css | 12 ++++++- app/templates/v2/screens/admin_stand.html | 37 +++++++++++++++++++++ app/templates/v2/screens/antrag_detail.html | 14 -------- app/templates/v3/screens/antrag_detail.html | 21 ++---------- 5 files changed, 68 insertions(+), 41 deletions(-) diff --git a/app/main.py b/app/main.py index b416e6f..3efe55d 100644 --- a/app/main.py +++ b/app/main.py @@ -376,7 +376,22 @@ _MATRIX_EXPLANATIONS = { @app.get("/antrag/{drucksache:path}", response_class=HTMLResponse) async def antrag_detail(request: Request, drucksache: str, current_user: Optional[dict] = Depends(get_current_user)): - """v2-Antrag-Detail (Profi-Modus): volles GWÖ-Dashboard pro Drucksache.""" + """Standard-Antrag-Detail (v3 Bürger:innen-Modus, single column). + + Bisheriger Profi-Modus (v2, zwei Spalten) ist unter /v2/antrag/{drs} + weiterhin erreichbar — Link im Admin-Bereich (/v2/admin/stand). + """ + return await _render_antrag_detail( + request, drucksache, current_user, "v3/screens/antrag_detail.html" + ) + + +@app.get("/v2/antrag/{drucksache:path}", response_class=HTMLResponse) +async def antrag_detail_v2(request: Request, drucksache: str, current_user: Optional[dict] = Depends(get_current_user)): + """Alt-Profi-Modus: zweispaltiges Layout mit allen Feldern gleichzeitig. + + Ist nicht mehr Standard, bleibt aber als Power-User-Variante zugaenglich. + """ return await _render_antrag_detail( request, drucksache, current_user, "v2/screens/antrag_detail.html" ) @@ -384,12 +399,8 @@ async def antrag_detail(request: Request, drucksache: str, current_user: Optiona @app.get("/v3/antrag/{drucksache:path}", response_class=HTMLResponse) async def antrag_detail_v3(request: Request, drucksache: str, current_user: Optional[dict] = Depends(get_current_user)): - """v3-Antrag-Detail (Bürger:innen-Modus, Beta): vereinfachte Vorschau. - - Sandbox fuer Issues #184 (CD-Konformitaet) und #185 (Bürgerinnen- - Perspektive). Initial identisch zu v2; iterative Vereinfachungen - folgen pro PR. v2-Endpoint bleibt unangetastet. - """ + """Alias auf den Standard (= /antrag/{drs}), damit alte Bookmarks + auf v3-URLs weiter funktionieren.""" return await _render_antrag_detail( request, drucksache, current_user, "v3/screens/antrag_detail.html" ) diff --git a/app/static/v3/v3.css b/app/static/v3/v3.css index e2f9bf1..715fecd 100644 --- a/app/static/v3/v3.css +++ b/app/static/v3/v3.css @@ -407,14 +407,24 @@ } /* ── 9. Rest-Block ─────────────────────────────────────────────────── */ +/* Kein eigenes border-top mehr — die letzte v3-section (z.B. + Abstimmungsergebnis) liefert bereits die Trennlinie via border-bottom. + Vorher waren beide aktiv → Doppellinie. */ .v3-rest { margin-top: 28px; padding-top: 20px; - border-top: 1px solid var(--hairline); display: flex; flex-direction: column; gap: 22px; } + +/* Trennlinien zwischen ausgewählten Rest-Blöcken: vor Teilen und vor + Aktions-Links (Beginn des administrativen Bereichs). */ +.v3-rest > .v3-rest-block.v3-rest-divider-top, +.v3-rest > .v3-rest-aktions.v3-rest-divider-top { + border-top: 1px solid var(--hairline); + padding-top: 22px; +} .v3-rest-block { font-size: 13px; } diff --git a/app/templates/v2/screens/admin_stand.html b/app/templates/v2/screens/admin_stand.html index cfd8a09..3a908fd 100644 --- a/app/templates/v2/screens/admin_stand.html +++ b/app/templates/v2/screens/admin_stand.html @@ -167,6 +167,19 @@
+ + {# Alternative Detail-Ansichten — nur im Admin sichtbar. + Default ist v3 (`/antrag/{drs}`), der frühere Profi-Modus läuft + unter /v2/antrag/. Hier ein Sample-Link, damit Admins ihn finden. #} +

Alternative Ansichten

+

+ Standard-Detailansicht ist v3 (Bürger:innen-Modus, single column). + Die frühere v2-Profi-Ansicht (zwei Spalten, alle Felder gleichzeitig) + bleibt unter /v2/antrag/<Drucksache> erreichbar. +

+

+ Lade aktuelles Beispiel … +

{% endblock %} @@ -281,6 +294,30 @@ async function loadStand() { } } +/* Sample-Link für Alternative Ansichten: aktuellster Antrag */ +(async function () { + var el = document.getElementById('alt-views-sample'); + if (!el) return; + try { + var r = await fetch('/api/assessments?limit=1'); + var data = await r.json(); + var a = (data && data[0]) || (data.results && data.results[0]) || null; + if (!a || !a.drucksache) { + el.textContent = 'Kein Beispiel-Antrag verfügbar.'; + return; + } + var drs = encodeURIComponent(a.drucksache); + var labelFor = function (s) { return s.length > 70 ? s.slice(0,68) + '…' : s; }; + el.innerHTML = + 'Beispiel: ' + (a.bundesland || '?') + ' · Drs. ' + a.drucksache + + ' — „' + labelFor((a.title || '')) + '"
' + + '· Standard (v3, Bürger:innen-Modus)
' + + '· v2 — Profi-Modus, zwei Spalten'; + } catch (e) { + el.textContent = 'Konnte Beispiel-Link nicht laden.'; + } +})(); + loadStand(); let _standInterval = setInterval(loadStand, 30000); // Pause-Polling wenn Tab versteckt (#183). diff --git a/app/templates/v2/screens/antrag_detail.html b/app/templates/v2/screens/antrag_detail.html index 5dd3180..358d5e2 100644 --- a/app/templates/v2/screens/antrag_detail.html +++ b/app/templates/v2/screens/antrag_detail.html @@ -640,20 +640,6 @@ document.addEventListener('keydown', function (e) { } }); -/* v3-Toggle in der Topbar: nur bei vorhandenem Antrag, Link auf - /v3/antrag/. Injektion via JS, damit v2/base.html unangetastet bleibt. */ -{% if antrag is defined and antrag and antrag.drucksache %} -(function () { - var bar = document.querySelector('.v2-topbar'); - if (!bar) return; - var link = document.createElement('a'); - link.href = '/v3/antrag/' + encodeURIComponent({{ antrag.drucksache | tojson }}); - link.textContent = '→ Bürger:innen-Modus · v3 Beta'; - link.title = 'Vereinfachte Vorschau für Erst-Leser:innen (v3 Beta).'; - link.style.marginLeft = 'auto'; - bar.appendChild(link); -})(); -{% endif %} {# Matrix-Erklärungen als JSON in den Browser übertragen #} diff --git a/app/templates/v3/screens/antrag_detail.html b/app/templates/v3/screens/antrag_detail.html index 57bf1b4..1ddd519 100644 --- a/app/templates/v3/screens/antrag_detail.html +++ b/app/templates/v3/screens/antrag_detail.html @@ -366,7 +366,7 @@ {# Teilen #} -
+

Teilen

@@ -379,7 +379,7 @@
{# Aktions-Links: PDF, Original, JSON, Permalink — unter Teilen #} -
+
PDF-Bericht {% if antrag.link %} Original-Antrag (Landtag) @@ -470,23 +470,6 @@ {% block body_scripts %} {{ super() }}