@ckeditor/ckeditor5-table 0.0.0-nightly-20260111.0 → 0.0.0-nightly-next-20260111.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 (274) hide show
  1. package/ckeditor5-metadata.json +16 -7
  2. package/{src → dist}/augmentation.d.ts +4 -15
  3. package/{src → dist}/commands/insertcolumncommand.d.ts +5 -1
  4. package/{src → dist}/commands/insertrowcommand.d.ts +5 -1
  5. package/{src → dist}/commands/inserttablecommand.d.ts +5 -1
  6. package/{src → dist}/commands/inserttablelayoutcommand.d.ts +5 -1
  7. package/{src → dist}/commands/mergecellcommand.d.ts +7 -3
  8. package/{src → dist}/commands/mergecellscommand.d.ts +5 -1
  9. package/{src → dist}/commands/removecolumncommand.d.ts +5 -1
  10. package/{src → dist}/commands/removerowcommand.d.ts +5 -1
  11. package/{src → dist}/commands/selectcolumncommand.d.ts +5 -1
  12. package/{src → dist}/commands/selectrowcommand.d.ts +5 -1
  13. package/{src → dist}/commands/setheadercolumncommand.d.ts +5 -1
  14. package/{src → dist}/commands/setheaderrowcommand.d.ts +5 -1
  15. package/{src → dist}/commands/splitcellcommand.d.ts +5 -1
  16. package/{src → dist}/converters/downcast.d.ts +6 -2
  17. package/{src → dist}/converters/table-caption-post-fixer.d.ts +5 -1
  18. package/{src → dist}/converters/table-cell-paragraph-post-fixer.d.ts +5 -1
  19. package/{src → dist}/converters/table-cell-refresh-handler.d.ts +5 -1
  20. package/{src → dist}/converters/table-headings-refresh-handler.d.ts +5 -1
  21. package/{src → dist}/converters/table-layout-post-fixer.d.ts +5 -1
  22. package/{src → dist}/converters/tableproperties.d.ts +6 -2
  23. package/{src → dist}/converters/upcasttable.d.ts +5 -1
  24. package/dist/index-content.css +30 -30
  25. package/dist/index-editor.css +104 -170
  26. package/dist/index.css +147 -237
  27. package/dist/index.css.map +1 -1
  28. package/{src → dist}/index.d.ts +6 -5
  29. package/dist/index.js +423 -2408
  30. package/dist/index.js.map +1 -1
  31. package/{src → dist}/plaintableoutput.d.ts +5 -1
  32. package/{src → dist}/table.d.ts +6 -2
  33. package/{src → dist}/tablecaption/tablecaptionediting.d.ts +6 -2
  34. package/{src → dist}/tablecaption/tablecaptionui.d.ts +5 -1
  35. package/{src → dist}/tablecaption/toggletablecaptioncommand.d.ts +5 -1
  36. package/{src → dist}/tablecaption/utils.d.ts +5 -1
  37. package/{src → dist}/tablecaption.d.ts +5 -1
  38. package/{src → dist}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +5 -1
  39. package/{src → dist}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +6 -2
  40. package/{src → dist}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +6 -2
  41. package/{src → dist}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +6 -2
  42. package/{src → dist}/tablecellproperties/commands/tablecellheightcommand.d.ts +5 -1
  43. package/{src → dist}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +5 -1
  44. package/{src → dist}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +6 -2
  45. package/{src → dist}/tablecellproperties/commands/tablecellpropertycommand.d.ts +6 -2
  46. package/{src → dist}/tablecellproperties/commands/tablecelltypecommand.d.ts +6 -6
  47. package/{src → dist}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +5 -1
  48. package/{src → dist}/tablecellproperties/tablecellpropertiesediting.d.ts +5 -1
  49. package/{src → dist}/tablecellproperties/tablecellpropertiesui.d.ts +6 -2
  50. package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +22 -0
  51. package/{src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts → dist/tablecellproperties/ui/tablecellpropertiesview.d.ts} +15 -12
  52. package/{src → dist}/tablecellproperties.d.ts +5 -1
  53. package/{src → dist}/tablecellwidth/commands/tablecellwidthcommand.d.ts +5 -1
  54. package/{src → dist}/tablecellwidth/tablecellwidthediting.d.ts +5 -1
  55. package/{src → dist}/tableclipboard.d.ts +7 -3
  56. package/{src → dist}/tablecolumnresize/constants.d.ts +4 -0
  57. package/{src → dist}/tablecolumnresize/converters.d.ts +5 -1
  58. package/{src → dist}/tablecolumnresize/tablecolumnresizeediting.d.ts +6 -2
  59. package/{src → dist}/tablecolumnresize/tablewidthscommand.d.ts +6 -2
  60. package/{src → dist}/tablecolumnresize/utils.d.ts +6 -2
  61. package/{src → dist}/tablecolumnresize.d.ts +5 -1
  62. package/{src → dist}/tableconfig.d.ts +30 -6
  63. package/{src → dist}/tableediting.d.ts +6 -2
  64. package/{src → dist}/tablekeyboard.d.ts +7 -3
  65. package/{src → dist}/tablelayout/commands/tabletypecommand.d.ts +5 -1
  66. package/{src → dist}/tablelayout/tablelayoutediting.d.ts +5 -1
  67. package/{src → dist}/tablelayout/tablelayoutui.d.ts +5 -1
  68. package/{src → dist}/tablelayout.d.ts +5 -1
  69. package/{src → dist}/tablemouse/mouseeventsobserver.d.ts +5 -1
  70. package/{src → dist}/tablemouse.d.ts +5 -1
  71. package/{src → dist}/tableproperties/commands/tablealignmentcommand.d.ts +5 -1
  72. package/{src → dist}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +5 -1
  73. package/{src → dist}/tableproperties/commands/tablebordercolorcommand.d.ts +6 -2
  74. package/{src → dist}/tableproperties/commands/tableborderstylecommand.d.ts +6 -2
  75. package/{src → dist}/tableproperties/commands/tableborderwidthcommand.d.ts +6 -2
  76. package/{src → dist}/tableproperties/commands/tableheightcommand.d.ts +5 -1
  77. package/{src → dist}/tableproperties/commands/tablepropertycommand.d.ts +6 -2
  78. package/{src → dist}/tableproperties/commands/tablewidthcommand.d.ts +5 -1
  79. package/{src → dist}/tableproperties/tablepropertiesediting.d.ts +5 -1
  80. package/{src → dist}/tableproperties/tablepropertiesui.d.ts +6 -2
  81. package/{src → dist}/tableproperties/ui/tablepropertiesview.d.ts +14 -2
  82. package/{src → dist}/tableproperties.d.ts +5 -1
  83. package/{src → dist}/tableselection.d.ts +6 -2
  84. package/{src → dist}/tabletoolbar.d.ts +6 -2
  85. package/{src → dist}/tableui.d.ts +5 -1
  86. package/{src → dist}/tableutils.d.ts +6 -2
  87. package/{src → dist}/tablewalker.d.ts +5 -1
  88. package/{src → dist}/ui/colorinputview.d.ts +6 -2
  89. package/{src → dist}/ui/inserttableview.d.ts +6 -2
  90. package/{src → dist}/utils/common.d.ts +6 -2
  91. package/{src → dist}/utils/structure.d.ts +5 -1
  92. package/{src → dist}/utils/table-properties.d.ts +5 -1
  93. package/{src → dist}/utils/ui/contextualballoon.d.ts +6 -2
  94. package/{src → dist}/utils/ui/table-properties.d.ts +6 -2
  95. package/{src → dist}/utils/ui/widget.d.ts +5 -1
  96. package/lang/contexts.json +2 -4
  97. package/package.json +25 -35
  98. package/theme/formrow.css +2 -0
  99. package/theme/tableform.css +1 -5
  100. package/theme/tableproperties.css +60 -0
  101. package/build/table.js +0 -5
  102. package/build/translations/af.js +0 -1
  103. package/build/translations/ar.js +0 -1
  104. package/build/translations/ast.js +0 -1
  105. package/build/translations/az.js +0 -1
  106. package/build/translations/be.js +0 -1
  107. package/build/translations/bg.js +0 -1
  108. package/build/translations/bn.js +0 -1
  109. package/build/translations/bs.js +0 -1
  110. package/build/translations/ca.js +0 -1
  111. package/build/translations/cs.js +0 -1
  112. package/build/translations/da.js +0 -1
  113. package/build/translations/de-ch.js +0 -1
  114. package/build/translations/de.js +0 -1
  115. package/build/translations/el.js +0 -1
  116. package/build/translations/en-au.js +0 -1
  117. package/build/translations/en-gb.js +0 -1
  118. package/build/translations/eo.js +0 -1
  119. package/build/translations/es-co.js +0 -1
  120. package/build/translations/es.js +0 -1
  121. package/build/translations/et.js +0 -1
  122. package/build/translations/eu.js +0 -1
  123. package/build/translations/fa.js +0 -1
  124. package/build/translations/fi.js +0 -1
  125. package/build/translations/fr.js +0 -1
  126. package/build/translations/gl.js +0 -1
  127. package/build/translations/gu.js +0 -1
  128. package/build/translations/he.js +0 -1
  129. package/build/translations/hi.js +0 -1
  130. package/build/translations/hr.js +0 -1
  131. package/build/translations/hu.js +0 -1
  132. package/build/translations/hy.js +0 -1
  133. package/build/translations/id.js +0 -1
  134. package/build/translations/it.js +0 -1
  135. package/build/translations/ja.js +0 -1
  136. package/build/translations/jv.js +0 -1
  137. package/build/translations/kk.js +0 -1
  138. package/build/translations/km.js +0 -1
  139. package/build/translations/kn.js +0 -1
  140. package/build/translations/ko.js +0 -1
  141. package/build/translations/ku.js +0 -1
  142. package/build/translations/lt.js +0 -1
  143. package/build/translations/lv.js +0 -1
  144. package/build/translations/ms.js +0 -1
  145. package/build/translations/nb.js +0 -1
  146. package/build/translations/ne.js +0 -1
  147. package/build/translations/nl.js +0 -1
  148. package/build/translations/no.js +0 -1
  149. package/build/translations/oc.js +0 -1
  150. package/build/translations/pl.js +0 -1
  151. package/build/translations/pt-br.js +0 -1
  152. package/build/translations/pt.js +0 -1
  153. package/build/translations/ro.js +0 -1
  154. package/build/translations/ru.js +0 -1
  155. package/build/translations/si.js +0 -1
  156. package/build/translations/sk.js +0 -1
  157. package/build/translations/sl.js +0 -1
  158. package/build/translations/sq.js +0 -1
  159. package/build/translations/sr-latn.js +0 -1
  160. package/build/translations/sr.js +0 -1
  161. package/build/translations/sv.js +0 -1
  162. package/build/translations/th.js +0 -1
  163. package/build/translations/ti.js +0 -1
  164. package/build/translations/tk.js +0 -1
  165. package/build/translations/tr.js +0 -1
  166. package/build/translations/tt.js +0 -1
  167. package/build/translations/ug.js +0 -1
  168. package/build/translations/uk.js +0 -1
  169. package/build/translations/ur.js +0 -1
  170. package/build/translations/uz.js +0 -1
  171. package/build/translations/vi.js +0 -1
  172. package/build/translations/zh-cn.js +0 -1
  173. package/build/translations/zh.js +0 -1
  174. package/src/augmentation.js +0 -5
  175. package/src/commands/insertcolumncommand.js +0 -71
  176. package/src/commands/insertrowcommand.js +0 -70
  177. package/src/commands/inserttablecommand.js +0 -69
  178. package/src/commands/inserttablelayoutcommand.js +0 -65
  179. package/src/commands/mergecellcommand.js +0 -206
  180. package/src/commands/mergecellscommand.js +0 -94
  181. package/src/commands/removecolumncommand.js +0 -109
  182. package/src/commands/removerowcommand.js +0 -82
  183. package/src/commands/selectcolumncommand.js +0 -60
  184. package/src/commands/selectrowcommand.js +0 -56
  185. package/src/commands/setheadercolumncommand.js +0 -76
  186. package/src/commands/setheaderrowcommand.js +0 -83
  187. package/src/commands/splitcellcommand.js +0 -58
  188. package/src/converters/downcast.js +0 -298
  189. package/src/converters/table-caption-post-fixer.js +0 -55
  190. package/src/converters/table-cell-paragraph-post-fixer.js +0 -109
  191. package/src/converters/table-cell-refresh-handler.js +0 -47
  192. package/src/converters/table-headings-refresh-handler.js +0 -51
  193. package/src/converters/table-layout-post-fixer.js +0 -369
  194. package/src/converters/tableproperties.js +0 -444
  195. package/src/converters/upcasttable.js +0 -385
  196. package/src/index.js +0 -98
  197. package/src/plaintableoutput.js +0 -49
  198. package/src/table.js +0 -50
  199. package/src/tablecaption/tablecaptionediting.js +0 -136
  200. package/src/tablecaption/tablecaptionui.js +0 -64
  201. package/src/tablecaption/toggletablecaptioncommand.js +0 -105
  202. package/src/tablecaption/utils.js +0 -61
  203. package/src/tablecaption.js +0 -34
  204. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +0 -30
  205. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +0 -44
  206. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +0 -44
  207. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +0 -64
  208. package/src/tablecellproperties/commands/tablecellheightcommand.js +0 -51
  209. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +0 -30
  210. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +0 -64
  211. package/src/tablecellproperties/commands/tablecellpropertycommand.js +0 -138
  212. package/src/tablecellproperties/commands/tablecelltypecommand.js +0 -167
  213. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +0 -38
  214. package/src/tablecellproperties/tablecellpropertiesediting.js +0 -412
  215. package/src/tablecellproperties/tablecellpropertiesui.js +0 -385
  216. package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +0 -128
  217. package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +0 -408
  218. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +0 -229
  219. package/src/tablecellproperties/ui/tablecellpropertiesview.js +0 -612
  220. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +0 -744
  221. package/src/tablecellproperties.js +0 -40
  222. package/src/tablecellwidth/commands/tablecellwidthcommand.js +0 -51
  223. package/src/tablecellwidth/tablecellwidthediting.js +0 -53
  224. package/src/tableclipboard.js +0 -500
  225. package/src/tablecolumnresize/constants.js +0 -33
  226. package/src/tablecolumnresize/converters.js +0 -62
  227. package/src/tablecolumnresize/tablecolumnresizeediting.js +0 -729
  228. package/src/tablecolumnresize/tablewidthscommand.js +0 -61
  229. package/src/tablecolumnresize/utils.js +0 -370
  230. package/src/tablecolumnresize.js +0 -36
  231. package/src/tableconfig.js +0 -5
  232. package/src/tableediting.js +0 -246
  233. package/src/tablekeyboard.js +0 -273
  234. package/src/tablelayout/commands/tabletypecommand.js +0 -68
  235. package/src/tablelayout/tablelayoutediting.js +0 -295
  236. package/src/tablelayout/tablelayoutui.js +0 -196
  237. package/src/tablelayout.js +0 -37
  238. package/src/tablemouse/mouseeventsobserver.js +0 -34
  239. package/src/tablemouse.js +0 -178
  240. package/src/tableproperties/commands/tablealignmentcommand.js +0 -30
  241. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +0 -30
  242. package/src/tableproperties/commands/tablebordercolorcommand.js +0 -44
  243. package/src/tableproperties/commands/tableborderstylecommand.js +0 -44
  244. package/src/tableproperties/commands/tableborderwidthcommand.js +0 -64
  245. package/src/tableproperties/commands/tableheightcommand.js +0 -54
  246. package/src/tableproperties/commands/tablepropertycommand.js +0 -103
  247. package/src/tableproperties/commands/tablewidthcommand.js +0 -54
  248. package/src/tableproperties/tablepropertiesediting.js +0 -546
  249. package/src/tableproperties/tablepropertiesui.js +0 -374
  250. package/src/tableproperties/tablepropertiesuiexperimental.d.ts +0 -136
  251. package/src/tableproperties/tablepropertiesuiexperimental.js +0 -375
  252. package/src/tableproperties/ui/tablepropertiesview.js +0 -520
  253. package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +0 -216
  254. package/src/tableproperties/ui/tablepropertiesviewexperimental.js +0 -544
  255. package/src/tableproperties.js +0 -40
  256. package/src/tableselection.js +0 -323
  257. package/src/tabletoolbar.js +0 -63
  258. package/src/tableui.js +0 -335
  259. package/src/tableutils.js +0 -1282
  260. package/src/tablewalker.js +0 -489
  261. package/src/ui/colorinputview.js +0 -305
  262. package/src/ui/inserttableview.js +0 -192
  263. package/src/utils/common.js +0 -118
  264. package/src/utils/structure.js +0 -452
  265. package/src/utils/table-properties.js +0 -121
  266. package/src/utils/ui/contextualballoon.js +0 -111
  267. package/src/utils/ui/table-properties.js +0 -390
  268. package/src/utils/ui/table-propertiesexperimental.d.ts +0 -215
  269. package/src/utils/ui/table-propertiesexperimental.js +0 -391
  270. package/src/utils/ui/widget.js +0 -56
  271. package/theme/formrow-experimental.css +0 -15
  272. package/theme/tablecellproperties-experimental.css +0 -4
  273. package/theme/tableform-experimental.css +0 -61
  274. package/theme/tableproperties-experimental.css +0 -78
@@ -1,375 +0,0 @@
1
- /**
2
- * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
- */
5
- /**
6
- * @module table/tableproperties/tablepropertiesuiexperimental
7
- */
8
- /* istanbul ignore file -- @preserve */
9
- import { Plugin } from 'ckeditor5/src/core.js';
10
- import { IconTableProperties } from 'ckeditor5/src/icons.js';
11
- import { ButtonView, ContextualBalloon, clickOutsideHandler, getLocalizedColorOptions, normalizeColorOptions } from 'ckeditor5/src/ui.js';
12
- import { debounce } from 'es-toolkit/compat';
13
- import { TablePropertiesViewExperimental } from './ui/tablepropertiesviewexperimental.js';
14
- import { colorFieldValidator, getLocalizedColorErrorText, getLocalizedLengthErrorText, lengthFieldValidator, lineWidthFieldValidator, defaultColors } from '../utils/ui/table-properties.js';
15
- import { getSelectionAffectedTableWidget } from '../utils/ui/widget.js';
16
- import { getBalloonTablePositionData, repositionContextualBalloon } from '../utils/ui/contextualballoon.js';
17
- import { getNormalizedDefaultProperties, getNormalizedDefaultTableProperties } from '../utils/table-properties.js';
18
- const ERROR_TEXT_TIMEOUT = 500;
19
- // Map of view properties and related commands.
20
- const propertyToCommandMap = {
21
- borderStyle: 'tableBorderStyle',
22
- borderColor: 'tableBorderColor',
23
- borderWidth: 'tableBorderWidth',
24
- backgroundColor: 'tableBackgroundColor',
25
- width: 'tableWidth',
26
- height: 'tableHeight',
27
- alignment: 'tableAlignment'
28
- };
29
- /**
30
- * The table properties UI plugin. It introduces the `'tableProperties'` button
31
- * that opens a form allowing to specify visual styling of an entire table.
32
- *
33
- * It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.
34
- */
35
- export class TablePropertiesUIExperimental extends Plugin {
36
- /**
37
- * The default table properties.
38
- */
39
- _defaultContentTableProperties;
40
- /**
41
- * The default layout table properties.
42
- */
43
- _defaultLayoutTableProperties;
44
- /**
45
- * The contextual balloon plugin instance.
46
- */
47
- _balloon;
48
- /**
49
- * The properties form view displayed inside the balloon.
50
- */
51
- view = null;
52
- /**
53
- * The properties form view displayed inside the balloon (content table).
54
- */
55
- _viewWithContentTableDefaults = null;
56
- /**
57
- * The properties form view displayed inside the balloon (layout table).
58
- */
59
- _viewWithLayoutTableDefaults = null;
60
- /**
61
- * The batch used to undo all changes made by the form (which are live, as the user types)
62
- * when "Cancel" was pressed. Each time the view is shown, a new batch is created.
63
- */
64
- _undoStepBatch;
65
- /**
66
- * Flag used to indicate whether view is ready to execute update commands
67
- * (it finished loading initial data).
68
- */
69
- _isReady;
70
- /**
71
- * @inheritDoc
72
- */
73
- static get requires() {
74
- return [ContextualBalloon];
75
- }
76
- /**
77
- * @inheritDoc
78
- */
79
- static get pluginName() {
80
- return 'TablePropertiesUIExperimental';
81
- }
82
- /**
83
- * @inheritDoc
84
- */
85
- static get isOfficialPlugin() {
86
- return true;
87
- }
88
- /**
89
- * @inheritDoc
90
- */
91
- constructor(editor) {
92
- super(editor);
93
- editor.config.define('table.tableProperties', {
94
- borderColors: defaultColors,
95
- backgroundColors: defaultColors
96
- });
97
- }
98
- /**
99
- * @inheritDoc
100
- */
101
- init() {
102
- const editor = this.editor;
103
- this._defaultContentTableProperties = getNormalizedDefaultTableProperties(editor.config.get('table.tableProperties.defaultProperties'), {
104
- includeAlignmentProperty: true
105
- });
106
- this._defaultLayoutTableProperties = getNormalizedDefaultProperties();
107
- this._balloon = editor.plugins.get(ContextualBalloon);
108
- editor.ui.componentFactory.add('tableProperties', () => this._createTablePropertiesButton());
109
- }
110
- /**
111
- * Creates the table properties button.
112
- *
113
- * @internal
114
- */
115
- _createTablePropertiesButton() {
116
- const editor = this.editor;
117
- const t = editor.t;
118
- const view = new ButtonView(editor.locale);
119
- view.set({
120
- label: t('Table properties'),
121
- icon: IconTableProperties,
122
- tooltip: true
123
- });
124
- this.listenTo(view, 'execute', () => this._showView());
125
- const commands = Object.values(propertyToCommandMap)
126
- .map(commandName => editor.commands.get(commandName));
127
- view.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => (areEnabled.some(isCommandEnabled => isCommandEnabled)));
128
- return view;
129
- }
130
- /**
131
- * @inheritDoc
132
- */
133
- destroy() {
134
- super.destroy();
135
- // Destroy created UI components as they are not automatically destroyed.
136
- // See https://github.com/ckeditor/ckeditor5/issues/1341.
137
- if (this.view) {
138
- this.view.destroy();
139
- }
140
- }
141
- /**
142
- * Creates the {@link module:table/tableproperties/ui/tablepropertiesview~TablePropertiesView} instance.
143
- *
144
- * @returns The table properties form view instance.
145
- */
146
- _createPropertiesView(defaultTableProperties) {
147
- const editor = this.editor;
148
- const config = editor.config.get('table.tableProperties');
149
- const borderColorsConfig = normalizeColorOptions(config.borderColors);
150
- const localizedBorderColors = getLocalizedColorOptions(editor.locale, borderColorsConfig);
151
- const backgroundColorsConfig = normalizeColorOptions(config.backgroundColors);
152
- const localizedBackgroundColors = getLocalizedColorOptions(editor.locale, backgroundColorsConfig);
153
- const hasColorPicker = config.colorPicker !== false;
154
- const view = new TablePropertiesViewExperimental(editor.locale, {
155
- borderColors: localizedBorderColors,
156
- backgroundColors: localizedBackgroundColors,
157
- defaultTableProperties,
158
- colorPickerConfig: hasColorPicker ? (config.colorPicker || {}) : false
159
- });
160
- const t = editor.t;
161
- // Render the view so its #element is available for the clickOutsideHandler.
162
- view.render();
163
- this.listenTo(view, 'submit', () => {
164
- this._hideView();
165
- });
166
- this.listenTo(view, 'cancel', () => {
167
- // https://github.com/ckeditor/ckeditor5/issues/6180
168
- if (this._undoStepBatch.operations.length) {
169
- editor.execute('undo', this._undoStepBatch);
170
- }
171
- this._hideView();
172
- });
173
- // Close the balloon on Esc key press.
174
- view.keystrokes.set('Esc', (data, cancel) => {
175
- this._hideView();
176
- cancel();
177
- });
178
- // Close on click outside of balloon panel element.
179
- clickOutsideHandler({
180
- emitter: view,
181
- activator: () => this._isViewInBalloon,
182
- contextElements: [this._balloon.view.element],
183
- callback: () => this._hideView()
184
- });
185
- const colorErrorText = getLocalizedColorErrorText(t);
186
- const lengthErrorText = getLocalizedLengthErrorText(t);
187
- // Create the "UI -> editor data" binding.
188
- // These listeners update the editor data (via table commands) when any observable
189
- // property of the view has changed. They also validate the value and display errors in the UI
190
- // when necessary. This makes the view live, which means the changes are
191
- // visible in the editing as soon as the user types or changes fields' values.
192
- view.on('change:borderStyle', this._getPropertyChangeCallback('tableBorderStyle'));
193
- view.on('change:borderColor', this._getValidatedPropertyChangeCallback({
194
- viewField: view.borderColorInput,
195
- commandName: 'tableBorderColor',
196
- errorText: colorErrorText,
197
- validator: colorFieldValidator
198
- }));
199
- view.on('change:borderWidth', this._getValidatedPropertyChangeCallback({
200
- viewField: view.borderWidthInput,
201
- commandName: 'tableBorderWidth',
202
- errorText: lengthErrorText,
203
- validator: lineWidthFieldValidator
204
- }));
205
- view.on('change:backgroundColor', this._getValidatedPropertyChangeCallback({
206
- viewField: view.backgroundInput,
207
- commandName: 'tableBackgroundColor',
208
- errorText: colorErrorText,
209
- validator: colorFieldValidator
210
- }));
211
- view.on('change:width', this._getValidatedPropertyChangeCallback({
212
- viewField: view.widthInput,
213
- commandName: 'tableWidth',
214
- errorText: lengthErrorText,
215
- validator: lengthFieldValidator
216
- }));
217
- view.on('change:height', this._getValidatedPropertyChangeCallback({
218
- viewField: view.heightInput,
219
- commandName: 'tableHeight',
220
- errorText: lengthErrorText,
221
- validator: lengthFieldValidator
222
- }));
223
- view.on('change:alignment', this._getPropertyChangeCallback('tableAlignment'));
224
- return view;
225
- }
226
- /**
227
- * In this method the "editor data -> UI" binding is happening.
228
- *
229
- * When executed, this method obtains selected table property values from various table commands
230
- * and passes them to the {@link #view}.
231
- *
232
- * This way, the UI stays up–to–date with the editor data.
233
- */
234
- _fillViewFormFromCommandValues() {
235
- const commands = this.editor.commands;
236
- const borderStyleCommand = commands.get('tableBorderStyle');
237
- Object.entries(propertyToCommandMap)
238
- .map(([property, commandName]) => {
239
- const propertyKey = property;
240
- const defaultValue = this.view === this._viewWithContentTableDefaults ?
241
- this._defaultContentTableProperties[propertyKey] || '' :
242
- this._defaultLayoutTableProperties[propertyKey] || '';
243
- return [propertyKey, (commands.get(commandName).value || defaultValue)];
244
- })
245
- .forEach(([property, value]) => {
246
- // Do not set the `border-color` and `border-width` fields if `border-style:none`.
247
- if ((property === 'borderColor' || property === 'borderWidth') && borderStyleCommand.value === 'none') {
248
- return;
249
- }
250
- this.view.set(property, value);
251
- });
252
- this._isReady = true;
253
- }
254
- /**
255
- * Shows the {@link #view} in the {@link #_balloon}.
256
- *
257
- * **Note**: Each time a view is shown, the new {@link #_undoStepBatch} is created that contains
258
- * all changes made to the document when the view is visible, allowing a single undo step
259
- * for all of them.
260
- */
261
- _showView() {
262
- const editor = this.editor;
263
- const viewTable = getSelectionAffectedTableWidget(editor.editing.view.document.selection);
264
- const modelTable = viewTable && editor.editing.mapper.toModelElement(viewTable);
265
- const useDefaults = !modelTable || modelTable.getAttribute('tableType') !== 'layout';
266
- if (useDefaults && !this._viewWithContentTableDefaults) {
267
- this._viewWithContentTableDefaults = this._createPropertiesView(this._defaultContentTableProperties);
268
- }
269
- else if (!useDefaults && !this._viewWithLayoutTableDefaults) {
270
- this._viewWithLayoutTableDefaults = this._createPropertiesView(this._defaultLayoutTableProperties);
271
- }
272
- this.view = useDefaults ? this._viewWithContentTableDefaults : this._viewWithLayoutTableDefaults;
273
- this.listenTo(editor.ui, 'update', () => {
274
- this._updateView();
275
- });
276
- // Update the view with the model values.
277
- this._fillViewFormFromCommandValues();
278
- this._balloon.add({
279
- view: this.view,
280
- position: getBalloonTablePositionData(editor)
281
- });
282
- // Create a new batch. Clicking "Cancel" will undo this batch.
283
- this._undoStepBatch = editor.model.createBatch();
284
- // Basic a11y.
285
- this.view.focus();
286
- }
287
- /**
288
- * Removes the {@link #view} from the {@link #_balloon}.
289
- */
290
- _hideView() {
291
- const editor = this.editor;
292
- this.stopListening(editor.ui, 'update');
293
- this._isReady = false;
294
- // Blur any input element before removing it from DOM to prevent issues in some browsers.
295
- // See https://github.com/ckeditor/ckeditor5/issues/1501.
296
- this.view.saveButtonView.focus();
297
- this._balloon.remove(this.view);
298
- // Make sure the focus is not lost in the process by putting it directly
299
- // into the editing view.
300
- this.editor.editing.view.focus();
301
- }
302
- /**
303
- * Repositions the {@link #_balloon} or hides the {@link #view} if a table is no longer selected.
304
- */
305
- _updateView() {
306
- const editor = this.editor;
307
- const viewDocument = editor.editing.view.document;
308
- if (!getSelectionAffectedTableWidget(viewDocument.selection)) {
309
- this._hideView();
310
- }
311
- else if (this._isViewVisible) {
312
- repositionContextualBalloon(editor, 'table');
313
- }
314
- }
315
- /**
316
- * Returns `true` when the {@link #view} is the visible in the {@link #_balloon}.
317
- */
318
- get _isViewVisible() {
319
- return !!this.view && this._balloon.visibleView === this.view;
320
- }
321
- /**
322
- * Returns `true` when the {@link #view} is in the {@link #_balloon}.
323
- */
324
- get _isViewInBalloon() {
325
- return !!this.view && this._balloon.hasView(this.view);
326
- }
327
- /**
328
- * Creates a callback that when executed upon {@link #view view's} property change
329
- * executes a related editor command with the new property value.
330
- *
331
- * If new value will be set to the default value, the command will not be executed.
332
- *
333
- * @param commandName The command that will be executed.
334
- */
335
- _getPropertyChangeCallback(commandName) {
336
- return (evt, propertyName, newValue) => {
337
- // Do not execute the command on initial call (opening the table properties view).
338
- if (!this._isReady) {
339
- return;
340
- }
341
- this.editor.execute(commandName, {
342
- value: newValue,
343
- batch: this._undoStepBatch
344
- });
345
- };
346
- }
347
- /**
348
- * Creates a callback that when executed upon {@link #view view's} property change:
349
- * * executes a related editor command with the new property value if the value is valid,
350
- * * or sets the error text next to the invalid field, if the value did not pass the validation.
351
- */
352
- _getValidatedPropertyChangeCallback(options) {
353
- const { commandName, viewField, validator, errorText } = options;
354
- const setErrorTextDebounced = debounce(() => {
355
- viewField.errorText = errorText;
356
- }, ERROR_TEXT_TIMEOUT);
357
- return (evt, propertyName, newValue) => {
358
- setErrorTextDebounced.cancel();
359
- // Do not execute the command on initial call (opening the table properties view).
360
- if (!this._isReady) {
361
- return;
362
- }
363
- if (validator(newValue)) {
364
- this.editor.execute(commandName, {
365
- value: newValue,
366
- batch: this._undoStepBatch
367
- });
368
- viewField.errorText = null;
369
- }
370
- else {
371
- setErrorTextDebounced();
372
- }
373
- };
374
- }
375
- }