Feature: Markdown-Tabellen in Lagebildern

Analyzer-Prompts erlauben jetzt Tabellen wenn Daten sich strukturiert
vergleichen lassen (Produkte, Modelle, Kennzahlen etc.).
Frontend parst Markdown-Tabellensyntax und rendert sie als HTML-Tabellen
mit passendem Styling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-04-10 17:41:07 +00:00
Ursprung e2e6a1ed7e
Commit 565ce84abf
3 geänderte Dateien mit 51 neuen und 1 gelöschten Zeilen

Datei anzeigen

@@ -28,7 +28,8 @@ AUFTRAG:
STRUKTUR: STRUKTUR:
- Wenn die Meldungen thematisch klar einen einzelnen Strang behandeln: Fließtext ohne Überschriften - Wenn die Meldungen thematisch klar einen einzelnen Strang behandeln: Fließtext ohne Überschriften
- Wenn verschiedene Aspekte oder Themenfelder aufkommen (z.B. Ereignis + Reaktionen + Hintergrund): Gliedere mit kurzen Markdown-Zwischenüberschriften (##) - Wenn verschiedene Aspekte oder Themenfelder aufkommen (z.B. Ereignis + Reaktionen + Hintergrund): Gliedere mit kurzen Markdown-Zwischenüberschriften (##)
- Die Entscheidung liegt bei dir — Überschriften nur wenn sie dem Leser helfen, verschiedene Themenstränge auseinanderzuhalten - Wenn sich Daten strukturiert vergleichen lassen (z.B. Produkte, Unternehmen, Kennzahlen, Modelle), verwende eine Markdown-Tabelle (| Spalte1 | Spalte2 | ... mit Trennzeile |---|---|)
- Die Entscheidung liegt bei dir — Überschriften und Tabellen nur wenn sie dem Leser helfen
REGELN: REGELN:
- Neutral und sachlich - keine Wertungen oder Spekulationen - Neutral und sachlich - keine Wertungen oder Spekulationen
@@ -130,6 +131,7 @@ AUFTRAG:
STRUKTUR: STRUKTUR:
- Fließtext oder mit Markdown-Zwischenüberschriften (##) — je nach Komplexität - Fließtext oder mit Markdown-Zwischenüberschriften (##) — je nach Komplexität
- Wenn sich Daten strukturiert vergleichen lassen (z.B. Produkte, Unternehmen, Kennzahlen, Modelle), verwende eine Markdown-Tabelle (| Spalte1 | Spalte2 | ... mit Trennzeile |---|---|)
- KEIN Fettdruck (**) verwenden - KEIN Fettdruck (**) verwenden
REGELN: REGELN:

Datei anzeigen

@@ -2653,6 +2653,37 @@ a:hover {
color: var(--text-secondary); color: var(--text-secondary);
} }
/* === Summary Tables === */
.summary-table-wrap {
overflow-x: auto;
margin: 12px 0;
}
.summary-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
line-height: 1.5;
}
.summary-table th,
.summary-table td {
padding: 8px 12px;
border: 1px solid var(--border);
text-align: left;
vertical-align: top;
}
.summary-table th {
background: var(--bg-secondary);
color: var(--text-primary);
font-weight: 600;
white-space: nowrap;
}
.summary-table td {
color: var(--text-secondary);
}
.summary-table tbody tr:hover {
background: var(--bg-hover);
}
/* === Responsive === */ /* === Responsive === */
@media (max-width: 768px) { @media (max-width: 768px) {

Datei anzeigen

@@ -702,6 +702,23 @@ const UI = {
html = html.replace(/<\/ul>(<br>)+/g, '</ul>'); html = html.replace(/<\/ul>(<br>)+/g, '</ul>');
html = html.replace(/(<br>){2,}/g, '<br>'); html = html.replace(/(<br>){2,}/g, '<br>');
// Markdown-Tabellen rendern
html = html.replace(/(?:^|<br>)((?:\|.+\|(?:<br>|$))+)/g, function(match, tableBlock) {
var rows = tableBlock.split('<br>').filter(function(r) { return r.trim().length > 0; });
if (rows.length < 2) return match;
var isSep = function(r) { return /^\|[\s\-:|]+\|$/.test(r.trim()); };
if (!isSep(rows[1])) return match;
var parseRow = function(r) { return r.split('|').slice(1, -1).map(function(c) { return c.trim(); }); };
var headerCells = parseRow(rows[0]);
var thead = '<thead><tr>' + headerCells.map(function(c) { return '<th>' + c + '</th>'; }).join('') + '</tr></thead>';
var tbody = '<tbody>' + rows.slice(2).map(function(r) {
if (isSep(r)) return '';
var cells = parseRow(r);
return '<tr>' + cells.map(function(c) { return '<td>' + c + '</td>'; }).join('') + '</tr>';
}).join('') + '</tbody>';
return '<div class="summary-table-wrap"><table class="summary-table">' + thead + tbody + '</table></div>';
});
// Inline-Zitate [1], [2], [1383a] etc. als klickbare Links rendern // Inline-Zitate [1], [2], [1383a] etc. als klickbare Links rendern
if (sources.length > 0) { if (sources.length > 0) {
html = html.replace(/\[(\d+[a-z]?)\]/g, (match, num) => { html = html.replace(/\[(\d+[a-z]?)\]/g, (match, num) => {