@ckeditor/ckeditor5-table 36.0.1 → 37.0.0-alpha.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 (170) hide show
  1. package/README.md +1 -1
  2. package/build/table.js +1 -1
  3. package/ckeditor5-metadata.json +6 -6
  4. package/package.json +34 -29
  5. package/src/augmentation.d.ts +76 -0
  6. package/src/augmentation.js +5 -0
  7. package/src/commands/insertcolumncommand.d.ts +55 -0
  8. package/src/commands/insertcolumncommand.js +45 -60
  9. package/src/commands/insertrowcommand.d.ts +54 -0
  10. package/src/commands/insertrowcommand.js +44 -59
  11. package/src/commands/inserttablecommand.d.ts +44 -0
  12. package/src/commands/inserttablecommand.js +50 -68
  13. package/src/commands/mergecellcommand.d.ts +68 -0
  14. package/src/commands/mergecellcommand.js +169 -244
  15. package/src/commands/mergecellscommand.d.ts +28 -0
  16. package/src/commands/mergecellscommand.js +72 -101
  17. package/src/commands/removecolumncommand.d.ts +29 -0
  18. package/src/commands/removecolumncommand.js +88 -102
  19. package/src/commands/removerowcommand.d.ts +29 -0
  20. package/src/commands/removerowcommand.js +63 -80
  21. package/src/commands/selectcolumncommand.d.ts +33 -0
  22. package/src/commands/selectcolumncommand.js +41 -54
  23. package/src/commands/selectrowcommand.d.ts +33 -0
  24. package/src/commands/selectrowcommand.js +38 -48
  25. package/src/commands/setheadercolumncommand.d.ts +50 -0
  26. package/src/commands/setheadercolumncommand.js +48 -73
  27. package/src/commands/setheaderrowcommand.d.ts +53 -0
  28. package/src/commands/setheaderrowcommand.js +56 -85
  29. package/src/commands/splitcellcommand.d.ts +43 -0
  30. package/src/commands/splitcellcommand.js +35 -49
  31. package/src/converters/downcast.d.ts +63 -0
  32. package/src/converters/downcast.js +98 -130
  33. package/src/converters/table-caption-post-fixer.d.ts +20 -0
  34. package/src/converters/table-caption-post-fixer.js +36 -52
  35. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -0
  36. package/src/converters/table-cell-paragraph-post-fixer.js +88 -119
  37. package/src/converters/table-cell-refresh-handler.d.ts +18 -0
  38. package/src/converters/table-cell-refresh-handler.js +29 -48
  39. package/src/converters/table-headings-refresh-handler.d.ts +17 -0
  40. package/src/converters/table-headings-refresh-handler.js +35 -54
  41. package/src/converters/table-layout-post-fixer.d.ts +226 -0
  42. package/src/converters/table-layout-post-fixer.js +276 -313
  43. package/src/converters/tableproperties.d.ts +54 -0
  44. package/src/converters/tableproperties.js +136 -168
  45. package/src/converters/upcasttable.d.ts +49 -0
  46. package/src/converters/upcasttable.js +199 -251
  47. package/src/index.d.ts +60 -0
  48. package/src/index.js +1 -2
  49. package/src/plaintableoutput.d.ts +25 -0
  50. package/src/plaintableoutput.js +107 -135
  51. package/src/table.d.ts +33 -0
  52. package/src/table.js +12 -88
  53. package/src/tablecaption/tablecaptionediting.d.ts +63 -0
  54. package/src/tablecaption/tablecaptionediting.js +104 -135
  55. package/src/tablecaption/tablecaptionui.d.ts +21 -0
  56. package/src/tablecaption/tablecaptionui.js +42 -58
  57. package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -0
  58. package/src/tablecaption/toggletablecaptioncommand.js +77 -92
  59. package/src/tablecaption/utils.d.ts +42 -0
  60. package/src/tablecaption/utils.js +35 -61
  61. package/src/tablecaption.d.ts +22 -0
  62. package/src/tablecaption.js +12 -19
  63. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -0
  64. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +14 -20
  65. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -0
  66. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +27 -37
  67. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -0
  68. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +27 -37
  69. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -0
  70. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +42 -53
  71. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -0
  72. package/src/tablecellproperties/commands/tablecellheightcommand.js +29 -36
  73. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -0
  74. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +14 -20
  75. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -0
  76. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +42 -53
  77. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -0
  78. package/src/tablecellproperties/commands/tablecellpropertycommand.js +77 -122
  79. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -0
  80. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +14 -20
  81. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +41 -0
  82. package/src/tablecellproperties/tablecellpropertiesediting.js +193 -236
  83. package/src/tablecellproperties/tablecellpropertiesui.d.ts +111 -0
  84. package/src/tablecellproperties/tablecellpropertiesui.js +302 -456
  85. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +227 -0
  86. package/src/tablecellproperties/ui/tablecellpropertiesview.js +509 -844
  87. package/src/tablecellproperties.d.ts +28 -0
  88. package/src/tablecellproperties.js +12 -98
  89. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -0
  90. package/src/tablecellwidth/commands/tablecellwidthcommand.js +29 -35
  91. package/src/tablecellwidth/tablecellwidthediting.d.ts +28 -0
  92. package/src/tablecellwidth/tablecellwidthediting.js +25 -38
  93. package/src/tableclipboard.d.ts +63 -0
  94. package/src/tableclipboard.js +429 -568
  95. package/src/tablecolumnresize/constants.d.ts +20 -0
  96. package/src/tablecolumnresize/constants.js +0 -10
  97. package/src/tablecolumnresize/converters.d.ts +18 -0
  98. package/src/tablecolumnresize/converters.js +35 -119
  99. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +137 -0
  100. package/src/tablecolumnresize/tablecolumnresizeediting.js +545 -711
  101. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -0
  102. package/src/tablecolumnresize/tablewidthscommand.js +61 -0
  103. package/src/tablecolumnresize/utils.d.ts +141 -0
  104. package/src/tablecolumnresize/utils.js +256 -233
  105. package/src/tablecolumnresize.d.ts +24 -0
  106. package/src/tablecolumnresize.js +12 -19
  107. package/src/tableconfig.d.ts +331 -0
  108. package/src/tableconfig.js +5 -0
  109. package/src/tableediting.d.ts +97 -0
  110. package/src/tableediting.js +157 -176
  111. package/src/tablekeyboard.d.ts +63 -0
  112. package/src/tablekeyboard.js +261 -344
  113. package/src/tablemouse/mouseeventsobserver.d.ts +62 -0
  114. package/src/tablemouse/mouseeventsobserver.js +13 -50
  115. package/src/tablemouse.d.ts +46 -0
  116. package/src/tablemouse.js +154 -202
  117. package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -0
  118. package/src/tableproperties/commands/tablealignmentcommand.js +14 -20
  119. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -0
  120. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +14 -20
  121. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -0
  122. package/src/tableproperties/commands/tablebordercolorcommand.js +27 -37
  123. package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -0
  124. package/src/tableproperties/commands/tableborderstylecommand.js +27 -37
  125. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -0
  126. package/src/tableproperties/commands/tableborderwidthcommand.js +42 -53
  127. package/src/tableproperties/commands/tableheightcommand.d.ts +46 -0
  128. package/src/tableproperties/commands/tableheightcommand.js +29 -33
  129. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -0
  130. package/src/tableproperties/commands/tablepropertycommand.js +68 -112
  131. package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -0
  132. package/src/tableproperties/commands/tablewidthcommand.js +29 -33
  133. package/src/tableproperties/tablepropertiesediting.d.ts +39 -0
  134. package/src/tableproperties/tablepropertiesediting.js +163 -210
  135. package/src/tableproperties/tablepropertiesui.d.ts +113 -0
  136. package/src/tableproperties/tablepropertiesui.js +293 -439
  137. package/src/tableproperties/ui/tablepropertiesview.d.ts +203 -0
  138. package/src/tableproperties/ui/tablepropertiesview.js +427 -718
  139. package/src/tableproperties.d.ts +28 -0
  140. package/src/tableproperties.js +12 -95
  141. package/src/tableselection.d.ts +106 -0
  142. package/src/tableselection.js +279 -376
  143. package/src/tabletoolbar.d.ts +31 -0
  144. package/src/tabletoolbar.js +38 -92
  145. package/src/tableui.d.ts +53 -0
  146. package/src/tableui.js +281 -338
  147. package/src/tableutils.d.ts +448 -0
  148. package/src/tableutils.js +1015 -1229
  149. package/src/tablewalker.d.ts +323 -0
  150. package/src/tablewalker.js +308 -548
  151. package/src/ui/colorinputview.d.ts +143 -0
  152. package/src/ui/colorinputview.js +229 -366
  153. package/src/ui/formrowview.d.ts +61 -0
  154. package/src/ui/formrowview.js +38 -84
  155. package/src/ui/inserttableview.d.ts +77 -0
  156. package/src/ui/inserttableview.js +152 -242
  157. package/src/utils/common.d.ts +42 -0
  158. package/src/utils/common.js +33 -57
  159. package/src/utils/structure.d.ts +245 -0
  160. package/src/utils/structure.js +261 -379
  161. package/src/utils/table-properties.d.ts +67 -0
  162. package/src/utils/table-properties.js +60 -81
  163. package/src/utils/ui/contextualballoon.d.ts +34 -0
  164. package/src/utils/ui/contextualballoon.js +70 -89
  165. package/src/utils/ui/table-properties.d.ts +193 -0
  166. package/src/utils/ui/table-properties.js +259 -319
  167. package/src/utils/ui/widget.d.ts +16 -0
  168. package/src/utils/ui/widget.js +24 -46
  169. package/src/tablecolumnresize/tablecolumnwidthscommand.js +0 -55
  170. package/src/tablecolumnresize/tablewidthresizecommand.js +0 -65
@@ -2,14 +2,11 @@
2
2
  * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
-
6
5
  /**
7
6
  * @module table/tablecellproperties/tablecellpropertiesediting
8
7
  */
9
-
10
8
  import { Plugin } from 'ckeditor5/src/core';
11
9
  import { addBorderRules, addPaddingRules, addBackgroundRules } from 'ckeditor5/src/engine';
12
-
13
10
  import { downcastAttributeToStyle, upcastBorderStyles } from './../converters/tableproperties';
14
11
  import TableEditing from './../tableediting';
15
12
  import TableCellWidthEditing from '../tablecellwidth/tablecellwidthediting';
@@ -23,10 +20,8 @@ import TableCellBorderColorCommand from './commands/tablecellbordercolorcommand'
23
20
  import TableCellBorderWidthCommand from './commands/tablecellborderwidthcommand';
24
21
  import { getNormalizedDefaultProperties } from '../utils/table-properties';
25
22
  import { enableProperty } from '../utils/common';
26
-
27
23
  const VALIGN_VALUES_REG_EXP = /^(top|middle|bottom)$/;
28
24
  const ALIGN_VALUES_REG_EXP = /^(left|center|right|justify)$/;
29
-
30
25
  /**
31
26
  * The table cell properties editing feature.
32
27
  *
@@ -45,240 +40,202 @@ const ALIGN_VALUES_REG_EXP = /^(left|center|right|justify)$/;
45
40
  * - cell padding: the `'tableCellPadding'` command
46
41
  * - horizontal and vertical alignment: the `'tableCellHorizontalAlignment'` and `'tableCellVerticalAlignment'` commands
47
42
  * - width and height: the `'tableCellWidth'` and `'tableCellHeight'` commands
48
- *
49
- * @extends module:core/plugin~Plugin
50
43
  */
51
44
  export default class TableCellPropertiesEditing extends Plugin {
52
- /**
53
- * @inheritDoc
54
- */
55
- static get pluginName() {
56
- return 'TableCellPropertiesEditing';
57
- }
58
-
59
- /**
60
- * @inheritDoc
61
- */
62
- static get requires() {
63
- return [ TableEditing, TableCellWidthEditing ];
64
- }
65
-
66
- /**
67
- * @inheritDoc
68
- */
69
- init() {
70
- const editor = this.editor;
71
- const schema = editor.model.schema;
72
- const conversion = editor.conversion;
73
-
74
- editor.config.define( 'table.tableCellProperties.defaultProperties', {} );
75
-
76
- const defaultTableCellProperties = getNormalizedDefaultProperties(
77
- editor.config.get( 'table.tableCellProperties.defaultProperties' ),
78
- {
79
- includeVerticalAlignmentProperty: true,
80
- includeHorizontalAlignmentProperty: true,
81
- includePaddingProperty: true,
82
- isRightToLeftContent: editor.locale.contentLanguageDirection === 'rtl'
83
- }
84
- );
85
-
86
- editor.data.addStyleProcessorRules( addBorderRules );
87
- enableBorderProperties( schema, conversion, {
88
- color: defaultTableCellProperties.borderColor,
89
- style: defaultTableCellProperties.borderStyle,
90
- width: defaultTableCellProperties.borderWidth
91
- } );
92
- editor.commands.add( 'tableCellBorderStyle', new TableCellBorderStyleCommand( editor, defaultTableCellProperties.borderStyle ) );
93
- editor.commands.add( 'tableCellBorderColor', new TableCellBorderColorCommand( editor, defaultTableCellProperties.borderColor ) );
94
- editor.commands.add( 'tableCellBorderWidth', new TableCellBorderWidthCommand( editor, defaultTableCellProperties.borderWidth ) );
95
-
96
- enableProperty( schema, conversion, {
97
- modelAttribute: 'tableCellHeight',
98
- styleName: 'height',
99
- defaultValue: defaultTableCellProperties.height
100
- } );
101
- editor.commands.add( 'tableCellHeight', new TableCellHeightCommand( editor, defaultTableCellProperties.height ) );
102
-
103
- editor.data.addStyleProcessorRules( addPaddingRules );
104
- enableProperty( schema, conversion, {
105
- modelAttribute: 'tableCellPadding',
106
- styleName: 'padding',
107
- reduceBoxSides: true,
108
- defaultValue: defaultTableCellProperties.padding
109
- } );
110
- editor.commands.add( 'tableCellPadding', new TableCellPaddingCommand( editor, defaultTableCellProperties.padding ) );
111
-
112
- editor.data.addStyleProcessorRules( addBackgroundRules );
113
- enableProperty( schema, conversion, {
114
- modelAttribute: 'tableCellBackgroundColor',
115
- styleName: 'background-color',
116
- defaultValue: defaultTableCellProperties.backgroundColor
117
- } );
118
- editor.commands.add(
119
- 'tableCellBackgroundColor',
120
- new TableCellBackgroundColorCommand( editor, defaultTableCellProperties.backgroundColor )
121
- );
122
-
123
- enableHorizontalAlignmentProperty( schema, conversion, defaultTableCellProperties.horizontalAlignment );
124
- editor.commands.add(
125
- 'tableCellHorizontalAlignment',
126
- new TableCellHorizontalAlignmentCommand( editor, defaultTableCellProperties.horizontalAlignment )
127
- );
128
-
129
- enableVerticalAlignmentProperty( schema, conversion, defaultTableCellProperties.verticalAlignment );
130
- editor.commands.add(
131
- 'tableCellVerticalAlignment',
132
- new TableCellVerticalAlignmentCommand( editor, defaultTableCellProperties.verticalAlignment )
133
- );
134
- }
45
+ /**
46
+ * @inheritDoc
47
+ */
48
+ static get pluginName() {
49
+ return 'TableCellPropertiesEditing';
50
+ }
51
+ /**
52
+ * @inheritDoc
53
+ */
54
+ static get requires() {
55
+ return [TableEditing, TableCellWidthEditing];
56
+ }
57
+ /**
58
+ * @inheritDoc
59
+ */
60
+ init() {
61
+ const editor = this.editor;
62
+ const schema = editor.model.schema;
63
+ const conversion = editor.conversion;
64
+ editor.config.define('table.tableCellProperties.defaultProperties', {});
65
+ const defaultTableCellProperties = getNormalizedDefaultProperties(editor.config.get('table.tableCellProperties.defaultProperties'), {
66
+ includeVerticalAlignmentProperty: true,
67
+ includeHorizontalAlignmentProperty: true,
68
+ includePaddingProperty: true,
69
+ isRightToLeftContent: editor.locale.contentLanguageDirection === 'rtl'
70
+ });
71
+ editor.data.addStyleProcessorRules(addBorderRules);
72
+ enableBorderProperties(schema, conversion, {
73
+ color: defaultTableCellProperties.borderColor,
74
+ style: defaultTableCellProperties.borderStyle,
75
+ width: defaultTableCellProperties.borderWidth
76
+ });
77
+ editor.commands.add('tableCellBorderStyle', new TableCellBorderStyleCommand(editor, defaultTableCellProperties.borderStyle));
78
+ editor.commands.add('tableCellBorderColor', new TableCellBorderColorCommand(editor, defaultTableCellProperties.borderColor));
79
+ editor.commands.add('tableCellBorderWidth', new TableCellBorderWidthCommand(editor, defaultTableCellProperties.borderWidth));
80
+ enableProperty(schema, conversion, {
81
+ modelAttribute: 'tableCellHeight',
82
+ styleName: 'height',
83
+ defaultValue: defaultTableCellProperties.height
84
+ });
85
+ editor.commands.add('tableCellHeight', new TableCellHeightCommand(editor, defaultTableCellProperties.height));
86
+ editor.data.addStyleProcessorRules(addPaddingRules);
87
+ enableProperty(schema, conversion, {
88
+ modelAttribute: 'tableCellPadding',
89
+ styleName: 'padding',
90
+ reduceBoxSides: true,
91
+ defaultValue: defaultTableCellProperties.padding
92
+ });
93
+ editor.commands.add('tableCellPadding', new TableCellPaddingCommand(editor, defaultTableCellProperties.padding));
94
+ editor.data.addStyleProcessorRules(addBackgroundRules);
95
+ enableProperty(schema, conversion, {
96
+ modelAttribute: 'tableCellBackgroundColor',
97
+ styleName: 'background-color',
98
+ defaultValue: defaultTableCellProperties.backgroundColor
99
+ });
100
+ editor.commands.add('tableCellBackgroundColor', new TableCellBackgroundColorCommand(editor, defaultTableCellProperties.backgroundColor));
101
+ enableHorizontalAlignmentProperty(schema, conversion, defaultTableCellProperties.horizontalAlignment);
102
+ editor.commands.add('tableCellHorizontalAlignment', new TableCellHorizontalAlignmentCommand(editor, defaultTableCellProperties.horizontalAlignment));
103
+ enableVerticalAlignmentProperty(schema, conversion, defaultTableCellProperties.verticalAlignment);
104
+ editor.commands.add('tableCellVerticalAlignment', new TableCellVerticalAlignmentCommand(editor, defaultTableCellProperties.verticalAlignment));
105
+ }
135
106
  }
136
-
137
- // Enables the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` attributes for table cells.
138
- //
139
- // @param {module:engine/model/schema~Schema} schema
140
- // @param {module:engine/conversion/conversion~Conversion} conversion
141
- // @param {Object} defaultBorder The default border values.
142
- // @param {String} defaultBorder.color The default `tableCellBorderColor` value.
143
- // @param {String} defaultBorder.style The default `tableCellBorderStyle` value.
144
- // @param {String} defaultBorder.width The default `tableCellBorderWidth` value.
145
- function enableBorderProperties( schema, conversion, defaultBorder ) {
146
- const modelAttributes = {
147
- width: 'tableCellBorderWidth',
148
- color: 'tableCellBorderColor',
149
- style: 'tableCellBorderStyle'
150
- };
151
-
152
- schema.extend( 'tableCell', {
153
- allowAttributes: Object.values( modelAttributes )
154
- } );
155
-
156
- upcastBorderStyles( conversion, 'td', modelAttributes, defaultBorder );
157
- upcastBorderStyles( conversion, 'th', modelAttributes, defaultBorder );
158
- downcastAttributeToStyle( conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.style, styleName: 'border-style' } );
159
- downcastAttributeToStyle( conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.color, styleName: 'border-color' } );
160
- downcastAttributeToStyle( conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.width, styleName: 'border-width' } );
107
+ /**
108
+ * Enables the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` attributes for table cells.
109
+ *
110
+ * @param defaultBorder The default border values.
111
+ * @param defaultBorder.color The default `tableCellBorderColor` value.
112
+ * @param defaultBorder.style The default `tableCellBorderStyle` value.
113
+ * @param defaultBorder.width The default `tableCellBorderWidth` value.
114
+ */
115
+ function enableBorderProperties(schema, conversion, defaultBorder) {
116
+ const modelAttributes = {
117
+ width: 'tableCellBorderWidth',
118
+ color: 'tableCellBorderColor',
119
+ style: 'tableCellBorderStyle'
120
+ };
121
+ schema.extend('tableCell', {
122
+ allowAttributes: Object.values(modelAttributes)
123
+ });
124
+ upcastBorderStyles(conversion, 'td', modelAttributes, defaultBorder);
125
+ upcastBorderStyles(conversion, 'th', modelAttributes, defaultBorder);
126
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.style, styleName: 'border-style' });
127
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.color, styleName: 'border-color' });
128
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.width, styleName: 'border-width' });
161
129
  }
162
-
163
- // Enables the `'tableCellHorizontalAlignment'` attribute for table cells.
164
- //
165
- // @param {module:engine/model/schema~Schema} schema
166
- // @param {module:engine/conversion/conversion~Conversion} conversion
167
- // @param {module:utils/locale~Locale} locale The {@link module:core/editor/editor~Editor#locale} instance.
168
- // @param {String} defaultValue The default horizontal alignment value.
169
- function enableHorizontalAlignmentProperty( schema, conversion, defaultValue ) {
170
- schema.extend( 'tableCell', {
171
- allowAttributes: [ 'tableCellHorizontalAlignment' ]
172
- } );
173
-
174
- conversion.for( 'downcast' )
175
- .attributeToAttribute( {
176
- model: {
177
- name: 'tableCell',
178
- key: 'tableCellHorizontalAlignment'
179
- },
180
- view: alignment => ( {
181
- key: 'style',
182
- value: {
183
- 'text-align': alignment
184
- }
185
- } )
186
- } );
187
-
188
- conversion.for( 'upcast' )
189
- // Support for the `text-align:*;` CSS definition for the table cell alignment.
190
- .attributeToAttribute( {
191
- view: {
192
- name: /^(td|th)$/,
193
- styles: {
194
- 'text-align': ALIGN_VALUES_REG_EXP
195
- }
196
- },
197
- model: {
198
- key: 'tableCellHorizontalAlignment',
199
- value: viewElement => {
200
- const align = viewElement.getStyle( 'text-align' );
201
-
202
- return align === defaultValue ? null : align;
203
- }
204
- }
205
- } )
206
- // Support for the `align` attribute as the backward compatibility while pasting from other sources.
207
- .attributeToAttribute( {
208
- view: {
209
- name: /^(td|th)$/,
210
- attributes: {
211
- align: ALIGN_VALUES_REG_EXP
212
- }
213
- },
214
- model: {
215
- key: 'tableCellHorizontalAlignment',
216
- value: viewElement => {
217
- const align = viewElement.getAttribute( 'align' );
218
-
219
- return align === defaultValue ? null : align;
220
- }
221
- }
222
- } );
130
+ /**
131
+ * Enables the `'tableCellHorizontalAlignment'` attribute for table cells.
132
+ *
133
+ * @param defaultValue The default horizontal alignment value.
134
+ */
135
+ function enableHorizontalAlignmentProperty(schema, conversion, defaultValue) {
136
+ schema.extend('tableCell', {
137
+ allowAttributes: ['tableCellHorizontalAlignment']
138
+ });
139
+ conversion.for('downcast')
140
+ .attributeToAttribute({
141
+ model: {
142
+ name: 'tableCell',
143
+ key: 'tableCellHorizontalAlignment'
144
+ },
145
+ view: alignment => ({
146
+ key: 'style',
147
+ value: {
148
+ 'text-align': alignment
149
+ }
150
+ })
151
+ });
152
+ conversion.for('upcast')
153
+ // Support for the `text-align:*;` CSS definition for the table cell alignment.
154
+ .attributeToAttribute({
155
+ view: {
156
+ name: /^(td|th)$/,
157
+ styles: {
158
+ 'text-align': ALIGN_VALUES_REG_EXP
159
+ }
160
+ },
161
+ model: {
162
+ key: 'tableCellHorizontalAlignment',
163
+ value: (viewElement) => {
164
+ const align = viewElement.getStyle('text-align');
165
+ return align === defaultValue ? null : align;
166
+ }
167
+ }
168
+ })
169
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
170
+ .attributeToAttribute({
171
+ view: {
172
+ name: /^(td|th)$/,
173
+ attributes: {
174
+ align: ALIGN_VALUES_REG_EXP
175
+ }
176
+ },
177
+ model: {
178
+ key: 'tableCellHorizontalAlignment',
179
+ value: (viewElement) => {
180
+ const align = viewElement.getAttribute('align');
181
+ return align === defaultValue ? null : align;
182
+ }
183
+ }
184
+ });
223
185
  }
224
-
225
- // Enables the `'verticalAlignment'` attribute for table cells.
226
- //
227
- // @param {module:engine/model/schema~Schema} schema
228
- // @param {module:engine/conversion/conversion~Conversion} conversion
229
- // @param {String} defaultValue The default vertical alignment value.
230
- function enableVerticalAlignmentProperty( schema, conversion, defaultValue ) {
231
- schema.extend( 'tableCell', {
232
- allowAttributes: [ 'tableCellVerticalAlignment' ]
233
- } );
234
-
235
- conversion.for( 'downcast' )
236
- .attributeToAttribute( {
237
- model: {
238
- name: 'tableCell',
239
- key: 'tableCellVerticalAlignment'
240
- },
241
- view: alignment => ( {
242
- key: 'style',
243
- value: {
244
- 'vertical-align': alignment
245
- }
246
- } )
247
- } );
248
-
249
- conversion.for( 'upcast' )
250
- // Support for the `vertical-align:*;` CSS definition for the table cell alignment.
251
- .attributeToAttribute( {
252
- view: {
253
- name: /^(td|th)$/,
254
- styles: {
255
- 'vertical-align': VALIGN_VALUES_REG_EXP
256
- }
257
- },
258
- model: {
259
- key: 'tableCellVerticalAlignment',
260
- value: viewElement => {
261
- const align = viewElement.getStyle( 'vertical-align' );
262
-
263
- return align === defaultValue ? null : align;
264
- }
265
- }
266
- } )
267
- // Support for the `align` attribute as the backward compatibility while pasting from other sources.
268
- .attributeToAttribute( {
269
- view: {
270
- name: /^(td|th)$/,
271
- attributes: {
272
- valign: VALIGN_VALUES_REG_EXP
273
- }
274
- },
275
- model: {
276
- key: 'tableCellVerticalAlignment',
277
- value: viewElement => {
278
- const valign = viewElement.getAttribute( 'valign' );
279
-
280
- return valign === defaultValue ? null : valign;
281
- }
282
- }
283
- } );
186
+ /**
187
+ * Enables the `'verticalAlignment'` attribute for table cells.
188
+ *
189
+ * @param defaultValue The default vertical alignment value.
190
+ */
191
+ function enableVerticalAlignmentProperty(schema, conversion, defaultValue) {
192
+ schema.extend('tableCell', {
193
+ allowAttributes: ['tableCellVerticalAlignment']
194
+ });
195
+ conversion.for('downcast')
196
+ .attributeToAttribute({
197
+ model: {
198
+ name: 'tableCell',
199
+ key: 'tableCellVerticalAlignment'
200
+ },
201
+ view: alignment => ({
202
+ key: 'style',
203
+ value: {
204
+ 'vertical-align': alignment
205
+ }
206
+ })
207
+ });
208
+ conversion.for('upcast')
209
+ // Support for the `vertical-align:*;` CSS definition for the table cell alignment.
210
+ .attributeToAttribute({
211
+ view: {
212
+ name: /^(td|th)$/,
213
+ styles: {
214
+ 'vertical-align': VALIGN_VALUES_REG_EXP
215
+ }
216
+ },
217
+ model: {
218
+ key: 'tableCellVerticalAlignment',
219
+ value: (viewElement) => {
220
+ const align = viewElement.getStyle('vertical-align');
221
+ return align === defaultValue ? null : align;
222
+ }
223
+ }
224
+ })
225
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
226
+ .attributeToAttribute({
227
+ view: {
228
+ name: /^(td|th)$/,
229
+ attributes: {
230
+ valign: VALIGN_VALUES_REG_EXP
231
+ }
232
+ },
233
+ model: {
234
+ key: 'tableCellVerticalAlignment',
235
+ value: (viewElement) => {
236
+ const valign = viewElement.getAttribute('valign');
237
+ return valign === defaultValue ? null : valign;
238
+ }
239
+ }
240
+ });
284
241
  }
@@ -0,0 +1,111 @@
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/tablecellproperties/tablecellpropertiesui
7
+ */
8
+ import { Plugin, type Editor, type PluginDependencies } from 'ckeditor5/src/core';
9
+ import TableCellPropertiesView from './ui/tablecellpropertiesview';
10
+ /**
11
+ * The table cell properties UI plugin. It introduces the `'tableCellProperties'` button
12
+ * that opens a form allowing to specify the visual styling of a table cell.
13
+ *
14
+ * It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.
15
+ */
16
+ export default class TableCellPropertiesUI extends Plugin {
17
+ /**
18
+ * The default table cell properties.
19
+ */
20
+ private _defaultTableCellProperties;
21
+ /**
22
+ * The contextual balloon plugin instance.
23
+ */
24
+ private _balloon?;
25
+ /**
26
+ * The cell properties form view displayed inside the balloon.
27
+ */
28
+ view?: TableCellPropertiesView | null;
29
+ /**
30
+ * The batch used to undo all changes made by the form (which are live, as the user types)
31
+ * when "Cancel" was pressed. Each time the view is shown, a new batch is created.
32
+ */
33
+ private _undoStepBatch?;
34
+ /**
35
+ * Flag used to indicate whether view is ready to execute update commands
36
+ * (it finished loading initial data).
37
+ */
38
+ private _isReady?;
39
+ /**
40
+ * @inheritDoc
41
+ */
42
+ static get requires(): PluginDependencies;
43
+ /**
44
+ * @inheritDoc
45
+ */
46
+ static get pluginName(): 'TableCellPropertiesUI';
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ constructor(editor: Editor);
51
+ /**
52
+ * @inheritDoc
53
+ */
54
+ init(): void;
55
+ /**
56
+ * @inheritDoc
57
+ */
58
+ destroy(): void;
59
+ /**
60
+ * Creates the {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView} instance.
61
+ *
62
+ * @returns The cell properties form view instance.
63
+ */
64
+ private _createPropertiesView;
65
+ /**
66
+ * In this method the "editor data -> UI" binding is happening.
67
+ *
68
+ * When executed, this method obtains selected cell property values from various table commands
69
+ * and passes them to the {@link #view}.
70
+ *
71
+ * This way, the UI stays up–to–date with the editor data.
72
+ */
73
+ private _fillViewFormFromCommandValues;
74
+ /**
75
+ * Shows the {@link #view} in the {@link #_balloon}.
76
+ *
77
+ * **Note**: Each time a view is shown, a new {@link #_undoStepBatch} is created. It contains
78
+ * all changes made to the document when the view is visible, allowing a single undo step
79
+ * for all of them.
80
+ */
81
+ protected _showView(): void;
82
+ /**
83
+ * Removes the {@link #view} from the {@link #_balloon}.
84
+ */
85
+ protected _hideView(): void;
86
+ /**
87
+ * Repositions the {@link #_balloon} or hides the {@link #view} if a table cell is no longer selected.
88
+ */
89
+ protected _updateView(): void;
90
+ /**
91
+ * Returns `true` when the {@link #view} is visible in the {@link #_balloon}.
92
+ */
93
+ private get _isViewVisible();
94
+ /**
95
+ * Returns `true` when the {@link #view} is in the {@link #_balloon}.
96
+ */
97
+ private get _isViewInBalloon();
98
+ /**
99
+ * Creates a callback that when executed upon the {@link #view view's} property change
100
+ * executes a related editor command with the new property value.
101
+ *
102
+ * @param defaultValue The default value of the command.
103
+ */
104
+ private _getPropertyChangeCallback;
105
+ /**
106
+ * Creates a callback that when executed upon the {@link #view view's} property change:
107
+ * * Executes a related editor command with the new property value if the value is valid,
108
+ * * Or sets the error text next to the invalid field, if the value did not pass the validation.
109
+ */
110
+ private _getValidatedPropertyChangeCallback;
111
+ }