From 14e2e1eee2e46ce20710765104b3dff0477de582 Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Fri, 10 Apr 2026 23:38:37 +0200 Subject: [PATCH] =?UTF-8?q?Matrix=20klickbar:=20Feld-Info-Modal=20mit=20B?= =?UTF-8?q?=C3=BCrger:innen-Erkl=C3=A4rungen=20+=20Spalten=20nummeriert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Klick auf jedes Matrix-Feld öffnet ein Modal mit: - Feld-Code + voller Name (z.B. "D4: Soziale Gestaltung") - Zeile + Spalte in Klartext - "Was bedeutet das für Bürger:innen?" Erklärung (25 Texte) - Falls bewertet: Aspekt aus der LLM-Analyse + Rating-Farbe - Falls nicht bewertet: "Dieses Feld wird vom Antrag nicht berührt" Spaltenüberschriften: "1. Menschenwürde" statt nur "Menschenwürde" --- app/main.py | 27 ++++++++++++++++++++++++ app/templates/index.html | 45 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/app/main.py b/app/main.py index bc1f49d..108d98b 100644 --- a/app/main.py +++ b/app/main.py @@ -167,6 +167,33 @@ async def index(request: Request): "bundeslaender": bl_list, "parlament_names": parlament_names, "matrix_labels": MATRIX_LABELS, + "matrix_explanations": { + "A1": "Werden bei öffentlichen Aufträgen Grundrechte in der Lieferkette beachtet?", + "A2": "Fließt öffentliches Geld in regionale Wertschöpfung statt Großkonzerne?", + "A3": "Achten Lieferant:innen auf Klimaschutz und Ressourcenschonung?", + "A4": "Werden faire Löhne bei externen Dienstleistern sichergestellt?", + "A5": "Ist die Vergabe öffentlicher Aufträge transparent nachvollziehbar?", + "B1": "Wird mit öffentlichen Geldern ethisch umgegangen?", + "B2": "Werden Steuergelder für den Nutzen aller eingesetzt?", + "B3": "Wird bei Investitionen der ökologische Fußabdruck berücksichtigt?", + "B4": "Ist die Verteilung öffentlicher Mittel sozial gerecht?", + "B5": "Können Bürger:innen mitentscheiden, wofür Geld ausgegeben wird?", + "C1": "Gibt es Gleichstellung und Diskriminierungsschutz in der Verwaltung?", + "C2": "Arbeiten Verwaltung und Politik an gemeinsamen Gemeinwohl-Zielen?", + "C3": "Fördert die Verwaltung umweltbewusstes Handeln?", + "C4": "Gibt es Chancengleichheit und familienfreundliche Arbeitszeiten?", + "C5": "Sind Entscheidungsprozesse in Politik und Verwaltung transparent?", + "D1": "Werden Grundrechte geschützt? Gleichheit vor dem Gesetz?", + "D2": "Profitieren möglichst viele Menschen — nicht nur einzelne Gruppen?", + "D3": "Wird die Daseinsvorsorge ökologisch nachhaltig gestaltet?", + "D4": "Haben alle Zugang zu Bildung, Gesundheit, Wohnen — unabhängig vom Einkommen?", + "D5": "Werden Bürger:innen bei Entscheidungen einbezogen?", + "E1": "Werden die Rechte künftiger Generationen mitgedacht?", + "E2": "Hat der Antrag positive Wirkung über die Gemeindegrenzen hinaus?", + "E3": "Werden ökologische Auswirkungen global bedacht?", + "E4": "Trägt der Antrag zum sozialen Ausgleich bei — auch überregional?", + "E5": "Fördert der Antrag demokratische Mitbestimmung über die Gemeinde hinaus?", + }, }) diff --git a/app/templates/index.html b/app/templates/index.html index 78dd589..80186f5 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -980,6 +980,41 @@ } } + // Matrix-Feld-Info-Modal + function showFieldInfo(field, aspect, rating) { + const labels = {{ matrix_labels | tojson }}; + const explains = {{ matrix_explanations | tojson }}; + const rowNames = {'A':'Ausgelagerte Betriebe, Lieferant:innen','B':'Finanzpartner:innen, Steuerzahler:innen','C':'Politische Führung, Verwaltung','D':'Bürger:innen und Wirtschaft','E':'Staat, Gesellschaft und Natur'}; + const colNames = {1:'Menschenwürde',2:'Solidarität',3:'Ökologische Nachhaltigkeit',4:'Soziale Gerechtigkeit',5:'Transparenz & Mitbestimmung'}; + const row = field[0], col = parseInt(field[1]); + const ratingText = rating >= 4 ? '++ stark fördernd' : rating >= 1 ? '+ fördernd' : rating === 0 ? '○ neutral / nicht bewertet' : rating >= -3 ? '− widersprechend' : '−− stark widersprechend'; + const ratingColor = rating > 0 ? '#889e33' : rating < 0 ? '#dc3545' : '#888'; + + const html = ` +
+
+
+

${field}: ${labels[field] || field}

+ +
+
+ Zeile ${row}: ${rowNames[row] || ''}
+ Spalte ${col}: ${colNames[col] || ''} +
+
+ Was bedeutet das für Bürger:innen?
+ ${explains[field] || 'Keine Erklärung verfügbar.'} +
+ ${aspect ? `
+ Bewertung dieses Antrags:
+ ${aspect}
+ Bewertung: ${rating} (${ratingText}) +
` : '

Dieses Feld wird vom Antrag nicht berührt.

'} +
+
`; + document.body.insertAdjacentHTML('beforeend', html); + } + // Sortierung (#100) function setSortOrder(order) { currentSort = order; @@ -1890,8 +1925,11 @@ const fieldLabels = {{ matrix_labels | tojson }}; const ratingExplain = (r) => r >= 4 ? '++ stark fördernd' : r >= 1 ? '+ fördernd' : r === 0 ? '○ neutral' : r >= -3 ? '− widersprechend' : '−− stark widersprechend'; + // Bürger:innen-Erklärungen pro Feld + const fieldExplain = {{ matrix_explanations | tojson }}; + let matrixTableHtml = ''; - for (let col = 1; col <= 5; col++) matrixTableHtml += ``; + for (let col = 1; col <= 5; col++) matrixTableHtml += ``; matrixTableHtml += ''; ['A', 'B', 'C', 'D', 'E'].forEach(row => { @@ -1902,10 +1940,9 @@ const fullLabel = fieldLabels[field] || field; if (entry) { const cssClass = entry.rating > 0 ? 'positive' : (entry.rating < 0 ? 'negative' : 'neutral'); - const tooltip = `${field}: ${fullLabel}\n\n${entry.aspect || ''}\n\nBewertung: ${entry.rating} (${ratingExplain(entry.rating)})`; - matrixTableHtml += ``; + matrixTableHtml += ``; } else { - matrixTableHtml += ``; + matrixTableHtml += ``; } } matrixTableHtml += '';
${colLabels[col]}${col}. ${colLabels[col]}
${entry.symbol}${entry.symbol}