@ckeditor/ckeditor5-table 40.0.0 → 40.2.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/CHANGELOG.md +15 -15
- package/LICENSE.md +3 -3
- package/build/table.js +1 -1
- package/build/translations/fi.js +1 -1
- package/lang/translations/fi.po +3 -3
- package/package.json +2 -2
- package/src/augmentation.d.ts +76 -76
- package/src/augmentation.js +5 -5
- package/src/commands/insertcolumncommand.d.ts +55 -55
- package/src/commands/insertcolumncommand.js +67 -67
- package/src/commands/insertrowcommand.d.ts +54 -54
- package/src/commands/insertrowcommand.js +66 -66
- package/src/commands/inserttablecommand.d.ts +44 -44
- package/src/commands/inserttablecommand.js +69 -69
- package/src/commands/mergecellcommand.d.ts +68 -68
- package/src/commands/mergecellcommand.js +198 -198
- package/src/commands/mergecellscommand.d.ts +28 -28
- package/src/commands/mergecellscommand.js +94 -94
- package/src/commands/removecolumncommand.d.ts +29 -29
- package/src/commands/removecolumncommand.js +109 -109
- package/src/commands/removerowcommand.d.ts +29 -29
- package/src/commands/removerowcommand.js +82 -82
- package/src/commands/selectcolumncommand.d.ts +33 -33
- package/src/commands/selectcolumncommand.js +60 -60
- package/src/commands/selectrowcommand.d.ts +33 -33
- package/src/commands/selectrowcommand.js +56 -56
- package/src/commands/setheadercolumncommand.d.ts +50 -50
- package/src/commands/setheadercolumncommand.js +71 -71
- package/src/commands/setheaderrowcommand.d.ts +53 -53
- package/src/commands/setheaderrowcommand.js +79 -79
- package/src/commands/splitcellcommand.d.ts +43 -43
- package/src/commands/splitcellcommand.js +54 -54
- package/src/converters/downcast.d.ts +63 -63
- package/src/converters/downcast.js +146 -146
- package/src/converters/table-caption-post-fixer.d.ts +20 -20
- package/src/converters/table-caption-post-fixer.js +53 -53
- package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -32
- package/src/converters/table-cell-paragraph-post-fixer.js +107 -107
- package/src/converters/table-cell-refresh-handler.d.ts +18 -18
- package/src/converters/table-cell-refresh-handler.js +45 -45
- package/src/converters/table-headings-refresh-handler.d.ts +17 -17
- package/src/converters/table-headings-refresh-handler.js +49 -49
- package/src/converters/table-layout-post-fixer.d.ts +226 -226
- package/src/converters/table-layout-post-fixer.js +367 -367
- package/src/converters/tableproperties.d.ts +54 -54
- package/src/converters/tableproperties.js +159 -159
- package/src/converters/upcasttable.d.ts +49 -49
- package/src/converters/upcasttable.js +243 -243
- package/src/index.d.ts +60 -60
- package/src/index.js +30 -30
- package/src/plaintableoutput.d.ts +26 -26
- package/src/plaintableoutput.js +123 -123
- package/src/table.d.ts +40 -40
- package/src/table.js +44 -44
- package/src/tablecaption/tablecaptionediting.d.ts +63 -63
- package/src/tablecaption/tablecaptionediting.js +122 -122
- package/src/tablecaption/tablecaptionui.d.ts +21 -21
- package/src/tablecaption/tablecaptionui.js +57 -57
- package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -68
- package/src/tablecaption/toggletablecaptioncommand.js +105 -104
- package/src/tablecaption/utils.d.ts +38 -42
- package/src/tablecaption/utils.js +57 -67
- package/src/tablecaption.d.ts +24 -24
- package/src/tablecaption.js +28 -28
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -32
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -30
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -37
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -44
- package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -37
- package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -44
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -51
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -64
- package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -46
- package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -51
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -32
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -30
- package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -51
- package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -64
- package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -62
- package/src/tablecellproperties/commands/tablecellpropertycommand.js +92 -92
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -40
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -38
- package/src/tablecellproperties/tablecellpropertiesediting.d.ts +43 -43
- package/src/tablecellproperties/tablecellpropertiesediting.js +241 -241
- package/src/tablecellproperties/tablecellpropertiesui.d.ts +112 -112
- package/src/tablecellproperties/tablecellpropertiesui.js +330 -330
- package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +228 -228
- package/src/tablecellproperties/ui/tablecellpropertiesview.js +548 -548
- package/src/tablecellproperties.d.ts +30 -30
- package/src/tablecellproperties.js +34 -34
- package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -46
- package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -51
- package/src/tablecellwidth/tablecellwidthediting.d.ts +29 -29
- package/src/tablecellwidth/tablecellwidthediting.js +45 -45
- package/src/tableclipboard.d.ts +65 -65
- package/src/tableclipboard.js +450 -450
- package/src/tablecolumnresize/constants.d.ts +20 -20
- package/src/tablecolumnresize/constants.js +20 -20
- package/src/tablecolumnresize/converters.d.ts +18 -18
- package/src/tablecolumnresize/converters.js +46 -46
- package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +139 -139
- package/src/tablecolumnresize/tablecolumnresizeediting.js +583 -583
- package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -38
- package/src/tablecolumnresize/tablewidthscommand.js +61 -61
- package/src/tablecolumnresize/utils.d.ts +148 -148
- package/src/tablecolumnresize/utils.js +358 -358
- package/src/tablecolumnresize.d.ts +26 -26
- package/src/tablecolumnresize.js +30 -30
- package/src/tableconfig.d.ts +343 -343
- package/src/tableconfig.js +5 -5
- package/src/tableediting.d.ts +98 -98
- package/src/tableediting.js +191 -191
- package/src/tablekeyboard.d.ts +68 -68
- package/src/tablekeyboard.js +279 -279
- package/src/tablemouse/mouseeventsobserver.d.ts +62 -62
- package/src/tablemouse/mouseeventsobserver.js +35 -35
- package/src/tablemouse.d.ts +48 -48
- package/src/tablemouse.js +172 -172
- package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -32
- package/src/tableproperties/commands/tablealignmentcommand.js +30 -30
- package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -32
- package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -30
- package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -37
- package/src/tableproperties/commands/tablebordercolorcommand.js +44 -44
- package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -37
- package/src/tableproperties/commands/tableborderstylecommand.js +44 -44
- package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -51
- package/src/tableproperties/commands/tableborderwidthcommand.js +64 -64
- package/src/tableproperties/commands/tableheightcommand.d.ts +46 -46
- package/src/tableproperties/commands/tableheightcommand.js +54 -54
- package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -61
- package/src/tableproperties/commands/tablepropertycommand.js +81 -80
- package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -46
- package/src/tableproperties/commands/tablewidthcommand.js +54 -54
- package/src/tableproperties/tablepropertiesediting.d.ts +40 -40
- package/src/tableproperties/tablepropertiesediting.js +206 -206
- package/src/tableproperties/tablepropertiesui.d.ts +114 -114
- package/src/tableproperties/tablepropertiesui.js +321 -321
- package/src/tableproperties/ui/tablepropertiesview.d.ts +207 -207
- package/src/tableproperties/ui/tablepropertiesview.js +466 -466
- package/src/tableproperties.d.ts +30 -30
- package/src/tableproperties.js +34 -34
- package/src/tableselection.d.ts +107 -107
- package/src/tableselection.js +297 -297
- package/src/tabletoolbar.d.ts +32 -32
- package/src/tabletoolbar.js +57 -57
- package/src/tableui.d.ts +53 -53
- package/src/tableui.js +309 -309
- package/src/tableutils.d.ts +448 -448
- package/src/tableutils.js +1055 -1055
- package/src/tablewalker.d.ts +362 -362
- package/src/tablewalker.js +393 -393
- package/src/ui/colorinputview.d.ts +140 -140
- package/src/ui/colorinputview.js +271 -271
- package/src/ui/formrowview.d.ts +61 -61
- package/src/ui/formrowview.js +57 -57
- package/src/ui/inserttableview.d.ts +77 -77
- package/src/ui/inserttableview.js +169 -169
- package/src/utils/common.d.ts +46 -42
- package/src/utils/common.js +68 -57
- package/src/utils/structure.d.ts +245 -245
- package/src/utils/structure.js +426 -426
- package/src/utils/table-properties.d.ts +67 -67
- package/src/utils/table-properties.js +86 -86
- package/src/utils/ui/contextualballoon.d.ts +34 -34
- package/src/utils/ui/contextualballoon.js +110 -106
- package/src/utils/ui/table-properties.d.ts +195 -195
- package/src/utils/ui/table-properties.js +362 -362
- package/src/utils/ui/widget.d.ts +20 -16
- package/src/utils/ui/widget.js +48 -38
- package/build/table.js.map +0 -1
package/src/tableconfig.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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
|
-
*/
|
|
5
|
-
export {};
|
|
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
|
+
*/
|
|
5
|
+
export {};
|
package/src/tableediting.d.ts
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
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
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* @module table/tableediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin, type Editor } from 'ckeditor5/src/core';
|
|
9
|
-
import type { PositionOffset, SlotFilter } from 'ckeditor5/src/engine';
|
|
10
|
-
import TableUtils from '../src/tableutils';
|
|
11
|
-
import '../theme/tableediting.css';
|
|
12
|
-
/**
|
|
13
|
-
* The table editing feature.
|
|
14
|
-
*/
|
|
15
|
-
export default class TableEditing extends Plugin {
|
|
16
|
-
/**
|
|
17
|
-
* Handlers for creating additional slots in the table.
|
|
18
|
-
*/
|
|
19
|
-
private _additionalSlots;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
static get pluginName(): "TableEditing";
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
static get requires(): readonly [typeof TableUtils];
|
|
28
|
-
/**
|
|
29
|
-
* @inheritDoc
|
|
30
|
-
*/
|
|
31
|
-
constructor(editor: Editor);
|
|
32
|
-
/**
|
|
33
|
-
* @inheritDoc
|
|
34
|
-
*/
|
|
35
|
-
init(): void;
|
|
36
|
-
/**
|
|
37
|
-
* Registers downcast handler for the additional table slot.
|
|
38
|
-
*/
|
|
39
|
-
registerAdditionalSlot(slotHandler: AdditionalSlot): void;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* By default, only the `tableRow` elements from the `table` model are downcast inside the `<table>` and
|
|
43
|
-
* all other elements are pushed outside the table. This handler allows creating additional slots inside
|
|
44
|
-
* the table for other elements.
|
|
45
|
-
*
|
|
46
|
-
* Take this model as an example:
|
|
47
|
-
*
|
|
48
|
-
* ```xml
|
|
49
|
-
* <table>
|
|
50
|
-
* <tableRow>...</tableRow>
|
|
51
|
-
* <tableRow>...</tableRow>
|
|
52
|
-
* <tableColumnGroup>...</tableColumnGroup>
|
|
53
|
-
* </table>
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* By default, downcasting result will be:
|
|
57
|
-
*
|
|
58
|
-
* ```xml
|
|
59
|
-
* <table>
|
|
60
|
-
* <tbody>
|
|
61
|
-
* <tr>...</tr>
|
|
62
|
-
* <tr>...</tr>
|
|
63
|
-
* </tbody>
|
|
64
|
-
* </table>
|
|
65
|
-
* <colgroup>...</colgroup>
|
|
66
|
-
* ```
|
|
67
|
-
*
|
|
68
|
-
* To allow the `tableColumnGroup` element at the end of the table, use the following configuration:
|
|
69
|
-
*
|
|
70
|
-
* ```ts
|
|
71
|
-
* const additionalSlot = {
|
|
72
|
-
* filter: element => element.is( 'element', 'tableColumnGroup' ),
|
|
73
|
-
* positionOffset: 'end'
|
|
74
|
-
* }
|
|
75
|
-
* ```
|
|
76
|
-
*
|
|
77
|
-
* Now, the downcast result will be:
|
|
78
|
-
*
|
|
79
|
-
* ```xml
|
|
80
|
-
* <table>
|
|
81
|
-
* <tbody>
|
|
82
|
-
* <tr>...</tr>
|
|
83
|
-
* <tr>...</tr>
|
|
84
|
-
* </tbody>
|
|
85
|
-
* <colgroup>...</colgroup>
|
|
86
|
-
* </table>
|
|
87
|
-
* ```
|
|
88
|
-
*/
|
|
89
|
-
export interface AdditionalSlot {
|
|
90
|
-
/**
|
|
91
|
-
* Filter for elements that should be placed inside given slot.
|
|
92
|
-
*/
|
|
93
|
-
filter: SlotFilter;
|
|
94
|
-
/**
|
|
95
|
-
* Position of the slot within the table.
|
|
96
|
-
*/
|
|
97
|
-
positionOffset: PositionOffset;
|
|
98
|
-
}
|
|
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
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module table/tableediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin, type Editor } from 'ckeditor5/src/core';
|
|
9
|
+
import type { PositionOffset, SlotFilter } from 'ckeditor5/src/engine';
|
|
10
|
+
import TableUtils from '../src/tableutils';
|
|
11
|
+
import '../theme/tableediting.css';
|
|
12
|
+
/**
|
|
13
|
+
* The table editing feature.
|
|
14
|
+
*/
|
|
15
|
+
export default class TableEditing extends Plugin {
|
|
16
|
+
/**
|
|
17
|
+
* Handlers for creating additional slots in the table.
|
|
18
|
+
*/
|
|
19
|
+
private _additionalSlots;
|
|
20
|
+
/**
|
|
21
|
+
* @inheritDoc
|
|
22
|
+
*/
|
|
23
|
+
static get pluginName(): "TableEditing";
|
|
24
|
+
/**
|
|
25
|
+
* @inheritDoc
|
|
26
|
+
*/
|
|
27
|
+
static get requires(): readonly [typeof TableUtils];
|
|
28
|
+
/**
|
|
29
|
+
* @inheritDoc
|
|
30
|
+
*/
|
|
31
|
+
constructor(editor: Editor);
|
|
32
|
+
/**
|
|
33
|
+
* @inheritDoc
|
|
34
|
+
*/
|
|
35
|
+
init(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Registers downcast handler for the additional table slot.
|
|
38
|
+
*/
|
|
39
|
+
registerAdditionalSlot(slotHandler: AdditionalSlot): void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* By default, only the `tableRow` elements from the `table` model are downcast inside the `<table>` and
|
|
43
|
+
* all other elements are pushed outside the table. This handler allows creating additional slots inside
|
|
44
|
+
* the table for other elements.
|
|
45
|
+
*
|
|
46
|
+
* Take this model as an example:
|
|
47
|
+
*
|
|
48
|
+
* ```xml
|
|
49
|
+
* <table>
|
|
50
|
+
* <tableRow>...</tableRow>
|
|
51
|
+
* <tableRow>...</tableRow>
|
|
52
|
+
* <tableColumnGroup>...</tableColumnGroup>
|
|
53
|
+
* </table>
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* By default, downcasting result will be:
|
|
57
|
+
*
|
|
58
|
+
* ```xml
|
|
59
|
+
* <table>
|
|
60
|
+
* <tbody>
|
|
61
|
+
* <tr>...</tr>
|
|
62
|
+
* <tr>...</tr>
|
|
63
|
+
* </tbody>
|
|
64
|
+
* </table>
|
|
65
|
+
* <colgroup>...</colgroup>
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* To allow the `tableColumnGroup` element at the end of the table, use the following configuration:
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* const additionalSlot = {
|
|
72
|
+
* filter: element => element.is( 'element', 'tableColumnGroup' ),
|
|
73
|
+
* positionOffset: 'end'
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* Now, the downcast result will be:
|
|
78
|
+
*
|
|
79
|
+
* ```xml
|
|
80
|
+
* <table>
|
|
81
|
+
* <tbody>
|
|
82
|
+
* <tr>...</tr>
|
|
83
|
+
* <tr>...</tr>
|
|
84
|
+
* </tbody>
|
|
85
|
+
* <colgroup>...</colgroup>
|
|
86
|
+
* </table>
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export interface AdditionalSlot {
|
|
90
|
+
/**
|
|
91
|
+
* Filter for elements that should be placed inside given slot.
|
|
92
|
+
*/
|
|
93
|
+
filter: SlotFilter;
|
|
94
|
+
/**
|
|
95
|
+
* Position of the slot within the table.
|
|
96
|
+
*/
|
|
97
|
+
positionOffset: PositionOffset;
|
|
98
|
+
}
|
package/src/tableediting.js
CHANGED
|
@@ -1,191 +1,191 @@
|
|
|
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
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* @module table/tableediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import upcastTable, { ensureParagraphInTableCell, skipEmptyTableRow, upcastTableFigure } from './converters/upcasttable';
|
|
10
|
-
import { convertParagraphInTableCell, downcastCell, downcastRow, downcastTable } from './converters/downcast';
|
|
11
|
-
import InsertTableCommand from './commands/inserttablecommand';
|
|
12
|
-
import InsertRowCommand from './commands/insertrowcommand';
|
|
13
|
-
import InsertColumnCommand from './commands/insertcolumncommand';
|
|
14
|
-
import SplitCellCommand from './commands/splitcellcommand';
|
|
15
|
-
import MergeCellCommand from './commands/mergecellcommand';
|
|
16
|
-
import RemoveRowCommand from './commands/removerowcommand';
|
|
17
|
-
import RemoveColumnCommand from './commands/removecolumncommand';
|
|
18
|
-
import SetHeaderRowCommand from './commands/setheaderrowcommand';
|
|
19
|
-
import SetHeaderColumnCommand from './commands/setheadercolumncommand';
|
|
20
|
-
import MergeCellsCommand from './commands/mergecellscommand';
|
|
21
|
-
import SelectRowCommand from './commands/selectrowcommand';
|
|
22
|
-
import SelectColumnCommand from './commands/selectcolumncommand';
|
|
23
|
-
import TableUtils from '../src/tableutils';
|
|
24
|
-
import injectTableLayoutPostFixer from './converters/table-layout-post-fixer';
|
|
25
|
-
import injectTableCellParagraphPostFixer from './converters/table-cell-paragraph-post-fixer';
|
|
26
|
-
import tableHeadingsRefreshHandler from './converters/table-headings-refresh-handler';
|
|
27
|
-
import tableCellRefreshHandler from './converters/table-cell-refresh-handler';
|
|
28
|
-
import '../theme/tableediting.css';
|
|
29
|
-
/**
|
|
30
|
-
* The table editing feature.
|
|
31
|
-
*/
|
|
32
|
-
export default class TableEditing extends Plugin {
|
|
33
|
-
/**
|
|
34
|
-
* @inheritDoc
|
|
35
|
-
*/
|
|
36
|
-
static get pluginName() {
|
|
37
|
-
return 'TableEditing';
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* @inheritDoc
|
|
41
|
-
*/
|
|
42
|
-
static get requires() {
|
|
43
|
-
return [TableUtils];
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* @inheritDoc
|
|
47
|
-
*/
|
|
48
|
-
constructor(editor) {
|
|
49
|
-
super(editor);
|
|
50
|
-
this._additionalSlots = [];
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @inheritDoc
|
|
54
|
-
*/
|
|
55
|
-
init() {
|
|
56
|
-
const editor = this.editor;
|
|
57
|
-
const model = editor.model;
|
|
58
|
-
const schema = model.schema;
|
|
59
|
-
const conversion = editor.conversion;
|
|
60
|
-
const tableUtils = editor.plugins.get(TableUtils);
|
|
61
|
-
schema.register('table', {
|
|
62
|
-
inheritAllFrom: '$blockObject',
|
|
63
|
-
allowAttributes: ['headingRows', 'headingColumns']
|
|
64
|
-
});
|
|
65
|
-
schema.register('tableRow', {
|
|
66
|
-
allowIn: 'table',
|
|
67
|
-
isLimit: true
|
|
68
|
-
});
|
|
69
|
-
schema.register('tableCell', {
|
|
70
|
-
allowContentOf: '$container',
|
|
71
|
-
allowIn: 'tableRow',
|
|
72
|
-
allowAttributes: ['colspan', 'rowspan'],
|
|
73
|
-
isLimit: true,
|
|
74
|
-
isSelectable: true
|
|
75
|
-
});
|
|
76
|
-
// Figure conversion.
|
|
77
|
-
conversion.for('upcast').add(upcastTableFigure());
|
|
78
|
-
// Table conversion.
|
|
79
|
-
conversion.for('upcast').add(upcastTable());
|
|
80
|
-
conversion.for('editingDowncast').elementToStructure({
|
|
81
|
-
model: {
|
|
82
|
-
name: 'table',
|
|
83
|
-
attributes: ['headingRows']
|
|
84
|
-
},
|
|
85
|
-
view: downcastTable(tableUtils, {
|
|
86
|
-
asWidget: true,
|
|
87
|
-
additionalSlots: this._additionalSlots
|
|
88
|
-
})
|
|
89
|
-
});
|
|
90
|
-
conversion.for('dataDowncast').elementToStructure({
|
|
91
|
-
model: {
|
|
92
|
-
name: 'table',
|
|
93
|
-
attributes: ['headingRows']
|
|
94
|
-
},
|
|
95
|
-
view: downcastTable(tableUtils, {
|
|
96
|
-
additionalSlots: this._additionalSlots
|
|
97
|
-
})
|
|
98
|
-
});
|
|
99
|
-
// Table row conversion.
|
|
100
|
-
conversion.for('upcast').elementToElement({ model: 'tableRow', view: 'tr' });
|
|
101
|
-
conversion.for('upcast').add(skipEmptyTableRow());
|
|
102
|
-
conversion.for('downcast').elementToElement({
|
|
103
|
-
model: 'tableRow',
|
|
104
|
-
view: downcastRow()
|
|
105
|
-
});
|
|
106
|
-
// Table cell conversion.
|
|
107
|
-
conversion.for('upcast').elementToElement({ model: 'tableCell', view: 'td' });
|
|
108
|
-
conversion.for('upcast').elementToElement({ model: 'tableCell', view: 'th' });
|
|
109
|
-
conversion.for('upcast').add(ensureParagraphInTableCell('td'));
|
|
110
|
-
conversion.for('upcast').add(ensureParagraphInTableCell('th'));
|
|
111
|
-
conversion.for('editingDowncast').elementToElement({
|
|
112
|
-
model: 'tableCell',
|
|
113
|
-
view: downcastCell({ asWidget: true })
|
|
114
|
-
});
|
|
115
|
-
conversion.for('dataDowncast').elementToElement({
|
|
116
|
-
model: 'tableCell',
|
|
117
|
-
view: downcastCell()
|
|
118
|
-
});
|
|
119
|
-
// Duplicates code - needed to properly refresh paragraph inside a table cell.
|
|
120
|
-
conversion.for('editingDowncast').elementToElement({
|
|
121
|
-
model: 'paragraph',
|
|
122
|
-
view: convertParagraphInTableCell({ asWidget: true }),
|
|
123
|
-
converterPriority: 'high'
|
|
124
|
-
});
|
|
125
|
-
conversion.for('dataDowncast').elementToElement({
|
|
126
|
-
model: 'paragraph',
|
|
127
|
-
view: convertParagraphInTableCell(),
|
|
128
|
-
converterPriority: 'high'
|
|
129
|
-
});
|
|
130
|
-
// Table attributes conversion.
|
|
131
|
-
conversion.for('downcast').attributeToAttribute({ model: 'colspan', view: 'colspan' });
|
|
132
|
-
conversion.for('upcast').attributeToAttribute({
|
|
133
|
-
model: { key: 'colspan', value: upcastCellSpan('colspan') },
|
|
134
|
-
view: 'colspan'
|
|
135
|
-
});
|
|
136
|
-
conversion.for('downcast').attributeToAttribute({ model: 'rowspan', view: 'rowspan' });
|
|
137
|
-
conversion.for('upcast').attributeToAttribute({
|
|
138
|
-
model: { key: 'rowspan', value: upcastCellSpan('rowspan') },
|
|
139
|
-
view: 'rowspan'
|
|
140
|
-
});
|
|
141
|
-
// Define the config.
|
|
142
|
-
editor.config.define('table.defaultHeadings.rows', 0);
|
|
143
|
-
editor.config.define('table.defaultHeadings.columns', 0);
|
|
144
|
-
// Define all the commands.
|
|
145
|
-
editor.commands.add('insertTable', new InsertTableCommand(editor));
|
|
146
|
-
editor.commands.add('insertTableRowAbove', new InsertRowCommand(editor, { order: 'above' }));
|
|
147
|
-
editor.commands.add('insertTableRowBelow', new InsertRowCommand(editor, { order: 'below' }));
|
|
148
|
-
editor.commands.add('insertTableColumnLeft', new InsertColumnCommand(editor, { order: 'left' }));
|
|
149
|
-
editor.commands.add('insertTableColumnRight', new InsertColumnCommand(editor, { order: 'right' }));
|
|
150
|
-
editor.commands.add('removeTableRow', new RemoveRowCommand(editor));
|
|
151
|
-
editor.commands.add('removeTableColumn', new RemoveColumnCommand(editor));
|
|
152
|
-
editor.commands.add('splitTableCellVertically', new SplitCellCommand(editor, { direction: 'vertically' }));
|
|
153
|
-
editor.commands.add('splitTableCellHorizontally', new SplitCellCommand(editor, { direction: 'horizontally' }));
|
|
154
|
-
editor.commands.add('mergeTableCells', new MergeCellsCommand(editor));
|
|
155
|
-
editor.commands.add('mergeTableCellRight', new MergeCellCommand(editor, { direction: 'right' }));
|
|
156
|
-
editor.commands.add('mergeTableCellLeft', new MergeCellCommand(editor, { direction: 'left' }));
|
|
157
|
-
editor.commands.add('mergeTableCellDown', new MergeCellCommand(editor, { direction: 'down' }));
|
|
158
|
-
editor.commands.add('mergeTableCellUp', new MergeCellCommand(editor, { direction: 'up' }));
|
|
159
|
-
editor.commands.add('setTableColumnHeader', new SetHeaderColumnCommand(editor));
|
|
160
|
-
editor.commands.add('setTableRowHeader', new SetHeaderRowCommand(editor));
|
|
161
|
-
editor.commands.add('selectTableRow', new SelectRowCommand(editor));
|
|
162
|
-
editor.commands.add('selectTableColumn', new SelectColumnCommand(editor));
|
|
163
|
-
injectTableLayoutPostFixer(model);
|
|
164
|
-
injectTableCellParagraphPostFixer(model);
|
|
165
|
-
this.listenTo(model.document, 'change:data', () => {
|
|
166
|
-
tableHeadingsRefreshHandler(model, editor.editing);
|
|
167
|
-
tableCellRefreshHandler(model, editor.editing);
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Registers downcast handler for the additional table slot.
|
|
172
|
-
*/
|
|
173
|
-
registerAdditionalSlot(slotHandler) {
|
|
174
|
-
this._additionalSlots.push(slotHandler);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Returns fixed colspan and rowspan attrbutes values.
|
|
179
|
-
*
|
|
180
|
-
* @param type colspan or rowspan.
|
|
181
|
-
* @returns conversion value function.
|
|
182
|
-
*/
|
|
183
|
-
function upcastCellSpan(type) {
|
|
184
|
-
return (cell) => {
|
|
185
|
-
const span = parseInt(cell.getAttribute(type));
|
|
186
|
-
if (Number.isNaN(span) || span <= 0) {
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
return span;
|
|
190
|
-
};
|
|
191
|
-
}
|
|
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
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module table/tableediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import upcastTable, { ensureParagraphInTableCell, skipEmptyTableRow, upcastTableFigure } from './converters/upcasttable';
|
|
10
|
+
import { convertParagraphInTableCell, downcastCell, downcastRow, downcastTable } from './converters/downcast';
|
|
11
|
+
import InsertTableCommand from './commands/inserttablecommand';
|
|
12
|
+
import InsertRowCommand from './commands/insertrowcommand';
|
|
13
|
+
import InsertColumnCommand from './commands/insertcolumncommand';
|
|
14
|
+
import SplitCellCommand from './commands/splitcellcommand';
|
|
15
|
+
import MergeCellCommand from './commands/mergecellcommand';
|
|
16
|
+
import RemoveRowCommand from './commands/removerowcommand';
|
|
17
|
+
import RemoveColumnCommand from './commands/removecolumncommand';
|
|
18
|
+
import SetHeaderRowCommand from './commands/setheaderrowcommand';
|
|
19
|
+
import SetHeaderColumnCommand from './commands/setheadercolumncommand';
|
|
20
|
+
import MergeCellsCommand from './commands/mergecellscommand';
|
|
21
|
+
import SelectRowCommand from './commands/selectrowcommand';
|
|
22
|
+
import SelectColumnCommand from './commands/selectcolumncommand';
|
|
23
|
+
import TableUtils from '../src/tableutils';
|
|
24
|
+
import injectTableLayoutPostFixer from './converters/table-layout-post-fixer';
|
|
25
|
+
import injectTableCellParagraphPostFixer from './converters/table-cell-paragraph-post-fixer';
|
|
26
|
+
import tableHeadingsRefreshHandler from './converters/table-headings-refresh-handler';
|
|
27
|
+
import tableCellRefreshHandler from './converters/table-cell-refresh-handler';
|
|
28
|
+
import '../theme/tableediting.css';
|
|
29
|
+
/**
|
|
30
|
+
* The table editing feature.
|
|
31
|
+
*/
|
|
32
|
+
export default class TableEditing extends Plugin {
|
|
33
|
+
/**
|
|
34
|
+
* @inheritDoc
|
|
35
|
+
*/
|
|
36
|
+
static get pluginName() {
|
|
37
|
+
return 'TableEditing';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @inheritDoc
|
|
41
|
+
*/
|
|
42
|
+
static get requires() {
|
|
43
|
+
return [TableUtils];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @inheritDoc
|
|
47
|
+
*/
|
|
48
|
+
constructor(editor) {
|
|
49
|
+
super(editor);
|
|
50
|
+
this._additionalSlots = [];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @inheritDoc
|
|
54
|
+
*/
|
|
55
|
+
init() {
|
|
56
|
+
const editor = this.editor;
|
|
57
|
+
const model = editor.model;
|
|
58
|
+
const schema = model.schema;
|
|
59
|
+
const conversion = editor.conversion;
|
|
60
|
+
const tableUtils = editor.plugins.get(TableUtils);
|
|
61
|
+
schema.register('table', {
|
|
62
|
+
inheritAllFrom: '$blockObject',
|
|
63
|
+
allowAttributes: ['headingRows', 'headingColumns']
|
|
64
|
+
});
|
|
65
|
+
schema.register('tableRow', {
|
|
66
|
+
allowIn: 'table',
|
|
67
|
+
isLimit: true
|
|
68
|
+
});
|
|
69
|
+
schema.register('tableCell', {
|
|
70
|
+
allowContentOf: '$container',
|
|
71
|
+
allowIn: 'tableRow',
|
|
72
|
+
allowAttributes: ['colspan', 'rowspan'],
|
|
73
|
+
isLimit: true,
|
|
74
|
+
isSelectable: true
|
|
75
|
+
});
|
|
76
|
+
// Figure conversion.
|
|
77
|
+
conversion.for('upcast').add(upcastTableFigure());
|
|
78
|
+
// Table conversion.
|
|
79
|
+
conversion.for('upcast').add(upcastTable());
|
|
80
|
+
conversion.for('editingDowncast').elementToStructure({
|
|
81
|
+
model: {
|
|
82
|
+
name: 'table',
|
|
83
|
+
attributes: ['headingRows']
|
|
84
|
+
},
|
|
85
|
+
view: downcastTable(tableUtils, {
|
|
86
|
+
asWidget: true,
|
|
87
|
+
additionalSlots: this._additionalSlots
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
conversion.for('dataDowncast').elementToStructure({
|
|
91
|
+
model: {
|
|
92
|
+
name: 'table',
|
|
93
|
+
attributes: ['headingRows']
|
|
94
|
+
},
|
|
95
|
+
view: downcastTable(tableUtils, {
|
|
96
|
+
additionalSlots: this._additionalSlots
|
|
97
|
+
})
|
|
98
|
+
});
|
|
99
|
+
// Table row conversion.
|
|
100
|
+
conversion.for('upcast').elementToElement({ model: 'tableRow', view: 'tr' });
|
|
101
|
+
conversion.for('upcast').add(skipEmptyTableRow());
|
|
102
|
+
conversion.for('downcast').elementToElement({
|
|
103
|
+
model: 'tableRow',
|
|
104
|
+
view: downcastRow()
|
|
105
|
+
});
|
|
106
|
+
// Table cell conversion.
|
|
107
|
+
conversion.for('upcast').elementToElement({ model: 'tableCell', view: 'td' });
|
|
108
|
+
conversion.for('upcast').elementToElement({ model: 'tableCell', view: 'th' });
|
|
109
|
+
conversion.for('upcast').add(ensureParagraphInTableCell('td'));
|
|
110
|
+
conversion.for('upcast').add(ensureParagraphInTableCell('th'));
|
|
111
|
+
conversion.for('editingDowncast').elementToElement({
|
|
112
|
+
model: 'tableCell',
|
|
113
|
+
view: downcastCell({ asWidget: true })
|
|
114
|
+
});
|
|
115
|
+
conversion.for('dataDowncast').elementToElement({
|
|
116
|
+
model: 'tableCell',
|
|
117
|
+
view: downcastCell()
|
|
118
|
+
});
|
|
119
|
+
// Duplicates code - needed to properly refresh paragraph inside a table cell.
|
|
120
|
+
conversion.for('editingDowncast').elementToElement({
|
|
121
|
+
model: 'paragraph',
|
|
122
|
+
view: convertParagraphInTableCell({ asWidget: true }),
|
|
123
|
+
converterPriority: 'high'
|
|
124
|
+
});
|
|
125
|
+
conversion.for('dataDowncast').elementToElement({
|
|
126
|
+
model: 'paragraph',
|
|
127
|
+
view: convertParagraphInTableCell(),
|
|
128
|
+
converterPriority: 'high'
|
|
129
|
+
});
|
|
130
|
+
// Table attributes conversion.
|
|
131
|
+
conversion.for('downcast').attributeToAttribute({ model: 'colspan', view: 'colspan' });
|
|
132
|
+
conversion.for('upcast').attributeToAttribute({
|
|
133
|
+
model: { key: 'colspan', value: upcastCellSpan('colspan') },
|
|
134
|
+
view: 'colspan'
|
|
135
|
+
});
|
|
136
|
+
conversion.for('downcast').attributeToAttribute({ model: 'rowspan', view: 'rowspan' });
|
|
137
|
+
conversion.for('upcast').attributeToAttribute({
|
|
138
|
+
model: { key: 'rowspan', value: upcastCellSpan('rowspan') },
|
|
139
|
+
view: 'rowspan'
|
|
140
|
+
});
|
|
141
|
+
// Define the config.
|
|
142
|
+
editor.config.define('table.defaultHeadings.rows', 0);
|
|
143
|
+
editor.config.define('table.defaultHeadings.columns', 0);
|
|
144
|
+
// Define all the commands.
|
|
145
|
+
editor.commands.add('insertTable', new InsertTableCommand(editor));
|
|
146
|
+
editor.commands.add('insertTableRowAbove', new InsertRowCommand(editor, { order: 'above' }));
|
|
147
|
+
editor.commands.add('insertTableRowBelow', new InsertRowCommand(editor, { order: 'below' }));
|
|
148
|
+
editor.commands.add('insertTableColumnLeft', new InsertColumnCommand(editor, { order: 'left' }));
|
|
149
|
+
editor.commands.add('insertTableColumnRight', new InsertColumnCommand(editor, { order: 'right' }));
|
|
150
|
+
editor.commands.add('removeTableRow', new RemoveRowCommand(editor));
|
|
151
|
+
editor.commands.add('removeTableColumn', new RemoveColumnCommand(editor));
|
|
152
|
+
editor.commands.add('splitTableCellVertically', new SplitCellCommand(editor, { direction: 'vertically' }));
|
|
153
|
+
editor.commands.add('splitTableCellHorizontally', new SplitCellCommand(editor, { direction: 'horizontally' }));
|
|
154
|
+
editor.commands.add('mergeTableCells', new MergeCellsCommand(editor));
|
|
155
|
+
editor.commands.add('mergeTableCellRight', new MergeCellCommand(editor, { direction: 'right' }));
|
|
156
|
+
editor.commands.add('mergeTableCellLeft', new MergeCellCommand(editor, { direction: 'left' }));
|
|
157
|
+
editor.commands.add('mergeTableCellDown', new MergeCellCommand(editor, { direction: 'down' }));
|
|
158
|
+
editor.commands.add('mergeTableCellUp', new MergeCellCommand(editor, { direction: 'up' }));
|
|
159
|
+
editor.commands.add('setTableColumnHeader', new SetHeaderColumnCommand(editor));
|
|
160
|
+
editor.commands.add('setTableRowHeader', new SetHeaderRowCommand(editor));
|
|
161
|
+
editor.commands.add('selectTableRow', new SelectRowCommand(editor));
|
|
162
|
+
editor.commands.add('selectTableColumn', new SelectColumnCommand(editor));
|
|
163
|
+
injectTableLayoutPostFixer(model);
|
|
164
|
+
injectTableCellParagraphPostFixer(model);
|
|
165
|
+
this.listenTo(model.document, 'change:data', () => {
|
|
166
|
+
tableHeadingsRefreshHandler(model, editor.editing);
|
|
167
|
+
tableCellRefreshHandler(model, editor.editing);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Registers downcast handler for the additional table slot.
|
|
172
|
+
*/
|
|
173
|
+
registerAdditionalSlot(slotHandler) {
|
|
174
|
+
this._additionalSlots.push(slotHandler);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Returns fixed colspan and rowspan attrbutes values.
|
|
179
|
+
*
|
|
180
|
+
* @param type colspan or rowspan.
|
|
181
|
+
* @returns conversion value function.
|
|
182
|
+
*/
|
|
183
|
+
function upcastCellSpan(type) {
|
|
184
|
+
return (cell) => {
|
|
185
|
+
const span = parseInt(cell.getAttribute(type));
|
|
186
|
+
if (Number.isNaN(span) || span <= 0) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return span;
|
|
190
|
+
};
|
|
191
|
+
}
|