easy-richtextarea 4.0.34 → 4.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/example.js +93 -1563
  2. package/lib/browser.js +1 -37
  3. package/lib/main.js +4 -45
  4. package/lib/mixins/event.js +11 -10
  5. package/lib/richTextarea.js +31 -156
  6. package/lib/selection.js +7 -146
  7. package/package.json +1 -3
  8. package/src/browser.js +0 -11
  9. package/src/main.js +0 -12
  10. package/src/mixins/event.js +3 -4
  11. package/src/richTextarea.js +22 -239
  12. package/src/selection.js +4 -154
  13. package/lib/constants.js +0 -22
  14. package/lib/contentCompare.js +0 -34
  15. package/lib/eventTypes.js +0 -49
  16. package/lib/keyCodes.js +0 -13
  17. package/lib/operation/delete.js +0 -290
  18. package/lib/operation/empty.js +0 -116
  19. package/lib/operation/insert.js +0 -245
  20. package/lib/operations/fromJSON.js +0 -40
  21. package/lib/operations/generate.js +0 -42
  22. package/lib/operations/toJSON.js +0 -17
  23. package/lib/transform/content.js +0 -19
  24. package/lib/transform/operations.js +0 -31
  25. package/lib/transform/selection.js +0 -19
  26. package/lib/types.js +0 -34
  27. package/lib/undoBuffer.js +0 -145
  28. package/src/constants.js +0 -4
  29. package/src/contentCompare.js +0 -34
  30. package/src/eventTypes.js +0 -15
  31. package/src/keyCodes.js +0 -3
  32. package/src/operation/delete.js +0 -285
  33. package/src/operation/empty.js +0 -76
  34. package/src/operation/insert.js +0 -221
  35. package/src/operations/fromJSON.js +0 -34
  36. package/src/operations/generate.js +0 -46
  37. package/src/operations/toJSON.js +0 -5
  38. package/src/transform/content.js +0 -11
  39. package/src/transform/operations.js +0 -57
  40. package/src/transform/selection.js +0 -11
  41. package/src/types.js +0 -11
  42. package/src/undoBuffer.js +0 -119
  43. package/test/content/transform.js +0 -57
  44. package/test/helpers.js +0 -91
  45. package/test/operation/delete.js +0 -390
  46. package/test/operation/empty.js +0 -101
  47. package/test/operation/insert.js +0 -306
  48. package/test/operations/generate.js +0 -78
  49. package/test/operations/transform.js +0 -69
package/lib/undoBuffer.js DELETED
@@ -1,145 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return UndoBuffer;
9
- }
10
- });
11
- var _necessary = require("necessary");
12
- var _empty = /*#__PURE__*/ _interopRequireDefault(require("./operation/empty"));
13
- var _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
14
- var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
15
- var _operations = /*#__PURE__*/ _interopRequireDefault(require("./transform/operations"));
16
- function _classCallCheck(instance, Constructor) {
17
- if (!(instance instanceof Constructor)) {
18
- throw new TypeError("Cannot call a class as a function");
19
- }
20
- }
21
- function _defineProperties(target, props) {
22
- for(var i = 0; i < props.length; i++){
23
- var descriptor = props[i];
24
- descriptor.enumerable = descriptor.enumerable || false;
25
- descriptor.configurable = true;
26
- if ("value" in descriptor) descriptor.writable = true;
27
- Object.defineProperty(target, descriptor.key, descriptor);
28
- }
29
- }
30
- function _createClass(Constructor, protoProps, staticProps) {
31
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
32
- if (staticProps) _defineProperties(Constructor, staticProps);
33
- return Constructor;
34
- }
35
- function _instanceof(left, right) {
36
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
37
- return !!right[Symbol.hasInstance](left);
38
- } else {
39
- return left instanceof right;
40
- }
41
- }
42
- function _interopRequireDefault(obj) {
43
- return obj && obj.__esModule ? obj : {
44
- default: obj
45
- };
46
- }
47
- var clear = _necessary.arrayUtilities.clear, filter = _necessary.arrayUtilities.filter, unshift = _necessary.arrayUtilities.unshift;
48
- var UndoBuffer = /*#__PURE__*/ function() {
49
- function UndoBuffer(undoOperations, redoOperations) {
50
- _classCallCheck(this, UndoBuffer);
51
- this.undoOperations = undoOperations;
52
- this.redoOperations = redoOperations;
53
- }
54
- _createClass(UndoBuffer, [
55
- {
56
- key: "getUndoOperations",
57
- value: function getUndoOperations() {
58
- return this.undoOperations;
59
- }
60
- },
61
- {
62
- key: "getRedoOperations",
63
- value: function getRedoOperations() {
64
- return this.redoOperations;
65
- }
66
- },
67
- {
68
- key: "undo",
69
- value: function undo() {
70
- var undoOperation = null;
71
- var undoOperationsLength = this.undoOperations.length;
72
- if (undoOperationsLength > 0) {
73
- undoOperation = this.undoOperations.shift();
74
- var invertedUndoOperation = undoOperation.invert(_insert.default, _delete.default), redoOperation = invertedUndoOperation; ///
75
- this.redoOperations.unshift(redoOperation);
76
- }
77
- return undoOperation;
78
- }
79
- },
80
- {
81
- key: "redo",
82
- value: function redo() {
83
- var redoOperation = null;
84
- var redoOperationsLength = this.redoOperations.length;
85
- if (redoOperationsLength > 0) {
86
- redoOperation = this.redoOperations.shift();
87
- var invertedRedoOperation = redoOperation.invert(_insert.default, _delete.default), undoOperation = invertedRedoOperation; ///
88
- this.undoOperations.unshift(undoOperation);
89
- }
90
- return redoOperation;
91
- }
92
- },
93
- {
94
- key: "transform",
95
- value: function transform(operations) {
96
- this.undoOperations = (0, _operations.default)(this.undoOperations, operations);
97
- this.redoOperations = (0, _operations.default)(this.redoOperations, operations);
98
- filterEmptyOperations(this.undoOperations);
99
- filterEmptyOperations(this.redoOperations);
100
- }
101
- },
102
- {
103
- key: "addOperations",
104
- value: function addOperations(operations) {
105
- var invertedOperations = invertOperations(operations), reversedInvertedOperations = reverseOperations(invertedOperations), undoOperations = reversedInvertedOperations; ///
106
- unshift(this.undoOperations, undoOperations);
107
- clear(this.redoOperations);
108
- }
109
- }
110
- ], [
111
- {
112
- key: "fromNothing",
113
- value: function fromNothing() {
114
- var undoOperations = [], redoOperations = [], undoBuffer = new UndoBuffer(undoOperations, redoOperations);
115
- return undoBuffer;
116
- }
117
- }
118
- ]);
119
- return UndoBuffer;
120
- }();
121
- function invertOperations(operations) {
122
- var invertedOperations = operations.map(function(operation) {
123
- var invertedOperation = operation.invert(_insert.default, _delete.default);
124
- return invertedOperation;
125
- });
126
- return invertedOperations;
127
- }
128
- function reverseOperations(operations) {
129
- var reversedOperations = operations.reduce(function(reversedOperations, operation) {
130
- var reversedOperation = operation; ///
131
- reversedOperations.unshift(reversedOperation);
132
- return reversedOperations;
133
- }, []);
134
- return reversedOperations;
135
- }
136
- function filterEmptyOperations(operations) {
137
- filter(operations, function(operation) {
138
- var operationEmptyOperation = _instanceof(operation, _empty.default);
139
- if (!operationEmptyOperation) {
140
- return true;
141
- }
142
- });
143
- }
144
-
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91bmRvQnVmZmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9lbXB0eVwiO1xuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XG5pbXBvcnQgRGVsZXRlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWxldGVcIjtcbmltcG9ydCB0cmFuc2Zvcm1PcGVyYXRpb25zIGZyb20gXCIuL3RyYW5zZm9ybS9vcGVyYXRpb25zXCI7XG5cbmNvbnN0IHsgY2xlYXIsIGZpbHRlciwgdW5zaGlmdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVuZG9CdWZmZXIge1xuICBjb25zdHJ1Y3Rvcih1bmRvT3BlcmF0aW9ucywgcmVkb09wZXJhdGlvbnMpIHtcbiAgICB0aGlzLnVuZG9PcGVyYXRpb25zID0gdW5kb09wZXJhdGlvbnM7XG4gICAgdGhpcy5yZWRvT3BlcmF0aW9ucyA9IHJlZG9PcGVyYXRpb25zO1xuICB9XG5cbiAgZ2V0VW5kb09wZXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudW5kb09wZXJhdGlvbnM7XG4gIH1cbiAgXG4gIGdldFJlZG9PcGVyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnJlZG9PcGVyYXRpb25zO1xuICB9XG5cbiAgdW5kbygpIHtcbiAgICBsZXQgdW5kb09wZXJhdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB1bmRvT3BlcmF0aW9uc0xlbmd0aCA9IHRoaXMudW5kb09wZXJhdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHVuZG9PcGVyYXRpb25zTGVuZ3RoID4gMCkge1xuICAgICAgdW5kb09wZXJhdGlvbiA9IHRoaXMudW5kb09wZXJhdGlvbnMuc2hpZnQoKTtcblxuICAgICAgY29uc3QgaW52ZXJ0ZWRVbmRvT3BlcmF0aW9uID0gdW5kb09wZXJhdGlvbi5pbnZlcnQoSW5zZXJ0T3BlcmF0aW9uLCBEZWxldGVPcGVyYXRpb24pLFxuICAgICAgICAgICAgcmVkb09wZXJhdGlvbiA9IGludmVydGVkVW5kb09wZXJhdGlvbjsgIC8vL1xuXG4gICAgICB0aGlzLnJlZG9PcGVyYXRpb25zLnVuc2hpZnQocmVkb09wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZG9PcGVyYXRpb247XG4gIH1cblxuICByZWRvKCkge1xuICAgIGxldCByZWRvT3BlcmF0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHJlZG9PcGVyYXRpb25zTGVuZ3RoID0gdGhpcy5yZWRvT3BlcmF0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAocmVkb09wZXJhdGlvbnNMZW5ndGggPiAwKSB7XG4gICAgICByZWRvT3BlcmF0aW9uID0gdGhpcy5yZWRvT3BlcmF0aW9ucy5zaGlmdCgpO1xuXG4gICAgICBjb25zdCBpbnZlcnRlZFJlZG9PcGVyYXRpb24gPSByZWRvT3BlcmF0aW9uLmludmVydChJbnNlcnRPcGVyYXRpb24sIERlbGV0ZU9wZXJhdGlvbiksXG4gICAgICAgICAgICB1bmRvT3BlcmF0aW9uID0gaW52ZXJ0ZWRSZWRvT3BlcmF0aW9uOyAgLy8vXG5cbiAgICAgIHRoaXMudW5kb09wZXJhdGlvbnMudW5zaGlmdCh1bmRvT3BlcmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVkb09wZXJhdGlvbjtcbiAgfVxuXG4gIHRyYW5zZm9ybShvcGVyYXRpb25zKSB7XG4gICAgdGhpcy51bmRvT3BlcmF0aW9ucyA9IHRyYW5zZm9ybU9wZXJhdGlvbnModGhpcy51bmRvT3BlcmF0aW9ucywgb3BlcmF0aW9ucyk7XG5cbiAgICB0aGlzLnJlZG9PcGVyYXRpb25zID0gdHJhbnNmb3JtT3BlcmF0aW9ucyh0aGlzLnJlZG9PcGVyYXRpb25zLCBvcGVyYXRpb25zKTtcbiAgICBcbiAgICBmaWx0ZXJFbXB0eU9wZXJhdGlvbnModGhpcy51bmRvT3BlcmF0aW9ucyk7XG5cbiAgICBmaWx0ZXJFbXB0eU9wZXJhdGlvbnModGhpcy5yZWRvT3BlcmF0aW9ucyk7XG4gIH1cblxuICBhZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpIHtcbiAgICBjb25zdCBpbnZlcnRlZE9wZXJhdGlvbnMgPSBpbnZlcnRPcGVyYXRpb25zKG9wZXJhdGlvbnMpLFxuICAgICAgICAgIHJldmVyc2VkSW52ZXJ0ZWRPcGVyYXRpb25zID0gcmV2ZXJzZU9wZXJhdGlvbnMoaW52ZXJ0ZWRPcGVyYXRpb25zKSxcbiAgICAgICAgICB1bmRvT3BlcmF0aW9ucyA9IHJldmVyc2VkSW52ZXJ0ZWRPcGVyYXRpb25zOyAgLy8vXG5cbiAgICB1bnNoaWZ0KHRoaXMudW5kb09wZXJhdGlvbnMsIHVuZG9PcGVyYXRpb25zKTtcblxuICAgIGNsZWFyKHRoaXMucmVkb09wZXJhdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHVuZG9PcGVyYXRpb25zID0gW10sXG4gICAgICAgICAgcmVkb09wZXJhdGlvbnMgPSBbXSxcbiAgICAgICAgICB1bmRvQnVmZmVyID0gbmV3IFVuZG9CdWZmZXIodW5kb09wZXJhdGlvbnMsIHJlZG9PcGVyYXRpb25zKTtcblxuICAgIHJldHVybiB1bmRvQnVmZmVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludmVydE9wZXJhdGlvbnMob3BlcmF0aW9ucykge1xuICBjb25zdCBpbnZlcnRlZE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zLm1hcCgob3BlcmF0aW9uKSA9PiB7XG4gICAgY29uc3QgaW52ZXJ0ZWRPcGVyYXRpb24gPSBvcGVyYXRpb24uaW52ZXJ0KEluc2VydE9wZXJhdGlvbiwgRGVsZXRlT3BlcmF0aW9uKTtcblxuICAgIHJldHVybiBpbnZlcnRlZE9wZXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGludmVydGVkT3BlcmF0aW9ucztcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZU9wZXJhdGlvbnMob3BlcmF0aW9ucykge1xuICBjb25zdCByZXZlcnNlZE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zLnJlZHVjZSgocmV2ZXJzZWRPcGVyYXRpb25zLCBvcGVyYXRpb24pID0+IHtcbiAgICBjb25zdCByZXZlcnNlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbjsgIC8vL1xuXG4gICAgcmV2ZXJzZWRPcGVyYXRpb25zLnVuc2hpZnQocmV2ZXJzZWRPcGVyYXRpb24pO1xuXG4gICAgcmV0dXJuIHJldmVyc2VkT3BlcmF0aW9ucztcbiAgfSwgW10pO1xuXG4gIHJldHVybiByZXZlcnNlZE9wZXJhdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckVtcHR5T3BlcmF0aW9ucyhvcGVyYXRpb25zKSB7XG4gIGZpbHRlcihvcGVyYXRpb25zLCAob3BlcmF0aW9uKSA9PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uRW1wdHlPcGVyYXRpb24gPSAob3BlcmF0aW9uIGluc3RhbmNlb2YgRW1wdHlPcGVyYXRpb24pO1xuXG4gICAgaWYgKCFvcGVyYXRpb25FbXB0eU9wZXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJVbmRvQnVmZmVyIiwiY2xlYXIiLCJhcnJheVV0aWxpdGllcyIsImZpbHRlciIsInVuc2hpZnQiLCJ1bmRvT3BlcmF0aW9ucyIsInJlZG9PcGVyYXRpb25zIiwiZ2V0VW5kb09wZXJhdGlvbnMiLCJnZXRSZWRvT3BlcmF0aW9ucyIsInVuZG8iLCJ1bmRvT3BlcmF0aW9uIiwidW5kb09wZXJhdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzaGlmdCIsImludmVydGVkVW5kb09wZXJhdGlvbiIsImludmVydCIsIkluc2VydE9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsInJlZG9PcGVyYXRpb24iLCJyZWRvIiwicmVkb09wZXJhdGlvbnNMZW5ndGgiLCJpbnZlcnRlZFJlZG9PcGVyYXRpb24iLCJ0cmFuc2Zvcm0iLCJvcGVyYXRpb25zIiwidHJhbnNmb3JtT3BlcmF0aW9ucyIsImZpbHRlckVtcHR5T3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJpbnZlcnRlZE9wZXJhdGlvbnMiLCJpbnZlcnRPcGVyYXRpb25zIiwicmV2ZXJzZWRJbnZlcnRlZE9wZXJhdGlvbnMiLCJyZXZlcnNlT3BlcmF0aW9ucyIsImZyb21Ob3RoaW5nIiwidW5kb0J1ZmZlciIsIm1hcCIsIm9wZXJhdGlvbiIsImludmVydGVkT3BlcmF0aW9uIiwicmV2ZXJzZWRPcGVyYXRpb25zIiwicmVkdWNlIiwicmV2ZXJzZWRPcGVyYXRpb24iLCJvcGVyYXRpb25FbXB0eU9wZXJhdGlvbiIsIkVtcHR5T3BlcmF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQVdxQkE7Ozt5QkFUVTswREFFSjsyREFDQzsyREFDQTsrREFDSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEMsSUFBUUMsUUFBMkJDLHlCQUFjLENBQXpDRCxPQUFPRSxTQUFvQkQseUJBQWMsQ0FBbENDLFFBQVFDLFVBQVlGLHlCQUFjLENBQTFCRTtBQUVSLElBQUEsQUFBTUosMkJBNkVsQixBQTdFWTthQUFNQSxXQUNQSyxjQUFjLEVBQUVDLGNBQWM7OEJBRHZCTjtRQUVqQixJQUFJLENBQUNLLGNBQWMsR0FBR0E7UUFDdEIsSUFBSSxDQUFDQyxjQUFjLEdBQUdBOztpQkFITE47O1lBTW5CTyxLQUFBQTttQkFBQUEsU0FBQUEsb0JBQW9CO2dCQUNsQixPQUFPLElBQUksQ0FBQ0YsY0FBYztZQUM1Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxvQkFBb0I7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDRixjQUFjO1lBQzVCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU87Z0JBQ0wsSUFBSUMsZ0JBQWdCLElBQUk7Z0JBRXhCLElBQU1DLHVCQUF1QixJQUFJLENBQUNOLGNBQWMsQ0FBQ08sTUFBTTtnQkFFdkQsSUFBSUQsdUJBQXVCLEdBQUc7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
package/src/constants.js DELETED
@@ -1,4 +0,0 @@
1
- "use strict";
2
-
3
- export const TEXT = "text";
4
- export const EMPTY_STRING = "";
@@ -1,34 +0,0 @@
1
- "use strict";
2
-
3
- import { EMPTY_STRING } from "./constants";
4
-
5
- export default function contentCompare(contentA, contentB) {
6
- if ((contentA === EMPTY_STRING) && (contentB === EMPTY_STRING)) {
7
- return false;
8
- }
9
-
10
- if (contentA === EMPTY_STRING) {
11
- return true;
12
- }
13
-
14
- if (contentB === EMPTY_STRING) {
15
- return false;
16
- }
17
-
18
- const codePointA = contentA.codePointAt(0),
19
- codePointB = contentB.codePointAt(0);
20
-
21
- if (codePointA < codePointB) {
22
- return true;
23
- }
24
-
25
- if (codePointA > codePointB) {
26
- return false;
27
- }
28
-
29
- contentA = contentA.slice(1); ///
30
-
31
- contentB = contentB.slice(1); ///
32
-
33
- return contentCompare(contentA, contentB);
34
- }
package/src/eventTypes.js DELETED
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- import { eventTypes } from "easy";
4
-
5
- export const { CUT_EVENT_TYPE,
6
- COPY_EVENT_TYPE,
7
- BLUR_EVENT_TYPE,
8
- PASTE_EVENT_TYPE,
9
- INPUT_EVENT_TYPE,
10
- FOCUS_EVENT_TYPE,
11
- CHANGE_EVENT_TYPE,
12
- SCROLL_EVENT_TYPE,
13
- KEYDOWN_EVENT_TYPE,
14
- CONTEXTMENU_EVENT_TYPE,
15
- SELECTIONCHANGE_EVENT_TYPE } = eventTypes;
package/src/keyCodes.js DELETED
@@ -1,3 +0,0 @@
1
- "use strict";
2
-
3
- export const Z_KEY_CODE = 90;
@@ -1,285 +0,0 @@
1
- "use strict";
2
-
3
- import EmptyOperation from "../operation/empty";
4
-
5
- import { INSERT_TYPE, DELETE_TYPE, EMPTY_TYPE } from "../types";
6
-
7
- export default class DeleteOperation {
8
- constructor(type, content, position) {
9
- this.type = type;
10
- this.content = content;
11
- this.position = position;
12
- }
13
-
14
- getType() {
15
- return this.type;
16
- }
17
-
18
- getContent() {
19
- return this.content;
20
- }
21
-
22
- getPosition() {
23
- return this.position;
24
- }
25
-
26
- transformContent(content) {
27
- let start, end;
28
-
29
- start = 0;
30
-
31
- end = this.position;
32
-
33
- const leftContent = content.substring(start, end),
34
- contentLength = this.content.length;
35
-
36
- start = this.position + contentLength;
37
-
38
- const rightContent = content.substring(start),
39
- transformedContent = leftContent + rightContent;
40
-
41
- return transformedContent;
42
- }
43
-
44
- transformOperation(operation) {
45
- const type = operation.getType();
46
-
47
- switch (type) {
48
- case INSERT_TYPE:
49
- return ((tau, rho) => {
50
-
51
- if (tau.position <= rho.position) {
52
- return [tau.clone()];
53
- }
54
-
55
- if (tau.position > rho.position) {
56
- if (tau.position < rho.content.length + rho.position) {
57
- return [tau.left(rho).shift(tau)];
58
- }
59
-
60
- if (tau.position >= rho.content.length + rho.position) {
61
- return [rho.shift(tau)];
62
- }
63
- }
64
-
65
- })(operation, this);
66
-
67
- case DELETE_TYPE:
68
- return ((tau, rho) => {
69
-
70
- if (tau.position < rho.position) {
71
- if (tau.content.length + tau.position <= rho.position) {
72
- return [tau.clone()];
73
- }
74
-
75
- if (tau.content.length + tau.position <= rho.content.length + rho.position) {
76
- return [rho.takenFrom(tau)];
77
- }
78
-
79
- if (tau.content.length + tau.position > rho.content.length + rho.position) {
80
- return [rho.split(tau)];
81
- }
82
- }
83
-
84
- if (tau.position === rho.position) {
85
- if (tau.content.length + tau.position <= rho.content.length + rho.position) {
86
- return [EmptyOperation.fromNothing()];
87
- }
88
-
89
- if (tau.content.length + tau.position > rho.content.length + rho.position) {
90
- return [rho.shift(rho.takenFrom(tau))];
91
- }
92
- }
93
-
94
- if (tau.position >= rho.content.length + rho.position) {
95
- return [rho.shift(tau)];
96
- }
97
-
98
- if (tau.position > rho.position) {
99
- if (tau.content.length + tau.position <= rho.content.length + rho.position) {
100
- return [EmptyOperation.fromNothing()];
101
- }
102
-
103
- if (tau.content.length + tau.position > rho.content.length + rho.position) {
104
- return [rho.shift(rho.takenFrom(tau))];
105
- }
106
- }
107
-
108
- })(operation, this);
109
-
110
- case EMPTY_TYPE:
111
- return ((tau, rho) => {
112
-
113
- return [tau.clone()];
114
-
115
- })(operation, this);
116
- }
117
- }
118
-
119
- transformSelection(selection) {
120
- let transformedSelection;
121
-
122
- const selectionStartPosition = selection.getStartPosition(),
123
- selectionEndPosition = selection.getEndPosition(),
124
- contentLength = this.content.length,
125
- startPosition = this.position, ///
126
- endPosition = startPosition + contentLength;
127
-
128
- if (false) {
129
- ///
130
- } else if (selectionStartPosition >= endPosition) {
131
- const offset = -contentLength;
132
-
133
- transformedSelection = selection.shifted(offset);
134
- } else if (selectionStartPosition >= startPosition) {
135
- if (selectionEndPosition > endPosition) {
136
- const offset = startPosition - selectionStartPosition,
137
- endOffset = selectionStartPosition - endPosition;
138
-
139
- transformedSelection = selection.shifted(offset).endPositionShifted(endOffset);
140
- } else {
141
- const offset = startPosition - selectionStartPosition;
142
-
143
- transformedSelection = selection.emptiedToStart().shifted(offset);
144
- }
145
- } else if (selectionEndPosition > endPosition) {
146
- const endOffset = -contentLength;
147
-
148
- transformedSelection = selection.endPositionShifted(endOffset);
149
- } else if (selectionEndPosition > startPosition) {
150
- const endOffset = startPosition - selectionEndPosition;
151
-
152
- transformedSelection = selection.endPositionShifted(endOffset);
153
- } else {
154
- transformedSelection = selection.clone();
155
- }
156
-
157
- return transformedSelection;
158
- }
159
-
160
- shifted(offset) {
161
- const content = this.content,
162
- position = this.position + offset,
163
- deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
164
-
165
- return deleteOperation;
166
- }
167
-
168
- shift(operation) {
169
- const contentLength = this.content.length,
170
- offset = -contentLength,
171
- shiftedOperation = operation.shifted(offset);
172
-
173
- return shiftedOperation
174
- }
175
-
176
- takenFrom(deleteOperation) {
177
- let content = deleteOperation.getContent(),
178
- position = deleteOperation.getPosition();
179
-
180
- let contentLength = content.length;
181
-
182
- if ((this.position > position) && (this.position + this.content.length >= position + contentLength)) {
183
- const contentLength = this.position - position,
184
- start = 0,
185
- end = start + contentLength; ///
186
-
187
- content = content.substring(start, end);
188
-
189
- deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
190
- }
191
-
192
- if ((this.position <= position) && (this.position + this.content.length < position + contentLength)) {
193
- contentLength = (position + contentLength) - (this.position + this.content.length);
194
-
195
- const start = (this.position + this.content.length) - position,
196
- end = start + contentLength; ///
197
-
198
- position = this.position + this.content.length;
199
-
200
- content = content.substring(start, end);
201
-
202
- deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
203
- }
204
-
205
- return deleteOperation;
206
- }
207
-
208
- split(deleteOperation) {
209
- let content = deleteOperation.getContent(),
210
- position = deleteOperation.getPosition();
211
-
212
- let start,
213
- end;
214
-
215
- start = 0;
216
-
217
- end = this.position - position;
218
-
219
- const leftContent = content.substring(start, end);
220
-
221
- start = this.position - position + this.content.length;
222
-
223
- const rightContent = content.substring(start);
224
-
225
- content = leftContent + rightContent;
226
-
227
- deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
228
-
229
- return deleteOperation;
230
- }
231
-
232
- invert(InsertOperation, DeleteOperation) {
233
- const insertOperation = InsertOperation.fromContentAndPosition(this.content, this.position);
234
-
235
- return insertOperation;
236
- }
237
-
238
- clone() {
239
- const deleteOperation = DeleteOperation.fromContentAndPosition(this.content, this.position);
240
-
241
- return deleteOperation;
242
- }
243
-
244
- toJSON() {
245
- const type = this.type,
246
- content = this.content,
247
- position = this.position,
248
- json = {
249
- type,
250
- content,
251
- position,
252
- };
253
-
254
- return json;
255
- }
256
-
257
- static fromJSON(json) {
258
- const { type, content, position } = json,
259
- deleteOperation = new DeleteOperation(type, content, position);
260
-
261
- return deleteOperation;
262
- }
263
-
264
- static fromContentAndPosition(content, position) {
265
- const type = DELETE_TYPE, ///
266
- deleteOperation = new DeleteOperation(type, content, position);
267
-
268
- return deleteOperation;
269
- }
270
-
271
- static fromContentAndSelection(content, selection) {
272
- const startPosition = selection.getStartPosition(),
273
- endPosition = selection.getEndPosition(),
274
- begin = startPosition, ///
275
- end = endPosition; ///
276
-
277
- content = content.slice(begin, end); ///
278
-
279
- const type = DELETE_TYPE, ///
280
- position = startPosition, ///
281
- deleteOperation = new DeleteOperation(type, content, position);
282
-
283
- return deleteOperation;
284
- }
285
- }
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- import { EMPTY_TYPE } from "../types";
4
-
5
- export default class EmptyOperation {
6
- constructor(type) {
7
- this.type = type;
8
- }
9
-
10
- getType() {
11
- return this.type;
12
- }
13
-
14
- transformContent(content) {
15
- const transformedContent = content; ///
16
-
17
- return transformedContent;
18
- }
19
-
20
- transformOperation(operation) {
21
- return ((tau, rho) => {
22
-
23
- return [tau.clone()];
24
-
25
- })(operation, this);
26
- }
27
-
28
- transformSelection(selection) {
29
- const transformedSelection = selection.clone();
30
-
31
- return transformedSelection;
32
- }
33
-
34
- shift(operation) {
35
- const offset = 0,
36
- shiftedOperation = operation.shifted(offset);
37
-
38
- return shiftedOperation;
39
- }
40
-
41
- invert(InsertOperation, DeleteOperation) {
42
- const type = EMPTY_TYPE,
43
- emptyOperation = new EmptyOperation(type);
44
-
45
- return emptyOperation;
46
- }
47
-
48
- clone() {
49
- const emptyOperation = EmptyOperation.fromNothing();
50
-
51
- return emptyOperation;
52
- }
53
-
54
- toJSON() {
55
- const type = this.type,
56
- json = {
57
- type
58
- };
59
-
60
- return json;
61
- }
62
-
63
- static fromJSON(json) {
64
- const { type } = json,
65
- emptyOperation = new EmptyOperation(type);
66
-
67
- return emptyOperation;
68
- }
69
-
70
- static fromNothing() {
71
- const type = EMPTY_TYPE, ///
72
- emptyOperation = new EmptyOperation(type);
73
-
74
- return emptyOperation;
75
- }
76
- }