@ckeditor/ckeditor5-table 39.0.1 → 40.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +3 -3
  3. package/build/table.js +1 -1
  4. package/build/table.js.map +1 -0
  5. package/build/translations/hy.js +1 -0
  6. package/lang/translations/ar.po +1 -0
  7. package/lang/translations/az.po +1 -0
  8. package/lang/translations/bg.po +1 -0
  9. package/lang/translations/bn.po +1 -0
  10. package/lang/translations/ca.po +1 -0
  11. package/lang/translations/cs.po +1 -0
  12. package/lang/translations/da.po +1 -0
  13. package/lang/translations/de-ch.po +1 -0
  14. package/lang/translations/de.po +1 -0
  15. package/lang/translations/el.po +1 -0
  16. package/lang/translations/en-au.po +1 -0
  17. package/lang/translations/en-gb.po +1 -0
  18. package/lang/translations/en.po +1 -0
  19. package/lang/translations/es.po +1 -0
  20. package/lang/translations/et.po +1 -0
  21. package/lang/translations/fa.po +1 -0
  22. package/lang/translations/fi.po +1 -0
  23. package/lang/translations/fr.po +1 -0
  24. package/lang/translations/gl.po +1 -0
  25. package/lang/translations/he.po +1 -0
  26. package/lang/translations/hi.po +1 -0
  27. package/lang/translations/hr.po +1 -0
  28. package/lang/translations/hu.po +1 -0
  29. package/lang/translations/hy.po +262 -0
  30. package/lang/translations/id.po +1 -0
  31. package/lang/translations/it.po +1 -0
  32. package/lang/translations/ja.po +1 -0
  33. package/lang/translations/ko.po +1 -0
  34. package/lang/translations/ku.po +1 -0
  35. package/lang/translations/lt.po +1 -0
  36. package/lang/translations/lv.po +1 -0
  37. package/lang/translations/ms.po +1 -0
  38. package/lang/translations/nb.po +1 -0
  39. package/lang/translations/ne.po +1 -0
  40. package/lang/translations/nl.po +1 -0
  41. package/lang/translations/no.po +1 -0
  42. package/lang/translations/pl.po +1 -0
  43. package/lang/translations/pt-br.po +1 -0
  44. package/lang/translations/pt.po +1 -0
  45. package/lang/translations/ro.po +1 -0
  46. package/lang/translations/ru.po +1 -0
  47. package/lang/translations/sk.po +1 -0
  48. package/lang/translations/sl.po +1 -0
  49. package/lang/translations/sq.po +1 -0
  50. package/lang/translations/sr-latn.po +1 -0
  51. package/lang/translations/sr.po +1 -0
  52. package/lang/translations/sv.po +1 -0
  53. package/lang/translations/th.po +1 -0
  54. package/lang/translations/tk.po +1 -0
  55. package/lang/translations/tr.po +1 -0
  56. package/lang/translations/tt.po +1 -0
  57. package/lang/translations/ug.po +1 -0
  58. package/lang/translations/uk.po +1 -0
  59. package/lang/translations/ur.po +1 -0
  60. package/lang/translations/uz.po +1 -0
  61. package/lang/translations/vi.po +1 -0
  62. package/lang/translations/zh-cn.po +1 -0
  63. package/lang/translations/zh.po +1 -0
  64. package/package.json +2 -6
  65. package/src/augmentation.d.ts +76 -76
  66. package/src/augmentation.js +5 -5
  67. package/src/commands/insertcolumncommand.d.ts +55 -55
  68. package/src/commands/insertcolumncommand.js +67 -67
  69. package/src/commands/insertrowcommand.d.ts +54 -54
  70. package/src/commands/insertrowcommand.js +66 -66
  71. package/src/commands/inserttablecommand.d.ts +44 -44
  72. package/src/commands/inserttablecommand.js +69 -69
  73. package/src/commands/mergecellcommand.d.ts +68 -68
  74. package/src/commands/mergecellcommand.js +198 -198
  75. package/src/commands/mergecellscommand.d.ts +28 -28
  76. package/src/commands/mergecellscommand.js +94 -94
  77. package/src/commands/removecolumncommand.d.ts +29 -29
  78. package/src/commands/removecolumncommand.js +109 -109
  79. package/src/commands/removerowcommand.d.ts +29 -29
  80. package/src/commands/removerowcommand.js +82 -82
  81. package/src/commands/selectcolumncommand.d.ts +33 -33
  82. package/src/commands/selectcolumncommand.js +60 -60
  83. package/src/commands/selectrowcommand.d.ts +33 -33
  84. package/src/commands/selectrowcommand.js +56 -56
  85. package/src/commands/setheadercolumncommand.d.ts +50 -50
  86. package/src/commands/setheadercolumncommand.js +71 -71
  87. package/src/commands/setheaderrowcommand.d.ts +53 -53
  88. package/src/commands/setheaderrowcommand.js +79 -79
  89. package/src/commands/splitcellcommand.d.ts +43 -43
  90. package/src/commands/splitcellcommand.js +54 -54
  91. package/src/converters/downcast.d.ts +63 -63
  92. package/src/converters/downcast.js +146 -146
  93. package/src/converters/table-caption-post-fixer.d.ts +20 -20
  94. package/src/converters/table-caption-post-fixer.js +53 -53
  95. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -32
  96. package/src/converters/table-cell-paragraph-post-fixer.js +107 -107
  97. package/src/converters/table-cell-refresh-handler.d.ts +18 -18
  98. package/src/converters/table-cell-refresh-handler.js +45 -45
  99. package/src/converters/table-headings-refresh-handler.d.ts +17 -17
  100. package/src/converters/table-headings-refresh-handler.js +49 -49
  101. package/src/converters/table-layout-post-fixer.d.ts +226 -226
  102. package/src/converters/table-layout-post-fixer.js +367 -367
  103. package/src/converters/tableproperties.d.ts +54 -54
  104. package/src/converters/tableproperties.js +159 -159
  105. package/src/converters/upcasttable.d.ts +49 -49
  106. package/src/converters/upcasttable.js +243 -243
  107. package/src/index.d.ts +60 -60
  108. package/src/index.js +30 -30
  109. package/src/plaintableoutput.d.ts +26 -26
  110. package/src/plaintableoutput.js +123 -123
  111. package/src/table.d.ts +40 -40
  112. package/src/table.js +44 -44
  113. package/src/tablecaption/tablecaptionediting.d.ts +63 -63
  114. package/src/tablecaption/tablecaptionediting.js +122 -122
  115. package/src/tablecaption/tablecaptionui.d.ts +21 -21
  116. package/src/tablecaption/tablecaptionui.js +57 -57
  117. package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -68
  118. package/src/tablecaption/toggletablecaptioncommand.js +104 -104
  119. package/src/tablecaption/utils.d.ts +42 -42
  120. package/src/tablecaption/utils.js +67 -67
  121. package/src/tablecaption.d.ts +24 -24
  122. package/src/tablecaption.js +28 -28
  123. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -32
  124. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -30
  125. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -37
  126. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -44
  127. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -37
  128. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -44
  129. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -51
  130. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -64
  131. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -46
  132. package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -51
  133. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -32
  134. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -30
  135. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -51
  136. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -64
  137. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -62
  138. package/src/tablecellproperties/commands/tablecellpropertycommand.js +92 -92
  139. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -40
  140. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -38
  141. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +43 -43
  142. package/src/tablecellproperties/tablecellpropertiesediting.js +241 -241
  143. package/src/tablecellproperties/tablecellpropertiesui.d.ts +112 -112
  144. package/src/tablecellproperties/tablecellpropertiesui.js +330 -330
  145. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +228 -228
  146. package/src/tablecellproperties/ui/tablecellpropertiesview.js +548 -539
  147. package/src/tablecellproperties.d.ts +30 -30
  148. package/src/tablecellproperties.js +34 -34
  149. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -46
  150. package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -51
  151. package/src/tablecellwidth/tablecellwidthediting.d.ts +29 -29
  152. package/src/tablecellwidth/tablecellwidthediting.js +45 -45
  153. package/src/tableclipboard.d.ts +65 -65
  154. package/src/tableclipboard.js +450 -450
  155. package/src/tablecolumnresize/constants.d.ts +20 -20
  156. package/src/tablecolumnresize/constants.js +20 -20
  157. package/src/tablecolumnresize/converters.d.ts +18 -18
  158. package/src/tablecolumnresize/converters.js +46 -45
  159. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +139 -139
  160. package/src/tablecolumnresize/tablecolumnresizeediting.js +583 -571
  161. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -38
  162. package/src/tablecolumnresize/tablewidthscommand.js +61 -61
  163. package/src/tablecolumnresize/utils.d.ts +148 -141
  164. package/src/tablecolumnresize/utils.js +358 -330
  165. package/src/tablecolumnresize.d.ts +26 -26
  166. package/src/tablecolumnresize.js +30 -30
  167. package/src/tableconfig.d.ts +343 -343
  168. package/src/tableconfig.js +5 -5
  169. package/src/tableediting.d.ts +98 -98
  170. package/src/tableediting.js +191 -191
  171. package/src/tablekeyboard.d.ts +68 -68
  172. package/src/tablekeyboard.js +279 -279
  173. package/src/tablemouse/mouseeventsobserver.d.ts +62 -62
  174. package/src/tablemouse/mouseeventsobserver.js +35 -35
  175. package/src/tablemouse.d.ts +48 -48
  176. package/src/tablemouse.js +172 -172
  177. package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -32
  178. package/src/tableproperties/commands/tablealignmentcommand.js +30 -30
  179. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -32
  180. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -30
  181. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -37
  182. package/src/tableproperties/commands/tablebordercolorcommand.js +44 -44
  183. package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -37
  184. package/src/tableproperties/commands/tableborderstylecommand.js +44 -44
  185. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -51
  186. package/src/tableproperties/commands/tableborderwidthcommand.js +64 -64
  187. package/src/tableproperties/commands/tableheightcommand.d.ts +46 -46
  188. package/src/tableproperties/commands/tableheightcommand.js +54 -54
  189. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -61
  190. package/src/tableproperties/commands/tablepropertycommand.js +80 -80
  191. package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -46
  192. package/src/tableproperties/commands/tablewidthcommand.js +54 -54
  193. package/src/tableproperties/tablepropertiesediting.d.ts +40 -40
  194. package/src/tableproperties/tablepropertiesediting.js +206 -206
  195. package/src/tableproperties/tablepropertiesui.d.ts +114 -114
  196. package/src/tableproperties/tablepropertiesui.js +321 -321
  197. package/src/tableproperties/ui/tablepropertiesview.d.ts +207 -207
  198. package/src/tableproperties/ui/tablepropertiesview.js +466 -457
  199. package/src/tableproperties.d.ts +30 -30
  200. package/src/tableproperties.js +34 -34
  201. package/src/tableselection.d.ts +107 -107
  202. package/src/tableselection.js +297 -297
  203. package/src/tabletoolbar.d.ts +32 -32
  204. package/src/tabletoolbar.js +57 -57
  205. package/src/tableui.d.ts +53 -53
  206. package/src/tableui.js +309 -309
  207. package/src/tableutils.d.ts +448 -448
  208. package/src/tableutils.js +1055 -1041
  209. package/src/tablewalker.d.ts +362 -323
  210. package/src/tablewalker.js +393 -333
  211. package/src/ui/colorinputview.d.ts +140 -140
  212. package/src/ui/colorinputview.js +271 -265
  213. package/src/ui/formrowview.d.ts +61 -61
  214. package/src/ui/formrowview.js +57 -57
  215. package/src/ui/inserttableview.d.ts +77 -77
  216. package/src/ui/inserttableview.js +169 -169
  217. package/src/utils/common.d.ts +42 -42
  218. package/src/utils/common.js +57 -57
  219. package/src/utils/structure.d.ts +245 -245
  220. package/src/utils/structure.js +426 -426
  221. package/src/utils/table-properties.d.ts +67 -67
  222. package/src/utils/table-properties.js +86 -86
  223. package/src/utils/ui/contextualballoon.d.ts +34 -34
  224. package/src/utils/ui/contextualballoon.js +106 -106
  225. package/src/utils/ui/table-properties.d.ts +195 -195
  226. package/src/utils/ui/table-properties.js +362 -362
  227. package/src/utils/ui/widget.d.ts +16 -16
  228. package/src/utils/ui/widget.js +38 -38
  229. package/theme/tablecolumnresize.css +8 -6
@@ -1,206 +1,206 @@
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/tablepropertiesediting
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import { addBackgroundRules, addBorderRules } from 'ckeditor5/src/engine';
10
- import TableEditing from '../tableediting';
11
- import { downcastAttributeToStyle, downcastTableAttribute, upcastBorderStyles, upcastStyleToAttribute } from '../converters/tableproperties';
12
- import TableBackgroundColorCommand from './commands/tablebackgroundcolorcommand';
13
- import TableBorderColorCommand from './commands/tablebordercolorcommand';
14
- import TableBorderStyleCommand from './commands/tableborderstylecommand';
15
- import TableBorderWidthCommand from './commands/tableborderwidthcommand';
16
- import TableWidthCommand from './commands/tablewidthcommand';
17
- import TableHeightCommand from './commands/tableheightcommand';
18
- import TableAlignmentCommand from './commands/tablealignmentcommand';
19
- import { getNormalizedDefaultProperties } from '../utils/table-properties';
20
- const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
21
- const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
22
- /**
23
- * The table properties editing feature.
24
- *
25
- * Introduces table's model attributes and their conversion:
26
- *
27
- * - border: `tableBorderStyle`, `tableBorderColor` and `tableBorderWidth`
28
- * - background color: `tableBackgroundColor`
29
- * - horizontal alignment: `tableAlignment`
30
- * - width & height: `tableWidth` & `tableHeight`
31
- *
32
- * It also registers commands used to manipulate the above attributes:
33
- *
34
- * - border: `'tableBorderStyle'`, `'tableBorderColor'` and `'tableBorderWidth'` commands
35
- * - background color: `'tableBackgroundColor'`
36
- * - horizontal alignment: `'tableAlignment'`
37
- * - width & height: `'tableWidth'` & `'tableHeight'`
38
- */
39
- export default class TablePropertiesEditing extends Plugin {
40
- /**
41
- * @inheritDoc
42
- */
43
- static get pluginName() {
44
- return 'TablePropertiesEditing';
45
- }
46
- /**
47
- * @inheritDoc
48
- */
49
- static get requires() {
50
- return [TableEditing];
51
- }
52
- /**
53
- * @inheritDoc
54
- */
55
- init() {
56
- const editor = this.editor;
57
- const schema = editor.model.schema;
58
- const conversion = editor.conversion;
59
- editor.config.define('table.tableProperties.defaultProperties', {});
60
- const defaultTableProperties = getNormalizedDefaultProperties(editor.config.get('table.tableProperties.defaultProperties'), {
61
- includeAlignmentProperty: true
62
- });
63
- editor.data.addStyleProcessorRules(addBorderRules);
64
- enableBorderProperties(schema, conversion, {
65
- color: defaultTableProperties.borderColor,
66
- style: defaultTableProperties.borderStyle,
67
- width: defaultTableProperties.borderWidth
68
- });
69
- editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));
70
- editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));
71
- editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));
72
- enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);
73
- editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));
74
- enableTableToFigureProperty(schema, conversion, {
75
- modelAttribute: 'tableWidth',
76
- styleName: 'width',
77
- defaultValue: defaultTableProperties.width
78
- });
79
- editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));
80
- enableTableToFigureProperty(schema, conversion, {
81
- modelAttribute: 'tableHeight',
82
- styleName: 'height',
83
- defaultValue: defaultTableProperties.height
84
- });
85
- editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));
86
- editor.data.addStyleProcessorRules(addBackgroundRules);
87
- enableProperty(schema, conversion, {
88
- modelAttribute: 'tableBackgroundColor',
89
- styleName: 'background-color',
90
- defaultValue: defaultTableProperties.backgroundColor
91
- });
92
- editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));
93
- }
94
- }
95
- /**
96
- * Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
97
- *
98
- * @param defaultBorder The default border values.
99
- * @param defaultBorder.color The default `tableBorderColor` value.
100
- * @param defaultBorder.style The default `tableBorderStyle` value.
101
- * @param defaultBorder.width The default `tableBorderWidth` value.
102
- */
103
- function enableBorderProperties(schema, conversion, defaultBorder) {
104
- const modelAttributes = {
105
- width: 'tableBorderWidth',
106
- color: 'tableBorderColor',
107
- style: 'tableBorderStyle'
108
- };
109
- schema.extend('table', {
110
- allowAttributes: Object.values(modelAttributes)
111
- });
112
- upcastBorderStyles(conversion, 'table', modelAttributes, defaultBorder);
113
- downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });
114
- downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });
115
- downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });
116
- }
117
- /**
118
- * Enables the `'alignment'` attribute for table.
119
- *
120
- * @param defaultValue The default alignment value.
121
- */
122
- function enableAlignmentProperty(schema, conversion, defaultValue) {
123
- schema.extend('table', {
124
- allowAttributes: ['tableAlignment']
125
- });
126
- conversion.for('downcast')
127
- .attributeToAttribute({
128
- model: {
129
- name: 'table',
130
- key: 'tableAlignment'
131
- },
132
- view: alignment => ({
133
- key: 'style',
134
- value: {
135
- // Model: `alignment:center` => CSS: `float:none`.
136
- float: alignment === 'center' ? 'none' : alignment
137
- }
138
- }),
139
- converterPriority: 'high'
140
- });
141
- conversion.for('upcast')
142
- // Support for the `float:*;` CSS definition for the table alignment.
143
- .attributeToAttribute({
144
- view: {
145
- name: /^(table|figure)$/,
146
- styles: {
147
- float: FLOAT_VALUES_REG_EXP
148
- }
149
- },
150
- model: {
151
- key: 'tableAlignment',
152
- value: (viewElement) => {
153
- let align = viewElement.getStyle('float');
154
- // CSS: `float:none` => Model: `alignment:center`.
155
- if (align === 'none') {
156
- align = 'center';
157
- }
158
- return align === defaultValue ? null : align;
159
- }
160
- }
161
- })
162
- // Support for the `align` attribute as the backward compatibility while pasting from other sources.
163
- .attributeToAttribute({
164
- view: {
165
- attributes: {
166
- align: ALIGN_VALUES_REG_EXP
167
- }
168
- },
169
- model: {
170
- name: 'table',
171
- key: 'tableAlignment',
172
- value: (viewElement) => {
173
- const align = viewElement.getAttribute('align');
174
- return align === defaultValue ? null : align;
175
- }
176
- }
177
- });
178
- }
179
- /**
180
- * Enables conversion for an attribute for simple view-model mappings.
181
- *
182
- * @param options.defaultValue The default value for the specified `modelAttribute`.
183
- */
184
- function enableProperty(schema, conversion, options) {
185
- const { modelAttribute } = options;
186
- schema.extend('table', {
187
- allowAttributes: [modelAttribute]
188
- });
189
- upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });
190
- downcastTableAttribute(conversion, options);
191
- }
192
- /**
193
- * Enables conversion for an attribute for simple view (figure) to model (table) mappings.
194
- */
195
- function enableTableToFigureProperty(schema, conversion, options) {
196
- const { modelAttribute } = options;
197
- schema.extend('table', {
198
- allowAttributes: [modelAttribute]
199
- });
200
- upcastStyleToAttribute(conversion, {
201
- viewElement: /^(table|figure)$/,
202
- shouldUpcast: (element) => !(element.name == 'table' && element.parent.name == 'figure'),
203
- ...options
204
- });
205
- downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });
206
- }
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/tablepropertiesediting
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import { addBackgroundRules, addBorderRules } from 'ckeditor5/src/engine';
10
+ import TableEditing from '../tableediting';
11
+ import { downcastAttributeToStyle, downcastTableAttribute, upcastBorderStyles, upcastStyleToAttribute } from '../converters/tableproperties';
12
+ import TableBackgroundColorCommand from './commands/tablebackgroundcolorcommand';
13
+ import TableBorderColorCommand from './commands/tablebordercolorcommand';
14
+ import TableBorderStyleCommand from './commands/tableborderstylecommand';
15
+ import TableBorderWidthCommand from './commands/tableborderwidthcommand';
16
+ import TableWidthCommand from './commands/tablewidthcommand';
17
+ import TableHeightCommand from './commands/tableheightcommand';
18
+ import TableAlignmentCommand from './commands/tablealignmentcommand';
19
+ import { getNormalizedDefaultProperties } from '../utils/table-properties';
20
+ const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
21
+ const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
22
+ /**
23
+ * The table properties editing feature.
24
+ *
25
+ * Introduces table's model attributes and their conversion:
26
+ *
27
+ * - border: `tableBorderStyle`, `tableBorderColor` and `tableBorderWidth`
28
+ * - background color: `tableBackgroundColor`
29
+ * - horizontal alignment: `tableAlignment`
30
+ * - width & height: `tableWidth` & `tableHeight`
31
+ *
32
+ * It also registers commands used to manipulate the above attributes:
33
+ *
34
+ * - border: `'tableBorderStyle'`, `'tableBorderColor'` and `'tableBorderWidth'` commands
35
+ * - background color: `'tableBackgroundColor'`
36
+ * - horizontal alignment: `'tableAlignment'`
37
+ * - width & height: `'tableWidth'` & `'tableHeight'`
38
+ */
39
+ export default class TablePropertiesEditing extends Plugin {
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ static get pluginName() {
44
+ return 'TablePropertiesEditing';
45
+ }
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ static get requires() {
50
+ return [TableEditing];
51
+ }
52
+ /**
53
+ * @inheritDoc
54
+ */
55
+ init() {
56
+ const editor = this.editor;
57
+ const schema = editor.model.schema;
58
+ const conversion = editor.conversion;
59
+ editor.config.define('table.tableProperties.defaultProperties', {});
60
+ const defaultTableProperties = getNormalizedDefaultProperties(editor.config.get('table.tableProperties.defaultProperties'), {
61
+ includeAlignmentProperty: true
62
+ });
63
+ editor.data.addStyleProcessorRules(addBorderRules);
64
+ enableBorderProperties(schema, conversion, {
65
+ color: defaultTableProperties.borderColor,
66
+ style: defaultTableProperties.borderStyle,
67
+ width: defaultTableProperties.borderWidth
68
+ });
69
+ editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));
70
+ editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));
71
+ editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));
72
+ enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);
73
+ editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));
74
+ enableTableToFigureProperty(schema, conversion, {
75
+ modelAttribute: 'tableWidth',
76
+ styleName: 'width',
77
+ defaultValue: defaultTableProperties.width
78
+ });
79
+ editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));
80
+ enableTableToFigureProperty(schema, conversion, {
81
+ modelAttribute: 'tableHeight',
82
+ styleName: 'height',
83
+ defaultValue: defaultTableProperties.height
84
+ });
85
+ editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));
86
+ editor.data.addStyleProcessorRules(addBackgroundRules);
87
+ enableProperty(schema, conversion, {
88
+ modelAttribute: 'tableBackgroundColor',
89
+ styleName: 'background-color',
90
+ defaultValue: defaultTableProperties.backgroundColor
91
+ });
92
+ editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));
93
+ }
94
+ }
95
+ /**
96
+ * Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
97
+ *
98
+ * @param defaultBorder The default border values.
99
+ * @param defaultBorder.color The default `tableBorderColor` value.
100
+ * @param defaultBorder.style The default `tableBorderStyle` value.
101
+ * @param defaultBorder.width The default `tableBorderWidth` value.
102
+ */
103
+ function enableBorderProperties(schema, conversion, defaultBorder) {
104
+ const modelAttributes = {
105
+ width: 'tableBorderWidth',
106
+ color: 'tableBorderColor',
107
+ style: 'tableBorderStyle'
108
+ };
109
+ schema.extend('table', {
110
+ allowAttributes: Object.values(modelAttributes)
111
+ });
112
+ upcastBorderStyles(conversion, 'table', modelAttributes, defaultBorder);
113
+ downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });
114
+ downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });
115
+ downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });
116
+ }
117
+ /**
118
+ * Enables the `'alignment'` attribute for table.
119
+ *
120
+ * @param defaultValue The default alignment value.
121
+ */
122
+ function enableAlignmentProperty(schema, conversion, defaultValue) {
123
+ schema.extend('table', {
124
+ allowAttributes: ['tableAlignment']
125
+ });
126
+ conversion.for('downcast')
127
+ .attributeToAttribute({
128
+ model: {
129
+ name: 'table',
130
+ key: 'tableAlignment'
131
+ },
132
+ view: alignment => ({
133
+ key: 'style',
134
+ value: {
135
+ // Model: `alignment:center` => CSS: `float:none`.
136
+ float: alignment === 'center' ? 'none' : alignment
137
+ }
138
+ }),
139
+ converterPriority: 'high'
140
+ });
141
+ conversion.for('upcast')
142
+ // Support for the `float:*;` CSS definition for the table alignment.
143
+ .attributeToAttribute({
144
+ view: {
145
+ name: /^(table|figure)$/,
146
+ styles: {
147
+ float: FLOAT_VALUES_REG_EXP
148
+ }
149
+ },
150
+ model: {
151
+ key: 'tableAlignment',
152
+ value: (viewElement) => {
153
+ let align = viewElement.getStyle('float');
154
+ // CSS: `float:none` => Model: `alignment:center`.
155
+ if (align === 'none') {
156
+ align = 'center';
157
+ }
158
+ return align === defaultValue ? null : align;
159
+ }
160
+ }
161
+ })
162
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
163
+ .attributeToAttribute({
164
+ view: {
165
+ attributes: {
166
+ align: ALIGN_VALUES_REG_EXP
167
+ }
168
+ },
169
+ model: {
170
+ name: 'table',
171
+ key: 'tableAlignment',
172
+ value: (viewElement) => {
173
+ const align = viewElement.getAttribute('align');
174
+ return align === defaultValue ? null : align;
175
+ }
176
+ }
177
+ });
178
+ }
179
+ /**
180
+ * Enables conversion for an attribute for simple view-model mappings.
181
+ *
182
+ * @param options.defaultValue The default value for the specified `modelAttribute`.
183
+ */
184
+ function enableProperty(schema, conversion, options) {
185
+ const { modelAttribute } = options;
186
+ schema.extend('table', {
187
+ allowAttributes: [modelAttribute]
188
+ });
189
+ upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });
190
+ downcastTableAttribute(conversion, options);
191
+ }
192
+ /**
193
+ * Enables conversion for an attribute for simple view (figure) to model (table) mappings.
194
+ */
195
+ function enableTableToFigureProperty(schema, conversion, options) {
196
+ const { modelAttribute } = options;
197
+ schema.extend('table', {
198
+ allowAttributes: [modelAttribute]
199
+ });
200
+ upcastStyleToAttribute(conversion, {
201
+ viewElement: /^(table|figure)$/,
202
+ shouldUpcast: (element) => !(element.name == 'table' && element.parent.name == 'figure'),
203
+ ...options
204
+ });
205
+ downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });
206
+ }
@@ -1,114 +1,114 @@
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 } from 'ckeditor5/src/core';
9
- import { ContextualBalloon } from 'ckeditor5/src/ui';
10
- import TablePropertiesView from './ui/tablepropertiesview';
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(): readonly [typeof ContextualBalloon];
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
- }
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 } from 'ckeditor5/src/core';
9
+ import { ContextualBalloon } from 'ckeditor5/src/ui';
10
+ import TablePropertiesView from './ui/tablepropertiesview';
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(): readonly [typeof ContextualBalloon];
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
+ }