From eeedf85d7e34b1847a461e41143b38bf6f275614 Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Thu, 7 May 2026 08:01:00 +0200 Subject: [PATCH] refactor(Phase 17 follow-up): copyDraftToClipboard nutzt data-pm-id statt JSON.stringify im onclick MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vorher: `onclick="copyDraftToClipboard(this, ${JSON.stringify(...).replace(/"/g, '"')}, ...)"` β€” funktional korrekt, aber Pattern-anfaellig (gleiche Klasse wie der merkliste-bug aus Phase 17). Plus < und > waren nicht escaped. Nachher: Button traegt nur eine numerische data-pm-id; der Handler fetched den Draft per API und kopiert den Body. Robuster, weniger Quote-Escaping, einheitlicher mit dem versionsHtml-Pattern oben in derselben Datei. Co-Authored-By: Claude Opus 4.7 (1M context) --- app/templates/v2/screens/aktuelle-themen.html | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/templates/v2/screens/aktuelle-themen.html b/app/templates/v2/screens/aktuelle-themen.html index 3e9a553..85b5e88 100644 --- a/app/templates/v2/screens/aktuelle-themen.html +++ b/app/templates/v2/screens/aktuelle-themen.html @@ -683,7 +683,7 @@ async function showDraftFromData(d) { const actionRow = `
${isMailtoTooLong ? 'PM zu lang fΓΌr Mail-Link β€” Clipboard nutzen.' : `πŸ“§ Per Mail versenden`} - + πŸ“„ PDF
`; @@ -745,7 +745,19 @@ async function loadVersion(draftId) { } catch (e) { alert('Fehler: ' + e); } } -async function copyDraftToClipboard(btn, titel, body) { +async function copyDraftToClipboard(btn) { + // Daten aus dem Modal-State holen β€” vermeidet HTML-Attribut-Quoting- + // Probleme mit JSON.stringify (siehe ADR 0011 Folge-Erkenntnis). + const draftId = btn.dataset.pmId; + let titel = '', body = ''; + try { + const r = await fetch(`/api/aktuelle-themen/drafts/${draftId}`); + if (r.ok) { + const d = await r.json(); + titel = d.titel || ''; + body = d.body || ''; + } + } catch (_) {} const text = titel + '\n\n' + body; try { await navigator.clipboard.writeText(text);