@ckeditor/ckeditor5-table 40.0.0 → 40.1.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.
Files changed (170) hide show
  1. package/LICENSE.md +3 -3
  2. package/build/table.js +1 -1
  3. package/build/translations/fi.js +1 -1
  4. package/lang/translations/fi.po +3 -3
  5. package/package.json +2 -2
  6. package/src/augmentation.d.ts +76 -76
  7. package/src/augmentation.js +5 -5
  8. package/src/commands/insertcolumncommand.d.ts +55 -55
  9. package/src/commands/insertcolumncommand.js +67 -67
  10. package/src/commands/insertrowcommand.d.ts +54 -54
  11. package/src/commands/insertrowcommand.js +66 -66
  12. package/src/commands/inserttablecommand.d.ts +44 -44
  13. package/src/commands/inserttablecommand.js +69 -69
  14. package/src/commands/mergecellcommand.d.ts +68 -68
  15. package/src/commands/mergecellcommand.js +198 -198
  16. package/src/commands/mergecellscommand.d.ts +28 -28
  17. package/src/commands/mergecellscommand.js +94 -94
  18. package/src/commands/removecolumncommand.d.ts +29 -29
  19. package/src/commands/removecolumncommand.js +109 -109
  20. package/src/commands/removerowcommand.d.ts +29 -29
  21. package/src/commands/removerowcommand.js +82 -82
  22. package/src/commands/selectcolumncommand.d.ts +33 -33
  23. package/src/commands/selectcolumncommand.js +60 -60
  24. package/src/commands/selectrowcommand.d.ts +33 -33
  25. package/src/commands/selectrowcommand.js +56 -56
  26. package/src/commands/setheadercolumncommand.d.ts +50 -50
  27. package/src/commands/setheadercolumncommand.js +71 -71
  28. package/src/commands/setheaderrowcommand.d.ts +53 -53
  29. package/src/commands/setheaderrowcommand.js +79 -79
  30. package/src/commands/splitcellcommand.d.ts +43 -43
  31. package/src/commands/splitcellcommand.js +54 -54
  32. package/src/converters/downcast.d.ts +63 -63
  33. package/src/converters/downcast.js +146 -146
  34. package/src/converters/table-caption-post-fixer.d.ts +20 -20
  35. package/src/converters/table-caption-post-fixer.js +53 -53
  36. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -32
  37. package/src/converters/table-cell-paragraph-post-fixer.js +107 -107
  38. package/src/converters/table-cell-refresh-handler.d.ts +18 -18
  39. package/src/converters/table-cell-refresh-handler.js +45 -45
  40. package/src/converters/table-headings-refresh-handler.d.ts +17 -17
  41. package/src/converters/table-headings-refresh-handler.js +49 -49
  42. package/src/converters/table-layout-post-fixer.d.ts +226 -226
  43. package/src/converters/table-layout-post-fixer.js +367 -367
  44. package/src/converters/tableproperties.d.ts +54 -54
  45. package/src/converters/tableproperties.js +159 -159
  46. package/src/converters/upcasttable.d.ts +49 -49
  47. package/src/converters/upcasttable.js +243 -243
  48. package/src/index.d.ts +60 -60
  49. package/src/index.js +30 -30
  50. package/src/plaintableoutput.d.ts +26 -26
  51. package/src/plaintableoutput.js +123 -123
  52. package/src/table.d.ts +40 -40
  53. package/src/table.js +44 -44
  54. package/src/tablecaption/tablecaptionediting.d.ts +63 -63
  55. package/src/tablecaption/tablecaptionediting.js +122 -122
  56. package/src/tablecaption/tablecaptionui.d.ts +21 -21
  57. package/src/tablecaption/tablecaptionui.js +57 -57
  58. package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -68
  59. package/src/tablecaption/toggletablecaptioncommand.js +105 -104
  60. package/src/tablecaption/utils.d.ts +38 -42
  61. package/src/tablecaption/utils.js +57 -67
  62. package/src/tablecaption.d.ts +24 -24
  63. package/src/tablecaption.js +28 -28
  64. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -32
  65. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -30
  66. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -37
  67. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -44
  68. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -37
  69. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -44
  70. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -51
  71. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -64
  72. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -46
  73. package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -51
  74. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -32
  75. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -30
  76. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -51
  77. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -64
  78. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -62
  79. package/src/tablecellproperties/commands/tablecellpropertycommand.js +92 -92
  80. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -40
  81. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -38
  82. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +43 -43
  83. package/src/tablecellproperties/tablecellpropertiesediting.js +241 -241
  84. package/src/tablecellproperties/tablecellpropertiesui.d.ts +112 -112
  85. package/src/tablecellproperties/tablecellpropertiesui.js +330 -330
  86. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +228 -228
  87. package/src/tablecellproperties/ui/tablecellpropertiesview.js +548 -548
  88. package/src/tablecellproperties.d.ts +30 -30
  89. package/src/tablecellproperties.js +34 -34
  90. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -46
  91. package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -51
  92. package/src/tablecellwidth/tablecellwidthediting.d.ts +29 -29
  93. package/src/tablecellwidth/tablecellwidthediting.js +45 -45
  94. package/src/tableclipboard.d.ts +65 -65
  95. package/src/tableclipboard.js +450 -450
  96. package/src/tablecolumnresize/constants.d.ts +20 -20
  97. package/src/tablecolumnresize/constants.js +20 -20
  98. package/src/tablecolumnresize/converters.d.ts +18 -18
  99. package/src/tablecolumnresize/converters.js +46 -46
  100. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +139 -139
  101. package/src/tablecolumnresize/tablecolumnresizeediting.js +583 -583
  102. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -38
  103. package/src/tablecolumnresize/tablewidthscommand.js +61 -61
  104. package/src/tablecolumnresize/utils.d.ts +148 -148
  105. package/src/tablecolumnresize/utils.js +358 -358
  106. package/src/tablecolumnresize.d.ts +26 -26
  107. package/src/tablecolumnresize.js +30 -30
  108. package/src/tableconfig.d.ts +343 -343
  109. package/src/tableconfig.js +5 -5
  110. package/src/tableediting.d.ts +98 -98
  111. package/src/tableediting.js +191 -191
  112. package/src/tablekeyboard.d.ts +68 -68
  113. package/src/tablekeyboard.js +279 -279
  114. package/src/tablemouse/mouseeventsobserver.d.ts +62 -62
  115. package/src/tablemouse/mouseeventsobserver.js +35 -35
  116. package/src/tablemouse.d.ts +48 -48
  117. package/src/tablemouse.js +172 -172
  118. package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -32
  119. package/src/tableproperties/commands/tablealignmentcommand.js +30 -30
  120. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -32
  121. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -30
  122. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -37
  123. package/src/tableproperties/commands/tablebordercolorcommand.js +44 -44
  124. package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -37
  125. package/src/tableproperties/commands/tableborderstylecommand.js +44 -44
  126. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -51
  127. package/src/tableproperties/commands/tableborderwidthcommand.js +64 -64
  128. package/src/tableproperties/commands/tableheightcommand.d.ts +46 -46
  129. package/src/tableproperties/commands/tableheightcommand.js +54 -54
  130. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -61
  131. package/src/tableproperties/commands/tablepropertycommand.js +81 -80
  132. package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -46
  133. package/src/tableproperties/commands/tablewidthcommand.js +54 -54
  134. package/src/tableproperties/tablepropertiesediting.d.ts +40 -40
  135. package/src/tableproperties/tablepropertiesediting.js +206 -206
  136. package/src/tableproperties/tablepropertiesui.d.ts +114 -114
  137. package/src/tableproperties/tablepropertiesui.js +321 -321
  138. package/src/tableproperties/ui/tablepropertiesview.d.ts +207 -207
  139. package/src/tableproperties/ui/tablepropertiesview.js +466 -466
  140. package/src/tableproperties.d.ts +30 -30
  141. package/src/tableproperties.js +34 -34
  142. package/src/tableselection.d.ts +107 -107
  143. package/src/tableselection.js +297 -297
  144. package/src/tabletoolbar.d.ts +32 -32
  145. package/src/tabletoolbar.js +57 -57
  146. package/src/tableui.d.ts +53 -53
  147. package/src/tableui.js +309 -309
  148. package/src/tableutils.d.ts +448 -448
  149. package/src/tableutils.js +1055 -1055
  150. package/src/tablewalker.d.ts +362 -362
  151. package/src/tablewalker.js +393 -393
  152. package/src/ui/colorinputview.d.ts +140 -140
  153. package/src/ui/colorinputview.js +271 -271
  154. package/src/ui/formrowview.d.ts +61 -61
  155. package/src/ui/formrowview.js +57 -57
  156. package/src/ui/inserttableview.d.ts +77 -77
  157. package/src/ui/inserttableview.js +169 -169
  158. package/src/utils/common.d.ts +46 -42
  159. package/src/utils/common.js +68 -57
  160. package/src/utils/structure.d.ts +245 -245
  161. package/src/utils/structure.js +426 -426
  162. package/src/utils/table-properties.d.ts +67 -67
  163. package/src/utils/table-properties.js +86 -86
  164. package/src/utils/ui/contextualballoon.d.ts +34 -34
  165. package/src/utils/ui/contextualballoon.js +110 -106
  166. package/src/utils/ui/table-properties.d.ts +195 -195
  167. package/src/utils/ui/table-properties.js +362 -362
  168. package/src/utils/ui/widget.d.ts +20 -16
  169. package/src/utils/ui/widget.js +48 -38
  170. package/build/table.js.map +0 -1
@@ -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 {};
@@ -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
+ }
@@ -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
+ }