@ckeditor/ckeditor5-table 36.0.0 → 37.0.0-alpha.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 (166) hide show
  1. package/build/table.js +1 -1
  2. package/package.json +34 -29
  3. package/src/commands/insertcolumncommand.d.ts +61 -0
  4. package/src/commands/insertcolumncommand.js +45 -60
  5. package/src/commands/insertrowcommand.d.ts +60 -0
  6. package/src/commands/insertrowcommand.js +44 -59
  7. package/src/commands/inserttablecommand.d.ts +50 -0
  8. package/src/commands/inserttablecommand.js +51 -68
  9. package/src/commands/mergecellcommand.d.ts +76 -0
  10. package/src/commands/mergecellcommand.js +169 -244
  11. package/src/commands/mergecellscommand.d.ts +33 -0
  12. package/src/commands/mergecellscommand.js +72 -101
  13. package/src/commands/removecolumncommand.d.ts +34 -0
  14. package/src/commands/removecolumncommand.js +88 -102
  15. package/src/commands/removerowcommand.d.ts +34 -0
  16. package/src/commands/removerowcommand.js +63 -80
  17. package/src/commands/selectcolumncommand.d.ts +38 -0
  18. package/src/commands/selectcolumncommand.js +41 -54
  19. package/src/commands/selectrowcommand.d.ts +38 -0
  20. package/src/commands/selectrowcommand.js +38 -48
  21. package/src/commands/setheadercolumncommand.d.ts +55 -0
  22. package/src/commands/setheadercolumncommand.js +48 -73
  23. package/src/commands/setheaderrowcommand.d.ts +58 -0
  24. package/src/commands/setheaderrowcommand.js +56 -85
  25. package/src/commands/splitcellcommand.d.ts +49 -0
  26. package/src/commands/splitcellcommand.js +35 -49
  27. package/src/converters/downcast.d.ts +63 -0
  28. package/src/converters/downcast.js +98 -130
  29. package/src/converters/table-caption-post-fixer.d.ts +20 -0
  30. package/src/converters/table-caption-post-fixer.js +36 -52
  31. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -0
  32. package/src/converters/table-cell-paragraph-post-fixer.js +88 -119
  33. package/src/converters/table-cell-refresh-handler.d.ts +18 -0
  34. package/src/converters/table-cell-refresh-handler.js +29 -48
  35. package/src/converters/table-headings-refresh-handler.d.ts +17 -0
  36. package/src/converters/table-headings-refresh-handler.js +35 -54
  37. package/src/converters/table-layout-post-fixer.d.ts +226 -0
  38. package/src/converters/table-layout-post-fixer.js +276 -313
  39. package/src/converters/tableproperties.d.ts +54 -0
  40. package/src/converters/tableproperties.js +136 -168
  41. package/src/converters/upcasttable.d.ts +49 -0
  42. package/src/converters/upcasttable.js +196 -251
  43. package/src/index.d.ts +29 -0
  44. package/src/index.js +0 -2
  45. package/src/plaintableoutput.d.ts +30 -0
  46. package/src/plaintableoutput.js +107 -135
  47. package/src/table.d.ts +38 -0
  48. package/src/table.js +12 -88
  49. package/src/tablecaption/tablecaptionediting.d.ts +68 -0
  50. package/src/tablecaption/tablecaptionediting.js +104 -135
  51. package/src/tablecaption/tablecaptionui.d.ts +26 -0
  52. package/src/tablecaption/tablecaptionui.js +42 -58
  53. package/src/tablecaption/toggletablecaptioncommand.d.ts +73 -0
  54. package/src/tablecaption/toggletablecaptioncommand.js +77 -92
  55. package/src/tablecaption/utils.d.ts +42 -0
  56. package/src/tablecaption/utils.js +35 -61
  57. package/src/tablecaption.d.ts +27 -0
  58. package/src/tablecaption.js +12 -19
  59. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +37 -0
  60. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +14 -20
  61. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +42 -0
  62. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +27 -37
  63. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +42 -0
  64. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +27 -37
  65. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +56 -0
  66. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +42 -53
  67. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +51 -0
  68. package/src/tablecellproperties/commands/tablecellheightcommand.js +29 -36
  69. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +37 -0
  70. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +14 -20
  71. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +56 -0
  72. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +42 -53
  73. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -0
  74. package/src/tablecellproperties/commands/tablecellpropertycommand.js +77 -122
  75. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +45 -0
  76. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +14 -20
  77. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +47 -0
  78. package/src/tablecellproperties/tablecellpropertiesediting.js +194 -236
  79. package/src/tablecellproperties/tablecellpropertiesui.d.ts +117 -0
  80. package/src/tablecellproperties/tablecellpropertiesui.js +303 -456
  81. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +227 -0
  82. package/src/tablecellproperties/ui/tablecellpropertiesview.js +509 -844
  83. package/src/tablecellproperties.d.ts +33 -0
  84. package/src/tablecellproperties.js +12 -98
  85. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +51 -0
  86. package/src/tablecellwidth/commands/tablecellwidthcommand.js +29 -35
  87. package/src/tablecellwidth/tablecellwidthediting.d.ts +34 -0
  88. package/src/tablecellwidth/tablecellwidthediting.js +26 -38
  89. package/src/tableclipboard.d.ts +68 -0
  90. package/src/tableclipboard.js +429 -568
  91. package/src/tablecolumnresize/constants.d.ts +20 -0
  92. package/src/tablecolumnresize/constants.js +0 -10
  93. package/src/tablecolumnresize/converters.d.ts +18 -0
  94. package/src/tablecolumnresize/converters.js +35 -119
  95. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +142 -0
  96. package/src/tablecolumnresize/tablecolumnresizeediting.js +545 -711
  97. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -0
  98. package/src/tablecolumnresize/tablewidthscommand.js +61 -0
  99. package/src/tablecolumnresize/utils.d.ts +141 -0
  100. package/src/tablecolumnresize/utils.js +256 -233
  101. package/src/tablecolumnresize.d.ts +29 -0
  102. package/src/tablecolumnresize.js +12 -19
  103. package/src/tableconfig.d.ts +341 -0
  104. package/src/tableconfig.js +5 -0
  105. package/src/tableediting.d.ts +102 -0
  106. package/src/tableediting.js +157 -176
  107. package/src/tablekeyboard.d.ts +68 -0
  108. package/src/tablekeyboard.js +261 -344
  109. package/src/tablemouse/mouseeventsobserver.d.ts +62 -0
  110. package/src/tablemouse/mouseeventsobserver.js +12 -49
  111. package/src/tablemouse.d.ts +51 -0
  112. package/src/tablemouse.js +154 -202
  113. package/src/tableproperties/commands/tablealignmentcommand.d.ts +37 -0
  114. package/src/tableproperties/commands/tablealignmentcommand.js +14 -20
  115. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +37 -0
  116. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +14 -20
  117. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +42 -0
  118. package/src/tableproperties/commands/tablebordercolorcommand.js +27 -37
  119. package/src/tableproperties/commands/tableborderstylecommand.d.ts +42 -0
  120. package/src/tableproperties/commands/tableborderstylecommand.js +27 -37
  121. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +56 -0
  122. package/src/tableproperties/commands/tableborderwidthcommand.js +42 -53
  123. package/src/tableproperties/commands/tableheightcommand.d.ts +51 -0
  124. package/src/tableproperties/commands/tableheightcommand.js +29 -33
  125. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -0
  126. package/src/tableproperties/commands/tablepropertycommand.js +68 -112
  127. package/src/tableproperties/commands/tablewidthcommand.d.ts +51 -0
  128. package/src/tableproperties/commands/tablewidthcommand.js +29 -33
  129. package/src/tableproperties/tablepropertiesediting.d.ts +45 -0
  130. package/src/tableproperties/tablepropertiesediting.js +164 -210
  131. package/src/tableproperties/tablepropertiesui.d.ts +119 -0
  132. package/src/tableproperties/tablepropertiesui.js +294 -439
  133. package/src/tableproperties/ui/tablepropertiesview.d.ts +203 -0
  134. package/src/tableproperties/ui/tablepropertiesview.js +427 -718
  135. package/src/tableproperties.d.ts +33 -0
  136. package/src/tableproperties.js +12 -95
  137. package/src/tableselection.d.ts +111 -0
  138. package/src/tableselection.js +279 -376
  139. package/src/tabletoolbar.d.ts +37 -0
  140. package/src/tabletoolbar.js +39 -92
  141. package/src/tableui.d.ts +58 -0
  142. package/src/tableui.js +281 -338
  143. package/src/tableutils.d.ts +453 -0
  144. package/src/tableutils.js +1015 -1229
  145. package/src/tablewalker.d.ts +323 -0
  146. package/src/tablewalker.js +308 -548
  147. package/src/ui/colorinputview.d.ts +143 -0
  148. package/src/ui/colorinputview.js +229 -366
  149. package/src/ui/formrowview.d.ts +61 -0
  150. package/src/ui/formrowview.js +38 -84
  151. package/src/ui/inserttableview.d.ts +77 -0
  152. package/src/ui/inserttableview.js +152 -242
  153. package/src/utils/common.d.ts +42 -0
  154. package/src/utils/common.js +33 -57
  155. package/src/utils/structure.d.ts +245 -0
  156. package/src/utils/structure.js +261 -379
  157. package/src/utils/table-properties.d.ts +67 -0
  158. package/src/utils/table-properties.js +60 -81
  159. package/src/utils/ui/contextualballoon.d.ts +34 -0
  160. package/src/utils/ui/contextualballoon.js +70 -89
  161. package/src/utils/ui/table-properties.d.ts +193 -0
  162. package/src/utils/ui/table-properties.js +259 -319
  163. package/src/utils/ui/widget.d.ts +16 -0
  164. package/src/utils/ui/widget.js +24 -46
  165. package/src/tablecolumnresize/tablecolumnwidthscommand.js +0 -55
  166. package/src/tablecolumnresize/tablewidthresizecommand.js +0 -65
@@ -2,21 +2,13 @@
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/tableproperties/tablepropertiesediting
8
7
  */
9
-
10
8
  import { Plugin } from 'ckeditor5/src/core';
11
9
  import { addBackgroundRules, addBorderRules } from 'ckeditor5/src/engine';
12
-
13
10
  import TableEditing from '../tableediting';
14
- import {
15
- downcastAttributeToStyle,
16
- downcastTableAttribute,
17
- upcastBorderStyles,
18
- upcastStyleToAttribute
19
- } from '../converters/tableproperties';
11
+ import { downcastAttributeToStyle, downcastTableAttribute, upcastBorderStyles, upcastStyleToAttribute } from '../converters/tableproperties';
20
12
  import TableBackgroundColorCommand from './commands/tablebackgroundcolorcommand';
21
13
  import TableBorderColorCommand from './commands/tablebordercolorcommand';
22
14
  import TableBorderStyleCommand from './commands/tableborderstylecommand';
@@ -25,10 +17,9 @@ import TableWidthCommand from './commands/tablewidthcommand';
25
17
  import TableHeightCommand from './commands/tableheightcommand';
26
18
  import TableAlignmentCommand from './commands/tablealignmentcommand';
27
19
  import { getNormalizedDefaultProperties } from '../utils/table-properties';
28
-
20
+ import '../tableconfig';
29
21
  const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
30
22
  const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
31
-
32
23
  /**
33
24
  * The table properties editing feature.
34
25
  *
@@ -45,209 +36,172 @@ const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
45
36
  * - background color: `'tableBackgroundColor'`
46
37
  * - horizontal alignment: `'tableAlignment'`
47
38
  * - width & height: `'tableWidth'` & `'tableHeight'`
48
- *
49
- * @extends module:core/plugin~Plugin
50
39
  */
51
40
  export default class TablePropertiesEditing extends Plugin {
52
- /**
53
- * @inheritDoc
54
- */
55
- static get pluginName() {
56
- return 'TablePropertiesEditing';
57
- }
58
-
59
- /**
60
- * @inheritDoc
61
- */
62
- static get requires() {
63
- return [ TableEditing ];
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.tableProperties.defaultProperties', {} );
75
-
76
- const defaultTableProperties = getNormalizedDefaultProperties( editor.config.get( 'table.tableProperties.defaultProperties' ), {
77
- includeAlignmentProperty: true
78
- } );
79
-
80
- editor.data.addStyleProcessorRules( addBorderRules );
81
- enableBorderProperties( schema, conversion, {
82
- color: defaultTableProperties.borderColor,
83
- style: defaultTableProperties.borderStyle,
84
- width: defaultTableProperties.borderWidth
85
- } );
86
- editor.commands.add( 'tableBorderColor', new TableBorderColorCommand( editor, defaultTableProperties.borderColor ) );
87
- editor.commands.add( 'tableBorderStyle', new TableBorderStyleCommand( editor, defaultTableProperties.borderStyle ) );
88
- editor.commands.add( 'tableBorderWidth', new TableBorderWidthCommand( editor, defaultTableProperties.borderWidth ) );
89
-
90
- enableAlignmentProperty( schema, conversion, defaultTableProperties.alignment );
91
- editor.commands.add( 'tableAlignment', new TableAlignmentCommand( editor, defaultTableProperties.alignment ) );
92
-
93
- enableTableToFigureProperty( schema, conversion, {
94
- modelAttribute: 'tableWidth',
95
- styleName: 'width',
96
- defaultValue: defaultTableProperties.width
97
- } );
98
- editor.commands.add( 'tableWidth', new TableWidthCommand( editor, defaultTableProperties.width ) );
99
-
100
- enableTableToFigureProperty( schema, conversion, {
101
- modelAttribute: 'tableHeight',
102
- styleName: 'height',
103
- defaultValue: defaultTableProperties.height
104
- } );
105
- editor.commands.add( 'tableHeight', new TableHeightCommand( editor, defaultTableProperties.height ) );
106
-
107
- editor.data.addStyleProcessorRules( addBackgroundRules );
108
- enableProperty( schema, conversion, {
109
- modelAttribute: 'tableBackgroundColor',
110
- styleName: 'background-color',
111
- defaultValue: defaultTableProperties.backgroundColor
112
- } );
113
- editor.commands.add(
114
- 'tableBackgroundColor',
115
- new TableBackgroundColorCommand( editor, defaultTableProperties.backgroundColor )
116
- );
117
- }
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ static get pluginName() {
45
+ return 'TablePropertiesEditing';
46
+ }
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ static get requires() {
51
+ return [TableEditing];
52
+ }
53
+ /**
54
+ * @inheritDoc
55
+ */
56
+ init() {
57
+ const editor = this.editor;
58
+ const schema = editor.model.schema;
59
+ const conversion = editor.conversion;
60
+ editor.config.define('table.tableProperties.defaultProperties', {});
61
+ const defaultTableProperties = getNormalizedDefaultProperties(editor.config.get('table.tableProperties.defaultProperties'), {
62
+ includeAlignmentProperty: true
63
+ });
64
+ editor.data.addStyleProcessorRules(addBorderRules);
65
+ enableBorderProperties(schema, conversion, {
66
+ color: defaultTableProperties.borderColor,
67
+ style: defaultTableProperties.borderStyle,
68
+ width: defaultTableProperties.borderWidth
69
+ });
70
+ editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));
71
+ editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));
72
+ editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));
73
+ enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);
74
+ editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));
75
+ enableTableToFigureProperty(schema, conversion, {
76
+ modelAttribute: 'tableWidth',
77
+ styleName: 'width',
78
+ defaultValue: defaultTableProperties.width
79
+ });
80
+ editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));
81
+ enableTableToFigureProperty(schema, conversion, {
82
+ modelAttribute: 'tableHeight',
83
+ styleName: 'height',
84
+ defaultValue: defaultTableProperties.height
85
+ });
86
+ editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));
87
+ editor.data.addStyleProcessorRules(addBackgroundRules);
88
+ enableProperty(schema, conversion, {
89
+ modelAttribute: 'tableBackgroundColor',
90
+ styleName: 'background-color',
91
+ defaultValue: defaultTableProperties.backgroundColor
92
+ });
93
+ editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));
94
+ }
118
95
  }
119
-
120
- // Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
121
- //
122
- // @param {module:engine/model/schema~Schema} schema
123
- // @param {module:engine/conversion/conversion~Conversion} conversion
124
- // @param {Object} defaultBorder The default border values.
125
- // @param {String} defaultBorder.color The default `tableBorderColor` value.
126
- // @param {String} defaultBorder.style The default `tableBorderStyle` value.
127
- // @param {String} defaultBorder.width The default `tableBorderWidth` value.
128
- function enableBorderProperties( schema, conversion, defaultBorder ) {
129
- const modelAttributes = {
130
- width: 'tableBorderWidth',
131
- color: 'tableBorderColor',
132
- style: 'tableBorderStyle'
133
- };
134
-
135
- schema.extend( 'table', {
136
- allowAttributes: Object.values( modelAttributes )
137
- } );
138
-
139
- upcastBorderStyles( conversion, 'table', modelAttributes, defaultBorder );
140
-
141
- downcastTableAttribute( conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' } );
142
- downcastTableAttribute( conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' } );
143
- downcastTableAttribute( conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' } );
96
+ /**
97
+ * Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
98
+ *
99
+ * @param defaultBorder The default border values.
100
+ * @param defaultBorder.color The default `tableBorderColor` value.
101
+ * @param defaultBorder.style The default `tableBorderStyle` value.
102
+ * @param defaultBorder.width The default `tableBorderWidth` value.
103
+ */
104
+ function enableBorderProperties(schema, conversion, defaultBorder) {
105
+ const modelAttributes = {
106
+ width: 'tableBorderWidth',
107
+ color: 'tableBorderColor',
108
+ style: 'tableBorderStyle'
109
+ };
110
+ schema.extend('table', {
111
+ allowAttributes: Object.values(modelAttributes)
112
+ });
113
+ upcastBorderStyles(conversion, 'table', modelAttributes, defaultBorder);
114
+ downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });
115
+ downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });
116
+ downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });
144
117
  }
145
-
146
- // Enables the `'alignment'` attribute for table.
147
- //
148
- // @param {module:engine/model/schema~Schema} schema
149
- // @param {module:engine/conversion/conversion~Conversion} conversion
150
- // @param {String} defaultValue The default alignment value.
151
- function enableAlignmentProperty( schema, conversion, defaultValue ) {
152
- schema.extend( 'table', {
153
- allowAttributes: [ 'tableAlignment' ]
154
- } );
155
-
156
- conversion.for( 'downcast' )
157
- .attributeToAttribute( {
158
- model: {
159
- name: 'table',
160
- key: 'tableAlignment'
161
- },
162
- view: alignment => ( {
163
- key: 'style',
164
- value: {
165
- // Model: `alignment:center` => CSS: `float:none`.
166
- float: alignment === 'center' ? 'none' : alignment
167
- }
168
- } ),
169
- converterPriority: 'high'
170
- } );
171
-
172
- conversion.for( 'upcast' )
173
- // Support for the `float:*;` CSS definition for the table alignment.
174
- .attributeToAttribute( {
175
- view: {
176
- name: /^(table|figure)$/,
177
- styles: {
178
- float: FLOAT_VALUES_REG_EXP
179
- }
180
- },
181
- model: {
182
- key: 'tableAlignment',
183
- value: viewElement => {
184
- let align = viewElement.getStyle( 'float' );
185
-
186
- // CSS: `float:none` => Model: `alignment:center`.
187
- if ( align === 'none' ) {
188
- align = 'center';
189
- }
190
-
191
- return align === defaultValue ? null : align;
192
- }
193
- }
194
- } )
195
- // Support for the `align` attribute as the backward compatibility while pasting from other sources.
196
- .attributeToAttribute( {
197
- view: {
198
- attributes: {
199
- align: ALIGN_VALUES_REG_EXP
200
- }
201
- },
202
- model: {
203
- name: 'table',
204
- key: 'tableAlignment',
205
- value: viewElement => {
206
- const align = viewElement.getAttribute( 'align' );
207
-
208
- return align === defaultValue ? null : align;
209
- }
210
- }
211
- } );
118
+ /**
119
+ * Enables the `'alignment'` attribute for table.
120
+ *
121
+ * @param defaultValue The default alignment value.
122
+ */
123
+ function enableAlignmentProperty(schema, conversion, defaultValue) {
124
+ schema.extend('table', {
125
+ allowAttributes: ['tableAlignment']
126
+ });
127
+ conversion.for('downcast')
128
+ .attributeToAttribute({
129
+ model: {
130
+ name: 'table',
131
+ key: 'tableAlignment'
132
+ },
133
+ view: alignment => ({
134
+ key: 'style',
135
+ value: {
136
+ // Model: `alignment:center` => CSS: `float:none`.
137
+ float: alignment === 'center' ? 'none' : alignment
138
+ }
139
+ }),
140
+ converterPriority: 'high'
141
+ });
142
+ conversion.for('upcast')
143
+ // Support for the `float:*;` CSS definition for the table alignment.
144
+ .attributeToAttribute({
145
+ view: {
146
+ name: /^(table|figure)$/,
147
+ styles: {
148
+ float: FLOAT_VALUES_REG_EXP
149
+ }
150
+ },
151
+ model: {
152
+ key: 'tableAlignment',
153
+ value: (viewElement) => {
154
+ let align = viewElement.getStyle('float');
155
+ // CSS: `float:none` => Model: `alignment:center`.
156
+ if (align === 'none') {
157
+ align = 'center';
158
+ }
159
+ return align === defaultValue ? null : align;
160
+ }
161
+ }
162
+ })
163
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
164
+ .attributeToAttribute({
165
+ view: {
166
+ attributes: {
167
+ align: ALIGN_VALUES_REG_EXP
168
+ }
169
+ },
170
+ model: {
171
+ name: 'table',
172
+ key: 'tableAlignment',
173
+ value: (viewElement) => {
174
+ const align = viewElement.getAttribute('align');
175
+ return align === defaultValue ? null : align;
176
+ }
177
+ }
178
+ });
212
179
  }
213
-
214
- // Enables conversion for an attribute for simple view-model mappings.
215
- //
216
- // @param {module:engine/model/schema~Schema} schema
217
- // @param {module:engine/conversion/conversion~Conversion} conversion
218
- // @param {Object} options
219
- // @param {String} options.modelAttribute
220
- // @param {String} options.styleName
221
- // @param {String} options.defaultValue The default value for the specified `modelAttribute`.
222
- function enableProperty( schema, conversion, options ) {
223
- const { modelAttribute } = options;
224
-
225
- schema.extend( 'table', {
226
- allowAttributes: [ modelAttribute ]
227
- } );
228
- upcastStyleToAttribute( conversion, { viewElement: 'table', ...options } );
229
- downcastTableAttribute( conversion, options );
180
+ /**
181
+ * Enables conversion for an attribute for simple view-model mappings.
182
+ *
183
+ * @param options.defaultValue The default value for the specified `modelAttribute`.
184
+ */
185
+ function enableProperty(schema, conversion, options) {
186
+ const { modelAttribute } = options;
187
+ schema.extend('table', {
188
+ allowAttributes: [modelAttribute]
189
+ });
190
+ upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });
191
+ downcastTableAttribute(conversion, options);
230
192
  }
231
-
232
- // Enables conversion for an attribute for simple view (figure) to model (table) mappings.
233
- //
234
- // @param {module:engine/model/schema~Schema} schema
235
- // @param {module:engine/conversion/conversion~Conversion} conversion
236
- // @param {Object} options
237
- // @param {String} options.modelAttribute
238
- // @param {String} options.styleName
239
- function enableTableToFigureProperty( schema, conversion, options ) {
240
- const { modelAttribute } = options;
241
-
242
- schema.extend( 'table', {
243
- allowAttributes: [ modelAttribute ]
244
- } );
245
-
246
- upcastStyleToAttribute( conversion, {
247
- viewElement: /^(table|figure)$/,
248
- shouldUpcast: element => !( element.name == 'table' && element.parent.name == 'figure' ),
249
- ...options
250
- } );
251
-
252
- downcastAttributeToStyle( conversion, { modelElement: 'table', ...options } );
193
+ /**
194
+ * Enables conversion for an attribute for simple view (figure) to model (table) mappings.
195
+ */
196
+ function enableTableToFigureProperty(schema, conversion, options) {
197
+ const { modelAttribute } = options;
198
+ schema.extend('table', {
199
+ allowAttributes: [modelAttribute]
200
+ });
201
+ upcastStyleToAttribute(conversion, {
202
+ viewElement: /^(table|figure)$/,
203
+ shouldUpcast: (element) => !(element.name == 'table' && element.parent.name == 'figure'),
204
+ ...options
205
+ });
206
+ downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });
253
207
  }
@@ -0,0 +1,119 @@
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/tableproperties/tablepropertiesui
7
+ */
8
+ import { type Editor, Plugin, type PluginDependencies } from 'ckeditor5/src/core';
9
+ import TablePropertiesView from './ui/tablepropertiesview';
10
+ import '../tableconfig';
11
+ /**
12
+ * The table properties UI plugin. It introduces the `'tableProperties'` button
13
+ * that opens a form allowing to specify visual styling of an entire table.
14
+ *
15
+ * It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.
16
+ */
17
+ export default class TablePropertiesUI extends Plugin {
18
+ /**
19
+ * The default table properties.
20
+ */
21
+ private _defaultTableProperties;
22
+ /**
23
+ * The contextual balloon plugin instance.
24
+ */
25
+ private _balloon;
26
+ /**
27
+ * The properties form view displayed inside the balloon.
28
+ */
29
+ view: TablePropertiesView | null;
30
+ /**
31
+ * The batch used to undo all changes made by the form (which are live, as the user types)
32
+ * when "Cancel" was pressed. Each time the view is shown, a new batch is created.
33
+ */
34
+ private _undoStepBatch?;
35
+ /**
36
+ * Flag used to indicate whether view is ready to execute update commands
37
+ * (it finished loading initial data).
38
+ */
39
+ private _isReady?;
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ static get requires(): PluginDependencies;
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ static get pluginName(): 'TablePropertiesUI';
48
+ /**
49
+ * @inheritDoc
50
+ */
51
+ constructor(editor: Editor);
52
+ /**
53
+ * @inheritDoc
54
+ */
55
+ init(): void;
56
+ /**
57
+ * @inheritDoc
58
+ */
59
+ destroy(): void;
60
+ /**
61
+ * Creates the {@link module:table/tableproperties/ui/tablepropertiesview~TablePropertiesView} instance.
62
+ *
63
+ * @returns The table properties form view instance.
64
+ */
65
+ private _createPropertiesView;
66
+ /**
67
+ * In this method the "editor data -> UI" binding is happening.
68
+ *
69
+ * When executed, this method obtains selected table property values from various table commands
70
+ * and passes them to the {@link #view}.
71
+ *
72
+ * This way, the UI stays up–to–date with the editor data.
73
+ */
74
+ private _fillViewFormFromCommandValues;
75
+ /**
76
+ * Shows the {@link #view} in the {@link #_balloon}.
77
+ *
78
+ * **Note**: Each time a view is shown, the new {@link #_undoStepBatch} is created that contains
79
+ * all changes made to the document when the view is visible, allowing a single undo step
80
+ * for all of them.
81
+ */
82
+ protected _showView(): void;
83
+ /**
84
+ * Removes the {@link #view} from the {@link #_balloon}.
85
+ */
86
+ protected _hideView(): void;
87
+ /**
88
+ * Repositions the {@link #_balloon} or hides the {@link #view} if a table is no longer selected.
89
+ */
90
+ protected _updateView(): void;
91
+ /**
92
+ * Returns `true` when the {@link #view} is the visible in the {@link #_balloon}.
93
+ */
94
+ private get _isViewVisible();
95
+ /**
96
+ * Returns `true` when the {@link #view} is in the {@link #_balloon}.
97
+ */
98
+ private get _isViewInBalloon();
99
+ /**
100
+ * Creates a callback that when executed upon {@link #view view's} property change
101
+ * executes a related editor command with the new property value.
102
+ *
103
+ * If new value will be set to the default value, the command will not be executed.
104
+ *
105
+ * @param commandName The command that will be executed.
106
+ */
107
+ private _getPropertyChangeCallback;
108
+ /**
109
+ * Creates a callback that when executed upon {@link #view view's} property change:
110
+ * * executes a related editor command with the new property value if the value is valid,
111
+ * * or sets the error text next to the invalid field, if the value did not pass the validation.
112
+ */
113
+ private _getValidatedPropertyChangeCallback;
114
+ }
115
+ declare module '@ckeditor/ckeditor5-core' {
116
+ interface PluginsMap {
117
+ [TablePropertiesUI.pluginName]: TablePropertiesUI;
118
+ }
119
+ }