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 | 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x | import { adjustTableIndentation } from '../../modelApi/common/adjustIndentation';
import { createTableStructure } from '../../modelApi/table/createTableStructure';
import {
createContentModelDocument,
createSelectionMarker,
applyTableFormat,
deleteSelection,
mergeModel,
normalizeTable,
setSelection,
} from 'roosterjs-content-model-dom';
import type { IEditor, TableMetadataFormat } from 'roosterjs-content-model-types';
/**
* Insert table into editor at current selection
* @param editor The editor instance
* @param columns Number of columns in table, it also controls the default table cell width:
* if columns <= 4, width = 120px; if columns <= 6, width = 100px; else width = 70px
* @param rows Number of rows in table
* @param format (Optional) The table format. If not passed, the default format will be applied:
* background color: #FFF; border color: #ABABAB
*/
export function insertTable(
editor: IEditor,
columns: number,
rows: number,
format?: Partial<TableMetadataFormat>
) {
editor.focus();
editor.formatContentModel(
(model, context) => {
const insertPosition = deleteSelection(model, [], context).insertPoint;
Eif (insertPosition) {
const doc = createContentModelDocument();
const table = createTableStructure(doc, columns, rows);
normalizeTable(table, editor.getPendingFormat() || insertPosition.marker.format);
adjustTableIndentation(insertPosition, table);
// Assign default vertical align
format = format || { verticalAlign: 'top' };
applyTableFormat(table, format);
mergeModel(model, doc, context, {
insertPosition,
mergeFormat: 'mergeAll',
});
const firstBlock = table.rows[0]?.cells[0]?.blocks[0];
Eif (firstBlock?.blockType == 'Paragraph') {
const marker = createSelectionMarker(firstBlock.segments[0]?.format);
firstBlock.segments.unshift(marker);
setSelection(model, marker);
}
return true;
} else {
return false;
}
},
{
apiName: 'insertTable',
}
);
}
|