@ckeditor/ckeditor5-table 39.0.1 → 40.0.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 (229) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +3 -3
  3. package/build/table.js +1 -1
  4. package/build/table.js.map +1 -0
  5. package/build/translations/hy.js +1 -0
  6. package/lang/translations/ar.po +1 -0
  7. package/lang/translations/az.po +1 -0
  8. package/lang/translations/bg.po +1 -0
  9. package/lang/translations/bn.po +1 -0
  10. package/lang/translations/ca.po +1 -0
  11. package/lang/translations/cs.po +1 -0
  12. package/lang/translations/da.po +1 -0
  13. package/lang/translations/de-ch.po +1 -0
  14. package/lang/translations/de.po +1 -0
  15. package/lang/translations/el.po +1 -0
  16. package/lang/translations/en-au.po +1 -0
  17. package/lang/translations/en-gb.po +1 -0
  18. package/lang/translations/en.po +1 -0
  19. package/lang/translations/es.po +1 -0
  20. package/lang/translations/et.po +1 -0
  21. package/lang/translations/fa.po +1 -0
  22. package/lang/translations/fi.po +1 -0
  23. package/lang/translations/fr.po +1 -0
  24. package/lang/translations/gl.po +1 -0
  25. package/lang/translations/he.po +1 -0
  26. package/lang/translations/hi.po +1 -0
  27. package/lang/translations/hr.po +1 -0
  28. package/lang/translations/hu.po +1 -0
  29. package/lang/translations/hy.po +262 -0
  30. package/lang/translations/id.po +1 -0
  31. package/lang/translations/it.po +1 -0
  32. package/lang/translations/ja.po +1 -0
  33. package/lang/translations/ko.po +1 -0
  34. package/lang/translations/ku.po +1 -0
  35. package/lang/translations/lt.po +1 -0
  36. package/lang/translations/lv.po +1 -0
  37. package/lang/translations/ms.po +1 -0
  38. package/lang/translations/nb.po +1 -0
  39. package/lang/translations/ne.po +1 -0
  40. package/lang/translations/nl.po +1 -0
  41. package/lang/translations/no.po +1 -0
  42. package/lang/translations/pl.po +1 -0
  43. package/lang/translations/pt-br.po +1 -0
  44. package/lang/translations/pt.po +1 -0
  45. package/lang/translations/ro.po +1 -0
  46. package/lang/translations/ru.po +1 -0
  47. package/lang/translations/sk.po +1 -0
  48. package/lang/translations/sl.po +1 -0
  49. package/lang/translations/sq.po +1 -0
  50. package/lang/translations/sr-latn.po +1 -0
  51. package/lang/translations/sr.po +1 -0
  52. package/lang/translations/sv.po +1 -0
  53. package/lang/translations/th.po +1 -0
  54. package/lang/translations/tk.po +1 -0
  55. package/lang/translations/tr.po +1 -0
  56. package/lang/translations/tt.po +1 -0
  57. package/lang/translations/ug.po +1 -0
  58. package/lang/translations/uk.po +1 -0
  59. package/lang/translations/ur.po +1 -0
  60. package/lang/translations/uz.po +1 -0
  61. package/lang/translations/vi.po +1 -0
  62. package/lang/translations/zh-cn.po +1 -0
  63. package/lang/translations/zh.po +1 -0
  64. package/package.json +2 -6
  65. package/src/augmentation.d.ts +76 -76
  66. package/src/augmentation.js +5 -5
  67. package/src/commands/insertcolumncommand.d.ts +55 -55
  68. package/src/commands/insertcolumncommand.js +67 -67
  69. package/src/commands/insertrowcommand.d.ts +54 -54
  70. package/src/commands/insertrowcommand.js +66 -66
  71. package/src/commands/inserttablecommand.d.ts +44 -44
  72. package/src/commands/inserttablecommand.js +69 -69
  73. package/src/commands/mergecellcommand.d.ts +68 -68
  74. package/src/commands/mergecellcommand.js +198 -198
  75. package/src/commands/mergecellscommand.d.ts +28 -28
  76. package/src/commands/mergecellscommand.js +94 -94
  77. package/src/commands/removecolumncommand.d.ts +29 -29
  78. package/src/commands/removecolumncommand.js +109 -109
  79. package/src/commands/removerowcommand.d.ts +29 -29
  80. package/src/commands/removerowcommand.js +82 -82
  81. package/src/commands/selectcolumncommand.d.ts +33 -33
  82. package/src/commands/selectcolumncommand.js +60 -60
  83. package/src/commands/selectrowcommand.d.ts +33 -33
  84. package/src/commands/selectrowcommand.js +56 -56
  85. package/src/commands/setheadercolumncommand.d.ts +50 -50
  86. package/src/commands/setheadercolumncommand.js +71 -71
  87. package/src/commands/setheaderrowcommand.d.ts +53 -53
  88. package/src/commands/setheaderrowcommand.js +79 -79
  89. package/src/commands/splitcellcommand.d.ts +43 -43
  90. package/src/commands/splitcellcommand.js +54 -54
  91. package/src/converters/downcast.d.ts +63 -63
  92. package/src/converters/downcast.js +146 -146
  93. package/src/converters/table-caption-post-fixer.d.ts +20 -20
  94. package/src/converters/table-caption-post-fixer.js +53 -53
  95. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -32
  96. package/src/converters/table-cell-paragraph-post-fixer.js +107 -107
  97. package/src/converters/table-cell-refresh-handler.d.ts +18 -18
  98. package/src/converters/table-cell-refresh-handler.js +45 -45
  99. package/src/converters/table-headings-refresh-handler.d.ts +17 -17
  100. package/src/converters/table-headings-refresh-handler.js +49 -49
  101. package/src/converters/table-layout-post-fixer.d.ts +226 -226
  102. package/src/converters/table-layout-post-fixer.js +367 -367
  103. package/src/converters/tableproperties.d.ts +54 -54
  104. package/src/converters/tableproperties.js +159 -159
  105. package/src/converters/upcasttable.d.ts +49 -49
  106. package/src/converters/upcasttable.js +243 -243
  107. package/src/index.d.ts +60 -60
  108. package/src/index.js +30 -30
  109. package/src/plaintableoutput.d.ts +26 -26
  110. package/src/plaintableoutput.js +123 -123
  111. package/src/table.d.ts +40 -40
  112. package/src/table.js +44 -44
  113. package/src/tablecaption/tablecaptionediting.d.ts +63 -63
  114. package/src/tablecaption/tablecaptionediting.js +122 -122
  115. package/src/tablecaption/tablecaptionui.d.ts +21 -21
  116. package/src/tablecaption/tablecaptionui.js +57 -57
  117. package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -68
  118. package/src/tablecaption/toggletablecaptioncommand.js +104 -104
  119. package/src/tablecaption/utils.d.ts +42 -42
  120. package/src/tablecaption/utils.js +67 -67
  121. package/src/tablecaption.d.ts +24 -24
  122. package/src/tablecaption.js +28 -28
  123. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -32
  124. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -30
  125. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -37
  126. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -44
  127. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -37
  128. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -44
  129. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -51
  130. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -64
  131. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -46
  132. package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -51
  133. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -32
  134. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -30
  135. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -51
  136. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -64
  137. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -62
  138. package/src/tablecellproperties/commands/tablecellpropertycommand.js +92 -92
  139. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -40
  140. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -38
  141. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +43 -43
  142. package/src/tablecellproperties/tablecellpropertiesediting.js +241 -241
  143. package/src/tablecellproperties/tablecellpropertiesui.d.ts +112 -112
  144. package/src/tablecellproperties/tablecellpropertiesui.js +330 -330
  145. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +228 -228
  146. package/src/tablecellproperties/ui/tablecellpropertiesview.js +548 -539
  147. package/src/tablecellproperties.d.ts +30 -30
  148. package/src/tablecellproperties.js +34 -34
  149. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -46
  150. package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -51
  151. package/src/tablecellwidth/tablecellwidthediting.d.ts +29 -29
  152. package/src/tablecellwidth/tablecellwidthediting.js +45 -45
  153. package/src/tableclipboard.d.ts +65 -65
  154. package/src/tableclipboard.js +450 -450
  155. package/src/tablecolumnresize/constants.d.ts +20 -20
  156. package/src/tablecolumnresize/constants.js +20 -20
  157. package/src/tablecolumnresize/converters.d.ts +18 -18
  158. package/src/tablecolumnresize/converters.js +46 -45
  159. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +139 -139
  160. package/src/tablecolumnresize/tablecolumnresizeediting.js +583 -571
  161. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -38
  162. package/src/tablecolumnresize/tablewidthscommand.js +61 -61
  163. package/src/tablecolumnresize/utils.d.ts +148 -141
  164. package/src/tablecolumnresize/utils.js +358 -330
  165. package/src/tablecolumnresize.d.ts +26 -26
  166. package/src/tablecolumnresize.js +30 -30
  167. package/src/tableconfig.d.ts +343 -343
  168. package/src/tableconfig.js +5 -5
  169. package/src/tableediting.d.ts +98 -98
  170. package/src/tableediting.js +191 -191
  171. package/src/tablekeyboard.d.ts +68 -68
  172. package/src/tablekeyboard.js +279 -279
  173. package/src/tablemouse/mouseeventsobserver.d.ts +62 -62
  174. package/src/tablemouse/mouseeventsobserver.js +35 -35
  175. package/src/tablemouse.d.ts +48 -48
  176. package/src/tablemouse.js +172 -172
  177. package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -32
  178. package/src/tableproperties/commands/tablealignmentcommand.js +30 -30
  179. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -32
  180. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -30
  181. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -37
  182. package/src/tableproperties/commands/tablebordercolorcommand.js +44 -44
  183. package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -37
  184. package/src/tableproperties/commands/tableborderstylecommand.js +44 -44
  185. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -51
  186. package/src/tableproperties/commands/tableborderwidthcommand.js +64 -64
  187. package/src/tableproperties/commands/tableheightcommand.d.ts +46 -46
  188. package/src/tableproperties/commands/tableheightcommand.js +54 -54
  189. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -61
  190. package/src/tableproperties/commands/tablepropertycommand.js +80 -80
  191. package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -46
  192. package/src/tableproperties/commands/tablewidthcommand.js +54 -54
  193. package/src/tableproperties/tablepropertiesediting.d.ts +40 -40
  194. package/src/tableproperties/tablepropertiesediting.js +206 -206
  195. package/src/tableproperties/tablepropertiesui.d.ts +114 -114
  196. package/src/tableproperties/tablepropertiesui.js +321 -321
  197. package/src/tableproperties/ui/tablepropertiesview.d.ts +207 -207
  198. package/src/tableproperties/ui/tablepropertiesview.js +466 -457
  199. package/src/tableproperties.d.ts +30 -30
  200. package/src/tableproperties.js +34 -34
  201. package/src/tableselection.d.ts +107 -107
  202. package/src/tableselection.js +297 -297
  203. package/src/tabletoolbar.d.ts +32 -32
  204. package/src/tabletoolbar.js +57 -57
  205. package/src/tableui.d.ts +53 -53
  206. package/src/tableui.js +309 -309
  207. package/src/tableutils.d.ts +448 -448
  208. package/src/tableutils.js +1055 -1041
  209. package/src/tablewalker.d.ts +362 -323
  210. package/src/tablewalker.js +393 -333
  211. package/src/ui/colorinputview.d.ts +140 -140
  212. package/src/ui/colorinputview.js +271 -265
  213. package/src/ui/formrowview.d.ts +61 -61
  214. package/src/ui/formrowview.js +57 -57
  215. package/src/ui/inserttableview.d.ts +77 -77
  216. package/src/ui/inserttableview.js +169 -169
  217. package/src/utils/common.d.ts +42 -42
  218. package/src/utils/common.js +57 -57
  219. package/src/utils/structure.d.ts +245 -245
  220. package/src/utils/structure.js +426 -426
  221. package/src/utils/table-properties.d.ts +67 -67
  222. package/src/utils/table-properties.js +86 -86
  223. package/src/utils/ui/contextualballoon.d.ts +34 -34
  224. package/src/utils/ui/contextualballoon.js +106 -106
  225. package/src/utils/ui/table-properties.d.ts +195 -195
  226. package/src/utils/ui/table-properties.js +362 -362
  227. package/src/utils/ui/widget.d.ts +16 -16
  228. package/src/utils/ui/widget.js +38 -38
  229. package/theme/tablecolumnresize.css +8 -6
@@ -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
+ }