feat(observer): table-to-codeblock conversion for Discord compatibility (v0.5.57) #task-634
This commit is contained in:
@@ -504,6 +504,48 @@ export function generateApprovalObserverScript(_port: number): string {
|
||||
childrenMd += convertNodeToMarkdown(node.childNodes[i]);
|
||||
}
|
||||
|
||||
// TABLE: Discord doesn't support markdown tables, so convert to fixed-width code block
|
||||
if (tag === 'table') {
|
||||
var rows = node.querySelectorAll('tr');
|
||||
if (!rows || rows.length === 0) return childrenMd;
|
||||
var grid = [];
|
||||
var colWidths = [];
|
||||
for (var ri = 0; ri < rows.length; ri++) {
|
||||
var cells = rows[ri].querySelectorAll('th, td');
|
||||
var row = [];
|
||||
for (var ci = 0; ci < cells.length; ci++) {
|
||||
var cellText = (cells[ci].textContent || '').trim();
|
||||
row.push(cellText);
|
||||
if (!colWidths[ci] || cellText.length > colWidths[ci]) colWidths[ci] = cellText.length;
|
||||
}
|
||||
grid.push(row);
|
||||
}
|
||||
// Build fixed-width text
|
||||
var tbl = '';
|
||||
for (var ri2 = 0; ri2 < grid.length; ri2++) {
|
||||
var line = '';
|
||||
for (var ci2 = 0; ci2 < colWidths.length; ci2++) {
|
||||
var cell = grid[ri2][ci2] || '';
|
||||
var pad = colWidths[ci2] - cell.length;
|
||||
var padding = '';
|
||||
for (var pi = 0; pi < pad; pi++) padding += ' ';
|
||||
line += (ci2 > 0 ? ' | ' : '') + cell + padding;
|
||||
}
|
||||
tbl += line + '\\n';
|
||||
// Add separator after header row (first row)
|
||||
if (ri2 === 0) {
|
||||
var sep = '';
|
||||
for (var si2 = 0; si2 < colWidths.length; si2++) {
|
||||
var dashes = '';
|
||||
for (var di = 0; di < colWidths[si2]; di++) dashes += '-';
|
||||
sep += (si2 > 0 ? '-+-' : '') + dashes;
|
||||
}
|
||||
tbl += sep + '\\n';
|
||||
}
|
||||
}
|
||||
return '\\n' + String.fromCharCode(96,96,96) + '\\n' + tbl + String.fromCharCode(96,96,96) + '\\n';
|
||||
}
|
||||
|
||||
switch (tag) {
|
||||
case 'h1': return '\\n# ' + childrenMd.trim() + '\\n';
|
||||
case 'h2': return '\\n## ' + childrenMd.trim() + '\\n';
|
||||
@@ -536,6 +578,13 @@ export function generateApprovalObserverScript(_port: number): string {
|
||||
case 'ul':
|
||||
case 'ol': return '\\n' + childrenMd + '\\n';
|
||||
case 'blockquote': return '\\n> ' + childrenMd.trim().split('\\n').join('\\n> ') + '\\n';
|
||||
// Table sub-elements: already handled by the table case above via querySelectorAll
|
||||
case 'thead':
|
||||
case 'tbody':
|
||||
case 'tfoot':
|
||||
case 'tr':
|
||||
case 'th':
|
||||
case 'td': return '';
|
||||
default: return childrenMd;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user