Fixed partner message reader

This commit is contained in:
2026-10-24 15:18:34 +02:00
parent 1233f15b91
commit 631a0b7a9a
3 changed files with 256 additions and 15 deletions
@@ -62,11 +62,62 @@ export function parseMarkdownToHtml(markdown: string): string {
return `<code style="background:#1e293b;color:#34d399;padding:2px 6px;border-radius:6px;font-family:monospace;font-size:12px;">${escaped}</code>`;
});
// Tables (| A | B |\n|---|---|\n| C | D |)
html = html.replace(/((?:\|[^\n]+\|\n?)+)/g, (match) => {
const rows = match.trim().split('\n');
if (rows.length < 2) return match;
const hasSeparator = rows[1] && rows[1].includes('---');
if (!hasSeparator) return match;
const parseCells = (row: string) =>
row
.split('|')
.slice(1, -1)
.map((c) => c.trim());
const headers = parseCells(rows[0]);
const bodyRows = rows.slice(2);
let tableHtml = `<div style="overflow-x:auto;margin:14px 0;"><table style="width:100%;border-collapse:collapse;border:1px solid #334155;border-radius:8px;font-size:12px;text-align:left;">`;
tableHtml += `<thead><tr style="background:#1e293b;color:#f8fafc;">`;
headers.forEach((h) => {
tableHtml += `<th style="padding:8px 12px;border:1px solid #334155;font-weight:600;">${h}</th>`;
});
tableHtml += `</tr></thead><tbody>`;
bodyRows.forEach((row, i) => {
const cells = parseCells(row);
const bg = i % 2 === 0 ? '#0f172a' : '#1e293b/40';
tableHtml += `<tr style="background:${bg};color:#cbd5e1;">`;
cells.forEach((c) => {
tableHtml += `<td style="padding:8px 12px;border:1px solid #334155;">${c}</td>`;
});
tableHtml += `</tr>`;
});
tableHtml += `</tbody></table></div>`;
return tableHtml;
});
html = html.replace(/^#### (.*?)$/gm, '<h4 style="font-size:14px;font-weight:700;color:#f8fafc;margin:12px 0 6px 0;">$1</h4>');
html = html.replace(/^### (.*?)$/gm, '<h3 style="font-size:16px;font-weight:700;color:#f8fafc;margin:14px 0 8px 0;">$1</h3>');
html = html.replace(/^## (.*?)$/gm, '<h2 style="font-size:18px;font-weight:800;color:#ffffff;margin:16px 0 8px 0;border-bottom:1px solid #1e293b;padding-bottom:6px;">$1</h2>');
html = html.replace(/^# (.*?)$/gm, '<h1 style="font-size:22px;font-weight:800;color:#ffffff;margin:18px 0 10px 0;border-bottom:1px solid #334155;padding-bottom:8px;">$1</h1>');
// Blockquotes and GitHub alerts
html = html.replace(/^>\s*\[!NOTE\]\s*(.*?)$/gim, '<div style="background:#0c4a6e22;border-left:4px solid #0284c7;padding:10px 14px;border-radius:8px;margin:10px 0;color:#bae6fd;font-size:12px;"><strong>NOTE:</strong> $1</div>');
html = html.replace(/^>\s*\[!IMPORTANT\]\s*(.*?)$/gim, '<div style="background:#83184322;border-left:4px solid #db2777;padding:10px 14px;border-radius:8px;margin:10px 0;color:#fbcfe8;font-size:12px;"><strong>IMPORTANT:</strong> $1</div>');
html = html.replace(/^>\s*\[!WARNING\]\s*(.*?)$/gim, '<div style="background:#713f1222;border-left:4px solid #d97706;padding:10px 14px;border-radius:8px;margin:10px 0;color:#fef08a;font-size:12px;"><strong>WARNING:</strong> $1</div>');
html = html.replace(/^>\s*\[!TIP\]\s*(.*?)$/gim, '<div style="background:#064e3b22;border-left:4px solid #059669;padding:10px 14px;border-radius:8px;margin:10px 0;color:#a7f3d0;font-size:12px;"><strong>TIP:</strong> $1</div>');
html = html.replace(/^>\s*(.*?)$/gm, '<blockquote style="border-left:3px solid #10b981;padding-left:12px;margin:8px 0;color:#94a3b8;font-style:italic;">$1</blockquote>');
// Horizontal Rules (---)
html = html.replace(/^(?:---|\*\*\*|___)\s*$/gm, '<hr style="border:none;border-top:1px solid #334155;margin:16px 0;" />');
// Strikethrough
html = html.replace(/~~(.*?)~~/g, '<del style="color:#64748b;">$1</del>');
html = html.replace(/\*\*\*(.*?)\*\*\*/g, '<strong><em>$1</em></strong>');
html = html.replace(/\*\*(.*?)\*\*/g, '<strong style="color:#ffffff;">$1</strong>');
html = html.replace(/__(.*?)__/g, '<strong style="color:#ffffff;">$1</strong>');