easy-richtextarea 4.0.3 → 4.0.5
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.
- package/README.md +0 -8
- package/example.js +1535 -1039
- package/lib/browser.js +9 -5
- package/lib/constants.js +13 -4
- package/lib/contentCompare.js +34 -0
- package/lib/example/richTextarea.js +2 -2
- package/lib/example/view.js +18 -9
- package/lib/keyCodes.js +13 -0
- package/lib/main.js +9 -5
- package/lib/operation/delete.js +101 -52
- package/lib/operation/empty.js +21 -6
- package/lib/operation/insert.js +78 -31
- package/lib/operations/fromJSON.js +4 -4
- package/lib/operations/generate.js +3 -3
- package/lib/richTextarea.js +258 -153
- package/lib/selection.js +55 -13
- package/lib/transform/content.js +19 -0
- package/lib/{operations/transform.js → transform/operations.js} +3 -7
- package/lib/transform/selection.js +19 -0
- package/lib/types.js +13 -13
- package/lib/undoBuffer.js +140 -0
- package/package.json +3 -2
- package/src/browser.js +3 -3
- package/src/constants.js +1 -0
- package/src/contentCompare.js +34 -0
- package/src/example/richTextarea.js +11 -9
- package/src/example/view.js +28 -10
- package/src/keyCodes.js +3 -0
- package/src/main.js +3 -2
- package/src/operation/delete.js +135 -58
- package/src/operation/empty.js +19 -14
- package/src/operation/insert.js +97 -39
- package/src/operations/fromJSON.js +4 -4
- package/src/operations/generate.js +8 -4
- package/src/richTextarea.js +343 -181
- package/src/selection.js +53 -9
- package/src/transform/content.js +11 -0
- package/src/{operations/transform.js → transform/operations.js} +3 -3
- package/src/transform/selection.js +11 -0
- package/src/types.js +6 -6
- package/src/undoBuffer.js +105 -0
- package/test/content/transform.js +9 -11
- package/test/helpers.js +27 -21
- package/test/operation/delete.js +187 -147
- package/test/operation/empty.js +3 -5
- package/test/operation/insert.js +134 -118
- package/test/operations/generate.js +19 -22
- package/test/operations/transform.js +37 -98
- package/lib/content/transform.js +0 -17
- package/lib/stringCompare.js +0 -33
- package/src/content/transform.js +0 -5
- package/src/stringCompare.js +0 -33
package/lib/selection.js
CHANGED
|
@@ -46,6 +46,24 @@ var Selection = /*#__PURE__*/ function() {
|
|
|
46
46
|
return this.endPosition;
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
|
+
{
|
|
50
|
+
key: "isEmpty",
|
|
51
|
+
value: function isEmpty() {
|
|
52
|
+
var empty = this.startPosition === this.endPosition;
|
|
53
|
+
return empty;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
key: "isEqualTo",
|
|
58
|
+
value: function isEqualTo(selection) {
|
|
59
|
+
var equalTo = false;
|
|
60
|
+
if (selection !== null) {
|
|
61
|
+
var selectionStartPosition = selection.getStartPosition(), selectionEndPosition = selection.getEndPosition(), startPositionsEqual = this.startPosition === selectionStartPosition, endPositionsEqual = this.endPosition === selectionEndPosition;
|
|
62
|
+
equalTo = startPositionsEqual && endPositionsEqual;
|
|
63
|
+
}
|
|
64
|
+
return equalTo;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
49
67
|
{
|
|
50
68
|
key: "setStartPosition",
|
|
51
69
|
value: function setStartPosition(startPosition) {
|
|
@@ -59,21 +77,38 @@ var Selection = /*#__PURE__*/ function() {
|
|
|
59
77
|
}
|
|
60
78
|
},
|
|
61
79
|
{
|
|
62
|
-
key: "
|
|
63
|
-
value: function
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
80
|
+
key: "startPositionShifted",
|
|
81
|
+
value: function startPositionShifted(startOffset) {
|
|
82
|
+
var startPosition = this.startPosition + startOffset, endPosition = this.endPosition, selection = new Selection(startPosition, endPosition);
|
|
83
|
+
return selection;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
key: "endPositionShifted",
|
|
88
|
+
value: function endPositionShifted(endOffset) {
|
|
89
|
+
var startPosition = this.startPosition, endPosition = this.endPosition + endOffset, selection = new Selection(startPosition, endPosition);
|
|
90
|
+
return selection;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
key: "shifted",
|
|
95
|
+
value: function shifted(offset) {
|
|
96
|
+
var startPosition = this.startPosition + offset, endPosition = this.endPosition + offset, selection = new Selection(startPosition, endPosition);
|
|
97
|
+
return selection;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: "emptied",
|
|
102
|
+
value: function emptied() {
|
|
103
|
+
var startPosition = this.startPosition, endPosition = startPosition, selection = new Selection(startPosition, endPosition);
|
|
104
|
+
return selection;
|
|
70
105
|
}
|
|
71
106
|
},
|
|
72
107
|
{
|
|
73
|
-
key: "
|
|
74
|
-
value: function
|
|
75
|
-
var
|
|
76
|
-
return
|
|
108
|
+
key: "clone",
|
|
109
|
+
value: function clone() {
|
|
110
|
+
var selection = new Selection(this.startPosition, this.endPosition);
|
|
111
|
+
return selection;
|
|
77
112
|
}
|
|
78
113
|
}
|
|
79
114
|
], [
|
|
@@ -91,6 +126,13 @@ var Selection = /*#__PURE__*/ function() {
|
|
|
91
126
|
return selection;
|
|
92
127
|
}
|
|
93
128
|
},
|
|
129
|
+
{
|
|
130
|
+
key: "fromStartPosition",
|
|
131
|
+
value: function fromStartPosition(startPosition) {
|
|
132
|
+
var endPosition = startPosition, selection = new Selection(startPosition, endPosition);
|
|
133
|
+
return selection;
|
|
134
|
+
}
|
|
135
|
+
},
|
|
94
136
|
{
|
|
95
137
|
key: "fromStartPositionAndEndPosition",
|
|
96
138
|
value: function fromStartPositionAndEndPosition(startPosition, endPosition) {
|
|
@@ -102,4 +144,4 @@ var Selection = /*#__PURE__*/ function() {
|
|
|
102
144
|
return Selection;
|
|
103
145
|
}();
|
|
104
146
|
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZWxlY3Rpb24uanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247XG4gIH1cblxuICBnZXRTdGFydFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBnZXRFbmRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmRQb3NpdGlvbjtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZW1wdHkgPSAodGhpcy5zdGFydFBvc2l0aW9uID09PSB0aGlzLmVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzZWxlY3Rpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbnNFcXVhbCA9ICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24pLFxuICAgICAgICAgICAgZW5kUG9zaXRpb25zRXF1YWwgPSAodGhpcy5lbmRQb3NpdGlvbiA9PT0gc2VsZWN0aW9uRW5kUG9zaXRpb24pO1xuXG4gICAgICBlcXVhbFRvID0gKHN0YXJ0UG9zaXRpb25zRXF1YWwgJiYgZW5kUG9zaXRpb25zRXF1YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgc2V0U3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgfVxuXG4gIHNldEVuZFBvc2l0aW9uKGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5lbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uO1xuICB9XG5cbiAgc3RhcnRQb3NpdGlvblNoaWZ0ZWQoc3RhcnRPZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uICsgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSB0aGlzLmVuZFBvc2l0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIGVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gdGhpcy5lbmRQb3NpdGlvbiArIGVuZE9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzaGlmdGVkKG9mZnNldCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gKyBvZmZzZXQsXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSB0aGlzLmVuZFBvc2l0aW9uICsgb2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIGVtcHRpZWQoKSB7XG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24sICAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMuc3RhcnRQb3NpdGlvbiwgdGhpcy5lbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAwLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gZG9tRWxlbWVudCxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQsIC8vL1xuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uRW5kLCAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG5cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSB7XG4gICAgY29uc3QgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLCAgLy8vXG4gICAgICAgICAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGFydFBvc2l0aW9uQW5kRW5kUG9zaXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiU2VsZWN0aW9uIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwiaXNFbXB0eSIsImVtcHR5IiwiaXNFcXVhbFRvIiwic2VsZWN0aW9uIiwiZXF1YWxUbyIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb25zRXF1YWwiLCJlbmRQb3NpdGlvbnNFcXVhbCIsInNldFN0YXJ0UG9zaXRpb24iLCJzZXRFbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb25TaGlmdGVkIiwic3RhcnRPZmZzZXQiLCJlbmRQb3NpdGlvblNoaWZ0ZWQiLCJlbmRPZmZzZXQiLCJzaGlmdGVkIiwib2Zmc2V0IiwiZW1wdGllZCIsImNsb25lIiwiZnJvbU5vdGhpbmciLCJmcm9tRE9NRWxlbWVudCIsImRvbUVsZW1lbnQiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImZyb21TdGFydFBvc2l0aW9uIiwiZnJvbVN0YXJ0UG9zaXRpb25BbmRFbmRQb3NpdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sSUFBQSxBQUFNQSwwQkFB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
|
|
@@ -0,0 +1,19 @@
|
|
|
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 transformContent;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
function transformContent(content, operations) {
|
|
12
|
+
operations.forEach(function(operation) {
|
|
13
|
+
var transformedContent = operation.transformContent(content);
|
|
14
|
+
content = transformedContent; ///
|
|
15
|
+
});
|
|
16
|
+
return content;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm0vY29udGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucykge1xyXG4gIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZENvbnRlbnQgPSBvcGVyYXRpb24udHJhbnNmb3JtQ29udGVudChjb250ZW50KTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuICB9KVxyXG5cclxuICByZXR1cm4gY29udGVudDtcclxufVxyXG4iXSwibmFtZXMiOlsidHJhbnNmb3JtQ29udGVudCIsImNvbnRlbnQiLCJvcGVyYXRpb25zIiwiZm9yRWFjaCIsIm9wZXJhdGlvbiIsInRyYW5zZm9ybWVkQ29udGVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBRUE7OztlQUF3QkE7OztBQUFULFNBQVNBLGlCQUFpQkMsT0FBTyxFQUFFQyxVQUFVLEVBQUU7SUFDNURBLFdBQVdDLE9BQU8sQ0FBQyxTQUFDQyxXQUFjO1FBQ2hDLElBQU1DLHFCQUFxQkQsVUFBVUosZ0JBQWdCLENBQUNDO1FBRXREQSxVQUFVSSxvQkFBb0IsR0FBRztJQUNuQztJQUVBLE9BQU9KO0FBQ1QifQ==
|
|
@@ -9,16 +9,12 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
var _necessary = require("necessary");
|
|
12
|
-
var first = _necessary.arrayUtilities.first, tail = _necessary.arrayUtilities.tail;
|
|
12
|
+
var first = _necessary.arrayUtilities.first, head = _necessary.arrayUtilities.head, tail = _necessary.arrayUtilities.tail;
|
|
13
13
|
function transformOperations(tau, rho) {
|
|
14
14
|
if (tau.length === 0 || rho.length === 0) {
|
|
15
15
|
return tau;
|
|
16
16
|
}
|
|
17
|
-
var tau1 =
|
|
18
|
-
first(tau)
|
|
19
|
-
], tau2 = tail(tau), rho1 = [
|
|
20
|
-
first(rho)
|
|
21
|
-
], rho2 = tail(rho);
|
|
17
|
+
var tau1 = head(tau), tau2 = tail(tau), rho1 = head(rho), rho2 = tail(rho);
|
|
22
18
|
if (tau.length > 1 && rho.length > 1) {
|
|
23
19
|
return transformOperations(transformOperations(tau1, rho1), rho2).concat(transformOperations(transformOperations(tau2, transformOperations(rho1, tau1)), transformOperations(rho2, transformOperations(tau1, rho1))));
|
|
24
20
|
} else if (tau.length > 1 && rho.length === 1) {
|
|
@@ -32,4 +28,4 @@ function transformOperations(tau, rho) {
|
|
|
32
28
|
}
|
|
33
29
|
}
|
|
34
30
|
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm0vb3BlcmF0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xyXG5cclxuY29uc3QgeyBmaXJzdCwgaGVhZCwgdGFpbCB9ID0gYXJyYXlVdGlsaXRpZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1PcGVyYXRpb25zKHRhdSwgcmhvKSB7XHJcbiAgaWYgKCh0YXUubGVuZ3RoID09PSAwKSB8fCAocmhvLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgIHJldHVybiB0YXU7XHJcbiAgfVxyXG5cclxuICBjb25zdCB0YXUxID0gaGVhZCh0YXUpLFxyXG4gICAgICAgIHRhdTIgPSB0YWlsKHRhdSksXHJcbiAgICAgICAgcmhvMSA9IGhlYWQocmhvKSxcclxuICAgICAgICByaG8yID0gdGFpbChyaG8pO1xyXG5cclxuICBpZiAodGF1Lmxlbmd0aCA+IDEgJiYgcmhvLmxlbmd0aCA+IDEpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMoXHJcbiAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucyh0YXUxLCByaG8xKSxcclxuICAgICAgICByaG8yXHJcbiAgICAgICkuY29uY2F0KFxyXG4gICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMoXHJcbiAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zKFxyXG4gICAgICAgICAgICB0YXUyLFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zKHJobzEsIHRhdTEpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucyhcclxuICAgICAgICAgICAgcmhvMixcclxuICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucyh0YXUxLCByaG8xKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9IGVsc2UgaWYgKCh0YXUubGVuZ3RoID4gMSkgJiYgKHJoby5sZW5ndGggPT09IDEpKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zKHRhdTEsIHJobykuY29uY2F0KFxyXG4gICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMoXHJcbiAgICAgICAgICB0YXUyLFxyXG4gICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucyhyaG8sIHRhdTEpXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH0gZWxzZSBpZiAoKHRhdS5sZW5ndGggPT09IDEpICYmIChyaG8ubGVuZ3RoID4gMSkpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMoXHJcbiAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucyh0YXUsIHJobzEpLFxyXG4gICAgICAgIHJobzJcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGF1ID0gZmlyc3QodGF1KTsgLy8vXHJcbiAgICByaG8gPSBmaXJzdChyaG8pOyAvLy9cclxuXHJcbiAgICByZXR1cm4gcmhvLnRyYW5zZm9ybU9wZXJhdGlvbih0YXUpO1xyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOlsidHJhbnNmb3JtT3BlcmF0aW9ucyIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJoZWFkIiwidGFpbCIsInRhdSIsInJobyIsImxlbmd0aCIsInRhdTEiLCJ0YXUyIiwicmhvMSIsInJobzIiLCJjb25jYXQiLCJ0cmFuc2Zvcm1PcGVyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBd0JBOzs7eUJBSk87QUFFL0IsSUFBUUMsUUFBc0JDLHlCQUFjLENBQXBDRCxPQUFPRSxPQUFlRCx5QkFBYyxDQUE3QkMsTUFBTUMsT0FBU0YseUJBQWMsQ0FBdkJFO0FBRU4sU0FBU0osb0JBQW9CSyxHQUFHLEVBQUVDLEdBQUcsRUFBRTtJQUNwRCxJQUFJLEFBQUNELElBQUlFLE1BQU0sS0FBSyxLQUFPRCxJQUFJQyxNQUFNLEtBQUssR0FBSTtRQUM1QyxPQUFPRjtJQUNULENBQUM7SUFFRCxJQUFNRyxPQUFPTCxLQUFLRSxNQUNaSSxPQUFPTCxLQUFLQyxNQUNaSyxPQUFPUCxLQUFLRyxNQUNaSyxPQUFPUCxLQUFLRTtJQUVsQixJQUFJRCxJQUFJRSxNQUFNLEdBQUcsS0FBS0QsSUFBSUMsTUFBTSxHQUFHLEdBQUc7UUFDcEMsT0FDRVAsb0JBQ0VBLG9CQUFvQlEsTUFBTUUsT0FDMUJDLE1BQ0FDLE1BQU0sQ0FDTlosb0JBQ0VBLG9CQUNFUyxNQUNBVCxvQkFBb0JVLE1BQU1GLFFBRTVCUixvQkFDRVcsTUFDQVgsb0JBQW9CUSxNQUFNRTtJQUtwQyxPQUFPLElBQUksQUFBQ0wsSUFBSUUsTUFBTSxHQUFHLEtBQU9ELElBQUlDLE1BQU0sS0FBSyxHQUFJO1FBQ2pELE9BQ0VQLG9CQUFvQlEsTUFBTUYsS0FBS00sTUFBTSxDQUNuQ1osb0JBQ0VTLE1BQ0FULG9CQUFvQk0sS0FBS0U7SUFJakMsT0FBTyxJQUFJLEFBQUNILElBQUlFLE1BQU0sS0FBSyxLQUFPRCxJQUFJQyxNQUFNLEdBQUcsR0FBSTtRQUNqRCxPQUNFUCxvQkFDRUEsb0JBQW9CSyxLQUFLSyxPQUN6QkM7SUFHTixPQUFPO1FBQ0xOLE1BQU1KLE1BQU1JLE1BQU0sR0FBRztRQUNyQkMsTUFBTUwsTUFBTUssTUFBTSxHQUFHO1FBRXJCLE9BQU9BLElBQUlPLGtCQUFrQixDQUFDUjtJQUNoQyxDQUFDO0FBQ0gifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
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 transformSelection;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
function transformSelection(selection, operations) {
|
|
12
|
+
operations.forEach(function(operation) {
|
|
13
|
+
var transformedSelection = operation.transformSelection(selection);
|
|
14
|
+
selection = transformedSelection; ///
|
|
15
|
+
});
|
|
16
|
+
return selection;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm0vc2VsZWN0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtU2VsZWN0aW9uKHNlbGVjdGlvbiwgb3BlcmF0aW9ucykge1xyXG4gIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHNlbGVjdGlvbjtcclxufVxyXG4iXSwibmFtZXMiOlsidHJhbnNmb3JtU2VsZWN0aW9uIiwic2VsZWN0aW9uIiwib3BlcmF0aW9ucyIsImZvckVhY2giLCJvcGVyYXRpb24iLCJ0cmFuc2Zvcm1lZFNlbGVjdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBRUE7OztlQUF3QkE7OztBQUFULFNBQVNBLG1CQUFtQkMsU0FBUyxFQUFFQyxVQUFVLEVBQUU7SUFDaEVBLFdBQVdDLE9BQU8sQ0FBQyxTQUFDQyxXQUFjO1FBQ2hDLElBQU1DLHVCQUF1QkQsVUFBVUosa0JBQWtCLENBQUNDO1FBRTFEQSxZQUFZSSxzQkFBc0IsR0FBRztJQUN2QztJQUVBLE9BQU9KO0FBQ1QifQ==
|
package/lib/types.js
CHANGED
|
@@ -9,26 +9,26 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
|
|
13
|
-
return
|
|
12
|
+
EMPTY_TYPE: function() {
|
|
13
|
+
return EMPTY_TYPE;
|
|
14
14
|
},
|
|
15
|
-
|
|
16
|
-
return
|
|
15
|
+
DELETE_TYPE: function() {
|
|
16
|
+
return DELETE_TYPE;
|
|
17
17
|
},
|
|
18
|
-
|
|
19
|
-
return
|
|
18
|
+
INSERT_TYPE: function() {
|
|
19
|
+
return INSERT_TYPE;
|
|
20
20
|
},
|
|
21
21
|
default: function() {
|
|
22
22
|
return _default;
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
25
|
+
var EMPTY_TYPE = "empty";
|
|
26
|
+
var DELETE_TYPE = "delete";
|
|
27
|
+
var INSERT_TYPE = "insert";
|
|
28
28
|
var _default = {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
EMPTY_TYPE: EMPTY_TYPE,
|
|
30
|
+
DELETE_TYPE: DELETE_TYPE,
|
|
31
|
+
INSERT_TYPE: INSERT_TYPE
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1RZUEUgPSBcImVtcHR5XCI7XG5leHBvcnQgY29uc3QgREVMRVRFX1RZUEUgPSBcImRlbGV0ZVwiO1xuZXhwb3J0IGNvbnN0IElOU0VSVF9UWVBFID0gXCJpbnNlcnRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFTVBUWV9UWVBFLFxuICBERUxFVEVfVFlQRSxcbiAgSU5TRVJUX1RZUEVcbn07XG4iXSwibmFtZXMiOlsiRU1QVFlfVFlQRSIsIkRFTEVURV9UWVBFIiwiSU5TRVJUX1RZUEUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUVhQSxVQUFVO2VBQVZBOztJQUNBQyxXQUFXO2VBQVhBOztJQUNBQyxXQUFXO2VBQVhBOztJQUViLE9BSUU7ZUFKRjs7O0FBSk8sSUFBTUYsYUFBYTtBQUNuQixJQUFNQyxjQUFjO0FBQ3BCLElBQU1DLGNBQWM7SUFFM0IsV0FBZTtJQUNiRixZQUFBQTtJQUNBQyxhQUFBQTtJQUNBQyxhQUFBQTtBQUNGIn0=
|
|
@@ -0,0 +1,140 @@
|
|
|
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 push = _necessary.arrayUtilities.push;
|
|
48
|
+
var UndoBuffer = /*#__PURE__*/ function() {
|
|
49
|
+
function UndoBuffer(position, operations) {
|
|
50
|
+
_classCallCheck(this, UndoBuffer);
|
|
51
|
+
this.position = position;
|
|
52
|
+
this.operations = operations;
|
|
53
|
+
}
|
|
54
|
+
_createClass(UndoBuffer, [
|
|
55
|
+
{
|
|
56
|
+
key: "getPosition",
|
|
57
|
+
value: function getPosition() {
|
|
58
|
+
return this.position;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: "getOperations",
|
|
63
|
+
value: function getOperations() {
|
|
64
|
+
return this.operations;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: "undo",
|
|
69
|
+
value: function undo() {
|
|
70
|
+
var operation = null;
|
|
71
|
+
if (this.position > 0) {
|
|
72
|
+
this.position--;
|
|
73
|
+
operation = this.operations[this.position];
|
|
74
|
+
var invertedOperation = operation.invert(_insert.default, _delete.default);
|
|
75
|
+
operation = invertedOperation; ///
|
|
76
|
+
}
|
|
77
|
+
return operation;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
key: "redo",
|
|
82
|
+
value: function redo() {
|
|
83
|
+
var operation = null;
|
|
84
|
+
var operationsLength = this.operations.length;
|
|
85
|
+
if (this.position < operationsLength) {
|
|
86
|
+
operation = this.operations[this.position];
|
|
87
|
+
this.position++;
|
|
88
|
+
}
|
|
89
|
+
return operation;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
key: "transform",
|
|
94
|
+
value: function transform(operations) {
|
|
95
|
+
this.operations = (0, _operations.default)(this.operations, operations);
|
|
96
|
+
this.filterEmptyOperations();
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: "addOperations",
|
|
101
|
+
value: function addOperations(operations) {
|
|
102
|
+
var start = this.position; ///
|
|
103
|
+
this.operations.splice(start);
|
|
104
|
+
push(this.operations, operations);
|
|
105
|
+
var operationsLength = this.operations.length;
|
|
106
|
+
this.position = operationsLength; ///
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
key: "filterEmptyOperations",
|
|
111
|
+
value: function filterEmptyOperations() {
|
|
112
|
+
var length = this.operations.length, position = 0;
|
|
113
|
+
while(position < length){
|
|
114
|
+
var operation = this.operations[position];
|
|
115
|
+
if (_instanceof(operation, _empty.default)) {
|
|
116
|
+
var start = position, deleteCount = 1;
|
|
117
|
+
this.operations.splice(start, deleteCount);
|
|
118
|
+
if (this.position > position) {
|
|
119
|
+
this.position--;
|
|
120
|
+
}
|
|
121
|
+
} else {
|
|
122
|
+
position++;
|
|
123
|
+
}
|
|
124
|
+
length = this.operations.length;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
], [
|
|
129
|
+
{
|
|
130
|
+
key: "fromNothing",
|
|
131
|
+
value: function fromNothing() {
|
|
132
|
+
var position = 0, operations = [], undoBuffer = new UndoBuffer(position, operations);
|
|
133
|
+
return undoBuffer;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
]);
|
|
137
|
+
return UndoBuffer;
|
|
138
|
+
}();
|
|
139
|
+
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91bmRvQnVmZmVyLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9lbXB0eVwiO1xuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XG5pbXBvcnQgRGVsZXRlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWxldGVcIjtcbmltcG9ydCB0cmFuc2Zvcm1PcGVyYXRpb25zIGZyb20gXCIuL3RyYW5zZm9ybS9vcGVyYXRpb25zXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVuZG9CdWZmZXIge1xuICBjb25zdHJ1Y3Rvcihwb3NpdGlvbiwgb3BlcmF0aW9ucykge1xuICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zO1xuICB9XG5cbiAgZ2V0UG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zaXRpb247XG4gIH1cblxuICBnZXRPcGVyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnM7XG4gIH1cblxuICB1bmRvKCkge1xuICAgIGxldCBvcGVyYXRpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucG9zaXRpb24gPiAwKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uLS07XG5cbiAgICAgIG9wZXJhdGlvbiA9IHRoaXMub3BlcmF0aW9uc1t0aGlzLnBvc2l0aW9uXTtcblxuICAgICAgY29uc3QgaW52ZXJ0ZWRPcGVyYXRpb24gPSBvcGVyYXRpb24uaW52ZXJ0KEluc2VydE9wZXJhdGlvbiwgRGVsZXRlT3BlcmF0aW9uKTtcblxuICAgICAgb3BlcmF0aW9uID0gaW52ZXJ0ZWRPcGVyYXRpb247ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgcmVkbygpIHtcbiAgICBsZXQgb3BlcmF0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IG9wZXJhdGlvbnNMZW5ndGggPSB0aGlzLm9wZXJhdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMucG9zaXRpb24gPCBvcGVyYXRpb25zTGVuZ3RoKSB7XG4gICAgICBvcGVyYXRpb24gPSB0aGlzLm9wZXJhdGlvbnNbdGhpcy5wb3NpdGlvbl07XG5cbiAgICAgIHRoaXMucG9zaXRpb24rKztcbiAgICB9XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgdHJhbnNmb3JtKG9wZXJhdGlvbnMpIHtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1PcGVyYXRpb25zKHRoaXMub3BlcmF0aW9ucywgb3BlcmF0aW9ucyk7XG5cbiAgICB0aGlzLmZpbHRlckVtcHR5T3BlcmF0aW9ucygpO1xuICB9XG5cbiAgYWRkT3BlcmF0aW9ucyhvcGVyYXRpb25zKSB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBvc2l0aW9uOyAgLy8vXG5cbiAgICB0aGlzLm9wZXJhdGlvbnMuc3BsaWNlKHN0YXJ0KTtcblxuICAgIHB1c2godGhpcy5vcGVyYXRpb25zLCBvcGVyYXRpb25zKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbnNMZW5ndGggPSB0aGlzLm9wZXJhdGlvbnMubGVuZ3RoO1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IG9wZXJhdGlvbnNMZW5ndGg7IC8vL1xuICB9XG5cbiAgZmlsdGVyRW1wdHlPcGVyYXRpb25zKCkge1xuICAgIGxldCBsZW5ndGggPSB0aGlzLm9wZXJhdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHBvc2l0aW9uID0gMDtcblxuICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5vcGVyYXRpb25zW3Bvc2l0aW9uXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEVtcHR5T3BlcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24sIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc2l0aW9uKys7XG4gICAgICB9XG5cbiAgICAgIGxlbmd0aCA9IHRoaXMub3BlcmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gMCxcbiAgICAgICAgICBvcGVyYXRpb25zID0gW10sXG4gICAgICAgICAgdW5kb0J1ZmZlciA9IG5ldyBVbmRvQnVmZmVyKHBvc2l0aW9uLCBvcGVyYXRpb25zKTtcblxuICAgIHJldHVybiB1bmRvQnVmZmVyO1xuICB9XG59XG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIlVuZG9CdWZmZXIiLCJwdXNoIiwiYXJyYXlVdGlsaXRpZXMiLCJwb3NpdGlvbiIsIm9wZXJhdGlvbnMiLCJnZXRQb3NpdGlvbiIsImdldE9wZXJhdGlvbnMiLCJ1bmRvIiwib3BlcmF0aW9uIiwiaW52ZXJ0ZWRPcGVyYXRpb24iLCJpbnZlcnQiLCJJbnNlcnRPcGVyYXRpb24iLCJEZWxldGVPcGVyYXRpb24iLCJyZWRvIiwib3BlcmF0aW9uc0xlbmd0aCIsImxlbmd0aCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9wZXJhdGlvbnMiLCJmaWx0ZXJFbXB0eU9wZXJhdGlvbnMiLCJhZGRPcGVyYXRpb25zIiwic3RhcnQiLCJzcGxpY2UiLCJFbXB0eU9wZXJhdGlvbiIsImRlbGV0ZUNvdW50IiwiZnJvbU5vdGhpbmciLCJ1bmRvQnVmZmVyIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQVdxQkE7Ozt5QkFUVTswREFFSjsyREFDQzsyREFDQTsrREFDSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEMsSUFBTSxBQUFFQyxPQUFTQyx5QkFBYyxDQUF2QkQ7QUFFTyxJQUFBLEFBQU1ELDJCQUFOO2FBQU1BLFdBQ1BHLFFBQVEsRUFBRUMsVUFBVTs4QkFEYko7UUFFakIsSUFBSSxDQUFDRyxRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTs7aUJBSERKOztZQU1uQkssS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWM7Z0JBQ1osT0FBTyxJQUFJLENBQUNGLFFBQVE7WUFDdEI7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsZ0JBQWdCO2dCQUNkLE9BQU8sSUFBSSxDQUFDRixVQUFVO1lBQ3hCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU87Z0JBQ0wsSUFBSUMsWUFBWSxJQUFJO2dCQUVwQixJQUFJLElBQUksQ0FBQ0wsUUFBUSxHQUFHLEdBQUc7b0JBQ3JCLElBQUksQ0FBQ0EsUUFBUTtvQkFFYkssWUFBWSxJQUFJLENBQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUNELFFBQVEsQ0FBQztvQkFFMUMsSUFBTU0sb0JBQW9CRCxVQUFVRSxNQUFNLENBQUNDLGVBQWUsRUFBRUMsZUFBZTtvQkFFM0VKLFlBQVlDLG1CQUFvQixHQUFHO2dCQUNyQyxDQUFDO2dCQUVELE9BQU9EO1lBQ1Q7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUEsT0FBTztnQkFDTCxJQUFJTCxZQUFZLElBQUk7Z0JBRXBCLElBQU1NLG1CQUFtQixJQUFJLENBQUNWLFVBQVUsQ0FBQ1csTUFBTTtnQkFFL0MsSUFBSSxJQUFJLENBQUNaLFFBQVEsR0FBR1csa0JBQWtCO29CQUNwQ04sWUFBWSxJQUFJLENBQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUNELFFBQVEsQ0FBQztvQkFFMUMsSUFBSSxDQUFDQSxRQUFRO2dCQUNmLENBQUM7Z0JBRUQsT0FBT0s7WUFDVDs7O1lBRUFRLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVWixVQUFVLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQ0EsVUFBVSxHQUFHYSxJQUFBQSxtQkFBbUIsRUFBQyxJQUFJLENBQUNiLFVBQVUsRUFBRUE7Z0JBRXZELElBQUksQ0FBQ2MscUJBQXFCO1lBQzVCOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNmLFVBQVUsRUFBRTtnQkFDeEIsSUFBTWdCLFFBQVEsSUFBSSxDQUFDakIsUUFBUSxFQUFHLEdBQUc7Z0JBRWpDLElBQUksQ0FBQ0MsVUFBVSxDQUFDaUIsTUFBTSxDQUFDRDtnQkFFdkJuQixLQUFLLElBQUksQ0FBQ0csVUFBVSxFQUFFQTtnQkFFdEIsSUFBTVUsbUJBQW1CLElBQUksQ0FBQ1YsVUFBVSxDQUFDVyxNQUFNO2dCQUUvQyxJQUFJLENBQUNaLFFBQVEsR0FBR1csa0JBQWtCLEdBQUc7WUFDdkM7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUEsd0JBQXdCO2dCQUN0QixJQUFJSCxTQUFTLElBQUksQ0FBQ1gsVUFBVSxDQUFDVyxNQUFNLEVBQzdCWixXQUFXO2dCQUVqQixNQUFPQSxXQUFXWSxPQUFRO29CQUN4QixJQUFNUCxZQUFZLElBQUksQ0FBQ0osVUFBVSxDQUFDRCxTQUFTO29CQUUzQyxJQUFJSyxBQUFTLFlBQVRBLFdBQXFCYyxjQUFjLEdBQUU7d0JBQ3ZDLElBQU1GLFFBQVFqQixVQUNSb0IsY0FBYzt3QkFFcEIsSUFBSSxDQUFDbkIsVUFBVSxDQUFDaUIsTUFBTSxDQUFDRCxPQUFPRzt3QkFFOUIsSUFBSSxJQUFJLENBQUNwQixRQUFRLEdBQUdBLFVBQVU7NEJBQzVCLElBQUksQ0FBQ0EsUUFBUTt3QkFDZixDQUFDO29CQUNILE9BQU87d0JBQ0xBO29CQUNGLENBQUM7b0JBRURZLFNBQVMsSUFBSSxDQUFDWCxVQUFVLENBQUNXLE1BQU07Z0JBQ2pDO1lBQ0Y7Ozs7WUFFT1MsS0FBQUE7bUJBQVAsU0FBT0EsY0FBYztnQkFDbkIsSUFBTXJCLFdBQVcsR0FDWEMsYUFBYSxFQUFFLEVBQ2ZxQixhQUFhLElBekZGekIsV0F5RmlCRyxVQUFVQztnQkFFNUMsT0FBT3FCO1lBQ1Q7OztXQTVGbUJ6QiJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "easy-richtextarea",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.5",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/easy-richtextarea",
|
|
7
7
|
"description": "A textarea element that handles and hands off events well.",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"url": "https://github.com/djalbat/easy-richtextarea"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"easy": "^14.1.
|
|
13
|
+
"easy": "^14.1.6",
|
|
14
|
+
"necessary": "^11.2.6"
|
|
14
15
|
},
|
|
15
16
|
"devDependencies": {
|
|
16
17
|
"@swc/core": "^1.2.160",
|
package/src/browser.js
CHANGED
|
@@ -6,9 +6,9 @@ export { default as RichTextarea } from "./richTextarea";
|
|
|
6
6
|
export { default as EmptyOperation } from "./operation/empty";
|
|
7
7
|
export { default as InsertOperation } from "./operation/insert";
|
|
8
8
|
export { default as DeleteOperation } from "./operation/delete";
|
|
9
|
-
export { default as transformContent } from "./content
|
|
9
|
+
export { default as transformContent } from "./transform/content";
|
|
10
10
|
export { default as operationsToJSON } from "./operations/toJSON";
|
|
11
11
|
export { default as operationsFromJSON } from "./operations/fromJSON";
|
|
12
12
|
export { default as generateOperations } from "./operations/generate";
|
|
13
|
-
export { default as
|
|
14
|
-
|
|
13
|
+
export { default as transformSelection } from "./transform/selection";
|
|
14
|
+
export { default as transformOperations } from "./transform/operations";
|
package/src/constants.js
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
}
|
|
@@ -6,17 +6,19 @@ import { RichTextarea } from "../browser"; ///
|
|
|
6
6
|
|
|
7
7
|
export default withStyle(RichTextarea)`
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
width:
|
|
11
|
-
|
|
9
|
+
color: #eee;
|
|
10
|
+
width: 64rem;
|
|
11
|
+
resize: none;
|
|
12
|
+
height: 64rem;
|
|
12
13
|
padding: 0.25rem;
|
|
13
|
-
font-size: 1.
|
|
14
|
+
font-size: 1.6rem;
|
|
14
15
|
font-family: monospace;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
margin-right: 2rem;
|
|
17
|
+
background-color: #222;
|
|
18
|
+
|
|
19
|
+
::selection {
|
|
20
|
+
color: #fff;
|
|
21
|
+
background-color: #c80;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
`;
|
package/src/example/view.js
CHANGED
|
@@ -3,20 +3,26 @@
|
|
|
3
3
|
import RichTextarea from "./richTextarea";
|
|
4
4
|
|
|
5
5
|
const content = "",
|
|
6
|
-
|
|
6
|
+
activeRichTextarea =
|
|
7
7
|
|
|
8
8
|
<RichTextarea onChange={changeHandler} onScroll={scrollHandler} onFocus={focusHandler} onBlur={blurHandler} />
|
|
9
9
|
|
|
10
|
+
,
|
|
11
|
+
inactiveRichTextarea =
|
|
12
|
+
|
|
13
|
+
<RichTextarea />
|
|
14
|
+
|
|
10
15
|
;
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
activeRichTextarea.setContent(content);
|
|
13
18
|
|
|
14
|
-
|
|
19
|
+
activeRichTextarea.activate();
|
|
15
20
|
|
|
16
21
|
const View = (properties) =>
|
|
17
22
|
|
|
18
23
|
<div className="view">
|
|
19
|
-
{
|
|
24
|
+
{activeRichTextarea}
|
|
25
|
+
{inactiveRichTextarea}
|
|
20
26
|
</div>
|
|
21
27
|
|
|
22
28
|
;
|
|
@@ -24,18 +30,30 @@ const View = (properties) =>
|
|
|
24
30
|
export default View;
|
|
25
31
|
|
|
26
32
|
function changeHandler(event, element) {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
selectionChanged = richTextarea.hasSelectionChanged();
|
|
33
|
+
const contentChanged = activeRichTextarea.hasContentChanged(),
|
|
34
|
+
selectionChanged = activeRichTextarea.hasSelectionChanged();
|
|
30
35
|
|
|
31
36
|
console.log(contentChanged, selectionChanged)
|
|
37
|
+
|
|
38
|
+
if (contentChanged) {
|
|
39
|
+
const content = activeRichTextarea.getContent();
|
|
40
|
+
|
|
41
|
+
inactiveRichTextarea.setContent(content);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (selectionChanged) {
|
|
45
|
+
const selection = activeRichTextarea.getSelection();
|
|
46
|
+
|
|
47
|
+
inactiveRichTextarea.setSelection(selection);
|
|
48
|
+
}
|
|
32
49
|
}
|
|
33
50
|
|
|
34
51
|
function scrollHandler(event, element) {
|
|
35
|
-
const scrollTop =
|
|
36
|
-
scrollLeft =
|
|
52
|
+
const scrollTop = activeRichTextarea.getScrollTop(),
|
|
53
|
+
scrollLeft = activeRichTextarea.getScrollLeft();
|
|
37
54
|
|
|
38
|
-
|
|
55
|
+
inactiveRichTextarea.setScrollTop(scrollTop);
|
|
56
|
+
inactiveRichTextarea.setScrollLeft(scrollLeft);
|
|
39
57
|
}
|
|
40
58
|
|
|
41
59
|
function focusHandler(event, element) {
|
package/src/keyCodes.js
ADDED
package/src/main.js
CHANGED
|
@@ -6,8 +6,9 @@ export { default as Selection } from "./selection";
|
|
|
6
6
|
export { default as EmptyOperation } from "./operation/empty";
|
|
7
7
|
export { default as InsertOperation } from "./operation/insert";
|
|
8
8
|
export { default as DeleteOperation } from "./operation/delete";
|
|
9
|
-
export { default as transformContent } from "./content
|
|
9
|
+
export { default as transformContent } from "./transform/content";
|
|
10
10
|
export { default as operationsToJSON } from "./operations/toJSON";
|
|
11
11
|
export { default as operationsFromJSON } from "./operations/fromJSON";
|
|
12
12
|
export { default as generateOperations } from "./operations/generate";
|
|
13
|
-
export { default as
|
|
13
|
+
export { default as transformSelection } from "./transform/selection";
|
|
14
|
+
export { default as transformOperations } from "./transform/operations";
|