@ckeditor/ckeditor5-table 38.1.0 → 38.1.1

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