@ckeditor/ckeditor5-engine 40.0.0 → 40.2.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 (243) hide show
  1. package/CHANGELOG.md +39 -39
  2. package/LICENSE.md +3 -3
  3. package/package.json +2 -2
  4. package/src/controller/datacontroller.d.ts +334 -334
  5. package/src/controller/datacontroller.js +481 -481
  6. package/src/controller/editingcontroller.d.ts +98 -98
  7. package/src/controller/editingcontroller.js +191 -191
  8. package/src/conversion/conversion.d.ts +478 -478
  9. package/src/conversion/conversion.js +601 -601
  10. package/src/conversion/conversionhelpers.d.ts +26 -26
  11. package/src/conversion/conversionhelpers.js +32 -32
  12. package/src/conversion/downcastdispatcher.d.ts +562 -562
  13. package/src/conversion/downcastdispatcher.js +548 -547
  14. package/src/conversion/downcasthelpers.d.ts +1226 -1226
  15. package/src/conversion/downcasthelpers.js +2178 -2183
  16. package/src/conversion/mapper.d.ts +503 -503
  17. package/src/conversion/mapper.js +536 -536
  18. package/src/conversion/modelconsumable.d.ts +201 -201
  19. package/src/conversion/modelconsumable.js +333 -333
  20. package/src/conversion/upcastdispatcher.d.ts +492 -492
  21. package/src/conversion/upcastdispatcher.js +460 -460
  22. package/src/conversion/upcasthelpers.d.ts +499 -499
  23. package/src/conversion/upcasthelpers.js +950 -950
  24. package/src/conversion/viewconsumable.d.ts +369 -369
  25. package/src/conversion/viewconsumable.js +536 -532
  26. package/src/dataprocessor/basichtmlwriter.d.ts +18 -18
  27. package/src/dataprocessor/basichtmlwriter.js +20 -19
  28. package/src/dataprocessor/dataprocessor.d.ts +61 -61
  29. package/src/dataprocessor/dataprocessor.js +5 -5
  30. package/src/dataprocessor/htmldataprocessor.d.ts +76 -76
  31. package/src/dataprocessor/htmldataprocessor.js +96 -96
  32. package/src/dataprocessor/htmlwriter.d.ts +16 -16
  33. package/src/dataprocessor/htmlwriter.js +5 -5
  34. package/src/dataprocessor/xmldataprocessor.d.ts +90 -90
  35. package/src/dataprocessor/xmldataprocessor.js +108 -108
  36. package/src/dev-utils/model.d.ts +124 -124
  37. package/src/dev-utils/model.js +395 -395
  38. package/src/dev-utils/operationreplayer.d.ts +51 -51
  39. package/src/dev-utils/operationreplayer.js +112 -112
  40. package/src/dev-utils/utils.d.ts +37 -37
  41. package/src/dev-utils/utils.js +73 -73
  42. package/src/dev-utils/view.d.ts +319 -319
  43. package/src/dev-utils/view.js +967 -967
  44. package/src/index.d.ts +114 -114
  45. package/src/index.js +78 -78
  46. package/src/model/batch.d.ts +106 -106
  47. package/src/model/batch.js +96 -96
  48. package/src/model/differ.d.ts +387 -387
  49. package/src/model/differ.js +1149 -1149
  50. package/src/model/document.d.ts +272 -272
  51. package/src/model/document.js +360 -361
  52. package/src/model/documentfragment.d.ts +200 -200
  53. package/src/model/documentfragment.js +306 -306
  54. package/src/model/documentselection.d.ts +420 -420
  55. package/src/model/documentselection.js +993 -993
  56. package/src/model/element.d.ts +165 -165
  57. package/src/model/element.js +281 -281
  58. package/src/model/history.d.ts +114 -114
  59. package/src/model/history.js +207 -207
  60. package/src/model/item.d.ts +14 -14
  61. package/src/model/item.js +5 -5
  62. package/src/model/liveposition.d.ts +77 -77
  63. package/src/model/liveposition.js +93 -93
  64. package/src/model/liverange.d.ts +102 -102
  65. package/src/model/liverange.js +120 -120
  66. package/src/model/markercollection.d.ts +335 -335
  67. package/src/model/markercollection.js +403 -403
  68. package/src/model/model.d.ts +919 -919
  69. package/src/model/model.js +842 -842
  70. package/src/model/node.d.ts +256 -256
  71. package/src/model/node.js +375 -375
  72. package/src/model/nodelist.d.ts +91 -91
  73. package/src/model/nodelist.js +163 -163
  74. package/src/model/operation/attributeoperation.d.ts +103 -103
  75. package/src/model/operation/attributeoperation.js +148 -148
  76. package/src/model/operation/detachoperation.d.ts +60 -60
  77. package/src/model/operation/detachoperation.js +77 -77
  78. package/src/model/operation/insertoperation.d.ts +90 -90
  79. package/src/model/operation/insertoperation.js +135 -135
  80. package/src/model/operation/markeroperation.d.ts +91 -91
  81. package/src/model/operation/markeroperation.js +107 -107
  82. package/src/model/operation/mergeoperation.d.ts +100 -100
  83. package/src/model/operation/mergeoperation.js +167 -167
  84. package/src/model/operation/moveoperation.d.ts +96 -96
  85. package/src/model/operation/moveoperation.js +164 -164
  86. package/src/model/operation/nooperation.d.ts +38 -38
  87. package/src/model/operation/nooperation.js +48 -48
  88. package/src/model/operation/operation.d.ts +96 -96
  89. package/src/model/operation/operation.js +59 -62
  90. package/src/model/operation/operationfactory.d.ts +18 -18
  91. package/src/model/operation/operationfactory.js +44 -44
  92. package/src/model/operation/renameoperation.d.ts +83 -83
  93. package/src/model/operation/renameoperation.js +115 -115
  94. package/src/model/operation/rootattributeoperation.d.ts +98 -98
  95. package/src/model/operation/rootattributeoperation.js +155 -155
  96. package/src/model/operation/rootoperation.d.ts +76 -76
  97. package/src/model/operation/rootoperation.js +90 -90
  98. package/src/model/operation/splitoperation.d.ts +109 -109
  99. package/src/model/operation/splitoperation.js +194 -194
  100. package/src/model/operation/transform.d.ts +100 -100
  101. package/src/model/operation/transform.js +1985 -1985
  102. package/src/model/operation/utils.d.ts +71 -71
  103. package/src/model/operation/utils.js +217 -213
  104. package/src/model/position.d.ts +539 -539
  105. package/src/model/position.js +979 -979
  106. package/src/model/range.d.ts +458 -458
  107. package/src/model/range.js +875 -875
  108. package/src/model/rootelement.d.ts +60 -60
  109. package/src/model/rootelement.js +74 -74
  110. package/src/model/schema.d.ts +1186 -1186
  111. package/src/model/schema.js +1242 -1242
  112. package/src/model/selection.d.ts +482 -482
  113. package/src/model/selection.js +789 -789
  114. package/src/model/text.d.ts +66 -66
  115. package/src/model/text.js +85 -85
  116. package/src/model/textproxy.d.ts +144 -144
  117. package/src/model/textproxy.js +189 -189
  118. package/src/model/treewalker.d.ts +186 -186
  119. package/src/model/treewalker.js +244 -244
  120. package/src/model/typecheckable.d.ts +285 -285
  121. package/src/model/typecheckable.js +16 -16
  122. package/src/model/utils/autoparagraphing.d.ts +37 -37
  123. package/src/model/utils/autoparagraphing.js +63 -63
  124. package/src/model/utils/deletecontent.d.ts +58 -58
  125. package/src/model/utils/deletecontent.js +488 -488
  126. package/src/model/utils/findoptimalinsertionrange.d.ts +32 -32
  127. package/src/model/utils/findoptimalinsertionrange.js +57 -57
  128. package/src/model/utils/getselectedcontent.d.ts +30 -30
  129. package/src/model/utils/getselectedcontent.js +125 -125
  130. package/src/model/utils/insertcontent.d.ts +46 -46
  131. package/src/model/utils/insertcontent.js +705 -705
  132. package/src/model/utils/insertobject.d.ts +44 -44
  133. package/src/model/utils/insertobject.js +139 -139
  134. package/src/model/utils/modifyselection.d.ts +48 -48
  135. package/src/model/utils/modifyselection.js +186 -186
  136. package/src/model/utils/selection-post-fixer.d.ts +74 -74
  137. package/src/model/utils/selection-post-fixer.js +260 -260
  138. package/src/model/writer.d.ts +851 -851
  139. package/src/model/writer.js +1306 -1306
  140. package/src/view/attributeelement.d.ts +108 -108
  141. package/src/view/attributeelement.js +184 -184
  142. package/src/view/containerelement.d.ts +49 -49
  143. package/src/view/containerelement.js +80 -80
  144. package/src/view/datatransfer.d.ts +79 -79
  145. package/src/view/datatransfer.js +98 -98
  146. package/src/view/document.d.ts +184 -184
  147. package/src/view/document.js +122 -120
  148. package/src/view/documentfragment.d.ts +153 -149
  149. package/src/view/documentfragment.js +234 -228
  150. package/src/view/documentselection.d.ts +306 -306
  151. package/src/view/documentselection.js +256 -256
  152. package/src/view/domconverter.d.ts +652 -640
  153. package/src/view/domconverter.js +1473 -1450
  154. package/src/view/downcastwriter.d.ts +996 -996
  155. package/src/view/downcastwriter.js +1696 -1696
  156. package/src/view/editableelement.d.ts +62 -62
  157. package/src/view/editableelement.js +62 -62
  158. package/src/view/element.d.ts +468 -468
  159. package/src/view/element.js +724 -724
  160. package/src/view/elementdefinition.d.ts +87 -87
  161. package/src/view/elementdefinition.js +5 -5
  162. package/src/view/emptyelement.d.ts +41 -41
  163. package/src/view/emptyelement.js +73 -73
  164. package/src/view/filler.d.ts +111 -111
  165. package/src/view/filler.js +150 -150
  166. package/src/view/item.d.ts +14 -14
  167. package/src/view/item.js +5 -5
  168. package/src/view/matcher.d.ts +486 -486
  169. package/src/view/matcher.js +507 -507
  170. package/src/view/node.d.ts +163 -163
  171. package/src/view/node.js +228 -228
  172. package/src/view/observer/arrowkeysobserver.d.ts +45 -45
  173. package/src/view/observer/arrowkeysobserver.js +40 -40
  174. package/src/view/observer/bubblingemittermixin.d.ts +166 -166
  175. package/src/view/observer/bubblingemittermixin.js +172 -172
  176. package/src/view/observer/bubblingeventinfo.d.ts +47 -47
  177. package/src/view/observer/bubblingeventinfo.js +37 -37
  178. package/src/view/observer/clickobserver.d.ts +43 -43
  179. package/src/view/observer/clickobserver.js +29 -29
  180. package/src/view/observer/compositionobserver.d.ts +82 -82
  181. package/src/view/observer/compositionobserver.js +60 -60
  182. package/src/view/observer/domeventdata.d.ts +50 -50
  183. package/src/view/observer/domeventdata.js +47 -47
  184. package/src/view/observer/domeventobserver.d.ts +73 -73
  185. package/src/view/observer/domeventobserver.js +79 -79
  186. package/src/view/observer/fakeselectionobserver.d.ts +47 -47
  187. package/src/view/observer/fakeselectionobserver.js +91 -91
  188. package/src/view/observer/focusobserver.d.ts +82 -82
  189. package/src/view/observer/focusobserver.js +86 -86
  190. package/src/view/observer/inputobserver.d.ts +86 -86
  191. package/src/view/observer/inputobserver.js +164 -164
  192. package/src/view/observer/keyobserver.d.ts +66 -66
  193. package/src/view/observer/keyobserver.js +39 -39
  194. package/src/view/observer/mouseobserver.d.ts +89 -89
  195. package/src/view/observer/mouseobserver.js +29 -29
  196. package/src/view/observer/mutationobserver.d.ts +86 -86
  197. package/src/view/observer/mutationobserver.js +206 -206
  198. package/src/view/observer/observer.d.ts +89 -89
  199. package/src/view/observer/observer.js +84 -84
  200. package/src/view/observer/selectionobserver.d.ts +148 -148
  201. package/src/view/observer/selectionobserver.js +202 -202
  202. package/src/view/observer/tabobserver.d.ts +46 -46
  203. package/src/view/observer/tabobserver.js +42 -42
  204. package/src/view/placeholder.d.ts +96 -96
  205. package/src/view/placeholder.js +267 -267
  206. package/src/view/position.d.ts +189 -189
  207. package/src/view/position.js +324 -324
  208. package/src/view/range.d.ts +279 -279
  209. package/src/view/range.js +430 -430
  210. package/src/view/rawelement.d.ts +73 -73
  211. package/src/view/rawelement.js +105 -105
  212. package/src/view/renderer.d.ts +265 -265
  213. package/src/view/renderer.js +1000 -999
  214. package/src/view/rooteditableelement.d.ts +41 -41
  215. package/src/view/rooteditableelement.js +69 -69
  216. package/src/view/selection.d.ts +375 -375
  217. package/src/view/selection.js +559 -559
  218. package/src/view/styles/background.d.ts +33 -33
  219. package/src/view/styles/background.js +74 -74
  220. package/src/view/styles/border.d.ts +43 -43
  221. package/src/view/styles/border.js +316 -316
  222. package/src/view/styles/margin.d.ts +29 -29
  223. package/src/view/styles/margin.js +34 -34
  224. package/src/view/styles/padding.d.ts +29 -29
  225. package/src/view/styles/padding.js +34 -34
  226. package/src/view/styles/utils.d.ts +93 -93
  227. package/src/view/styles/utils.js +219 -219
  228. package/src/view/stylesmap.d.ts +675 -675
  229. package/src/view/stylesmap.js +765 -766
  230. package/src/view/text.d.ts +74 -74
  231. package/src/view/text.js +93 -93
  232. package/src/view/textproxy.d.ts +97 -97
  233. package/src/view/textproxy.js +124 -124
  234. package/src/view/treewalker.d.ts +195 -195
  235. package/src/view/treewalker.js +327 -327
  236. package/src/view/typecheckable.d.ts +448 -448
  237. package/src/view/typecheckable.js +19 -19
  238. package/src/view/uielement.d.ts +96 -96
  239. package/src/view/uielement.js +183 -182
  240. package/src/view/upcastwriter.d.ts +417 -417
  241. package/src/view/upcastwriter.js +359 -359
  242. package/src/view/view.d.ts +487 -487
  243. package/src/view/view.js +546 -546
@@ -1,335 +1,335 @@
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/model/markercollection
7
- */
8
- import TypeCheckable from './typecheckable';
9
- import LiveRange, { type LiveRangeChangeContentEvent, type LiveRangeChangeRangeEvent, type LiveRangeChangeEvent } from './liverange';
10
- import type Position from './position';
11
- import type Range from './range';
12
- declare const MarkerCollection_base: {
13
- new (): import("@ckeditor/ckeditor5-utils").Emitter;
14
- prototype: import("@ckeditor/ckeditor5-utils").Emitter;
15
- };
16
- /**
17
- * The collection of all {@link module:engine/model/markercollection~Marker markers} attached to the document.
18
- * It lets you {@link module:engine/model/markercollection~MarkerCollection#get get} markers or track them using
19
- * {@link module:engine/model/markercollection~MarkerCollection#event:update} event.
20
- *
21
- * To create, change or remove makers use {@link module:engine/model/writer~Writer model writers'} methods:
22
- * {@link module:engine/model/writer~Writer#addMarker} or {@link module:engine/model/writer~Writer#removeMarker}. Since
23
- * the writer is the only proper way to change the data model it is not possible to change markers directly using this
24
- * collection. All markers created by the writer will be automatically added to this collection.
25
- *
26
- * By default there is one marker collection available as {@link module:engine/model/model~Model#markers model property}.
27
- *
28
- * @see module:engine/model/markercollection~Marker
29
- */
30
- export default class MarkerCollection extends MarkerCollection_base implements Iterable<Marker> {
31
- /**
32
- * Stores {@link ~Marker markers} added to the collection.
33
- */
34
- private _markers;
35
- /**
36
- * Iterable interface.
37
- *
38
- * Iterates over all {@link ~Marker markers} added to the collection.
39
- */
40
- [Symbol.iterator](): IterableIterator<Marker>;
41
- /**
42
- * Checks if given {@link ~Marker marker} or marker name is in the collection.
43
- *
44
- * @param markerOrName Name of marker or marker instance to check.
45
- * @returns `true` if marker is in the collection, `false` otherwise.
46
- */
47
- has(markerOrName: string | Marker): boolean;
48
- /**
49
- * Returns {@link ~Marker marker} with given `markerName`.
50
- *
51
- * @param markerName Name of marker to get.
52
- * @returns Marker with given name or `null` if such marker was
53
- * not added to the collection.
54
- */
55
- get(markerName: string): Marker | null;
56
- /**
57
- * Creates and adds a {@link ~Marker marker} to the `MarkerCollection` with given name on given
58
- * {@link module:engine/model/range~Range range}.
59
- *
60
- * If `MarkerCollection` already had a marker with given name (or {@link ~Marker marker} was passed), the marker in
61
- * collection is updated and {@link module:engine/model/markercollection~MarkerCollection#event:update} event is fired
62
- * but only if there was a change (marker range or {@link module:engine/model/markercollection~Marker#managedUsingOperations}
63
- * flag has changed.
64
- *
65
- * @internal
66
- * @fires update
67
- * @param markerOrName Name of marker to set or marker instance to update.
68
- * @param range Marker range.
69
- * @param managedUsingOperations Specifies whether the marker is managed using operations.
70
- * @param affectsData Specifies whether the marker affects the data produced by the data pipeline
71
- * (is persisted in the editor's data).
72
- * @returns `Marker` instance which was added or updated.
73
- */
74
- _set(markerOrName: string | Marker, range: Range, managedUsingOperations?: boolean, affectsData?: boolean): Marker;
75
- /**
76
- * Removes given {@link ~Marker marker} or a marker with given name from the `MarkerCollection`.
77
- *
78
- * @internal
79
- * @fires update
80
- * @param markerOrName Marker or name of a marker to remove.
81
- * @returns `true` if marker was found and removed, `false` otherwise.
82
- */
83
- _remove(markerOrName: string | Marker): boolean;
84
- /**
85
- * Fires an {@link module:engine/model/markercollection~MarkerCollection#event:update} event for the given {@link ~Marker marker}
86
- * but does not change the marker. Useful to force {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast
87
- * conversion} for the marker.
88
- *
89
- * @internal
90
- * @fires update
91
- * @param markerOrName Marker or name of a marker to refresh.
92
- */
93
- _refresh(markerOrName: string | Marker): void;
94
- /**
95
- * Returns iterator that iterates over all markers, which ranges contain given {@link module:engine/model/position~Position position}.
96
- */
97
- getMarkersAtPosition(position: Position): IterableIterator<Marker>;
98
- /**
99
- * Returns iterator that iterates over all markers, which intersects with given {@link module:engine/model/range~Range range}.
100
- */
101
- getMarkersIntersectingRange(range: Range): Iterable<Marker>;
102
- /**
103
- * Destroys marker collection and all markers inside it.
104
- */
105
- destroy(): void;
106
- /**
107
- * Iterates over all markers that starts with given `prefix`.
108
- *
109
- * ```ts
110
- * const markerFooA = markersCollection.set( 'foo:a', rangeFooA );
111
- * const markerFooB = markersCollection.set( 'foo:b', rangeFooB );
112
- * const markerBarA = markersCollection.set( 'bar:a', rangeBarA );
113
- * const markerFooBarA = markersCollection.set( 'foobar:a', rangeFooBarA );
114
- * Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]
115
- * Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []
116
- * ```
117
- */
118
- getMarkersGroup(prefix: string): IterableIterator<Marker>;
119
- /**
120
- * Destroys the marker.
121
- */
122
- private _destroyMarker;
123
- }
124
- export interface MarkerData {
125
- /**
126
- * Marker range. `null` if the marker was removed.
127
- */
128
- range: Range | null;
129
- /**
130
- * A property defining if the marker affects data.
131
- */
132
- affectsData: boolean;
133
- /**
134
- * A property defining if the marker is managed using operations.
135
- */
136
- managedUsingOperations: boolean;
137
- }
138
- declare const Marker_base: import("@ckeditor/ckeditor5-utils").Mixed<typeof TypeCheckable, import("@ckeditor/ckeditor5-utils").Emitter>;
139
- /**
140
- * `Marker` is a continuous part of the model (like a range), is named and represents some kind of information about the
141
- * marked part of the model document. In contrary to {@link module:engine/model/node~Node nodes}, which are building blocks of
142
- * the model document tree, markers are not stored directly in the document tree but in the
143
- * {@link module:engine/model/model~Model#markers model markers' collection}. Still, they are document data, by giving
144
- * additional meaning to the part of a model document between marker start and marker end.
145
- *
146
- * In this sense, markers are similar to adding and converting attributes on nodes. The difference is that attribute is
147
- * connected with a given node (e.g. a character is bold no matter if it gets moved or content around it changes).
148
- * Markers on the other hand are continuous ranges and are characterized by their start and end position. This means that
149
- * any character in the marker is marked by the marker. For example, if a character is moved outside of marker it stops being
150
- * "special" and the marker is shrunk. Similarly, when a character is moved into the marker from other place in document
151
- * model, it starts being "special" and the marker is enlarged.
152
- *
153
- * Another upside of markers is that finding marked part of document is fast and easy. Using attributes to mark some nodes
154
- * and then trying to find that part of document would require traversing whole document tree. Marker gives instant access
155
- * to the range which it is marking at the moment.
156
- *
157
- * Markers are built from a name and a range.
158
- *
159
- * Range of the marker is updated automatically when document changes, using
160
- * {@link module:engine/model/liverange~LiveRange live range} mechanism.
161
- *
162
- * Name is used to group and identify markers. Names have to be unique, but markers can be grouped by
163
- * using common prefixes, separated with `:`, for example: `user:john` or `search:3`. That's useful in term of creating
164
- * namespaces for custom elements (e.g. comments, highlights). You can use this prefixes in
165
- * {@link module:engine/model/markercollection~MarkerCollection#event:update} listeners to listen on changes in a group of markers.
166
- * For instance: `model.markers.on( 'update:user', callback );` will be called whenever any `user:*` markers changes.
167
- *
168
- * There are two types of markers.
169
- *
170
- * 1. Markers managed directly, without using operations. They are added directly by {@link module:engine/model/writer~Writer}
171
- * to the {@link module:engine/model/markercollection~MarkerCollection} without any additional mechanism. They can be used
172
- * as bookmarks or visual markers. They are great for showing results of the find, or select link when the focus is in the input.
173
- *
174
- * 1. Markers managed using operations. These markers are also stored in {@link module:engine/model/markercollection~MarkerCollection}
175
- * but changes in these markers is managed the same way all other changes in the model structure - using operations.
176
- * Therefore, they are handled in the undo stack and synchronized between clients if the collaboration plugin is enabled.
177
- * This type of markers is useful for solutions like spell checking or comments.
178
- *
179
- * Both type of them should be added / updated by {@link module:engine/model/writer~Writer#addMarker}
180
- * and removed by {@link module:engine/model/writer~Writer#removeMarker} methods.
181
- *
182
- * ```ts
183
- * model.change( ( writer ) => {
184
- * const marker = writer.addMarker( name, { range, usingOperation: true } );
185
- *
186
- * // ...
187
- *
188
- * writer.removeMarker( marker );
189
- * } );
190
- * ```
191
- *
192
- * See {@link module:engine/model/writer~Writer} to find more examples.
193
- *
194
- * Since markers need to track change in the document, for efficiency reasons, it is best to create and keep as little
195
- * markers as possible and remove them as soon as they are not needed anymore.
196
- *
197
- * Markers can be downcasted and upcasted.
198
- *
199
- * Markers downcast happens on {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker} and
200
- * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:removeMarker} events.
201
- * Use {@link module:engine/conversion/downcasthelpers downcast converters} or attach a custom converter to mentioned events.
202
- * For {@link module:engine/controller/datacontroller~DataController data pipeline}, marker should be downcasted to an element.
203
- * Then, it can be upcasted back to a marker. Again, use {@link module:engine/conversion/upcasthelpers upcast converters} or
204
- * attach a custom converter to {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element}.
205
- *
206
- * `Marker` instances are created and destroyed only by {@link ~MarkerCollection MarkerCollection}.
207
- */
208
- declare class Marker extends Marker_base {
209
- /**
210
- * Marker's name.
211
- */
212
- readonly name: string;
213
- /**
214
- * Flag indicates if the marker is managed using operations or not.
215
- *
216
- * @internal
217
- */
218
- _managedUsingOperations: boolean;
219
- /**
220
- * Specifies whether the marker affects the data produced by the data pipeline
221
- * (is persisted in the editor's data).
222
- *
223
- * @internal
224
- */
225
- _affectsData: boolean;
226
- /**
227
- * Range marked by the marker.
228
- */
229
- private _liveRange;
230
- /**
231
- * Creates a marker instance.
232
- *
233
- * @param name Marker name.
234
- * @param liveRange Range marked by the marker.
235
- * @param managedUsingOperations Specifies whether the marker is managed using operations.
236
- * @param affectsData Specifies whether the marker affects the data produced by the data pipeline (is persisted in the editor's data).
237
- */
238
- constructor(name: string, liveRange: LiveRange, managedUsingOperations: boolean, affectsData: boolean);
239
- /**
240
- * A value indicating if the marker is managed using operations.
241
- * See {@link ~Marker marker class description} to learn more about marker types.
242
- * See {@link module:engine/model/writer~Writer#addMarker}.
243
- */
244
- get managedUsingOperations(): boolean;
245
- /**
246
- * A value indicating if the marker changes the data.
247
- */
248
- get affectsData(): boolean;
249
- /**
250
- * Returns the marker data (properties defining the marker).
251
- */
252
- getData(): MarkerData;
253
- /**
254
- * Returns current marker start position.
255
- */
256
- getStart(): Position;
257
- /**
258
- * Returns current marker end position.
259
- */
260
- getEnd(): Position;
261
- /**
262
- * Returns a range that represents the current state of the marker.
263
- *
264
- * Keep in mind that returned value is a {@link module:engine/model/range~Range Range}, not a
265
- * {@link module:engine/model/liverange~LiveRange LiveRange}. This means that it is up-to-date and relevant only
266
- * until next model document change. Do not store values returned by this method. Instead, store {@link ~Marker#name}
267
- * and get `Marker` instance from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection} every
268
- * time there is a need to read marker properties. This will guarantee that the marker has not been removed and
269
- * that it's data is up-to-date.
270
- */
271
- getRange(): Range;
272
- /**
273
- * Binds new live range to the marker and detach the old one if is attached.
274
- *
275
- * @internal
276
- * @param liveRange Live range to attach
277
- * @returns Attached live range.
278
- */
279
- _attachLiveRange(liveRange: LiveRange): LiveRange;
280
- /**
281
- * Unbinds and destroys currently attached live range.
282
- *
283
- * @internal
284
- */
285
- _detachLiveRange(): void;
286
- }
287
- export type { Marker };
288
- /**
289
- * Fired whenever {@link ~Marker#_liveRange marker range} is changed due to changes on {@link module:engine/model/document~Document}.
290
- * This is a delegated {@link module:engine/model/liverange~LiveRange#event:change:range LiveRange change:range event}.
291
- *
292
- * When marker is removed from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection},
293
- * all event listeners listening to it should be removed. It is best to do it on
294
- * {@link module:engine/model/markercollection~MarkerCollection#event:update MarkerCollection update event}.
295
- *
296
- * @see module:engine/model/liverange~LiveRange#event:change:range
297
- * @eventName ~Marker#change:range
298
- */
299
- export type MarkerChangeRangeEvent = LiveRangeChangeRangeEvent;
300
- /**
301
- * Fired whenever change on {@link module:engine/model/document~Document} is done inside {@link ~Marker#_liveRange marker range}.
302
- * This is a delegated {@link module:engine/model/liverange~LiveRange#event:change:content LiveRange change:content event}.
303
- *
304
- * When marker is removed from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection},
305
- * all event listeners listening to it should be removed. It is best to do it on
306
- * {@link module:engine/model/markercollection~MarkerCollection#event:update MarkerCollection update event}.
307
- *
308
- * @see module:engine/model/liverange~LiveRange#event:change:content
309
- * @eventName ~Marker#change:content
310
- */
311
- export type MarkerCollectionChangeContentEvent = LiveRangeChangeContentEvent;
312
- /**
313
- * Describes `change:range` or `change:content` event.
314
- */
315
- export type MarkerChangeEvent = LiveRangeChangeEvent;
316
- /**
317
- * Fired whenever marker is added, updated or removed from `MarkerCollection`.
318
- *
319
- * @eventName ~MarkerCollection#update
320
- * @param marker Updated Marker.
321
- * @param oldRange Marker range before the update. When is not defined it
322
- * means that marker is just added.
323
- * @param newRange Marker range after update. When is not defined it
324
- * means that marker is just removed.
325
- * @param oldMarkerData Data of the marker before the change.
326
- */
327
- export type MarkerCollectionUpdateEvent = {
328
- name: 'update' | `update:${string}`;
329
- args: [marker: Marker, oldRange: Range | null, newRange: Range | null, oldMarkerData: MarkerData];
330
- };
331
- /**
332
- * Cannot use a {@link module:engine/model/markercollection~MarkerCollection#destroy destroyed marker} instance.
333
- *
334
- * @error marker-destroyed
335
- */
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/model/markercollection
7
+ */
8
+ import TypeCheckable from './typecheckable';
9
+ import LiveRange, { type LiveRangeChangeContentEvent, type LiveRangeChangeRangeEvent, type LiveRangeChangeEvent } from './liverange';
10
+ import type Position from './position';
11
+ import type Range from './range';
12
+ declare const MarkerCollection_base: {
13
+ new (): import("@ckeditor/ckeditor5-utils").Emitter;
14
+ prototype: import("@ckeditor/ckeditor5-utils").Emitter;
15
+ };
16
+ /**
17
+ * The collection of all {@link module:engine/model/markercollection~Marker markers} attached to the document.
18
+ * It lets you {@link module:engine/model/markercollection~MarkerCollection#get get} markers or track them using
19
+ * {@link module:engine/model/markercollection~MarkerCollection#event:update} event.
20
+ *
21
+ * To create, change or remove makers use {@link module:engine/model/writer~Writer model writers'} methods:
22
+ * {@link module:engine/model/writer~Writer#addMarker} or {@link module:engine/model/writer~Writer#removeMarker}. Since
23
+ * the writer is the only proper way to change the data model it is not possible to change markers directly using this
24
+ * collection. All markers created by the writer will be automatically added to this collection.
25
+ *
26
+ * By default there is one marker collection available as {@link module:engine/model/model~Model#markers model property}.
27
+ *
28
+ * @see module:engine/model/markercollection~Marker
29
+ */
30
+ export default class MarkerCollection extends MarkerCollection_base implements Iterable<Marker> {
31
+ /**
32
+ * Stores {@link ~Marker markers} added to the collection.
33
+ */
34
+ private _markers;
35
+ /**
36
+ * Iterable interface.
37
+ *
38
+ * Iterates over all {@link ~Marker markers} added to the collection.
39
+ */
40
+ [Symbol.iterator](): IterableIterator<Marker>;
41
+ /**
42
+ * Checks if given {@link ~Marker marker} or marker name is in the collection.
43
+ *
44
+ * @param markerOrName Name of marker or marker instance to check.
45
+ * @returns `true` if marker is in the collection, `false` otherwise.
46
+ */
47
+ has(markerOrName: string | Marker): boolean;
48
+ /**
49
+ * Returns {@link ~Marker marker} with given `markerName`.
50
+ *
51
+ * @param markerName Name of marker to get.
52
+ * @returns Marker with given name or `null` if such marker was
53
+ * not added to the collection.
54
+ */
55
+ get(markerName: string): Marker | null;
56
+ /**
57
+ * Creates and adds a {@link ~Marker marker} to the `MarkerCollection` with given name on given
58
+ * {@link module:engine/model/range~Range range}.
59
+ *
60
+ * If `MarkerCollection` already had a marker with given name (or {@link ~Marker marker} was passed), the marker in
61
+ * collection is updated and {@link module:engine/model/markercollection~MarkerCollection#event:update} event is fired
62
+ * but only if there was a change (marker range or {@link module:engine/model/markercollection~Marker#managedUsingOperations}
63
+ * flag has changed.
64
+ *
65
+ * @internal
66
+ * @fires update
67
+ * @param markerOrName Name of marker to set or marker instance to update.
68
+ * @param range Marker range.
69
+ * @param managedUsingOperations Specifies whether the marker is managed using operations.
70
+ * @param affectsData Specifies whether the marker affects the data produced by the data pipeline
71
+ * (is persisted in the editor's data).
72
+ * @returns `Marker` instance which was added or updated.
73
+ */
74
+ _set(markerOrName: string | Marker, range: Range, managedUsingOperations?: boolean, affectsData?: boolean): Marker;
75
+ /**
76
+ * Removes given {@link ~Marker marker} or a marker with given name from the `MarkerCollection`.
77
+ *
78
+ * @internal
79
+ * @fires update
80
+ * @param markerOrName Marker or name of a marker to remove.
81
+ * @returns `true` if marker was found and removed, `false` otherwise.
82
+ */
83
+ _remove(markerOrName: string | Marker): boolean;
84
+ /**
85
+ * Fires an {@link module:engine/model/markercollection~MarkerCollection#event:update} event for the given {@link ~Marker marker}
86
+ * but does not change the marker. Useful to force {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast
87
+ * conversion} for the marker.
88
+ *
89
+ * @internal
90
+ * @fires update
91
+ * @param markerOrName Marker or name of a marker to refresh.
92
+ */
93
+ _refresh(markerOrName: string | Marker): void;
94
+ /**
95
+ * Returns iterator that iterates over all markers, which ranges contain given {@link module:engine/model/position~Position position}.
96
+ */
97
+ getMarkersAtPosition(position: Position): IterableIterator<Marker>;
98
+ /**
99
+ * Returns iterator that iterates over all markers, which intersects with given {@link module:engine/model/range~Range range}.
100
+ */
101
+ getMarkersIntersectingRange(range: Range): Iterable<Marker>;
102
+ /**
103
+ * Destroys marker collection and all markers inside it.
104
+ */
105
+ destroy(): void;
106
+ /**
107
+ * Iterates over all markers that starts with given `prefix`.
108
+ *
109
+ * ```ts
110
+ * const markerFooA = markersCollection._set( 'foo:a', rangeFooA );
111
+ * const markerFooB = markersCollection._set( 'foo:b', rangeFooB );
112
+ * const markerBarA = markersCollection._set( 'bar:a', rangeBarA );
113
+ * const markerFooBarA = markersCollection._set( 'foobar:a', rangeFooBarA );
114
+ * Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]
115
+ * Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []
116
+ * ```
117
+ */
118
+ getMarkersGroup(prefix: string): IterableIterator<Marker>;
119
+ /**
120
+ * Destroys the marker.
121
+ */
122
+ private _destroyMarker;
123
+ }
124
+ export interface MarkerData {
125
+ /**
126
+ * Marker range. `null` if the marker was removed.
127
+ */
128
+ range: Range | null;
129
+ /**
130
+ * A property defining if the marker affects data.
131
+ */
132
+ affectsData: boolean;
133
+ /**
134
+ * A property defining if the marker is managed using operations.
135
+ */
136
+ managedUsingOperations: boolean;
137
+ }
138
+ declare const Marker_base: import("@ckeditor/ckeditor5-utils").Mixed<typeof TypeCheckable, import("@ckeditor/ckeditor5-utils").Emitter>;
139
+ /**
140
+ * `Marker` is a continuous part of the model (like a range), is named and represents some kind of information about the
141
+ * marked part of the model document. In contrary to {@link module:engine/model/node~Node nodes}, which are building blocks of
142
+ * the model document tree, markers are not stored directly in the document tree but in the
143
+ * {@link module:engine/model/model~Model#markers model markers' collection}. Still, they are document data, by giving
144
+ * additional meaning to the part of a model document between marker start and marker end.
145
+ *
146
+ * In this sense, markers are similar to adding and converting attributes on nodes. The difference is that attribute is
147
+ * connected with a given node (e.g. a character is bold no matter if it gets moved or content around it changes).
148
+ * Markers on the other hand are continuous ranges and are characterized by their start and end position. This means that
149
+ * any character in the marker is marked by the marker. For example, if a character is moved outside of marker it stops being
150
+ * "special" and the marker is shrunk. Similarly, when a character is moved into the marker from other place in document
151
+ * model, it starts being "special" and the marker is enlarged.
152
+ *
153
+ * Another upside of markers is that finding marked part of document is fast and easy. Using attributes to mark some nodes
154
+ * and then trying to find that part of document would require traversing whole document tree. Marker gives instant access
155
+ * to the range which it is marking at the moment.
156
+ *
157
+ * Markers are built from a name and a range.
158
+ *
159
+ * Range of the marker is updated automatically when document changes, using
160
+ * {@link module:engine/model/liverange~LiveRange live range} mechanism.
161
+ *
162
+ * Name is used to group and identify markers. Names have to be unique, but markers can be grouped by
163
+ * using common prefixes, separated with `:`, for example: `user:john` or `search:3`. That's useful in term of creating
164
+ * namespaces for custom elements (e.g. comments, highlights). You can use this prefixes in
165
+ * {@link module:engine/model/markercollection~MarkerCollection#event:update} listeners to listen on changes in a group of markers.
166
+ * For instance: `model.markers.on( 'update:user', callback );` will be called whenever any `user:*` markers changes.
167
+ *
168
+ * There are two types of markers.
169
+ *
170
+ * 1. Markers managed directly, without using operations. They are added directly by {@link module:engine/model/writer~Writer}
171
+ * to the {@link module:engine/model/markercollection~MarkerCollection} without any additional mechanism. They can be used
172
+ * as bookmarks or visual markers. They are great for showing results of the find, or select link when the focus is in the input.
173
+ *
174
+ * 1. Markers managed using operations. These markers are also stored in {@link module:engine/model/markercollection~MarkerCollection}
175
+ * but changes in these markers is managed the same way all other changes in the model structure - using operations.
176
+ * Therefore, they are handled in the undo stack and synchronized between clients if the collaboration plugin is enabled.
177
+ * This type of markers is useful for solutions like spell checking or comments.
178
+ *
179
+ * Both type of them should be added / updated by {@link module:engine/model/writer~Writer#addMarker}
180
+ * and removed by {@link module:engine/model/writer~Writer#removeMarker} methods.
181
+ *
182
+ * ```ts
183
+ * model.change( ( writer ) => {
184
+ * const marker = writer.addMarker( name, { range, usingOperation: true } );
185
+ *
186
+ * // ...
187
+ *
188
+ * writer.removeMarker( marker );
189
+ * } );
190
+ * ```
191
+ *
192
+ * See {@link module:engine/model/writer~Writer} to find more examples.
193
+ *
194
+ * Since markers need to track change in the document, for efficiency reasons, it is best to create and keep as little
195
+ * markers as possible and remove them as soon as they are not needed anymore.
196
+ *
197
+ * Markers can be downcasted and upcasted.
198
+ *
199
+ * Markers downcast happens on {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker} and
200
+ * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:removeMarker} events.
201
+ * Use {@link module:engine/conversion/downcasthelpers downcast converters} or attach a custom converter to mentioned events.
202
+ * For {@link module:engine/controller/datacontroller~DataController data pipeline}, marker should be downcasted to an element.
203
+ * Then, it can be upcasted back to a marker. Again, use {@link module:engine/conversion/upcasthelpers upcast converters} or
204
+ * attach a custom converter to {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#event:element}.
205
+ *
206
+ * `Marker` instances are created and destroyed only by {@link ~MarkerCollection MarkerCollection}.
207
+ */
208
+ declare class Marker extends Marker_base {
209
+ /**
210
+ * Marker's name.
211
+ */
212
+ readonly name: string;
213
+ /**
214
+ * Flag indicates if the marker is managed using operations or not.
215
+ *
216
+ * @internal
217
+ */
218
+ _managedUsingOperations: boolean;
219
+ /**
220
+ * Specifies whether the marker affects the data produced by the data pipeline
221
+ * (is persisted in the editor's data).
222
+ *
223
+ * @internal
224
+ */
225
+ _affectsData: boolean;
226
+ /**
227
+ * Range marked by the marker.
228
+ */
229
+ private _liveRange;
230
+ /**
231
+ * Creates a marker instance.
232
+ *
233
+ * @param name Marker name.
234
+ * @param liveRange Range marked by the marker.
235
+ * @param managedUsingOperations Specifies whether the marker is managed using operations.
236
+ * @param affectsData Specifies whether the marker affects the data produced by the data pipeline (is persisted in the editor's data).
237
+ */
238
+ constructor(name: string, liveRange: LiveRange, managedUsingOperations: boolean, affectsData: boolean);
239
+ /**
240
+ * A value indicating if the marker is managed using operations.
241
+ * See {@link ~Marker marker class description} to learn more about marker types.
242
+ * See {@link module:engine/model/writer~Writer#addMarker}.
243
+ */
244
+ get managedUsingOperations(): boolean;
245
+ /**
246
+ * A value indicating if the marker changes the data.
247
+ */
248
+ get affectsData(): boolean;
249
+ /**
250
+ * Returns the marker data (properties defining the marker).
251
+ */
252
+ getData(): MarkerData;
253
+ /**
254
+ * Returns current marker start position.
255
+ */
256
+ getStart(): Position;
257
+ /**
258
+ * Returns current marker end position.
259
+ */
260
+ getEnd(): Position;
261
+ /**
262
+ * Returns a range that represents the current state of the marker.
263
+ *
264
+ * Keep in mind that returned value is a {@link module:engine/model/range~Range Range}, not a
265
+ * {@link module:engine/model/liverange~LiveRange LiveRange}. This means that it is up-to-date and relevant only
266
+ * until next model document change. Do not store values returned by this method. Instead, store {@link ~Marker#name}
267
+ * and get `Marker` instance from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection} every
268
+ * time there is a need to read marker properties. This will guarantee that the marker has not been removed and
269
+ * that it's data is up-to-date.
270
+ */
271
+ getRange(): Range;
272
+ /**
273
+ * Binds new live range to the marker and detach the old one if is attached.
274
+ *
275
+ * @internal
276
+ * @param liveRange Live range to attach
277
+ * @returns Attached live range.
278
+ */
279
+ _attachLiveRange(liveRange: LiveRange): LiveRange;
280
+ /**
281
+ * Unbinds and destroys currently attached live range.
282
+ *
283
+ * @internal
284
+ */
285
+ _detachLiveRange(): void;
286
+ }
287
+ export type { Marker };
288
+ /**
289
+ * Fired whenever {@link ~Marker#_liveRange marker range} is changed due to changes on {@link module:engine/model/document~Document}.
290
+ * This is a delegated {@link module:engine/model/liverange~LiveRange#event:change:range LiveRange change:range event}.
291
+ *
292
+ * When marker is removed from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection},
293
+ * all event listeners listening to it should be removed. It is best to do it on
294
+ * {@link module:engine/model/markercollection~MarkerCollection#event:update MarkerCollection update event}.
295
+ *
296
+ * @see module:engine/model/liverange~LiveRange#event:change:range
297
+ * @eventName ~Marker#change:range
298
+ */
299
+ export type MarkerChangeRangeEvent = LiveRangeChangeRangeEvent;
300
+ /**
301
+ * Fired whenever change on {@link module:engine/model/document~Document} is done inside {@link ~Marker#_liveRange marker range}.
302
+ * This is a delegated {@link module:engine/model/liverange~LiveRange#event:change:content LiveRange change:content event}.
303
+ *
304
+ * When marker is removed from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection},
305
+ * all event listeners listening to it should be removed. It is best to do it on
306
+ * {@link module:engine/model/markercollection~MarkerCollection#event:update MarkerCollection update event}.
307
+ *
308
+ * @see module:engine/model/liverange~LiveRange#event:change:content
309
+ * @eventName ~Marker#change:content
310
+ */
311
+ export type MarkerCollectionChangeContentEvent = LiveRangeChangeContentEvent;
312
+ /**
313
+ * Describes `change:range` or `change:content` event.
314
+ */
315
+ export type MarkerChangeEvent = LiveRangeChangeEvent;
316
+ /**
317
+ * Fired whenever marker is added, updated or removed from `MarkerCollection`.
318
+ *
319
+ * @eventName ~MarkerCollection#update
320
+ * @param marker Updated Marker.
321
+ * @param oldRange Marker range before the update. When is not defined it
322
+ * means that marker is just added.
323
+ * @param newRange Marker range after update. When is not defined it
324
+ * means that marker is just removed.
325
+ * @param oldMarkerData Data of the marker before the change.
326
+ */
327
+ export type MarkerCollectionUpdateEvent = {
328
+ name: 'update' | `update:${string}`;
329
+ args: [marker: Marker, oldRange: Range | null, newRange: Range | null, oldMarkerData: MarkerData];
330
+ };
331
+ /**
332
+ * Cannot use a {@link module:engine/model/markercollection~MarkerCollection#destroy destroyed marker} instance.
333
+ *
334
+ * @error marker-destroyed
335
+ */