@ckeditor/ckeditor5-table 0.0.0-nightly-20260111.0 → 0.0.0-nightly-next-20260111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/ckeditor5-metadata.json +16 -7
  2. package/{src → dist}/augmentation.d.ts +4 -15
  3. package/{src → dist}/commands/insertcolumncommand.d.ts +5 -1
  4. package/{src → dist}/commands/insertrowcommand.d.ts +5 -1
  5. package/{src → dist}/commands/inserttablecommand.d.ts +5 -1
  6. package/{src → dist}/commands/inserttablelayoutcommand.d.ts +5 -1
  7. package/{src → dist}/commands/mergecellcommand.d.ts +7 -3
  8. package/{src → dist}/commands/mergecellscommand.d.ts +5 -1
  9. package/{src → dist}/commands/removecolumncommand.d.ts +5 -1
  10. package/{src → dist}/commands/removerowcommand.d.ts +5 -1
  11. package/{src → dist}/commands/selectcolumncommand.d.ts +5 -1
  12. package/{src → dist}/commands/selectrowcommand.d.ts +5 -1
  13. package/{src → dist}/commands/setheadercolumncommand.d.ts +5 -1
  14. package/{src → dist}/commands/setheaderrowcommand.d.ts +5 -1
  15. package/{src → dist}/commands/splitcellcommand.d.ts +5 -1
  16. package/{src → dist}/converters/downcast.d.ts +6 -2
  17. package/{src → dist}/converters/table-caption-post-fixer.d.ts +5 -1
  18. package/{src → dist}/converters/table-cell-paragraph-post-fixer.d.ts +5 -1
  19. package/{src → dist}/converters/table-cell-refresh-handler.d.ts +5 -1
  20. package/{src → dist}/converters/table-headings-refresh-handler.d.ts +5 -1
  21. package/{src → dist}/converters/table-layout-post-fixer.d.ts +5 -1
  22. package/{src → dist}/converters/tableproperties.d.ts +6 -2
  23. package/{src → dist}/converters/upcasttable.d.ts +5 -1
  24. package/dist/index-content.css +30 -30
  25. package/dist/index-editor.css +104 -170
  26. package/dist/index.css +147 -237
  27. package/dist/index.css.map +1 -1
  28. package/{src → dist}/index.d.ts +6 -5
  29. package/dist/index.js +423 -2408
  30. package/dist/index.js.map +1 -1
  31. package/{src → dist}/plaintableoutput.d.ts +5 -1
  32. package/{src → dist}/table.d.ts +6 -2
  33. package/{src → dist}/tablecaption/tablecaptionediting.d.ts +6 -2
  34. package/{src → dist}/tablecaption/tablecaptionui.d.ts +5 -1
  35. package/{src → dist}/tablecaption/toggletablecaptioncommand.d.ts +5 -1
  36. package/{src → dist}/tablecaption/utils.d.ts +5 -1
  37. package/{src → dist}/tablecaption.d.ts +5 -1
  38. package/{src → dist}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +5 -1
  39. package/{src → dist}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +6 -2
  40. package/{src → dist}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +6 -2
  41. package/{src → dist}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +6 -2
  42. package/{src → dist}/tablecellproperties/commands/tablecellheightcommand.d.ts +5 -1
  43. package/{src → dist}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +5 -1
  44. package/{src → dist}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +6 -2
  45. package/{src → dist}/tablecellproperties/commands/tablecellpropertycommand.d.ts +6 -2
  46. package/{src → dist}/tablecellproperties/commands/tablecelltypecommand.d.ts +6 -6
  47. package/{src → dist}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +5 -1
  48. package/{src → dist}/tablecellproperties/tablecellpropertiesediting.d.ts +5 -1
  49. package/{src → dist}/tablecellproperties/tablecellpropertiesui.d.ts +6 -2
  50. package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +22 -0
  51. package/{src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts → dist/tablecellproperties/ui/tablecellpropertiesview.d.ts} +15 -12
  52. package/{src → dist}/tablecellproperties.d.ts +5 -1
  53. package/{src → dist}/tablecellwidth/commands/tablecellwidthcommand.d.ts +5 -1
  54. package/{src → dist}/tablecellwidth/tablecellwidthediting.d.ts +5 -1
  55. package/{src → dist}/tableclipboard.d.ts +7 -3
  56. package/{src → dist}/tablecolumnresize/constants.d.ts +4 -0
  57. package/{src → dist}/tablecolumnresize/converters.d.ts +5 -1
  58. package/{src → dist}/tablecolumnresize/tablecolumnresizeediting.d.ts +6 -2
  59. package/{src → dist}/tablecolumnresize/tablewidthscommand.d.ts +6 -2
  60. package/{src → dist}/tablecolumnresize/utils.d.ts +6 -2
  61. package/{src → dist}/tablecolumnresize.d.ts +5 -1
  62. package/{src → dist}/tableconfig.d.ts +30 -6
  63. package/{src → dist}/tableediting.d.ts +6 -2
  64. package/{src → dist}/tablekeyboard.d.ts +7 -3
  65. package/{src → dist}/tablelayout/commands/tabletypecommand.d.ts +5 -1
  66. package/{src → dist}/tablelayout/tablelayoutediting.d.ts +5 -1
  67. package/{src → dist}/tablelayout/tablelayoutui.d.ts +5 -1
  68. package/{src → dist}/tablelayout.d.ts +5 -1
  69. package/{src → dist}/tablemouse/mouseeventsobserver.d.ts +5 -1
  70. package/{src → dist}/tablemouse.d.ts +5 -1
  71. package/{src → dist}/tableproperties/commands/tablealignmentcommand.d.ts +5 -1
  72. package/{src → dist}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +5 -1
  73. package/{src → dist}/tableproperties/commands/tablebordercolorcommand.d.ts +6 -2
  74. package/{src → dist}/tableproperties/commands/tableborderstylecommand.d.ts +6 -2
  75. package/{src → dist}/tableproperties/commands/tableborderwidthcommand.d.ts +6 -2
  76. package/{src → dist}/tableproperties/commands/tableheightcommand.d.ts +5 -1
  77. package/{src → dist}/tableproperties/commands/tablepropertycommand.d.ts +6 -2
  78. package/{src → dist}/tableproperties/commands/tablewidthcommand.d.ts +5 -1
  79. package/{src → dist}/tableproperties/tablepropertiesediting.d.ts +5 -1
  80. package/{src → dist}/tableproperties/tablepropertiesui.d.ts +6 -2
  81. package/{src → dist}/tableproperties/ui/tablepropertiesview.d.ts +14 -2
  82. package/{src → dist}/tableproperties.d.ts +5 -1
  83. package/{src → dist}/tableselection.d.ts +6 -2
  84. package/{src → dist}/tabletoolbar.d.ts +6 -2
  85. package/{src → dist}/tableui.d.ts +5 -1
  86. package/{src → dist}/tableutils.d.ts +6 -2
  87. package/{src → dist}/tablewalker.d.ts +5 -1
  88. package/{src → dist}/ui/colorinputview.d.ts +6 -2
  89. package/{src → dist}/ui/inserttableview.d.ts +6 -2
  90. package/{src → dist}/utils/common.d.ts +6 -2
  91. package/{src → dist}/utils/structure.d.ts +5 -1
  92. package/{src → dist}/utils/table-properties.d.ts +5 -1
  93. package/{src → dist}/utils/ui/contextualballoon.d.ts +6 -2
  94. package/{src → dist}/utils/ui/table-properties.d.ts +6 -2
  95. package/{src → dist}/utils/ui/widget.d.ts +5 -1
  96. package/lang/contexts.json +2 -4
  97. package/package.json +25 -35
  98. package/theme/formrow.css +2 -0
  99. package/theme/tableform.css +1 -5
  100. package/theme/tableproperties.css +60 -0
  101. package/build/table.js +0 -5
  102. package/build/translations/af.js +0 -1
  103. package/build/translations/ar.js +0 -1
  104. package/build/translations/ast.js +0 -1
  105. package/build/translations/az.js +0 -1
  106. package/build/translations/be.js +0 -1
  107. package/build/translations/bg.js +0 -1
  108. package/build/translations/bn.js +0 -1
  109. package/build/translations/bs.js +0 -1
  110. package/build/translations/ca.js +0 -1
  111. package/build/translations/cs.js +0 -1
  112. package/build/translations/da.js +0 -1
  113. package/build/translations/de-ch.js +0 -1
  114. package/build/translations/de.js +0 -1
  115. package/build/translations/el.js +0 -1
  116. package/build/translations/en-au.js +0 -1
  117. package/build/translations/en-gb.js +0 -1
  118. package/build/translations/eo.js +0 -1
  119. package/build/translations/es-co.js +0 -1
  120. package/build/translations/es.js +0 -1
  121. package/build/translations/et.js +0 -1
  122. package/build/translations/eu.js +0 -1
  123. package/build/translations/fa.js +0 -1
  124. package/build/translations/fi.js +0 -1
  125. package/build/translations/fr.js +0 -1
  126. package/build/translations/gl.js +0 -1
  127. package/build/translations/gu.js +0 -1
  128. package/build/translations/he.js +0 -1
  129. package/build/translations/hi.js +0 -1
  130. package/build/translations/hr.js +0 -1
  131. package/build/translations/hu.js +0 -1
  132. package/build/translations/hy.js +0 -1
  133. package/build/translations/id.js +0 -1
  134. package/build/translations/it.js +0 -1
  135. package/build/translations/ja.js +0 -1
  136. package/build/translations/jv.js +0 -1
  137. package/build/translations/kk.js +0 -1
  138. package/build/translations/km.js +0 -1
  139. package/build/translations/kn.js +0 -1
  140. package/build/translations/ko.js +0 -1
  141. package/build/translations/ku.js +0 -1
  142. package/build/translations/lt.js +0 -1
  143. package/build/translations/lv.js +0 -1
  144. package/build/translations/ms.js +0 -1
  145. package/build/translations/nb.js +0 -1
  146. package/build/translations/ne.js +0 -1
  147. package/build/translations/nl.js +0 -1
  148. package/build/translations/no.js +0 -1
  149. package/build/translations/oc.js +0 -1
  150. package/build/translations/pl.js +0 -1
  151. package/build/translations/pt-br.js +0 -1
  152. package/build/translations/pt.js +0 -1
  153. package/build/translations/ro.js +0 -1
  154. package/build/translations/ru.js +0 -1
  155. package/build/translations/si.js +0 -1
  156. package/build/translations/sk.js +0 -1
  157. package/build/translations/sl.js +0 -1
  158. package/build/translations/sq.js +0 -1
  159. package/build/translations/sr-latn.js +0 -1
  160. package/build/translations/sr.js +0 -1
  161. package/build/translations/sv.js +0 -1
  162. package/build/translations/th.js +0 -1
  163. package/build/translations/ti.js +0 -1
  164. package/build/translations/tk.js +0 -1
  165. package/build/translations/tr.js +0 -1
  166. package/build/translations/tt.js +0 -1
  167. package/build/translations/ug.js +0 -1
  168. package/build/translations/uk.js +0 -1
  169. package/build/translations/ur.js +0 -1
  170. package/build/translations/uz.js +0 -1
  171. package/build/translations/vi.js +0 -1
  172. package/build/translations/zh-cn.js +0 -1
  173. package/build/translations/zh.js +0 -1
  174. package/src/augmentation.js +0 -5
  175. package/src/commands/insertcolumncommand.js +0 -71
  176. package/src/commands/insertrowcommand.js +0 -70
  177. package/src/commands/inserttablecommand.js +0 -69
  178. package/src/commands/inserttablelayoutcommand.js +0 -65
  179. package/src/commands/mergecellcommand.js +0 -206
  180. package/src/commands/mergecellscommand.js +0 -94
  181. package/src/commands/removecolumncommand.js +0 -109
  182. package/src/commands/removerowcommand.js +0 -82
  183. package/src/commands/selectcolumncommand.js +0 -60
  184. package/src/commands/selectrowcommand.js +0 -56
  185. package/src/commands/setheadercolumncommand.js +0 -76
  186. package/src/commands/setheaderrowcommand.js +0 -83
  187. package/src/commands/splitcellcommand.js +0 -58
  188. package/src/converters/downcast.js +0 -298
  189. package/src/converters/table-caption-post-fixer.js +0 -55
  190. package/src/converters/table-cell-paragraph-post-fixer.js +0 -109
  191. package/src/converters/table-cell-refresh-handler.js +0 -47
  192. package/src/converters/table-headings-refresh-handler.js +0 -51
  193. package/src/converters/table-layout-post-fixer.js +0 -369
  194. package/src/converters/tableproperties.js +0 -444
  195. package/src/converters/upcasttable.js +0 -385
  196. package/src/index.js +0 -98
  197. package/src/plaintableoutput.js +0 -49
  198. package/src/table.js +0 -50
  199. package/src/tablecaption/tablecaptionediting.js +0 -136
  200. package/src/tablecaption/tablecaptionui.js +0 -64
  201. package/src/tablecaption/toggletablecaptioncommand.js +0 -105
  202. package/src/tablecaption/utils.js +0 -61
  203. package/src/tablecaption.js +0 -34
  204. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +0 -30
  205. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +0 -44
  206. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +0 -44
  207. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +0 -64
  208. package/src/tablecellproperties/commands/tablecellheightcommand.js +0 -51
  209. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +0 -30
  210. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +0 -64
  211. package/src/tablecellproperties/commands/tablecellpropertycommand.js +0 -138
  212. package/src/tablecellproperties/commands/tablecelltypecommand.js +0 -167
  213. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +0 -38
  214. package/src/tablecellproperties/tablecellpropertiesediting.js +0 -412
  215. package/src/tablecellproperties/tablecellpropertiesui.js +0 -385
  216. package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +0 -128
  217. package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +0 -408
  218. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +0 -229
  219. package/src/tablecellproperties/ui/tablecellpropertiesview.js +0 -612
  220. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +0 -744
  221. package/src/tablecellproperties.js +0 -40
  222. package/src/tablecellwidth/commands/tablecellwidthcommand.js +0 -51
  223. package/src/tablecellwidth/tablecellwidthediting.js +0 -53
  224. package/src/tableclipboard.js +0 -500
  225. package/src/tablecolumnresize/constants.js +0 -33
  226. package/src/tablecolumnresize/converters.js +0 -62
  227. package/src/tablecolumnresize/tablecolumnresizeediting.js +0 -729
  228. package/src/tablecolumnresize/tablewidthscommand.js +0 -61
  229. package/src/tablecolumnresize/utils.js +0 -370
  230. package/src/tablecolumnresize.js +0 -36
  231. package/src/tableconfig.js +0 -5
  232. package/src/tableediting.js +0 -246
  233. package/src/tablekeyboard.js +0 -273
  234. package/src/tablelayout/commands/tabletypecommand.js +0 -68
  235. package/src/tablelayout/tablelayoutediting.js +0 -295
  236. package/src/tablelayout/tablelayoutui.js +0 -196
  237. package/src/tablelayout.js +0 -37
  238. package/src/tablemouse/mouseeventsobserver.js +0 -34
  239. package/src/tablemouse.js +0 -178
  240. package/src/tableproperties/commands/tablealignmentcommand.js +0 -30
  241. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +0 -30
  242. package/src/tableproperties/commands/tablebordercolorcommand.js +0 -44
  243. package/src/tableproperties/commands/tableborderstylecommand.js +0 -44
  244. package/src/tableproperties/commands/tableborderwidthcommand.js +0 -64
  245. package/src/tableproperties/commands/tableheightcommand.js +0 -54
  246. package/src/tableproperties/commands/tablepropertycommand.js +0 -103
  247. package/src/tableproperties/commands/tablewidthcommand.js +0 -54
  248. package/src/tableproperties/tablepropertiesediting.js +0 -546
  249. package/src/tableproperties/tablepropertiesui.js +0 -374
  250. package/src/tableproperties/tablepropertiesuiexperimental.d.ts +0 -136
  251. package/src/tableproperties/tablepropertiesuiexperimental.js +0 -375
  252. package/src/tableproperties/ui/tablepropertiesview.js +0 -520
  253. package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +0 -216
  254. package/src/tableproperties/ui/tablepropertiesviewexperimental.js +0 -544
  255. package/src/tableproperties.js +0 -40
  256. package/src/tableselection.js +0 -323
  257. package/src/tabletoolbar.js +0 -63
  258. package/src/tableui.js +0 -335
  259. package/src/tableutils.js +0 -1282
  260. package/src/tablewalker.js +0 -489
  261. package/src/ui/colorinputview.js +0 -305
  262. package/src/ui/inserttableview.js +0 -192
  263. package/src/utils/common.js +0 -118
  264. package/src/utils/structure.js +0 -452
  265. package/src/utils/table-properties.js +0 -121
  266. package/src/utils/ui/contextualballoon.js +0 -111
  267. package/src/utils/ui/table-properties.js +0 -390
  268. package/src/utils/ui/table-propertiesexperimental.d.ts +0 -215
  269. package/src/utils/ui/table-propertiesexperimental.js +0 -391
  270. package/src/utils/ui/widget.js +0 -56
  271. package/theme/formrow-experimental.css +0 -15
  272. package/theme/tablecellproperties-experimental.css +0 -4
  273. package/theme/tableform-experimental.css +0 -61
  274. package/theme/tableproperties-experimental.css +0 -78
@@ -1,444 +0,0 @@
1
- /**
2
- * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
- */
5
- import { first } from 'ckeditor5/src/utils.js';
6
- const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
7
- const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
8
- /**
9
- * Conversion helper for upcasting attributes using normalized styles.
10
- *
11
- * @param options.modelAttribute The attribute to set.
12
- * @param options.styleName The style name to convert.
13
- * @param options.attributeName The HTML attribute name to convert.
14
- * @param options.attributeType The HTML attribute type for value normalization.
15
- * @param options.viewElement The view element name that should be converted.
16
- * @param options.defaultValue The default value for the specified `modelAttribute`.
17
- * @param options.shouldUpcast The function which returns `true` if style should be upcasted from this element.
18
- * @internal
19
- */
20
- export function upcastStyleToAttribute(conversion, options) {
21
- const { modelAttribute, styleName, attributeName, attributeType, viewElement, defaultValue, shouldUpcast = () => true, reduceBoxSides = false } = options;
22
- conversion.for('upcast').attributeToAttribute({
23
- view: {
24
- name: viewElement,
25
- styles: {
26
- [styleName]: /[\s\S]+/
27
- }
28
- },
29
- model: {
30
- key: modelAttribute,
31
- value: (viewElement, conversionApi, data) => {
32
- // Ignore table elements inside figures and figures without the table class.
33
- if (!shouldUpcast(viewElement)) {
34
- return;
35
- }
36
- const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
37
- const normalized = viewElement.getNormalizedStyle(styleName);
38
- const value = reduceBoxSides ? reduceBoxSidesValue(normalized) : normalized;
39
- if (localDefaultValue !== value) {
40
- return value;
41
- }
42
- // Consume the style even if not applied to the element so it won't be processed by other converters.
43
- conversionApi.consumable.consume(viewElement, { styles: styleName });
44
- }
45
- }
46
- });
47
- if (attributeName) {
48
- conversion.for('upcast').attributeToAttribute({
49
- view: {
50
- name: viewElement,
51
- attributes: {
52
- [attributeName]: /.+/
53
- }
54
- },
55
- model: {
56
- key: modelAttribute,
57
- value: (viewElement, conversionApi, data) => {
58
- // Convert attributes of table and table cell elements, ignore figure.
59
- // Do not convert attribute if related style is set as it has a higher priority.
60
- // Do not convert attribute if the element is a table inside a figure with the related style set.
61
- if (viewElement.name == 'figure' ||
62
- viewElement.hasStyle(styleName) ||
63
- viewElement.name == 'table' && viewElement.parent.name == 'figure' && viewElement.parent.hasStyle(styleName)) {
64
- return;
65
- }
66
- const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
67
- let value = viewElement.getAttribute(attributeName);
68
- if (value && attributeType == 'length' && !value.endsWith('px')) {
69
- value += 'px';
70
- }
71
- if (localDefaultValue !== value) {
72
- return value;
73
- }
74
- // Consume the attribute even if not applied to the element so it won't be processed by other converters.
75
- conversionApi.consumable.consume(viewElement, { attributes: attributeName });
76
- }
77
- }
78
- });
79
- }
80
- }
81
- /**
82
- * Conversion helper for upcasting border styles for view elements.
83
- *
84
- * @param editor The editor instance.
85
- * @param defaultBorder The default border values.
86
- * @param defaultBorder.color The default `borderColor` value.
87
- * @param defaultBorder.style The default `borderStyle` value.
88
- * @param defaultBorder.width The default `borderWidth` value.
89
- * @internal
90
- */
91
- export function upcastBorderStyles(editor, viewElementName, modelAttributes, defaultBorder) {
92
- const { conversion } = editor;
93
- conversion.for('upcast').add(dispatcher => dispatcher.on('element:' + viewElementName, (evt, data, conversionApi) => {
94
- // If the element was not converted by element-to-element converter,
95
- // we should not try to convert the style. See #8393.
96
- if (!data.modelRange) {
97
- return;
98
- }
99
- // Check the most detailed properties. These will be always set directly or
100
- // when using the "group" properties like: `border-(top|right|bottom|left)` or `border`.
101
- const stylesToConsume = [
102
- 'border-top-width',
103
- 'border-top-color',
104
- 'border-top-style',
105
- 'border-bottom-width',
106
- 'border-bottom-color',
107
- 'border-bottom-style',
108
- 'border-right-width',
109
- 'border-right-color',
110
- 'border-right-style',
111
- 'border-left-width',
112
- 'border-left-color',
113
- 'border-left-style'
114
- ].filter(styleName => data.viewItem.hasStyle(styleName));
115
- if (!stylesToConsume.length) {
116
- return;
117
- }
118
- const matcherPattern = {
119
- styles: stylesToConsume
120
- };
121
- // Try to consume appropriate values from consumable values list.
122
- if (!conversionApi.consumable.test(data.viewItem, matcherPattern)) {
123
- return;
124
- }
125
- const modelElement = [...data.modelRange.getItems({ shallow: true })].pop();
126
- const tableElement = modelElement.findAncestor('table', { includeSelf: true });
127
- let localDefaultBorder = defaultBorder;
128
- if (tableElement && tableElement.getAttribute('tableType') == 'layout') {
129
- localDefaultBorder = {
130
- style: 'none',
131
- color: '',
132
- width: ''
133
- };
134
- }
135
- conversionApi.consumable.consume(data.viewItem, matcherPattern);
136
- const normalizedBorder = {
137
- style: data.viewItem.getNormalizedStyle('border-style'),
138
- color: data.viewItem.getNormalizedStyle('border-color'),
139
- width: data.viewItem.getNormalizedStyle('border-width')
140
- };
141
- const reducedBorder = {
142
- style: reduceBoxSidesValue(normalizedBorder.style),
143
- color: reduceBoxSidesValue(normalizedBorder.color),
144
- width: reduceBoxSidesValue(normalizedBorder.width)
145
- };
146
- if (reducedBorder.style !== localDefaultBorder.style) {
147
- conversionApi.writer.setAttribute(modelAttributes.style, reducedBorder.style, modelElement);
148
- }
149
- if (reducedBorder.color !== localDefaultBorder.color) {
150
- conversionApi.writer.setAttribute(modelAttributes.color, reducedBorder.color, modelElement);
151
- }
152
- if (reducedBorder.width !== localDefaultBorder.width) {
153
- conversionApi.writer.setAttribute(modelAttributes.width, reducedBorder.width, modelElement);
154
- }
155
- }));
156
- if (editor.config.get('experimentalFlags.upcastTableBorderZeroAttributes')) {
157
- // If parent table has `border="0"` attribute then set border style to `none`
158
- // all table cells of that table and table itself.
159
- conversion.for('upcast').add(dispatcher => {
160
- dispatcher.on(`element:${viewElementName}`, (evt, data, conversionApi) => {
161
- const { modelRange, viewItem } = data;
162
- const viewTable = (viewItem.is('element', 'table') ?
163
- viewItem :
164
- viewItem.findAncestor('table'));
165
- // If something already consumed the border attribute on the nearest table element, skip the conversion.
166
- if (!conversionApi.consumable.test(viewTable, { attributes: 'border' })) {
167
- return;
168
- }
169
- // Ignore tables with border different than "0".
170
- if (viewTable.getAttribute('border') !== '0') {
171
- return;
172
- }
173
- const modelElement = modelRange?.start?.nodeAfter;
174
- // If model element has already border style attribute, skip the conversion.
175
- if (!modelElement || modelElement.hasAttribute(modelAttributes.style)) {
176
- return;
177
- }
178
- conversionApi.writer.setAttribute(modelAttributes.style, 'none', modelElement);
179
- if (viewItem.is('element', 'table')) {
180
- conversionApi.consumable.consume(viewItem, { attributes: 'border' });
181
- }
182
- });
183
- });
184
- }
185
- }
186
- /**
187
- * Conversion helper for downcasting an attribute to a style.
188
- *
189
- * @internal
190
- */
191
- export function downcastAttributeToStyle(conversion, options) {
192
- const { modelElement, modelAttribute, styleName } = options;
193
- conversion.for('downcast').attributeToAttribute({
194
- model: {
195
- name: modelElement,
196
- key: modelAttribute
197
- },
198
- view: modelAttributeValue => ({
199
- key: 'style',
200
- value: {
201
- [styleName]: modelAttributeValue
202
- }
203
- })
204
- });
205
- }
206
- /**
207
- * Conversion helper for downcasting attributes from the model table to a view table (not to `<figure>`).
208
- *
209
- * @internal
210
- */
211
- export function downcastTableAttribute(conversion, options) {
212
- const { modelAttribute, styleName } = options;
213
- conversion.for('downcast').add(dispatcher => dispatcher.on(`attribute:${modelAttribute}:table`, (evt, data, conversionApi) => {
214
- const { item, attributeNewValue } = data;
215
- const { mapper, writer } = conversionApi;
216
- if (!conversionApi.consumable.consume(data.item, evt.name)) {
217
- return;
218
- }
219
- const table = [...mapper.toViewElement(item).getChildren()].find(child => child.is('element', 'table'));
220
- if (attributeNewValue) {
221
- writer.setStyle(styleName, attributeNewValue, table);
222
- }
223
- else {
224
- writer.removeStyle(styleName, table);
225
- }
226
- }));
227
- }
228
- /**
229
- * Returns the default value for table or table cell property adjusted for layout tables.
230
- *
231
- * @internal
232
- */
233
- export function getDefaultValueAdjusted(defaultValue, layoutTableDefault, data) {
234
- const modelElement = data.modelRange && first(data.modelRange.getItems({ shallow: true }));
235
- const tableElement = modelElement && modelElement.is('element') && modelElement.findAncestor('table', { includeSelf: true });
236
- if (tableElement && tableElement.getAttribute('tableType') === 'layout') {
237
- return layoutTableDefault;
238
- }
239
- return defaultValue;
240
- }
241
- /**
242
- * Reduces the full top, right, bottom, left object to a single string if all sides are equal.
243
- * Returns original style otherwise.
244
- */
245
- function reduceBoxSidesValue(style) {
246
- if (!style) {
247
- return;
248
- }
249
- const sides = ['top', 'right', 'bottom', 'left'];
250
- const allSidesDefined = sides.every(side => style[side]);
251
- if (!allSidesDefined) {
252
- return style;
253
- }
254
- const topSideStyle = style.top;
255
- const allSidesEqual = sides.every(side => style[side] === topSideStyle);
256
- if (!allSidesEqual) {
257
- return style;
258
- }
259
- return topSideStyle;
260
- }
261
- /**
262
- * Default table alignment options.
263
- */
264
- export const DEFAULT_TABLE_ALIGNMENT_OPTIONS = {
265
- left: { className: 'table-style-align-left' },
266
- center: { className: 'table-style-align-center' },
267
- right: { className: 'table-style-align-right' },
268
- blockLeft: { className: 'table-style-block-align-left' },
269
- blockRight: { className: 'table-style-block-align-right' }
270
- };
271
- /**
272
- * Configuration for upcasting table alignment from view to model.
273
- */
274
- export const upcastTableAlignmentConfig = [
275
- // Support for the `float:*;` CSS definition for the table alignment.
276
- {
277
- view: {
278
- name: /^(table|figure)$/,
279
- styles: {
280
- float: FLOAT_VALUES_REG_EXP
281
- }
282
- },
283
- getAlign: (viewElement) => {
284
- let align = viewElement.getStyle('float');
285
- if (align === 'none') {
286
- align = 'center';
287
- }
288
- return align;
289
- },
290
- getConsumables(viewElement) {
291
- const float = viewElement.getStyle('float');
292
- const styles = ['float'];
293
- if (float === 'left' && viewElement.hasStyle('margin-right')) {
294
- styles.push('margin-right');
295
- }
296
- else if (float === 'right' && viewElement.hasStyle('margin-left')) {
297
- styles.push('margin-left');
298
- }
299
- return { styles };
300
- }
301
- },
302
- // Support for the `margin-left:auto; margin-right:auto;` CSS definition for the table alignment.
303
- {
304
- view: {
305
- name: /^(table|figure)$/,
306
- styles: {
307
- 'margin-left': 'auto',
308
- 'margin-right': 'auto'
309
- }
310
- },
311
- getAlign: () => 'center',
312
- getConsumables: () => {
313
- return { styles: ['margin-left', 'margin-right'] };
314
- }
315
- },
316
- // Support for the left alignment using CSS classes.
317
- {
318
- view: {
319
- name: /^(table|figure)$/,
320
- key: 'class',
321
- value: 'table-style-align-left'
322
- },
323
- getAlign: () => 'left',
324
- getConsumables() {
325
- return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.left.className };
326
- }
327
- },
328
- // Support for the right alignment using CSS classes.
329
- {
330
- view: {
331
- name: /^(table|figure)$/,
332
- key: 'class',
333
- value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.right.className
334
- },
335
- getAlign: () => 'right',
336
- getConsumables() {
337
- return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.right.className };
338
- }
339
- },
340
- // Support for the center alignment using CSS classes.
341
- {
342
- view: {
343
- name: /^(table|figure)$/,
344
- key: 'class',
345
- value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.center.className
346
- },
347
- getAlign: () => 'center',
348
- getConsumables() {
349
- return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.center.className };
350
- }
351
- },
352
- // Support for the block alignment left using CSS classes.
353
- {
354
- view: {
355
- name: /^(table|figure)$/,
356
- key: 'class',
357
- value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className
358
- },
359
- getAlign: () => 'blockLeft',
360
- getConsumables() {
361
- return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className };
362
- }
363
- },
364
- // Support for the block alignment right using CSS classes.
365
- {
366
- view: {
367
- name: /^(table|figure)$/,
368
- key: 'class',
369
- value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className
370
- },
371
- getAlign: () => 'blockRight',
372
- getConsumables() {
373
- return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className };
374
- }
375
- },
376
- // Support for the block alignment left using margin CSS styles.
377
- {
378
- view: {
379
- name: /^(table|figure)$/,
380
- styles: {
381
- 'margin-left': '0',
382
- 'margin-right': 'auto'
383
- }
384
- },
385
- getAlign: () => 'blockLeft',
386
- getConsumables() {
387
- return { styles: ['margin-left', 'margin-right'] };
388
- }
389
- },
390
- // Support for the block alignment right using margin CSS styles.
391
- {
392
- view: {
393
- name: /^(table|figure)$/,
394
- styles: {
395
- 'margin-left': 'auto',
396
- 'margin-right': '0'
397
- }
398
- },
399
- getAlign: () => 'blockRight',
400
- getConsumables() {
401
- return { styles: ['margin-left', 'margin-right'] };
402
- }
403
- },
404
- // Support for the `align` attribute as the backward compatibility while pasting from other sources.
405
- {
406
- view: {
407
- name: 'table',
408
- attributes: {
409
- align: ALIGN_VALUES_REG_EXP
410
- }
411
- },
412
- getAlign: (viewElement) => viewElement.getAttribute('align'),
413
- getConsumables() {
414
- return { attributes: 'align' };
415
- }
416
- }
417
- ];
418
- export const downcastTableAlignmentConfig = {
419
- center: {
420
- align: 'center',
421
- style: 'margin-left: auto; margin-right: auto;',
422
- className: 'table-style-align-center'
423
- },
424
- left: {
425
- align: 'left',
426
- style: 'float: left;',
427
- className: 'table-style-align-left'
428
- },
429
- right: {
430
- align: 'right',
431
- style: 'float: right;',
432
- className: 'table-style-align-right'
433
- },
434
- blockLeft: {
435
- align: undefined,
436
- style: 'margin-left: 0; margin-right: auto;',
437
- className: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className
438
- },
439
- blockRight: {
440
- align: undefined,
441
- style: 'margin-left: auto; margin-right: 0;',
442
- className: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className
443
- }
444
- };