Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | 1x 1x 1x 45x 11x 11x 25x 25x 11x 11x 25x 25x 25x 25x 25x 25x 25x 25x 55x 55x 55x 55x 55x 55x 55x 55x 25x 55x 6x 49x 8x 41x | import { createParagraphFromMarkdown } from './createParagraphFromMarkdown';
import type { ContentModelTable } from 'roosterjs-content-model-types';
import {
applyTableFormat,
createTable,
createTableCell,
createTableRow,
} from 'roosterjs-content-model-dom';
import type { MarkdownToModelOptions } from '../types/MarkdownToModelOptions';
/**
* @internal
*/
export function createTableFromMarkdown(
tableLines: string[],
options: MarkdownToModelOptions
): ContentModelTable {
const tableDivider = tableLines[1].split('|').filter(content => content.trim() !== '');
tableLines.splice(1, 1);
const table = createTable(
0,
options.direction
? { borderCollapse: true, direction: options.direction }
: { borderCollapse: true }
);
for (const line of tableLines) {
createTableModel(line, table, tableDivider, options);
}
applyTableFormat(table, {
hasHeaderRow: true,
});
return table;
}
function createTableModel(
markdown: string,
table: ContentModelTable,
tableDivider: string[],
options: MarkdownToModelOptions
) {
const contents = markdown.split('|');
Eif (contents[0].trim() === '') {
contents.shift();
}
Eif (contents[contents.length - 1].trim() === '') {
contents.pop();
}
addTableRow(table, contents, tableDivider, options);
}
function addTableRow(
table: ContentModelTable,
contents: string[],
tableDivider: string[],
options: MarkdownToModelOptions
) {
const row = createTableRow(options.direction ? { direction: options.direction } : undefined);
let index = 0;
for (const content of contents) {
const paragraph = createParagraphFromMarkdown(content, options);
const cell = createTableCell(
undefined /* spanLeftOrColSpan */,
undefined /* spanAboveOrRowSpan */,
undefined /* isHeader */,
options.direction ? { direction: options.direction } : undefined
);
cell.blocks.push(paragraph);
Eif (tableDivider[index]) {
cell.format.textAlign = getCellAlignment(tableDivider[index]);
}
row.cells.push(cell);
index++;
}
table.rows.push(row);
}
function getCellAlignment(content: string) {
if (content.startsWith(':') && content.endsWith(':')) {
return 'center';
}
if (content.endsWith(':')) {
return 'end';
}
return 'start';
}
|