easy-richtextarea 4.0.1 → 4.0.4
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 +1012 -595
- package/lib/browser.js +9 -9
- 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 +1 -1
- 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 +11 -11
- package/lib/operations/transform.js +3 -7
- package/lib/richTextarea.js +244 -156
- package/lib/selection.js +55 -13
- package/lib/types.js +13 -13
- package/lib/undoBuffer.js +105 -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 +1 -0
- 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 +17 -13
- package/src/operations/transform.js +3 -3
- package/src/richTextarea.js +316 -185
- package/src/selection.js +53 -9
- package/src/types.js +6 -6
- package/src/undoBuffer.js +73 -0
- package/test/content/transform.js +15 -17
- 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 +25 -29
- package/test/operations/transform.js +37 -98
- package/lib/stringCompare.js +0 -33
- 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZWxlY3Rpb24uanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247XG4gIH1cblxuICBnZXRTdGFydFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBnZXRFbmRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmRQb3NpdGlvbjtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZW1wdHkgPSAodGhpcy5zdGFydFBvc2l0aW9uID09PSB0aGlzLmVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzZWxlY3Rpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbnNFcXVhbCA9ICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24pLFxuICAgICAgICAgICAgZW5kUG9zaXRpb25zRXF1YWwgPSAodGhpcy5lbmRQb3NpdGlvbiA9PT0gc2VsZWN0aW9uRW5kUG9zaXRpb24pO1xuXG4gICAgICBlcXVhbFRvID0gKHN0YXJ0UG9zaXRpb25zRXF1YWwgJiYgZW5kUG9zaXRpb25zRXF1YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgc2V0U3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgfVxuXG4gIHNldEVuZFBvc2l0aW9uKGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5lbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uO1xuICB9XG5cbiAgc3RhcnRQb3NpdGlvblNoaWZ0ZWQoc3RhcnRPZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uICsgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSB0aGlzLmVuZFBvc2l0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIGVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gdGhpcy5lbmRQb3NpdGlvbiArIGVuZE9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzaGlmdGVkKG9mZnNldCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gKyBvZmZzZXQsXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSB0aGlzLmVuZFBvc2l0aW9uICsgb2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIGVtcHRpZWQoKSB7XG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24sICAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMuc3RhcnRQb3NpdGlvbiwgdGhpcy5lbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAwLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gZG9tRWxlbWVudCxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQsIC8vL1xuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uRW5kLCAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG5cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSB7XG4gICAgY29uc3QgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLCAgLy8vXG4gICAgICAgICAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGFydFBvc2l0aW9uQW5kRW5kUG9zaXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiU2VsZWN0aW9uIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwiaXNFbXB0eSIsImVtcHR5IiwiaXNFcXVhbFRvIiwic2VsZWN0aW9uIiwiZXF1YWxUbyIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb25zRXF1YWwiLCJlbmRQb3NpdGlvbnNFcXVhbCIsInNldFN0YXJ0UG9zaXRpb24iLCJzZXRFbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb25TaGlmdGVkIiwic3RhcnRPZmZzZXQiLCJlbmRQb3NpdGlvblNoaWZ0ZWQiLCJlbmRPZmZzZXQiLCJzaGlmdGVkIiwib2Zmc2V0IiwiZW1wdGllZCIsImNsb25lIiwiZnJvbU5vdGhpbmciLCJmcm9tRE9NRWxlbWVudCIsImRvbUVsZW1lbnQiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImZyb21TdGFydFBvc2l0aW9uIiwiZnJvbVN0YXJ0UG9zaXRpb25BbmRFbmRQb3NpdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sSUFBQSxBQUFNQSwwQkFBTjthQUFNQSxVQUNQQyxhQUFhLEVBQUVDLFdBQVc7OEJBRG5CRjtRQUVqQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBOztpQkFIRkY7O1lBTW5CRyxLQUFBQTttQkFBQUEsU0FBQUEsbUJBQW1CO2dCQUNqQixPQUFPLElBQUksQ0FBQ0YsYUFBYTtZQUMzQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxpQkFBaUI7Z0JBQ2YsT0FBTyxJQUFJLENBQUNGLFdBQVc7WUFDekI7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVTtnQkFDUixJQUFNQyxRQUFTLElBQUksQ0FBQ0wsYUFBYSxLQUFLLElBQUksQ0FBQ0MsV0FBVztnQkFFdEQsT0FBT0k7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVQyxTQUFTLEVBQUU7Z0JBQ25CLElBQUlDLFVBQVUsS0FBSztnQkFFbkIsSUFBSUQsY0FBYyxJQUFJLEVBQUU7b0JBQ3RCLElBQU1FLHlCQUF5QkYsVUFBVUwsZ0JBQWdCLElBQ25EUSx1QkFBdUJILFVBQVVKLGNBQWMsSUFDL0NRLHNCQUF1QixJQUFJLENBQUNYLGFBQWEsS0FBS1Msd0JBQzlDRyxvQkFBcUIsSUFBSSxDQUFDWCxXQUFXLEtBQUtTO29CQUVoREYsVUFBV0csdUJBQXVCQztnQkFDcEMsQ0FBQztnQkFFRCxPQUFPSjtZQUNUOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBLGlCQUFpQmIsYUFBYSxFQUFFO2dCQUM5QixJQUFJLENBQUNBLGFBQWEsR0FBR0E7WUFDdkI7OztZQUVBYyxLQUFBQTttQkFBQUEsU0FBQUEsZUFBZWIsV0FBVyxFQUFFO2dCQUMxQixJQUFJLENBQUNBLFdBQVcsR0FBR0E7WUFDckI7OztZQUVBYyxLQUFBQTttQkFBQUEsU0FBQUEscUJBQXFCQyxXQUFXLEVBQUU7Z0JBQ2hDLElBQU1oQixnQkFBZ0IsSUFBSSxDQUFDQSxhQUFhLEdBQUdnQixhQUNyQ2YsY0FBYyxJQUFJLENBQUNBLFdBQVcsRUFDOUJNLFlBQVksSUE5Q0RSLFVBOENlQyxlQUFlQztnQkFFL0MsT0FBT007WUFDVDs7O1lBRUFVLEtBQUFBO21CQUFBQSxTQUFBQSxtQkFBbUJDLFNBQVMsRUFBRTtnQkFDNUIsSUFBTWxCLGdCQUFnQixJQUFJLENBQUNBLGFBQWEsRUFDbENDLGNBQWMsSUFBSSxDQUFDQSxXQUFXLEdBQUdpQixXQUNqQ1gsWUFBWSxJQXRERFIsVUFzRGVDLGVBQWVDO2dCQUUvQyxPQUFPTTtZQUNUOzs7WUFFQVksS0FBQUE7bUJBQUFBLFNBQUFBLFFBQVFDLE1BQU0sRUFBRTtnQkFDZCxJQUFNcEIsZ0JBQWdCLElBQUksQ0FBQ0EsYUFBYSxHQUFHb0IsUUFDckNuQixjQUFjLElBQUksQ0FBQ0EsV0FBVyxHQUFHbUIsUUFDakNiLFlBQVksSUE5RERSLFVBOERlQyxlQUFlQztnQkFFL0MsT0FBT007WUFDVDs7O1lBRUFjLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVO2dCQUNSLElBQU1yQixnQkFBZ0IsSUFBSSxDQUFDQSxhQUFhLEVBQ2xDQyxjQUFjRCxlQUNkTyxZQUFZLElBdEVEUixVQXNFZUMsZUFBZUM7Z0JBRS9DLE9BQU9NO1lBQ1Q7OztZQUVBZSxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUTtnQkFDTixJQUFNZixZQUFZLElBNUVEUixVQTRFZSxJQUFJLENBQUNDLGFBQWEsRUFBRSxJQUFJLENBQUNDLFdBQVc7Z0JBRXBFLE9BQU9NO1lBQ1Q7Ozs7WUFFT2dCLEtBQUFBO21CQUFQLFNBQU9BLGNBQWM7Z0JBQ25CLElBQU12QixnQkFBZ0IsR0FDaEJDLGNBQWMsR0FDZE0sWUFBWSxJQXBGRFIsVUFvRmVDLGVBQWVDO2dCQUUvQyxPQUFPTTtZQUNUOzs7WUFFT2lCLEtBQUFBO21CQUFQLFNBQU9BLGVBQWVDLFVBQVUsRUFBRTtnQkFDaEMsSUFBUUMsaUJBQWlDRCxXQUFqQ0MsZ0JBQWdCQyxlQUFpQkYsV0FBakJFLGNBQ2xCM0IsZ0JBQWdCMEIsZ0JBQ2hCekIsY0FBYzBCLGNBQ2RwQixZQUFZLElBN0ZEUixVQTZGZUMsZUFBZUM7Z0JBRS9DLE9BQU9NO1lBRVQ7OztZQUVPcUIsS0FBQUE7bUJBQVAsU0FBT0Esa0JBQWtCNUIsYUFBYSxFQUFFO2dCQUN0QyxJQUFNQyxjQUFjRCxlQUNkTyxZQUFZLElBckdEUixVQXFHZUMsZUFBZUM7Z0JBRS9DLE9BQU9NO1lBQ1Q7OztZQUVPc0IsS0FBQUE7bUJBQVAsU0FBT0EsZ0NBQWdDN0IsYUFBYSxFQUFFQyxXQUFXLEVBQUU7Z0JBQ2pFLElBQU1NLFlBQVksSUEzR0RSLFVBMkdlQyxlQUFlQztnQkFFL0MsT0FBT007WUFDVDs7O1dBOUdtQlIifQ==
|
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,105 @@
|
|
|
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 _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
|
|
13
|
+
var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
|
|
14
|
+
function _classCallCheck(instance, Constructor) {
|
|
15
|
+
if (!(instance instanceof Constructor)) {
|
|
16
|
+
throw new TypeError("Cannot call a class as a function");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function _defineProperties(target, props) {
|
|
20
|
+
for(var i = 0; i < props.length; i++){
|
|
21
|
+
var descriptor = props[i];
|
|
22
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
23
|
+
descriptor.configurable = true;
|
|
24
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
25
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
29
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
30
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
31
|
+
return Constructor;
|
|
32
|
+
}
|
|
33
|
+
function _interopRequireDefault(obj) {
|
|
34
|
+
return obj && obj.__esModule ? obj : {
|
|
35
|
+
default: obj
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
var push = _necessary.arrayUtilities.push;
|
|
39
|
+
var UndoBuffer = /*#__PURE__*/ function() {
|
|
40
|
+
function UndoBuffer(position, operations) {
|
|
41
|
+
_classCallCheck(this, UndoBuffer);
|
|
42
|
+
this.position = position;
|
|
43
|
+
this.operations = operations;
|
|
44
|
+
}
|
|
45
|
+
_createClass(UndoBuffer, [
|
|
46
|
+
{
|
|
47
|
+
key: "getPosition",
|
|
48
|
+
value: function getPosition() {
|
|
49
|
+
return this.position;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: "getOperations",
|
|
54
|
+
value: function getOperations() {
|
|
55
|
+
return this.operations;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
key: "undo",
|
|
60
|
+
value: function undo() {
|
|
61
|
+
var operation = null;
|
|
62
|
+
if (this.position > 0) {
|
|
63
|
+
this.position--;
|
|
64
|
+
operation = this.operations[this.position];
|
|
65
|
+
var invertedOperation = operation.invert(_insert.default, _delete.default);
|
|
66
|
+
operation = invertedOperation; ///
|
|
67
|
+
}
|
|
68
|
+
return operation;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
key: "redo",
|
|
73
|
+
value: function redo() {
|
|
74
|
+
var operation = null;
|
|
75
|
+
var operationsLength = this.operations.length;
|
|
76
|
+
if (this.position < operationsLength) {
|
|
77
|
+
operation = this.operations[this.position];
|
|
78
|
+
this.position++;
|
|
79
|
+
}
|
|
80
|
+
return operation;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: "addOperations",
|
|
85
|
+
value: function addOperations(operations) {
|
|
86
|
+
var start = this.position; ///
|
|
87
|
+
this.operations.splice(start);
|
|
88
|
+
push(this.operations, operations);
|
|
89
|
+
var operationsLength = this.operations.length;
|
|
90
|
+
this.position = operationsLength; ///
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
], [
|
|
94
|
+
{
|
|
95
|
+
key: "fromNothing",
|
|
96
|
+
value: function fromNothing() {
|
|
97
|
+
var position = 0, operations = [], undoBuffer = new UndoBuffer(position, operations);
|
|
98
|
+
return undoBuffer;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
]);
|
|
102
|
+
return UndoBuffer;
|
|
103
|
+
}();
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91bmRvQnVmZmVyLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XG5pbXBvcnQgRGVsZXRlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWxldGVcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5kb0J1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uLCBvcGVyYXRpb25zKSB7XG4gICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG4gIH1cblxuICBnZXRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbjtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9ucztcbiAgfVxuXG4gIHVuZG8oKSB7XG4gICAgbGV0IG9wZXJhdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5wb3NpdGlvbiA+IDApIHtcbiAgICAgIHRoaXMucG9zaXRpb24tLTtcblxuICAgICAgb3BlcmF0aW9uID0gdGhpcy5vcGVyYXRpb25zW3RoaXMucG9zaXRpb25dO1xuXG4gICAgICBjb25zdCBpbnZlcnRlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbi5pbnZlcnQoSW5zZXJ0T3BlcmF0aW9uLCBEZWxldGVPcGVyYXRpb24pO1xuXG4gICAgICBvcGVyYXRpb24gPSBpbnZlcnRlZE9wZXJhdGlvbjsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cblxuICByZWRvKCkge1xuICAgIGxldCBvcGVyYXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uc0xlbmd0aCA9IHRoaXMub3BlcmF0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5wb3NpdGlvbiA8IG9wZXJhdGlvbnNMZW5ndGgpIHtcbiAgICAgIG9wZXJhdGlvbiA9IHRoaXMub3BlcmF0aW9uc1t0aGlzLnBvc2l0aW9uXTtcblxuICAgICAgdGhpcy5wb3NpdGlvbisrO1xuICAgIH1cblxuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cblxuICBhZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zaXRpb247ICAvLy9cblxuICAgIHRoaXMub3BlcmF0aW9ucy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgcHVzaCh0aGlzLm9wZXJhdGlvbnMsIG9wZXJhdGlvbnMpO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uc0xlbmd0aCA9IHRoaXMub3BlcmF0aW9ucy5sZW5ndGg7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gb3BlcmF0aW9uc0xlbmd0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSAwLFxuICAgICAgICAgIG9wZXJhdGlvbnMgPSBbXSxcbiAgICAgICAgICB1bmRvQnVmZmVyID0gbmV3IFVuZG9CdWZmZXIocG9zaXRpb24sIG9wZXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHVuZG9CdWZmZXI7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiVW5kb0J1ZmZlciIsInB1c2giLCJhcnJheVV0aWxpdGllcyIsInBvc2l0aW9uIiwib3BlcmF0aW9ucyIsImdldFBvc2l0aW9uIiwiZ2V0T3BlcmF0aW9ucyIsInVuZG8iLCJvcGVyYXRpb24iLCJpbnZlcnRlZE9wZXJhdGlvbiIsImludmVydCIsIkluc2VydE9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsInJlZG8iLCJvcGVyYXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiYWRkT3BlcmF0aW9ucyIsInN0YXJ0Iiwic3BsaWNlIiwiZnJvbU5vdGhpbmciLCJ1bmRvQnVmZmVyIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQVNxQkE7Ozt5QkFQVTsyREFFSDsyREFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1QixJQUFNLEFBQUVDLE9BQVNDLHlCQUFjLENBQXZCRDtBQUVPLElBQUEsQUFBTUQsMkJBQU47YUFBTUEsV0FDUEcsUUFBUSxFQUFFQyxVQUFVOzhCQURiSjtRQUVqQixJQUFJLENBQUNHLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBOztpQkFIREo7O1lBTW5CSyxLQUFBQTttQkFBQUEsU0FBQUEsY0FBYztnQkFDWixPQUFPLElBQUksQ0FBQ0YsUUFBUTtZQUN0Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxnQkFBZ0I7Z0JBQ2QsT0FBTyxJQUFJLENBQUNGLFVBQVU7WUFDeEI7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsT0FBTztnQkFDTCxJQUFJQyxZQUFZLElBQUk7Z0JBRXBCLElBQUksSUFBSSxDQUFDTCxRQUFRLEdBQUcsR0FBRztvQkFDckIsSUFBSSxDQUFDQSxRQUFRO29CQUViSyxZQUFZLElBQUksQ0FBQ0osVUFBVSxDQUFDLElBQUksQ0FBQ0QsUUFBUSxDQUFDO29CQUUxQyxJQUFNTSxvQkFBb0JELFVBQVVFLE1BQU0sQ0FBQ0MsZUFBZSxFQUFFQyxlQUFlO29CQUUzRUosWUFBWUMsbUJBQW9CLEdBQUc7Z0JBQ3JDLENBQUM7Z0JBRUQsT0FBT0Q7WUFDVDs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPO2dCQUNMLElBQUlMLFlBQVksSUFBSTtnQkFFcEIsSUFBTU0sbUJBQW1CLElBQUksQ0FBQ1YsVUFBVSxDQUFDVyxNQUFNO2dCQUUvQyxJQUFJLElBQUksQ0FBQ1osUUFBUSxHQUFHVyxrQkFBa0I7b0JBQ3BDTixZQUFZLElBQUksQ0FBQ0osVUFBVSxDQUFDLElBQUksQ0FBQ0QsUUFBUSxDQUFDO29CQUUxQyxJQUFJLENBQUNBLFFBQVE7Z0JBQ2YsQ0FBQztnQkFFRCxPQUFPSztZQUNUOzs7WUFFQVEsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNaLFVBQVUsRUFBRTtnQkFDeEIsSUFBTWEsUUFBUSxJQUFJLENBQUNkLFFBQVEsRUFBRyxHQUFHO2dCQUVqQyxJQUFJLENBQUNDLFVBQVUsQ0FBQ2MsTUFBTSxDQUFDRDtnQkFFdkJoQixLQUFLLElBQUksQ0FBQ0csVUFBVSxFQUFFQTtnQkFFdEIsSUFBTVUsbUJBQW1CLElBQUksQ0FBQ1YsVUFBVSxDQUFDVyxNQUFNO2dCQUUvQyxJQUFJLENBQUNaLFFBQVEsR0FBR1csa0JBQWtCLEdBQUc7WUFDdkM7Ozs7WUFFT0ssS0FBQUE7bUJBQVAsU0FBT0EsY0FBYztnQkFDbkIsSUFBTWhCLFdBQVcsR0FDWEMsYUFBYSxFQUFFLEVBQ2ZnQixhQUFhLElBM0RGcEIsV0EyRGlCRyxVQUFVQztnQkFFNUMsT0FBT2dCO1lBQ1Q7OztXQTlEbUJwQiJ9
|
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.4",
|
|
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
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
export { default as Selection } from "./selection";
|
|
5
|
+
export { default as RichTextarea } from "./richTextarea";
|
|
3
6
|
export { default as EmptyOperation } from "./operation/empty";
|
|
4
7
|
export { default as InsertOperation } from "./operation/insert";
|
|
5
8
|
export { default as DeleteOperation } from "./operation/delete";
|
|
@@ -9,6 +12,3 @@ export { default as operationsFromJSON } from "./operations/fromJSON";
|
|
|
9
12
|
export { default as generateOperations } from "./operations/generate";
|
|
10
13
|
export { default as transformOperations } from "./operations/transform";
|
|
11
14
|
|
|
12
|
-
export { default as Selection } from "./selection";
|
|
13
|
-
|
|
14
|
-
export { default as RichTextarea } from "./richTextarea";
|
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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export { default as types } from "./types";
|
|
4
4
|
export { default as Selection } from "./selection";
|
|
5
|
+
|
|
5
6
|
export { default as EmptyOperation } from "./operation/empty";
|
|
6
7
|
export { default as InsertOperation } from "./operation/insert";
|
|
7
8
|
export { default as DeleteOperation } from "./operation/delete";
|