fix: WAHLPROGRAMME['BUND'] mit Grundsatzprogrammen befuellt + Permalink-Copy-Click

User: 'Aber für diesen speziellen Antrag müssten doch alle Programme
verfügbar sein. https://gwoe-dev.toppyr.de/antrag/21/1594'

Ursache: WAHLPROGRAMME (in app/wahlprogramme.py) hatte keinen 'BUND'-
Eintrag, daher hat check_missing_programmes() fuer jeden Bundestags-
Antrag ALLE 8 Fraktionen als fehlend markiert. Im Embedding-Index
(app/embeddings.py) sind die *-grundsatzprogramm.pdf Dateien aber
laengst registriert (typ=parteiprogramm, ohne bundesland-Bindung).
Die Lookup-Tabellen waren inkonsistent.

Fix: WAHLPROGRAMME['BUND']-Eintrag mit den 6 Grundsatzprogrammen
(CDU/SPD/GRUENE/FDP/AfD/LINKE) ergaenzt — entspricht der Realitaet
im embeddings.py-Index. CSU + BSW haben keine indizierten Programme
und werden weiterhin als fehlend gemeldet (was korrekt ist).

Bestehende BUND-Assessments mit fehlende_programme=[8 Parteien] in
der DB bleiben erst mal so (waehrend einer Re-Analyse korrekt). Issue
#186 (historische BTW-Wahlprogramme) bleibt offen — Grundsatzprogramme
sind nur ein Notbehelf gegen die 'alle fehlen'-Anzeige.

Plus: Permalink-Klick kopiert jetzt die absolute URL in die Zwischen-
ablage statt zur Page zu navigieren. window.v3CopyPermalink in
v2/screens/antrag_detail.html (wird via super() von v3 mitvererbt).
Link-Text 'Permalink kopieren', 1.6s 'Permalink kopiert ✓'-Flash
nach Copy. Fallback auf window.prompt() wenn Clipboard-API fehlt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-05-07 15:27:33 +02:00
parent 332453b940
commit c8bce35a16
3 changed files with 37 additions and 2 deletions

View File

@ -461,8 +461,10 @@
JSON-Export JSON-Export
</a> </a>
<a href="/antrag/{{ antrag.drucksache }}" <a href="/antrag/{{ antrag.drucksache }}"
onclick="v3CopyPermalink(event, this)"
data-copied-label="Permalink kopiert ✓"
style="color:var(--ecg-blue);border-bottom:1px solid rgba(0,157,165,0.35);"> style="color:var(--ecg-blue);border-bottom:1px solid rgba(0,157,165,0.35);">
Permalink Permalink kopieren
</a> </a>
</div> </div>
{% endblock %} {% endblock %}
@ -876,6 +878,25 @@ window.v2ShowMatrixFieldInfo = function(field) {
return lines.join('\n'); return lines.join('\n');
} }
/* Permalink-Klick kopiert in die Zwischenablage statt zu navigieren. */
window.v3CopyPermalink = function (e, el) {
e.preventDefault();
var permalink = window.location.origin + el.getAttribute('href');
var orig = el.textContent;
var done = el.dataset.copiedLabel || 'Kopiert ✓';
function flash() {
el.textContent = done;
setTimeout(function () { el.textContent = orig; }, 1600);
}
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(permalink).then(flash, function () {
window.prompt('Permalink kopieren:', permalink);
});
} else {
window.prompt('Permalink kopieren:', permalink);
}
};
window.v2DetailShare = function(platform) { window.v2DetailShare = function(platform) {
if (platform === 'linkedin') { if (platform === 'linkedin') {
// LinkedIn hat /sharing/share-offsite/ zurueckgebaut — der prefillt // LinkedIn hat /sharing/share-offsite/ zurueckgebaut — der prefillt

View File

@ -408,7 +408,9 @@
<a href="{{ antrag.link }}" target="_blank" rel="noopener">Original-Antrag (Landtag)</a> <a href="{{ antrag.link }}" target="_blank" rel="noopener">Original-Antrag (Landtag)</a>
{% endif %} {% endif %}
<a href="/api/assessment?drucksache={{ antrag.drucksache | urlencode }}">JSON-Export</a> <a href="/api/assessment?drucksache={{ antrag.drucksache | urlencode }}">JSON-Export</a>
<a href="/antrag/{{ antrag.drucksache }}">Permalink</a> <a href="/antrag/{{ antrag.drucksache }}"
onclick="v3CopyPermalink(event, this)"
data-copied-label="Permalink kopiert ✓">Permalink kopieren</a>
</div> </div>
{# News-Box (per JS gefuellt) — eine Nachricht, max 9 Zeilen #} {# News-Box (per JS gefuellt) — eine Nachricht, max 9 Zeilen #}

View File

@ -247,6 +247,18 @@ WAHLPROGRAMME: dict[str, dict[str, dict]] = {
"FREIE WÄHLER": {"file": "fw-rp-2021.pdf", "titel": "FREIE WÄHLER Rheinland-Pfalz Wahlprogramm 2021", "partei": "FREIE WÄHLER Rheinland-Pfalz", "jahr": 2021, "seiten": 80}, "FREIE WÄHLER": {"file": "fw-rp-2021.pdf", "titel": "FREIE WÄHLER Rheinland-Pfalz Wahlprogramm 2021", "partei": "FREIE WÄHLER Rheinland-Pfalz", "jahr": 2021, "seiten": 80},
"FDP": {"file": "fdp-rp-2021.pdf", "titel": "FDP Rheinland-Pfalz Landtagswahlprogramm 2021", "partei": "FDP Rheinland-Pfalz", "jahr": 2021, "seiten": 100}, "FDP": {"file": "fdp-rp-2021.pdf", "titel": "FDP Rheinland-Pfalz Landtagswahlprogramm 2021", "partei": "FDP Rheinland-Pfalz", "jahr": 2021, "seiten": 100},
}, },
# Bundestag — keine bundesweiten Wahlprogramme im Repo, daher dienen
# die Grundsatzprogramme als Quelle. CSU + BSW haben keine Programme
# in der Registry und werden weiterhin als fehlend gemeldet.
# Diese Eintraege sind von embeddings.py separat indiziert (typ=parteiprogramm).
"BUND": {
"CDU": {"file": "cdu-grundsatzprogramm.pdf", "titel": "CDU Grundsatzprogramm 2024", "partei": "CDU", "jahr": 2024, "seiten": 64, "ist_grundsatz": True},
"SPD": {"file": "spd-grundsatzprogramm.pdf", "titel": "SPD Hamburger Programm 2007", "partei": "SPD", "jahr": 2007, "seiten": 78, "ist_grundsatz": True},
"GRÜNE": {"file": "gruene-grundsatzprogramm.pdf","titel": "Grüne Grundsatzprogramm 2020", "partei": "GRÜNE", "jahr": 2020, "seiten": 116, "ist_grundsatz": True},
"FDP": {"file": "fdp-grundsatzprogramm.pdf", "titel": "FDP Karlsruher Freiheitsthesen 2012","partei": "FDP", "jahr": 2012, "seiten": 31, "ist_grundsatz": True},
"AfD": {"file": "afd-grundsatzprogramm.pdf", "titel": "AfD Grundsatzprogramm 2016", "partei": "AfD", "jahr": 2016, "seiten": 96, "ist_grundsatz": True},
"LINKE": {"file": "linke-grundsatzprogramm.pdf", "titel": "DIE LINKE Erfurter Programm 2011", "partei": "LINKE", "jahr": 2011, "seiten": 84, "ist_grundsatz": True},
},
} }
# Pro Bundesland: Markdown-Übersichtsdatei mit Wahlprogramm-Zusammenfassungen, # Pro Bundesland: Markdown-Übersichtsdatei mit Wahlprogramm-Zusammenfassungen,