@ckeditor/ckeditor5-engine 35.4.0 → 36.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/LICENSE.md +1 -1
  2. package/package.json +22 -22
  3. package/src/controller/datacontroller.js +5 -1
  4. package/src/controller/editingcontroller.js +1 -1
  5. package/src/conversion/conversion.js +1 -1
  6. package/src/conversion/conversionhelpers.js +1 -1
  7. package/src/conversion/downcastdispatcher.js +1 -1
  8. package/src/conversion/downcasthelpers.js +1 -1
  9. package/src/conversion/mapper.js +1 -1
  10. package/src/conversion/modelconsumable.js +1 -1
  11. package/src/conversion/upcastdispatcher.js +1 -1
  12. package/src/conversion/upcasthelpers.js +8 -1
  13. package/src/conversion/viewconsumable.js +1 -1
  14. package/src/dataprocessor/basichtmlwriter.js +1 -1
  15. package/src/dataprocessor/dataprocessor.js +1 -1
  16. package/src/dataprocessor/htmldataprocessor.js +1 -2
  17. package/src/dataprocessor/htmlwriter.js +1 -1
  18. package/src/dataprocessor/xmldataprocessor.js +1 -1
  19. package/src/dev-utils/model.js +1 -1
  20. package/src/dev-utils/operationreplayer.js +1 -1
  21. package/src/dev-utils/utils.js +1 -1
  22. package/src/dev-utils/view.js +1 -1
  23. package/src/index.js +3 -2
  24. package/src/model/batch.js +9 -46
  25. package/src/model/differ.js +81 -174
  26. package/src/model/document.js +36 -92
  27. package/src/model/documentfragment.js +43 -96
  28. package/src/model/documentselection.js +151 -245
  29. package/src/model/element.js +47 -100
  30. package/src/model/history.js +15 -46
  31. package/src/model/item.js +1 -1
  32. package/src/model/liveposition.js +10 -36
  33. package/src/model/liverange.js +13 -36
  34. package/src/model/markercollection.js +40 -111
  35. package/src/model/model.js +212 -289
  36. package/src/model/node.js +35 -125
  37. package/src/model/nodelist.js +11 -39
  38. package/src/model/operation/attributeoperation.js +13 -44
  39. package/src/model/operation/detachoperation.js +3 -16
  40. package/src/model/operation/insertoperation.js +6 -34
  41. package/src/model/operation/markeroperation.js +9 -48
  42. package/src/model/operation/mergeoperation.js +8 -41
  43. package/src/model/operation/moveoperation.js +14 -37
  44. package/src/model/operation/nooperation.js +1 -7
  45. package/src/model/operation/operation.js +5 -63
  46. package/src/model/operation/operationfactory.js +3 -6
  47. package/src/model/operation/renameoperation.js +8 -28
  48. package/src/model/operation/rootattributeoperation.js +18 -47
  49. package/src/model/operation/splitoperation.js +9 -47
  50. package/src/model/operation/transform.js +109 -150
  51. package/src/model/operation/utils.js +36 -50
  52. package/src/model/position.js +117 -228
  53. package/src/model/range.js +145 -200
  54. package/src/model/rootelement.js +8 -47
  55. package/src/model/schema.js +236 -272
  56. package/src/model/selection.js +134 -192
  57. package/src/model/text.js +10 -37
  58. package/src/model/textproxy.js +15 -69
  59. package/src/model/treewalker.js +10 -101
  60. package/src/model/typecheckable.js +1 -1
  61. package/src/model/utils/autoparagraphing.js +11 -12
  62. package/src/model/utils/deletecontent.js +93 -62
  63. package/src/model/utils/findoptimalinsertionrange.js +24 -24
  64. package/src/model/utils/getselectedcontent.js +3 -6
  65. package/src/model/utils/insertcontent.js +36 -129
  66. package/src/model/utils/insertobject.js +19 -21
  67. package/src/model/utils/modifyselection.js +23 -33
  68. package/src/model/utils/selection-post-fixer.js +53 -59
  69. package/src/model/writer.js +208 -314
  70. package/src/view/attributeelement.js +1 -1
  71. package/src/view/containerelement.js +1 -1
  72. package/src/view/datatransfer.js +25 -28
  73. package/src/view/document.js +1 -17
  74. package/src/view/documentfragment.js +49 -1
  75. package/src/view/documentselection.js +1 -1
  76. package/src/view/domconverter.js +4 -3
  77. package/src/view/downcastwriter.js +1 -1
  78. package/src/view/editableelement.js +1 -1
  79. package/src/view/element.js +5 -5
  80. package/src/view/elementdefinition.js +1 -1
  81. package/src/view/emptyelement.js +1 -1
  82. package/src/view/filler.js +1 -1
  83. package/src/view/item.js +1 -1
  84. package/src/view/matcher.js +1 -1
  85. package/src/view/node.js +1 -1
  86. package/src/view/observer/arrowkeysobserver.js +1 -1
  87. package/src/view/observer/bubblingemittermixin.js +1 -1
  88. package/src/view/observer/bubblingeventinfo.js +1 -1
  89. package/src/view/observer/clickobserver.js +1 -1
  90. package/src/view/observer/compositionobserver.js +1 -1
  91. package/src/view/observer/domeventdata.js +1 -1
  92. package/src/view/observer/domeventobserver.js +1 -1
  93. package/src/view/observer/fakeselectionobserver.js +1 -1
  94. package/src/view/observer/focusobserver.js +22 -4
  95. package/src/view/observer/inputobserver.js +1 -1
  96. package/src/view/observer/keyobserver.js +1 -1
  97. package/src/view/observer/mouseobserver.js +1 -1
  98. package/src/view/observer/mutationobserver.js +1 -1
  99. package/src/view/observer/observer.js +1 -1
  100. package/src/view/observer/selectionobserver.js +13 -2
  101. package/src/view/observer/tabobserver.js +1 -1
  102. package/src/view/placeholder.js +1 -1
  103. package/src/view/position.js +1 -1
  104. package/src/view/range.js +1 -1
  105. package/src/view/rawelement.js +1 -1
  106. package/src/view/renderer.js +1 -14
  107. package/src/view/rooteditableelement.js +1 -1
  108. package/src/view/selection.js +1 -1
  109. package/src/view/styles/background.js +1 -1
  110. package/src/view/styles/border.js +1 -1
  111. package/src/view/styles/margin.js +1 -1
  112. package/src/view/styles/padding.js +1 -1
  113. package/src/view/styles/utils.js +1 -1
  114. package/src/view/stylesmap.js +1 -1
  115. package/src/view/text.js +1 -1
  116. package/src/view/textproxy.js +1 -1
  117. package/src/view/treewalker.js +1 -1
  118. package/src/view/typecheckable.js +1 -1
  119. package/src/view/uielement.js +1 -1
  120. package/src/view/upcastwriter.js +1 -1
  121. package/src/view/view.js +5 -5
  122. package/theme/placeholder.css +1 -1
  123. package/theme/renderer.css +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
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
5
  /**
@@ -23,16 +23,10 @@ import { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';
23
23
  * @see module:engine/model/markercollection~Marker
24
24
  */
25
25
  export default class MarkerCollection extends EmitterMixin() {
26
- /**
27
- * Creates a markers collection.
28
- */
29
26
  constructor() {
30
- super();
27
+ super(...arguments);
31
28
  /**
32
29
  * Stores {@link ~Marker markers} added to the collection.
33
- *
34
- * @private
35
- * @member {Map} #_markers
36
30
  */
37
31
  this._markers = new Map();
38
32
  }
@@ -40,8 +34,6 @@ export default class MarkerCollection extends EmitterMixin() {
40
34
  * Iterable interface.
41
35
  *
42
36
  * Iterates over all {@link ~Marker markers} added to the collection.
43
- *
44
- * @returns {Iterator}
45
37
  */
46
38
  [Symbol.iterator]() {
47
39
  return this._markers.values();
@@ -49,8 +41,8 @@ export default class MarkerCollection extends EmitterMixin() {
49
41
  /**
50
42
  * Checks if given {@link ~Marker marker} or marker name is in the collection.
51
43
  *
52
- * @param {String|module:engine/model/markercollection~Marker} markerOrName Name of marker or marker instance to check.
53
- * @returns {Boolean} `true` if marker is in the collection, `false` otherwise.
44
+ * @param markerOrName Name of marker or marker instance to check.
45
+ * @returns `true` if marker is in the collection, `false` otherwise.
54
46
  */
55
47
  has(markerOrName) {
56
48
  const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;
@@ -59,8 +51,8 @@ export default class MarkerCollection extends EmitterMixin() {
59
51
  /**
60
52
  * Returns {@link ~Marker marker} with given `markerName`.
61
53
  *
62
- * @param {String} markerName Name of marker to get.
63
- * @returns {module:engine/model/markercollection~Marker|null} Marker with given name or `null` if such marker was
54
+ * @param markerName Name of marker to get.
55
+ * @returns Marker with given name or `null` if such marker was
64
56
  * not added to the collection.
65
57
  */
66
58
  get(markerName) {
@@ -76,14 +68,13 @@ export default class MarkerCollection extends EmitterMixin() {
76
68
  * flag has changed.
77
69
  *
78
70
  * @internal
79
- * @protected
80
- * @fires module:engine/model/markercollection~MarkerCollection#event:update
81
- * @param {String|module:engine/model/markercollection~Marker} markerOrName Name of marker to set or marker instance to update.
82
- * @param {module:engine/model/range~Range} range Marker range.
83
- * @param {Boolean} [managedUsingOperations=false] Specifies whether the marker is managed using operations.
84
- * @param {Boolean} [affectsData=false] Specifies whether the marker affects the data produced by the data pipeline
71
+ * @fires update
72
+ * @param markerOrName Name of marker to set or marker instance to update.
73
+ * @param range Marker range.
74
+ * @param managedUsingOperations Specifies whether the marker is managed using operations.
75
+ * @param affectsData Specifies whether the marker affects the data produced by the data pipeline
85
76
  * (is persisted in the editor's data).
86
- * @returns {module:engine/model/markercollection~Marker} `Marker` instance which was added or updated.
77
+ * @returns `Marker` instance which was added or updated.
87
78
  */
88
79
  _set(markerOrName, range, managedUsingOperations = false, affectsData = false) {
89
80
  const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;
@@ -127,10 +118,9 @@ export default class MarkerCollection extends EmitterMixin() {
127
118
  * Removes given {@link ~Marker marker} or a marker with given name from the `MarkerCollection`.
128
119
  *
129
120
  * @internal
130
- * @protected
131
- * @fires module:engine/model/markercollection~MarkerCollection#event:update
132
- * @param {String|module:engine/model/markercollection~Marker} markerOrName Marker or name of a marker to remove.
133
- * @returns {Boolean} `true` if marker was found and removed, `false` otherwise.
121
+ * @fires update
122
+ * @param markerOrName Marker or name of a marker to remove.
123
+ * @returns `true` if marker was found and removed, `false` otherwise.
134
124
  */
135
125
  _remove(markerOrName) {
136
126
  const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;
@@ -149,9 +139,8 @@ export default class MarkerCollection extends EmitterMixin() {
149
139
  * conversion} for the marker.
150
140
  *
151
141
  * @internal
152
- * @protected
153
- * @fires module:engine/model/markercollection~MarkerCollection#event:update
154
- * @param {String|module:engine/model/markercollection~Marker} markerOrName Marker or name of a marker to refresh.
142
+ * @fires update
143
+ * @param markerOrName Marker or name of a marker to refresh.
155
144
  */
156
145
  _refresh(markerOrName) {
157
146
  const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;
@@ -169,9 +158,6 @@ export default class MarkerCollection extends EmitterMixin() {
169
158
  }
170
159
  /**
171
160
  * Returns iterator that iterates over all markers, which ranges contain given {@link module:engine/model/position~Position position}.
172
- *
173
- * @param {module:engine/model/position~Position} position
174
- * @returns {Iterable.<module:engine/model/markercollection~Marker>}
175
161
  */
176
162
  *getMarkersAtPosition(position) {
177
163
  for (const marker of this) {
@@ -182,9 +168,6 @@ export default class MarkerCollection extends EmitterMixin() {
182
168
  }
183
169
  /**
184
170
  * Returns iterator that iterates over all markers, which intersects with given {@link module:engine/model/range~Range range}.
185
- *
186
- * @param {module:engine/model/range~Range} range
187
- * @returns {Iterable.<module:engine/model/markercollection~Marker>}
188
171
  */
189
172
  *getMarkersIntersectingRange(range) {
190
173
  for (const marker of this) {
@@ -206,15 +189,14 @@ export default class MarkerCollection extends EmitterMixin() {
206
189
  /**
207
190
  * Iterates over all markers that starts with given `prefix`.
208
191
  *
209
- * const markerFooA = markersCollection.set( 'foo:a', rangeFooA );
210
- * const markerFooB = markersCollection.set( 'foo:b', rangeFooB );
211
- * const markerBarA = markersCollection.set( 'bar:a', rangeBarA );
212
- * const markerFooBarA = markersCollection.set( 'foobar:a', rangeFooBarA );
213
- * Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]
214
- * Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []
215
- *
216
- * @param prefix
217
- * @returns {Iterable.<module:engine/model/markercollection~Marker>}
192
+ * ```ts
193
+ * const markerFooA = markersCollection.set( 'foo:a', rangeFooA );
194
+ * const markerFooB = markersCollection.set( 'foo:b', rangeFooB );
195
+ * const markerBarA = markersCollection.set( 'bar:a', rangeBarA );
196
+ * const markerFooBarA = markersCollection.set( 'foobar:a', rangeFooBarA );
197
+ * Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]
198
+ * Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []
199
+ * ```
218
200
  */
219
201
  *getMarkersGroup(prefix) {
220
202
  for (const marker of this._markers.values()) {
@@ -225,9 +207,6 @@ export default class MarkerCollection extends EmitterMixin() {
225
207
  }
226
208
  /**
227
209
  * Destroys the marker.
228
- *
229
- * @private
230
- * @param {module:engine/model/markercollection~Marker} marker Marker to destroy.
231
210
  */
232
211
  _destroyMarker(marker) {
233
212
  marker.stopListening();
@@ -277,13 +256,15 @@ export default class MarkerCollection extends EmitterMixin() {
277
256
  * Both type of them should be added / updated by {@link module:engine/model/writer~Writer#addMarker}
278
257
  * and removed by {@link module:engine/model/writer~Writer#removeMarker} methods.
279
258
  *
280
- * model.change( ( writer ) => {
281
- * const marker = writer.addMarker( name, { range, usingOperation: true } );
259
+ * ```ts
260
+ * model.change( ( writer ) => {
261
+ * const marker = writer.addMarker( name, { range, usingOperation: true } );
282
262
  *
283
- * // ...
263
+ * // ...
284
264
  *
285
- * writer.removeMarker( marker );
286
- * } );
265
+ * writer.removeMarker( marker );
266
+ * } );
267
+ * ```
287
268
  *
288
269
  * See {@link module:engine/model/writer~Writer} to find more examples.
289
270
  *
@@ -305,50 +286,22 @@ class Marker extends EmitterMixin(TypeCheckable) {
305
286
  /**
306
287
  * Creates a marker instance.
307
288
  *
308
- * @param {String} name Marker name.
309
- * @param {module:engine/model/liverange~LiveRange} liveRange Range marked by the marker.
310
- * @param {Boolean} managedUsingOperations Specifies whether the marker is managed using operations.
311
- * @param {Boolean} affectsData Specifies whether the marker affects the data produced by the data pipeline
312
- * (is persisted in the editor's data).
289
+ * @param name Marker name.
290
+ * @param liveRange Range marked by the marker.
291
+ * @param managedUsingOperations Specifies whether the marker is managed using operations.
292
+ * @param affectsData Specifies whether the marker affects the data produced by the data pipeline (is persisted in the editor's data).
313
293
  */
314
294
  constructor(name, liveRange, managedUsingOperations, affectsData) {
315
295
  super();
316
- /**
317
- * Marker's name.
318
- *
319
- * @readonly
320
- * @type {String}
321
- */
322
296
  this.name = name;
323
- /**
324
- * Range marked by the marker.
325
- *
326
- * @protected
327
- * @member {module:engine/model/liverange~LiveRange}
328
- */
329
297
  this._liveRange = this._attachLiveRange(liveRange);
330
- /**
331
- * Flag indicates if the marker is managed using operations or not.
332
- *
333
- * @private
334
- * @member {Boolean}
335
- */
336
298
  this._managedUsingOperations = managedUsingOperations;
337
- /**
338
- * Specifies whether the marker affects the data produced by the data pipeline
339
- * (is persisted in the editor's data).
340
- *
341
- * @private
342
- * @member {Boolean}
343
- */
344
299
  this._affectsData = affectsData;
345
300
  }
346
301
  /**
347
302
  * A value indicating if the marker is managed using operations.
348
303
  * See {@link ~Marker marker class description} to learn more about marker types.
349
304
  * See {@link module:engine/model/writer~Writer#addMarker}.
350
- *
351
- * @returns {Boolean}
352
305
  */
353
306
  get managedUsingOperations() {
354
307
  if (!this._liveRange) {
@@ -358,8 +311,6 @@ class Marker extends EmitterMixin(TypeCheckable) {
358
311
  }
359
312
  /**
360
313
  * A value indicating if the marker changes the data.
361
- *
362
- * @returns {Boolean}
363
314
  */
364
315
  get affectsData() {
365
316
  if (!this._liveRange) {
@@ -369,8 +320,6 @@ class Marker extends EmitterMixin(TypeCheckable) {
369
320
  }
370
321
  /**
371
322
  * Returns the marker data (properties defining the marker).
372
- *
373
- * @returns {module:engine/model/markercollection~MarkerData}
374
323
  */
375
324
  getData() {
376
325
  return {
@@ -381,8 +330,6 @@ class Marker extends EmitterMixin(TypeCheckable) {
381
330
  }
382
331
  /**
383
332
  * Returns current marker start position.
384
- *
385
- * @returns {module:engine/model/position~Position}
386
333
  */
387
334
  getStart() {
388
335
  if (!this._liveRange) {
@@ -392,8 +339,6 @@ class Marker extends EmitterMixin(TypeCheckable) {
392
339
  }
393
340
  /**
394
341
  * Returns current marker end position.
395
- *
396
- * @returns {module:engine/model/position~Position}
397
342
  */
398
343
  getEnd() {
399
344
  if (!this._liveRange) {
@@ -410,8 +355,6 @@ class Marker extends EmitterMixin(TypeCheckable) {
410
355
  * and get `Marker` instance from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection} every
411
356
  * time there is a need to read marker properties. This will guarantee that the marker has not been removed and
412
357
  * that it's data is up-to-date.
413
- *
414
- * @returns {module:engine/model/range~Range}
415
358
  */
416
359
  getRange() {
417
360
  if (!this._liveRange) {
@@ -423,9 +366,8 @@ class Marker extends EmitterMixin(TypeCheckable) {
423
366
  * Binds new live range to the marker and detach the old one if is attached.
424
367
  *
425
368
  * @internal
426
- * @protected
427
- * @param {module:engine/model/liverange~LiveRange} liveRange Live range to attach
428
- * @returns {module:engine/model/liverange~LiveRange} Attached live range.
369
+ * @param liveRange Live range to attach
370
+ * @returns Attached live range.
429
371
  */
430
372
  _attachLiveRange(liveRange) {
431
373
  if (this._liveRange) {
@@ -441,7 +383,6 @@ class Marker extends EmitterMixin(TypeCheckable) {
441
383
  * Unbinds and destroys currently attached live range.
442
384
  *
443
385
  * @internal
444
- * @protected
445
386
  */
446
387
  _detachLiveRange() {
447
388
  this._liveRange.stopDelegating('change:range', this);
@@ -450,20 +391,8 @@ class Marker extends EmitterMixin(TypeCheckable) {
450
391
  this._liveRange = null;
451
392
  }
452
393
  }
453
- /**
454
- * Checks whether this object is of the given.
455
- *
456
- * marker.is( 'marker' ); // -> true
457
- * marker.is( 'model:marker' ); // -> true
458
- *
459
- * marker.is( 'view:element' ); // -> false
460
- * marker.is( 'documentSelection' ); // -> false
461
- *
462
- * {@link module:engine/model/node~Node#is Check the entire list of model objects} which implement the `is()` method.
463
- *
464
- * @param {String} type
465
- * @returns {Boolean}
466
- */
394
+ // The magic of type inference using `is` method is centralized in `TypeCheckable` class.
395
+ // Proper overload would interfere with that.
467
396
  Marker.prototype.is = function (type) {
468
397
  return type === 'marker' || type === 'model:marker';
469
398
  };