easy-richtextarea 4.0.15 → 4.0.16
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/example.js +3 -2
- package/lib/operation/delete.js +3 -2
- package/package.json +1 -1
- package/src/operation/delete.js +3 -1
- package/test/operation/delete.js +107 -2
- package/test/operation/empty.js +22 -2
- package/test/operation/insert.js +91 -2
package/lib/operation/delete.js
CHANGED
|
@@ -170,7 +170,8 @@ var DeleteOperation = /*#__PURE__*/ function() {
|
|
|
170
170
|
var offset1 = startPosition - selectionStartPosition, endOffset = selectionStartPosition - endPosition;
|
|
171
171
|
transformedSelection = selection.shifted(offset1).endPositionShifted(endOffset);
|
|
172
172
|
} else {
|
|
173
|
-
|
|
173
|
+
var offset2 = startPosition - selectionStartPosition;
|
|
174
|
+
transformedSelection = selection.emptied().shifted(offset2);
|
|
174
175
|
}
|
|
175
176
|
} else if (selectionEndPosition > endPosition) {
|
|
176
177
|
var endOffset1 = -contentLength;
|
|
@@ -286,4 +287,4 @@ var DeleteOperation = /*#__PURE__*/ function() {
|
|
|
286
287
|
return DeleteOperation;
|
|
287
288
|
}();
|
|
288
289
|
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb24vZGVsZXRlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZW1wdHlcIjtcclxuXHJcbmltcG9ydCB7IElOU0VSVF9UWVBFLCBERUxFVEVfVFlQRSwgRU1QVFlfVFlQRSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBwb3NpdGlvbikge1xyXG5cdCAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBvcGVyYXRpb24uZ2V0VHlwZSgpO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIElOU0VSVF9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uIDwgcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFt0YXUubGVmdChyaG8pLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uID49IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcblxyXG4gICAgICBjYXNlIERFTEVURV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbdGF1LmNsb25lKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnRha2VuRnJvbSh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNwbGl0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA9PT0gcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPD0gcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtFbXB0eU9wZXJhdGlvbi5mcm9tTm90aGluZygpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHJoby50YWtlbkZyb20odGF1KSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+PSByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtyaG8uc2hpZnQodGF1KV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbRW1wdHlPcGVyYXRpb24uZnJvbU5vdGhpbmcoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPiByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3Joby5zaGlmdChyaG8udGFrZW5Gcm9tKHRhdSkpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KShvcGVyYXRpb24sIHRoaXMpO1xyXG5cclxuICAgICAgY2FzZSBFTVBUWV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpIHtcclxuICAgIGxldCBzdGFydCwgZW5kO1xyXG5cclxuICAgIHN0YXJ0ID0gMDtcclxuXHJcbiAgICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksXHJcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBzdGFydCA9IHRoaXMucG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkQ29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGgsXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAvLy9cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiAtIGVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zaGlmdGVkKG9mZnNldCkuZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZW1wdGllZCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkVuZFBvc2l0aW9uID4gZW5kUG9zaXRpb24pIHtcclxuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gLWNvbnRlbnRMZW5ndGg7XHJcblxyXG4gICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5lbmRQb3NpdGlvblNoaWZ0ZWQoZW5kT2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kUG9zaXRpb24gPiBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHN0YXJ0UG9zaXRpb24gLSBzZWxlY3Rpb25FbmRQb3NpdGlvbjtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uY2xvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdGVkKG9mZnNldCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCxcclxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiArIG9mZnNldCxcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2hpZnQob3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aCxcclxuICAgICAgICAgIG9mZnNldCA9IC1jb250ZW50TGVuZ3RoLFxyXG4gICAgICAgICAgc2hpZnRlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbi5zaGlmdGVkKG9mZnNldCk7XHJcblxyXG4gICAgcmV0dXJuIHNoaWZ0ZWRPcGVyYXRpb25cclxuICB9XHJcblxyXG4gIHRha2VuRnJvbShkZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gZGVsZXRlT3BlcmF0aW9uLmdldENvbnRlbnQoKSxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5nZXRQb3NpdGlvbigpO1xyXG5cclxuICAgIGxldCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKCh0aGlzLnBvc2l0aW9uID4gcG9zaXRpb24pICYmICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCA+PSBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLnBvc2l0aW9uIC0gcG9zaXRpb24sXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMCxcclxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb250ZW50TGVuZ3RoOyAgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCh0aGlzLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSAmJiAodGhpcy5wb3NpdGlvbiArIHRoaXMuY29udGVudC5sZW5ndGggPCBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpKSB7XHJcbiAgICAgIGNvbnRlbnRMZW5ndGggPSAocG9zaXRpb24gKyBjb250ZW50TGVuZ3RoKSAtICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydCA9ICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCkgLSBwb3NpdGlvbixcclxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb250ZW50TGVuZ3RoOyAgLy8vXHJcblxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoO1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzcGxpdChkZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gZGVsZXRlT3BlcmF0aW9uLmdldENvbnRlbnQoKSxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5nZXRQb3NpdGlvbigpO1xyXG5cclxuICAgIGxldCBzdGFydCxcclxuICAgICAgICBlbmQ7XHJcblxyXG4gICAgc3RhcnQgPSAwO1xyXG5cclxuICAgIGVuZCA9IHRoaXMucG9zaXRpb24gLSBwb3NpdGlvbjtcclxuXHJcbiAgICBjb25zdCBsZWZ0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbiAtIHBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBjb25zdCByaWdodENvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcblxyXG4gICAgY29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgaW52ZXJ0KEluc2VydE9wZXJhdGlvbiwgRGVsZXRlT3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbih0aGlzLmNvbnRlbnQsIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBpbnNlcnRPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKHRoaXMuY29udGVudCwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGRlbGV0ZU9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHRvSlNPTigpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGUsXHJcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAganNvbiA9IHtcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcclxuICAgIGNvbnN0IHsgdHlwZSwgY29udGVudCwgcG9zaXRpb24gfSA9IGpzb24sXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBERUxFVEVfVFlQRSwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbikge1xyXG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgYmVnaW4gPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbjsgIC8vL1xyXG5cclxuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKGJlZ2luLCBlbmQpOyAgLy8vXHJcblxyXG4gICAgY29uc3QgdHlwZSA9IERFTEVURV9UWVBFLCAvLy9cclxuICAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxufVxyXG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIkRlbGV0ZU9wZXJhdGlvbiIsInR5cGUiLCJjb250ZW50IiwicG9zaXRpb24iLCJnZXRUeXBlIiwiZ2V0Q29udGVudCIsImdldFBvc2l0aW9uIiwidHJhbnNmb3JtT3BlcmF0aW9uIiwib3BlcmF0aW9uIiwiSU5TRVJUX1RZUEUiLCJ0YXUiLCJyaG8iLCJjbG9uZSIsImxlbmd0aCIsImxlZnQiLCJzaGlmdCIsIkRFTEVURV9UWVBFIiwidGFrZW5Gcm9tIiwic3BsaXQiLCJFbXB0eU9wZXJhdGlvbiIsImZyb21Ob3RoaW5nIiwiRU1QVFlfVFlQRSIsInRyYW5zZm9ybUNvbnRlbnQiLCJzdGFydCIsImVuZCIsImxlZnRDb250ZW50Iiwic3Vic3RyaW5nIiwiY29udGVudExlbmd0aCIsInJpZ2h0Q29udGVudCIsInRyYW5zZm9ybWVkQ29udGVudCIsInRyYW5zZm9ybVNlbGVjdGlvbiIsInNlbGVjdGlvbiIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwic2VsZWN0aW9uU3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwib2Zmc2V0Iiwic2hpZnRlZCIsImVuZE9mZnNldCIsImVuZFBvc2l0aW9uU2hpZnRlZCIsImVtcHRpZWQiLCJkZWxldGVPcGVyYXRpb24iLCJmcm9tQ29udGVudEFuZFBvc2l0aW9uIiwic2hpZnRlZE9wZXJhdGlvbiIsImludmVydCIsIkluc2VydE9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsInRvSlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwiYmVnaW4iLCJzbGljZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFNcUJBOzs7MERBSk07cUJBRTBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLElBQUEsQUFBTUEsZ0NBQU47YUFBTUEsZ0JBQ1BDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFROzhCQURoQkg7UUFFbEIsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1gsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxRQUFRLEdBQUdBOztpQkFKQ0g7O1lBT25CSSxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVTtnQkFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtZQUNsQjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLE9BQU8sSUFBSSxDQUFDSCxPQUFPO1lBQ3JCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWM7Z0JB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
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb24vZGVsZXRlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZW1wdHlcIjtcclxuXHJcbmltcG9ydCB7IElOU0VSVF9UWVBFLCBERUxFVEVfVFlQRSwgRU1QVFlfVFlQRSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBwb3NpdGlvbikge1xyXG5cdCAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBvcGVyYXRpb24uZ2V0VHlwZSgpO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIElOU0VSVF9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uIDwgcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFt0YXUubGVmdChyaG8pLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uID49IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcblxyXG4gICAgICBjYXNlIERFTEVURV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbdGF1LmNsb25lKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnRha2VuRnJvbSh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNwbGl0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA9PT0gcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPD0gcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtFbXB0eU9wZXJhdGlvbi5mcm9tTm90aGluZygpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHJoby50YWtlbkZyb20odGF1KSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+PSByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtyaG8uc2hpZnQodGF1KV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbRW1wdHlPcGVyYXRpb24uZnJvbU5vdGhpbmcoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPiByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3Joby5zaGlmdChyaG8udGFrZW5Gcm9tKHRhdSkpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KShvcGVyYXRpb24sIHRoaXMpO1xyXG5cclxuICAgICAgY2FzZSBFTVBUWV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpIHtcclxuICAgIGxldCBzdGFydCwgZW5kO1xyXG5cclxuICAgIHN0YXJ0ID0gMDtcclxuXHJcbiAgICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksXHJcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBzdGFydCA9IHRoaXMucG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkQ29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGgsXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAvLy9cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiAtIGVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zaGlmdGVkKG9mZnNldCkuZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb247XHJcblxyXG4gICAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVtcHRpZWQoKS5zaGlmdGVkKG9mZnNldCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kUG9zaXRpb24gPiBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IHN0YXJ0UG9zaXRpb24pIHtcclxuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvbkVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5jbG9uZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNoaWZ0ZWQob2Zmc2V0KSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uICsgb2Zmc2V0LFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdChvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLmNvbnRlbnQubGVuZ3RoLFxyXG4gICAgICAgICAgb2Zmc2V0ID0gLWNvbnRlbnRMZW5ndGgsXHJcbiAgICAgICAgICBzaGlmdGVkT3BlcmF0aW9uID0gb3BlcmF0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuXHJcbiAgICByZXR1cm4gc2hpZnRlZE9wZXJhdGlvblxyXG4gIH1cclxuXHJcbiAgdGFrZW5Gcm9tKGRlbGV0ZU9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSBkZWxldGVPcGVyYXRpb24uZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHBvc2l0aW9uID0gZGVsZXRlT3BlcmF0aW9uLmdldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgbGV0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBpZiAoKHRoaXMucG9zaXRpb24gPiBwb3NpdGlvbikgJiYgKHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoID49IHBvc2l0aW9uICsgY29udGVudExlbmd0aCkpIHtcclxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMucG9zaXRpb24gLSBwb3NpdGlvbixcclxuICAgICAgICAgICAgc3RhcnQgPSAwLFxyXG4gICAgICAgICAgICBlbmQgPSBzdGFydCArIGNvbnRlbnRMZW5ndGg7ICAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcclxuXHJcbiAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKHRoaXMucG9zaXRpb24gPD0gcG9zaXRpb24pICYmICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCA8IHBvc2l0aW9uICsgY29udGVudExlbmd0aCkpIHtcclxuICAgICAgY29udGVudExlbmd0aCA9IChwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpIC0gKHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoKSAtIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICBlbmQgPSBzdGFydCArIGNvbnRlbnRMZW5ndGg7ICAvLy9cclxuXHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiArIHRoaXMuY29udGVudC5sZW5ndGg7XHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlbGV0ZU9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHNwbGl0KGRlbGV0ZU9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSBkZWxldGVPcGVyYXRpb24uZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHBvc2l0aW9uID0gZGVsZXRlT3BlcmF0aW9uLmdldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgbGV0IHN0YXJ0LFxyXG4gICAgICAgIGVuZDtcclxuXHJcbiAgICBzdGFydCA9IDA7XHJcblxyXG4gICAgZW5kID0gdGhpcy5wb3NpdGlvbiAtIHBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uIC0gcG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuXHJcbiAgICBjb250ZW50ID0gbGVmdENvbnRlbnQgKyByaWdodENvbnRlbnQ7XHJcblxyXG4gICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBpbnZlcnQoSW5zZXJ0T3BlcmF0aW9uLCBEZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IGluc2VydE9wZXJhdGlvbiA9IEluc2VydE9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKHRoaXMuY29udGVudCwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGluc2VydE9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIGNsb25lKCkge1xyXG4gICAgY29uc3QgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24odGhpcy5jb250ZW50LCB0aGlzLnBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZSxcclxuICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24sXHJcbiAgICAgICAgICBqc29uID0ge1xyXG4gICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xyXG4gICAgY29uc3QgeyB0eXBlLCBjb250ZW50LCBwb3NpdGlvbiB9ID0ganNvbixcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IG5ldyBEZWxldGVPcGVyYXRpb24odHlwZSwgY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbikge1xyXG4gICAgY29uc3QgdHlwZSA9IERFTEVURV9UWVBFLCAvLy9cclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IG5ldyBEZWxldGVPcGVyYXRpb24odHlwZSwgY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBiZWdpbiA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uOyAgLy8vXHJcblxyXG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoYmVnaW4sIGVuZCk7ICAvLy9cclxuXHJcbiAgICBjb25zdCB0eXBlID0gREVMRVRFX1RZUEUsIC8vL1xyXG4gICAgICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLCAvLy9cclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IG5ldyBEZWxldGVPcGVyYXRpb24odHlwZSwgY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG59XHJcbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRGVsZXRlT3BlcmF0aW9uIiwidHlwZSIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImdldFR5cGUiLCJnZXRDb250ZW50IiwiZ2V0UG9zaXRpb24iLCJ0cmFuc2Zvcm1PcGVyYXRpb24iLCJvcGVyYXRpb24iLCJJTlNFUlRfVFlQRSIsInRhdSIsInJobyIsImNsb25lIiwibGVuZ3RoIiwibGVmdCIsInNoaWZ0IiwiREVMRVRFX1RZUEUiLCJ0YWtlbkZyb20iLCJzcGxpdCIsIkVtcHR5T3BlcmF0aW9uIiwiZnJvbU5vdGhpbmciLCJFTVBUWV9UWVBFIiwidHJhbnNmb3JtQ29udGVudCIsInN0YXJ0IiwiZW5kIiwibGVmdENvbnRlbnQiLCJzdWJzdHJpbmciLCJjb250ZW50TGVuZ3RoIiwicmlnaHRDb250ZW50IiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtU2VsZWN0aW9uIiwic2VsZWN0aW9uIiwidHJhbnNmb3JtZWRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInNlbGVjdGlvbkVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZW5kUG9zaXRpb24iLCJvZmZzZXQiLCJzaGlmdGVkIiwiZW5kT2Zmc2V0IiwiZW5kUG9zaXRpb25TaGlmdGVkIiwiZW1wdGllZCIsImRlbGV0ZU9wZXJhdGlvbiIsImZyb21Db250ZW50QW5kUG9zaXRpb24iLCJzaGlmdGVkT3BlcmF0aW9uIiwiaW52ZXJ0IiwiSW5zZXJ0T3BlcmF0aW9uIiwiaW5zZXJ0T3BlcmF0aW9uIiwidG9KU09OIiwianNvbiIsImZyb21KU09OIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJiZWdpbiIsInNsaWNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQU1xQkE7OzswREFKTTtxQkFFMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsSUFBQSxBQUFNQSxnQ0FBTjthQUFNQSxnQkFDUEMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLFFBQVE7OEJBRGhCSDtRQUVsQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWCxJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFFBQVEsR0FBR0E7O2lCQUpDSDs7WUFPbkJJLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVO2dCQUNSLE9BQU8sSUFBSSxDQUFDSCxJQUFJO1lBQ2xCOzs7WUFFQUksS0FBQUE7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
|
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.16",
|
|
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.",
|
package/src/operation/delete.js
CHANGED
|
@@ -138,7 +138,9 @@ export default class DeleteOperation {
|
|
|
138
138
|
|
|
139
139
|
transformedSelection = selection.shifted(offset).endPositionShifted(endOffset);
|
|
140
140
|
} else {
|
|
141
|
-
|
|
141
|
+
const offset = startPosition - selectionStartPosition;
|
|
142
|
+
|
|
143
|
+
transformedSelection = selection.emptied().shifted(offset);
|
|
142
144
|
}
|
|
143
145
|
} else if (selectionEndPosition > endPosition) {
|
|
144
146
|
const endOffset = -contentLength;
|
package/test/operation/delete.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { assert } = require("chai"),
|
|
4
4
|
{ arrayUtilities } = require("necessary"),
|
|
5
|
-
{ EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
|
|
5
|
+
{ Selection, EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
|
|
6
6
|
|
|
7
7
|
const { first } = arrayUtilities;
|
|
8
8
|
|
|
@@ -270,8 +270,113 @@ describe("DeleteOperation", () => {
|
|
|
270
270
|
});
|
|
271
271
|
});
|
|
272
272
|
|
|
273
|
+
describe("#transformSelection", () => {
|
|
274
|
+
let deleteOperation;
|
|
275
|
+
|
|
276
|
+
beforeEach(() => {
|
|
277
|
+
const content = "jUb",
|
|
278
|
+
position = 4;
|
|
279
|
+
|
|
280
|
+
deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
describe("the selection is to its left", () => {
|
|
284
|
+
it("leaves the selection intact", () => {
|
|
285
|
+
const startPosition = 1,
|
|
286
|
+
endPosition = 2,
|
|
287
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
288
|
+
transformedSelection = deleteOperation.transformSelection(selection),
|
|
289
|
+
expectedSelection = selection,
|
|
290
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
291
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
292
|
+
|
|
293
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
describe("the selection overlaps its left", () => {
|
|
298
|
+
it("trims the selection's right", () => {
|
|
299
|
+
const startPosition = 1,
|
|
300
|
+
endPosition = 5,
|
|
301
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
302
|
+
transformedSelection = deleteOperation.transformSelection(selection),
|
|
303
|
+
expectedStartPosition = 1,
|
|
304
|
+
expectedEndPosition = 4,
|
|
305
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
306
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
307
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
308
|
+
|
|
309
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
describe("the selection overlaps it completely", () => {
|
|
314
|
+
it("trims the selections's right by its length", () => {
|
|
315
|
+
const startPosition = 1,
|
|
316
|
+
endPosition = 10,
|
|
317
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
318
|
+
transformedSelection = deleteOperation.transformSelection(selection),
|
|
319
|
+
expectedStartPosition = 1,
|
|
320
|
+
expectedEndPosition = 7,
|
|
321
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
322
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
323
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
324
|
+
|
|
325
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
describe("the selection overlaps its right", () => {
|
|
330
|
+
it("trims the selections's left and moves the selection left by its length", () => {
|
|
331
|
+
const startPosition = 5,
|
|
332
|
+
endPosition = 8,
|
|
333
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
334
|
+
transformedSelection = deleteOperation.transformSelection(selection),
|
|
335
|
+
expectedStartPosition = 4,
|
|
336
|
+
expectedEndPosition = 5,
|
|
337
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
338
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
339
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
340
|
+
|
|
341
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
describe("the selection is completely to its right", () => {
|
|
346
|
+
it("moves the selection left by its length", () => {
|
|
347
|
+
const startPosition = 8,
|
|
348
|
+
endPosition = 10,
|
|
349
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
350
|
+
transformedSelection = deleteOperation.transformSelection(selection),
|
|
351
|
+
expectedStartPosition = 5,
|
|
352
|
+
expectedEndPosition = 7,
|
|
353
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
354
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
355
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
356
|
+
|
|
357
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
describe("the selection is completely overlapped", () => {
|
|
362
|
+
it("moves both the selection's start and end points to its left edge", () => {
|
|
363
|
+
const startPosition = 5,
|
|
364
|
+
endPosition = 6,
|
|
365
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
366
|
+
transformedSelection = deleteOperation.transformSelection(selection),
|
|
367
|
+
expectedStartPosition = 4,
|
|
368
|
+
expectedEndPosition = 4,
|
|
369
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
370
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
371
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
372
|
+
|
|
373
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
|
|
273
378
|
describe("fromJSON, toJSON", () => {
|
|
274
|
-
it("transforms from and to JSON, leaving the operation
|
|
379
|
+
it("transforms from and to JSON, leaving the operation intact", () => {
|
|
275
380
|
const expectedJSON = {
|
|
276
381
|
"type": "delete",
|
|
277
382
|
"content": "bcd",
|
package/test/operation/empty.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { assert } = require("chai"),
|
|
4
4
|
{ arrayUtilities } = require("necessary"),
|
|
5
|
-
{ EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
|
|
5
|
+
{ Selection, EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
|
|
6
6
|
|
|
7
7
|
const { first } = arrayUtilities;
|
|
8
8
|
|
|
@@ -68,8 +68,28 @@ describe("EmptyOperation", () => {
|
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
+
describe("#transformSelection", () => {
|
|
72
|
+
let emptyOperation;
|
|
73
|
+
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
emptyOperation = EmptyOperation.fromNothing();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("leaves the selection intact", () => {
|
|
79
|
+
const startPosition = 3,
|
|
80
|
+
endPosition = 6,
|
|
81
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
82
|
+
transformedSelection = emptyOperation.transformSelection(selection),
|
|
83
|
+
expectedSelection = selection, ///
|
|
84
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
85
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
86
|
+
|
|
87
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
71
91
|
describe("fromJSON, toJSON", () => {
|
|
72
|
-
it("transforms from and to JSON, leaving the operation
|
|
92
|
+
it("transforms from and to JSON, leaving the operation intact", () => {
|
|
73
93
|
const expectedJSON = {
|
|
74
94
|
"type": "empty"
|
|
75
95
|
},
|
package/test/operation/insert.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { assert } = require("chai"),
|
|
4
4
|
{ arrayUtilities } = require("necessary"),
|
|
5
|
-
{ EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
|
|
5
|
+
{ Selection, EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
|
|
6
6
|
|
|
7
7
|
const { first, second } = arrayUtilities;
|
|
8
8
|
|
|
@@ -202,8 +202,97 @@ describe("InsertOperation", () => {
|
|
|
202
202
|
});
|
|
203
203
|
});
|
|
204
204
|
|
|
205
|
+
describe("#transformSelection", () => {
|
|
206
|
+
let insertOperation;
|
|
207
|
+
|
|
208
|
+
beforeEach(() => {
|
|
209
|
+
const content = "JHg",
|
|
210
|
+
position = 4;
|
|
211
|
+
|
|
212
|
+
insertOperation = InsertOperation.fromContentAndPosition(content, position);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
describe("the selection is to its left", () => {
|
|
216
|
+
it("leaves the selection intact", () => {
|
|
217
|
+
const startPosition = 1,
|
|
218
|
+
endPosition = 2,
|
|
219
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
220
|
+
transformedSelection = insertOperation.transformSelection(selection),
|
|
221
|
+
expectedSelection = selection, ///
|
|
222
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
223
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
224
|
+
|
|
225
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
describe("the selection overlaps its left", () => {
|
|
230
|
+
it("moves the selections's right by its length", () => {
|
|
231
|
+
const startPosition = 1,
|
|
232
|
+
endPosition = 5,
|
|
233
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
234
|
+
transformedSelection = insertOperation.transformSelection(selection),
|
|
235
|
+
expectedStartPosition = 1,
|
|
236
|
+
expectedEndPosition = 8,
|
|
237
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
238
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
239
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
240
|
+
|
|
241
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
describe("the selection overlaps it completely, moves the selections's right by its length", () => {
|
|
246
|
+
it("the selection overlaps it completely, moves the selections's right by its length", () => {
|
|
247
|
+
const startPosition = 1,
|
|
248
|
+
endPosition = 10,
|
|
249
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
250
|
+
transformedSelection = insertOperation.transformSelection(selection),
|
|
251
|
+
expectedStartPosition = 1,
|
|
252
|
+
expectedEndPosition = 13,
|
|
253
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
254
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
255
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
256
|
+
|
|
257
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
describe("the selection overlaps its right", () => {
|
|
262
|
+
it("moves the selection right by its length", () => {
|
|
263
|
+
const startPosition = 5,
|
|
264
|
+
endPosition = 8,
|
|
265
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
266
|
+
transformedSelection = insertOperation.transformSelection(selection),
|
|
267
|
+
expectedStartPosition = 8,
|
|
268
|
+
expectedEndPosition = 11,
|
|
269
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
270
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
271
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
272
|
+
|
|
273
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
describe("the selection is completely to its right", () => {
|
|
278
|
+
it("moves the selection right by its length", () => {
|
|
279
|
+
const startPosition = 8,
|
|
280
|
+
endPosition = 10,
|
|
281
|
+
selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
|
|
282
|
+
transformedSelection = insertOperation.transformSelection(selection),
|
|
283
|
+
expectedStartPosition = 11,
|
|
284
|
+
expectedEndPosition = 13,
|
|
285
|
+
expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
|
|
286
|
+
transformedSelectionJSON = transformedSelection.toJSON(),
|
|
287
|
+
expectedSelectionJSON = expectedSelection.toJSON();
|
|
288
|
+
|
|
289
|
+
assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
|
|
205
294
|
describe("fromJSON, toJSON", () => {
|
|
206
|
-
it("transforms from and to JSON, leaving the operation
|
|
295
|
+
it("transforms from and to JSON, leaving the operation intact", () => {
|
|
207
296
|
const expectedJSON = {
|
|
208
297
|
"type": "insert",
|
|
209
298
|
"content": "a",
|