removeoperation.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. 'use strict';
  6. import MoveOperation from './moveoperation.js';
  7. import Position from '../position.js';
  8. import ReinsertOperation from './reinsertoperation.js';
  9. /**
  10. * Operation to remove a range of nodes.
  11. *
  12. * @memberOf core.treeModel.operation
  13. * @extends core.treeModel.operation.Operation
  14. */
  15. export default class RemoveOperation extends MoveOperation {
  16. /**
  17. *
  18. * Creates a remove operation.
  19. *
  20. * @param {core.treeModel.Position} position Position before the first node to remove.
  21. * @param {Number} howMany How many nodes to remove.
  22. * @param {Number} baseVersion {@link core.treeModel.Document#version} on which operation can be applied.
  23. */
  24. constructor( position, howMany, baseVersion ) {
  25. // Position in a graveyard where nodes were moved.
  26. const graveyardPosition = Position.createFromParentAndOffset( position.root.document.graveyard, 0 );
  27. super( position, howMany, graveyardPosition, baseVersion );
  28. }
  29. get type() {
  30. return 'remove';
  31. }
  32. /**
  33. * @returns {core.treeModel.operation.ReinsertOperation}
  34. */
  35. getReversed() {
  36. return new ReinsertOperation( this.targetPosition, this.howMany, this.sourcePosition, this.baseVersion + 1 );
  37. }
  38. /**
  39. * @returns {core.treeModel.operation.RemoveOperation}
  40. */
  41. clone() {
  42. return new RemoveOperation( this.sourcePosition, this.howMany, this.baseVersion );
  43. }
  44. }