@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,258 +2,168 @@
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/ui/inserttableview
8
7
  */
9
-
10
8
  import { View, ButtonView, addKeyboardHandlingForGrid } from 'ckeditor5/src/ui';
11
-
12
9
  import { KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils';
13
-
14
10
  import './../../theme/inserttable.css';
15
-
16
11
  /**
17
12
  * The table size view.
18
13
  *
19
14
  * It renders a 10x10 grid to choose the inserted table size.
20
- *
21
- * @extends module:ui/view~View
22
- * @implements module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable
23
15
  */
24
16
  export default class InsertTableView extends View {
25
- /**
26
- * @inheritDoc
27
- */
28
- constructor( locale ) {
29
- super( locale );
30
-
31
- const bind = this.bindTemplate;
32
-
33
- /**
34
- * A collection of table size box items.
35
- *
36
- * @readonly
37
- * @member {module:ui/viewcollection~ViewCollection}
38
- */
39
- this.items = this._createGridCollection();
40
-
41
- /**
42
- * Listen to `keydown` events fired in this view's main element.
43
- *
44
- * @readonly
45
- * @member {module:utils/keystrokeHandler~KeystrokeHandler}
46
- */
47
- this.keystrokes = new KeystrokeHandler();
48
-
49
- /**
50
- * Tracks information about the DOM focus in the grid.
51
- *
52
- * @readonly
53
- * @member {module:utils/focustracker~FocusTracker}
54
- */
55
- this.focusTracker = new FocusTracker();
56
-
57
- /**
58
- * The currently selected number of rows of the new table.
59
- *
60
- * @observable
61
- * @member {Number} #rows
62
- */
63
- this.set( 'rows', 0 );
64
-
65
- /**
66
- * The currently selected number of columns of the new table.
67
- *
68
- * @observable
69
- * @member {Number} #columns
70
- */
71
- this.set( 'columns', 0 );
72
-
73
- /**
74
- * The label text displayed under the boxes.
75
- *
76
- * @observable
77
- * @member {String} #label
78
- */
79
- this.bind( 'label' )
80
- .to( this, 'columns', this, 'rows', ( columns, rows ) => `${ rows } × ${ columns }` );
81
-
82
- this.setTemplate( {
83
- tag: 'div',
84
- attributes: {
85
- class: [ 'ck' ]
86
- },
87
-
88
- children: [
89
- {
90
- tag: 'div',
91
- attributes: {
92
- class: [ 'ck-insert-table-dropdown__grid' ]
93
- },
94
- on: {
95
- 'mouseover@.ck-insert-table-dropdown-grid-box': bind.to( 'boxover' )
96
- },
97
- children: this.items
98
- },
99
- {
100
- tag: 'div',
101
- attributes: {
102
- class: [
103
- 'ck',
104
- 'ck-insert-table-dropdown__label'
105
- ],
106
- 'aria-hidden': true
107
- },
108
- children: [
109
- {
110
- text: bind.to( 'label' )
111
- }
112
- ]
113
- }
114
- ],
115
-
116
- on: {
117
- mousedown: bind.to( evt => {
118
- evt.preventDefault();
119
- } ),
120
-
121
- click: bind.to( () => {
122
- this.fire( 'execute' );
123
- } )
124
- }
125
- } );
126
-
127
- // #rows and #columns are set via changes to #focusTracker on mouse over.
128
- this.on( 'boxover', ( evt, domEvt ) => {
129
- const { row, column } = domEvt.target.dataset;
130
- this.items.get( ( parseInt( row, 10 ) - 1 ) * 10 + ( parseInt( column, 10 ) - 1 ) ).focus();
131
- } );
132
-
133
- // This allows the #rows and #columns to be updated when:
134
- // * the user navigates the grid using the keyboard,
135
- // * the user moves the mouse over grid items.
136
- this.focusTracker.on( 'change:focusedElement', ( evt, name, focusedElement ) => {
137
- if ( !focusedElement ) {
138
- return;
139
- }
140
-
141
- const { row, column } = focusedElement.dataset;
142
-
143
- // As row & column indexes are zero-based transform it to number of selected rows & columns.
144
- this.set( {
145
- rows: parseInt( row ),
146
- columns: parseInt( column )
147
- } );
148
- } );
149
-
150
- this.on( 'change:columns', () => this._highlightGridBoxes() );
151
- this.on( 'change:rows', () => this._highlightGridBoxes() );
152
- }
153
-
154
- render() {
155
- super.render();
156
-
157
- addKeyboardHandlingForGrid( {
158
- keystrokeHandler: this.keystrokes,
159
- focusTracker: this.focusTracker,
160
- gridItems: this.items,
161
- numberOfColumns: 10,
162
- uiLanguageDirection: this.locale && this.locale.uiLanguageDirection
163
- } );
164
-
165
- for ( const item of this.items ) {
166
- this.focusTracker.add( item.element );
167
- }
168
-
169
- this.keystrokes.listenTo( this.element );
170
- }
171
-
172
- /**
173
- * @inheritDoc
174
- */
175
- focus() {
176
- this.items.get( 0 ).focus();
177
- }
178
-
179
- /**
180
- * @inheritDoc
181
- */
182
- focusLast() {
183
- this.items.get( 0 ).focus();
184
- }
185
-
186
- /**
187
- * Highlights grid boxes depending on rows and columns selected.
188
- *
189
- * @private
190
- */
191
- _highlightGridBoxes() {
192
- const rows = this.rows;
193
- const columns = this.columns;
194
-
195
- this.items.map( ( boxView, index ) => {
196
- // Translate box index to the row & column index.
197
- const itemRow = Math.floor( index / 10 );
198
- const itemColumn = index % 10;
199
-
200
- // Grid box is highlighted when its row & column index belongs to selected number of rows & columns.
201
- const isOn = itemRow < rows && itemColumn < columns;
202
-
203
- boxView.set( 'isOn', isOn );
204
- } );
205
- }
206
-
207
- /**
208
- * Creates a new Button for the grid.
209
- *
210
- * @private
211
- * @param {module:utils/locale~Locale} locale The locale instance.
212
- * @param {Number} row Row number.
213
- * @param {Number} column Column number.
214
- * @param {String} label The grid button label.
215
- * @returns {module:ui/button/buttonview~ButtonView}
216
- */
217
- _createGridButton( locale, row, column, label ) {
218
- const button = new ButtonView( locale );
219
-
220
- button.set( {
221
- label,
222
- class: 'ck-insert-table-dropdown-grid-box'
223
- } );
224
-
225
- button.extendTemplate( {
226
- attributes: {
227
- 'data-row': row,
228
- 'data-column': column
229
- }
230
- } );
231
-
232
- return button;
233
- }
234
-
235
- /**
236
- * @private
237
- * @returns {module:ui/viewcollection~ViewCollection} A view collection containing boxes to be placed in a table grid.
238
- */
239
- _createGridCollection() {
240
- const boxes = [];
241
-
242
- // Add grid boxes to table selection view.
243
- for ( let index = 0; index < 100; index++ ) {
244
- const row = Math.floor( index / 10 );
245
- const column = index % 10;
246
- const label = `${ row + 1 } × ${ column + 1 }`;
247
-
248
- boxes.push( this._createGridButton( this.locale, row + 1, column + 1, label ) );
249
- }
250
-
251
- return this.createCollection( boxes );
252
- }
253
-
254
- /**
255
- * Fired when the mouse hover over one of the {@link #items child grid boxes}.
256
- *
257
- * @event boxover
258
- */
17
+ /**
18
+ * @inheritDoc
19
+ */
20
+ constructor(locale) {
21
+ super(locale);
22
+ const bind = this.bindTemplate;
23
+ this.items = this._createGridCollection();
24
+ this.keystrokes = new KeystrokeHandler();
25
+ this.focusTracker = new FocusTracker();
26
+ this.set('rows', 0);
27
+ this.set('columns', 0);
28
+ this.bind('label').to(this, 'columns', this, 'rows', (columns, rows) => `${rows} × ${columns}`);
29
+ this.setTemplate({
30
+ tag: 'div',
31
+ attributes: {
32
+ class: ['ck']
33
+ },
34
+ children: [
35
+ {
36
+ tag: 'div',
37
+ attributes: {
38
+ class: ['ck-insert-table-dropdown__grid']
39
+ },
40
+ on: {
41
+ 'mouseover@.ck-insert-table-dropdown-grid-box': bind.to('boxover')
42
+ },
43
+ children: this.items
44
+ },
45
+ {
46
+ tag: 'div',
47
+ attributes: {
48
+ class: [
49
+ 'ck',
50
+ 'ck-insert-table-dropdown__label'
51
+ ],
52
+ 'aria-hidden': true
53
+ },
54
+ children: [
55
+ {
56
+ text: bind.to('label')
57
+ }
58
+ ]
59
+ }
60
+ ],
61
+ on: {
62
+ mousedown: bind.to(evt => {
63
+ evt.preventDefault();
64
+ }),
65
+ click: bind.to(() => {
66
+ this.fire('execute');
67
+ })
68
+ }
69
+ });
70
+ // #rows and #columns are set via changes to #focusTracker on mouse over.
71
+ this.on('boxover', (evt, domEvt) => {
72
+ const { row, column } = domEvt.target.dataset;
73
+ this.items.get((parseInt(row, 10) - 1) * 10 + (parseInt(column, 10) - 1)).focus();
74
+ });
75
+ // This allows the #rows and #columns to be updated when:
76
+ // * the user navigates the grid using the keyboard,
77
+ // * the user moves the mouse over grid items.
78
+ this.focusTracker.on('change:focusedElement', (evt, name, focusedElement) => {
79
+ if (!focusedElement) {
80
+ return;
81
+ }
82
+ const { row, column } = focusedElement.dataset;
83
+ // As row & column indexes are zero-based transform it to number of selected rows & columns.
84
+ this.set({
85
+ rows: parseInt(row),
86
+ columns: parseInt(column)
87
+ });
88
+ });
89
+ this.on('change:columns', () => this._highlightGridBoxes());
90
+ this.on('change:rows', () => this._highlightGridBoxes());
91
+ }
92
+ render() {
93
+ super.render();
94
+ addKeyboardHandlingForGrid({
95
+ keystrokeHandler: this.keystrokes,
96
+ focusTracker: this.focusTracker,
97
+ gridItems: this.items,
98
+ numberOfColumns: 10,
99
+ uiLanguageDirection: this.locale && this.locale.uiLanguageDirection
100
+ });
101
+ for (const item of this.items) {
102
+ this.focusTracker.add(item.element);
103
+ }
104
+ this.keystrokes.listenTo(this.element);
105
+ }
106
+ /**
107
+ * @inheritDoc
108
+ */
109
+ focus() {
110
+ this.items.get(0).focus();
111
+ }
112
+ /**
113
+ * @inheritDoc
114
+ */
115
+ focusLast() {
116
+ this.items.get(0).focus();
117
+ }
118
+ /**
119
+ * Highlights grid boxes depending on rows and columns selected.
120
+ */
121
+ _highlightGridBoxes() {
122
+ const rows = this.rows;
123
+ const columns = this.columns;
124
+ this.items.map((boxView, index) => {
125
+ // Translate box index to the row & column index.
126
+ const itemRow = Math.floor(index / 10);
127
+ const itemColumn = index % 10;
128
+ // Grid box is highlighted when its row & column index belongs to selected number of rows & columns.
129
+ const isOn = itemRow < rows && itemColumn < columns;
130
+ boxView.set('isOn', isOn);
131
+ });
132
+ }
133
+ /**
134
+ * Creates a new Button for the grid.
135
+ *
136
+ * @param locale The locale instance.
137
+ * @param row Row number.
138
+ * @param column Column number.
139
+ * @param label The grid button label.
140
+ */
141
+ _createGridButton(locale, row, column, label) {
142
+ const button = new ButtonView(locale);
143
+ button.set({
144
+ label,
145
+ class: 'ck-insert-table-dropdown-grid-box'
146
+ });
147
+ button.extendTemplate({
148
+ attributes: {
149
+ 'data-row': row,
150
+ 'data-column': column
151
+ }
152
+ });
153
+ return button;
154
+ }
155
+ /**
156
+ * @returns A view collection containing boxes to be placed in a table grid.
157
+ */
158
+ _createGridCollection() {
159
+ const boxes = [];
160
+ // Add grid boxes to table selection view.
161
+ for (let index = 0; index < 100; index++) {
162
+ const row = Math.floor(index / 10);
163
+ const column = index % 10;
164
+ const label = `${row + 1} × ${column + 1}`;
165
+ boxes.push(this._createGridButton(this.locale, row + 1, column + 1, label));
166
+ }
167
+ return this.createCollection(boxes);
168
+ }
259
169
  }
@@ -0,0 +1,42 @@
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/utils/common
7
+ */
8
+ import type { Conversion, Element, Item, Position, Schema, Writer } from 'ckeditor5/src/engine';
9
+ import type TableUtils from '../tableutils';
10
+ /**
11
+ * A common method to update the numeric value. If a value is the default one, it will be unset.
12
+ *
13
+ * @param key An attribute key.
14
+ * @param value The new attribute value.
15
+ * @param item A model item on which the attribute will be set.
16
+ * @param defaultValue The default attribute value. If a value is lower or equal, it will be unset.
17
+ */
18
+ export declare function updateNumericAttribute(key: string, value: unknown, item: Item, writer: Writer, defaultValue?: unknown): void;
19
+ /**
20
+ * A common method to create an empty table cell. It creates a proper model structure as a table cell must have at least one block inside.
21
+ *
22
+ * @param writer The model writer.
23
+ * @param insertPosition The position at which the table cell should be inserted.
24
+ * @param attributes The element attributes.
25
+ * @returns Created table cell.
26
+ */
27
+ export declare function createEmptyTableCell(writer: Writer, insertPosition: Position, attributes?: Record<string, unknown>): Element;
28
+ /**
29
+ * Checks if a table cell belongs to the heading column section.
30
+ */
31
+ export declare function isHeadingColumnCell(tableUtils: TableUtils, tableCell: Element): boolean;
32
+ /**
33
+ * Enables conversion for an attribute for simple view-model mappings.
34
+ *
35
+ * @param options.defaultValue The default value for the specified `modelAttribute`.
36
+ */
37
+ export declare function enableProperty(schema: Schema, conversion: Conversion, options: {
38
+ modelAttribute: string;
39
+ styleName: string;
40
+ defaultValue: string;
41
+ reduceBoxSides?: boolean;
42
+ }): void;
@@ -2,80 +2,56 @@
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
- /**
7
- * @module table/utils/common
8
- */
9
-
10
5
  import { downcastAttributeToStyle, upcastStyleToAttribute } from './../converters/tableproperties';
11
-
12
6
  /**
13
7
  * A common method to update the numeric value. If a value is the default one, it will be unset.
14
8
  *
15
- * @param {String} key An attribute key.
16
- * @param {*} value The new attribute value.
17
- * @param {module:engine/model/item~Item} item A model item on which the attribute will be set.
18
- * @param {module:engine/model/writer~Writer} writer
19
- * @param {*} defaultValue The default attribute value. If a value is lower or equal, it will be unset.
9
+ * @param key An attribute key.
10
+ * @param value The new attribute value.
11
+ * @param item A model item on which the attribute will be set.
12
+ * @param defaultValue The default attribute value. If a value is lower or equal, it will be unset.
20
13
  */
21
- export function updateNumericAttribute( key, value, item, writer, defaultValue = 1 ) {
22
- if ( value > defaultValue ) {
23
- writer.setAttribute( key, value, item );
24
- } else {
25
- writer.removeAttribute( key, item );
26
- }
14
+ export function updateNumericAttribute(key, value, item, writer, defaultValue = 1) {
15
+ if (value !== undefined && value !== null && defaultValue !== undefined && defaultValue !== null && value > defaultValue) {
16
+ writer.setAttribute(key, value, item);
17
+ }
18
+ else {
19
+ writer.removeAttribute(key, item);
20
+ }
27
21
  }
28
-
29
22
  /**
30
23
  * A common method to create an empty table cell. It creates a proper model structure as a table cell must have at least one block inside.
31
24
  *
32
- * @param {module:engine/model/writer~Writer} writer The model writer.
33
- * @param {module:engine/model/position~Position} insertPosition The position at which the table cell should be inserted.
34
- * @param {Object} attributes The element attributes.
35
- * @returns {module:engine/model/element~Element} Created table cell.
25
+ * @param writer The model writer.
26
+ * @param insertPosition The position at which the table cell should be inserted.
27
+ * @param attributes The element attributes.
28
+ * @returns Created table cell.
36
29
  */
37
- export function createEmptyTableCell( writer, insertPosition, attributes = {} ) {
38
- const tableCell = writer.createElement( 'tableCell', attributes );
39
-
40
- writer.insertElement( 'paragraph', tableCell );
41
- writer.insert( tableCell, insertPosition );
42
-
43
- return tableCell;
30
+ export function createEmptyTableCell(writer, insertPosition, attributes = {}) {
31
+ const tableCell = writer.createElement('tableCell', attributes);
32
+ writer.insertElement('paragraph', tableCell);
33
+ writer.insert(tableCell, insertPosition);
34
+ return tableCell;
44
35
  }
45
-
46
36
  /**
47
37
  * Checks if a table cell belongs to the heading column section.
48
- *
49
- * @param {module:table/tableutils~TableUtils} tableUtils
50
- * @param {module:engine/model/element~Element} tableCell
51
- * @returns {Boolean}
52
38
  */
53
- export function isHeadingColumnCell( tableUtils, tableCell ) {
54
- const table = tableCell.parent.parent;
55
- const headingColumns = parseInt( table.getAttribute( 'headingColumns' ) || 0 );
56
- const { column } = tableUtils.getCellLocation( tableCell );
57
-
58
- return !!headingColumns && column < headingColumns;
39
+ export function isHeadingColumnCell(tableUtils, tableCell) {
40
+ const table = tableCell.parent.parent;
41
+ const headingColumns = parseInt(table.getAttribute('headingColumns') || '0');
42
+ const { column } = tableUtils.getCellLocation(tableCell);
43
+ return !!headingColumns && column < headingColumns;
59
44
  }
60
-
61
45
  /**
62
46
  * Enables conversion for an attribute for simple view-model mappings.
63
47
  *
64
- * @param {module:engine/model/schema~Schema} schema
65
- * @param {module:engine/conversion/conversion~Conversion} conversion
66
- * @param {Object} options
67
- * @param {String} options.modelAttribute
68
- * @param {String} options.styleName
69
- * @param {String} options.defaultValue The default value for the specified `modelAttribute`.
70
- * @param {Boolean} [options.reduceBoxSides=false]
48
+ * @param options.defaultValue The default value for the specified `modelAttribute`.
71
49
  */
72
- export function enableProperty( schema, conversion, options ) {
73
- const { modelAttribute } = options;
74
-
75
- schema.extend( 'tableCell', {
76
- allowAttributes: [ modelAttribute ]
77
- } );
78
-
79
- upcastStyleToAttribute( conversion, { viewElement: /^(td|th)$/, ...options } );
80
- downcastAttributeToStyle( conversion, { modelElement: 'tableCell', ...options } );
50
+ export function enableProperty(schema, conversion, options) {
51
+ const { modelAttribute } = options;
52
+ schema.extend('tableCell', {
53
+ allowAttributes: [modelAttribute]
54
+ });
55
+ upcastStyleToAttribute(conversion, { viewElement: /^(td|th)$/, ...options });
56
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', ...options });
81
57
  }