Zusammenfassung-Kachel: Quellenverweise als klickbare Links

renderZusammenfassung bekommt jetzt sourcesJson und rendert
[1], [2] etc. als klickbare Links -- identisch zu renderSummary.
Dieser Commit ist enthalten in:
claude-dev
2026-04-11 22:34:04 +00:00
Ursprung db662f4538
Commit 509165484e
2 geänderte Dateien mit 19 neuen und 2 gelöschten Zeilen

Datei anzeigen

@@ -712,8 +712,10 @@ const UI = {
/**
* Rendert die Zusammenfassung als HTML (Bullet Points).
*/
renderZusammenfassung(text) {
renderZusammenfassung(text, sourcesJson) {
if (!text) return '<span style="color:var(--text-disabled);">Noch keine Zusammenfassung.</span>';
let sources = [];
try { sources = JSON.parse(sourcesJson || '[]'); } catch(e) {}
let html = this.escape(text);
// Bullet points
html = html.replace(/^- (.+)$/gm, '<li>$1</li>');
@@ -721,6 +723,21 @@ const UI = {
// Zeilenumbrueche
html = html.replace(/\n(?!<)/g, '<br>');
html = html.replace(/(<br>){2,}/g, '<br>');
// Inline-Zitate als klickbare Links
if (sources.length > 0) {
html = html.replace(/\[(\d+[a-z]?)\]/g, (match, num) => {
let src = sources.find(s => String(s.nr) === num || Number(s.nr) === Number(num));
if ((!src || !src.url) && /[a-z]$/.test(num)) {
const baseNum = num.replace(/[a-z]$/, '');
const baseSrc = sources.find(s => String(s.nr) === baseNum || Number(s.nr) === Number(baseNum));
if (baseSrc && baseSrc.url) src = baseSrc;
}
if (src && src.url) {
return `<a href="${this.escape(src.url)}" target="_blank" rel="noopener" class="citation" title="${this.escape(src.name)}">[${num}]</a>`;
}
return match;
});
}
return html;
},