@ckeditor/ckeditor5-engine 45.2.1-alpha.9 → 46.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.
- package/dist/index.js +2563 -2257
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/controller/datacontroller.d.ts +33 -32
- package/src/controller/datacontroller.js +29 -28
- package/src/controller/editingcontroller.d.ts +8 -8
- package/src/controller/editingcontroller.js +10 -10
- package/src/conversion/conversion.d.ts +18 -19
- package/src/conversion/conversion.js +4 -4
- package/src/conversion/conversionhelpers.d.ts +1 -1
- package/src/conversion/conversionhelpers.js +1 -1
- package/src/conversion/downcastdispatcher.d.ts +63 -69
- package/src/conversion/downcastdispatcher.js +16 -16
- package/src/conversion/downcasthelpers.d.ts +94 -83
- package/src/conversion/downcasthelpers.js +63 -53
- package/src/conversion/mapper.d.ts +27 -27
- package/src/conversion/mapper.js +15 -15
- package/src/conversion/modelconsumable.d.ts +26 -26
- package/src/conversion/modelconsumable.js +23 -23
- package/src/conversion/upcastdispatcher.d.ts +33 -32
- package/src/conversion/upcastdispatcher.js +19 -19
- package/src/conversion/upcasthelpers.d.ts +46 -38
- package/src/conversion/upcasthelpers.js +33 -24
- package/src/conversion/viewconsumable.d.ts +50 -45
- package/src/conversion/viewconsumable.js +32 -27
- package/src/dataprocessor/basichtmlwriter.d.ts +4 -2
- package/src/dataprocessor/basichtmlwriter.js +3 -1
- package/src/dataprocessor/dataprocessor.d.ts +7 -6
- package/src/dataprocessor/htmldataprocessor.d.ts +10 -10
- package/src/dataprocessor/htmldataprocessor.js +6 -6
- package/src/dataprocessor/htmlwriter.d.ts +1 -1
- package/src/dataprocessor/xmldataprocessor.d.ts +10 -10
- package/src/dataprocessor/xmldataprocessor.js +6 -6
- package/src/dev-utils/model.d.ts +25 -26
- package/src/dev-utils/model.js +35 -36
- package/src/dev-utils/operationreplayer.d.ts +5 -3
- package/src/dev-utils/operationreplayer.js +4 -2
- package/src/dev-utils/utils.d.ts +8 -0
- package/src/dev-utils/utils.js +8 -0
- package/src/dev-utils/view.d.ts +66 -63
- package/src/dev-utils/view.js +144 -134
- package/src/index.d.ts +135 -106
- package/src/index.js +120 -71
- package/src/legacyerrors.d.ts +5 -0
- package/src/legacyerrors.js +17 -0
- package/src/model/batch.d.ts +2 -15
- package/src/model/batch.js +1 -23
- package/src/model/differ.d.ts +54 -31
- package/src/model/differ.js +15 -15
- package/src/model/document.d.ts +31 -31
- package/src/model/document.js +13 -13
- package/src/model/documentfragment.d.ts +45 -45
- package/src/model/documentfragment.js +40 -40
- package/src/model/documentselection.d.ts +92 -92
- package/src/model/documentselection.js +71 -70
- package/src/model/element.d.ts +31 -31
- package/src/model/element.js +29 -29
- package/src/model/history.d.ts +3 -3
- package/src/model/history.js +2 -2
- package/src/model/item.d.ts +4 -5
- package/src/model/liveposition.d.ts +31 -31
- package/src/model/liveposition.js +18 -18
- package/src/model/liverange.d.ts +42 -38
- package/src/model/liverange.js +17 -16
- package/src/model/markercollection.d.ts +41 -40
- package/src/model/markercollection.js +22 -20
- package/src/model/model.d.ts +82 -81
- package/src/model/model.js +54 -54
- package/src/model/node.d.ts +48 -48
- package/src/model/node.js +31 -31
- package/src/model/nodelist.d.ts +17 -17
- package/src/model/nodelist.js +11 -11
- package/src/model/operation/attributeoperation.d.ts +10 -10
- package/src/model/operation/attributeoperation.js +7 -7
- package/src/model/operation/detachoperation.d.ts +11 -9
- package/src/model/operation/detachoperation.js +8 -6
- package/src/model/operation/insertoperation.d.ts +13 -13
- package/src/model/operation/insertoperation.js +15 -15
- package/src/model/operation/markeroperation.d.ts +12 -12
- package/src/model/operation/markeroperation.js +5 -5
- package/src/model/operation/mergeoperation.d.ts +16 -16
- package/src/model/operation/mergeoperation.js +18 -18
- package/src/model/operation/moveoperation.d.ts +16 -16
- package/src/model/operation/moveoperation.js +18 -15
- package/src/model/operation/nooperation.d.ts +4 -4
- package/src/model/operation/nooperation.js +2 -2
- package/src/model/operation/operation.d.ts +10 -10
- package/src/model/operation/operation.js +5 -5
- package/src/model/operation/operationfactory.d.ts +4 -4
- package/src/model/operation/operationfactory.js +12 -12
- package/src/model/operation/renameoperation.d.ts +10 -10
- package/src/model/operation/renameoperation.js +7 -7
- package/src/model/operation/rootattributeoperation.d.ts +12 -12
- package/src/model/operation/rootattributeoperation.js +8 -8
- package/src/model/operation/rootoperation.d.ts +8 -8
- package/src/model/operation/rootoperation.js +3 -3
- package/src/model/operation/splitoperation.d.ts +17 -17
- package/src/model/operation/splitoperation.js +19 -19
- package/src/model/operation/transform.d.ts +11 -8
- package/src/model/operation/transform.js +66 -49
- package/src/model/operation/utils.d.ts +24 -23
- package/src/model/operation/utils.js +20 -20
- package/src/model/position.d.ts +101 -97
- package/src/model/position.js +69 -64
- package/src/model/range.d.ts +90 -90
- package/src/model/range.js +87 -87
- package/src/model/rootelement.d.ts +11 -11
- package/src/model/rootelement.js +9 -9
- package/src/model/schema.d.ts +158 -154
- package/src/model/schema.js +93 -90
- package/src/model/selection.d.ts +73 -73
- package/src/model/selection.js +62 -62
- package/src/model/text.d.ts +11 -10
- package/src/model/text.js +11 -10
- package/src/model/textproxy.d.ts +39 -38
- package/src/model/textproxy.js +31 -30
- package/src/model/treewalker.d.ts +37 -37
- package/src/model/treewalker.js +14 -14
- package/src/model/typecheckable.d.ts +45 -45
- package/src/model/typecheckable.js +1 -1
- package/src/model/utils/autoparagraphing.d.ts +7 -7
- package/src/model/utils/deletecontent.d.ts +7 -5
- package/src/model/utils/deletecontent.js +13 -11
- package/src/model/utils/getselectedcontent.d.ts +6 -5
- package/src/model/utils/getselectedcontent.js +2 -1
- package/src/model/utils/insertcontent.d.ts +9 -8
- package/src/model/utils/insertcontent.js +41 -40
- package/src/model/utils/insertobject.d.ts +9 -9
- package/src/model/utils/insertobject.js +4 -4
- package/src/model/utils/modifyselection.d.ts +5 -4
- package/src/model/utils/modifyselection.js +12 -11
- package/src/model/utils/selection-post-fixer.d.ts +12 -8
- package/src/model/utils/selection-post-fixer.js +15 -11
- package/src/model/writer.d.ts +102 -101
- package/src/model/writer.js +99 -98
- package/src/view/attributeelement.d.ts +29 -29
- package/src/view/attributeelement.js +25 -25
- package/src/view/containerelement.d.ts +16 -15
- package/src/view/containerelement.js +15 -14
- package/src/view/datatransfer.d.ts +7 -7
- package/src/view/datatransfer.js +1 -1
- package/src/view/document.d.ts +25 -25
- package/src/view/document.js +15 -15
- package/src/view/documentfragment.d.ts +21 -21
- package/src/view/documentfragment.js +14 -14
- package/src/view/documentselection.d.ts +65 -63
- package/src/view/documentselection.js +27 -25
- package/src/view/domconverter.d.ts +94 -89
- package/src/view/domconverter.js +78 -73
- package/src/view/downcastwriter.d.ts +185 -181
- package/src/view/downcastwriter.js +222 -210
- package/src/view/editableelement.d.ts +13 -13
- package/src/view/editableelement.js +8 -8
- package/src/view/element.d.ts +75 -74
- package/src/view/element.js +58 -58
- package/src/view/elementdefinition.d.ts +3 -4
- package/src/view/emptyelement.d.ts +13 -13
- package/src/view/emptyelement.js +13 -13
- package/src/view/filler.d.ts +14 -3
- package/src/view/filler.js +12 -1
- package/src/view/item.d.ts +4 -5
- package/src/view/matcher.d.ts +22 -19
- package/src/view/matcher.js +6 -6
- package/src/view/node.d.ts +33 -33
- package/src/view/node.js +9 -9
- package/src/view/observer/arrowkeysobserver.d.ts +10 -10
- package/src/view/observer/arrowkeysobserver.js +5 -5
- package/src/view/observer/bubblingemittermixin.d.ts +5 -5
- package/src/view/observer/bubblingemittermixin.js +2 -9
- package/src/view/observer/bubblingeventinfo.d.ts +9 -9
- package/src/view/observer/bubblingeventinfo.js +1 -1
- package/src/view/observer/clickobserver.d.ts +8 -8
- package/src/view/observer/clickobserver.js +4 -4
- package/src/view/observer/compositionobserver.d.ts +19 -19
- package/src/view/observer/compositionobserver.js +6 -6
- package/src/view/observer/domeventdata.d.ts +9 -9
- package/src/view/observer/domeventdata.js +2 -2
- package/src/view/observer/domeventobserver.d.ts +3 -3
- package/src/view/observer/domeventobserver.js +5 -5
- package/src/view/observer/fakeselectionobserver.d.ts +9 -9
- package/src/view/observer/fakeselectionobserver.js +8 -8
- package/src/view/observer/focusobserver.d.ts +16 -16
- package/src/view/observer/focusobserver.js +7 -7
- package/src/view/observer/inputobserver.d.ts +18 -18
- package/src/view/observer/inputobserver.js +5 -5
- package/src/view/observer/keyobserver.d.ts +11 -11
- package/src/view/observer/keyobserver.js +3 -3
- package/src/view/observer/mouseobserver.d.ts +16 -16
- package/src/view/observer/mouseobserver.js +3 -3
- package/src/view/observer/mutationobserver.d.ts +21 -21
- package/src/view/observer/mutationobserver.js +7 -7
- package/src/view/observer/observer.d.ts +12 -12
- package/src/view/observer/observer.js +6 -6
- package/src/view/observer/selectionobserver.d.ts +33 -33
- package/src/view/observer/selectionobserver.js +14 -14
- package/src/view/observer/tabobserver.d.ts +10 -10
- package/src/view/observer/tabobserver.js +5 -5
- package/src/view/observer/touchobserver.d.ts +13 -13
- package/src/view/observer/touchobserver.js +3 -3
- package/src/view/placeholder.d.ts +21 -21
- package/src/view/placeholder.js +23 -23
- package/src/view/position.d.ts +49 -49
- package/src/view/position.js +42 -42
- package/src/view/range.d.ts +76 -74
- package/src/view/range.js +67 -65
- package/src/view/rawelement.d.ts +19 -19
- package/src/view/rawelement.js +16 -16
- package/src/view/renderer.d.ts +14 -14
- package/src/view/renderer.js +7 -7
- package/src/view/rooteditableelement.d.ts +8 -7
- package/src/view/rooteditableelement.js +7 -6
- package/src/view/selection.d.ts +66 -64
- package/src/view/selection.js +50 -48
- package/src/view/styles/background.d.ts +2 -2
- package/src/view/styles/background.js +9 -9
- package/src/view/styles/border.d.ts +2 -2
- package/src/view/styles/border.js +13 -13
- package/src/view/styles/margin.d.ts +2 -2
- package/src/view/styles/margin.js +5 -5
- package/src/view/styles/padding.d.ts +2 -2
- package/src/view/styles/padding.js +5 -5
- package/src/view/styles/utils.d.ts +24 -24
- package/src/view/styles/utils.js +25 -25
- package/src/view/stylesmap.d.ts +28 -32
- package/src/view/stylesmap.js +52 -39
- package/src/view/text.d.ts +11 -11
- package/src/view/text.js +10 -10
- package/src/view/textproxy.d.ts +33 -32
- package/src/view/textproxy.js +23 -22
- package/src/view/tokenlist.d.ts +14 -14
- package/src/view/tokenlist.js +10 -10
- package/src/view/treewalker.d.ts +42 -40
- package/src/view/treewalker.js +36 -35
- package/src/view/typecheckable.d.ts +76 -75
- package/src/view/typecheckable.js +1 -1
- package/src/view/uielement.d.ts +22 -21
- package/src/view/uielement.js +17 -16
- package/src/view/upcastwriter.d.ts +70 -70
- package/src/view/upcastwriter.js +42 -42
- package/src/view/view.d.ts +70 -69
- package/src/view/view.js +56 -55
package/src/view/position.js
CHANGED
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module engine/view/position
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
8
|
+
import { ViewTypeCheckable } from './typecheckable.js';
|
|
9
9
|
import { CKEditorError, compareArrays } from '@ckeditor/ckeditor5-utils';
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
10
|
+
import { ViewEditableElement } from './editableelement.js';
|
|
11
|
+
import { ViewTreeWalker } from './treewalker.js';
|
|
12
12
|
/**
|
|
13
13
|
* Position in the view tree. Position is represented by its parent node and an offset in this parent.
|
|
14
14
|
*
|
|
15
15
|
* In order to create a new position instance use the `createPosition*()` factory methods available in:
|
|
16
16
|
*
|
|
17
|
-
* * {@link module:engine/view/view~
|
|
18
|
-
* * {@link module:engine/view/downcastwriter~
|
|
19
|
-
* * {@link module:engine/view/upcastwriter~
|
|
17
|
+
* * {@link module:engine/view/view~EditingView}
|
|
18
|
+
* * {@link module:engine/view/downcastwriter~ViewDowncastWriter}
|
|
19
|
+
* * {@link module:engine/view/upcastwriter~ViewUpcastWriter}
|
|
20
20
|
*/
|
|
21
|
-
export
|
|
21
|
+
export class ViewPosition extends ViewTypeCheckable {
|
|
22
22
|
/**
|
|
23
23
|
* Position parent.
|
|
24
24
|
*/
|
|
@@ -59,13 +59,13 @@ export default class Position extends TypeCheckable {
|
|
|
59
59
|
return this.parent.getChild(this.offset - 1) || null;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Is `true` if position is at the beginning of its {@link module:engine/view/position~
|
|
62
|
+
* Is `true` if position is at the beginning of its {@link module:engine/view/position~ViewPosition#parent parent}, `false` otherwise.
|
|
63
63
|
*/
|
|
64
64
|
get isAtStart() {
|
|
65
65
|
return this.offset === 0;
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
|
-
* Is `true` if position is at the end of its {@link module:engine/view/position~
|
|
68
|
+
* Is `true` if position is at the end of its {@link module:engine/view/position~ViewPosition#parent parent}, `false` otherwise.
|
|
69
69
|
*/
|
|
70
70
|
get isAtEnd() {
|
|
71
71
|
const endOffset = this.parent.is('$text') ? this.parent.data.length : this.parent.childCount;
|
|
@@ -78,12 +78,12 @@ export default class Position extends TypeCheckable {
|
|
|
78
78
|
return this.parent.root;
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* {@link module:engine/view/editableelement~
|
|
81
|
+
* {@link module:engine/view/editableelement~ViewEditableElement ViewEditableElement} instance that contains this position, or `null` if
|
|
82
82
|
* position is not inside an editable element.
|
|
83
83
|
*/
|
|
84
84
|
get editableElement() {
|
|
85
85
|
let editable = this.parent;
|
|
86
|
-
while (!(editable instanceof
|
|
86
|
+
while (!(editable instanceof ViewEditableElement)) {
|
|
87
87
|
if (editable.parent) {
|
|
88
88
|
editable = editable.parent;
|
|
89
89
|
}
|
|
@@ -100,14 +100,14 @@ export default class Position extends TypeCheckable {
|
|
|
100
100
|
* @returns Shifted position.
|
|
101
101
|
*/
|
|
102
102
|
getShiftedBy(shift) {
|
|
103
|
-
const shifted =
|
|
103
|
+
const shifted = ViewPosition._createAt(this);
|
|
104
104
|
const offset = shifted.offset + shift;
|
|
105
105
|
shifted.offset = offset < 0 ? 0 : offset;
|
|
106
106
|
return shifted;
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
109
109
|
* Gets the farthest position which matches the callback using
|
|
110
|
-
* {@link module:engine/view/treewalker~
|
|
110
|
+
* {@link module:engine/view/treewalker~ViewTreeWalker TreeWalker}.
|
|
111
111
|
*
|
|
112
112
|
* For example:
|
|
113
113
|
*
|
|
@@ -117,14 +117,14 @@ export default class Position extends TypeCheckable {
|
|
|
117
117
|
* getLastMatchingPosition( value => false ); // Do not move the position.
|
|
118
118
|
* ```
|
|
119
119
|
*
|
|
120
|
-
* @param skip Callback function. Gets {@link module:engine/view/treewalker~
|
|
120
|
+
* @param skip Callback function. Gets {@link module:engine/view/treewalker~ViewTreeWalkerValue} and should
|
|
121
121
|
* return `true` if the value should be skipped or `false` if not.
|
|
122
|
-
* @param options Object with configuration options. See {@link module:engine/view/treewalker~
|
|
122
|
+
* @param options Object with configuration options. See {@link module:engine/view/treewalker~ViewTreeWalker}.
|
|
123
123
|
* @returns The position after the last item which matches the `skip` callback test.
|
|
124
124
|
*/
|
|
125
125
|
getLastMatchingPosition(skip, options = {}) {
|
|
126
126
|
options.startPosition = this;
|
|
127
|
-
const treeWalker = new
|
|
127
|
+
const treeWalker = new ViewTreeWalker(options);
|
|
128
128
|
treeWalker.skip(skip);
|
|
129
129
|
return treeWalker.position;
|
|
130
130
|
}
|
|
@@ -142,7 +142,7 @@ export default class Position extends TypeCheckable {
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
/**
|
|
145
|
-
* Returns a {@link module:engine/view/node~
|
|
145
|
+
* Returns a {@link module:engine/view/node~ViewNode} or {@link module:engine/view/documentfragment~ViewDocumentFragment}
|
|
146
146
|
* which is a common ancestor of both positions.
|
|
147
147
|
*/
|
|
148
148
|
getCommonAncestor(position) {
|
|
@@ -168,8 +168,8 @@ export default class Position extends TypeCheckable {
|
|
|
168
168
|
* this position is after give one. Two positions may be located inside separate roots and in that situation this
|
|
169
169
|
* method will still return `false`.
|
|
170
170
|
*
|
|
171
|
-
* @see module:engine/view/position~
|
|
172
|
-
* @see module:engine/view/position~
|
|
171
|
+
* @see module:engine/view/position~ViewPosition#isAfter
|
|
172
|
+
* @see module:engine/view/position~ViewPosition#compareWith
|
|
173
173
|
* @param otherPosition Position to compare with.
|
|
174
174
|
* @returns Returns `true` if this position is before given position.
|
|
175
175
|
*/
|
|
@@ -181,8 +181,8 @@ export default class Position extends TypeCheckable {
|
|
|
181
181
|
* this position is before give one. Two positions may be located inside separate roots and in that situation this
|
|
182
182
|
* method will still return `false`.
|
|
183
183
|
*
|
|
184
|
-
* @see module:engine/view/position~
|
|
185
|
-
* @see module:engine/view/position~
|
|
184
|
+
* @see module:engine/view/position~ViewPosition#isBefore
|
|
185
|
+
* @see module:engine/view/position~ViewPosition#compareWith
|
|
186
186
|
* @param otherPosition Position to compare with.
|
|
187
187
|
* @returns Returns `true` if this position is after given position.
|
|
188
188
|
*/
|
|
@@ -221,38 +221,38 @@ export default class Position extends TypeCheckable {
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
/**
|
|
224
|
-
* Creates a {@link module:engine/view/treewalker~
|
|
224
|
+
* Creates a {@link module:engine/view/treewalker~ViewTreeWalker TreeWalker} instance with this positions as a start position.
|
|
225
225
|
*
|
|
226
|
-
* @param options Object with configuration options. See {@link module:engine/view/treewalker~
|
|
226
|
+
* @param options Object with configuration options. See {@link module:engine/view/treewalker~ViewTreeWalker}
|
|
227
227
|
*/
|
|
228
228
|
getWalker(options = {}) {
|
|
229
229
|
options.startPosition = this;
|
|
230
|
-
return new
|
|
230
|
+
return new ViewTreeWalker(options);
|
|
231
231
|
}
|
|
232
232
|
/**
|
|
233
233
|
* Clones this position.
|
|
234
234
|
*/
|
|
235
235
|
clone() {
|
|
236
|
-
return new
|
|
236
|
+
return new ViewPosition(this.parent, this.offset);
|
|
237
237
|
}
|
|
238
238
|
/**
|
|
239
239
|
* Creates position at the given location. The location can be specified as:
|
|
240
240
|
*
|
|
241
|
-
* * a {@link module:engine/view/position~
|
|
241
|
+
* * a {@link module:engine/view/position~ViewPosition position},
|
|
242
242
|
* * parent element and offset (offset defaults to `0`),
|
|
243
243
|
* * parent element and `'end'` (sets position at the end of that element),
|
|
244
|
-
* * {@link module:engine/view/item~
|
|
244
|
+
* * {@link module:engine/view/item~ViewItem view item} and `'before'` or `'after'` (sets position before or after given view item).
|
|
245
245
|
*
|
|
246
246
|
* This method is a shortcut to other constructors such as:
|
|
247
247
|
*
|
|
248
|
-
* * {@link module:engine/view/position~
|
|
249
|
-
* * {@link module:engine/view/position~
|
|
248
|
+
* * {@link module:engine/view/position~ViewPosition._createBefore},
|
|
249
|
+
* * {@link module:engine/view/position~ViewPosition._createAfter}.
|
|
250
250
|
*
|
|
251
251
|
* @internal
|
|
252
|
-
* @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~
|
|
252
|
+
* @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~ViewItem view item}.
|
|
253
253
|
*/
|
|
254
254
|
static _createAt(itemOrPosition, offset) {
|
|
255
|
-
if (itemOrPosition instanceof
|
|
255
|
+
if (itemOrPosition instanceof ViewPosition) {
|
|
256
256
|
return new this(itemOrPosition.parent, itemOrPosition.offset);
|
|
257
257
|
}
|
|
258
258
|
else {
|
|
@@ -268,14 +268,14 @@ export default class Position extends TypeCheckable {
|
|
|
268
268
|
}
|
|
269
269
|
else if (offset !== 0 && !offset) {
|
|
270
270
|
/**
|
|
271
|
-
* {@link module:engine/view/view~
|
|
271
|
+
* {@link module:engine/view/view~EditingView#createPositionAt `View#createPositionAt()`}
|
|
272
272
|
* requires the offset to be specified when the first parameter is a view item.
|
|
273
273
|
*
|
|
274
274
|
* @error view-createpositionat-offset-required
|
|
275
275
|
*/
|
|
276
276
|
throw new CKEditorError('view-createpositionat-offset-required', node);
|
|
277
277
|
}
|
|
278
|
-
return new
|
|
278
|
+
return new ViewPosition(node, offset);
|
|
279
279
|
}
|
|
280
280
|
}
|
|
281
281
|
/**
|
|
@@ -285,20 +285,20 @@ export default class Position extends TypeCheckable {
|
|
|
285
285
|
* @param item View item after which the position should be located.
|
|
286
286
|
*/
|
|
287
287
|
static _createAfter(item) {
|
|
288
|
-
//
|
|
288
|
+
// ViewTextProxy is not a instance of Node so we need do handle it in specific way.
|
|
289
289
|
if (item.is('$textProxy')) {
|
|
290
|
-
return new
|
|
290
|
+
return new ViewPosition(item.textNode, item.offsetInText + item.data.length);
|
|
291
291
|
}
|
|
292
292
|
if (!item.parent) {
|
|
293
293
|
/**
|
|
294
294
|
* You cannot make a position after a root.
|
|
295
295
|
*
|
|
296
296
|
* @error view-position-after-root
|
|
297
|
-
* @param {module:engine/view/node~
|
|
297
|
+
* @param {module:engine/view/node~ViewNode} root A root item.
|
|
298
298
|
*/
|
|
299
299
|
throw new CKEditorError('view-position-after-root', item, { root: item });
|
|
300
300
|
}
|
|
301
|
-
return new
|
|
301
|
+
return new ViewPosition(item.parent, item.index + 1);
|
|
302
302
|
}
|
|
303
303
|
/**
|
|
304
304
|
* Creates a new position before given view item.
|
|
@@ -307,24 +307,24 @@ export default class Position extends TypeCheckable {
|
|
|
307
307
|
* @param item View item before which the position should be located.
|
|
308
308
|
*/
|
|
309
309
|
static _createBefore(item) {
|
|
310
|
-
//
|
|
310
|
+
// ViewTextProxy is not a instance of Node so we need do handle it in specific way.
|
|
311
311
|
if (item.is('$textProxy')) {
|
|
312
|
-
return new
|
|
312
|
+
return new ViewPosition(item.textNode, item.offsetInText);
|
|
313
313
|
}
|
|
314
314
|
if (!item.parent) {
|
|
315
315
|
/**
|
|
316
316
|
* You cannot make a position before a root.
|
|
317
317
|
*
|
|
318
318
|
* @error view-position-before-root
|
|
319
|
-
* @param {module:engine/view/node~
|
|
319
|
+
* @param {module:engine/view/node~ViewNode} root A root item.
|
|
320
320
|
*/
|
|
321
321
|
throw new CKEditorError('view-position-before-root', item, { root: item });
|
|
322
322
|
}
|
|
323
|
-
return new
|
|
323
|
+
return new ViewPosition(item.parent, item.index);
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
326
|
// The magic of type inference using `is` method is centralized in `TypeCheckable` class.
|
|
327
327
|
// Proper overload would interfere with that.
|
|
328
|
-
|
|
328
|
+
ViewPosition.prototype.is = function (type) {
|
|
329
329
|
return type === 'position' || type === 'view:position';
|
|
330
330
|
};
|
package/src/view/range.d.ts
CHANGED
|
@@ -5,65 +5,66 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module engine/view/range
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import type
|
|
11
|
-
import type
|
|
12
|
-
import type
|
|
13
|
-
import type
|
|
14
|
-
import {
|
|
8
|
+
import { ViewTypeCheckable } from './typecheckable.js';
|
|
9
|
+
import { ViewPosition } from './position.js';
|
|
10
|
+
import { type ViewDocumentFragment } from './documentfragment.js';
|
|
11
|
+
import { type ViewElement } from './element.js';
|
|
12
|
+
import { type ViewItem } from './item.js';
|
|
13
|
+
import { type ViewNode } from './node.js';
|
|
14
|
+
import { ViewTreeWalker, type ViewTreeWalkerValue, type ViewTreeWalkerOptions } from './treewalker.js';
|
|
15
15
|
/**
|
|
16
|
-
* Range in the view tree. A range is represented by its start and end {@link module:engine/view/position~
|
|
16
|
+
* Range in the view tree. A range is represented by its start and end {@link module:engine/view/position~ViewPosition positions}.
|
|
17
17
|
*
|
|
18
18
|
* In order to create a new position instance use the `createPosition*()` factory methods available in:
|
|
19
19
|
*
|
|
20
|
-
* * {@link module:engine/view/view~
|
|
21
|
-
* * {@link module:engine/view/downcastwriter~
|
|
22
|
-
* * {@link module:engine/view/upcastwriter~
|
|
20
|
+
* * {@link module:engine/view/view~EditingView}
|
|
21
|
+
* * {@link module:engine/view/downcastwriter~ViewDowncastWriter}
|
|
22
|
+
* * {@link module:engine/view/upcastwriter~ViewUpcastWriter}
|
|
23
23
|
*/
|
|
24
|
-
export
|
|
24
|
+
export declare class ViewRange extends ViewTypeCheckable implements Iterable<ViewTreeWalkerValue> {
|
|
25
25
|
/**
|
|
26
26
|
* Start position.
|
|
27
27
|
*/
|
|
28
|
-
readonly start:
|
|
28
|
+
readonly start: ViewPosition;
|
|
29
29
|
/**
|
|
30
30
|
* End position.
|
|
31
31
|
*/
|
|
32
|
-
readonly end:
|
|
32
|
+
readonly end: ViewPosition;
|
|
33
33
|
/**
|
|
34
34
|
* Creates a range spanning from `start` position to `end` position.
|
|
35
35
|
*
|
|
36
|
-
* **Note:** Constructor creates it's own {@link module:engine/view/position~
|
|
36
|
+
* **Note:** Constructor creates it's own {@link module:engine/view/position~ViewPosition} instances basing on passed values.
|
|
37
37
|
*
|
|
38
38
|
* @param start Start position.
|
|
39
39
|
* @param end End position. If not set, range will be collapsed at the `start` position.
|
|
40
40
|
*/
|
|
41
|
-
constructor(start:
|
|
41
|
+
constructor(start: ViewPosition, end?: ViewPosition | null);
|
|
42
42
|
/**
|
|
43
43
|
* Iterable interface.
|
|
44
44
|
*
|
|
45
|
-
* Iterates over all {@link module:engine/view/item~
|
|
46
|
-
* them together with additional information like length or {@link module:engine/view/position~
|
|
47
|
-
* grouped as {@link module:engine/view/treewalker~
|
|
45
|
+
* Iterates over all {@link module:engine/view/item~ViewItem view items} that are in this range and returns
|
|
46
|
+
* them together with additional information like length or {@link module:engine/view/position~ViewPosition positions},
|
|
47
|
+
* grouped as {@link module:engine/view/treewalker~ViewTreeWalkerValue}.
|
|
48
48
|
*
|
|
49
|
-
* This iterator uses {@link module:engine/view/treewalker~
|
|
49
|
+
* This iterator uses {@link module:engine/view/treewalker~ViewTreeWalker TreeWalker} with `boundaries` set to this range and
|
|
50
50
|
* `ignoreElementEnd` option
|
|
51
51
|
* set to `true`.
|
|
52
52
|
*/
|
|
53
|
-
[Symbol.iterator](): IterableIterator<
|
|
53
|
+
[Symbol.iterator](): IterableIterator<ViewTreeWalkerValue>;
|
|
54
54
|
/**
|
|
55
55
|
* Returns whether the range is collapsed, that is it start and end positions are equal.
|
|
56
56
|
*/
|
|
57
57
|
get isCollapsed(): boolean;
|
|
58
58
|
/**
|
|
59
|
-
* Returns whether this range is flat, that is if {@link module:engine/view/range~
|
|
60
|
-
* {@link module:engine/view/range~
|
|
59
|
+
* Returns whether this range is flat, that is if {@link module:engine/view/range~ViewRange#start start} position and
|
|
60
|
+
* {@link module:engine/view/range~ViewRange#end end} position are in the same
|
|
61
|
+
* {@link module:engine/view/position~ViewPosition#parent parent}.
|
|
61
62
|
*/
|
|
62
63
|
get isFlat(): boolean;
|
|
63
64
|
/**
|
|
64
65
|
* Range root element.
|
|
65
66
|
*/
|
|
66
|
-
get root():
|
|
67
|
+
get root(): ViewNode | ViewDocumentFragment;
|
|
67
68
|
/**
|
|
68
69
|
* Creates a maximal range that has the same content as this range but is expanded in both ways (at the beginning
|
|
69
70
|
* and at the end).
|
|
@@ -77,13 +78,13 @@ export default class Range extends TypeCheckable implements Iterable<TreeWalkerV
|
|
|
77
78
|
*
|
|
78
79
|
* Note that in the sample above:
|
|
79
80
|
*
|
|
80
|
-
* - `<p>` have type of {@link module:engine/view/containerelement~
|
|
81
|
-
* - `<b>` have type of {@link module:engine/view/attributeelement~
|
|
82
|
-
* - `<span>` have type of {@link module:engine/view/uielement~
|
|
81
|
+
* - `<p>` have type of {@link module:engine/view/containerelement~ViewContainerElement},
|
|
82
|
+
* - `<b>` have type of {@link module:engine/view/attributeelement~ViewAttributeElement},
|
|
83
|
+
* - `<span>` have type of {@link module:engine/view/uielement~ViewUIElement}.
|
|
83
84
|
*
|
|
84
85
|
* @returns Enlarged range.
|
|
85
86
|
*/
|
|
86
|
-
getEnlarged():
|
|
87
|
+
getEnlarged(): ViewRange;
|
|
87
88
|
/**
|
|
88
89
|
* Creates a minimum range that has the same content as this range but is trimmed in both ways (at the beginning
|
|
89
90
|
* and at the end).
|
|
@@ -97,42 +98,42 @@ export default class Range extends TypeCheckable implements Iterable<TreeWalkerV
|
|
|
97
98
|
*
|
|
98
99
|
* Note that in the sample above:
|
|
99
100
|
*
|
|
100
|
-
* - `<p>` have type of {@link module:engine/view/containerelement~
|
|
101
|
-
* - `<b>` have type of {@link module:engine/view/attributeelement~
|
|
102
|
-
* - `<span>` have type of {@link module:engine/view/uielement~
|
|
101
|
+
* - `<p>` have type of {@link module:engine/view/containerelement~ViewContainerElement},
|
|
102
|
+
* - `<b>` have type of {@link module:engine/view/attributeelement~ViewAttributeElement},
|
|
103
|
+
* - `<span>` have type of {@link module:engine/view/uielement~ViewUIElement}.
|
|
103
104
|
*
|
|
104
105
|
* @returns Shrunk range.
|
|
105
106
|
*/
|
|
106
|
-
getTrimmed():
|
|
107
|
+
getTrimmed(): ViewRange;
|
|
107
108
|
/**
|
|
108
109
|
* Two ranges are equal if their start and end positions are equal.
|
|
109
110
|
*
|
|
110
111
|
* @param otherRange Range to compare with.
|
|
111
112
|
* @returns `true` if ranges are equal, `false` otherwise
|
|
112
113
|
*/
|
|
113
|
-
isEqual(otherRange:
|
|
114
|
+
isEqual(otherRange: ViewRange): boolean;
|
|
114
115
|
/**
|
|
115
|
-
* Checks whether this range contains given {@link module:engine/view/position~
|
|
116
|
+
* Checks whether this range contains given {@link module:engine/view/position~ViewPosition position}.
|
|
116
117
|
*
|
|
117
118
|
* @param position Position to check.
|
|
118
|
-
* @returns `true` if given {@link module:engine/view/position~
|
|
119
|
+
* @returns `true` if given {@link module:engine/view/position~ViewPosition position} is contained in this range, `false` otherwise.
|
|
119
120
|
*/
|
|
120
|
-
containsPosition(position:
|
|
121
|
+
containsPosition(position: ViewPosition): boolean;
|
|
121
122
|
/**
|
|
122
|
-
* Checks whether this range contains given {@link module:engine/view/range~
|
|
123
|
+
* Checks whether this range contains given {@link module:engine/view/range~ViewRange range}.
|
|
123
124
|
*
|
|
124
125
|
* @param otherRange Range to check.
|
|
125
126
|
* @param loose Whether the check is loose or strict. If the check is strict (`false`), compared range cannot
|
|
126
127
|
* start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or
|
|
127
128
|
* even be equal to this range. Note that collapsed ranges are always compared in strict mode.
|
|
128
|
-
* @returns `true` if given {@link module:engine/view/range~
|
|
129
|
+
* @returns `true` if given {@link module:engine/view/range~ViewRange range} boundaries are contained by this range, `false`
|
|
129
130
|
* otherwise.
|
|
130
131
|
*/
|
|
131
|
-
containsRange(otherRange:
|
|
132
|
+
containsRange(otherRange: ViewRange, loose?: boolean): boolean;
|
|
132
133
|
/**
|
|
133
|
-
* Computes which part(s) of this {@link module:engine/view/range~
|
|
134
|
-
* {@link module:engine/view/range~
|
|
135
|
-
* Returned array contains zero, one or two {@link module:engine/view/range~
|
|
134
|
+
* Computes which part(s) of this {@link module:engine/view/range~ViewRange range} is not a part of given
|
|
135
|
+
* {@link module:engine/view/range~ViewRange range}.
|
|
136
|
+
* Returned array contains zero, one or two {@link module:engine/view/range~ViewRange ranges}.
|
|
136
137
|
*
|
|
137
138
|
* Examples:
|
|
138
139
|
*
|
|
@@ -162,9 +163,10 @@ export default class Range extends TypeCheckable implements Iterable<TreeWalkerV
|
|
|
162
163
|
* @param otherRange Range to differentiate against.
|
|
163
164
|
* @returns The difference between ranges.
|
|
164
165
|
*/
|
|
165
|
-
getDifference(otherRange:
|
|
166
|
+
getDifference(otherRange: ViewRange): Array<ViewRange>;
|
|
166
167
|
/**
|
|
167
|
-
* Returns an intersection of this {@link module:engine/view/range~
|
|
168
|
+
* Returns an intersection of this {@link module:engine/view/range~ViewRange range}
|
|
169
|
+
* and given {@link module:engine/view/range~ViewRange range}.
|
|
168
170
|
* Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.
|
|
169
171
|
*
|
|
170
172
|
* Examples:
|
|
@@ -186,62 +188,62 @@ export default class Range extends TypeCheckable implements Iterable<TreeWalkerV
|
|
|
186
188
|
* @param otherRange Range to check for intersection.
|
|
187
189
|
* @returns A common part of given ranges or `null` if ranges have no common part.
|
|
188
190
|
*/
|
|
189
|
-
getIntersection(otherRange:
|
|
191
|
+
getIntersection(otherRange: ViewRange): ViewRange | null;
|
|
190
192
|
/**
|
|
191
|
-
* Creates a {@link module:engine/view/treewalker~
|
|
193
|
+
* Creates a {@link module:engine/view/treewalker~ViewTreeWalker TreeWalker} instance with this range as a boundary.
|
|
192
194
|
*
|
|
193
|
-
* @param options Object with configuration options. See {@link module:engine/view/treewalker~
|
|
195
|
+
* @param options Object with configuration options. See {@link module:engine/view/treewalker~ViewTreeWalker}.
|
|
194
196
|
*/
|
|
195
|
-
getWalker(options?:
|
|
197
|
+
getWalker(options?: ViewTreeWalkerOptions): ViewTreeWalker;
|
|
196
198
|
/**
|
|
197
|
-
* Returns a {@link module:engine/view/node~
|
|
199
|
+
* Returns a {@link module:engine/view/node~ViewNode} or {@link module:engine/view/documentfragment~ViewDocumentFragment}
|
|
198
200
|
* which is a common ancestor of range's both ends (in which the entire range is contained).
|
|
199
201
|
*/
|
|
200
|
-
getCommonAncestor():
|
|
202
|
+
getCommonAncestor(): ViewNode | ViewDocumentFragment | null;
|
|
201
203
|
/**
|
|
202
|
-
* Returns an {@link module:engine/view/element~
|
|
204
|
+
* Returns an {@link module:engine/view/element~ViewElement Element} contained by the range.
|
|
203
205
|
* The element will be returned when it is the **only** node within the range and **fully–contained**
|
|
204
206
|
* at the same time.
|
|
205
207
|
*/
|
|
206
|
-
getContainedElement():
|
|
208
|
+
getContainedElement(): ViewElement | null;
|
|
207
209
|
/**
|
|
208
210
|
* Clones this range.
|
|
209
211
|
*/
|
|
210
|
-
clone():
|
|
212
|
+
clone(): ViewRange;
|
|
211
213
|
/**
|
|
212
|
-
* Returns an iterator that iterates over all {@link module:engine/view/item~
|
|
214
|
+
* Returns an iterator that iterates over all {@link module:engine/view/item~ViewItem view items} that are in this range and returns
|
|
213
215
|
* them.
|
|
214
216
|
*
|
|
215
|
-
* This method uses {@link module:engine/view/treewalker~
|
|
216
|
-
* set to `true`. However it returns only {@link module:engine/view/item~
|
|
217
|
-
* not {@link module:engine/view/treewalker~
|
|
217
|
+
* This method uses {@link module:engine/view/treewalker~ViewTreeWalker} with `boundaries` set to this range
|
|
218
|
+
* and `ignoreElementEnd` option set to `true`. However it returns only {@link module:engine/view/item~ViewItem items},
|
|
219
|
+
* not {@link module:engine/view/treewalker~ViewTreeWalkerValue}.
|
|
218
220
|
*
|
|
219
|
-
* You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~
|
|
221
|
+
* You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~ViewTreeWalker} for
|
|
220
222
|
* a full list of available options.
|
|
221
223
|
*
|
|
222
|
-
* @param options Object with configuration options. See {@link module:engine/view/treewalker~
|
|
224
|
+
* @param options Object with configuration options. See {@link module:engine/view/treewalker~ViewTreeWalker}.
|
|
223
225
|
*/
|
|
224
|
-
getItems(options?:
|
|
226
|
+
getItems(options?: ViewTreeWalkerOptions): IterableIterator<ViewItem>;
|
|
225
227
|
/**
|
|
226
|
-
* Returns an iterator that iterates over all {@link module:engine/view/position~
|
|
228
|
+
* Returns an iterator that iterates over all {@link module:engine/view/position~ViewPosition positions} that are boundaries or
|
|
227
229
|
* contained in this range.
|
|
228
230
|
*
|
|
229
|
-
* This method uses {@link module:engine/view/treewalker~
|
|
230
|
-
* {@link module:engine/view/position~
|
|
231
|
+
* This method uses {@link module:engine/view/treewalker~ViewTreeWalker} with `boundaries` set to this range. However it returns only
|
|
232
|
+
* {@link module:engine/view/position~ViewPosition positions}, not {@link module:engine/view/treewalker~ViewTreeWalkerValue}.
|
|
231
233
|
*
|
|
232
|
-
* You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~
|
|
234
|
+
* You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~ViewTreeWalker} for
|
|
233
235
|
* a full list of available options.
|
|
234
236
|
*
|
|
235
|
-
* @param options Object with configuration options. See {@link module:engine/view/treewalker~
|
|
237
|
+
* @param options Object with configuration options. See {@link module:engine/view/treewalker~ViewTreeWalker}.
|
|
236
238
|
*/
|
|
237
|
-
getPositions(options?:
|
|
239
|
+
getPositions(options?: ViewTreeWalkerOptions): IterableIterator<ViewPosition>;
|
|
238
240
|
/**
|
|
239
241
|
* Checks and returns whether this range intersects with the given range.
|
|
240
242
|
*
|
|
241
243
|
* @param otherRange Range to compare with.
|
|
242
244
|
* @returns True if ranges intersect.
|
|
243
245
|
*/
|
|
244
|
-
isIntersecting(otherRange:
|
|
246
|
+
isIntersecting(otherRange: ViewRange): boolean;
|
|
245
247
|
/**
|
|
246
248
|
* Creates a range from the given parents and offsets.
|
|
247
249
|
*
|
|
@@ -252,28 +254,28 @@ export default class Range extends TypeCheckable implements Iterable<TreeWalkerV
|
|
|
252
254
|
* @param endOffset End position offset.
|
|
253
255
|
* @returns Created range.
|
|
254
256
|
*/
|
|
255
|
-
static _createFromParentsAndOffsets(startElement:
|
|
257
|
+
static _createFromParentsAndOffsets(startElement: ViewElement | ViewDocumentFragment, startOffset: number, endElement: ViewElement | ViewDocumentFragment, endOffset: number): ViewRange;
|
|
256
258
|
/**
|
|
257
|
-
* Creates a new range, spreading from specified {@link module:engine/view/position~
|
|
259
|
+
* Creates a new range, spreading from specified {@link module:engine/view/position~ViewPosition position} to a position moved by
|
|
258
260
|
* given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.
|
|
259
261
|
*
|
|
260
262
|
* @internal
|
|
261
263
|
* @param position Beginning of the range.
|
|
262
264
|
* @param shift How long the range should be.
|
|
263
265
|
*/
|
|
264
|
-
static _createFromPositionAndShift(position:
|
|
266
|
+
static _createFromPositionAndShift(position: ViewPosition, shift: number): ViewRange;
|
|
265
267
|
/**
|
|
266
|
-
* Creates a range inside an {@link module:engine/view/element~
|
|
268
|
+
* Creates a range inside an {@link module:engine/view/element~ViewElement element} which starts before the first child of
|
|
267
269
|
* that element and ends after the last child of that element.
|
|
268
270
|
*
|
|
269
271
|
* @internal
|
|
270
272
|
* @param element Element which is a parent for the range.
|
|
271
273
|
*/
|
|
272
|
-
static _createIn(element:
|
|
274
|
+
static _createIn(element: ViewElement | ViewDocumentFragment): ViewRange;
|
|
273
275
|
/**
|
|
274
|
-
* Creates a range that starts before given {@link module:engine/view/item~
|
|
276
|
+
* Creates a range that starts before given {@link module:engine/view/item~ViewItem view item} and ends after it.
|
|
275
277
|
*
|
|
276
278
|
* @internal
|
|
277
279
|
*/
|
|
278
|
-
static _createOn(item:
|
|
280
|
+
static _createOn(item: ViewItem): ViewRange;
|
|
279
281
|
}
|