insertoperation.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 Operation from './operation.js';
  7. import NodeList from '../nodelist.js';
  8. import Position from '../position.js';
  9. import Range from '../range.js';
  10. import RemoveOperation from './removeoperation.js';
  11. /**
  12. * Operation to insert list of nodes on the given position in the tree data model.
  13. *
  14. * @memberOf engine.treeModel.operation
  15. * @extends engine.treeModel.operation.Operation
  16. */
  17. export default class InsertOperation extends Operation {
  18. /**
  19. * Creates an insert operation.
  20. *
  21. * @param {engine.treeModel.Position} position Position of insertion.
  22. * @param {engine.treeModel.NodeSet} nodes The list of nodes to be inserted.
  23. * List of nodes can be any type accepted by the {@link engine.treeModel.NodeList} constructor.
  24. * @param {Number} baseVersion {@link engine.treeModel.Document#version} on which operation can be applied.
  25. */
  26. constructor( position, nodes, baseVersion ) {
  27. super( baseVersion );
  28. /**
  29. * Position of insertion.
  30. *
  31. * @readonly
  32. * @member {engine.treeModel.Position} engine.treeModel.operation.InsertOperation#position
  33. */
  34. this.position = Position.createFromPosition( position );
  35. /**
  36. * List of nodes to insert.
  37. *
  38. * @readonly
  39. * @member {engine.treeModel.NodeList} engine.treeModel.operation.InsertOperation#nodeList
  40. */
  41. this.nodeList = new NodeList( nodes );
  42. }
  43. get type() {
  44. return 'insert';
  45. }
  46. /**
  47. * @returns {engine.treeModel.operation.InsertOperation}
  48. */
  49. clone() {
  50. return new InsertOperation( this.position, this.nodeList, this.baseVersion );
  51. }
  52. /**
  53. * @returns {engine.treeModel.operation.RemoveOperation}
  54. */
  55. getReversed() {
  56. return new RemoveOperation( this.position, this.nodeList.length, this.baseVersion + 1 );
  57. }
  58. _execute() {
  59. this.position.parent.insertChildren( this.position.offset, this.nodeList );
  60. return {
  61. range: Range.createFromPositionAndShift( this.position, this.nodeList.length )
  62. };
  63. }
  64. }