ng-select2-component 11.1.0 → 12.0.0
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/CHANGELOG.md +7 -0
- package/LICENSE.md +1 -1
- package/README.md +5 -4
- package/{esm2020 → esm2022}/lib/select2-const.mjs +47 -47
- package/{esm2020 → esm2022}/lib/select2-hint.component.mjs +11 -11
- package/{esm2020 → esm2022}/lib/select2-interfaces.mjs +1 -1
- package/{esm2020 → esm2022}/lib/select2-label.component.mjs +11 -11
- package/{esm2020 → esm2022}/lib/select2-utils.mjs +279 -279
- package/{esm2020 → esm2022}/lib/select2.component.mjs +900 -900
- package/{esm2020 → esm2022}/lib/select2.module.mjs +23 -23
- package/{esm2020 → esm2022}/ng-select2-component.mjs +4 -4
- package/{esm2020 → esm2022}/public_api.mjs +11 -11
- package/{fesm2020 → fesm2022}/ng-select2-component.mjs +1240 -1240
- package/{fesm2020 → fesm2022}/ng-select2-component.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/select2-const.d.ts +7 -7
- package/lib/select2-hint.component.d.ts +5 -5
- package/lib/select2-interfaces.d.ts +54 -54
- package/lib/select2-label.component.d.ts +5 -5
- package/lib/select2-utils.d.ts +24 -24
- package/lib/select2.component.d.ts +235 -235
- package/lib/select2.module.d.ts +13 -13
- package/package.json +9 -15
- package/public_api.d.ts +8 -8
- package/fesm2015/ng-select2-component.mjs +0 -1272
- package/fesm2015/ng-select2-component.mjs.map +0 -1
|
@@ -1,280 +1,280 @@
|
|
|
1
|
-
import { defaultMinCountForSearch, protectRegexp, unicodePatterns } from './select2-const';
|
|
2
|
-
export class Select2Utils {
|
|
3
|
-
static getOptionByValue(data, value) {
|
|
4
|
-
if (Array.isArray(data)) {
|
|
5
|
-
for (const groupOrOption of data) {
|
|
6
|
-
const options = groupOrOption.options;
|
|
7
|
-
if (options) {
|
|
8
|
-
for (const option of options) {
|
|
9
|
-
if (option.value === value) {
|
|
10
|
-
return option;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
else if (groupOrOption.value === value) {
|
|
15
|
-
return groupOrOption;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
static getOptionsByValue(data, value, multiple) {
|
|
22
|
-
if (multiple) {
|
|
23
|
-
const values = Array.isArray(value) ? value : [];
|
|
24
|
-
const result = [];
|
|
25
|
-
for (const v of values) {
|
|
26
|
-
const option = Select2Utils.getOptionByValue(data, v);
|
|
27
|
-
if (option) {
|
|
28
|
-
result.push(option);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return result;
|
|
32
|
-
}
|
|
33
|
-
return Select2Utils.getOptionByValue(data, value);
|
|
34
|
-
}
|
|
35
|
-
static getFirstAvailableOption(data) {
|
|
36
|
-
if (Array.isArray(data)) {
|
|
37
|
-
for (const groupOrOption of data) {
|
|
38
|
-
const options = groupOrOption.options;
|
|
39
|
-
if (options) {
|
|
40
|
-
for (const option of options) {
|
|
41
|
-
if (!option.disabled) {
|
|
42
|
-
return option.value;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
const option = groupOrOption;
|
|
48
|
-
if (!option.disabled) {
|
|
49
|
-
return option.value;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
static valueIsNotInFilteredData(filteredData, value) {
|
|
57
|
-
if (Select2Utils.isNullOrUndefined(value)) {
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
for (const groupOrOption of filteredData) {
|
|
61
|
-
const options = groupOrOption.options;
|
|
62
|
-
if (options) {
|
|
63
|
-
for (const option of options) {
|
|
64
|
-
if (option.value === value) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else if (groupOrOption.value === value) {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
// eslint-disable-next-line
|
|
76
|
-
static getPreviousOption(filteredData, hoveringValue) {
|
|
77
|
-
let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
|
|
78
|
-
for (let i = filteredData.length - 1; i >= 0; i--) {
|
|
79
|
-
const groupOrOption = filteredData[i];
|
|
80
|
-
const options = groupOrOption.options;
|
|
81
|
-
if (options) {
|
|
82
|
-
for (let j = options.length - 1; j >= 0; j--) {
|
|
83
|
-
const option = options[j];
|
|
84
|
-
if (findIt && !option.disabled && !option.hide) {
|
|
85
|
-
return option;
|
|
86
|
-
}
|
|
87
|
-
if (!findIt) {
|
|
88
|
-
findIt = option.value === hoveringValue;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
const option = groupOrOption;
|
|
94
|
-
if (findIt && !option.disabled && !option.hide) {
|
|
95
|
-
return option;
|
|
96
|
-
}
|
|
97
|
-
if (!findIt) {
|
|
98
|
-
findIt = option.value === hoveringValue;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
// eslint-disable-next-line
|
|
105
|
-
static getNextOption(filteredData, hoveringValue) {
|
|
106
|
-
let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
|
|
107
|
-
for (const groupOrOption of filteredData) {
|
|
108
|
-
const options = groupOrOption.options;
|
|
109
|
-
if (options) {
|
|
110
|
-
for (const option of options) {
|
|
111
|
-
if (findIt) {
|
|
112
|
-
if (!option.disabled && !option.hide) {
|
|
113
|
-
return option;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else if (!findIt) {
|
|
117
|
-
findIt = option.value === hoveringValue;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
const option = groupOrOption;
|
|
123
|
-
if (findIt) {
|
|
124
|
-
if (!option.disabled && !option.hide) {
|
|
125
|
-
return option;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
else if (!findIt) {
|
|
129
|
-
findIt = option.value === hoveringValue;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
static getReduceData(data, maxResults = 0) {
|
|
136
|
-
if (maxResults > 0) {
|
|
137
|
-
let counter = 0;
|
|
138
|
-
const result = [];
|
|
139
|
-
// debugger;
|
|
140
|
-
for (const groupOrOption of data) {
|
|
141
|
-
const options = groupOrOption.options;
|
|
142
|
-
if (options) {
|
|
143
|
-
const group = {
|
|
144
|
-
...groupOrOption,
|
|
145
|
-
options: [],
|
|
146
|
-
};
|
|
147
|
-
result.push(group);
|
|
148
|
-
for (const item of options) {
|
|
149
|
-
group.options.push(item);
|
|
150
|
-
counter++;
|
|
151
|
-
if (counter === maxResults) {
|
|
152
|
-
return { result, reduce: true };
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
result.push(groupOrOption);
|
|
158
|
-
counter++;
|
|
159
|
-
}
|
|
160
|
-
if (counter === maxResults) {
|
|
161
|
-
return { result, reduce: true };
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return { result, reduce: false };
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
return { result: data, reduce: false };
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
static getFilteredData(data, searchText, editPattern) {
|
|
171
|
-
if (searchText) {
|
|
172
|
-
const result = [];
|
|
173
|
-
for (const groupOrOption of data) {
|
|
174
|
-
const options = groupOrOption.options;
|
|
175
|
-
if (options) {
|
|
176
|
-
if (options.some(group => Select2Utils.containSearchText(group.label, searchText, editPattern))) {
|
|
177
|
-
const filteredOptions = options.filter(group => Select2Utils.containSearchText(group.label, searchText, editPattern));
|
|
178
|
-
result.push({
|
|
179
|
-
...groupOrOption,
|
|
180
|
-
options: filteredOptions,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
else if (Select2Utils.containSearchText(groupOrOption.label, searchText, editPattern)) {
|
|
185
|
-
result.push(groupOrOption);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return result;
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
return data;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
static getFilteredSelectedData(data, selectedOptions) {
|
|
195
|
-
const result = [];
|
|
196
|
-
for (const groupOrOption of data) {
|
|
197
|
-
const options = groupOrOption.options;
|
|
198
|
-
if (options) {
|
|
199
|
-
const filteredOptions = options.filter(group => Select2Utils.isSelected(selectedOptions, group, true) === 'false');
|
|
200
|
-
if (filteredOptions.length) {
|
|
201
|
-
result.push({
|
|
202
|
-
...groupOrOption,
|
|
203
|
-
options: filteredOptions,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
else if (Select2Utils.isSelected(selectedOptions, groupOrOption, true) === 'false') {
|
|
208
|
-
result.push(groupOrOption);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return result;
|
|
212
|
-
}
|
|
213
|
-
static isSearchboxHiddex(data, minCountForSearch) {
|
|
214
|
-
if (minCountForSearch === '' ||
|
|
215
|
-
minCountForSearch === undefined ||
|
|
216
|
-
minCountForSearch === null ||
|
|
217
|
-
isNaN(+minCountForSearch)) {
|
|
218
|
-
minCountForSearch = defaultMinCountForSearch;
|
|
219
|
-
}
|
|
220
|
-
const optionCount = Select2Utils.getOptionsCount(data);
|
|
221
|
-
return optionCount < +minCountForSearch;
|
|
222
|
-
}
|
|
223
|
-
static isSelected(options, option, multiple) {
|
|
224
|
-
return multiple
|
|
225
|
-
? options && options.some(op => op.value === option.value)
|
|
226
|
-
? 'true'
|
|
227
|
-
: 'false'
|
|
228
|
-
: options && option.value === options.value
|
|
229
|
-
? 'true'
|
|
230
|
-
: 'false';
|
|
231
|
-
}
|
|
232
|
-
static removeSelection(options, option) {
|
|
233
|
-
for (let i = 0; i < options.length; i++) {
|
|
234
|
-
if (options[i].value === option.value) {
|
|
235
|
-
options.splice(i, 1);
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
static getOptionsCount(data) {
|
|
241
|
-
let count = 0;
|
|
242
|
-
if (Array.isArray(data)) {
|
|
243
|
-
for (const groupOrOption of data) {
|
|
244
|
-
const options = groupOrOption.options;
|
|
245
|
-
if (options) {
|
|
246
|
-
count += options.length;
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
count++;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
return count;
|
|
254
|
-
}
|
|
255
|
-
static isNullOrUndefined(value) {
|
|
256
|
-
return value === null || value === undefined;
|
|
257
|
-
}
|
|
258
|
-
static containSearchText(label, searchText, editPattern) {
|
|
259
|
-
return searchText
|
|
260
|
-
? Select2Utils.formatSansUnicode(label).match(new RegExp(Select2Utils.formatPattern(searchText, editPattern), 'i')) !== null
|
|
261
|
-
: true;
|
|
262
|
-
}
|
|
263
|
-
static protectPattern(str) {
|
|
264
|
-
return str.replace(protectRegexp, '\\$&');
|
|
265
|
-
}
|
|
266
|
-
static formatSansUnicode(str) {
|
|
267
|
-
for (const unicodePattern of unicodePatterns) {
|
|
268
|
-
str = str.replace(unicodePattern.s, unicodePattern.l);
|
|
269
|
-
}
|
|
270
|
-
return str;
|
|
271
|
-
}
|
|
272
|
-
static formatPattern(str, editPattern) {
|
|
273
|
-
str = Select2Utils.formatSansUnicode(Select2Utils.protectPattern(str));
|
|
274
|
-
if (editPattern && typeof editPattern === 'function') {
|
|
275
|
-
str = editPattern(str);
|
|
276
|
-
}
|
|
277
|
-
return str;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
1
|
+
import { defaultMinCountForSearch, protectRegexp, unicodePatterns } from './select2-const';
|
|
2
|
+
export class Select2Utils {
|
|
3
|
+
static getOptionByValue(data, value) {
|
|
4
|
+
if (Array.isArray(data)) {
|
|
5
|
+
for (const groupOrOption of data) {
|
|
6
|
+
const options = groupOrOption.options;
|
|
7
|
+
if (options) {
|
|
8
|
+
for (const option of options) {
|
|
9
|
+
if (option.value === value) {
|
|
10
|
+
return option;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (groupOrOption.value === value) {
|
|
15
|
+
return groupOrOption;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
static getOptionsByValue(data, value, multiple) {
|
|
22
|
+
if (multiple) {
|
|
23
|
+
const values = Array.isArray(value) ? value : [];
|
|
24
|
+
const result = [];
|
|
25
|
+
for (const v of values) {
|
|
26
|
+
const option = Select2Utils.getOptionByValue(data, v);
|
|
27
|
+
if (option) {
|
|
28
|
+
result.push(option);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
return Select2Utils.getOptionByValue(data, value);
|
|
34
|
+
}
|
|
35
|
+
static getFirstAvailableOption(data) {
|
|
36
|
+
if (Array.isArray(data)) {
|
|
37
|
+
for (const groupOrOption of data) {
|
|
38
|
+
const options = groupOrOption.options;
|
|
39
|
+
if (options) {
|
|
40
|
+
for (const option of options) {
|
|
41
|
+
if (!option.disabled) {
|
|
42
|
+
return option.value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const option = groupOrOption;
|
|
48
|
+
if (!option.disabled) {
|
|
49
|
+
return option.value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
static valueIsNotInFilteredData(filteredData, value) {
|
|
57
|
+
if (Select2Utils.isNullOrUndefined(value)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
for (const groupOrOption of filteredData) {
|
|
61
|
+
const options = groupOrOption.options;
|
|
62
|
+
if (options) {
|
|
63
|
+
for (const option of options) {
|
|
64
|
+
if (option.value === value) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (groupOrOption.value === value) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
// eslint-disable-next-line
|
|
76
|
+
static getPreviousOption(filteredData, hoveringValue) {
|
|
77
|
+
let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
|
|
78
|
+
for (let i = filteredData.length - 1; i >= 0; i--) {
|
|
79
|
+
const groupOrOption = filteredData[i];
|
|
80
|
+
const options = groupOrOption.options;
|
|
81
|
+
if (options) {
|
|
82
|
+
for (let j = options.length - 1; j >= 0; j--) {
|
|
83
|
+
const option = options[j];
|
|
84
|
+
if (findIt && !option.disabled && !option.hide) {
|
|
85
|
+
return option;
|
|
86
|
+
}
|
|
87
|
+
if (!findIt) {
|
|
88
|
+
findIt = option.value === hoveringValue;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const option = groupOrOption;
|
|
94
|
+
if (findIt && !option.disabled && !option.hide) {
|
|
95
|
+
return option;
|
|
96
|
+
}
|
|
97
|
+
if (!findIt) {
|
|
98
|
+
findIt = option.value === hoveringValue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
// eslint-disable-next-line
|
|
105
|
+
static getNextOption(filteredData, hoveringValue) {
|
|
106
|
+
let findIt = Select2Utils.isNullOrUndefined(hoveringValue);
|
|
107
|
+
for (const groupOrOption of filteredData) {
|
|
108
|
+
const options = groupOrOption.options;
|
|
109
|
+
if (options) {
|
|
110
|
+
for (const option of options) {
|
|
111
|
+
if (findIt) {
|
|
112
|
+
if (!option.disabled && !option.hide) {
|
|
113
|
+
return option;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if (!findIt) {
|
|
117
|
+
findIt = option.value === hoveringValue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const option = groupOrOption;
|
|
123
|
+
if (findIt) {
|
|
124
|
+
if (!option.disabled && !option.hide) {
|
|
125
|
+
return option;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (!findIt) {
|
|
129
|
+
findIt = option.value === hoveringValue;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
static getReduceData(data, maxResults = 0) {
|
|
136
|
+
if (maxResults > 0) {
|
|
137
|
+
let counter = 0;
|
|
138
|
+
const result = [];
|
|
139
|
+
// debugger;
|
|
140
|
+
for (const groupOrOption of data) {
|
|
141
|
+
const options = groupOrOption.options;
|
|
142
|
+
if (options) {
|
|
143
|
+
const group = {
|
|
144
|
+
...groupOrOption,
|
|
145
|
+
options: [],
|
|
146
|
+
};
|
|
147
|
+
result.push(group);
|
|
148
|
+
for (const item of options) {
|
|
149
|
+
group.options.push(item);
|
|
150
|
+
counter++;
|
|
151
|
+
if (counter === maxResults) {
|
|
152
|
+
return { result, reduce: true };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
result.push(groupOrOption);
|
|
158
|
+
counter++;
|
|
159
|
+
}
|
|
160
|
+
if (counter === maxResults) {
|
|
161
|
+
return { result, reduce: true };
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return { result, reduce: false };
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
return { result: data, reduce: false };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
static getFilteredData(data, searchText, editPattern) {
|
|
171
|
+
if (searchText) {
|
|
172
|
+
const result = [];
|
|
173
|
+
for (const groupOrOption of data) {
|
|
174
|
+
const options = groupOrOption.options;
|
|
175
|
+
if (options) {
|
|
176
|
+
if (options.some(group => Select2Utils.containSearchText(group.label, searchText, editPattern))) {
|
|
177
|
+
const filteredOptions = options.filter(group => Select2Utils.containSearchText(group.label, searchText, editPattern));
|
|
178
|
+
result.push({
|
|
179
|
+
...groupOrOption,
|
|
180
|
+
options: filteredOptions,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if (Select2Utils.containSearchText(groupOrOption.label, searchText, editPattern)) {
|
|
185
|
+
result.push(groupOrOption);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
return data;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
static getFilteredSelectedData(data, selectedOptions) {
|
|
195
|
+
const result = [];
|
|
196
|
+
for (const groupOrOption of data) {
|
|
197
|
+
const options = groupOrOption.options;
|
|
198
|
+
if (options) {
|
|
199
|
+
const filteredOptions = options.filter(group => Select2Utils.isSelected(selectedOptions, group, true) === 'false');
|
|
200
|
+
if (filteredOptions.length) {
|
|
201
|
+
result.push({
|
|
202
|
+
...groupOrOption,
|
|
203
|
+
options: filteredOptions,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else if (Select2Utils.isSelected(selectedOptions, groupOrOption, true) === 'false') {
|
|
208
|
+
result.push(groupOrOption);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
static isSearchboxHiddex(data, minCountForSearch) {
|
|
214
|
+
if (minCountForSearch === '' ||
|
|
215
|
+
minCountForSearch === undefined ||
|
|
216
|
+
minCountForSearch === null ||
|
|
217
|
+
isNaN(+minCountForSearch)) {
|
|
218
|
+
minCountForSearch = defaultMinCountForSearch;
|
|
219
|
+
}
|
|
220
|
+
const optionCount = Select2Utils.getOptionsCount(data);
|
|
221
|
+
return optionCount < +minCountForSearch;
|
|
222
|
+
}
|
|
223
|
+
static isSelected(options, option, multiple) {
|
|
224
|
+
return multiple
|
|
225
|
+
? options && options.some(op => op.value === option.value)
|
|
226
|
+
? 'true'
|
|
227
|
+
: 'false'
|
|
228
|
+
: options && option.value === options.value
|
|
229
|
+
? 'true'
|
|
230
|
+
: 'false';
|
|
231
|
+
}
|
|
232
|
+
static removeSelection(options, option) {
|
|
233
|
+
for (let i = 0; i < options.length; i++) {
|
|
234
|
+
if (options[i].value === option.value) {
|
|
235
|
+
options.splice(i, 1);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
static getOptionsCount(data) {
|
|
241
|
+
let count = 0;
|
|
242
|
+
if (Array.isArray(data)) {
|
|
243
|
+
for (const groupOrOption of data) {
|
|
244
|
+
const options = groupOrOption.options;
|
|
245
|
+
if (options) {
|
|
246
|
+
count += options.length;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
count++;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return count;
|
|
254
|
+
}
|
|
255
|
+
static isNullOrUndefined(value) {
|
|
256
|
+
return value === null || value === undefined;
|
|
257
|
+
}
|
|
258
|
+
static containSearchText(label, searchText, editPattern) {
|
|
259
|
+
return searchText
|
|
260
|
+
? Select2Utils.formatSansUnicode(label).match(new RegExp(Select2Utils.formatPattern(searchText, editPattern), 'i')) !== null
|
|
261
|
+
: true;
|
|
262
|
+
}
|
|
263
|
+
static protectPattern(str) {
|
|
264
|
+
return str.replace(protectRegexp, '\\$&');
|
|
265
|
+
}
|
|
266
|
+
static formatSansUnicode(str) {
|
|
267
|
+
for (const unicodePattern of unicodePatterns) {
|
|
268
|
+
str = str.replace(unicodePattern.s, unicodePattern.l);
|
|
269
|
+
}
|
|
270
|
+
return str;
|
|
271
|
+
}
|
|
272
|
+
static formatPattern(str, editPattern) {
|
|
273
|
+
str = Select2Utils.formatSansUnicode(Select2Utils.protectPattern(str));
|
|
274
|
+
if (editPattern && typeof editPattern === 'function') {
|
|
275
|
+
str = editPattern(str);
|
|
276
|
+
}
|
|
277
|
+
return str;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
280
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy9saWIvc2VsZWN0Mi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNGLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDOUIsTUFBTSxPQUFPLEdBQUksYUFBOEIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hELElBQUksT0FBTyxFQUFFO29CQUNULEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO3dCQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUN4QixPQUFPLE1BQU0sQ0FBQzt5QkFDakI7cUJBQ0o7aUJBQ0o7cUJBQU0sSUFBSyxhQUErQixDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7b0JBQ3pELE9BQU8sYUFBOEIsQ0FBQztpQkFDekM7YUFDSjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FDcEIsSUFBaUIsRUFDakIsS0FBNEMsRUFDNUMsUUFBb0M7UUFFcEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxNQUFNLEdBQW9CLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sQ0FBQyxJQUFJ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IHByb3RlY3RSZWdleHAsIHVuaWNvZGVQYXR0ZXJucyB9IGZyb20gJy4vc2VsZWN0Mi1jb25zdCc7XG5pbXBvcnQgeyBTZWxlY3QyRGF0YSwgU2VsZWN0Mkdyb3VwLCBTZWxlY3QyT3B0aW9uLCBTZWxlY3QyVXBkYXRlVmFsdWUsIFNlbGVjdDJWYWx1ZSB9IGZyb20gJy4vc2VsZWN0Mi1pbnRlcmZhY2VzJztcblxuXG5leHBvcnQgY2xhc3MgU2VsZWN0MlV0aWxzIHtcbiAgICBzdGF0aWMgZ2V0T3B0aW9uQnlWYWx1ZShkYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0T3B0aW9uc0J5VmFsdWUoXG4gICAgICAgIGRhdGE6IFNlbGVjdDJEYXRhLFxuICAgICAgICB2YWx1ZTogU2VsZWN0MlVwZGF0ZVZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogU2VsZWN0MlZhbHVlW10gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJPcHRpb25bXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25CeVZhbHVlKGRhdGEsIHYpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uQnlWYWx1ZShkYXRhLCB2YWx1ZSBhcyBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Rmlyc3RBdmFpbGFibGVPcHRpb24oZGF0YTogU2VsZWN0MkRhdGEpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyB2YWx1ZUlzTm90SW5GaWx0ZXJlZERhdGEoZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbikudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHN0YXRpYyBnZXRQcmV2aW91c09wdGlvbihmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhLCBob3ZlcmluZ1ZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBmaW5kSXQgPSBTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBmaWx0ZXJlZERhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwT3JPcHRpb24gPSBmaWx0ZXJlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gb3B0aW9ucy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0ICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0ICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHN0YXRpYyBnZXROZXh0T3B0aW9uKGZpbHRlcmVkRGF0YTogU2VsZWN0MkRhdGEsIGhvdmVyaW5nVmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGZpbmRJdCA9IFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZChob3ZlcmluZ1ZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGZpbHRlcmVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlZHVjZURhdGEoZGF0YTogU2VsZWN0MkRhdGEsIG1heFJlc3VsdHM6IG51bWJlciA9IDApOiB7IHJlc3VsdDogU2VsZWN0MkRhdGE7IHJlZHVjZTogYm9vbGVhbiB9IHtcbiAgICAgICAgaWYgKG1heFJlc3VsdHMgPiAwKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBPck9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cC5vcHRpb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCwgcmVkdWNlOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cE9yT3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHQsIHJlZHVjZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCwgcmVkdWNlOiBmYWxzZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBkYXRhLCByZWR1Y2U6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmlsdGVyZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgZWRpdFBhdHRlcm4/OiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGlmIChzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc29tZShncm91cCA9PiBTZWxlY3QyVXRpbHMuY29udGFpblNlYXJjaFRleHQoZ3JvdXAubGFiZWwsIHNlYXJjaFRleHQsIGVkaXRQYXR0ZXJuKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKGdyb3VwID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0MlV0aWxzLmNvbnRhaW5TZWFyY2hUZXh0KGdyb3VwLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybiksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cE9yT3B0aW9uLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZpbHRlcmVkU2VsZWN0ZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0MkRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBncm91cCA9PiBTZWxlY3QyVXRpbHMuaXNTZWxlY3RlZChzZWxlY3RlZE9wdGlvbnMsIGdyb3VwLCB0cnVlKSA9PT0gJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU2VsZWN0MlV0aWxzLmlzU2VsZWN0ZWQoc2VsZWN0ZWRPcHRpb25zLCBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24sIHRydWUpID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTZWFyY2hib3hIaWRkZXgoZGF0YTogU2VsZWN0MkRhdGEsIG1pbkNvdW50Rm9yU2VhcmNoPzogbnVtYmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSAnJyB8fFxuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlzTmFOKCttaW5Db3VudEZvclNlYXJjaClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaW5Db3VudEZvclNlYXJjaCA9IGRlZmF1bHRNaW5Db3VudEZvclNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25Db3VudCA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25zQ291bnQoZGF0YSk7XG4gICAgICAgIHJldHVybiBvcHRpb25Db3VudCA8ICttaW5Db3VudEZvclNlYXJjaDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTZWxlY3RlZChcbiAgICAgICAgb3B0aW9uczogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwsXG4gICAgICAgIG9wdGlvbjogU2VsZWN0Mk9wdGlvbixcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGVcbiAgICAgICAgICAgID8gb3B0aW9ucyAmJiAob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pLnNvbWUob3AgPT4gb3AudmFsdWUgPT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogJ2ZhbHNlJ1xuICAgICAgICAgICAgOiBvcHRpb25zICYmIG9wdGlvbi52YWx1ZSA9PT0gKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbikudmFsdWVcbiAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZVNlbGVjdGlvbihvcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCwgb3B0aW9uOiBTZWxlY3QyT3B0aW9uKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSlbaV0udmFsdWUgPT09IG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldE9wdGlvbnNDb3VudChkYXRhOiBTZWxlY3QyRGF0YSkge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IG9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbnRhaW5TZWFyY2hUZXh0KFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBzZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsLFxuICAgICAgICBlZGl0UGF0dGVybjogKChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaFRleHRcbiAgICAgICAgICAgID8gU2VsZWN0MlV0aWxzLmZvcm1hdFNhbnNVbmljb2RlKGxhYmVsKS5tYXRjaChcbiAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoU2VsZWN0MlV0aWxzLmZvcm1hdFBhdHRlcm4oc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pLCAnaScpLFxuICAgICAgICAgICAgICApICE9PSBudWxsXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvdGVjdFBhdHRlcm4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocHJvdGVjdFJlZ2V4cCwgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvcm1hdFNhbnNVbmljb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgZm9yIChjb25zdCB1bmljb2RlUGF0dGVybiBvZiB1bmljb2RlUGF0dGVybnMpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHVuaWNvZGVQYXR0ZXJuLnMsIHVuaWNvZGVQYXR0ZXJuLmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0UGF0dGVybihzdHI6IHN0cmluZywgZWRpdFBhdHRlcm46ICgoc3RyOiBzdHJpbmcpID0+IHN0cmluZykgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgICAgICBzdHIgPSBTZWxlY3QyVXRpbHMuZm9ybWF0U2Fuc1VuaWNvZGUoU2VsZWN0MlV0aWxzLnByb3RlY3RQYXR0ZXJuKHN0cikpO1xuXG4gICAgICAgIGlmIChlZGl0UGF0dGVybiAmJiB0eXBlb2YgZWRpdFBhdHRlcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0ciA9IGVkaXRQYXR0ZXJuKHN0cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iXX0=
|