UNPKG

2.38 kBJavaScriptView Raw
1/**
2 * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3 * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4 */
5import { normalizeColumnWidths, updateColumnElements, getColumnGroupElement, getTableColumnElements, getTableColumnsWidths } from './utils';
6/**
7 * Returns a upcast helper that ensures the number of `<tableColumn>` elements corresponds to the actual number of columns in the table,
8 * because the input data might have too few or too many <col> elements.
9 */
10export function upcastColgroupElement(tableUtilsPlugin) {
11 return dispatcher => dispatcher.on('element:colgroup', (evt, data, conversionApi) => {
12 const modelTable = data.modelCursor.findAncestor('table');
13 const tableColumnGroup = getColumnGroupElement(modelTable);
14 if (!tableColumnGroup) {
15 return;
16 }
17 const columnElements = getTableColumnElements(tableColumnGroup);
18 let columnWidths = getTableColumnsWidths(tableColumnGroup);
19 const columnsCount = tableUtilsPlugin.getColumns(modelTable);
20 columnWidths = Array.from({ length: columnsCount }, (_, index) => columnWidths[index] || 'auto');
21 if (columnWidths.length != columnElements.length || columnWidths.includes('auto')) {
22 updateColumnElements(columnElements, tableColumnGroup, normalizeColumnWidths(columnWidths), conversionApi.writer);
23 }
24 }, { priority: 'low' });
25}
26/**
27 * Returns downcast helper for adding `ck-table-resized` class if there is a `<tableColumnGroup>` element inside the table.
28 */
29export function downcastTableResizedClass() {
30 return dispatcher => dispatcher.on('insert:table', (evt, data, conversionApi) => {
31 const viewWriter = conversionApi.writer;
32 const modelTable = data.item;
33 const viewElement = conversionApi.mapper.toViewElement(modelTable);
34 const viewTable = viewElement.is('element', 'table') ?
35 viewElement :
36 Array.from(viewElement.getChildren()).find(viewChild => viewChild.is('element', 'table'));
37 const tableColumnGroup = getColumnGroupElement(modelTable);
38 if (tableColumnGroup) {
39 viewWriter.addClass('ck-table-resized', viewTable);
40 }
41 else {
42 viewWriter.removeClass('ck-table-resized', viewTable);
43 }
44 }, { priority: 'low' });
45}