Creates a range spanning from start position to end position.
Note: Constructor creates it's own module:engine/view/position~ViewPosition instances basing on passed values.
Start position.
Optionalend: ViewPositionEnd position. If not set, range will be collapsed at the start position.
Returns whether the range is collapsed, that is it start and end positions are equal.
Returns whether this range is flat, that is if module:engine/view/range~ViewRange#start start position and module:engine/view/range~ViewRange#end end position are in the same module:engine/view/position~ViewPosition#parent parent.
Range root element.
Iterable interface.
Iterates over all module:engine/view/item~ViewItem view items that are in this range and returns them together with additional information like length or module:engine/view/position~ViewPosition positions, grouped as module:engine/view/treewalker~ViewTreeWalkerValue.
This iterator uses module:engine/view/treewalker~ViewTreeWalker TreeWalker with boundaries set to this range and
ignoreElementEnd option
set to true.
Clones this range.
Checks whether this range contains given module:engine/view/position~ViewPosition position.
Position to check.
true if given module:engine/view/position~ViewPosition position is contained in this range, false otherwise.
Checks whether this range contains given module:engine/view/range~ViewRange range.
Range to check.
Optionalloose: booleanWhether the check is loose or strict. If the check is strict (false), compared range cannot
start or end at the same position as this range boundaries. If the check is loose (true), compared range can start, end or
even be equal to this range. Note that collapsed ranges are always compared in strict mode.
true if given module:engine/view/range~ViewRange range boundaries are contained by this range, false
otherwise.
Returns a module:engine/view/node~ViewNode or module:engine/view/documentfragment~ViewDocumentFragment which is a common ancestor of range's both ends (in which the entire range is contained).
Returns an module:engine/view/element~ViewElement Element contained by the range. The element will be returned when it is the only node within the range and fully–contained at the same time.
Computes which part(s) of this module:engine/view/range~ViewRange range is not a part of given module:engine/view/range~ViewRange range. Returned array contains zero, one or two module:engine/view/range~ViewRange ranges.
Examples:
let foo = downcastWriter.createText( 'foo' );
let img = downcastWriter.createContainerElement( 'img' );
let bar = downcastWriter.createText( 'bar' );
let p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );
let range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // "o", img, "b" are in range.
let otherRange = view.createRange( // "oo", img, "ba" are in range.
view.createPositionAt( foo, 1 ),
view.createPositionAt( bar, 2 )
);
let transformed = range.getDifference( otherRange );
// transformed array has no ranges because `otherRange` contains `range`
otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // "oo", img are in range.
transformed = range.getDifference( otherRange );
// transformed array has one range: from ( p, 2 ) to ( bar, 1 )
otherRange = view.createRange( view.createPositionAt( p, 1 ), view.createPositionAt( p, 2 ) ); // img is in range.
transformed = range.getDifference( otherRange );
// transformed array has two ranges: from ( foo, 1 ) to ( p, 1 ) and from ( p, 2 ) to ( bar, 1 )
Range to differentiate against.
The difference between ranges.
Creates a maximal range that has the same content as this range but is expanded in both ways (at the beginning and at the end).
For example:
<p>Foo</p><p><b>{Bar}</b></p> -> <p>Foo</p>[<p><b>Bar</b>]</p>
<p><b>foo</b>{bar}<span></span></p> -> <p><b>foo[</b>bar<span></span>]</p>
Note that in the sample above:
<p> have type of module:engine/view/containerelement~ViewContainerElement,<b> have type of module:engine/view/attributeelement~ViewAttributeElement,<span> have type of module:engine/view/uielement~ViewUIElement.Enlarged range.
Returns an intersection of this module:engine/view/range~ViewRange range
and given module:engine/view/range~ViewRange range.
Intersection is a common part of both of those ranges. If ranges has no common part, returns null.
Examples:
let foo = downcastWriter.createText( 'foo' );
let img = downcastWriter.createContainerElement( 'img' );
let bar = downcastWriter.createText( 'bar' );
let p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );
let range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // "o", img, "b" are in range.
let otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // "oo", img are in range.
let transformed = range.getIntersection( otherRange ); // range from ( foo, 1 ) to ( p, 2 ).
otherRange = view.createRange( view.createPositionAt( bar, 1 ), view.createPositionAt( bar, 3 ); "ar" is in range.
transformed = range.getIntersection( otherRange ); // null - no common part.
Range to check for intersection.
A common part of given ranges or null if ranges have no common part.
Returns an iterator that iterates over all module:engine/view/item~ViewItem view items that are in this range and returns them.
This method uses module:engine/view/treewalker~ViewTreeWalker with boundaries set to this range
and ignoreElementEnd option set to true. However it returns only module:engine/view/item~ViewItem items,
not module:engine/view/treewalker~ViewTreeWalkerValue.
You may specify additional options for the tree walker. See module:engine/view/treewalker~ViewTreeWalker for a full list of available options.
Optionaloptions: ViewTreeWalkerOptionsObject with configuration options. See module:engine/view/treewalker~ViewTreeWalker.
Returns an iterator that iterates over all module:engine/view/position~ViewPosition positions that are boundaries or contained in this range.
This method uses module:engine/view/treewalker~ViewTreeWalker with boundaries set to this range. However it returns only
module:engine/view/position~ViewPosition positions, not module:engine/view/treewalker~ViewTreeWalkerValue.
You may specify additional options for the tree walker. See module:engine/view/treewalker~ViewTreeWalker for a full list of available options.
Optionaloptions: ViewTreeWalkerOptionsObject with configuration options. See module:engine/view/treewalker~ViewTreeWalker.
Creates a minimum range that has the same content as this range but is trimmed in both ways (at the beginning and at the end).
For example:
<p>Foo</p>[<p><b>Bar</b>]</p> -> <p>Foo</p><p><b>{Bar}</b></p>
<p><b>foo[</b>bar<span></span>]</p> -> <p><b>foo</b>{bar}<span></span></p>
Note that in the sample above:
<p> have type of module:engine/view/containerelement~ViewContainerElement,<b> have type of module:engine/view/attributeelement~ViewAttributeElement,<span> have type of module:engine/view/uielement~ViewUIElement.Shrunk range.
Creates a module:engine/view/treewalker~ViewTreeWalker TreeWalker instance with this range as a boundary.
Optionaloptions: ViewTreeWalkerOptionsObject with configuration options. See module:engine/view/treewalker~ViewTreeWalker.
Checks whether this object is of type module:engine/view/node~ViewNode or its subclass.
This method is useful when processing view objects that are of unknown type. For example, a function may return a module:engine/view/documentfragment~ViewDocumentFragment or a module:engine/view/node~ViewNode that can be either a text node or an element. This method can be used to check what kind of object is returned.
someObject.is( 'element' ); // -> true if this is an element
someObject.is( 'node' ); // -> true if this is a node (a text node or an element)
someObject.is( 'documentFragment' ); // -> true if this is a document fragment
Since this method is also available on a range of model objects, you can prefix the type of the object with
model: or view: to check, for example, if this is the model's or view's element:
viewElement.is( 'view:element' ); // -> true
viewElement.is( 'model:element' ); // -> false
By using this method it is also possible to check a name of an element:
imgElement.is( 'element', 'img' ); // -> true
imgElement.is( 'view:element', 'img' ); // -> same as above, but more precise
Checks whether this object is of type module:engine/view/element~ViewElement or its subclass.
element.is( 'element' ); // -> true
element.is( 'node' ); // -> true
element.is( 'view:element' ); // -> true
element.is( 'view:node' ); // -> true
element.is( 'model:element' ); // -> false
element.is( 'documentSelection' ); // -> false
Assuming that the object being checked is an element, you can also check its module:engine/view/element~ViewElement#name name:
element.is( 'element', 'img' ); // -> true if this is an <img> element
text.is( 'element', 'img' ); -> false
Checks whether this object is of type module:engine/view/attributeelement~ViewAttributeElement.
attributeElement.is( 'attributeElement' ); // -> true
attributeElement.is( 'element' ); // -> true
attributeElement.is( 'node' ); // -> true
attributeElement.is( 'view:attributeElement' ); // -> true
attributeElement.is( 'view:element' ); // -> true
attributeElement.is( 'view:node' ); // -> true
attributeElement.is( 'model:element' ); // -> false
attributeElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is an attribute element, you can also check its module:engine/view/attributeelement~ViewAttributeElement#name name:
attributeElement.is( 'element', 'b' ); // -> true if this is a bold element
attributeElement.is( 'attributeElement', 'b' ); // -> same as above
text.is( 'element', 'b' ); -> false
Checks whether this object is of type module:engine/view/containerelement~ViewContainerElement or its subclass.
containerElement.is( 'containerElement' ); // -> true
containerElement.is( 'element' ); // -> true
containerElement.is( 'node' ); // -> true
containerElement.is( 'view:containerElement' ); // -> true
containerElement.is( 'view:element' ); // -> true
containerElement.is( 'view:node' ); // -> true
containerElement.is( 'model:element' ); // -> false
containerElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is a container element, you can also check its module:engine/view/containerelement~ViewContainerElement#name name:
containerElement.is( 'element', 'div' ); // -> true if this is a div container element
containerElement.is( 'contaienrElement', 'div' ); // -> same as above
text.is( 'element', 'div' ); -> false
Checks whether this object is of type module:engine/view/editableelement~ViewEditableElement or its subclass.
editableElement.is( 'editableElement' ); // -> true
editableElement.is( 'element' ); // -> true
editableElement.is( 'node' ); // -> true
editableElement.is( 'view:editableElement' ); // -> true
editableElement.is( 'view:element' ); // -> true
editableElement.is( 'view:node' ); // -> true
editableElement.is( 'model:element' ); // -> false
editableElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is an editbale element, you can also check its module:engine/view/editableelement~ViewEditableElement#name name:
editableElement.is( 'element', 'div' ); // -> true if this is a div element
editableElement.is( 'editableElement', 'div' ); // -> same as above
text.is( 'element', 'div' ); -> false
Checks whether this object is of type module:engine/view/emptyelement~ViewEmptyElement.
emptyElement.is( 'emptyElement' ); // -> true
emptyElement.is( 'element' ); // -> true
emptyElement.is( 'node' ); // -> true
emptyElement.is( 'view:emptyElement' ); // -> true
emptyElement.is( 'view:element' ); // -> true
emptyElement.is( 'view:node' ); // -> true
emptyElement.is( 'model:element' ); // -> false
emptyElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is an empty element, you can also check its module:engine/view/emptyelement~ViewEmptyElement#name name:
emptyElement.is( 'element', 'img' ); // -> true if this is a img element
emptyElement.is( 'emptyElement', 'img' ); // -> same as above
text.is( 'element', 'img' ); -> false
Checks whether this object is of type module:engine/view/rawelement~ViewRawElement.
rawElement.is( 'rawElement' ); // -> true
rawElement.is( 'element' ); // -> true
rawElement.is( 'node' ); // -> true
rawElement.is( 'view:rawElement' ); // -> true
rawElement.is( 'view:element' ); // -> true
rawElement.is( 'view:node' ); // -> true
rawElement.is( 'model:element' ); // -> false
rawElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is a raw element, you can also check its module:engine/view/rawelement~ViewRawElement#name name:
rawElement.is( 'img' ); // -> true if this is an img element
rawElement.is( 'rawElement', 'img' ); // -> same as above
text.is( 'img' ); -> false
Checks whether this object is of type module:engine/view/rooteditableelement~ViewRootEditableElement.
rootEditableElement.is( 'rootElement' ); // -> true
rootEditableElement.is( 'editableElement' ); // -> true
rootEditableElement.is( 'element' ); // -> true
rootEditableElement.is( 'node' ); // -> true
rootEditableElement.is( 'view:editableElement' ); // -> true
rootEditableElement.is( 'view:element' ); // -> true
rootEditableElement.is( 'view:node' ); // -> true
rootEditableElement.is( 'model:element' ); // -> false
rootEditableElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is a root editable element, you can also check its module:engine/view/rooteditableelement~ViewRootEditableElement#name name:
rootEditableElement.is( 'element', 'div' ); // -> true if this is a div root editable element
rootEditableElement.is( 'rootElement', 'div' ); // -> same as above
text.is( 'element', 'div' ); -> false
Checks whether this object is of type module:engine/view/uielement~ViewUIElement.
uiElement.is( 'uiElement' ); // -> true
uiElement.is( 'element' ); // -> true
uiElement.is( 'node' ); // -> true
uiElement.is( 'view:uiElement' ); // -> true
uiElement.is( 'view:element' ); // -> true
uiElement.is( 'view:node' ); // -> true
uiElement.is( 'model:element' ); // -> false
uiElement.is( 'documentFragment' ); // -> false
Assuming that the object being checked is an ui element, you can also check its module:engine/view/uielement~ViewUIElement#name name:
uiElement.is( 'element', 'span' ); // -> true if this is a span ui element
uiElement.is( 'uiElement', 'span' ); // -> same as above
text.is( 'element', 'span' ); -> false
Checks whether this object is of type module:engine/view/text~ViewText.
text.is( '$text' ); // -> true
text.is( 'node' ); // -> true
text.is( 'view:$text' ); // -> true
text.is( 'view:node' ); // -> true
text.is( 'model:$text' ); // -> false
text.is( 'element' ); // -> false
text.is( 'range' ); // -> false
hecks whether this object is of type module:engine/view/documentfragment~ViewDocumentFragment.
docFrag.is( 'documentFragment' ); // -> true
docFrag.is( 'view:documentFragment' ); // -> true
docFrag.is( 'model:documentFragment' ); // -> false
docFrag.is( 'element' ); // -> false
docFrag.is( 'node' ); // -> false
Checks whether this object is of type module:engine/view/textproxy~ViewTextProxy.
textProxy.is( '$textProxy' ); // -> true
textProxy.is( 'view:$textProxy' ); // -> true
textProxy.is( 'model:$textProxy' ); // -> false
textProxy.is( 'element' ); // -> false
textProxy.is( 'range' ); // -> false
Note: Until version 20.0.0 this method wasn't accepting '$textProxy' type. The legacy 'textProxy' type is still
accepted for backward compatibility.
Checks whether this object is of type module:engine/view/position~ViewPosition.
position.is( 'position' ); // -> true
position.is( 'view:position' ); // -> true
position.is( 'model:position' ); // -> false
position.is( 'element' ); // -> false
position.is( 'range' ); // -> false
Checks whether this object is of type module:engine/view/range~ViewRange.
range.is( 'range' ); // -> true
range.is( 'view:range' ); // -> true
range.is( 'model:range' ); // -> false
range.is( 'element' ); // -> false
range.is( 'selection' ); // -> false
Checks whether this object is of type module:engine/view/selection~ViewSelection or module:engine/view/documentselection~ViewDocumentSelection.
selection.is( 'selection' ); // -> true
selection.is( 'view:selection' ); // -> true
selection.is( 'model:selection' ); // -> false
selection.is( 'element' ); // -> false
selection.is( 'range' ); // -> false
Checks whether this object is of type module:engine/view/documentselection~ViewDocumentSelection.
`docSelection.is( 'selection' ); // -> true
docSelection.is( 'documentSelection' ); // -> true
docSelection.is( 'view:selection' ); // -> true
docSelection.is( 'view:documentSelection' ); // -> true
docSelection.is( 'model:documentSelection' ); // -> false
docSelection.is( 'element' ); // -> false
docSelection.is( 'node' ); // -> false
Checks whether the object is of type module:engine/view/element~ViewElement or its subclass and has the specified name.
Checks whether the object is of type module:engine/view/attributeelement~ViewAttributeElement and has the specified name.
Checks whether the object is of type module:engine/view/containerelement~ViewContainerElement
or its subclass and has the specified name.
Checks whether the object is of type module:engine/view/editableelement~ViewEditableElement
or its subclass and has the specified name.
Checks whether the object is of type module:engine/view/emptyelement~ViewEmptyElement has the specified name.
Checks whether the object is of type module:engine/view/rawelement~ViewRawElement and has the specified name.
Checks whether the object is of type module:engine/view/rooteditableelement~ViewRootEditableElement
and has the specified name.
Checks whether the object is of type module:engine/view/uielement~ViewUIElement and has the specified name.
Two ranges are equal if their start and end positions are equal.
Range to compare with.
true if ranges are equal, false otherwise
Checks and returns whether this range intersects with the given range.
Range to compare with.
True if ranges intersect.
Converts ViewRange instance to plain object and returns it.
ViewRange instance converted to plain object.
Static_InternalCreates a range from the given parents and offsets.
Start position parent element.
Start position offset.
End position parent element.
End position offset.
Created range.
Static_InternalCreates a new range, spreading from specified module:engine/view/position~ViewPosition position to a position moved by
given shift. If shift is a negative value, shifted position is treated as the beginning of the range.
Beginning of the range.
How long the range should be.
Static_InternalCreates a range inside an module:engine/view/element~ViewElement element which starts before the first child of that element and ends after the last child of that element.
Element which is a parent for the range.
Static_
Range in the view tree. A range is represented by its start and end module:engine/view/position~ViewPosition positions.
In order to create a new position instance use the
createPosition*()factory methods available in: