| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /**
- * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
- 'use strict';
- import Delta from './delta.js';
- import { register } from '../batch-base.js';
- import MoveOperation from '../operation/moveoperation.js';
- import Position from '../position.js';
- import Range from '../range.js';
- import CKEditorError from '../../ckeditorerror.js';
- /**
- * @classdesc
- * To provide specific OT behavior and better collisions solving, {@link core.treeModel.Batch#move} method
- * uses the `MoveDelta` class which inherits from the `Delta` class and may overwrite some methods.
- *
- * @memberOf core.treeModel.delta
- */
- export default class MoveDelta extends Delta {}
- function addMoveOperation( batch, delta, sourcePosition, howMany, targetPosition ) {
- const operation = new MoveOperation( sourcePosition, howMany, targetPosition, batch.doc.version );
- batch.doc.applyOperation( operation );
- delta.addOperation( operation );
- }
- /**
- * Moves given node or given range of nodes to target position.
- *
- * @chainable
- * @method core.treeModel.Batch#move
- * @param {core.treeModel.Node|core.treeModel.Range} nodeOrRange Node or range of nodes to move.
- * @param {core.treeModel.Position} targetPosition Position where moved nodes will be inserted.
- */
- register( 'move', function( nodeOrRange, targetPosition ) {
- const delta = new MoveDelta();
- if ( nodeOrRange instanceof Range ) {
- if ( !nodeOrRange.isFlat ) {
- /**
- * Range to move is not flat.
- *
- * @error batch-move-range-not-flat
- */
- throw new CKEditorError( 'batch-move-range-not-flat: Range to move is not flat.' );
- }
- addMoveOperation( this, delta, nodeOrRange.start, nodeOrRange.end.offset - nodeOrRange.start.offset, targetPosition );
- } else {
- addMoveOperation( this, delta, Position.createBefore( nodeOrRange ), 1, targetPosition );
- }
- this.addDelta( delta );
- return this;
- } );
|