@ckeditor/ckeditor5-engine 36.0.1 → 37.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +1 -1
  2. package/package.json +24 -23
  3. package/src/controller/datacontroller.d.ts +331 -0
  4. package/src/controller/datacontroller.js +62 -109
  5. package/src/controller/editingcontroller.d.ts +98 -0
  6. package/src/controller/editingcontroller.js +22 -46
  7. package/src/conversion/conversion.d.ts +476 -0
  8. package/src/conversion/conversion.js +328 -347
  9. package/src/conversion/conversionhelpers.d.ts +26 -0
  10. package/src/conversion/conversionhelpers.js +1 -5
  11. package/src/conversion/downcastdispatcher.d.ts +547 -0
  12. package/src/conversion/downcastdispatcher.js +74 -152
  13. package/src/conversion/downcasthelpers.d.ts +1226 -0
  14. package/src/conversion/downcasthelpers.js +843 -762
  15. package/src/conversion/mapper.d.ts +499 -0
  16. package/src/conversion/mapper.js +84 -99
  17. package/src/conversion/modelconsumable.d.ts +201 -0
  18. package/src/conversion/modelconsumable.js +96 -99
  19. package/src/conversion/upcastdispatcher.d.ts +492 -0
  20. package/src/conversion/upcastdispatcher.js +73 -100
  21. package/src/conversion/upcasthelpers.d.ts +499 -0
  22. package/src/conversion/upcasthelpers.js +406 -373
  23. package/src/conversion/viewconsumable.d.ts +177 -0
  24. package/src/conversion/viewconsumable.js +157 -162
  25. package/src/dataprocessor/basichtmlwriter.d.ts +18 -0
  26. package/src/dataprocessor/basichtmlwriter.js +0 -9
  27. package/src/dataprocessor/dataprocessor.d.ts +61 -0
  28. package/src/dataprocessor/htmldataprocessor.d.ts +76 -0
  29. package/src/dataprocessor/htmldataprocessor.js +6 -28
  30. package/src/dataprocessor/htmlwriter.d.ts +16 -0
  31. package/src/dataprocessor/xmldataprocessor.d.ts +90 -0
  32. package/src/dataprocessor/xmldataprocessor.js +8 -40
  33. package/src/dev-utils/model.d.ts +124 -0
  34. package/src/dev-utils/model.js +41 -38
  35. package/src/dev-utils/operationreplayer.d.ts +51 -0
  36. package/src/dev-utils/operationreplayer.js +6 -14
  37. package/src/dev-utils/utils.d.ts +37 -0
  38. package/src/dev-utils/utils.js +5 -18
  39. package/src/dev-utils/view.d.ts +319 -0
  40. package/src/dev-utils/view.js +205 -226
  41. package/src/index.d.ts +105 -0
  42. package/src/index.js +1 -0
  43. package/src/model/batch.d.ts +106 -0
  44. package/src/model/differ.d.ts +329 -0
  45. package/src/model/document.d.ts +245 -0
  46. package/src/model/document.js +1 -1
  47. package/src/model/documentfragment.d.ts +196 -0
  48. package/src/model/documentfragment.js +2 -2
  49. package/src/model/documentselection.d.ts +420 -0
  50. package/src/model/element.d.ts +165 -0
  51. package/src/model/history.d.ts +114 -0
  52. package/src/model/item.d.ts +14 -0
  53. package/src/model/liveposition.d.ts +77 -0
  54. package/src/model/liverange.d.ts +102 -0
  55. package/src/model/markercollection.d.ts +335 -0
  56. package/src/model/model.d.ts +812 -0
  57. package/src/model/model.js +59 -30
  58. package/src/model/node.d.ts +256 -0
  59. package/src/model/nodelist.d.ts +91 -0
  60. package/src/model/operation/attributeoperation.d.ts +98 -0
  61. package/src/model/operation/detachoperation.d.ts +55 -0
  62. package/src/model/operation/insertoperation.d.ts +85 -0
  63. package/src/model/operation/markeroperation.d.ts +86 -0
  64. package/src/model/operation/mergeoperation.d.ts +95 -0
  65. package/src/model/operation/moveoperation.d.ts +91 -0
  66. package/src/model/operation/nooperation.d.ts +33 -0
  67. package/src/model/operation/operation.d.ts +89 -0
  68. package/src/model/operation/operationfactory.d.ts +18 -0
  69. package/src/model/operation/renameoperation.d.ts +78 -0
  70. package/src/model/operation/rootattributeoperation.d.ts +97 -0
  71. package/src/model/operation/rootattributeoperation.js +1 -1
  72. package/src/model/operation/splitoperation.d.ts +104 -0
  73. package/src/model/operation/transform.d.ts +100 -0
  74. package/src/model/operation/utils.d.ts +71 -0
  75. package/src/model/position.d.ts +539 -0
  76. package/src/model/position.js +1 -1
  77. package/src/model/range.d.ts +458 -0
  78. package/src/model/range.js +1 -1
  79. package/src/model/rootelement.d.ts +40 -0
  80. package/src/model/schema.d.ts +1176 -0
  81. package/src/model/schema.js +15 -15
  82. package/src/model/selection.d.ts +472 -0
  83. package/src/model/text.d.ts +66 -0
  84. package/src/model/text.js +0 -2
  85. package/src/model/textproxy.d.ts +144 -0
  86. package/src/model/treewalker.d.ts +186 -0
  87. package/src/model/treewalker.js +19 -10
  88. package/src/model/typecheckable.d.ts +255 -0
  89. package/src/model/utils/autoparagraphing.d.ts +37 -0
  90. package/src/model/utils/deletecontent.d.ts +58 -0
  91. package/src/model/utils/findoptimalinsertionrange.d.ts +32 -0
  92. package/src/model/utils/getselectedcontent.d.ts +30 -0
  93. package/src/model/utils/insertcontent.d.ts +46 -0
  94. package/src/model/utils/insertcontent.js +2 -12
  95. package/src/model/utils/insertobject.d.ts +44 -0
  96. package/src/model/utils/insertobject.js +3 -14
  97. package/src/model/utils/modifyselection.d.ts +48 -0
  98. package/src/model/utils/selection-post-fixer.d.ts +65 -0
  99. package/src/model/writer.d.ts +726 -0
  100. package/src/model/writer.js +6 -4
  101. package/src/view/attributeelement.d.ts +108 -0
  102. package/src/view/attributeelement.js +25 -69
  103. package/src/view/containerelement.d.ts +49 -0
  104. package/src/view/containerelement.js +10 -43
  105. package/src/view/datatransfer.d.ts +75 -0
  106. package/src/view/document.d.ts +184 -0
  107. package/src/view/document.js +15 -84
  108. package/src/view/documentfragment.d.ts +150 -0
  109. package/src/view/documentfragment.js +40 -81
  110. package/src/view/documentselection.d.ts +219 -0
  111. package/src/view/documentselection.js +75 -121
  112. package/src/view/domconverter.d.ts +620 -0
  113. package/src/view/domconverter.js +159 -276
  114. package/src/view/downcastwriter.d.ts +804 -0
  115. package/src/view/downcastwriter.js +336 -380
  116. package/src/view/editableelement.d.ts +52 -0
  117. package/src/view/editableelement.js +9 -49
  118. package/src/view/element.d.ts +466 -0
  119. package/src/view/element.js +150 -222
  120. package/src/view/elementdefinition.d.ts +87 -0
  121. package/src/view/emptyelement.d.ts +41 -0
  122. package/src/view/emptyelement.js +11 -44
  123. package/src/view/filler.d.ts +111 -0
  124. package/src/view/filler.js +24 -21
  125. package/src/view/item.d.ts +14 -0
  126. package/src/view/matcher.d.ts +486 -0
  127. package/src/view/matcher.js +247 -218
  128. package/src/view/node.d.ts +160 -0
  129. package/src/view/node.js +26 -100
  130. package/src/view/observer/arrowkeysobserver.d.ts +41 -0
  131. package/src/view/observer/arrowkeysobserver.js +0 -13
  132. package/src/view/observer/bubblingemittermixin.d.ts +166 -0
  133. package/src/view/observer/bubblingemittermixin.js +36 -25
  134. package/src/view/observer/bubblingeventinfo.d.ts +47 -0
  135. package/src/view/observer/bubblingeventinfo.js +3 -29
  136. package/src/view/observer/clickobserver.d.ts +43 -0
  137. package/src/view/observer/clickobserver.js +9 -19
  138. package/src/view/observer/compositionobserver.d.ts +82 -0
  139. package/src/view/observer/compositionobserver.js +13 -42
  140. package/src/view/observer/domeventdata.d.ts +50 -0
  141. package/src/view/observer/domeventdata.js +5 -30
  142. package/src/view/observer/domeventobserver.d.ts +69 -0
  143. package/src/view/observer/domeventobserver.js +19 -21
  144. package/src/view/observer/fakeselectionobserver.d.ts +46 -0
  145. package/src/view/observer/fakeselectionobserver.js +2 -15
  146. package/src/view/observer/focusobserver.d.ts +82 -0
  147. package/src/view/observer/focusobserver.js +14 -40
  148. package/src/view/observer/inputobserver.d.ts +86 -0
  149. package/src/view/observer/inputobserver.js +18 -64
  150. package/src/view/observer/keyobserver.d.ts +67 -0
  151. package/src/view/observer/keyobserver.js +8 -42
  152. package/src/view/observer/mouseobserver.d.ts +89 -0
  153. package/src/view/observer/mouseobserver.js +8 -28
  154. package/src/view/observer/mutationobserver.d.ts +82 -0
  155. package/src/view/observer/mutationobserver.js +7 -37
  156. package/src/view/observer/observer.d.ts +84 -0
  157. package/src/view/observer/observer.js +12 -25
  158. package/src/view/observer/selectionobserver.d.ts +143 -0
  159. package/src/view/observer/selectionobserver.js +9 -99
  160. package/src/view/observer/tabobserver.d.ts +42 -0
  161. package/src/view/observer/tabobserver.js +0 -14
  162. package/src/view/placeholder.d.ts +85 -0
  163. package/src/view/placeholder.js +26 -43
  164. package/src/view/position.d.ts +189 -0
  165. package/src/view/position.js +36 -83
  166. package/src/view/range.d.ts +279 -0
  167. package/src/view/range.js +79 -122
  168. package/src/view/rawelement.d.ts +73 -0
  169. package/src/view/rawelement.js +34 -48
  170. package/src/view/renderer.d.ts +265 -0
  171. package/src/view/renderer.js +105 -193
  172. package/src/view/rooteditableelement.d.ts +41 -0
  173. package/src/view/rooteditableelement.js +12 -40
  174. package/src/view/selection.d.ts +375 -0
  175. package/src/view/selection.js +79 -153
  176. package/src/view/styles/background.d.ts +33 -0
  177. package/src/view/styles/background.js +14 -12
  178. package/src/view/styles/border.d.ts +43 -0
  179. package/src/view/styles/border.js +58 -48
  180. package/src/view/styles/margin.d.ts +29 -0
  181. package/src/view/styles/margin.js +13 -11
  182. package/src/view/styles/padding.d.ts +29 -0
  183. package/src/view/styles/padding.js +13 -11
  184. package/src/view/styles/utils.d.ts +93 -0
  185. package/src/view/styles/utils.js +22 -48
  186. package/src/view/stylesmap.d.ts +675 -0
  187. package/src/view/stylesmap.js +249 -244
  188. package/src/view/text.d.ts +74 -0
  189. package/src/view/text.js +16 -46
  190. package/src/view/textproxy.d.ts +97 -0
  191. package/src/view/textproxy.js +10 -59
  192. package/src/view/treewalker.d.ts +195 -0
  193. package/src/view/treewalker.js +43 -106
  194. package/src/view/typecheckable.d.ts +401 -0
  195. package/src/view/uielement.d.ts +96 -0
  196. package/src/view/uielement.js +28 -62
  197. package/src/view/upcastwriter.d.ts +328 -0
  198. package/src/view/upcastwriter.js +124 -134
  199. package/src/view/view.d.ts +327 -0
  200. package/src/view/view.js +79 -150
@@ -17,60 +17,59 @@ import { isArray } from 'lodash-es';
17
17
  * To consume items use {@link module:engine/conversion/viewconsumable~ViewConsumable#consume consume method}.
18
18
  * To revert already consumed items use {@link module:engine/conversion/viewconsumable~ViewConsumable#revert revert method}.
19
19
  *
20
- * viewConsumable.add( element, { name: true } ); // Adds element's name as ready to be consumed.
21
- * viewConsumable.add( textNode ); // Adds text node for consumption.
22
- * viewConsumable.add( docFragment ); // Adds document fragment for consumption.
23
- * viewConsumable.test( element, { name: true } ); // Tests if element's name can be consumed.
24
- * viewConsumable.test( textNode ); // Tests if text node can be consumed.
25
- * viewConsumable.test( docFragment ); // Tests if document fragment can be consumed.
26
- * viewConsumable.consume( element, { name: true } ); // Consume element's name.
27
- * viewConsumable.consume( textNode ); // Consume text node.
28
- * viewConsumable.consume( docFragment ); // Consume document fragment.
29
- * viewConsumable.revert( element, { name: true } ); // Revert already consumed element's name.
30
- * viewConsumable.revert( textNode ); // Revert already consumed text node.
31
- * viewConsumable.revert( docFragment ); // Revert already consumed document fragment.
20
+ * ```ts
21
+ * viewConsumable.add( element, { name: true } ); // Adds element's name as ready to be consumed.
22
+ * viewConsumable.add( textNode ); // Adds text node for consumption.
23
+ * viewConsumable.add( docFragment ); // Adds document fragment for consumption.
24
+ * viewConsumable.test( element, { name: true } ); // Tests if element's name can be consumed.
25
+ * viewConsumable.test( textNode ); // Tests if text node can be consumed.
26
+ * viewConsumable.test( docFragment ); // Tests if document fragment can be consumed.
27
+ * viewConsumable.consume( element, { name: true } ); // Consume element's name.
28
+ * viewConsumable.consume( textNode ); // Consume text node.
29
+ * viewConsumable.consume( docFragment ); // Consume document fragment.
30
+ * viewConsumable.revert( element, { name: true } ); // Revert already consumed element's name.
31
+ * viewConsumable.revert( textNode ); // Revert already consumed text node.
32
+ * viewConsumable.revert( docFragment ); // Revert already consumed document fragment.
33
+ * ```
32
34
  */
33
35
  export default class ViewConsumable {
34
- /**
35
- * Creates new ViewConsumable.
36
- */
37
36
  constructor() {
38
37
  /**
39
38
  * Map of consumable elements. If {@link module:engine/view/element~Element element} is used as a key,
40
39
  * {@link module:engine/conversion/viewconsumable~ViewElementConsumables ViewElementConsumables} instance is stored as value.
41
40
  * For {@link module:engine/view/text~Text text nodes} and
42
41
  * {@link module:engine/view/documentfragment~DocumentFragment document fragments} boolean value is stored as value.
43
- *
44
- * @protected
45
- * @member {Map.<module:engine/conversion/viewconsumable~ViewElementConsumables|Boolean>}
46
- */
42
+ */
47
43
  this._consumables = new Map();
48
44
  }
49
45
  /**
50
46
  * Adds {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or
51
47
  * {@link module:engine/view/documentfragment~DocumentFragment document fragment} as ready to be consumed.
52
48
  *
53
- * viewConsumable.add( p, { name: true } ); // Adds element's name to consume.
54
- * viewConsumable.add( p, { attributes: 'name' } ); // Adds element's attribute.
55
- * viewConsumable.add( p, { classes: 'foobar' } ); // Adds element's class.
56
- * viewConsumable.add( p, { styles: 'color' } ); // Adds element's style
57
- * viewConsumable.add( p, { attributes: 'name', styles: 'color' } ); // Adds attribute and style.
58
- * viewConsumable.add( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be provided.
59
- * viewConsumable.add( textNode ); // Adds text node to consume.
60
- * viewConsumable.add( docFragment ); // Adds document fragment to consume.
49
+ * ```ts
50
+ * viewConsumable.add( p, { name: true } ); // Adds element's name to consume.
51
+ * viewConsumable.add( p, { attributes: 'name' } ); // Adds element's attribute.
52
+ * viewConsumable.add( p, { classes: 'foobar' } ); // Adds element's class.
53
+ * viewConsumable.add( p, { styles: 'color' } ); // Adds element's style
54
+ * viewConsumable.add( p, { attributes: 'name', styles: 'color' } ); // Adds attribute and style.
55
+ * viewConsumable.add( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be provided.
56
+ * viewConsumable.add( textNode ); // Adds text node to consume.
57
+ * viewConsumable.add( docFragment ); // Adds document fragment to consume.
58
+ * ```
61
59
  *
62
60
  * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`
63
61
  * attribute is provided - it should be handled separately by providing actual style/class.
64
62
  *
65
- * viewConsumable.add( p, { attributes: 'style' } ); // This call will throw an exception.
66
- * viewConsumable.add( p, { styles: 'color' } ); // This is properly handled style.
63
+ * ```ts
64
+ * viewConsumable.add( p, { attributes: 'style' } ); // This call will throw an exception.
65
+ * viewConsumable.add( p, { styles: 'color' } ); // This is properly handled style.
66
+ * ```
67
67
  *
68
- * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element
69
- * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
70
- * @param {Boolean} consumables.name If set to true element's name will be included.
71
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.
72
- * @param {String|Array.<String>} consumables.classes Class name or array of class names.
73
- * @param {String|Array.<String>} consumables.styles Style name or array of style names.
68
+ * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
69
+ * @param consumables.name If set to true element's name will be included.
70
+ * @param consumables.attributes Attribute name or array of attribute names.
71
+ * @param consumables.classes Class name or array of class names.
72
+ * @param consumables.styles Style name or array of style names.
74
73
  */
75
74
  add(element, consumables) {
76
75
  let elementConsumables;
@@ -95,27 +94,30 @@ export default class ViewConsumable {
95
94
  * It returns `true` when all items included in method's call can be consumed. Returns `false` when
96
95
  * first already consumed item is found and `null` when first non-consumable item is found.
97
96
  *
98
- * viewConsumable.test( p, { name: true } ); // Tests element's name.
99
- * viewConsumable.test( p, { attributes: 'name' } ); // Tests attribute.
100
- * viewConsumable.test( p, { classes: 'foobar' } ); // Tests class.
101
- * viewConsumable.test( p, { styles: 'color' } ); // Tests style.
102
- * viewConsumable.test( p, { attributes: 'name', styles: 'color' } ); // Tests attribute and style.
103
- * viewConsumable.test( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be tested.
104
- * viewConsumable.test( textNode ); // Tests text node.
105
- * viewConsumable.test( docFragment ); // Tests document fragment.
97
+ * ```ts
98
+ * viewConsumable.test( p, { name: true } ); // Tests element's name.
99
+ * viewConsumable.test( p, { attributes: 'name' } ); // Tests attribute.
100
+ * viewConsumable.test( p, { classes: 'foobar' } ); // Tests class.
101
+ * viewConsumable.test( p, { styles: 'color' } ); // Tests style.
102
+ * viewConsumable.test( p, { attributes: 'name', styles: 'color' } ); // Tests attribute and style.
103
+ * viewConsumable.test( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be tested.
104
+ * viewConsumable.test( textNode ); // Tests text node.
105
+ * viewConsumable.test( docFragment ); // Tests document fragment.
106
+ * ```
106
107
  *
107
108
  * Testing classes and styles as attribute will test if all added classes/styles can be consumed.
108
109
  *
109
- * viewConsumable.test( p, { attributes: 'class' } ); // Tests if all added classes can be consumed.
110
- * viewConsumable.test( p, { attributes: 'style' } ); // Tests if all added styles can be consumed.
111
- *
112
- * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element
113
- * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
114
- * @param {Boolean} consumables.name If set to true element's name will be included.
115
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.
116
- * @param {String|Array.<String>} consumables.classes Class name or array of class names.
117
- * @param {String|Array.<String>} consumables.styles Style name or array of style names.
118
- * @returns {Boolean|null} Returns `true` when all items included in method's call can be consumed. Returns `false`
110
+ * ```ts
111
+ * viewConsumable.test( p, { attributes: 'class' } ); // Tests if all added classes can be consumed.
112
+ * viewConsumable.test( p, { attributes: 'style' } ); // Tests if all added styles can be consumed.
113
+ * ```
114
+ *
115
+ * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
116
+ * @param consumables.name If set to true element's name will be included.
117
+ * @param consumables.attributes Attribute name or array of attribute names.
118
+ * @param consumables.classes Class name or array of class names.
119
+ * @param consumables.styles Style name or array of style names.
120
+ * @returns Returns `true` when all items included in method's call can be consumed. Returns `false`
119
121
  * when first already consumed item is found and `null` when first non-consumable item is found.
120
122
  */
121
123
  test(element, consumables) {
@@ -135,27 +137,30 @@ export default class ViewConsumable {
135
137
  * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.
136
138
  * It returns `true` when all items included in method's call can be consumed, otherwise returns `false`.
137
139
  *
138
- * viewConsumable.consume( p, { name: true } ); // Consumes element's name.
139
- * viewConsumable.consume( p, { attributes: 'name' } ); // Consumes element's attribute.
140
- * viewConsumable.consume( p, { classes: 'foobar' } ); // Consumes element's class.
141
- * viewConsumable.consume( p, { styles: 'color' } ); // Consumes element's style.
142
- * viewConsumable.consume( p, { attributes: 'name', styles: 'color' } ); // Consumes attribute and style.
143
- * viewConsumable.consume( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be consumed.
144
- * viewConsumable.consume( textNode ); // Consumes text node.
145
- * viewConsumable.consume( docFragment ); // Consumes document fragment.
140
+ * ```ts
141
+ * viewConsumable.consume( p, { name: true } ); // Consumes element's name.
142
+ * viewConsumable.consume( p, { attributes: 'name' } ); // Consumes element's attribute.
143
+ * viewConsumable.consume( p, { classes: 'foobar' } ); // Consumes element's class.
144
+ * viewConsumable.consume( p, { styles: 'color' } ); // Consumes element's style.
145
+ * viewConsumable.consume( p, { attributes: 'name', styles: 'color' } ); // Consumes attribute and style.
146
+ * viewConsumable.consume( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be consumed.
147
+ * viewConsumable.consume( textNode ); // Consumes text node.
148
+ * viewConsumable.consume( docFragment ); // Consumes document fragment.
149
+ * ```
146
150
  *
147
151
  * Consuming classes and styles as attribute will test if all added classes/styles can be consumed.
148
152
  *
149
- * viewConsumable.consume( p, { attributes: 'class' } ); // Consume only if all added classes can be consumed.
150
- * viewConsumable.consume( p, { attributes: 'style' } ); // Consume only if all added styles can be consumed.
151
- *
152
- * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element
153
- * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
154
- * @param {Boolean} consumables.name If set to true element's name will be included.
155
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.
156
- * @param {String|Array.<String>} consumables.classes Class name or array of class names.
157
- * @param {String|Array.<String>} consumables.styles Style name or array of style names.
158
- * @returns {Boolean} Returns `true` when all items included in method's call can be consumed,
153
+ * ```ts
154
+ * viewConsumable.consume( p, { attributes: 'class' } ); // Consume only if all added classes can be consumed.
155
+ * viewConsumable.consume( p, { attributes: 'style' } ); // Consume only if all added styles can be consumed.
156
+ * ```
157
+ *
158
+ * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
159
+ * @param consumables.name If set to true element's name will be included.
160
+ * @param consumables.attributes Attribute name or array of attribute names.
161
+ * @param consumables.classes Class name or array of class names.
162
+ * @param consumables.styles Style name or array of style names.
163
+ * @returns Returns `true` when all items included in method's call can be consumed,
159
164
  * otherwise returns `false`.
160
165
  */
161
166
  consume(element, consumables) {
@@ -178,27 +183,30 @@ export default class ViewConsumable {
178
183
  * Method does not revert items that were never previously added for consumption, even if they are included in
179
184
  * method's call.
180
185
  *
181
- * viewConsumable.revert( p, { name: true } ); // Reverts element's name.
182
- * viewConsumable.revert( p, { attributes: 'name' } ); // Reverts element's attribute.
183
- * viewConsumable.revert( p, { classes: 'foobar' } ); // Reverts element's class.
184
- * viewConsumable.revert( p, { styles: 'color' } ); // Reverts element's style.
185
- * viewConsumable.revert( p, { attributes: 'name', styles: 'color' } ); // Reverts attribute and style.
186
- * viewConsumable.revert( p, { classes: [ 'baz', 'bar' ] } ); // Multiple names can be reverted.
187
- * viewConsumable.revert( textNode ); // Reverts text node.
188
- * viewConsumable.revert( docFragment ); // Reverts document fragment.
186
+ * ```ts
187
+ * viewConsumable.revert( p, { name: true } ); // Reverts element's name.
188
+ * viewConsumable.revert( p, { attributes: 'name' } ); // Reverts element's attribute.
189
+ * viewConsumable.revert( p, { classes: 'foobar' } ); // Reverts element's class.
190
+ * viewConsumable.revert( p, { styles: 'color' } ); // Reverts element's style.
191
+ * viewConsumable.revert( p, { attributes: 'name', styles: 'color' } ); // Reverts attribute and style.
192
+ * viewConsumable.revert( p, { classes: [ 'baz', 'bar' ] } ); // Multiple names can be reverted.
193
+ * viewConsumable.revert( textNode ); // Reverts text node.
194
+ * viewConsumable.revert( docFragment ); // Reverts document fragment.
195
+ * ```
189
196
  *
190
197
  * Reverting classes and styles as attribute will revert all classes/styles that were previously added for
191
198
  * consumption.
192
199
  *
193
- * viewConsumable.revert( p, { attributes: 'class' } ); // Reverts all classes added for consumption.
194
- * viewConsumable.revert( p, { attributes: 'style' } ); // Reverts all styles added for consumption.
200
+ * ```ts
201
+ * viewConsumable.revert( p, { attributes: 'class' } ); // Reverts all classes added for consumption.
202
+ * viewConsumable.revert( p, { attributes: 'style' } ); // Reverts all styles added for consumption.
203
+ * ```
195
204
  *
196
- * @param {module:engine/view/element~Element|module:engine/view/text~Text|module:engine/view/documentfragment~DocumentFragment} element
197
- * @param {Object} [consumables] Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
198
- * @param {Boolean} consumables.name If set to true element's name will be included.
199
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names.
200
- * @param {String|Array.<String>} consumables.classes Class name or array of class names.
201
- * @param {String|Array.<String>} consumables.styles Style name or array of style names.
205
+ * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.
206
+ * @param consumables.name If set to true element's name will be included.
207
+ * @param consumables.attributes Attribute name or array of attribute names.
208
+ * @param consumables.classes Class name or array of class names.
209
+ * @param consumables.styles Style name or array of style names.
202
210
  */
203
211
  revert(element, consumables) {
204
212
  const elementConsumables = this._consumables.get(element);
@@ -216,10 +224,6 @@ export default class ViewConsumable {
216
224
  /**
217
225
  * Creates consumable object from {@link module:engine/view/element~Element view element}. Consumable object will include
218
226
  * element's name and all its attributes, classes and styles.
219
- *
220
- * @static
221
- * @param {module:engine/view/element~Element} element
222
- * @returns {Object} consumables
223
227
  */
224
228
  static consumablesFromElement(element) {
225
229
  const consumables = {
@@ -252,10 +256,8 @@ export default class ViewConsumable {
252
256
  * {@link module:engine/view/node~Node node} or {@link module:engine/view/documentfragment~DocumentFragment document fragment}.
253
257
  * Instance will contain all elements, child nodes, attributes, styles and classes added for consumption.
254
258
  *
255
- * @static
256
- * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} from View node or document fragment
257
- * from which `ViewConsumable` will be created.
258
- * @param {module:engine/conversion/viewconsumable~ViewConsumable} [instance] If provided, given `ViewConsumable` instance will be used
259
+ * @param from View node or document fragment from which `ViewConsumable` will be created.
260
+ * @param instance If provided, given `ViewConsumable` instance will be used
259
261
  * to add all consumables. It will be returned instead of a new instance.
260
262
  */
261
263
  static createFrom(from, instance) {
@@ -283,35 +285,16 @@ const CONSUMABLE_TYPES = ['attributes', 'classes', 'styles'];
283
285
  /**
284
286
  * This is a private helper-class for {@link module:engine/conversion/viewconsumable~ViewConsumable}.
285
287
  * It represents and manipulates consumable parts of a single {@link module:engine/view/element~Element}.
286
- *
287
- * @private
288
288
  */
289
289
  class ViewElementConsumables {
290
290
  /**
291
291
  * Creates ViewElementConsumables instance.
292
292
  *
293
- * @param {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment} from View node or document fragment
294
- * from which `ViewElementConsumables` is being created.
293
+ * @param from View node or document fragment from which `ViewElementConsumables` is being created.
295
294
  */
296
295
  constructor(from) {
297
- /**
298
- * @readonly
299
- * @member {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}
300
- */
301
296
  this.element = from;
302
- /**
303
- * Flag indicating if name of the element can be consumed.
304
- *
305
- * @private
306
- * @member {Boolean}
307
- */
308
297
  this._canConsumeName = null;
309
- /**
310
- * Contains maps of element's consumables: attributes, classes and styles.
311
- *
312
- * @private
313
- * @member {Object}
314
- */
315
298
  this._consumables = {
316
299
  attributes: new Map(),
317
300
  styles: new Map(),
@@ -323,21 +306,25 @@ class ViewElementConsumables {
323
306
  * Element's name itself can be marked to be consumed (when element's name is consumed its attributes, classes and
324
307
  * styles still could be consumed):
325
308
  *
326
- * consumables.add( { name: true } );
309
+ * ```ts
310
+ * consumables.add( { name: true } );
311
+ * ```
327
312
  *
328
313
  * Attributes classes and styles:
329
314
  *
330
- * consumables.add( { attributes: 'title', classes: 'foo', styles: 'color' } );
331
- * consumables.add( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
315
+ * ```ts
316
+ * consumables.add( { attributes: 'title', classes: 'foo', styles: 'color' } );
317
+ * consumables.add( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
318
+ * ```
332
319
  *
333
320
  * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`
334
321
  * attribute is provided - it should be handled separately by providing `style` and `class` in consumables object.
335
322
  *
336
- * @param {Object} consumables Object describing which parts of the element can be consumed.
337
- * @param {Boolean} consumables.name If set to `true` element's name will be added as consumable.
338
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to add as consumable.
339
- * @param {String|Array.<String>} consumables.classes Class name or array of class names to add as consumable.
340
- * @param {String|Array.<String>} consumables.styles Style name or array of style names to add as consumable.
323
+ * @param consumables Object describing which parts of the element can be consumed.
324
+ * @param consumables.name If set to `true` element's name will be added as consumable.
325
+ * @param consumables.attributes Attribute name or array of attribute names to add as consumable.
326
+ * @param consumables.classes Class name or array of class names to add as consumable.
327
+ * @param consumables.styles Style name or array of style names to add as consumable.
341
328
  */
342
329
  add(consumables) {
343
330
  if (consumables.name) {
@@ -354,19 +341,23 @@ class ViewElementConsumables {
354
341
  *
355
342
  * Element's name can be tested:
356
343
  *
357
- * consumables.test( { name: true } );
344
+ * ```ts
345
+ * consumables.test( { name: true } );
346
+ * ```
358
347
  *
359
348
  * Attributes classes and styles:
360
349
  *
361
- * consumables.test( { attributes: 'title', classes: 'foo', styles: 'color' } );
362
- * consumables.test( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
363
- *
364
- * @param {Object} consumables Object describing which parts of the element should be tested.
365
- * @param {Boolean} consumables.name If set to `true` element's name will be tested.
366
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to test.
367
- * @param {String|Array.<String>} consumables.classes Class name or array of class names to test.
368
- * @param {String|Array.<String>} consumables.styles Style name or array of style names to test.
369
- * @returns {Boolean|null} `true` when all tested items can be consumed, `null` when even one of the items
350
+ * ```ts
351
+ * consumables.test( { attributes: 'title', classes: 'foo', styles: 'color' } );
352
+ * consumables.test( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
353
+ * ```
354
+ *
355
+ * @param consumables Object describing which parts of the element should be tested.
356
+ * @param consumables.name If set to `true` element's name will be tested.
357
+ * @param consumables.attributes Attribute name or array of attribute names to test.
358
+ * @param consumables.classes Class name or array of class names to test.
359
+ * @param consumables.styles Style name or array of style names to test.
360
+ * @returns `true` when all tested items can be consumed, `null` when even one of the items
370
361
  * was never marked for consumption and `false` when even one of the items was already consumed.
371
362
  */
372
363
  test(consumables) {
@@ -390,18 +381,22 @@ class ViewElementConsumables {
390
381
  * is already consumed - it consumes all consumable items provided.
391
382
  * Element's name can be consumed:
392
383
  *
393
- * consumables.consume( { name: true } );
384
+ * ```ts
385
+ * consumables.consume( { name: true } );
386
+ * ```
394
387
  *
395
388
  * Attributes classes and styles:
396
389
  *
397
- * consumables.consume( { attributes: 'title', classes: 'foo', styles: 'color' } );
398
- * consumables.consume( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
390
+ * ```ts
391
+ * consumables.consume( { attributes: 'title', classes: 'foo', styles: 'color' } );
392
+ * consumables.consume( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
393
+ * ```
399
394
  *
400
- * @param {Object} consumables Object describing which parts of the element should be consumed.
401
- * @param {Boolean} consumables.name If set to `true` element's name will be consumed.
402
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to consume.
403
- * @param {String|Array.<String>} consumables.classes Class name or array of class names to consume.
404
- * @param {String|Array.<String>} consumables.styles Style name or array of style names to consume.
395
+ * @param consumables Object describing which parts of the element should be consumed.
396
+ * @param consumables.name If set to `true` element's name will be consumed.
397
+ * @param consumables.attributes Attribute name or array of attribute names to consume.
398
+ * @param consumables.classes Class name or array of class names to consume.
399
+ * @param consumables.styles Style name or array of style names to consume.
405
400
  */
406
401
  consume(consumables) {
407
402
  if (consumables.name) {
@@ -417,18 +412,22 @@ class ViewElementConsumables {
417
412
  * Revert already consumed parts of {@link module:engine/view/element~Element view Element}, so they can be consumed once again.
418
413
  * Element's name can be reverted:
419
414
  *
420
- * consumables.revert( { name: true } );
415
+ * ```ts
416
+ * consumables.revert( { name: true } );
417
+ * ```
421
418
  *
422
419
  * Attributes classes and styles:
423
420
  *
424
- * consumables.revert( { attributes: 'title', classes: 'foo', styles: 'color' } );
425
- * consumables.revert( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
421
+ * ```ts
422
+ * consumables.revert( { attributes: 'title', classes: 'foo', styles: 'color' } );
423
+ * consumables.revert( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );
424
+ * ```
426
425
  *
427
- * @param {Object} consumables Object describing which parts of the element should be reverted.
428
- * @param {Boolean} consumables.name If set to `true` element's name will be reverted.
429
- * @param {String|Array.<String>} consumables.attributes Attribute name or array of attribute names to revert.
430
- * @param {String|Array.<String>} consumables.classes Class name or array of class names to revert.
431
- * @param {String|Array.<String>} consumables.styles Style name or array of style names to revert.
426
+ * @param consumables Object describing which parts of the element should be reverted.
427
+ * @param consumables.name If set to `true` element's name will be reverted.
428
+ * @param consumables.attributes Attribute name or array of attribute names to revert.
429
+ * @param consumables.classes Class name or array of class names to revert.
430
+ * @param consumables.styles Style name or array of style names to revert.
432
431
  */
433
432
  revert(consumables) {
434
433
  if (consumables.name) {
@@ -446,9 +445,8 @@ class ViewElementConsumables {
446
445
  * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`
447
446
  * type is provided - it should be handled separately by providing actual style/class type.
448
447
  *
449
- * @private
450
- * @param {String} type Type of the consumable item: `attributes`, `classes` or `styles`.
451
- * @param {String|Array.<String>} item Consumable item or array of items.
448
+ * @param type Type of the consumable item: `attributes`, `classes` or `styles`.
449
+ * @param item Consumable item or array of items.
452
450
  */
453
451
  _add(type, item) {
454
452
  const items = isArray(item) ? item : [item];
@@ -482,10 +480,9 @@ class ViewElementConsumables {
482
480
  /**
483
481
  * Helper method that tests consumables of a given type: attribute, class or style.
484
482
  *
485
- * @private
486
- * @param {String} type Type of the consumable item: `attributes`, `classes` or `styles`.
487
- * @param {String|Array.<String>} item Consumable item or array of items.
488
- * @returns {Boolean|null} Returns `true` if all items can be consumed, `null` when one of the items cannot be
483
+ * @param type Type of the consumable item: `attributes`, `classes` or `styles`.
484
+ * @param item Consumable item or array of items.
485
+ * @returns Returns `true` if all items can be consumed, `null` when one of the items cannot be
489
486
  * consumed and `false` when one of the items is already consumed.
490
487
  */
491
488
  _test(type, item) {
@@ -516,9 +513,8 @@ class ViewElementConsumables {
516
513
  /**
517
514
  * Helper method that consumes items of a given type: attribute, class or style.
518
515
  *
519
- * @private
520
- * @param {String} type Type of the consumable item: `attributes`, `classes` or `styles`.
521
- * @param {String|Array.<String>} item Consumable item or array of items.
516
+ * @param type Type of the consumable item: `attributes`, `classes` or `styles`.
517
+ * @param item Consumable item or array of items.
522
518
  */
523
519
  _consume(type, item) {
524
520
  const items = isArray(item) ? item : [item];
@@ -542,9 +538,8 @@ class ViewElementConsumables {
542
538
  /**
543
539
  * Helper method that reverts items of a given type: attribute, class or style.
544
540
  *
545
- * @private
546
- * @param {String} type Type of the consumable item: `attributes`, `classes` or , `styles`.
547
- * @param {String|Array.<String>} item Consumable item or array of items.
541
+ * @param type Type of the consumable item: `attributes`, `classes` or , `styles`.
542
+ * @param item Consumable item or array of items.
548
543
  */
549
544
  _revert(type, item) {
550
545
  const items = isArray(item) ? item : [item];
@@ -0,0 +1,18 @@
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 engine/dataprocessor/basichtmlwriter
7
+ */
8
+ import type HtmlWriter from './htmlwriter';
9
+ /**
10
+ * Basic HTML writer. It uses the native `innerHTML` property for basic conversion
11
+ * from a document fragment to an HTML string.
12
+ */
13
+ export default class BasicHtmlWriter implements HtmlWriter {
14
+ /**
15
+ * Returns an HTML string created from the document fragment.
16
+ */
17
+ getHtml(fragment: DocumentFragment): string;
18
+ }
@@ -2,22 +2,13 @@
2
2
  * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
- /**
6
- * @module engine/dataprocessor/basichtmlwriter
7
- */
8
- /* globals document */
9
5
  /**
10
6
  * Basic HTML writer. It uses the native `innerHTML` property for basic conversion
11
7
  * from a document fragment to an HTML string.
12
- *
13
- * @implements module:engine/dataprocessor/htmlwriter~HtmlWriter
14
8
  */
15
9
  export default class BasicHtmlWriter {
16
10
  /**
17
11
  * Returns an HTML string created from the document fragment.
18
- *
19
- * @param {DocumentFragment} fragment
20
- * @returns {String}
21
12
  */
22
13
  getHtml(fragment) {
23
14
  const doc = document.implementation.createHTMLDocument('');
@@ -0,0 +1,61 @@
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 engine/dataprocessor/dataprocessor
7
+ */
8
+ import type ViewDocumentFragment from '../view/documentfragment';
9
+ import type { MatcherPattern } from '../view/matcher';
10
+ /**
11
+ * The data processor interface. It should be implemented by actual data processors.
12
+ *
13
+ * Each data processor implements a certain format of the data. For example, {@glink features/markdown Markdown data processor}
14
+ * will convert the data (a Markdown string) to a {@link module:engine/view/documentfragment~DocumentFragment document fragment} and back.
15
+ *
16
+ * **Note:** While the CKEditor 5 architecture supports changing the data format, in most scenarios we do recommend sticking to
17
+ * the default format which is HTML (supported by the {@link module:engine/dataprocessor/htmldataprocessor~HtmlDataProcessor}).
18
+ * HTML remains [the best standard for rich-text data](https://medium.com/content-uneditable/a-standard-for-rich-text-data-4b3a507af552).
19
+ *
20
+ * And please do remember – using Markdown [does not automatically make your
21
+ * application/website secure](https://github.com/ckeditor/ckeditor5-markdown-gfm/issues/16#issuecomment-375752994).
22
+ */
23
+ export default interface DataProcessor {
24
+ /**
25
+ * Converts a {@link module:engine/view/documentfragment~DocumentFragment document fragment} to data.
26
+ *
27
+ * @param viewFragment The document fragment to be processed.
28
+ */
29
+ toData(viewFragment: ViewDocumentFragment): string;
30
+ /**
31
+ * Converts the data to a {@link module:engine/view/documentfragment~DocumentFragment document fragment}.
32
+ *
33
+ * @param data The data to be processed.
34
+ */
35
+ toView(data: string): ViewDocumentFragment;
36
+ /**
37
+ * Registers a {@link module:engine/view/matcher~MatcherPattern} for view elements whose content should be treated as raw data
38
+ * and its content should be converted to a
39
+ * {@link module:engine/view/element~Element#getCustomProperty custom property of a view element} called `"$rawContent"` while
40
+ * converting {@link #toView to view}.
41
+ *
42
+ * @param pattern Pattern matching all view elements whose content should be treated as plain text.
43
+ */
44
+ registerRawContentMatcher(pattern: MatcherPattern): void;
45
+ /**
46
+ * If the processor is set to use marked fillers, it will insert `&nbsp;` fillers wrapped in `<span>` elements
47
+ * (`<span data-cke-filler="true">&nbsp;</span>`) instead of regular `&nbsp;` characters.
48
+ *
49
+ * This mode allows for more precise handling of block fillers (so they do not leak into the editor content) but bloats the
50
+ * editor data with additional markup.
51
+ *
52
+ * This mode may be required by some features and will be turned on by them automatically.
53
+ *
54
+ * @param type Whether to use the default or marked `&nbsp;` block fillers.
55
+ */
56
+ useFillerType(type: 'default' | 'marked'): void;
57
+ /**
58
+ * If `false`, comment nodes will be converted to `$comment`. Otherwise comment nodes are ignored.
59
+ */
60
+ skipComments?: boolean;
61
+ }