@ckeditor/ckeditor5-engine 47.6.1 → 48.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/LICENSE.md +1 -1
  2. package/{src → dist}/engineconfig.d.ts +6 -15
  3. package/dist/index-editor.css +38 -15
  4. package/dist/index.css +37 -37
  5. package/dist/index.css.map +1 -1
  6. package/{src → dist}/index.d.ts +0 -1
  7. package/dist/index.js +588 -94
  8. package/dist/index.js.map +1 -1
  9. package/{src → dist}/model/model.d.ts +10 -4
  10. package/{src → dist}/model/selection.d.ts +1 -1
  11. package/{src → dist}/view/downcastwriter.d.ts +3 -2
  12. package/{src → dist}/view/element.d.ts +2 -2
  13. package/{src → dist}/view/matcher.d.ts +4 -2
  14. package/dist/view/styles/background.d.ts +18 -0
  15. package/{src → dist}/view/styles/border.d.ts +0 -12
  16. package/{src → dist}/view/styles/margin.d.ts +0 -13
  17. package/{src → dist}/view/styles/padding.d.ts +0 -13
  18. package/{src → dist}/view/styles/utils.d.ts +12 -0
  19. package/package.json +20 -39
  20. package/src/controller/datacontroller.js +0 -522
  21. package/src/controller/editingcontroller.js +0 -181
  22. package/src/conversion/conversion.js +0 -606
  23. package/src/conversion/conversionhelpers.js +0 -33
  24. package/src/conversion/downcastdispatcher.js +0 -563
  25. package/src/conversion/downcasthelpers.js +0 -2160
  26. package/src/conversion/mapper.js +0 -1050
  27. package/src/conversion/modelconsumable.js +0 -331
  28. package/src/conversion/upcastdispatcher.js +0 -470
  29. package/src/conversion/upcasthelpers.js +0 -952
  30. package/src/conversion/viewconsumable.js +0 -541
  31. package/src/dataprocessor/basichtmlwriter.js +0 -22
  32. package/src/dataprocessor/dataprocessor.js +0 -5
  33. package/src/dataprocessor/htmldataprocessor.js +0 -107
  34. package/src/dataprocessor/htmlwriter.js +0 -5
  35. package/src/dataprocessor/xmldataprocessor.js +0 -127
  36. package/src/dev-utils/model.js +0 -396
  37. package/src/dev-utils/operationreplayer.js +0 -116
  38. package/src/dev-utils/utils.js +0 -122
  39. package/src/dev-utils/view.js +0 -990
  40. package/src/engineconfig.js +0 -5
  41. package/src/index.js +0 -134
  42. package/src/legacyerrors.js +0 -17
  43. package/src/model/batch.js +0 -98
  44. package/src/model/differ.js +0 -1288
  45. package/src/model/document.js +0 -398
  46. package/src/model/documentfragment.js +0 -332
  47. package/src/model/documentselection.js +0 -1026
  48. package/src/model/element.js +0 -323
  49. package/src/model/history.js +0 -206
  50. package/src/model/item.js +0 -5
  51. package/src/model/liveposition.js +0 -93
  52. package/src/model/liverange.js +0 -121
  53. package/src/model/markercollection.js +0 -436
  54. package/src/model/model.js +0 -866
  55. package/src/model/node.js +0 -371
  56. package/src/model/nodelist.js +0 -244
  57. package/src/model/operation/attributeoperation.js +0 -172
  58. package/src/model/operation/detachoperation.js +0 -87
  59. package/src/model/operation/insertoperation.js +0 -153
  60. package/src/model/operation/markeroperation.js +0 -136
  61. package/src/model/operation/mergeoperation.js +0 -184
  62. package/src/model/operation/moveoperation.js +0 -179
  63. package/src/model/operation/nooperation.js +0 -48
  64. package/src/model/operation/operation.js +0 -78
  65. package/src/model/operation/operationfactory.js +0 -44
  66. package/src/model/operation/renameoperation.js +0 -128
  67. package/src/model/operation/rootattributeoperation.js +0 -173
  68. package/src/model/operation/rootoperation.js +0 -106
  69. package/src/model/operation/splitoperation.js +0 -214
  70. package/src/model/operation/transform.js +0 -2211
  71. package/src/model/operation/utils.js +0 -217
  72. package/src/model/position.js +0 -1041
  73. package/src/model/range.js +0 -880
  74. package/src/model/rootelement.js +0 -82
  75. package/src/model/schema.js +0 -1542
  76. package/src/model/selection.js +0 -814
  77. package/src/model/text.js +0 -92
  78. package/src/model/textproxy.js +0 -202
  79. package/src/model/treewalker.js +0 -313
  80. package/src/model/typecheckable.js +0 -16
  81. package/src/model/utils/autoparagraphing.js +0 -63
  82. package/src/model/utils/deletecontent.js +0 -509
  83. package/src/model/utils/getselectedcontent.js +0 -126
  84. package/src/model/utils/insertcontent.js +0 -750
  85. package/src/model/utils/insertobject.js +0 -135
  86. package/src/model/utils/modifyselection.js +0 -187
  87. package/src/model/utils/selection-post-fixer.js +0 -264
  88. package/src/model/writer.js +0 -1318
  89. package/src/view/attributeelement.js +0 -220
  90. package/src/view/containerelement.js +0 -91
  91. package/src/view/datatransfer.js +0 -106
  92. package/src/view/document.js +0 -139
  93. package/src/view/documentfragment.js +0 -251
  94. package/src/view/documentselection.js +0 -270
  95. package/src/view/domconverter.js +0 -1661
  96. package/src/view/downcastwriter.js +0 -1589
  97. package/src/view/editableelement.js +0 -74
  98. package/src/view/element.js +0 -1053
  99. package/src/view/elementdefinition.js +0 -5
  100. package/src/view/emptyelement.js +0 -83
  101. package/src/view/filler.js +0 -161
  102. package/src/view/item.js +0 -5
  103. package/src/view/matcher.js +0 -437
  104. package/src/view/node.js +0 -238
  105. package/src/view/observer/arrowkeysobserver.js +0 -40
  106. package/src/view/observer/bubblingemittermixin.js +0 -215
  107. package/src/view/observer/bubblingeventinfo.js +0 -49
  108. package/src/view/observer/clickobserver.js +0 -26
  109. package/src/view/observer/compositionobserver.js +0 -64
  110. package/src/view/observer/domeventdata.js +0 -63
  111. package/src/view/observer/domeventobserver.js +0 -81
  112. package/src/view/observer/fakeselectionobserver.js +0 -95
  113. package/src/view/observer/focusobserver.js +0 -166
  114. package/src/view/observer/inputobserver.js +0 -236
  115. package/src/view/observer/keyobserver.js +0 -36
  116. package/src/view/observer/mouseobserver.js +0 -26
  117. package/src/view/observer/mutationobserver.js +0 -219
  118. package/src/view/observer/observer.js +0 -92
  119. package/src/view/observer/pointerobserver.js +0 -26
  120. package/src/view/observer/selectionobserver.js +0 -318
  121. package/src/view/observer/tabobserver.js +0 -42
  122. package/src/view/observer/touchobserver.js +0 -26
  123. package/src/view/placeholder.js +0 -285
  124. package/src/view/position.js +0 -341
  125. package/src/view/range.js +0 -451
  126. package/src/view/rawelement.js +0 -115
  127. package/src/view/renderer.js +0 -1148
  128. package/src/view/rooteditableelement.js +0 -78
  129. package/src/view/selection.js +0 -594
  130. package/src/view/styles/background.d.ts +0 -33
  131. package/src/view/styles/background.js +0 -74
  132. package/src/view/styles/border.js +0 -316
  133. package/src/view/styles/margin.js +0 -34
  134. package/src/view/styles/padding.js +0 -34
  135. package/src/view/styles/utils.js +0 -219
  136. package/src/view/stylesmap.js +0 -941
  137. package/src/view/text.js +0 -110
  138. package/src/view/textproxy.js +0 -136
  139. package/src/view/tokenlist.js +0 -194
  140. package/src/view/treewalker.js +0 -389
  141. package/src/view/typecheckable.js +0 -19
  142. package/src/view/uielement.js +0 -194
  143. package/src/view/upcastwriter.js +0 -363
  144. package/src/view/view.js +0 -579
  145. package/theme/placeholder.css +0 -36
  146. package/theme/renderer.css +0 -9
  147. /package/{src → dist}/controller/datacontroller.d.ts +0 -0
  148. /package/{src → dist}/controller/editingcontroller.d.ts +0 -0
  149. /package/{src → dist}/conversion/conversion.d.ts +0 -0
  150. /package/{src → dist}/conversion/conversionhelpers.d.ts +0 -0
  151. /package/{src → dist}/conversion/downcastdispatcher.d.ts +0 -0
  152. /package/{src → dist}/conversion/downcasthelpers.d.ts +0 -0
  153. /package/{src → dist}/conversion/mapper.d.ts +0 -0
  154. /package/{src → dist}/conversion/modelconsumable.d.ts +0 -0
  155. /package/{src → dist}/conversion/upcastdispatcher.d.ts +0 -0
  156. /package/{src → dist}/conversion/upcasthelpers.d.ts +0 -0
  157. /package/{src → dist}/conversion/viewconsumable.d.ts +0 -0
  158. /package/{src → dist}/dataprocessor/basichtmlwriter.d.ts +0 -0
  159. /package/{src → dist}/dataprocessor/dataprocessor.d.ts +0 -0
  160. /package/{src → dist}/dataprocessor/htmldataprocessor.d.ts +0 -0
  161. /package/{src → dist}/dataprocessor/htmlwriter.d.ts +0 -0
  162. /package/{src → dist}/dataprocessor/xmldataprocessor.d.ts +0 -0
  163. /package/{src → dist}/dev-utils/model.d.ts +0 -0
  164. /package/{src → dist}/dev-utils/operationreplayer.d.ts +0 -0
  165. /package/{src → dist}/dev-utils/utils.d.ts +0 -0
  166. /package/{src → dist}/dev-utils/view.d.ts +0 -0
  167. /package/{src → dist}/legacyerrors.d.ts +0 -0
  168. /package/{src → dist}/model/batch.d.ts +0 -0
  169. /package/{src → dist}/model/differ.d.ts +0 -0
  170. /package/{src → dist}/model/document.d.ts +0 -0
  171. /package/{src → dist}/model/documentfragment.d.ts +0 -0
  172. /package/{src → dist}/model/documentselection.d.ts +0 -0
  173. /package/{src → dist}/model/element.d.ts +0 -0
  174. /package/{src → dist}/model/history.d.ts +0 -0
  175. /package/{src → dist}/model/item.d.ts +0 -0
  176. /package/{src → dist}/model/liveposition.d.ts +0 -0
  177. /package/{src → dist}/model/liverange.d.ts +0 -0
  178. /package/{src → dist}/model/markercollection.d.ts +0 -0
  179. /package/{src → dist}/model/node.d.ts +0 -0
  180. /package/{src → dist}/model/nodelist.d.ts +0 -0
  181. /package/{src → dist}/model/operation/attributeoperation.d.ts +0 -0
  182. /package/{src → dist}/model/operation/detachoperation.d.ts +0 -0
  183. /package/{src → dist}/model/operation/insertoperation.d.ts +0 -0
  184. /package/{src → dist}/model/operation/markeroperation.d.ts +0 -0
  185. /package/{src → dist}/model/operation/mergeoperation.d.ts +0 -0
  186. /package/{src → dist}/model/operation/moveoperation.d.ts +0 -0
  187. /package/{src → dist}/model/operation/nooperation.d.ts +0 -0
  188. /package/{src → dist}/model/operation/operation.d.ts +0 -0
  189. /package/{src → dist}/model/operation/operationfactory.d.ts +0 -0
  190. /package/{src → dist}/model/operation/renameoperation.d.ts +0 -0
  191. /package/{src → dist}/model/operation/rootattributeoperation.d.ts +0 -0
  192. /package/{src → dist}/model/operation/rootoperation.d.ts +0 -0
  193. /package/{src → dist}/model/operation/splitoperation.d.ts +0 -0
  194. /package/{src → dist}/model/operation/transform.d.ts +0 -0
  195. /package/{src → dist}/model/operation/utils.d.ts +0 -0
  196. /package/{src → dist}/model/position.d.ts +0 -0
  197. /package/{src → dist}/model/range.d.ts +0 -0
  198. /package/{src → dist}/model/rootelement.d.ts +0 -0
  199. /package/{src → dist}/model/schema.d.ts +0 -0
  200. /package/{src → dist}/model/text.d.ts +0 -0
  201. /package/{src → dist}/model/textproxy.d.ts +0 -0
  202. /package/{src → dist}/model/treewalker.d.ts +0 -0
  203. /package/{src → dist}/model/typecheckable.d.ts +0 -0
  204. /package/{src → dist}/model/utils/autoparagraphing.d.ts +0 -0
  205. /package/{src → dist}/model/utils/deletecontent.d.ts +0 -0
  206. /package/{src → dist}/model/utils/getselectedcontent.d.ts +0 -0
  207. /package/{src → dist}/model/utils/insertcontent.d.ts +0 -0
  208. /package/{src → dist}/model/utils/insertobject.d.ts +0 -0
  209. /package/{src → dist}/model/utils/modifyselection.d.ts +0 -0
  210. /package/{src → dist}/model/utils/selection-post-fixer.d.ts +0 -0
  211. /package/{src → dist}/model/writer.d.ts +0 -0
  212. /package/{src → dist}/view/attributeelement.d.ts +0 -0
  213. /package/{src → dist}/view/containerelement.d.ts +0 -0
  214. /package/{src → dist}/view/datatransfer.d.ts +0 -0
  215. /package/{src → dist}/view/document.d.ts +0 -0
  216. /package/{src → dist}/view/documentfragment.d.ts +0 -0
  217. /package/{src → dist}/view/documentselection.d.ts +0 -0
  218. /package/{src → dist}/view/domconverter.d.ts +0 -0
  219. /package/{src → dist}/view/editableelement.d.ts +0 -0
  220. /package/{src → dist}/view/elementdefinition.d.ts +0 -0
  221. /package/{src → dist}/view/emptyelement.d.ts +0 -0
  222. /package/{src → dist}/view/filler.d.ts +0 -0
  223. /package/{src → dist}/view/item.d.ts +0 -0
  224. /package/{src → dist}/view/node.d.ts +0 -0
  225. /package/{src → dist}/view/observer/arrowkeysobserver.d.ts +0 -0
  226. /package/{src → dist}/view/observer/bubblingemittermixin.d.ts +0 -0
  227. /package/{src → dist}/view/observer/bubblingeventinfo.d.ts +0 -0
  228. /package/{src → dist}/view/observer/clickobserver.d.ts +0 -0
  229. /package/{src → dist}/view/observer/compositionobserver.d.ts +0 -0
  230. /package/{src → dist}/view/observer/domeventdata.d.ts +0 -0
  231. /package/{src → dist}/view/observer/domeventobserver.d.ts +0 -0
  232. /package/{src → dist}/view/observer/fakeselectionobserver.d.ts +0 -0
  233. /package/{src → dist}/view/observer/focusobserver.d.ts +0 -0
  234. /package/{src → dist}/view/observer/inputobserver.d.ts +0 -0
  235. /package/{src → dist}/view/observer/keyobserver.d.ts +0 -0
  236. /package/{src → dist}/view/observer/mouseobserver.d.ts +0 -0
  237. /package/{src → dist}/view/observer/mutationobserver.d.ts +0 -0
  238. /package/{src → dist}/view/observer/observer.d.ts +0 -0
  239. /package/{src → dist}/view/observer/pointerobserver.d.ts +0 -0
  240. /package/{src → dist}/view/observer/selectionobserver.d.ts +0 -0
  241. /package/{src → dist}/view/observer/tabobserver.d.ts +0 -0
  242. /package/{src → dist}/view/observer/touchobserver.d.ts +0 -0
  243. /package/{src → dist}/view/placeholder.d.ts +0 -0
  244. /package/{src → dist}/view/position.d.ts +0 -0
  245. /package/{src → dist}/view/range.d.ts +0 -0
  246. /package/{src → dist}/view/rawelement.d.ts +0 -0
  247. /package/{src → dist}/view/renderer.d.ts +0 -0
  248. /package/{src → dist}/view/rooteditableelement.d.ts +0 -0
  249. /package/{src → dist}/view/selection.d.ts +0 -0
  250. /package/{src → dist}/view/stylesmap.d.ts +0 -0
  251. /package/{src → dist}/view/text.d.ts +0 -0
  252. /package/{src → dist}/view/textproxy.d.ts +0 -0
  253. /package/{src → dist}/view/tokenlist.d.ts +0 -0
  254. /package/{src → dist}/view/treewalker.d.ts +0 -0
  255. /package/{src → dist}/view/typecheckable.d.ts +0 -0
  256. /package/{src → dist}/view/uielement.d.ts +0 -0
  257. /package/{src → dist}/view/upcastwriter.d.ts +0 -0
  258. /package/{src → dist}/view/view.d.ts +0 -0
@@ -1,606 +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
- /**
6
- * @module engine/conversion/conversion
7
- */
8
- import { CKEditorError, toArray } from '@ckeditor/ckeditor5-utils';
9
- import { UpcastHelpers } from './upcasthelpers.js';
10
- import { DowncastHelpers } from './downcasthelpers.js';
11
- /**
12
- * A utility class that helps add converters to upcast and downcast dispatchers.
13
- *
14
- * We recommend reading the {@glink framework/deep-dive/conversion/intro editor conversion} guide first to
15
- * understand the core concepts of the conversion mechanisms.
16
- *
17
- * An instance of the conversion manager is available in the
18
- * {@link module:core/editor/editor~Editor#conversion `editor.conversion`} property
19
- * and by default has the following groups of dispatchers (i.e. directions of conversion):
20
- *
21
- * * `downcast` (editing and data downcasts)
22
- * * `editingDowncast`
23
- * * `dataDowncast`
24
- * * `upcast`
25
- *
26
- * # One-way converters
27
- *
28
- * To add a converter to a specific group, use the {@link module:engine/conversion/conversion~Conversion#for `for()`}
29
- * method:
30
- *
31
- * ```ts
32
- * // Add a converter to editing downcast and data downcast.
33
- * editor.conversion.for( 'downcast' ).elementToElement( config ) );
34
- *
35
- * // Add a converter to the data pipepline only:
36
- * editor.conversion.for( 'dataDowncast' ).elementToElement( dataConversionConfig ) );
37
- *
38
- * // And a slightly different one for the editing pipeline:
39
- * editor.conversion.for( 'editingDowncast' ).elementToElement( editingConversionConfig ) );
40
- * ```
41
- *
42
- * See {@link module:engine/conversion/conversion~Conversion#for `for()`} method documentation to learn more about
43
- * available conversion helpers and how to use your custom ones.
44
- *
45
- * # Two-way converters
46
- *
47
- * Besides using one-way converters via the `for()` method, you can also use other methods available in this
48
- * class to add two-way converters (upcast and downcast):
49
- *
50
- * * {@link module:engine/conversion/conversion~Conversion#elementToElement `elementToElement()`} –
51
- * Model element to view element and vice versa.
52
- * * {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement()`} –
53
- * Model attribute to view element and vice versa.
54
- * * {@link module:engine/conversion/conversion~Conversion#attributeToAttribute `attributeToAttribute()`} –
55
- * Model attribute to view attribute and vice versa.
56
- */
57
- export class Conversion {
58
- /**
59
- * Maps dispatchers group name to ConversionHelpers instances.
60
- */
61
- _helpers = new Map();
62
- _downcast;
63
- _upcast;
64
- /**
65
- * Creates a new conversion instance.
66
- */
67
- constructor(downcastDispatchers, upcastDispatchers) {
68
- // Define default 'downcast' & 'upcast' dispatchers groups. Those groups are always available as two-way converters needs them.
69
- this._downcast = toArray(downcastDispatchers);
70
- this._createConversionHelpers({ name: 'downcast', dispatchers: this._downcast, isDowncast: true });
71
- this._upcast = toArray(upcastDispatchers);
72
- this._createConversionHelpers({ name: 'upcast', dispatchers: this._upcast, isDowncast: false });
73
- }
74
- /**
75
- * Define an alias for registered dispatcher.
76
- *
77
- * ```ts
78
- * const conversion = new Conversion(
79
- * [ dataDowncastDispatcher, editingDowncastDispatcher ],
80
- * upcastDispatcher
81
- * );
82
- *
83
- * conversion.addAlias( 'dataDowncast', dataDowncastDispatcher );
84
- * ```
85
- *
86
- * @param alias An alias of a dispatcher.
87
- * @param dispatcher Dispatcher which should have an alias.
88
- */
89
- addAlias(alias, dispatcher) {
90
- const isDowncast = this._downcast.includes(dispatcher);
91
- const isUpcast = this._upcast.includes(dispatcher);
92
- if (!isUpcast && !isDowncast) {
93
- /**
94
- * Trying to register an alias for a dispatcher that nas not been registered.
95
- *
96
- * @error conversion-add-alias-dispatcher-not-registered
97
- */
98
- throw new CKEditorError('conversion-add-alias-dispatcher-not-registered', this);
99
- }
100
- this._createConversionHelpers({ name: alias, dispatchers: [dispatcher], isDowncast });
101
- }
102
- /**
103
- * Provides a chainable API to assign converters to a conversion dispatchers group.
104
- *
105
- * If the given group name has not been registered, the
106
- * {@link module:utils/ckeditorerror~CKEditorError `conversion-for-unknown-group` error} is thrown.
107
- *
108
- * You can use conversion helpers available directly in the `for()` chain or your custom ones via
109
- * the {@link module:engine/conversion/conversionhelpers~ConversionHelpers#add `add()`} method.
110
- *
111
- * # Using built-in conversion helpers
112
- *
113
- * The `for()` chain comes with a set of conversion helpers which you can use like this:
114
- *
115
- * ```ts
116
- * editor.conversion.for( 'downcast' )
117
- * .elementToElement( config1 ) // Adds an element-to-element downcast converter.
118
- * .attributeToElement( config2 ); // Adds an attribute-to-element downcast converter.
119
- *
120
- * editor.conversion.for( 'upcast' )
121
- * .elementToAttribute( config3 ); // Adds an element-to-attribute upcast converter.
122
- * ```
123
- *
124
- * Refer to the documentation of built-in conversion helpers to learn about their configuration options.
125
- *
126
- * * downcast (model-to-view) conversion helpers:
127
- *
128
- * * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`},
129
- * * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement `attributeToElement()`},
130
- * * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToAttribute `attributeToAttribute()`}.
131
- * * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToElement `markerToElement()`}.
132
- * * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToHighlight `markerToHighlight()`}.
133
- *
134
- * * upcast (view-to-model) conversion helpers:
135
- *
136
- * * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToElement `elementToElement()`},
137
- * * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute `elementToAttribute()`},
138
- * * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute `attributeToAttribute()`}.
139
- * * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToMarker `elementToMarker()`}.
140
- *
141
- * # Using custom conversion helpers
142
- *
143
- * If you need to implement an atypical converter, you can do so by calling:
144
- *
145
- * ```ts
146
- * editor.conversion.for( direction ).add( customHelper );
147
- * ```
148
- *
149
- * The `.add()` method takes exactly one parameter, which is a function. This function should accept one parameter that
150
- * is a dispatcher instance. The function should add an actual converter to the passed dispatcher instance.
151
- *
152
- * Example:
153
- *
154
- * ```ts
155
- * editor.conversion.for( 'upcast' ).add( dispatcher => {
156
- * dispatcher.on( 'element:a', ( evt, data, conversionApi ) => {
157
- * // Do something with a view <a> element.
158
- * } );
159
- * } );
160
- * ```
161
- *
162
- * Refer to the documentation of {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}
163
- * and {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} to learn how to write
164
- * custom converters.
165
- *
166
- * @param groupName The name of dispatchers group to add the converters to.
167
- */
168
- for(groupName) {
169
- if (!this._helpers.has(groupName)) {
170
- /**
171
- * Trying to add a converter to an unknown dispatchers group.
172
- *
173
- * @error conversion-for-unknown-group
174
- */
175
- throw new CKEditorError('conversion-for-unknown-group', this);
176
- }
177
- return this._helpers.get(groupName);
178
- }
179
- /**
180
- * Sets up converters between the model and the view that convert a model element to a view element (and vice versa).
181
- * For example, the model `<paragraph>Foo</paragraph>` is turned into `<p>Foo</p>` in the view.
182
- *
183
- * ```ts
184
- * // A simple conversion from the `paragraph` model element to the `<p>` view element (and vice versa).
185
- * editor.conversion.elementToElement( { model: 'paragraph', view: 'p' } );
186
- *
187
- * // Override other converters by specifying a converter definition with a higher priority.
188
- * editor.conversion.elementToElement( { model: 'paragraph', view: 'div', converterPriority: 'high' } );
189
- *
190
- * // View specified as an object instead of a string.
191
- * editor.conversion.elementToElement( {
192
- * model: 'fancyParagraph',
193
- * view: {
194
- * name: 'p',
195
- * classes: 'fancy'
196
- * }
197
- * } );
198
- *
199
- * // Use `upcastAlso` to define other view elements that should also be converted to a `paragraph` element.
200
- * editor.conversion.elementToElement( {
201
- * model: 'paragraph',
202
- * view: 'p',
203
- * upcastAlso: [
204
- * 'div',
205
- * {
206
- * // Any element with the `display: block` style.
207
- * styles: {
208
- * display: 'block'
209
- * }
210
- * }
211
- * ]
212
- * } );
213
- *
214
- * // `upcastAlso` set as callback enables a conversion of a wide range of different view elements.
215
- * editor.conversion.elementToElement( {
216
- * model: 'heading',
217
- * view: 'h2',
218
- * // Convert "heading-like" paragraphs to headings.
219
- * upcastAlso: viewElement => {
220
- * const fontSize = viewElement.getStyle( 'font-size' );
221
- *
222
- * if ( !fontSize ) {
223
- * return null;
224
- * }
225
- *
226
- * const match = fontSize.match( /(\d+)\s*px/ );
227
- *
228
- * if ( !match ) {
229
- * return null;
230
- * }
231
- *
232
- * const size = Number( match[ 1 ] );
233
- *
234
- * if ( size > 26 ) {
235
- * // Returned value can be an object with the matched properties.
236
- * // These properties will be "consumed" during the conversion.
237
- * // See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.
238
- *
239
- * return { name: true, styles: [ 'font-size' ] };
240
- * }
241
- *
242
- * return null;
243
- * }
244
- * } );
245
- * ```
246
- *
247
- * `definition.model` is a `String` with a model element name to convert from or to.
248
- *
249
- * @param definition The converter definition.
250
- */
251
- elementToElement(definition) {
252
- // Set up downcast converter.
253
- this.for('downcast').elementToElement(definition);
254
- // Set up upcast converter.
255
- for (const { model, view } of _getAllUpcastDefinitions(definition)) {
256
- this.for('upcast')
257
- .elementToElement({
258
- model,
259
- view,
260
- converterPriority: definition.converterPriority
261
- });
262
- }
263
- }
264
- /**
265
- * Sets up converters between the model and the view that convert a model attribute to a view element (and vice versa).
266
- * For example, a model text node with `"Foo"` as data and the `bold` attribute will be turned to `<strong>Foo</strong>` in the view.
267
- *
268
- * ```ts
269
- * // A simple conversion from the `bold=true` attribute to the `<strong>` view element (and vice versa).
270
- * editor.conversion.attributeToElement( { model: 'bold', view: 'strong' } );
271
- *
272
- * // Override other converters by specifying a converter definition with a higher priority.
273
- * editor.conversion.attributeToElement( { model: 'bold', view: 'b', converterPriority: 'high' } );
274
- *
275
- * // View specified as an object instead of a string.
276
- * editor.conversion.attributeToElement( {
277
- * model: 'bold',
278
- * view: {
279
- * name: 'span',
280
- * classes: 'bold'
281
- * }
282
- * } );
283
- *
284
- * // Use `config.model.name` to define the conversion only from a given node type, `$text` in this case.
285
- * // The same attribute on different elements may then be handled by a different converter.
286
- * editor.conversion.attributeToElement( {
287
- * model: {
288
- * key: 'textDecoration',
289
- * values: [ 'underline', 'lineThrough' ],
290
- * name: '$text'
291
- * },
292
- * view: {
293
- * underline: {
294
- * name: 'span',
295
- * styles: {
296
- * 'text-decoration': 'underline'
297
- * }
298
- * },
299
- * lineThrough: {
300
- * name: 'span',
301
- * styles: {
302
- * 'text-decoration': 'line-through'
303
- * }
304
- * }
305
- * }
306
- * } );
307
- *
308
- * // Use `upcastAlso` to define other view elements that should also be converted to the `bold` attribute.
309
- * editor.conversion.attributeToElement( {
310
- * model: 'bold',
311
- * view: 'strong',
312
- * upcastAlso: [
313
- * 'b',
314
- * {
315
- * name: 'span',
316
- * classes: 'bold'
317
- * },
318
- * {
319
- * name: 'span',
320
- * styles: {
321
- * 'font-weight': 'bold'
322
- * }
323
- * },
324
- * viewElement => {
325
- * const fontWeight = viewElement.getStyle( 'font-weight' );
326
- *
327
- * if ( viewElement.is( 'element', 'span' ) && fontWeight && /\d+/.test() && Number( fontWeight ) > 500 ) {
328
- * // Returned value can be an object with the matched properties.
329
- * // These properties will be "consumed" during the conversion.
330
- * // See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.
331
- *
332
- * return {
333
- * name: true,
334
- * styles: [ 'font-weight' ]
335
- * };
336
- * }
337
- * }
338
- * ]
339
- * } );
340
- *
341
- * // Conversion from and to a model attribute key whose value is an enum (`fontSize=big|small`).
342
- * // `upcastAlso` set as callback enables a conversion of a wide range of different view elements.
343
- * editor.conversion.attributeToElement( {
344
- * model: {
345
- * key: 'fontSize',
346
- * values: [ 'big', 'small' ]
347
- * },
348
- * view: {
349
- * big: {
350
- * name: 'span',
351
- * styles: {
352
- * 'font-size': '1.2em'
353
- * }
354
- * },
355
- * small: {
356
- * name: 'span',
357
- * styles: {
358
- * 'font-size': '0.8em'
359
- * }
360
- * }
361
- * },
362
- * upcastAlso: {
363
- * big: viewElement => {
364
- * const fontSize = viewElement.getStyle( 'font-size' );
365
- *
366
- * if ( !fontSize ) {
367
- * return null;
368
- * }
369
- *
370
- * const match = fontSize.match( /(\d+)\s*px/ );
371
- *
372
- * if ( !match ) {
373
- * return null;
374
- * }
375
- *
376
- * const size = Number( match[ 1 ] );
377
- *
378
- * if ( viewElement.is( 'element', 'span' ) && size > 10 ) {
379
- * // Returned value can be an object with the matched properties.
380
- * // These properties will be "consumed" during the conversion.
381
- * // See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.
382
- *
383
- * return { name: true, styles: [ 'font-size' ] };
384
- * }
385
- *
386
- * return null;
387
- * },
388
- * small: viewElement => {
389
- * const fontSize = viewElement.getStyle( 'font-size' );
390
- *
391
- * if ( !fontSize ) {
392
- * return null;
393
- * }
394
- *
395
- * const match = fontSize.match( /(\d+)\s*px/ );
396
- *
397
- * if ( !match ) {
398
- * return null;
399
- * }
400
- *
401
- * const size = Number( match[ 1 ] );
402
- *
403
- * if ( viewElement.is( 'element', 'span' ) && size < 10 ) {
404
- * // Returned value can be an object with the matched properties.
405
- * // These properties will be "consumed" during the conversion.
406
- * // See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.
407
- *
408
- * return { name: true, styles: [ 'font-size' ] };
409
- * }
410
- *
411
- * return null;
412
- * }
413
- * }
414
- * } );
415
- * ```
416
- *
417
- * The `definition.model` parameter specifies which model attribute should be converted from or to. It can be a `{ key, value }` object
418
- * describing the attribute key and value to convert or a `String` specifying just the attribute key (in such a case
419
- * `value` is set to `true`).
420
- *
421
- * @param definition The converter definition.
422
- */
423
- attributeToElement(definition) {
424
- // Set up downcast converter.
425
- this.for('downcast').attributeToElement(definition);
426
- // Set up upcast converter.
427
- for (const { model, view } of _getAllUpcastDefinitions(definition)) {
428
- this.for('upcast')
429
- .elementToAttribute({
430
- view,
431
- model,
432
- converterPriority: definition.converterPriority
433
- });
434
- }
435
- }
436
- /**
437
- * Sets up converters between the model and the view that convert a model attribute to a view attribute (and vice versa). For example,
438
- * `<imageBlock src='foo.jpg'></imageBlock>` is converted to `<img src='foo.jpg'></img>` (the same attribute key and value).
439
- * This type of converters is intended to be used with {@link module:engine/model/element~ModelElement model element} nodes.
440
- * To convert the text attributes,
441
- * the {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement converter`}should be set up.
442
- *
443
- * ```ts
444
- * // A simple conversion from the `source` model attribute to the `src` view attribute (and vice versa).
445
- * editor.conversion.attributeToAttribute( { model: 'source', view: 'src' } );
446
- *
447
- * // Attribute values are strictly specified.
448
- * editor.conversion.attributeToAttribute( {
449
- * model: {
450
- * name: 'imageInline',
451
- * key: 'aside',
452
- * values: [ 'aside' ]
453
- * },
454
- * view: {
455
- * aside: {
456
- * name: 'img',
457
- * key: 'class',
458
- * value: [ 'aside', 'half-size' ]
459
- * }
460
- * }
461
- * } );
462
- *
463
- * // Set the style attribute.
464
- * editor.conversion.attributeToAttribute( {
465
- * model: {
466
- * name: 'imageInline',
467
- * key: 'aside',
468
- * values: [ 'aside' ]
469
- * },
470
- * view: {
471
- * aside: {
472
- * name: 'img',
473
- * key: 'style',
474
- * value: {
475
- * float: 'right',
476
- * width: '50%',
477
- * margin: '5px'
478
- * }
479
- * }
480
- * }
481
- * } );
482
- *
483
- * // Conversion from and to a model attribute key whose value is an enum (`align=right|center`).
484
- * // Use `upcastAlso` to define other view elements that should also be converted to the `align=right` attribute.
485
- * editor.conversion.attributeToAttribute( {
486
- * model: {
487
- * key: 'align',
488
- * values: [ 'right', 'center' ]
489
- * },
490
- * view: {
491
- * right: {
492
- * key: 'class',
493
- * value: 'align-right'
494
- * },
495
- * center: {
496
- * key: 'class',
497
- * value: 'align-center'
498
- * }
499
- * },
500
- * upcastAlso: {
501
- * right: {
502
- * styles: {
503
- * 'text-align': 'right'
504
- * }
505
- * },
506
- * center: {
507
- * styles: {
508
- * 'text-align': 'center'
509
- * }
510
- * }
511
- * }
512
- * } );
513
- * ```
514
- *
515
- * The `definition.model` parameter specifies which model attribute should be converted from and to.
516
- * It can be a `{ key, [ values ], [ name ] }` object or a `String`, which will be treated like `{ key: definition.model }`.
517
- * The `key` property is the model attribute key to convert from and to.
518
- * The `values` are the possible model attribute values. If the `values` parameter is not set, the model attribute value
519
- * will be the same as the view attribute value.
520
- * If `name` is set, the conversion will be set up only for model elements with the given name.
521
- *
522
- * The `definition.view` parameter specifies which view attribute should be converted from and to.
523
- * It can be a `{ key, value, [ name ] }` object or a `String`, which will be treated like `{ key: definition.view }`.
524
- * The `key` property is the view attribute key to convert from and to.
525
- * The `value` is the view attribute value to convert from and to. If `definition.value` is not set, the view attribute value will be
526
- * the same as the model attribute value.
527
- * If `key` is `'class'`, `value` can be a `String` or an array of `String`s.
528
- * If `key` is `'style'`, `value` is an object with key-value pairs.
529
- * In other cases, `value` is a `String`.
530
- * If `name` is set, the conversion will be set up only for model elements with the given name.
531
- * If `definition.model.values` is set, `definition.view` is an object that assigns values from `definition.model.values`
532
- * to `{ key, value, [ name ] }` objects.
533
- *
534
- * `definition.upcastAlso` specifies which other matching view elements should also be upcast to the given model configuration.
535
- * If `definition.model.values` is set, `definition.upcastAlso` should be an object assigning values from `definition.model.values`
536
- * to {@link module:engine/view/matcher~MatcherPattern}s or arrays of {@link module:engine/view/matcher~MatcherPattern}s.
537
- *
538
- * **Note:** `definition.model` and `definition.view` form should be mirrored, so the same types of parameters should
539
- * be given in both parameters.
540
- *
541
- * @param definition The converter definition.
542
- * @param definition.model The model attribute to convert from and to.
543
- * @param definition.view The view attribute to convert from and to.
544
- * @param definition.upcastAlso Any view element matching `definition.upcastAlso` will also be converted to the given model attribute.
545
- * `definition.upcastAlso` is used only if `config.model.values` is specified.
546
- */
547
- attributeToAttribute(definition) {
548
- // Set up downcast converter.
549
- this.for('downcast').attributeToAttribute(definition);
550
- // Set up upcast converter.
551
- for (const { model, view } of _getAllUpcastDefinitions(definition)) {
552
- this.for('upcast')
553
- .attributeToAttribute({
554
- view,
555
- model
556
- });
557
- }
558
- }
559
- /**
560
- * Creates and caches conversion helpers for given dispatchers group.
561
- *
562
- * @param options Group name.
563
- * @param options.name Group name.
564
- * @param options.dispatchers Dispatchers to register.
565
- * @param options.isDowncast Whether downcast group.
566
- */
567
- _createConversionHelpers({ name, dispatchers, isDowncast }) {
568
- if (this._helpers.has(name)) {
569
- /**
570
- * Trying to register a group name that has already been registered.
571
- *
572
- * @error conversion-group-exists
573
- */
574
- throw new CKEditorError('conversion-group-exists', this);
575
- }
576
- const helpers = isDowncast ?
577
- new DowncastHelpers(dispatchers) :
578
- new UpcastHelpers(dispatchers);
579
- this._helpers.set(name, helpers);
580
- }
581
- }
582
- /**
583
- * Helper function that creates a joint array out of an item passed in `definition.view` and items passed in
584
- * `definition.upcastAlso`.
585
- */
586
- function* _getAllUpcastDefinitions(definition) {
587
- if (definition.model.values) {
588
- for (const value of definition.model.values) {
589
- const model = { key: definition.model.key, value };
590
- const view = definition.view[value];
591
- const upcastAlso = definition.upcastAlso ? definition.upcastAlso[value] : undefined;
592
- yield* _getUpcastDefinition(model, view, upcastAlso);
593
- }
594
- }
595
- else {
596
- yield* _getUpcastDefinition(definition.model, definition.view, definition.upcastAlso);
597
- }
598
- }
599
- function* _getUpcastDefinition(model, view, upcastAlso) {
600
- yield { model, view };
601
- if (upcastAlso) {
602
- for (const upcastAlsoItem of toArray(upcastAlso)) {
603
- yield { model, view: upcastAlsoItem };
604
- }
605
- }
606
- }
@@ -1,33 +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
- /**
6
- * @module engine/conversion/conversionhelpers
7
- */
8
- /**
9
- * Base class for conversion helpers.
10
- */
11
- export class ConversionHelpers {
12
- _dispatchers;
13
- /**
14
- * Creates a conversion helpers instance.
15
- */
16
- constructor(dispatchers) {
17
- this._dispatchers = dispatchers;
18
- }
19
- /**
20
- * Registers a conversion helper.
21
- *
22
- * **Note**: See full usage example in the `{@link module:engine/conversion/conversion~Conversion#for conversion.for()}`
23
- * method description.
24
- *
25
- * @param conversionHelper The function to be called on event.
26
- */
27
- add(conversionHelper) {
28
- for (const dispatcher of this._dispatchers) {
29
- conversionHelper(dispatcher);
30
- }
31
- return this;
32
- }
33
- }