diff --git a/app/main.py b/app/main.py index 3439aac..df99c84 100644 --- a/app/main.py +++ b/app/main.py @@ -2062,6 +2062,28 @@ async def auswertungen_page(request: Request, current_user: dict = Depends(requi "v2_active_nav": "auswertungen", "wahlperioden": wahlperioden, "bl_codes": bl_codes, + "default_tab": "bl-partei", + **_v2_template_context(current_user), + }) + + +@app.get("/stimmverhalten", response_class=HTMLResponse) +async def stimmverhalten_page(request: Request, current_user: dict = Depends(require_auth)): + """Eigene View für Stimmverhalten × GWÖ (#169). Rendert auswertungen.html + mit default_tab=stimmverhalten und Active-Nav 'stimmverhalten'.""" + from .auswertungen import get_wahlperioden + from .bundeslaender import alle_bundeslaender + + wahlperioden = get_wahlperioden() + bl_codes = sorted(bl.code for bl in alle_bundeslaender() if bl.aktiv) + + return templates.TemplateResponse("v2/screens/auswertungen.html", { + "request": request, + "app_name": settings.app_name, + "v2_active_nav": "stimmverhalten", + "wahlperioden": wahlperioden, + "bl_codes": bl_codes, + "default_tab": "stimmverhalten", **_v2_template_context(current_user), }) diff --git a/app/templates/v2/base.html b/app/templates/v2/base.html index f41bba4..e43cb37 100644 --- a/app/templates/v2/base.html +++ b/app/templates/v2/base.html @@ -56,6 +56,7 @@
— Daten
{{ icon("chart-bar", 14) }} Auswertungen + {{ icon("scales", 14) }} Stimmverhalten {{ icon("book-open", 14) }} Aktuelle Themen {{ icon("file-csv", 14) }} Export · API {{ icon("rss", 14) }} Atom-Feed diff --git a/app/templates/v2/screens/auswertungen.html b/app/templates/v2/screens/auswertungen.html index c32c06c..8952d9c 100644 --- a/app/templates/v2/screens/auswertungen.html +++ b/app/templates/v2/screens/auswertungen.html @@ -518,7 +518,19 @@ window.addEventListener('v2-bl-changed', function () { // Stimmverhalten reagiert NICHT auf globalen BL-Filter — eigener Selector. }); -document.addEventListener('DOMContentLoaded', function () { loadBlMatrix(); }); +document.addEventListener('DOMContentLoaded', function () { + // Default-Tab aus Server-Context — z.B. /stimmverhalten setzt 'stimmverhalten' + const initialTab = {{ default_tab | default('bl-partei') | tojson }}; + if (initialTab && initialTab !== 'bl-partei') { + const tabBtn = document.querySelector(`.auswert-tab[onclick*="'${initialTab}'"]`); + if (tabBtn) { + switchTab(initialTab, tabBtn); + tabBtn.scrollIntoView({block: 'nearest', inline: 'center'}); + return; + } + } + loadBlMatrix(); +}); function scoreClass(avg) { if (avg == null) return '';