Writer (engine/model)
@ckeditor/ckeditor5-engine/src/model/writer
The model can only be modified by using the writer. It should be used whenever you want to create a node, modify child nodes, attributes or text, set the selection's position and its attributes.
The instance of the writer is only available in the change()
or
enqueueChange()
.
model.change( writer => {
writer.insertText( 'foo', paragraph, 'end' );
} );
Note that the writer should never be stored and used outside of the change()
and
enqueueChange()
blocks.
Note that writer's methods do not check the Schema
. It is possible
to create incorrect model structures by using the writer. Read more about in
"Who checks the schema?".
Filtering
Properties
-
The batch to which this writer will add changes.
-
Instance of the model on which this writer operates.
Methods
-
Creates a writer instance.
Note: It is not recommended to use it directly. Use
Model#change()
orModel#enqueueChange()
instead.Parameters
-
addMarker( name, options = { [options.affectsData], options.range, options.usingOperation } ) → Marker
module:engine/model/writer~Writer#addMarker
Adds a marker. Marker is a named range, which tracks changes in the document and updates its range automatically, when model tree changes.
As the first parameter you can set marker name.
The required
options.usingOperation
parameter lets you decide if the marker should be managed by operations or not. See marker class description to learn about the difference between markers managed by operations and not-managed by operations.The
options.affectsData
parameter, which defaults tofalse
, allows you to define if a marker affects the data. It should betrue
when the marker change changes the data returned by theeditor.getData()
method. When set totrue
it fires thechange:data
event. When set tofalse
it fires thechange
event.Create marker directly base on marker's name:
addMarker( markerName, { range, usingOperation: false } );
Create marker using operation:
addMarker( markerName, { range, usingOperation: true } );
Create marker that affects the editor data:
addMarker( markerName, { range, usingOperation: false, affectsData: true } );
Note: For efficiency reasons, it's best to create and keep as little markers as possible.
Parameters
name : string
Name of a marker to create - must be unique.
options : object
-
Properties
[ options.affectsData ] : boolean
Flag indicating that the marker changes the editor data.
options.range : Range
Marker range.
options.usingOperation : boolean
Flag indicating that the marker should be added by MarkerOperation. See
managedUsingOperations
.
Returns
Marker
Marker that was set.
Related:
-
addRoot( rootName, elementName ) → RootElement
module:engine/model/writer~Writer#addRoot
Adds a new root to the document (or re-attaches a detached root).
Throws an error, if trying to add a root that is already added and attached.
Parameters
rootName : string
Name of the added root.
elementName : string
The element name. Defaults to
'$root'
which also has some basic schema defined (e.g.$block
elements are allowed inside the$root
). Make sure to define a proper schema if you use a different name.Defaults to
'$root'
Returns
RootElement
The added root element.
-
append( item, parent ) → void
module:engine/model/writer~Writer#append
Inserts item at the end of the given parent.
const paragraph = writer.createElement( 'paragraph' ); writer.append( paragraph, root );
Note that if the item already has parent it will be removed from the previous parent.
If you want to move range instead of an item use
Writer#move()
.Parameters
item : DocumentFragment | Item
Item or document fragment to insert.
parent : Element | DocumentFragment
Returns
void
-
appendElement( name, attributes, parent ) → void
module:engine/model/writer~Writer#appendElement:WITH_ATTRIBUTES
Creates element with specified attributes and inserts it at the end of the parent.
writer.appendElement( 'paragraph', { alignment: 'center' }, root );
Parameters
name : string
Name of the element.
attributes : NodeAttributes
Elements attributes.
parent : Element | DocumentFragment
Returns
void
-
appendElement( name, parent ) → void
module:engine/model/writer~Writer#appendElement:WITHOUT_ATTRIBUTES
Creates element and inserts it at the end of the parent.
writer.appendElement( 'paragraph', root );
Parameters
name : string
Name of the element.
parent : Element | DocumentFragment
Returns
void
-
appendText( text, attributes, parent ) → void
module:engine/model/writer~Writer#appendText:WITH_ATTRIBUTES
Creates text node with specified attributes and inserts it at the end of the parent.
writer.appendText( 'foo', { bold: true }, paragraph );
Parameters
text : string
Text data.
attributes : NodeAttributes
Text attributes.
parent : Element | DocumentFragment
Returns
void
-
appendText( text, parent ) → void
module:engine/model/writer~Writer#appendText:WITHOUT_ATTRIBUTES
Creates text node and inserts it at the end of the parent.
writer.appendText( 'foo', paragraph );
Parameters
text : string
Text data.
parent : Element | DocumentFragment
Returns
void
-
clearAttributes( itemOrRange ) → void
module:engine/model/writer~Writer#clearAttributes
Removes all attributes from all elements in the range or from the given item.
Parameters
Returns
void
-
cloneElement( element, deep ) → Element
module:engine/model/writer~Writer#cloneElement
Creates a copy of the element and returns it. Created element has the same name and attributes as the original element. If clone is deep, the original element's children are also cloned. If not, then empty element is returned.
Parameters
element : Element
The element to clone.
deep : boolean
If set to
true
clones element and all its children recursively. When set tofalse
, element will be cloned without any child.Defaults to
true
Returns
-
createDocumentFragment() → DocumentFragment
module:engine/model/writer~Writer#createDocumentFragment
-
createElement( name, [ attributes ] ) → Element
module:engine/model/writer~Writer#createElement
Creates a new element.
writer.createElement( 'paragraph' ); writer.createElement( 'paragraph', { alignment: 'center' } );
Parameters
name : string
Name of the element.
[ attributes ] : NodeAttributes
Elements attributes.
Returns
Element
Created element.
-
createPositionAfter( item ) → Position
module:engine/model/writer~Writer#createPositionAfter
Shortcut for
Model#createPositionAfter()
.Parameters
item : Item
Item after which the position should be placed.
Returns
-
createPositionAt( itemOrPosition, [ offset ] ) → Position
module:engine/model/writer~Writer#createPositionAt
Shortcut for
Model#createPositionAt()
.Parameters
itemOrPosition : DocumentFragment | Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when first parameter is a model item.
Returns
-
createPositionBefore( item ) → Position
module:engine/model/writer~Writer#createPositionBefore
Shortcut for
Model#createPositionBefore()
.Parameters
item : Item
Item after which the position should be placed.
Returns
-
createPositionFromPath( root, path, [ stickiness ] ) → Position
module:engine/model/writer~Writer#createPositionFromPath
Shortcut for
Model#createPositionFromPath()
.Parameters
root : Element | DocumentFragment
Root of the position.
path : readonly Array<number>
Position path. See
path
.[ stickiness ] : PositionStickiness
Position stickiness. See
PositionStickiness
.
Returns
-
createRange( start, [ end ] ) → Range
module:engine/model/writer~Writer#createRange
Shortcut for
Model#createRange()
.Parameters
start : Position
Start position.
[ end ] : Position
End position. If not set, range will be collapsed at
start
position.
Returns
-
createRangeIn( element ) → Range
module:engine/model/writer~Writer#createRangeIn
Shortcut for
Model#createRangeIn()
.Parameters
element : Element | DocumentFragment
Element which is a parent for the range.
Returns
-
createRangeOn( element ) → Range
module:engine/model/writer~Writer#createRangeOn
Shortcut for
Model#createRangeOn()
.Parameters
element : Item
Element which is a parent for the range.
Returns
-
createSelection( [ selectable ], [ options ] = { [options.backward] } ) → Selection
module:engine/model/writer~Writer#createSelection:SELECTABLE
Shortcut for
Model#createSelection()
.Parameters
[ selectable ] : null | Position | Range | Selection | DocumentSelection | Iterable<Range>
[ options ] : object
-
Properties
[ options.backward ] : boolean
Returns
-
createSelection( selectable, placeOrOffset, [ options ] = { [options.backward] } ) → Selection
module:engine/model/writer~Writer#createSelection:NODE_OFFSET
Shortcut for
Model#createSelection()
.Parameters
selectable : Node
placeOrOffset : PlaceOrOffset
[ options ] : object
-
Properties
[ options.backward ] : boolean
Returns
-
createText( data, [ attributes ] ) → Text
module:engine/model/writer~Writer#createText
Creates a new text node.
writer.createText( 'foo' ); writer.createText( 'foo', { bold: true } );
Parameters
data : string
Text data.
[ attributes ] : NodeAttributes
Text attributes.
Returns
Text
Created text node.
-
detachRoot( rootOrName ) → void
module:engine/model/writer~Writer#detachRoot
Detaches the root from the document.
All content and markers are removed from the root upon detaching. New content and new markers cannot be added to the root, as long as it is detached.
A root cannot be fully removed from the document, it can be only detached. A root is permanently removed only after you re-initialize the editor and do not specify the root in the initial data.
A detached root can be re-attached using
addRoot
.Throws an error if the root does not exist or the root is already detached.
Parameters
rootOrName : string | RootElement
Name of the detached root.
Returns
void
-
insert( item, itemOrPosition, offset ) → void
module:engine/model/writer~Writer#insert
Inserts item on given position.
const paragraph = writer.createElement( 'paragraph' ); writer.insert( paragraph, position );
Instead of using position you can use parent and offset:
const text = writer.createText( 'foo' ); writer.insert( text, paragraph, 5 );
You can also use
end
instead of the offset to insert at the end:const text = writer.createText( 'foo' ); writer.insert( text, paragraph, 'end' );
Or insert before or after another element:
const paragraph = writer.createElement( 'paragraph' ); writer.insert( paragraph, anotherParagraph, 'after' );
These parameters works the same way as
writer.createPositionAt()
.Note that if the item already has parent it will be removed from the previous parent.
Note that you cannot re-insert a node from a document to a different document or a document fragment. In this case,
model-writer-insert-forbidden-move
is thrown.If you want to move range instead of an item use
Writer#move()
.Note: For a paste-like content insertion mechanism see
model.insertContent()
.Parameters
item : DocumentFragment | Item
Item or document fragment to insert.
itemOrPosition : DocumentFragment | Position | Item
offset : PositionOffset
Offset or one of the flags. Used only when second parameter is a model item.
Defaults to
0
Returns
void
-
insertElement( name, attributes, itemOrPosition, [ offset ] ) → void
module:engine/model/writer~Writer#insertElement:WITH_ATTRIBUTES
Creates and inserts element with specified attributes on given position.
writer.insertElement( 'paragraph', { alignment: 'center' }, position );
Instead of using position you can use parent and offset or define that text should be inserted at the end or before or after other node:
// Inserts paragraph in the root at offset 5: writer.insertElement( 'paragraph', { alignment: 'center' }, root, 5 ); // Inserts paragraph at the end of a blockquote: writer.insertElement( 'paragraph', { alignment: 'center' }, blockquote, 'end' ); // Inserts after an image: writer.insertElement( 'paragraph', { alignment: 'center' }, image, 'after' );
These parameters works the same way as
writer.createPositionAt()
.Parameters
name : string
Name of the element.
attributes : NodeAttributes
Elements attributes.
itemOrPosition : DocumentFragment | Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when third parameter is a model item.
Returns
void
-
insertElement( name, itemOrPosition, [ offset ] ) → void
module:engine/model/writer~Writer#insertElement:WITHOUT_ATTRIBUTES
Creates and inserts element on given position. You can optionally set attributes:
writer.insertElement( 'paragraph', position );
Instead of using position you can use parent and offset or define that text should be inserted at the end or before or after other node:
// Inserts paragraph in the root at offset 5: writer.insertElement( 'paragraph', root, 5 ); // Inserts paragraph at the end of a blockquote: writer.insertElement( 'paragraph', blockquote, 'end' ); // Inserts after an image: writer.insertElement( 'paragraph', image, 'after' );
These parameters works the same way as
writer.createPositionAt()
.Parameters
name : string
Name of the element.
itemOrPosition : DocumentFragment | Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when second parameter is a model item.
Returns
void
-
insertText( text, [ attributes ], [ itemOrPosition ], [ offset ] ) → void
module:engine/model/writer~Writer#insertText:WITH_ATTRIBUTES
Creates and inserts text with specified attributes on given position.
writer.insertText( 'foo', { bold: true }, position );
Instead of using position you can use parent and offset or define that text should be inserted at the end or before or after other node:
// Inserts 'foo' in paragraph, at offset 5: writer.insertText( 'foo', { bold: true }, paragraph, 5 ); // Inserts 'foo' at the end of a paragraph: writer.insertText( 'foo', { bold: true }, paragraph, 'end' ); // Inserts 'foo' after an image: writer.insertText( 'foo', { bold: true }, image, 'after' );
These parameters work in the same way as
writer.createPositionAt()
.Parameters
text : string
Text data.
[ attributes ] : NodeAttributes
Text attributes.
[ itemOrPosition ] : Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when third parameter is a model item.
Returns
void
-
insertText( text, [ itemOrPosition ], [ offset ] ) → void
module:engine/model/writer~Writer#insertText:WITHOUT_ATTRIBUTES
Creates and inserts text on given position.
writer.insertText( 'foo', position );
Instead of using position you can use parent and offset or define that text should be inserted at the end or before or after other node:
// Inserts 'foo' in paragraph, at offset 5: writer.insertText( 'foo', paragraph, 5 ); // Inserts 'foo' at the end of a paragraph: writer.insertText( 'foo', paragraph, 'end' ); // Inserts 'foo' after an image: writer.insertText( 'foo', image, 'after' );
These parameters work in the same way as
writer.createPositionAt()
.Parameters
text : string
Text data.
[ itemOrPosition ] : Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when second parameter is a model item.
Returns
void
-
merge( position ) → void
module:engine/model/writer~Writer#merge
Merges two siblings at the given position.
Node before and after the position have to be an element. Otherwise
writer-merge-no-element-before
orwriter-merge-no-element-after
error will be thrown.Parameters
position : Position
Position between merged elements.
Returns
void
-
move( range, itemOrPosition, [ offset ] ) → void
module:engine/model/writer~Writer#move
Moves all items in the source range to the target position.
writer.move( sourceRange, targetPosition );
Instead of the target position you can use parent and offset or define that range should be moved to the end or before or after chosen item:
// Moves all items in the range to the paragraph at offset 5: writer.move( sourceRange, paragraph, 5 ); // Moves all items in the range to the end of a blockquote: writer.move( sourceRange, blockquote, 'end' ); // Moves all items in the range to a position after an image: writer.move( sourceRange, image, 'after' );
These parameters work the same way as
writer.createPositionAt()
.Note that items can be moved only within the same tree. It means that you can move items within the same root (element or document fragment) or between documents roots, but you can not move items from document fragment to the document or from one detached element to another. Use
insert
in such cases.Parameters
range : Range
Source range.
itemOrPosition : Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when second parameter is a model item.
Returns
void
-
overrideSelectionGravity() → string
module:engine/model/writer~Writer#overrideSelectionGravity
Temporarily changes the gravity of the selection from left to right.
The gravity defines from which direction the selection inherits its attributes. If it's the default left gravity, then the selection (after being moved by the user) inherits attributes from its left-hand side. This method allows to temporarily override this behavior by forcing the gravity to the right.
For the following model fragment:
<$text bold="true" linkHref="url">bar[]</$text><$text bold="true">biz</$text>
- Default gravity: selection will have the
bold
andlinkHref
attributes. - Overridden gravity: selection will have
bold
attribute.
Note: It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry of the process.
Returns
string
The unique id which allows restoring the gravity.
- Default gravity: selection will have the
-
remove( itemOrRange ) → void
module:engine/model/writer~Writer#remove
-
removeAttribute( key, itemOrRange ) → void
module:engine/model/writer~Writer#removeAttribute
Removes an attribute with given key from a model item or from a range.
Parameters
key : string
Attribute key.
itemOrRange : Range | Item
Model item or range from which the attribute will be removed.
Returns
void
-
removeMarker( markerOrName ) → void
module:engine/model/writer~Writer#removeMarker
-
removeSelectionAttribute( keyOrIterableOfKeys ) → void
module:engine/model/writer~Writer#removeSelectionAttribute
Removes attribute(s) with given key(s) from the selection.
Remove one attribute:
writer.removeSelectionAttribute( 'italic' );
Remove multiple attributes:
writer.removeSelectionAttribute( [ 'italic', 'bold' ] );
Parameters
keyOrIterableOfKeys : string | Iterable<string>
Key of the attribute to remove or an iterable of attribute keys to remove.
Returns
void
-
rename( element, newName ) → void
module:engine/model/writer~Writer#rename
Renames the given element.
Parameters
element : Element | DocumentFragment
The element to rename.
newName : string
New element name.
Returns
void
-
restoreSelectionGravity( uid ) → void
module:engine/model/writer~Writer#restoreSelectionGravity
Restores
overrideSelectionGravity
gravity to default.Restoring the gravity is only possible using the unique identifier returned by
overrideSelectionGravity
. Note that the gravity remains overridden as long as won't be restored the same number of times it was overridden.Parameters
uid : string
The unique id returned by
overrideSelectionGravity
.
Returns
void
-
setAttribute( key, value, itemOrRange ) → void
module:engine/model/writer~Writer#setAttribute
Sets value of the attribute with given key on a model item or on a range.
Parameters
key : string
Attribute key.
value : unknown
Attribute new value.
itemOrRange : Range | Item
Model item or range on which the attribute will be set.
Returns
void
-
setAttributes( attributes, itemOrRange ) → void
module:engine/model/writer~Writer#setAttributes
Sets values of attributes on a model item or on a range.
writer.setAttributes( { bold: true, italic: true }, range );
Parameters
attributes : NodeAttributes
Attributes keys and values.
itemOrRange : Range | Item
Model item or range on which the attributes will be set.
Returns
void
-
setSelection( selectable, [ options ] = { [options.backward] } ) → void
module:engine/model/writer~Writer#setSelection:SELECTABLE
Sets the document's selection (ranges and direction) to the specified location based on the given selectable or creates an empty selection if no arguments were passed.
// Sets selection to the given range. const range = writer.createRange( start, end ); writer.setSelection( range ); // Sets selection to given ranges. const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ]; writer.setSelection( ranges ); // Sets selection to other selection. const otherSelection = writer.createSelection(); writer.setSelection( otherSelection ); // Sets selection to the given document selection. const documentSelection = model.document.selection; writer.setSelection( documentSelection ); // Sets collapsed selection at the given position. const position = writer.createPosition( root, path ); writer.setSelection( position ); // Removes all selection's ranges. writer.setSelection( null );
Writer#setSelection()
allow passing additional options (backward
) as the last argument.// Sets selection as backward. writer.setSelection( range, { backward: true } );
Throws
writer-incorrect-use
error when the writer is used outside thechange()
block.See also:
setSelection( node, placeOrOffset, options )
.Parameters
selectable : null | Position | Range | Selection | DocumentSelection | Iterable<Range>
[ options ] : object
-
Properties
[ options.backward ] : boolean
Returns
void
-
setSelection( selectable, placeOrOffset, [ options ] = { [options.backward] } ) → void
module:engine/model/writer~Writer#setSelection:NODE_OFFSET
Sets the document's selection (ranges and direction) to the specified location based on the given selectable or creates an empty selection if no arguments were passed.
// Sets collapsed selection at the position of the given node and an offset. writer.setSelection( paragraph, offset );
Creates a range inside an element which starts before the first child of that element and ends after the last child of that element.
writer.setSelection( paragraph, 'in' );
Creates a range on an item which starts before the item and ends just after the item.
writer.setSelection( paragraph, 'on' );
Writer#setSelection()
allow passing additional options (backward
) as the last argument.// Sets selection as backward. writer.setSelection( element, 'in', { backward: true } );
Throws
writer-incorrect-use
error when the writer is used outside thechange()
block.See also:
setSelection( selectable, options )
.Parameters
selectable : Node
placeOrOffset : PlaceOrOffset
[ options ] : object
-
Properties
[ options.backward ] : boolean
Returns
void
-
setSelectionAttribute( objectOrIterable ) → void
module:engine/model/writer~Writer#setSelectionAttribute:OBJECT
Sets attributes on the selection. If any attribute with the same key already is set, it's value is overwritten.
Using key-value object:
writer.setSelectionAttribute( { italic: true, bold: false } );
Using iterable object:
writer.setSelectionAttribute( new Map( [ [ 'italic', true ] ] ) );
Parameters
objectOrIterable : NodeAttributes
Object / iterable of key => value attribute pairs.
Returns
void
-
setSelectionAttribute( key, value ) → void
module:engine/model/writer~Writer#setSelectionAttribute:KEY_VALUE
Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.
writer.setSelectionAttribute( 'italic', true );
Parameters
key : string
Key of the attribute to set.
value : unknown
Attribute value.
Returns
void
-
setSelectionFocus( itemOrPosition, [ offset ] ) → void
module:engine/model/writer~Writer#setSelectionFocus
Moves
focus
to the specified location.The location can be specified in the same form as
writer.createPositionAt()
parameters.Parameters
itemOrPosition : Position | Item
[ offset ] : PositionOffset
Offset or one of the flags. Used only when first parameter is a model item.
Returns
void
-
split( position, [ limitElement ] ) → object
module:engine/model/writer~Writer#split
Splits elements starting from the given position and going to the top of the model tree as long as given
limitElement
is reached. WhenlimitElement
is not defined then only the parent of the given position will be split.The element needs to have a parent. It cannot be a root element nor a document fragment. The
writer-split-element-no-parent
error will be thrown if you try to split an element with no parent.Parameters
position : Position
Position of split.
[ limitElement ] : Node | DocumentFragment
Stop splitting when this element will be reached.
Returns
object
Split result with properties:
position
- Position between split elements.range
- Range that stars from the end of the first split element and ends at the beginning of the first copy element.
-
unwrap( element ) → void
module:engine/model/writer~Writer#unwrap
Unwraps children of the given element – all its children are moved before it and then the element is removed. Throws error if you try to unwrap an element which does not have a parent.
Parameters
element : Element
Element to unwrap.
Returns
void
-
updateMarker( markerOrName, [ options ] = { [options.affectsData], [options.range], [options.usingOperation] } ) → void
module:engine/model/writer~Writer#updateMarker
Adds, updates or refreshes a marker. Marker is a named range, which tracks changes in the document and updates its range automatically, when model tree changes. Still, it is possible to change the marker's range directly using this method.
As the first parameter you can set marker name or instance. If none of them is provided, new marker, with a unique name is created and returned.
Note: If you want to change the view element of the marker while its data in the model remains the same, use the dedicated
reconvertMarker
method.The
options.usingOperation
parameter lets you change if the marker should be managed by operations or not. See marker class description to learn about the difference between markers managed by operations and not-managed by operations. It is possible to change this option for an existing marker.The
options.affectsData
parameter, which defaults tofalse
, allows you to define if a marker affects the data. It should betrue
when the marker change changes the data returned by theeditor.getData()
method. When set totrue
it fires thechange:data
event. When set tofalse
it fires thechange
event.Update marker directly base on marker's name:
updateMarker( markerName, { range } );
Update marker using operation:
updateMarker( marker, { range, usingOperation: true } ); updateMarker( markerName, { range, usingOperation: true } );
Change marker's option (start using operations to manage it):
updateMarker( marker, { usingOperation: true } );
Change marker's option (inform the engine, that the marker does not affect the data anymore):
updateMarker( markerName, { affectsData: false } );
Parameters
markerOrName : string | Marker
Name of a marker to update, or a marker instance.
[ options ] : object
If options object is not defined then marker will be refreshed by triggering downcast conversion for this marker with the same data.
Properties[ options.affectsData ] : boolean
Flag indicating that the marker changes the editor data.
[ options.range ] : Range
Marker range to update.
[ options.usingOperation ] : boolean
Flag indicated whether the marker should be added by MarkerOperation. See
managedUsingOperations
.
Returns
void
Related:
-
wrap( range, elementOrString ) → void
module:engine/model/writer~Writer#wrap
Wraps the given range with the given element or with a new element (if a string was passed).
Note: range to wrap should be a "flat range" (see
Range#isFlat
). If not, an error will be thrown.Parameters
range : Range
Range to wrap.
elementOrString : string | Element
Element or name of element to wrap the range with.
Returns
void
-
private
_addOperationForAffectedMarkers( type, positionOrRange ) → void
module:engine/model/writer~Writer#_addOperationForAffectedMarkers
For given action
type
andpositionOrRange
where the action happens, this function finds all affected markers and applies a marker operation with the new marker range equal to the current range. Thanks to this, the marker range can be later correctly processed during undo.Parameters
type : 'merge' | 'move'
Writer action type.
positionOrRange : Position | Range
Position or range where the writer action happens.
Returns
void
-
private
_assertWriterUsedCorrectly() → void
module:engine/model/writer~Writer#_assertWriterUsedCorrectly
Throws
writer-detached-writer-tries-to-modify-model
error when the writer is used outside of thechange()
block.Returns
void
-
Performs merge action in a non-detached tree.
Parameters
position : Position
Position between merged elements.
Returns
void
-
Performs merge action in a detached tree.
Parameters
position : Position
Position between merged elements.
Returns
void
-
private
_removeSelectionAttribute( key ) → void
module:engine/model/writer~Writer#_removeSelectionAttribute
-
private
_setSelectionAttribute( key, value ) → void
module:engine/model/writer~Writer#_setSelectionAttribute
Parameters
key : string
Key of the attribute to remove.
value : unknown
Attribute value.
Returns
void
Every day, we work hard to keep our documentation complete. Have you spotted outdated information? Is something missing? Please report it via our issue tracker.
With the release of version 42.0.0, we have rewritten much of our documentation to reflect the new import paths and features. We appreciate your feedback to help us ensure its accuracy and completeness.