easy-richtextarea 4.0.34 → 4.0.36

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