@ckeditor/ckeditor5-engine 35.4.0 → 36.0.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.
- package/LICENSE.md +1 -1
- package/package.json +22 -22
- package/src/controller/datacontroller.js +5 -1
- package/src/controller/editingcontroller.js +1 -1
- package/src/conversion/conversion.js +1 -1
- package/src/conversion/conversionhelpers.js +1 -1
- package/src/conversion/downcastdispatcher.js +1 -1
- package/src/conversion/downcasthelpers.js +1 -1
- package/src/conversion/mapper.js +1 -1
- package/src/conversion/modelconsumable.js +1 -1
- package/src/conversion/upcastdispatcher.js +1 -1
- package/src/conversion/upcasthelpers.js +8 -1
- package/src/conversion/viewconsumable.js +1 -1
- package/src/dataprocessor/basichtmlwriter.js +1 -1
- package/src/dataprocessor/dataprocessor.js +1 -1
- package/src/dataprocessor/htmldataprocessor.js +1 -2
- package/src/dataprocessor/htmlwriter.js +1 -1
- package/src/dataprocessor/xmldataprocessor.js +1 -1
- package/src/dev-utils/model.js +1 -1
- package/src/dev-utils/operationreplayer.js +1 -1
- package/src/dev-utils/utils.js +1 -1
- package/src/dev-utils/view.js +1 -1
- package/src/index.js +3 -2
- package/src/model/batch.js +9 -46
- package/src/model/differ.js +81 -174
- package/src/model/document.js +36 -92
- package/src/model/documentfragment.js +43 -96
- package/src/model/documentselection.js +151 -245
- package/src/model/element.js +47 -100
- package/src/model/history.js +15 -46
- package/src/model/item.js +1 -1
- package/src/model/liveposition.js +10 -36
- package/src/model/liverange.js +13 -36
- package/src/model/markercollection.js +40 -111
- package/src/model/model.js +212 -289
- package/src/model/node.js +35 -125
- package/src/model/nodelist.js +11 -39
- package/src/model/operation/attributeoperation.js +13 -44
- package/src/model/operation/detachoperation.js +3 -16
- package/src/model/operation/insertoperation.js +6 -34
- package/src/model/operation/markeroperation.js +9 -48
- package/src/model/operation/mergeoperation.js +8 -41
- package/src/model/operation/moveoperation.js +14 -37
- package/src/model/operation/nooperation.js +1 -7
- package/src/model/operation/operation.js +5 -63
- package/src/model/operation/operationfactory.js +3 -6
- package/src/model/operation/renameoperation.js +8 -28
- package/src/model/operation/rootattributeoperation.js +18 -47
- package/src/model/operation/splitoperation.js +9 -47
- package/src/model/operation/transform.js +109 -150
- package/src/model/operation/utils.js +36 -50
- package/src/model/position.js +117 -228
- package/src/model/range.js +145 -200
- package/src/model/rootelement.js +8 -47
- package/src/model/schema.js +236 -272
- package/src/model/selection.js +134 -192
- package/src/model/text.js +10 -37
- package/src/model/textproxy.js +15 -69
- package/src/model/treewalker.js +10 -101
- package/src/model/typecheckable.js +1 -1
- package/src/model/utils/autoparagraphing.js +11 -12
- package/src/model/utils/deletecontent.js +93 -62
- package/src/model/utils/findoptimalinsertionrange.js +24 -24
- package/src/model/utils/getselectedcontent.js +3 -6
- package/src/model/utils/insertcontent.js +36 -129
- package/src/model/utils/insertobject.js +19 -21
- package/src/model/utils/modifyselection.js +23 -33
- package/src/model/utils/selection-post-fixer.js +53 -59
- package/src/model/writer.js +208 -314
- package/src/view/attributeelement.js +1 -1
- package/src/view/containerelement.js +1 -1
- package/src/view/datatransfer.js +1 -1
- package/src/view/document.js +1 -17
- package/src/view/documentfragment.js +49 -1
- package/src/view/documentselection.js +1 -1
- package/src/view/domconverter.js +4 -3
- package/src/view/downcastwriter.js +1 -1
- package/src/view/editableelement.js +1 -1
- package/src/view/element.js +5 -5
- package/src/view/elementdefinition.js +1 -1
- package/src/view/emptyelement.js +1 -1
- package/src/view/filler.js +1 -1
- package/src/view/item.js +1 -1
- package/src/view/matcher.js +1 -1
- package/src/view/node.js +1 -1
- package/src/view/observer/arrowkeysobserver.js +1 -1
- package/src/view/observer/bubblingemittermixin.js +1 -1
- package/src/view/observer/bubblingeventinfo.js +1 -1
- package/src/view/observer/clickobserver.js +1 -1
- package/src/view/observer/compositionobserver.js +1 -1
- package/src/view/observer/domeventdata.js +1 -1
- package/src/view/observer/domeventobserver.js +1 -1
- package/src/view/observer/fakeselectionobserver.js +1 -1
- package/src/view/observer/focusobserver.js +22 -4
- package/src/view/observer/inputobserver.js +1 -1
- package/src/view/observer/keyobserver.js +1 -1
- package/src/view/observer/mouseobserver.js +1 -1
- package/src/view/observer/mutationobserver.js +1 -1
- package/src/view/observer/observer.js +1 -1
- package/src/view/observer/selectionobserver.js +13 -2
- package/src/view/observer/tabobserver.js +1 -1
- package/src/view/placeholder.js +1 -1
- package/src/view/position.js +1 -1
- package/src/view/range.js +1 -1
- package/src/view/rawelement.js +1 -1
- package/src/view/renderer.js +1 -14
- package/src/view/rooteditableelement.js +1 -1
- package/src/view/selection.js +1 -1
- package/src/view/styles/background.js +1 -1
- package/src/view/styles/border.js +1 -1
- package/src/view/styles/margin.js +1 -1
- package/src/view/styles/padding.js +1 -1
- package/src/view/styles/utils.js +1 -1
- package/src/view/stylesmap.js +1 -1
- package/src/view/text.js +1 -1
- package/src/view/textproxy.js +1 -1
- package/src/view/treewalker.js +1 -1
- package/src/view/typecheckable.js +1 -1
- package/src/view/uielement.js +1 -1
- package/src/view/upcastwriter.js +1 -1
- package/src/view/view.js +5 -5
- package/theme/placeholder.css +1 -1
- package/theme/renderer.css +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Copyright (c) 2003-
|
|
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
|
|
53
|
-
* @returns
|
|
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
|
|
63
|
-
* @returns
|
|
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
|
-
* @
|
|
80
|
-
* @
|
|
81
|
-
* @param
|
|
82
|
-
* @param
|
|
83
|
-
* @param
|
|
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
|
|
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
|
-
* @
|
|
131
|
-
* @
|
|
132
|
-
* @
|
|
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
|
-
* @
|
|
153
|
-
* @
|
|
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
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
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
|
-
*
|
|
281
|
-
*
|
|
259
|
+
* ```ts
|
|
260
|
+
* model.change( ( writer ) => {
|
|
261
|
+
* const marker = writer.addMarker( name, { range, usingOperation: true } );
|
|
282
262
|
*
|
|
283
|
-
*
|
|
263
|
+
* // ...
|
|
284
264
|
*
|
|
285
|
-
*
|
|
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
|
|
309
|
-
* @param
|
|
310
|
-
* @param
|
|
311
|
-
* @param
|
|
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
|
-
* @
|
|
427
|
-
* @
|
|
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
|
-
|
|
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
|
};
|