@ckeditor/ckeditor5-table 0.0.0-nightly-next-20260108.0 → 0.0.0-nightly-20260109.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/table.js +5 -0
- package/build/translations/af.js +1 -0
- package/build/translations/ar.js +1 -0
- package/build/translations/ast.js +1 -0
- package/build/translations/az.js +1 -0
- package/build/translations/be.js +1 -0
- package/build/translations/bg.js +1 -0
- package/build/translations/bn.js +1 -0
- package/build/translations/bs.js +1 -0
- package/build/translations/ca.js +1 -0
- package/build/translations/cs.js +1 -0
- package/build/translations/da.js +1 -0
- package/build/translations/de-ch.js +1 -0
- package/build/translations/de.js +1 -0
- package/build/translations/el.js +1 -0
- package/build/translations/en-au.js +1 -0
- package/build/translations/en-gb.js +1 -0
- package/build/translations/eo.js +1 -0
- package/build/translations/es-co.js +1 -0
- package/build/translations/es.js +1 -0
- package/build/translations/et.js +1 -0
- package/build/translations/eu.js +1 -0
- package/build/translations/fa.js +1 -0
- package/build/translations/fi.js +1 -0
- package/build/translations/fr.js +1 -0
- package/build/translations/gl.js +1 -0
- package/build/translations/gu.js +1 -0
- package/build/translations/he.js +1 -0
- package/build/translations/hi.js +1 -0
- package/build/translations/hr.js +1 -0
- package/build/translations/hu.js +1 -0
- package/build/translations/hy.js +1 -0
- package/build/translations/id.js +1 -0
- package/build/translations/it.js +1 -0
- package/build/translations/ja.js +1 -0
- package/build/translations/jv.js +1 -0
- package/build/translations/kk.js +1 -0
- package/build/translations/km.js +1 -0
- package/build/translations/kn.js +1 -0
- package/build/translations/ko.js +1 -0
- package/build/translations/ku.js +1 -0
- package/build/translations/lt.js +1 -0
- package/build/translations/lv.js +1 -0
- package/build/translations/ms.js +1 -0
- package/build/translations/nb.js +1 -0
- package/build/translations/ne.js +1 -0
- package/build/translations/nl.js +1 -0
- package/build/translations/no.js +1 -0
- package/build/translations/oc.js +1 -0
- package/build/translations/pl.js +1 -0
- package/build/translations/pt-br.js +1 -0
- package/build/translations/pt.js +1 -0
- package/build/translations/ro.js +1 -0
- package/build/translations/ru.js +1 -0
- package/build/translations/si.js +1 -0
- package/build/translations/sk.js +1 -0
- package/build/translations/sl.js +1 -0
- package/build/translations/sq.js +1 -0
- package/build/translations/sr-latn.js +1 -0
- package/build/translations/sr.js +1 -0
- package/build/translations/sv.js +1 -0
- package/build/translations/th.js +1 -0
- package/build/translations/ti.js +1 -0
- package/build/translations/tk.js +1 -0
- package/build/translations/tr.js +1 -0
- package/build/translations/tt.js +1 -0
- package/build/translations/ug.js +1 -0
- package/build/translations/uk.js +1 -0
- package/build/translations/ur.js +1 -0
- package/build/translations/uz.js +1 -0
- package/build/translations/vi.js +1 -0
- package/build/translations/zh-cn.js +1 -0
- package/build/translations/zh.js +1 -0
- package/ckeditor5-metadata.json +7 -16
- package/dist/index-content.css +30 -30
- package/dist/index-editor.css +170 -104
- package/dist/index.css +237 -147
- package/dist/index.css.map +1 -1
- package/dist/index.js +2433 -448
- package/dist/index.js.map +1 -1
- package/lang/contexts.json +4 -2
- package/package.json +35 -25
- package/{dist → src}/augmentation.d.ts +15 -4
- package/src/augmentation.js +5 -0
- package/{dist → src}/commands/insertcolumncommand.d.ts +1 -5
- package/src/commands/insertcolumncommand.js +71 -0
- package/{dist → src}/commands/insertrowcommand.d.ts +1 -5
- package/src/commands/insertrowcommand.js +70 -0
- package/{dist → src}/commands/inserttablecommand.d.ts +1 -5
- package/src/commands/inserttablecommand.js +69 -0
- package/{dist → src}/commands/inserttablelayoutcommand.d.ts +1 -5
- package/src/commands/inserttablelayoutcommand.js +65 -0
- package/{dist → src}/commands/mergecellcommand.d.ts +3 -7
- package/src/commands/mergecellcommand.js +206 -0
- package/{dist → src}/commands/mergecellscommand.d.ts +1 -5
- package/src/commands/mergecellscommand.js +94 -0
- package/{dist → src}/commands/removecolumncommand.d.ts +1 -5
- package/src/commands/removecolumncommand.js +109 -0
- package/{dist → src}/commands/removerowcommand.d.ts +1 -5
- package/src/commands/removerowcommand.js +82 -0
- package/{dist → src}/commands/selectcolumncommand.d.ts +1 -5
- package/src/commands/selectcolumncommand.js +60 -0
- package/{dist → src}/commands/selectrowcommand.d.ts +1 -5
- package/src/commands/selectrowcommand.js +56 -0
- package/{dist → src}/commands/setheadercolumncommand.d.ts +1 -5
- package/src/commands/setheadercolumncommand.js +76 -0
- package/{dist → src}/commands/setheaderrowcommand.d.ts +1 -5
- package/src/commands/setheaderrowcommand.js +83 -0
- package/{dist → src}/commands/splitcellcommand.d.ts +1 -5
- package/src/commands/splitcellcommand.js +58 -0
- package/{dist → src}/converters/downcast.d.ts +2 -6
- package/src/converters/downcast.js +298 -0
- package/{dist → src}/converters/table-caption-post-fixer.d.ts +1 -5
- package/src/converters/table-caption-post-fixer.js +55 -0
- package/{dist → src}/converters/table-cell-paragraph-post-fixer.d.ts +1 -5
- package/src/converters/table-cell-paragraph-post-fixer.js +109 -0
- package/{dist → src}/converters/table-cell-refresh-handler.d.ts +1 -5
- package/src/converters/table-cell-refresh-handler.js +47 -0
- package/{dist → src}/converters/table-headings-refresh-handler.d.ts +1 -5
- package/src/converters/table-headings-refresh-handler.js +51 -0
- package/{dist → src}/converters/table-layout-post-fixer.d.ts +1 -5
- package/src/converters/table-layout-post-fixer.js +369 -0
- package/{dist → src}/converters/tableproperties.d.ts +2 -6
- package/src/converters/tableproperties.js +444 -0
- package/{dist → src}/converters/upcasttable.d.ts +1 -5
- package/src/converters/upcasttable.js +385 -0
- package/{dist → src}/index.d.ts +5 -6
- package/src/index.js +98 -0
- package/{dist → src}/plaintableoutput.d.ts +1 -5
- package/src/plaintableoutput.js +49 -0
- package/{dist → src}/table.d.ts +2 -6
- package/src/table.js +50 -0
- package/{dist → src}/tablecaption/tablecaptionediting.d.ts +2 -6
- package/src/tablecaption/tablecaptionediting.js +136 -0
- package/{dist → src}/tablecaption/tablecaptionui.d.ts +1 -5
- package/src/tablecaption/tablecaptionui.js +64 -0
- package/{dist → src}/tablecaption/toggletablecaptioncommand.d.ts +1 -5
- package/src/tablecaption/toggletablecaptioncommand.js +105 -0
- package/{dist → src}/tablecaption/utils.d.ts +1 -5
- package/src/tablecaption/utils.js +61 -0
- package/{dist → src}/tablecaption.d.ts +1 -5
- package/src/tablecaption.js +34 -0
- package/{dist → src}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -0
- package/{dist → src}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -0
- package/{dist → src}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -0
- package/{dist → src}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -0
- package/{dist → src}/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -0
- package/{dist → src}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -0
- package/{dist → src}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -0
- package/{dist → src}/tablecellproperties/commands/tablecellpropertycommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellpropertycommand.js +138 -0
- package/{dist → src}/tablecellproperties/commands/tablecelltypecommand.d.ts +6 -6
- package/src/tablecellproperties/commands/tablecelltypecommand.js +167 -0
- package/{dist → src}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -0
- package/{dist → src}/tablecellproperties/tablecellpropertiesediting.d.ts +1 -5
- package/src/tablecellproperties/tablecellpropertiesediting.js +412 -0
- package/{dist → src}/tablecellproperties/tablecellpropertiesui.d.ts +2 -6
- package/src/tablecellproperties/tablecellpropertiesui.js +385 -0
- package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +128 -0
- package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +408 -0
- package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +229 -0
- package/src/tablecellproperties/ui/tablecellpropertiesview.js +612 -0
- package/{dist/tablecellproperties/ui/tablecellpropertiesview.d.ts → src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts} +12 -15
- package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +744 -0
- package/{dist → src}/tablecellproperties.d.ts +1 -5
- package/src/tablecellproperties.js +40 -0
- package/{dist → src}/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -5
- package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -0
- package/{dist → src}/tablecellwidth/tablecellwidthediting.d.ts +1 -5
- package/src/tablecellwidth/tablecellwidthediting.js +53 -0
- package/{dist → src}/tableclipboard.d.ts +3 -7
- package/src/tableclipboard.js +500 -0
- package/{dist → src}/tablecolumnresize/constants.d.ts +0 -4
- package/src/tablecolumnresize/constants.js +33 -0
- package/{dist → src}/tablecolumnresize/converters.d.ts +1 -5
- package/src/tablecolumnresize/converters.js +62 -0
- package/{dist → src}/tablecolumnresize/tablecolumnresizeediting.d.ts +2 -6
- package/src/tablecolumnresize/tablecolumnresizeediting.js +729 -0
- package/{dist → src}/tablecolumnresize/tablewidthscommand.d.ts +2 -6
- package/src/tablecolumnresize/tablewidthscommand.js +61 -0
- package/{dist → src}/tablecolumnresize/utils.d.ts +2 -6
- package/src/tablecolumnresize/utils.js +370 -0
- package/{dist → src}/tablecolumnresize.d.ts +1 -5
- package/src/tablecolumnresize.js +36 -0
- package/{dist → src}/tableconfig.d.ts +6 -30
- package/src/tableconfig.js +5 -0
- package/{dist → src}/tableediting.d.ts +2 -6
- package/src/tableediting.js +246 -0
- package/{dist → src}/tablekeyboard.d.ts +3 -7
- package/src/tablekeyboard.js +273 -0
- package/{dist → src}/tablelayout/commands/tabletypecommand.d.ts +1 -5
- package/src/tablelayout/commands/tabletypecommand.js +68 -0
- package/{dist → src}/tablelayout/tablelayoutediting.d.ts +1 -5
- package/src/tablelayout/tablelayoutediting.js +295 -0
- package/{dist → src}/tablelayout/tablelayoutui.d.ts +1 -5
- package/src/tablelayout/tablelayoutui.js +196 -0
- package/{dist → src}/tablelayout.d.ts +1 -5
- package/src/tablelayout.js +37 -0
- package/{dist → src}/tablemouse/mouseeventsobserver.d.ts +1 -5
- package/src/tablemouse/mouseeventsobserver.js +34 -0
- package/{dist → src}/tablemouse.d.ts +1 -5
- package/src/tablemouse.js +178 -0
- package/{dist → src}/tableproperties/commands/tablealignmentcommand.d.ts +1 -5
- package/src/tableproperties/commands/tablealignmentcommand.js +30 -0
- package/{dist → src}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -5
- package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -0
- package/{dist → src}/tableproperties/commands/tablebordercolorcommand.d.ts +2 -6
- package/src/tableproperties/commands/tablebordercolorcommand.js +44 -0
- package/{dist → src}/tableproperties/commands/tableborderstylecommand.d.ts +2 -6
- package/src/tableproperties/commands/tableborderstylecommand.js +44 -0
- package/{dist → src}/tableproperties/commands/tableborderwidthcommand.d.ts +2 -6
- package/src/tableproperties/commands/tableborderwidthcommand.js +64 -0
- package/{dist → src}/tableproperties/commands/tableheightcommand.d.ts +1 -5
- package/src/tableproperties/commands/tableheightcommand.js +54 -0
- package/{dist → src}/tableproperties/commands/tablepropertycommand.d.ts +2 -6
- package/src/tableproperties/commands/tablepropertycommand.js +103 -0
- package/{dist → src}/tableproperties/commands/tablewidthcommand.d.ts +1 -5
- package/src/tableproperties/commands/tablewidthcommand.js +54 -0
- package/{dist → src}/tableproperties/tablepropertiesediting.d.ts +1 -5
- package/src/tableproperties/tablepropertiesediting.js +546 -0
- package/{dist → src}/tableproperties/tablepropertiesui.d.ts +2 -6
- package/src/tableproperties/tablepropertiesui.js +374 -0
- package/src/tableproperties/tablepropertiesuiexperimental.d.ts +136 -0
- package/src/tableproperties/tablepropertiesuiexperimental.js +375 -0
- package/{dist → src}/tableproperties/ui/tablepropertiesview.d.ts +2 -14
- package/src/tableproperties/ui/tablepropertiesview.js +520 -0
- package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +216 -0
- package/src/tableproperties/ui/tablepropertiesviewexperimental.js +544 -0
- package/{dist → src}/tableproperties.d.ts +1 -5
- package/src/tableproperties.js +40 -0
- package/{dist → src}/tableselection.d.ts +2 -6
- package/src/tableselection.js +323 -0
- package/{dist → src}/tabletoolbar.d.ts +2 -6
- package/src/tabletoolbar.js +63 -0
- package/{dist → src}/tableui.d.ts +1 -5
- package/src/tableui.js +335 -0
- package/{dist → src}/tableutils.d.ts +2 -6
- package/src/tableutils.js +1282 -0
- package/{dist → src}/tablewalker.d.ts +1 -5
- package/src/tablewalker.js +489 -0
- package/{dist → src}/ui/colorinputview.d.ts +2 -6
- package/src/ui/colorinputview.js +305 -0
- package/{dist → src}/ui/inserttableview.d.ts +2 -6
- package/src/ui/inserttableview.js +192 -0
- package/{dist → src}/utils/common.d.ts +2 -6
- package/src/utils/common.js +118 -0
- package/{dist → src}/utils/structure.d.ts +1 -5
- package/src/utils/structure.js +452 -0
- package/{dist → src}/utils/table-properties.d.ts +1 -5
- package/src/utils/table-properties.js +121 -0
- package/{dist → src}/utils/ui/contextualballoon.d.ts +2 -6
- package/src/utils/ui/contextualballoon.js +111 -0
- package/{dist → src}/utils/ui/table-properties.d.ts +2 -6
- package/src/utils/ui/table-properties.js +390 -0
- package/src/utils/ui/table-propertiesexperimental.d.ts +215 -0
- package/src/utils/ui/table-propertiesexperimental.js +391 -0
- package/{dist → src}/utils/ui/widget.d.ts +1 -5
- package/src/utils/ui/widget.js +56 -0
- package/theme/formrow-experimental.css +15 -0
- package/theme/formrow.css +0 -2
- package/theme/tablecellproperties-experimental.css +4 -0
- package/theme/tableform-experimental.css +61 -0
- package/theme/tableform.css +5 -1
- package/theme/tableproperties-experimental.css +78 -0
- package/theme/tableproperties.css +0 -60
- package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +0 -22
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,8 +5,8 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecellborderwidthcommand
|
|
11
7
|
*/
|
|
12
|
-
import type { Editor } from '
|
|
13
|
-
import type { ModelElement } from '
|
|
8
|
+
import type { Editor } from 'ckeditor5/src/core.js';
|
|
9
|
+
import type { ModelElement } from 'ckeditor5/src/engine.js';
|
|
14
10
|
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
15
11
|
/**
|
|
16
12
|
* The table cell border width command.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
6
|
+
import { addDefaultUnitToNumericValue, getSingleValue } from '../../utils/table-properties.js';
|
|
7
|
+
/**
|
|
8
|
+
* The table cell border width command.
|
|
9
|
+
*
|
|
10
|
+
* The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
|
|
11
|
+
* the `'tableCellBorderWidth'` editor command.
|
|
12
|
+
*
|
|
13
|
+
* To change the border width of selected cells, execute the command:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* editor.execute( 'tableCellBorderWidth', {
|
|
17
|
+
* value: '5px'
|
|
18
|
+
* } );
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* **Note**: This command adds the default `'px'` unit to numeric values. Executing:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* editor.execute( 'tableCellBorderWidth', {
|
|
25
|
+
* value: '5'
|
|
26
|
+
* } );
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* will set the `borderWidth` attribute to `'5px'` in the model.
|
|
30
|
+
*/
|
|
31
|
+
export class TableCellBorderWidthCommand extends TableCellPropertyCommand {
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new `TableCellBorderWidthCommand` instance.
|
|
34
|
+
*
|
|
35
|
+
* @param editor An editor in which this command will be used.
|
|
36
|
+
* @param defaultValue The default value of the attribute.
|
|
37
|
+
*/
|
|
38
|
+
constructor(editor, defaultValue) {
|
|
39
|
+
super(editor, 'tableCellBorderWidth', defaultValue);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @inheritDoc
|
|
43
|
+
*/
|
|
44
|
+
_getAttribute(tableCell) {
|
|
45
|
+
if (!tableCell) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const value = getSingleValue(tableCell.getAttribute(this.attributeName));
|
|
49
|
+
if (value === this._defaultValue) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @inheritDoc
|
|
56
|
+
*/
|
|
57
|
+
_getValueToSet(value) {
|
|
58
|
+
const newValue = addDefaultUnitToNumericValue(value, 'px');
|
|
59
|
+
if (newValue === this._defaultValue) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
return newValue;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,7 +5,7 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecellheightcommand
|
|
11
7
|
*/
|
|
12
|
-
import type { Editor } from '
|
|
8
|
+
import type { Editor } from 'ckeditor5/src/core.js';
|
|
13
9
|
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
14
10
|
/**
|
|
15
11
|
* The table cell height command.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
6
|
+
import { addDefaultUnitToNumericValue } from '../../utils/table-properties.js';
|
|
7
|
+
/**
|
|
8
|
+
* The table cell height command.
|
|
9
|
+
*
|
|
10
|
+
* The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
|
|
11
|
+
* the `'tableCellHeight'` editor command.
|
|
12
|
+
*
|
|
13
|
+
* To change the height of selected cells, execute the command:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* editor.execute( 'tableCellHeight', {
|
|
17
|
+
* value: '50px'
|
|
18
|
+
* } );
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* **Note**: This command adds the default `'px'` unit to numeric values. Executing:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* editor.execute( 'tableCellHeight', {
|
|
25
|
+
* value: '50'
|
|
26
|
+
* } );
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* will set the `height` attribute to `'50px'` in the model.
|
|
30
|
+
*/
|
|
31
|
+
export class TableCellHeightCommand extends TableCellPropertyCommand {
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new `TableCellHeightCommand` instance.
|
|
34
|
+
*
|
|
35
|
+
* @param editor An editor in which this command will be used.
|
|
36
|
+
* @param defaultValue The default value of the attribute.
|
|
37
|
+
*/
|
|
38
|
+
constructor(editor, defaultValue) {
|
|
39
|
+
super(editor, 'tableCellHeight', defaultValue);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @inheritDoc
|
|
43
|
+
*/
|
|
44
|
+
_getValueToSet(value) {
|
|
45
|
+
const newValue = addDefaultUnitToNumericValue(value, 'px');
|
|
46
|
+
if (newValue === this._defaultValue) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
return newValue;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,7 +5,7 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecellhorizontalalignmentcommand
|
|
11
7
|
*/
|
|
12
|
-
import type { Editor } from '
|
|
8
|
+
import type { Editor } from 'ckeditor5/src/core.js';
|
|
13
9
|
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
14
10
|
/**
|
|
15
11
|
* The table cell horizontal alignment command.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
6
|
+
/**
|
|
7
|
+
* The table cell horizontal alignment command.
|
|
8
|
+
*
|
|
9
|
+
* The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
|
|
10
|
+
* the `'tableCellHorizontalAlignment'` editor command.
|
|
11
|
+
*
|
|
12
|
+
* To change the horizontal text alignment of selected cells, execute the command:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* editor.execute( 'tableCellHorizontalAlignment', {
|
|
16
|
+
* value: 'right'
|
|
17
|
+
* } );
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class TableCellHorizontalAlignmentCommand extends TableCellPropertyCommand {
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new `TableCellHorizontalAlignmentCommand` instance.
|
|
23
|
+
*
|
|
24
|
+
* @param editor An editor in which this command will be used.
|
|
25
|
+
* @param defaultValue The default value for the "alignment" attribute.
|
|
26
|
+
*/
|
|
27
|
+
constructor(editor, defaultValue) {
|
|
28
|
+
super(editor, 'tableCellHorizontalAlignment', defaultValue);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,8 +5,8 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecellpaddingcommand
|
|
11
7
|
*/
|
|
12
|
-
import type { Editor } from '
|
|
13
|
-
import type { ModelElement } from '
|
|
8
|
+
import type { Editor } from 'ckeditor5/src/core.js';
|
|
9
|
+
import type { ModelElement } from 'ckeditor5/src/engine.js';
|
|
14
10
|
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
15
11
|
/**
|
|
16
12
|
* The table cell padding command.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
6
|
+
import { addDefaultUnitToNumericValue, getSingleValue } from '../../utils/table-properties.js';
|
|
7
|
+
/**
|
|
8
|
+
* The table cell padding command.
|
|
9
|
+
*
|
|
10
|
+
* The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
|
|
11
|
+
* the `'tableCellPadding'` editor command.
|
|
12
|
+
*
|
|
13
|
+
* To change the padding of selected cells, execute the command:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* editor.execute( 'tableCellPadding', {
|
|
17
|
+
* value: '5px'
|
|
18
|
+
* } );
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* **Note**: This command adds the default `'px'` unit to numeric values. Executing:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* editor.execute( 'tableCellPadding', {
|
|
25
|
+
* value: '5'
|
|
26
|
+
* } );
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* will set the `padding` attribute to `'5px'` in the model.
|
|
30
|
+
*/
|
|
31
|
+
export class TableCellPaddingCommand extends TableCellPropertyCommand {
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new `TableCellPaddingCommand` instance.
|
|
34
|
+
*
|
|
35
|
+
* @param editor An editor in which this command will be used.
|
|
36
|
+
* @param defaultValue The default value of the attribute.
|
|
37
|
+
*/
|
|
38
|
+
constructor(editor, defaultValue) {
|
|
39
|
+
super(editor, 'tableCellPadding', defaultValue);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @inheritDoc
|
|
43
|
+
*/
|
|
44
|
+
_getAttribute(tableCell) {
|
|
45
|
+
if (!tableCell) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const value = getSingleValue(tableCell.getAttribute(this.attributeName));
|
|
49
|
+
if (value === this._defaultValue) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @inheritDoc
|
|
56
|
+
*/
|
|
57
|
+
_getValueToSet(value) {
|
|
58
|
+
const newValue = addDefaultUnitToNumericValue(value, 'px');
|
|
59
|
+
if (newValue === this._defaultValue) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
return newValue;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,8 +5,8 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecellpropertycommand
|
|
11
7
|
*/
|
|
12
|
-
import { Command, type Editor } from '
|
|
13
|
-
import type { ModelElement, Batch, ModelWriter } from '
|
|
8
|
+
import { Command, type Editor } from 'ckeditor5/src/core.js';
|
|
9
|
+
import type { ModelElement, Batch, ModelWriter } from 'ckeditor5/src/engine.js';
|
|
14
10
|
/**
|
|
15
11
|
* The table cell attribute command.
|
|
16
12
|
*
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module table/tablecellproperties/commands/tablecellpropertycommand
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'ckeditor5/src/core.js';
|
|
9
|
+
import { getSelectionAffectedTable } from '../../utils/common.js';
|
|
10
|
+
/**
|
|
11
|
+
* The table cell attribute command.
|
|
12
|
+
*
|
|
13
|
+
* The command is a base command for other table cell property commands.
|
|
14
|
+
*/
|
|
15
|
+
export class TableCellPropertyCommand extends Command {
|
|
16
|
+
/**
|
|
17
|
+
* The attribute that will be set by the command.
|
|
18
|
+
*/
|
|
19
|
+
attributeName;
|
|
20
|
+
/**
|
|
21
|
+
* The default value for the attribute.
|
|
22
|
+
*
|
|
23
|
+
* @readonly
|
|
24
|
+
*/
|
|
25
|
+
_defaultValue;
|
|
26
|
+
/**
|
|
27
|
+
* The default value for the attribute for the content table.
|
|
28
|
+
*/
|
|
29
|
+
_defaultContentTableValue;
|
|
30
|
+
/**
|
|
31
|
+
* The default value for the attribute for the layout table.
|
|
32
|
+
*/
|
|
33
|
+
_defaultLayoutTableValue;
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new `TableCellPropertyCommand` instance.
|
|
36
|
+
*
|
|
37
|
+
* @param editor An editor in which this command will be used.
|
|
38
|
+
* @param attributeName Table cell attribute name.
|
|
39
|
+
* @param defaultValue The default value of the attribute.
|
|
40
|
+
*/
|
|
41
|
+
constructor(editor, attributeName, defaultValue) {
|
|
42
|
+
super(editor);
|
|
43
|
+
this.attributeName = attributeName;
|
|
44
|
+
this._defaultContentTableValue = defaultValue;
|
|
45
|
+
// Hardcoded defaults for layout table.
|
|
46
|
+
switch (attributeName) {
|
|
47
|
+
case 'tableCellType':
|
|
48
|
+
this._defaultLayoutTableValue = 'data';
|
|
49
|
+
break;
|
|
50
|
+
case 'tableCellBorderStyle':
|
|
51
|
+
this._defaultLayoutTableValue = 'none';
|
|
52
|
+
break;
|
|
53
|
+
case 'tableCellHorizontalAlignment':
|
|
54
|
+
this._defaultLayoutTableValue = 'left';
|
|
55
|
+
break;
|
|
56
|
+
case 'tableCellVerticalAlignment':
|
|
57
|
+
this._defaultLayoutTableValue = 'middle';
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
this._defaultLayoutTableValue = undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @inheritDoc
|
|
65
|
+
*/
|
|
66
|
+
refresh() {
|
|
67
|
+
const editor = this.editor;
|
|
68
|
+
const selection = editor.model.document.selection;
|
|
69
|
+
const tableUtils = this.editor.plugins.get('TableUtils');
|
|
70
|
+
const selectedTableCells = tableUtils.getSelectionAffectedTableCells(selection);
|
|
71
|
+
const table = getSelectionAffectedTable(selection);
|
|
72
|
+
this._defaultValue = !table || table.getAttribute('tableType') !== 'layout' ?
|
|
73
|
+
this._defaultContentTableValue :
|
|
74
|
+
this._defaultLayoutTableValue;
|
|
75
|
+
this.isEnabled = !!selectedTableCells.length;
|
|
76
|
+
this.value = this._getSingleValue(selectedTableCells);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Executes the command.
|
|
80
|
+
*
|
|
81
|
+
* @fires execute
|
|
82
|
+
* @param options.value If set, the command will set the attribute on selected table cells.
|
|
83
|
+
* If it is not set, the command will remove the attribute from the selected table cells.
|
|
84
|
+
* @param options.batch Pass the model batch instance to the command to aggregate changes,
|
|
85
|
+
* for example to allow a single undo step for multiple executions.
|
|
86
|
+
*/
|
|
87
|
+
execute(options = {}) {
|
|
88
|
+
const { value, batch } = options;
|
|
89
|
+
const model = this.editor.model;
|
|
90
|
+
const tableUtils = this.editor.plugins.get('TableUtils');
|
|
91
|
+
const tableCells = tableUtils.getSelectionAffectedTableCells(model.document.selection);
|
|
92
|
+
const valueToSet = this._getValueToSet(value);
|
|
93
|
+
model.enqueueChange(batch, writer => {
|
|
94
|
+
if (valueToSet) {
|
|
95
|
+
tableCells.forEach(tableCell => writer.setAttribute(this.attributeName, valueToSet, tableCell));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
tableCells.forEach(tableCell => writer.removeAttribute(this.attributeName, tableCell));
|
|
99
|
+
}
|
|
100
|
+
this.fire('afterExecute', {
|
|
101
|
+
writer,
|
|
102
|
+
tableCells,
|
|
103
|
+
valueToSet
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Returns the attribute value for a table cell.
|
|
109
|
+
*/
|
|
110
|
+
_getAttribute(tableCell) {
|
|
111
|
+
if (!tableCell) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const value = tableCell.getAttribute(this.attributeName);
|
|
115
|
+
if (value === this._defaultValue) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Returns the proper model value. It can be used to add a default unit to numeric values.
|
|
122
|
+
*/
|
|
123
|
+
_getValueToSet(value) {
|
|
124
|
+
if (value === this._defaultValue) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Returns a single value for all selected table cells. If the value is the same for all cells,
|
|
131
|
+
* it will be returned (`undefined` otherwise).
|
|
132
|
+
*/
|
|
133
|
+
_getSingleValue(tableCells) {
|
|
134
|
+
const firstCellValue = this._getAttribute(tableCells[0]);
|
|
135
|
+
const everyCellHasAttribute = tableCells.every(tableCells => this._getAttribute(tableCells) === firstCellValue);
|
|
136
|
+
return everyCellHasAttribute ? firstCellValue : undefined;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,8 +5,8 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecelltypecommand
|
|
11
7
|
*/
|
|
12
|
-
import type { Editor } from '
|
|
13
|
-
import type { ModelElement, ModelWriter } from '
|
|
8
|
+
import type { Editor } from 'ckeditor5/src/core.js';
|
|
9
|
+
import type { ModelElement, ModelWriter } from 'ckeditor5/src/engine.js';
|
|
14
10
|
import { TableUtils } from '../../tableutils.js';
|
|
15
11
|
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
16
12
|
/**
|
|
@@ -46,6 +42,10 @@ export declare class TableCellTypeCommand extends TableCellPropertyCommand {
|
|
|
46
42
|
*/
|
|
47
43
|
protected _getAttribute(tableCell: ModelElement | undefined): unknown;
|
|
48
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Type of the table cell.
|
|
47
|
+
*/
|
|
48
|
+
export type TableCellType = 'data' | 'header';
|
|
49
49
|
/**
|
|
50
50
|
* Updates the `headingRows` and `headingColumns` attributes of the given tables
|
|
51
51
|
* based on the `tableCellType` of their cells.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
import { TableUtils } from '../../tableutils.js';
|
|
6
|
+
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
7
|
+
import { groupCellsByTable, getSelectionAffectedTable } from '../../utils/common.js';
|
|
8
|
+
import { TableWalker } from '../../tablewalker.js';
|
|
9
|
+
/**
|
|
10
|
+
* The table cell type command.
|
|
11
|
+
*
|
|
12
|
+
* The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
|
|
13
|
+
* the `'tableCellType'` editor command.
|
|
14
|
+
*
|
|
15
|
+
* To change the type of selected cells, execute the command:
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* editor.execute( 'tableCellType', {
|
|
19
|
+
* value: 'header'
|
|
20
|
+
* } );
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* The `value` can be either `'header'` or `'data'`.
|
|
24
|
+
* It'll return `undefined` if multiple types are selected.
|
|
25
|
+
*/
|
|
26
|
+
export class TableCellTypeCommand extends TableCellPropertyCommand {
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new `TableCellTypeCommand` instance.
|
|
29
|
+
*
|
|
30
|
+
* @param editor An editor in which this command will be used.
|
|
31
|
+
*/
|
|
32
|
+
constructor(editor) {
|
|
33
|
+
super(editor, 'tableCellType', 'data');
|
|
34
|
+
this.on('afterExecute', (_, data) => {
|
|
35
|
+
const { writer, tableCells } = data;
|
|
36
|
+
const tableUtils = this.editor.plugins.get(TableUtils);
|
|
37
|
+
const tablesMap = groupCellsByTable(tableCells);
|
|
38
|
+
updateTablesHeadingAttributes(tableUtils, writer, tablesMap.keys());
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @inheritDoc
|
|
43
|
+
*/
|
|
44
|
+
refresh() {
|
|
45
|
+
super.refresh();
|
|
46
|
+
const table = getSelectionAffectedTable(this.editor.model.document.selection);
|
|
47
|
+
if (this.isEnabled && table && table.getAttribute('tableType') === 'layout') {
|
|
48
|
+
this.isEnabled = false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the attribute value for a table cell.
|
|
53
|
+
*/
|
|
54
|
+
_getAttribute(tableCell) {
|
|
55
|
+
return tableCell?.getAttribute(this.attributeName) || 'data';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Updates the `headingRows` and `headingColumns` attributes of the given tables
|
|
60
|
+
* based on the `tableCellType` of their cells.
|
|
61
|
+
*/
|
|
62
|
+
export function updateTablesHeadingAttributes(tableUtils, writer, tables) {
|
|
63
|
+
let changed = false;
|
|
64
|
+
for (const table of tables) {
|
|
65
|
+
let headingRows = table.getAttribute('headingRows') || 0;
|
|
66
|
+
let headingColumns = table.getAttribute('headingColumns') || 0;
|
|
67
|
+
// Prioritize the dimension that is already larger to prevent the other dimension from
|
|
68
|
+
// aggressively consuming "orphaned" header cells. In other words, if table has three
|
|
69
|
+
// heading columns (which fills entire table), we should not count all rows as heading rows.
|
|
70
|
+
// User might later add column to the right which should not be heading.
|
|
71
|
+
//
|
|
72
|
+
// The other example, in a 2x2 table where all cells are headers (e.g. due to concurrent edits),
|
|
73
|
+
// if headingColumns=0 and headingRows=0 (but all cells are headers):
|
|
74
|
+
// - Processing rows first would expand headingRows to 2 (covering all cells), leaving headingColumns at 0.
|
|
75
|
+
// - Processing columns first expands headingColumns to 2, leaving headingRows at 0.
|
|
76
|
+
//
|
|
77
|
+
// It should be good enough to resolve conflicts in most cases.
|
|
78
|
+
const processColumnsFirst = headingColumns > headingRows;
|
|
79
|
+
if (processColumnsFirst) {
|
|
80
|
+
const newHeadingColumns = getAdjustedHeadingSectionSize(tableUtils, table, 'column', headingColumns, headingRows);
|
|
81
|
+
if (newHeadingColumns !== headingColumns) {
|
|
82
|
+
tableUtils.setHeadingColumnsCount(writer, table, newHeadingColumns, { shallow: true });
|
|
83
|
+
headingColumns = newHeadingColumns;
|
|
84
|
+
changed = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const newHeadingRows = getAdjustedHeadingSectionSize(tableUtils, table, 'row', headingRows, headingColumns);
|
|
88
|
+
if (newHeadingRows !== headingRows) {
|
|
89
|
+
tableUtils.setHeadingRowsCount(writer, table, newHeadingRows, { shallow: true });
|
|
90
|
+
headingRows = newHeadingRows;
|
|
91
|
+
changed = true;
|
|
92
|
+
}
|
|
93
|
+
if (!processColumnsFirst) {
|
|
94
|
+
const newHeadingColumns = getAdjustedHeadingSectionSize(tableUtils, table, 'column', headingColumns, headingRows);
|
|
95
|
+
if (newHeadingColumns !== headingColumns) {
|
|
96
|
+
tableUtils.setHeadingColumnsCount(writer, table, newHeadingColumns, { shallow: true });
|
|
97
|
+
changed = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return changed;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Calculates the adjusted size of a heading section (rows or columns).
|
|
105
|
+
*
|
|
106
|
+
* The algorithm iterates through rows (or columns) to determine if they should be part of the heading section.
|
|
107
|
+
* A row/column is included if:
|
|
108
|
+
* 1. All its cells are of type 'header'.
|
|
109
|
+
* 2. AND it contains at least one header cell that is NOT already covered by the perpendicular heading section.
|
|
110
|
+
*
|
|
111
|
+
* This check prevents the algorithm from aggressively expanding the heading section when cells are already
|
|
112
|
+
* headers due to the other dimension.
|
|
113
|
+
*
|
|
114
|
+
* Consider a 2x2 table where all cells are headers:
|
|
115
|
+
*
|
|
116
|
+
* ```
|
|
117
|
+
* C0 C1
|
|
118
|
+
* +---+---+
|
|
119
|
+
* R0| H | H |
|
|
120
|
+
* +---+---+
|
|
121
|
+
* R1| H | H |
|
|
122
|
+
* +---+---+
|
|
123
|
+
* ```
|
|
124
|
+
*
|
|
125
|
+
* If `headingColumns=2`, both C0 and C1 are heading columns.
|
|
126
|
+
* If we want `headingRows=1` (only R0), the algorithm must NOT include R1, even though R1 consists of header cells.
|
|
127
|
+
* R1's cells are headers because of C0 and C1.
|
|
128
|
+
*
|
|
129
|
+
* Without this check, the algorithm would see that R1 is all headers and force `headingRows` to 2.
|
|
130
|
+
* This would prevent the user from reducing `headingRows` from 2 to 1 without converting R1 cells to 'data'
|
|
131
|
+
* (which would incorrectly break C0 and C1).
|
|
132
|
+
*/
|
|
133
|
+
function getAdjustedHeadingSectionSize(tableUtils, table, mode, currentSize, perpendicularHeadingSize) {
|
|
134
|
+
const totalRowsOrColumns = mode === 'row' ? tableUtils.getRows(table) : tableUtils.getColumns(table);
|
|
135
|
+
let size = currentSize;
|
|
136
|
+
// Iterate through each row/column to check if all cells are headers.
|
|
137
|
+
for (let currentIndex = 0; currentIndex < totalRowsOrColumns; currentIndex++) {
|
|
138
|
+
const walker = new TableWalker(table, { [mode]: currentIndex });
|
|
139
|
+
let allCellsAreHeaders = true;
|
|
140
|
+
let hasHeaderOutsidePerpendicularSection = false;
|
|
141
|
+
// Check each cell in the current row/column.
|
|
142
|
+
for (const { cell, row, column } of walker) {
|
|
143
|
+
// If we find a non-header cell, this row/column can't be part of the heading section.
|
|
144
|
+
if (cell.getAttribute('tableCellType') !== 'header') {
|
|
145
|
+
allCellsAreHeaders = false;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
// Check if this header cell extends beyond the perpendicular heading section.
|
|
149
|
+
// E.g., when checking rows, see if the cell extends beyond headingColumns.
|
|
150
|
+
const perpendicularIndex = mode === 'row' ? column : row;
|
|
151
|
+
if (perpendicularIndex >= perpendicularHeadingSize) {
|
|
152
|
+
hasHeaderOutsidePerpendicularSection = true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// If not all cells are headers, we can't extend the heading section any further.
|
|
156
|
+
if (!allCellsAreHeaders) {
|
|
157
|
+
// The section cannot extend beyond the last valid header row/column.
|
|
158
|
+
return Math.min(size, currentIndex);
|
|
159
|
+
}
|
|
160
|
+
// If there's a header extending beyond the perpendicular section,
|
|
161
|
+
// we must include this row/column in the heading section.
|
|
162
|
+
if (hasHeaderOutsidePerpendicularSection) {
|
|
163
|
+
size = Math.max(size, currentIndex + 1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return Math.min(size, totalRowsOrColumns);
|
|
167
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,7 +5,7 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/commands/tablecellverticalalignmentcommand
|
|
11
7
|
*/
|
|
12
|
-
import type { Editor } from '
|
|
8
|
+
import type { Editor } from 'ckeditor5/src/core.js';
|
|
13
9
|
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
14
10
|
/**
|
|
15
11
|
* The table cell vertical alignment command.
|