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.
- package/example.js +93 -1563
- package/lib/browser.js +1 -37
- package/lib/main.js +4 -45
- package/lib/mixins/event.js +11 -10
- package/lib/richTextarea.js +31 -156
- package/lib/selection.js +7 -146
- package/package.json +1 -3
- package/src/browser.js +0 -11
- package/src/main.js +0 -12
- package/src/mixins/event.js +3 -4
- package/src/richTextarea.js +22 -239
- package/src/selection.js +4 -154
- package/lib/constants.js +0 -22
- package/lib/contentCompare.js +0 -34
- package/lib/eventTypes.js +0 -49
- package/lib/keyCodes.js +0 -13
- package/lib/operation/delete.js +0 -290
- package/lib/operation/empty.js +0 -116
- package/lib/operation/insert.js +0 -245
- package/lib/operations/fromJSON.js +0 -40
- package/lib/operations/generate.js +0 -42
- package/lib/operations/toJSON.js +0 -17
- package/lib/transform/content.js +0 -19
- package/lib/transform/operations.js +0 -31
- package/lib/transform/selection.js +0 -19
- package/lib/types.js +0 -34
- package/lib/undoBuffer.js +0 -145
- package/src/constants.js +0 -4
- package/src/contentCompare.js +0 -34
- package/src/eventTypes.js +0 -15
- package/src/keyCodes.js +0 -3
- package/src/operation/delete.js +0 -285
- package/src/operation/empty.js +0 -76
- package/src/operation/insert.js +0 -221
- package/src/operations/fromJSON.js +0 -34
- package/src/operations/generate.js +0 -46
- package/src/operations/toJSON.js +0 -5
- package/src/transform/content.js +0 -11
- package/src/transform/operations.js +0 -57
- package/src/transform/selection.js +0 -11
- package/src/types.js +0 -11
- package/src/undoBuffer.js +0 -119
- package/test/content/transform.js +0 -57
- package/test/helpers.js +0 -91
- package/test/operation/delete.js +0 -390
- package/test/operation/empty.js +0 -101
- package/test/operation/insert.js +0 -306
- package/test/operations/generate.js +0 -78
- 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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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==
|
package/lib/contentCompare.js
DELETED
|
@@ -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
|
package/lib/operation/delete.js
DELETED
|
@@ -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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
|