easy-richtextarea 4.0.3 → 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.
Files changed (42) hide show
  1. package/README.md +0 -8
  2. package/example.js +1399 -982
  3. package/lib/constants.js +13 -4
  4. package/lib/contentCompare.js +34 -0
  5. package/lib/example/richTextarea.js +2 -2
  6. package/lib/example/view.js +18 -9
  7. package/lib/keyCodes.js +13 -0
  8. package/lib/operation/delete.js +101 -52
  9. package/lib/operation/empty.js +21 -6
  10. package/lib/operation/insert.js +78 -31
  11. package/lib/operations/fromJSON.js +4 -4
  12. package/lib/operations/generate.js +3 -3
  13. package/lib/operations/transform.js +3 -7
  14. package/lib/richTextarea.js +244 -156
  15. package/lib/selection.js +55 -13
  16. package/lib/types.js +13 -13
  17. package/lib/undoBuffer.js +105 -0
  18. package/package.json +3 -2
  19. package/src/constants.js +1 -0
  20. package/src/contentCompare.js +34 -0
  21. package/src/example/richTextarea.js +11 -9
  22. package/src/example/view.js +28 -10
  23. package/src/keyCodes.js +3 -0
  24. package/src/operation/delete.js +135 -58
  25. package/src/operation/empty.js +19 -14
  26. package/src/operation/insert.js +97 -39
  27. package/src/operations/fromJSON.js +4 -4
  28. package/src/operations/generate.js +8 -4
  29. package/src/operations/transform.js +3 -3
  30. package/src/richTextarea.js +316 -185
  31. package/src/selection.js +53 -9
  32. package/src/types.js +6 -6
  33. package/src/undoBuffer.js +73 -0
  34. package/test/content/transform.js +9 -11
  35. package/test/helpers.js +27 -21
  36. package/test/operation/delete.js +187 -147
  37. package/test/operation/empty.js +3 -5
  38. package/test/operation/insert.js +134 -118
  39. package/test/operations/generate.js +19 -22
  40. package/test/operations/transform.js +37 -98
  41. package/lib/stringCompare.js +0 -33
  42. 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: "isEqualTo",
63
- value: function isEqualTo(selection) {
64
- var equalTo = false;
65
- if (selection !== null) {
66
- var selectionStartPosition = selection.getStartPosition(), selectionEndPosition = selection.getEndPosition(), startPositionsEqual = this.startPosition === selectionStartPosition, endPositionsEqual = this.endPosition === selectionEndPosition;
67
- equalTo = startPositionsEqual && endPositionsEqual;
68
- }
69
- return equalTo;
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: "isDifferentTo",
74
- value: function isDifferentTo(selection) {
75
- var equalTo = this.isEqualTo(selection), differentTo = !equalTo;
76
- return differentTo;
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZWxlY3Rpb24uanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247XG4gIH1cblxuICBnZXRTdGFydFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBnZXRFbmRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmRQb3NpdGlvbjtcbiAgfVxuXG4gIHNldFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbikge1xuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBzZXRFbmRQb3NpdGlvbihlbmRQb3NpdGlvbikge1xuICAgIHRoaXMuZW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzZWxlY3Rpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbnNFcXVhbCA9ICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24pLFxuICAgICAgICAgICAgZW5kUG9zaXRpb25zRXF1YWwgPSAodGhpcy5lbmRQb3NpdGlvbiA9PT0gc2VsZWN0aW9uRW5kUG9zaXRpb24pO1xuXG4gICAgICBlcXVhbFRvID0gKHN0YXJ0UG9zaXRpb25zRXF1YWwgJiYgZW5kUG9zaXRpb25zRXF1YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNEaWZmZXJlbnRUbyhzZWxlY3Rpb24pIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8oc2VsZWN0aW9uKSxcbiAgICAgICAgICBkaWZmZXJlbnRUbyA9ICFlcXVhbFRvO1xuXG4gICAgcmV0dXJuIGRpZmZlcmVudFRvO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAwLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gZG9tRWxlbWVudCxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQsIC8vL1xuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uRW5kLCAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG5cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhcnRQb3NpdGlvbkFuZEVuZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG59XG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIlNlbGVjdGlvbiIsInN0YXJ0UG9zaXRpb24iLCJlbmRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInNldFN0YXJ0UG9zaXRpb24iLCJzZXRFbmRQb3NpdGlvbiIsImlzRXF1YWxUbyIsInNlbGVjdGlvbiIsImVxdWFsVG8iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uc0VxdWFsIiwiZW5kUG9zaXRpb25zRXF1YWwiLCJpc0RpZmZlcmVudFRvIiwiZGlmZmVyZW50VG8iLCJmcm9tTm90aGluZyIsImZyb21ET01FbGVtZW50IiwiZG9tRWxlbWVudCIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZnJvbVN0YXJ0UG9zaXRpb25BbmRFbmRQb3NpdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sSUFBQSxBQUFNQSwwQkFBTjthQUFNQSxVQUNQQyxhQUFhLEVBQUVDLFdBQVc7OEJBRG5CRjtRQUVqQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBOztpQkFIRkY7O1lBTW5CRyxLQUFBQTttQkFBQUEsU0FBQUEsbUJBQW1CO2dCQUNqQixPQUFPLElBQUksQ0FBQ0YsYUFBYTtZQUMzQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxpQkFBaUI7Z0JBQ2YsT0FBTyxJQUFJLENBQUNGLFdBQVc7WUFDekI7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsaUJBQWlCSixhQUFhLEVBQUU7Z0JBQzlCLElBQUksQ0FBQ0EsYUFBYSxHQUFHQTtZQUN2Qjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQSxlQUFlSixXQUFXLEVBQUU7Z0JBQzFCLElBQUksQ0FBQ0EsV0FBVyxHQUFHQTtZQUNyQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVQyxTQUFTLEVBQUU7Z0JBQ25CLElBQUlDLFVBQVUsS0FBSztnQkFFbkIsSUFBSUQsY0FBYyxJQUFJLEVBQUU7b0JBQ3RCLElBQU1FLHlCQUF5QkYsVUFBVUwsZ0JBQWdCLElBQ25EUSx1QkFBdUJILFVBQVVKLGNBQWMsSUFDL0NRLHNCQUF1QixJQUFJLENBQUNYLGFBQWEsS0FBS1Msd0JBQzlDRyxvQkFBcUIsSUFBSSxDQUFDWCxXQUFXLEtBQUtTO29CQUVoREYsVUFBV0csdUJBQXVCQztnQkFDcEMsQ0FBQztnQkFFRCxPQUFPSjtZQUNUOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNOLFNBQVMsRUFBRTtnQkFDdkIsSUFBTUMsVUFBVSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0MsWUFDekJPLGNBQWMsQ0FBQ047Z0JBRXJCLE9BQU9NO1lBQ1Q7Ozs7WUFFT0MsS0FBQUE7bUJBQVAsU0FBT0EsY0FBYztnQkFDbkIsSUFBTWYsZ0JBQWdCLEdBQ2hCQyxjQUFjLEdBQ2RNLFlBQVksSUEvQ0RSLFVBK0NlQyxlQUFlQztnQkFFL0MsT0FBT007WUFDVDs7O1lBRU9TLEtBQUFBO21CQUFQLFNBQU9BLGVBQWVDLFVBQVUsRUFBRTtnQkFDaEMsSUFBUUMsaUJBQWlDRCxXQUFqQ0MsZ0JBQWdCQyxlQUFpQkYsV0FBakJFLGNBQ2xCbkIsZ0JBQWdCa0IsZ0JBQ2hCakIsY0FBY2tCLGNBQ2RaLFlBQVksSUF4RERSLFVBd0RlQyxlQUFlQztnQkFFL0MsT0FBT007WUFFVDs7O1lBRU9hLEtBQUFBO21CQUFQLFNBQU9BLGdDQUFnQ3BCLGFBQWEsRUFBRUMsV0FBVyxFQUFFO2dCQUNqRSxJQUFNTSxZQUFZLElBL0REUixVQStEZUMsZUFBZUM7Z0JBRS9DLE9BQU9NO1lBQ1Q7OztXQWxFbUJSIn0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZWxlY3Rpb24uanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247XG4gIH1cblxuICBnZXRTdGFydFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBnZXRFbmRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmRQb3NpdGlvbjtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZW1wdHkgPSAodGhpcy5zdGFydFBvc2l0aW9uID09PSB0aGlzLmVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzZWxlY3Rpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbnNFcXVhbCA9ICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24pLFxuICAgICAgICAgICAgZW5kUG9zaXRpb25zRXF1YWwgPSAodGhpcy5lbmRQb3NpdGlvbiA9PT0gc2VsZWN0aW9uRW5kUG9zaXRpb24pO1xuXG4gICAgICBlcXVhbFRvID0gKHN0YXJ0UG9zaXRpb25zRXF1YWwgJiYgZW5kUG9zaXRpb25zRXF1YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgc2V0U3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgfVxuXG4gIHNldEVuZFBvc2l0aW9uKGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5lbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uO1xuICB9XG5cbiAgc3RhcnRQb3NpdGlvblNoaWZ0ZWQoc3RhcnRPZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uICsgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSB0aGlzLmVuZFBvc2l0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIGVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gdGhpcy5lbmRQb3NpdGlvbiArIGVuZE9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzaGlmdGVkKG9mZnNldCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gKyBvZmZzZXQsXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSB0aGlzLmVuZFBvc2l0aW9uICsgb2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgfVxuXG4gIGVtcHRpZWQoKSB7XG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24sICAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMuc3RhcnRQb3NpdGlvbiwgdGhpcy5lbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAwLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gZG9tRWxlbWVudCxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQsIC8vL1xuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uRW5kLCAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG5cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSB7XG4gICAgY29uc3QgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLCAgLy8vXG4gICAgICAgICAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGFydFBvc2l0aW9uQW5kRW5kUG9zaXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiU2VsZWN0aW9uIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwiaXNFbXB0eSIsImVtcHR5IiwiaXNFcXVhbFRvIiwic2VsZWN0aW9uIiwiZXF1YWxUbyIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb25zRXF1YWwiLCJlbmRQb3NpdGlvbnNFcXVhbCIsInNldFN0YXJ0UG9zaXRpb24iLCJzZXRFbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb25TaGlmdGVkIiwic3RhcnRPZmZzZXQiLCJlbmRQb3NpdGlvblNoaWZ0ZWQiLCJlbmRPZmZzZXQiLCJzaGlmdGVkIiwib2Zmc2V0IiwiZW1wdGllZCIsImNsb25lIiwiZnJvbU5vdGhpbmciLCJmcm9tRE9NRWxlbWVudCIsImRvbUVsZW1lbnQiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImZyb21TdGFydFBvc2l0aW9uIiwiZnJvbVN0YXJ0UG9zaXRpb25BbmRFbmRQb3NpdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sSUFBQSxBQUFNQSwwQkFB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
package/lib/types.js CHANGED
@@ -9,26 +9,26 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- emptyType: function() {
13
- return emptyType;
12
+ EMPTY_TYPE: function() {
13
+ return EMPTY_TYPE;
14
14
  },
15
- deleteType: function() {
16
- return deleteType;
15
+ DELETE_TYPE: function() {
16
+ return DELETE_TYPE;
17
17
  },
18
- insertType: function() {
19
- return insertType;
18
+ INSERT_TYPE: function() {
19
+ return INSERT_TYPE;
20
20
  },
21
21
  default: function() {
22
22
  return _default;
23
23
  }
24
24
  });
25
- var emptyType = "empty";
26
- var deleteType = "delete";
27
- var insertType = "insert";
25
+ var EMPTY_TYPE = "empty";
26
+ var DELETE_TYPE = "delete";
27
+ var INSERT_TYPE = "insert";
28
28
  var _default = {
29
- emptyType: emptyType,
30
- deleteType: deleteType,
31
- insertType: insertType
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IGVtcHR5VHlwZSA9IFwiZW1wdHlcIjtcbmV4cG9ydCBjb25zdCBkZWxldGVUeXBlID0gXCJkZWxldGVcIjtcbmV4cG9ydCBjb25zdCBpbnNlcnRUeXBlID0gXCJpbnNlcnRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbXB0eVR5cGUsXG4gIGRlbGV0ZVR5cGUsXG4gIGluc2VydFR5cGVcbn07XG4iXSwibmFtZXMiOlsiZW1wdHlUeXBlIiwiZGVsZXRlVHlwZSIsImluc2VydFR5cGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUVhQSxTQUFTO2VBQVRBOztJQUNBQyxVQUFVO2VBQVZBOztJQUNBQyxVQUFVO2VBQVZBOztJQUViLE9BSUU7ZUFKRjs7O0FBSk8sSUFBTUYsWUFBWTtBQUNsQixJQUFNQyxhQUFhO0FBQ25CLElBQU1DLGFBQWE7SUFFMUIsV0FBZTtJQUNiRixXQUFBQTtJQUNBQyxZQUFBQTtJQUNBQyxZQUFBQTtBQUNGIn0=
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.3",
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.3"
13
+ "easy": "^14.1.6",
14
+ "necessary": "^11.2.6"
14
15
  },
15
16
  "devDependencies": {
16
17
  "@swc/core": "^1.2.160",
package/src/constants.js CHANGED
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
2
 
3
+ export const TEXT = "text";
3
4
  export const EMPTY_STRING = "";
@@ -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
- border: 1px solid black;
10
- width: 32rem;
11
- height: 32rem;
9
+ color: #eee;
10
+ width: 64rem;
11
+ resize: none;
12
+ height: 64rem;
12
13
  padding: 0.25rem;
13
- font-size: 1.2rem;
14
+ font-size: 1.6rem;
14
15
  font-family: monospace;
15
-
16
- display: none;
17
-
18
- .active {
19
- display: block;
16
+ margin-right: 2rem;
17
+ background-color: #222;
18
+
19
+ ::selection {
20
+ color: #fff;
21
+ background-color: #c80;
20
22
  }
21
23
 
22
24
  `;
@@ -3,20 +3,26 @@
3
3
  import RichTextarea from "./richTextarea";
4
4
 
5
5
  const content = "",
6
- richTextarea =
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
- richTextarea.setContent(content);
17
+ activeRichTextarea.setContent(content);
13
18
 
14
- richTextarea.activate();
19
+ activeRichTextarea.activate();
15
20
 
16
21
  const View = (properties) =>
17
22
 
18
23
  <div className="view">
19
- {richTextarea}
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 richTextarea = element, ///
28
- contentChanged = richTextarea.hasContentChanged(),
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 = element.getScrollTop(),
36
- scrollLeft = element.getScrollLeft();
52
+ const scrollTop = activeRichTextarea.getScrollTop(),
53
+ scrollLeft = activeRichTextarea.getScrollLeft();
37
54
 
38
- console.log(scrollTop, scrollLeft)
55
+ inactiveRichTextarea.setScrollTop(scrollTop);
56
+ inactiveRichTextarea.setScrollLeft(scrollLeft);
39
57
  }
40
58
 
41
59
  function focusHandler(event, element) {
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ export const Z_KEY_CODE = 90;