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:
@@ -851,7 +851,7 @@ const App = {
|
|||||||
if (incident.summary && incident.type === 'research') {
|
if (incident.summary && incident.type === 'research') {
|
||||||
const { zusammenfassung, remaining } = UI.extractZusammenfassung(incident.summary);
|
const { zusammenfassung, remaining } = UI.extractZusammenfassung(incident.summary);
|
||||||
if (zusammenfassung) {
|
if (zusammenfassung) {
|
||||||
if (zusammenfassungText) zusammenfassungText.innerHTML = UI.renderZusammenfassung(zusammenfassung);
|
if (zusammenfassungText) zusammenfassungText.innerHTML = UI.renderZusammenfassung(zusammenfassung, incident.sources_json);
|
||||||
if (zusammenfassungCard) zusammenfassungCard.style.display = '';
|
if (zusammenfassungCard) zusammenfassungCard.style.display = '';
|
||||||
summaryText.innerHTML = UI.renderSummary(remaining, incident.sources_json, incident.type);
|
summaryText.innerHTML = UI.renderSummary(remaining, incident.sources_json, incident.type);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -712,8 +712,10 @@ const UI = {
|
|||||||
/**
|
/**
|
||||||
* Rendert die Zusammenfassung als HTML (Bullet Points).
|
* 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>';
|
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);
|
let html = this.escape(text);
|
||||||
// Bullet points
|
// Bullet points
|
||||||
html = html.replace(/^- (.+)$/gm, '<li>$1</li>');
|
html = html.replace(/^- (.+)$/gm, '<li>$1</li>');
|
||||||
@@ -721,6 +723,21 @@ const UI = {
|
|||||||
// Zeilenumbrueche
|
// Zeilenumbrueche
|
||||||
html = html.replace(/\n(?!<)/g, '<br>');
|
html = html.replace(/\n(?!<)/g, '<br>');
|
||||||
html = html.replace(/(<br>){2,}/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;
|
return html;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren