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