v2-Frontend (#139, ECOnGOOD CD Manual Juni 2024): - app/static/v2/: tokens.css, fonts.css, v2.css, Nunito-Sans woff2, Phosphor-Icons (21 SVGs) - app/templates/v2/: base.html + 11 Screens + 8 Component-Macros - AppShell mit Sidebar (Lesen/Pruefen/Daten/Admin), v2-Detail mit allen Features (ScoreHero, MatrixMini, QuoteCard, Redline, Fraktions-Scores) - v2 ist jetzt Default unter / — classic unter /classic - Login-Modal in v2-Topbar mit Tabs Anmelden/Registrieren (#129) - Phosphor-Icons in Sidebar + Topbar mit dynamischem Theme-Toggle - Keyboard-Shortcuts (j/k/Enter/Esc/?/path), Landtag-Suche, Antrag-Historie, Sort-Dropdown, Matrix-Feld-Info-Modal, Bookmarks/Comments/Voting/Share/Re-Analyze Backend-Erweiterungen: - main.py: ~30 neue Routes (/v2/*, /antrag/{ds}, /api/auth/{login,refresh,logout}, /api/me/merkliste/*, /api/admin/*, /v2/admin/*, OG-Cards, etc.) - og_card.py + og_template: Open-Graph-Bilder via Playwright (#141) - wahlprogramm_fetch.py + wahlprogramm-links.yaml: SHA-Gate Auto-DL (#138) - auswertungen.py: BL-Filter + get_wahlperioden Helper (#137) - auth.py: Direct-Access-Grant + Refresh-Token-Cookie Classic-Updates: - Header-DRY via _header.html, Auswertungen redirected, Batch-Inline raus Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
70 lines
2.5 KiB
HTML
70 lines
2.5 KiB
HTML
{#
|
||
matrix_mini.html — GWÖ-Matrix 5×5 Minidarstellung
|
||
|
||
Props:
|
||
matrix : Dict mit Schlüsseln A1–E5, je Wert ein Dict:
|
||
{ "rating": int (-2 bis 2), "symbol": str ("++"|"+"|"○"|"−"|"−−") }
|
||
Fehlende Felder werden als neutral (○) dargestellt.
|
||
|
||
Farbstufen-Klassen (CSS in v2.css):
|
||
m-pp : rating 2 (++ stark fördernd) — ECG-Grün auf Weiß
|
||
m-p : rating 1 (+ fördernd) — Grün-Tint
|
||
m-0 : rating 0 (○ neutral) — Weiß
|
||
m-n : rating -1 (− widersprechend) — Rot-Tint
|
||
m-nn : rating -2 (−− stark widerspr.)— Dunkelrot
|
||
|
||
Verwendung:
|
||
{% from "v2/components/matrix_mini.html" import matrix_mini %}
|
||
{{ matrix_mini(assessment.matrix) }}
|
||
#}
|
||
|
||
{% macro matrix_mini(matrix) %}
|
||
{% set rows = ["A", "B", "C", "D", "E"] %}
|
||
{% set cols = ["1", "2", "3", "4", "5"] %}
|
||
{% set row_labels = {"A": "A · Liefer.", "B": "B · Finanzen", "C": "C · Verwalt.", "D": "D · Bürger", "E": "E · Gesell."} %}
|
||
{% set col_labels = {"1": "Würde", "2": "Solid.", "3": "Ökol.", "4": "Soz.", "5": "Trans."} %}
|
||
|
||
{% macro rating_class(r) %}
|
||
{% if r == 2 %}m-pp
|
||
{% elif r == 1 %}m-p
|
||
{% elif r == -1 %}m-n
|
||
{% elif r == -2 %}m-nn
|
||
{% else %}m-0{% endif %}
|
||
{% endmacro %}
|
||
|
||
<div class="v2-matrix-mini" role="table" aria-label="GWÖ-Matrix 5×5">
|
||
{# Header-Zeile #}
|
||
<div class="hdr" role="columnheader"></div>
|
||
{% for c in cols %}
|
||
<div class="hdr" role="columnheader">{{ col_labels[c] }}</div>
|
||
{% endfor %}
|
||
|
||
{# Daten-Zeilen #}
|
||
{% for r in rows %}
|
||
<div class="rhdr" role="rowheader">{{ row_labels[r] }}</div>
|
||
{% for c in cols %}
|
||
{% set key = r ~ c %}
|
||
{% set cell = matrix[key] if matrix is defined and key in matrix else {} %}
|
||
{% set rating = cell.rating | default(0) | int %}
|
||
{% set symbol = cell.symbol | default("○") %}
|
||
<div class="{{ rating_class(rating) | trim }}"
|
||
role="cell"
|
||
title="{{ key }}: {{ symbol }}"
|
||
aria-label="{{ key }}, {{ symbol }}, {% if rating == 2 %}stark fördernd{% elif rating == 1 %}fördernd{% elif rating == 0 %}neutral{% elif rating == -1 %}widersprechend{% else %}stark widersprechend{% endif %}"
|
||
onclick="if(typeof v2ShowMatrixFieldInfo==='function')v2ShowMatrixFieldInfo('{{ key }}')"
|
||
style="cursor:pointer;">
|
||
{{ symbol }}
|
||
</div>
|
||
{% endfor %}
|
||
{% endfor %}
|
||
</div>
|
||
|
||
<div class="v2-matrix-legend" aria-hidden="true">
|
||
<span>++ stark fördernd</span>
|
||
<span>+ fördernd</span>
|
||
<span>○ neutral</span>
|
||
<span>− widersprechend</span>
|
||
<span>−− stark widerspr.</span>
|
||
</div>
|
||
{% endmacro %}
|