fantasy-ngzorro 2.2.3 → 2.2.5
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/README.md +17 -0
- package/bundles/fantasy-ngzorro.umd.js +4865 -3973
- package/bundles/fantasy-ngzorro.umd.js.map +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js +2 -2
- package/bundles/fantasy-ngzorro.umd.min.js.map +1 -1
- package/esm2015/fantasy-ngzorro.js +5 -5
- package/esm2015/hd-filter/hd-filter-scheme.js +57 -0
- package/esm2015/hd-filter/hd-filter.component.js +731 -32
- package/esm2015/hd-filter/hd-filter.module.js +4 -2
- package/esm2015/index.js +2 -2
- package/esm2015/public-api.js +2 -1
- package/esm5/fantasy-ngzorro.js +5 -5
- package/esm5/hd-filter/hd-filter-scheme.js +81 -0
- package/esm5/hd-filter/hd-filter.component.js +858 -37
- package/esm5/hd-filter/hd-filter.module.js +4 -2
- package/esm5/index.js +2 -2
- package/esm5/public-api.js +2 -1
- package/fantasy-ngzorro.d.ts +3 -3
- package/fantasy-ngzorro.metadata.json +1 -1
- package/fesm2015/fantasy-ngzorro.js +4347 -3596
- package/fesm2015/fantasy-ngzorro.js.map +1 -1
- package/fesm5/fantasy-ngzorro.js +4860 -3972
- package/fesm5/fantasy-ngzorro.js.map +1 -1
- package/hd-filter/hd-filter-scheme.d.ts +22 -0
- package/hd-filter/hd-filter.component.d.ts +59 -10
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
|
@@ -3,22 +3,46 @@
|
|
|
3
3
|
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
4
|
*/
|
|
5
5
|
import * as tslib_1 from "tslib";
|
|
6
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
6
|
+
import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
|
|
7
7
|
import { FormBuilder } from '@angular/forms';
|
|
8
|
+
import { FilterListType } from './hd-filter.service';
|
|
9
|
+
import { FormListType } from '../hd-form/hd-form.service';
|
|
8
10
|
import { getCascaderMenuClassName, getCascaderMenuStyle, getCascaderShowSearch, } from '../utils/cascader.util';
|
|
9
11
|
import { Subject } from 'rxjs';
|
|
10
12
|
import { debounceTime } from 'rxjs/operators';
|
|
13
|
+
import { InputBoolean } from 'ng-zorro-antd';
|
|
14
|
+
import { HD_FILTER_DEFAULT_SCHEME_NAME, HD_FILTER_SCHEME_STORE, HdFilterSchemeStore } from './hd-filter-scheme';
|
|
11
15
|
var HdFilterComponent = /** @class */ (function () {
|
|
12
|
-
function HdFilterComponent(fb) {
|
|
16
|
+
function HdFilterComponent(fb, schemeStore) {
|
|
13
17
|
var _this = this;
|
|
14
18
|
this.fb = fb;
|
|
19
|
+
this.schemeStore = schemeStore;
|
|
20
|
+
/**
|
|
21
|
+
* 是否启用筛选组(默认关闭)
|
|
22
|
+
*/
|
|
23
|
+
this.enableFilterScheme = false;
|
|
15
24
|
this.searchEvent = new EventEmitter();
|
|
16
25
|
this.resetEvent = new EventEmitter();
|
|
17
26
|
this.isShowMore = true;
|
|
18
|
-
// 对filterList取模运算
|
|
19
27
|
this.filterListModular = 0;
|
|
20
28
|
this.searchSubject = new Subject();
|
|
21
|
-
this.debounceTimeout = 0;
|
|
29
|
+
this.debounceTimeout = 0;
|
|
30
|
+
/**
|
|
31
|
+
* 页面配置的初始值(虚拟「默认条件」)
|
|
32
|
+
*/
|
|
33
|
+
this.defaultFilterValues = {};
|
|
34
|
+
this.defaultValuesCaptured = false;
|
|
35
|
+
this.schemeList = [];
|
|
36
|
+
this.currentScheme = null;
|
|
37
|
+
this.currentSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;
|
|
38
|
+
this.schemeLoading = false;
|
|
39
|
+
this.schemeSaving = false;
|
|
40
|
+
this.switchModalVisible = false;
|
|
41
|
+
this.switchFormList = [];
|
|
42
|
+
this.saveAsModalVisible = false;
|
|
43
|
+
this.saveAsFormList = [];
|
|
44
|
+
this.defaultSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;
|
|
45
|
+
this.switchDefaultKey = '__DEFAULT__';
|
|
22
46
|
this.getCascaderShowSearch = getCascaderShowSearch;
|
|
23
47
|
this.getCascaderMenuClassName = getCascaderMenuClassName;
|
|
24
48
|
this.getCascaderMenuStyle = getCascaderMenuStyle;
|
|
@@ -39,16 +63,51 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
39
63
|
*/
|
|
40
64
|
function () {
|
|
41
65
|
this.init();
|
|
66
|
+
this.tryLoadSchemes(true);
|
|
42
67
|
};
|
|
43
68
|
/**
|
|
69
|
+
* @param {?} changes
|
|
44
70
|
* @return {?}
|
|
45
71
|
*/
|
|
46
72
|
HdFilterComponent.prototype.ngOnChanges = /**
|
|
73
|
+
* @param {?} changes
|
|
74
|
+
* @return {?}
|
|
75
|
+
*/
|
|
76
|
+
function (changes) {
|
|
77
|
+
if (changes['filterList']) {
|
|
78
|
+
this.init();
|
|
79
|
+
}
|
|
80
|
+
if (changes['enableFilterScheme'] || changes['filterSchemeKey']) {
|
|
81
|
+
this.tryLoadSchemes(true);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* @return {?}
|
|
86
|
+
*/
|
|
87
|
+
HdFilterComponent.prototype.ngOnDestroy = /**
|
|
47
88
|
* @return {?}
|
|
48
89
|
*/
|
|
49
90
|
function () {
|
|
50
|
-
this.
|
|
91
|
+
if (this.searchSubscription) {
|
|
92
|
+
this.searchSubscription.unsubscribe();
|
|
93
|
+
}
|
|
94
|
+
if (this.schemeLoadSub) {
|
|
95
|
+
this.schemeLoadSub.unsubscribe();
|
|
96
|
+
}
|
|
97
|
+
if (this.schemeActionSub) {
|
|
98
|
+
this.schemeActionSub.unsubscribe();
|
|
99
|
+
}
|
|
51
100
|
};
|
|
101
|
+
Object.defineProperty(HdFilterComponent.prototype, "canUseScheme", {
|
|
102
|
+
get: /**
|
|
103
|
+
* @return {?}
|
|
104
|
+
*/
|
|
105
|
+
function () {
|
|
106
|
+
return !!(this.enableFilterScheme && this.filterSchemeKey && this.schemeStore);
|
|
107
|
+
},
|
|
108
|
+
enumerable: true,
|
|
109
|
+
configurable: true
|
|
110
|
+
});
|
|
52
111
|
/**
|
|
53
112
|
* @private
|
|
54
113
|
* @return {?}
|
|
@@ -60,12 +119,13 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
60
119
|
function () {
|
|
61
120
|
var _this = this;
|
|
62
121
|
this.isShowMore = true;
|
|
63
|
-
// 异常捕获
|
|
64
122
|
if (!this.checkList(this.filterList)) {
|
|
65
123
|
throw 'filter组件数据格式不规范';
|
|
66
124
|
}
|
|
125
|
+
if (!this.filterList) {
|
|
126
|
+
this.filterList = [];
|
|
127
|
+
}
|
|
67
128
|
this.filterListModular = this.filterList.length % 4;
|
|
68
|
-
// 首先根据定义的组件数组 去初始化表单
|
|
69
129
|
/** @type {?} */
|
|
70
130
|
var formGroupList = {};
|
|
71
131
|
this.filterList.forEach((/**
|
|
@@ -75,10 +135,13 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
75
135
|
*/
|
|
76
136
|
function (item, index) {
|
|
77
137
|
formGroupList[item.name] = _this.fb.control(item.value, []);
|
|
78
|
-
// 初始化控件显影
|
|
79
138
|
item.show = index < 7;
|
|
80
139
|
}));
|
|
81
140
|
this.validateFilterForm = this.fb.group(formGroupList);
|
|
141
|
+
if (!this.defaultValuesCaptured) {
|
|
142
|
+
this.defaultFilterValues = this.clonePlain(this.getFilterData());
|
|
143
|
+
this.defaultValuesCaptured = true;
|
|
144
|
+
}
|
|
82
145
|
this.filterList.forEach((/**
|
|
83
146
|
* @param {?} item
|
|
84
147
|
* @return {?}
|
|
@@ -121,13 +184,10 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
121
184
|
function (fn, event, onSearchEventDebounceTime, selectOption) {
|
|
122
185
|
var _this = this;
|
|
123
186
|
if (onSearchEventDebounceTime) {
|
|
124
|
-
// 更新防抖时间
|
|
125
187
|
this.debounceTimeout = onSearchEventDebounceTime;
|
|
126
|
-
// 取消之前的订阅
|
|
127
188
|
if (this.searchSubscription) {
|
|
128
189
|
this.searchSubscription.unsubscribe();
|
|
129
190
|
}
|
|
130
|
-
// 创建新的订阅
|
|
131
191
|
this.searchSubscription = this.searchSubject.pipe(debounceTime(this.debounceTimeout)).subscribe((/**
|
|
132
192
|
* @param {?} __0
|
|
133
193
|
* @return {?}
|
|
@@ -136,7 +196,6 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
136
196
|
var fn = _a.fn, event = _a.event, selectOption = _a.selectOption;
|
|
137
197
|
return _this.triggerEvent(fn, event, selectOption);
|
|
138
198
|
}));
|
|
139
|
-
// 发送事件
|
|
140
199
|
this.searchSubject.next({ fn: fn, event: event, selectOption: selectOption });
|
|
141
200
|
}
|
|
142
201
|
else {
|
|
@@ -173,7 +232,6 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
173
232
|
* @return {?}
|
|
174
233
|
*/
|
|
175
234
|
function () {
|
|
176
|
-
// 特殊处理下等于4个选项的情况
|
|
177
235
|
if (this.filterList.length === 4) {
|
|
178
236
|
return 18;
|
|
179
237
|
}
|
|
@@ -200,17 +258,11 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
200
258
|
* @return {?}
|
|
201
259
|
*/
|
|
202
260
|
function (item) {
|
|
203
|
-
// 校验单项选择器
|
|
204
|
-
// if (item.type === FilterListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {
|
|
205
|
-
// throw 'filter组件数据格式不规范,存在单项选择器没有传入选项!'
|
|
206
|
-
// }
|
|
207
261
|
nameList.push(item.name);
|
|
208
262
|
}));
|
|
209
|
-
// 校验name是否重复
|
|
210
263
|
if (tslib_1.__spread(new Set(nameList)).length !== list.length) {
|
|
211
264
|
throw 'filter组件数据格式不规范,存在重复name值!';
|
|
212
265
|
}
|
|
213
|
-
// ...more check
|
|
214
266
|
return true;
|
|
215
267
|
};
|
|
216
268
|
/**
|
|
@@ -230,25 +282,17 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
230
282
|
*/
|
|
231
283
|
function () {
|
|
232
284
|
this.resetFilterFormWithValue();
|
|
233
|
-
// this.validateFilterForm.reset();
|
|
234
285
|
if (this.resetEvent.observers.length > 0) {
|
|
235
|
-
// 如果有父组件绑定了 resetEvent 的处理器
|
|
236
286
|
this.resetEvent.emit(this.validateFilterForm.getRawValue());
|
|
237
287
|
}
|
|
238
288
|
else {
|
|
239
|
-
// 如果没有绑定处理器,则触发 searchEvent
|
|
240
289
|
this.searchEvent.emit(this.validateFilterForm.getRawValue());
|
|
241
290
|
}
|
|
242
291
|
};
|
|
243
292
|
/**
|
|
244
|
-
* 带初始值重置表单
|
|
245
|
-
*/
|
|
246
|
-
/**
|
|
247
|
-
* 带初始值重置表单
|
|
248
293
|
* @return {?}
|
|
249
294
|
*/
|
|
250
295
|
HdFilterComponent.prototype.resetFilterFormWithValue = /**
|
|
251
|
-
* 带初始值重置表单
|
|
252
296
|
* @return {?}
|
|
253
297
|
*/
|
|
254
298
|
function () {
|
|
@@ -261,7 +305,6 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
261
305
|
function (item) {
|
|
262
306
|
resetValue[item.name] = item.value;
|
|
263
307
|
}));
|
|
264
|
-
// 重置表单值(会触发valueChanges事件)
|
|
265
308
|
this.validateFilterForm.patchValue(resetValue);
|
|
266
309
|
};
|
|
267
310
|
/**
|
|
@@ -306,15 +349,10 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
306
349
|
this.validateFilterForm.patchValue(patchObject);
|
|
307
350
|
};
|
|
308
351
|
/**
|
|
309
|
-
* 是否允许清空:优先 Filter.hdAllowClear,其次 selectOption.hdAllowClear,默认 true
|
|
310
|
-
*/
|
|
311
|
-
/**
|
|
312
|
-
* 是否允许清空:优先 Filter.hdAllowClear,其次 selectOption.hdAllowClear,默认 true
|
|
313
352
|
* @param {?} item
|
|
314
353
|
* @return {?}
|
|
315
354
|
*/
|
|
316
355
|
HdFilterComponent.prototype.isAllowClear = /**
|
|
317
|
-
* 是否允许清空:优先 Filter.hdAllowClear,其次 selectOption.hdAllowClear,默认 true
|
|
318
356
|
* @param {?} item
|
|
319
357
|
* @return {?}
|
|
320
358
|
*/
|
|
@@ -330,28 +368,756 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
330
368
|
}
|
|
331
369
|
return true;
|
|
332
370
|
};
|
|
371
|
+
// ---------- 筛选组 ----------
|
|
372
|
+
// ---------- 筛选组 ----------
|
|
373
|
+
/**
|
|
374
|
+
* @private
|
|
375
|
+
* @param {?} applyDefault
|
|
376
|
+
* @return {?}
|
|
377
|
+
*/
|
|
378
|
+
HdFilterComponent.prototype.tryLoadSchemes =
|
|
379
|
+
// ---------- 筛选组 ----------
|
|
380
|
+
/**
|
|
381
|
+
* @private
|
|
382
|
+
* @param {?} applyDefault
|
|
383
|
+
* @return {?}
|
|
384
|
+
*/
|
|
385
|
+
function (applyDefault) {
|
|
386
|
+
var _this = this;
|
|
387
|
+
if (!this.canUseScheme) {
|
|
388
|
+
this.schemeList = [];
|
|
389
|
+
this.currentScheme = null;
|
|
390
|
+
this.currentSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
this.schemeLoading = true;
|
|
394
|
+
if (this.schemeLoadSub) {
|
|
395
|
+
this.schemeLoadSub.unsubscribe();
|
|
396
|
+
}
|
|
397
|
+
this.schemeLoadSub = this.schemeStore.queryByFilterKey(this.filterSchemeKey).subscribe((/**
|
|
398
|
+
* @param {?} list
|
|
399
|
+
* @return {?}
|
|
400
|
+
*/
|
|
401
|
+
function (list) {
|
|
402
|
+
_this.schemeLoading = false;
|
|
403
|
+
_this.schemeList = list || [];
|
|
404
|
+
if (applyDefault) {
|
|
405
|
+
_this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);
|
|
406
|
+
}
|
|
407
|
+
else if (_this.currentScheme && _this.currentScheme.uuid) {
|
|
408
|
+
/** @type {?} */
|
|
409
|
+
var found = _this.schemeList.find((/**
|
|
410
|
+
* @param {?} s
|
|
411
|
+
* @return {?}
|
|
412
|
+
*/
|
|
413
|
+
function (s) { return s.uuid === _this.currentScheme.uuid; }));
|
|
414
|
+
_this.currentScheme = found || null;
|
|
415
|
+
_this.currentSchemeName = found ? found.templateName : HD_FILTER_DEFAULT_SCHEME_NAME;
|
|
416
|
+
}
|
|
417
|
+
}), (/**
|
|
418
|
+
* @param {?} err
|
|
419
|
+
* @return {?}
|
|
420
|
+
*/
|
|
421
|
+
function (err) {
|
|
422
|
+
_this.schemeLoading = false;
|
|
423
|
+
_this.showError('加载筛选模版失败:' + (err || ''));
|
|
424
|
+
if (applyDefault) {
|
|
425
|
+
_this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);
|
|
426
|
+
}
|
|
427
|
+
}));
|
|
428
|
+
};
|
|
429
|
+
/** 展示用列表:保证有「默认条件」 */
|
|
430
|
+
/**
|
|
431
|
+
* 展示用列表:保证有「默认条件」
|
|
432
|
+
* @return {?}
|
|
433
|
+
*/
|
|
434
|
+
HdFilterComponent.prototype.getDisplaySchemeList = /**
|
|
435
|
+
* 展示用列表:保证有「默认条件」
|
|
436
|
+
* @return {?}
|
|
437
|
+
*/
|
|
438
|
+
function () {
|
|
439
|
+
/** @type {?} */
|
|
440
|
+
var result = [];
|
|
441
|
+
/** @type {?} */
|
|
442
|
+
var fromDb = this.schemeList.find((/**
|
|
443
|
+
* @param {?} s
|
|
444
|
+
* @return {?}
|
|
445
|
+
*/
|
|
446
|
+
function (s) { return s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME; }));
|
|
447
|
+
if (fromDb) {
|
|
448
|
+
result.push(fromDb);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
result.push({
|
|
452
|
+
filterKey: this.filterSchemeKey,
|
|
453
|
+
templateName: HD_FILTER_DEFAULT_SCHEME_NAME,
|
|
454
|
+
filterValue: JSON.stringify(this.defaultFilterValues || {})
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
(this.schemeList || []).forEach((/**
|
|
458
|
+
* @param {?} s
|
|
459
|
+
* @return {?}
|
|
460
|
+
*/
|
|
461
|
+
function (s) {
|
|
462
|
+
if (s.templateName !== HD_FILTER_DEFAULT_SCHEME_NAME) {
|
|
463
|
+
result.push(s);
|
|
464
|
+
}
|
|
465
|
+
}));
|
|
466
|
+
return result;
|
|
467
|
+
};
|
|
468
|
+
/**
|
|
469
|
+
* @return {?}
|
|
470
|
+
*/
|
|
471
|
+
HdFilterComponent.prototype.openSwitchModal = /**
|
|
472
|
+
* @return {?}
|
|
473
|
+
*/
|
|
474
|
+
function () {
|
|
475
|
+
if (!this.canUseScheme) {
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
/** @type {?} */
|
|
479
|
+
var current = this.currentScheme
|
|
480
|
+
|| {
|
|
481
|
+
filterKey: this.filterSchemeKey,
|
|
482
|
+
templateName: this.currentSchemeName || HD_FILTER_DEFAULT_SCHEME_NAME,
|
|
483
|
+
filterValue: ''
|
|
484
|
+
};
|
|
485
|
+
this.buildSwitchFormList(this.getSwitchOptionKey(current));
|
|
486
|
+
this.switchModalVisible = true;
|
|
487
|
+
};
|
|
488
|
+
/**
|
|
489
|
+
* @return {?}
|
|
490
|
+
*/
|
|
491
|
+
HdFilterComponent.prototype.closeSwitchModal = /**
|
|
492
|
+
* @return {?}
|
|
493
|
+
*/
|
|
494
|
+
function () {
|
|
495
|
+
this.switchModalVisible = false;
|
|
496
|
+
};
|
|
497
|
+
/**
|
|
498
|
+
* @param {?} form
|
|
499
|
+
* @return {?}
|
|
500
|
+
*/
|
|
501
|
+
HdFilterComponent.prototype.switchFormChangeEvent = /**
|
|
502
|
+
* @param {?} form
|
|
503
|
+
* @return {?}
|
|
504
|
+
*/
|
|
505
|
+
function (form) {
|
|
506
|
+
this.switchValidateForm = form;
|
|
507
|
+
};
|
|
508
|
+
/**
|
|
509
|
+
* @param {?} item
|
|
510
|
+
* @return {?}
|
|
511
|
+
*/
|
|
512
|
+
HdFilterComponent.prototype.getSwitchOptionKey = /**
|
|
513
|
+
* @param {?} item
|
|
514
|
+
* @return {?}
|
|
515
|
+
*/
|
|
516
|
+
function (item) {
|
|
517
|
+
if (!item) {
|
|
518
|
+
return this.switchDefaultKey;
|
|
519
|
+
}
|
|
520
|
+
if (item.uuid) {
|
|
521
|
+
return item.uuid;
|
|
522
|
+
}
|
|
523
|
+
return this.switchDefaultKey;
|
|
524
|
+
};
|
|
525
|
+
/**
|
|
526
|
+
* @private
|
|
527
|
+
* @param {?} selectedKey
|
|
528
|
+
* @return {?}
|
|
529
|
+
*/
|
|
530
|
+
HdFilterComponent.prototype.buildSwitchFormList = /**
|
|
531
|
+
* @private
|
|
532
|
+
* @param {?} selectedKey
|
|
533
|
+
* @return {?}
|
|
534
|
+
*/
|
|
535
|
+
function (selectedKey) {
|
|
536
|
+
var _this = this;
|
|
537
|
+
/** @type {?} */
|
|
538
|
+
var selectList = this.getDisplaySchemeList().map((/**
|
|
539
|
+
* @param {?} item
|
|
540
|
+
* @return {?}
|
|
541
|
+
*/
|
|
542
|
+
function (item) {
|
|
543
|
+
return {
|
|
544
|
+
value: _this.getSwitchOptionKey(item),
|
|
545
|
+
label: item.templateName
|
|
546
|
+
};
|
|
547
|
+
}));
|
|
548
|
+
this.switchFormList = [
|
|
549
|
+
{
|
|
550
|
+
type: FormListType.Select,
|
|
551
|
+
label: '筛选组',
|
|
552
|
+
name: 'schemeKey',
|
|
553
|
+
require: true,
|
|
554
|
+
width: 4,
|
|
555
|
+
value: selectedKey,
|
|
556
|
+
placeholder: '请选择筛选组',
|
|
557
|
+
selectOption: {
|
|
558
|
+
value: 'value',
|
|
559
|
+
label: 'label',
|
|
560
|
+
hdShowSearch: true,
|
|
561
|
+
selectList: selectList
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
];
|
|
565
|
+
};
|
|
566
|
+
/**
|
|
567
|
+
* @return {?}
|
|
568
|
+
*/
|
|
569
|
+
HdFilterComponent.prototype.confirmSwitch = /**
|
|
570
|
+
* @return {?}
|
|
571
|
+
*/
|
|
572
|
+
function () {
|
|
573
|
+
if (!this.switchValidateForm || !this.switchValidateForm.valid) {
|
|
574
|
+
this.showError('请选择筛选组');
|
|
575
|
+
return false;
|
|
576
|
+
}
|
|
577
|
+
/** @type {?} */
|
|
578
|
+
var schemeKey = this.switchValidateForm.getRawValue().schemeKey;
|
|
579
|
+
if (schemeKey == null || schemeKey === '') {
|
|
580
|
+
this.showError('请选择筛选组');
|
|
581
|
+
return false;
|
|
582
|
+
}
|
|
583
|
+
/** @type {?} */
|
|
584
|
+
var list = this.getDisplaySchemeList();
|
|
585
|
+
/** @type {?} */
|
|
586
|
+
var target = null;
|
|
587
|
+
if (schemeKey === this.switchDefaultKey) {
|
|
588
|
+
target = list.find((/**
|
|
589
|
+
* @param {?} s
|
|
590
|
+
* @return {?}
|
|
591
|
+
*/
|
|
592
|
+
function (s) { return s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME && !s.uuid; }))
|
|
593
|
+
|| list.find((/**
|
|
594
|
+
* @param {?} s
|
|
595
|
+
* @return {?}
|
|
596
|
+
*/
|
|
597
|
+
function (s) { return s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME; }));
|
|
598
|
+
}
|
|
599
|
+
else {
|
|
600
|
+
target = list.find((/**
|
|
601
|
+
* @param {?} s
|
|
602
|
+
* @return {?}
|
|
603
|
+
*/
|
|
604
|
+
function (s) { return s.uuid === schemeKey; }));
|
|
605
|
+
}
|
|
606
|
+
if (!target) {
|
|
607
|
+
this.showError('请选择筛选组');
|
|
608
|
+
return false;
|
|
609
|
+
}
|
|
610
|
+
this.applyScheme(target, true);
|
|
611
|
+
this.switchModalVisible = false;
|
|
612
|
+
return true;
|
|
613
|
+
};
|
|
614
|
+
/**
|
|
615
|
+
* @param {?} item
|
|
616
|
+
* @return {?}
|
|
617
|
+
*/
|
|
618
|
+
HdFilterComponent.prototype.isDefaultScheme = /**
|
|
619
|
+
* @param {?} item
|
|
620
|
+
* @return {?}
|
|
621
|
+
*/
|
|
622
|
+
function (item) {
|
|
623
|
+
return !!(item && item.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);
|
|
624
|
+
};
|
|
625
|
+
/**
|
|
626
|
+
* @return {?}
|
|
627
|
+
*/
|
|
628
|
+
HdFilterComponent.prototype.canDeleteCurrent = /**
|
|
629
|
+
* @return {?}
|
|
630
|
+
*/
|
|
631
|
+
function () {
|
|
632
|
+
return !!(this.currentScheme && this.currentScheme.uuid
|
|
633
|
+
&& this.currentScheme.templateName !== HD_FILTER_DEFAULT_SCHEME_NAME);
|
|
634
|
+
};
|
|
635
|
+
/**
|
|
636
|
+
* @return {?}
|
|
637
|
+
*/
|
|
638
|
+
HdFilterComponent.prototype.saveCurrentScheme = /**
|
|
639
|
+
* @return {?}
|
|
640
|
+
*/
|
|
641
|
+
function () {
|
|
642
|
+
var _this = this;
|
|
643
|
+
if (!this.canUseScheme) {
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
/** @type {?} */
|
|
647
|
+
var name = this.currentSchemeName || HD_FILTER_DEFAULT_SCHEME_NAME;
|
|
648
|
+
/** @type {?} */
|
|
649
|
+
var body = {
|
|
650
|
+
uuid: this.currentScheme && this.currentScheme.uuid ? this.currentScheme.uuid : null,
|
|
651
|
+
filterKey: this.filterSchemeKey,
|
|
652
|
+
templateName: name,
|
|
653
|
+
filterValue: this.serializeFilterValue()
|
|
654
|
+
};
|
|
655
|
+
this.schemeSaving = true;
|
|
656
|
+
if (this.schemeActionSub) {
|
|
657
|
+
this.schemeActionSub.unsubscribe();
|
|
658
|
+
}
|
|
659
|
+
this.schemeActionSub = this.schemeStore.save(body).subscribe((/**
|
|
660
|
+
* @param {?} saved
|
|
661
|
+
* @return {?}
|
|
662
|
+
*/
|
|
663
|
+
function (saved) {
|
|
664
|
+
_this.schemeSaving = false;
|
|
665
|
+
_this.showSuccess('保存成功');
|
|
666
|
+
_this.currentScheme = saved;
|
|
667
|
+
_this.currentSchemeName = saved.templateName;
|
|
668
|
+
_this.refreshSchemeListKeepCurrent();
|
|
669
|
+
}), (/**
|
|
670
|
+
* @param {?} err
|
|
671
|
+
* @return {?}
|
|
672
|
+
*/
|
|
673
|
+
function (err) {
|
|
674
|
+
_this.schemeSaving = false;
|
|
675
|
+
_this.showError('保存失败:' + (err || ''));
|
|
676
|
+
}));
|
|
677
|
+
};
|
|
678
|
+
/**
|
|
679
|
+
* @return {?}
|
|
680
|
+
*/
|
|
681
|
+
HdFilterComponent.prototype.openSaveAsModal = /**
|
|
682
|
+
* @return {?}
|
|
683
|
+
*/
|
|
684
|
+
function () {
|
|
685
|
+
this.buildSaveAsFormList();
|
|
686
|
+
this.saveAsModalVisible = true;
|
|
687
|
+
};
|
|
688
|
+
/**
|
|
689
|
+
* @return {?}
|
|
690
|
+
*/
|
|
691
|
+
HdFilterComponent.prototype.closeSaveAsModal = /**
|
|
692
|
+
* @return {?}
|
|
693
|
+
*/
|
|
694
|
+
function () {
|
|
695
|
+
this.saveAsModalVisible = false;
|
|
696
|
+
};
|
|
697
|
+
/**
|
|
698
|
+
* @param {?} form
|
|
699
|
+
* @return {?}
|
|
700
|
+
*/
|
|
701
|
+
HdFilterComponent.prototype.saveAsFormChangeEvent = /**
|
|
702
|
+
* @param {?} form
|
|
703
|
+
* @return {?}
|
|
704
|
+
*/
|
|
705
|
+
function (form) {
|
|
706
|
+
this.saveAsValidateForm = form;
|
|
707
|
+
};
|
|
708
|
+
/**
|
|
709
|
+
* @private
|
|
710
|
+
* @return {?}
|
|
711
|
+
*/
|
|
712
|
+
HdFilterComponent.prototype.buildSaveAsFormList = /**
|
|
713
|
+
* @private
|
|
714
|
+
* @return {?}
|
|
715
|
+
*/
|
|
716
|
+
function () {
|
|
717
|
+
this.saveAsFormList = [
|
|
718
|
+
{
|
|
719
|
+
type: FormListType.Input,
|
|
720
|
+
label: '筛选组名称',
|
|
721
|
+
name: 'templateName',
|
|
722
|
+
require: true,
|
|
723
|
+
width: 4,
|
|
724
|
+
maxLength: 100,
|
|
725
|
+
value: null,
|
|
726
|
+
placeholder: '请输入筛选组名称'
|
|
727
|
+
}
|
|
728
|
+
];
|
|
729
|
+
};
|
|
730
|
+
/**
|
|
731
|
+
* @return {?}
|
|
732
|
+
*/
|
|
733
|
+
HdFilterComponent.prototype.confirmSaveAs = /**
|
|
734
|
+
* @return {?}
|
|
735
|
+
*/
|
|
736
|
+
function () {
|
|
737
|
+
var _this = this;
|
|
738
|
+
if (!this.saveAsValidateForm || !this.saveAsValidateForm.valid) {
|
|
739
|
+
this.showError('请输入筛选组名称');
|
|
740
|
+
return false;
|
|
741
|
+
}
|
|
742
|
+
/** @type {?} */
|
|
743
|
+
var name = ((this.saveAsValidateForm.getRawValue().templateName) || '').trim();
|
|
744
|
+
if (!name) {
|
|
745
|
+
this.showError('请输入筛选组名称');
|
|
746
|
+
return false;
|
|
747
|
+
}
|
|
748
|
+
if (name === HD_FILTER_DEFAULT_SCHEME_NAME) {
|
|
749
|
+
this.showError('不能使用「默认条件」作为筛选组名称,请使用「保存为当前」覆盖默认条件');
|
|
750
|
+
return false;
|
|
751
|
+
}
|
|
752
|
+
/** @type {?} */
|
|
753
|
+
var exists = (this.schemeList || []).some((/**
|
|
754
|
+
* @param {?} s
|
|
755
|
+
* @return {?}
|
|
756
|
+
*/
|
|
757
|
+
function (s) { return s.templateName === name; }));
|
|
758
|
+
if (exists) {
|
|
759
|
+
this.showError('筛选组名称已存在');
|
|
760
|
+
return false;
|
|
761
|
+
}
|
|
762
|
+
/** @type {?} */
|
|
763
|
+
var body = {
|
|
764
|
+
filterKey: this.filterSchemeKey,
|
|
765
|
+
templateName: name,
|
|
766
|
+
filterValue: this.serializeFilterValue()
|
|
767
|
+
};
|
|
768
|
+
this.schemeSaving = true;
|
|
769
|
+
if (this.schemeActionSub) {
|
|
770
|
+
this.schemeActionSub.unsubscribe();
|
|
771
|
+
}
|
|
772
|
+
this.schemeActionSub = this.schemeStore.save(body).subscribe((/**
|
|
773
|
+
* @param {?} saved
|
|
774
|
+
* @return {?}
|
|
775
|
+
*/
|
|
776
|
+
function (saved) {
|
|
777
|
+
_this.schemeSaving = false;
|
|
778
|
+
_this.saveAsModalVisible = false;
|
|
779
|
+
_this.showSuccess('另存为成功');
|
|
780
|
+
_this.currentScheme = saved;
|
|
781
|
+
_this.currentSchemeName = saved.templateName;
|
|
782
|
+
_this.refreshSchemeListKeepCurrent();
|
|
783
|
+
}), (/**
|
|
784
|
+
* @param {?} err
|
|
785
|
+
* @return {?}
|
|
786
|
+
*/
|
|
787
|
+
function (err) {
|
|
788
|
+
_this.schemeSaving = false;
|
|
789
|
+
_this.showError('另存为失败:' + (err || ''));
|
|
790
|
+
}));
|
|
791
|
+
return false;
|
|
792
|
+
};
|
|
793
|
+
/**
|
|
794
|
+
* @return {?}
|
|
795
|
+
*/
|
|
796
|
+
HdFilterComponent.prototype.deleteCurrentScheme = /**
|
|
797
|
+
* @return {?}
|
|
798
|
+
*/
|
|
799
|
+
function () {
|
|
800
|
+
var _this = this;
|
|
801
|
+
if (!this.canDeleteCurrent()) {
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
804
|
+
/** @type {?} */
|
|
805
|
+
var uuid = this.currentScheme.uuid;
|
|
806
|
+
this.schemeSaving = true;
|
|
807
|
+
if (this.schemeActionSub) {
|
|
808
|
+
this.schemeActionSub.unsubscribe();
|
|
809
|
+
}
|
|
810
|
+
this.schemeActionSub = this.schemeStore.delete(uuid).subscribe((/**
|
|
811
|
+
* @return {?}
|
|
812
|
+
*/
|
|
813
|
+
function () {
|
|
814
|
+
_this.schemeSaving = false;
|
|
815
|
+
_this.showSuccess('删除成功');
|
|
816
|
+
_this.schemeList = (_this.schemeList || []).filter((/**
|
|
817
|
+
* @param {?} s
|
|
818
|
+
* @return {?}
|
|
819
|
+
*/
|
|
820
|
+
function (s) { return s.uuid !== uuid; }));
|
|
821
|
+
_this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);
|
|
822
|
+
}), (/**
|
|
823
|
+
* @param {?} err
|
|
824
|
+
* @return {?}
|
|
825
|
+
*/
|
|
826
|
+
function (err) {
|
|
827
|
+
_this.schemeSaving = false;
|
|
828
|
+
_this.showError('删除失败:' + (err || ''));
|
|
829
|
+
}));
|
|
830
|
+
};
|
|
831
|
+
/**
|
|
832
|
+
* @private
|
|
833
|
+
* @return {?}
|
|
834
|
+
*/
|
|
835
|
+
HdFilterComponent.prototype.refreshSchemeListKeepCurrent = /**
|
|
836
|
+
* @private
|
|
837
|
+
* @return {?}
|
|
838
|
+
*/
|
|
839
|
+
function () {
|
|
840
|
+
var _this = this;
|
|
841
|
+
if (!this.canUseScheme) {
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
this.schemeStore.queryByFilterKey(this.filterSchemeKey).subscribe((/**
|
|
845
|
+
* @param {?} list
|
|
846
|
+
* @return {?}
|
|
847
|
+
*/
|
|
848
|
+
function (list) {
|
|
849
|
+
_this.schemeList = list || [];
|
|
850
|
+
if (_this.currentScheme && _this.currentScheme.uuid) {
|
|
851
|
+
/** @type {?} */
|
|
852
|
+
var found = _this.schemeList.find((/**
|
|
853
|
+
* @param {?} s
|
|
854
|
+
* @return {?}
|
|
855
|
+
*/
|
|
856
|
+
function (s) { return s.uuid === _this.currentScheme.uuid; }));
|
|
857
|
+
if (found) {
|
|
858
|
+
_this.currentScheme = found;
|
|
859
|
+
_this.currentSchemeName = found.templateName;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
}), (/**
|
|
863
|
+
* @return {?}
|
|
864
|
+
*/
|
|
865
|
+
function () { }));
|
|
866
|
+
};
|
|
867
|
+
/**
|
|
868
|
+
* @private
|
|
869
|
+
* @param {?} name
|
|
870
|
+
* @param {?} emitSearch
|
|
871
|
+
* @return {?}
|
|
872
|
+
*/
|
|
873
|
+
HdFilterComponent.prototype.applySchemeByName = /**
|
|
874
|
+
* @private
|
|
875
|
+
* @param {?} name
|
|
876
|
+
* @param {?} emitSearch
|
|
877
|
+
* @return {?}
|
|
878
|
+
*/
|
|
879
|
+
function (name, emitSearch) {
|
|
880
|
+
/** @type {?} */
|
|
881
|
+
var list = this.getDisplaySchemeList();
|
|
882
|
+
/** @type {?} */
|
|
883
|
+
var target = list.find((/**
|
|
884
|
+
* @param {?} s
|
|
885
|
+
* @return {?}
|
|
886
|
+
*/
|
|
887
|
+
function (s) { return s.templateName === name; }));
|
|
888
|
+
if (target) {
|
|
889
|
+
this.applyScheme(target, emitSearch);
|
|
890
|
+
}
|
|
891
|
+
};
|
|
892
|
+
/**
|
|
893
|
+
* @private
|
|
894
|
+
* @param {?} scheme
|
|
895
|
+
* @param {?} emitSearch
|
|
896
|
+
* @return {?}
|
|
897
|
+
*/
|
|
898
|
+
HdFilterComponent.prototype.applyScheme = /**
|
|
899
|
+
* @private
|
|
900
|
+
* @param {?} scheme
|
|
901
|
+
* @param {?} emitSearch
|
|
902
|
+
* @return {?}
|
|
903
|
+
*/
|
|
904
|
+
function (scheme, emitSearch) {
|
|
905
|
+
this.currentScheme = scheme && scheme.uuid ? scheme : {
|
|
906
|
+
filterKey: this.filterSchemeKey,
|
|
907
|
+
templateName: scheme ? scheme.templateName : HD_FILTER_DEFAULT_SCHEME_NAME,
|
|
908
|
+
filterValue: scheme ? scheme.filterValue : JSON.stringify(this.defaultFilterValues || {})
|
|
909
|
+
};
|
|
910
|
+
this.currentSchemeName = this.currentScheme.templateName || HD_FILTER_DEFAULT_SCHEME_NAME;
|
|
911
|
+
/** @type {?} */
|
|
912
|
+
var values = {};
|
|
913
|
+
if (this.currentSchemeName === HD_FILTER_DEFAULT_SCHEME_NAME && !(scheme && scheme.uuid)) {
|
|
914
|
+
values = this.clonePlain(this.defaultFilterValues || {});
|
|
915
|
+
}
|
|
916
|
+
else {
|
|
917
|
+
try {
|
|
918
|
+
values = JSON.parse(scheme.filterValue || '{}');
|
|
919
|
+
}
|
|
920
|
+
catch (e) {
|
|
921
|
+
values = {};
|
|
922
|
+
}
|
|
923
|
+
if (this.currentSchemeName === HD_FILTER_DEFAULT_SCHEME_NAME) {
|
|
924
|
+
// 库中默认条件覆盖初始值:以默认值为底,再叠加库值
|
|
925
|
+
values = Object.assign({}, this.defaultFilterValues || {}, values || {});
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
this.patchFilterValues(values);
|
|
929
|
+
if (emitSearch) {
|
|
930
|
+
this.submitForm();
|
|
931
|
+
}
|
|
932
|
+
};
|
|
933
|
+
/**
|
|
934
|
+
* @private
|
|
935
|
+
* @return {?}
|
|
936
|
+
*/
|
|
937
|
+
HdFilterComponent.prototype.serializeFilterValue = /**
|
|
938
|
+
* @private
|
|
939
|
+
* @return {?}
|
|
940
|
+
*/
|
|
941
|
+
function () {
|
|
942
|
+
return JSON.stringify(this.getFilterData() || {});
|
|
943
|
+
};
|
|
944
|
+
/**
|
|
945
|
+
* @private
|
|
946
|
+
* @param {?} values
|
|
947
|
+
* @return {?}
|
|
948
|
+
*/
|
|
949
|
+
HdFilterComponent.prototype.patchFilterValues = /**
|
|
950
|
+
* @private
|
|
951
|
+
* @param {?} values
|
|
952
|
+
* @return {?}
|
|
953
|
+
*/
|
|
954
|
+
function (values) {
|
|
955
|
+
var _this = this;
|
|
956
|
+
if (!this.validateFilterForm || !this.filterList) {
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
/** @type {?} */
|
|
960
|
+
var patch = {};
|
|
961
|
+
this.filterList.forEach((/**
|
|
962
|
+
* @param {?} item
|
|
963
|
+
* @return {?}
|
|
964
|
+
*/
|
|
965
|
+
function (item) {
|
|
966
|
+
if (values && Object.prototype.hasOwnProperty.call(values, item.name)) {
|
|
967
|
+
patch[item.name] = _this.reviveFilterValue(item, values[item.name]);
|
|
968
|
+
}
|
|
969
|
+
}));
|
|
970
|
+
this.validateFilterForm.patchValue(patch);
|
|
971
|
+
};
|
|
972
|
+
/**
|
|
973
|
+
* @private
|
|
974
|
+
* @param {?} filter
|
|
975
|
+
* @param {?} value
|
|
976
|
+
* @return {?}
|
|
977
|
+
*/
|
|
978
|
+
HdFilterComponent.prototype.reviveFilterValue = /**
|
|
979
|
+
* @private
|
|
980
|
+
* @param {?} filter
|
|
981
|
+
* @param {?} value
|
|
982
|
+
* @return {?}
|
|
983
|
+
*/
|
|
984
|
+
function (filter, value) {
|
|
985
|
+
var _this = this;
|
|
986
|
+
if (value == null) {
|
|
987
|
+
return value;
|
|
988
|
+
}
|
|
989
|
+
if (filter.type === FilterListType.DateRange) {
|
|
990
|
+
if (Array.isArray(value)) {
|
|
991
|
+
return value.map((/**
|
|
992
|
+
* @param {?} v
|
|
993
|
+
* @return {?}
|
|
994
|
+
*/
|
|
995
|
+
function (v) { return _this.parseDateLike(v); }));
|
|
996
|
+
}
|
|
997
|
+
return value;
|
|
998
|
+
}
|
|
999
|
+
if (filter.type === FilterListType.Date || filter.type === FilterListType.Month) {
|
|
1000
|
+
return this.parseDateLike(value);
|
|
1001
|
+
}
|
|
1002
|
+
return value;
|
|
1003
|
+
};
|
|
1004
|
+
/**
|
|
1005
|
+
* @private
|
|
1006
|
+
* @param {?} value
|
|
1007
|
+
* @return {?}
|
|
1008
|
+
*/
|
|
1009
|
+
HdFilterComponent.prototype.parseDateLike = /**
|
|
1010
|
+
* @private
|
|
1011
|
+
* @param {?} value
|
|
1012
|
+
* @return {?}
|
|
1013
|
+
*/
|
|
1014
|
+
function (value) {
|
|
1015
|
+
if (value == null || value instanceof Date) {
|
|
1016
|
+
return value;
|
|
1017
|
+
}
|
|
1018
|
+
if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value)) {
|
|
1019
|
+
/** @type {?} */
|
|
1020
|
+
var d = new Date(value);
|
|
1021
|
+
return isNaN(d.getTime()) ? value : d;
|
|
1022
|
+
}
|
|
1023
|
+
if (typeof value === 'number') {
|
|
1024
|
+
/** @type {?} */
|
|
1025
|
+
var d = new Date(value);
|
|
1026
|
+
return isNaN(d.getTime()) ? value : d;
|
|
1027
|
+
}
|
|
1028
|
+
return value;
|
|
1029
|
+
};
|
|
1030
|
+
/**
|
|
1031
|
+
* @private
|
|
1032
|
+
* @param {?} obj
|
|
1033
|
+
* @return {?}
|
|
1034
|
+
*/
|
|
1035
|
+
HdFilterComponent.prototype.clonePlain = /**
|
|
1036
|
+
* @private
|
|
1037
|
+
* @param {?} obj
|
|
1038
|
+
* @return {?}
|
|
1039
|
+
*/
|
|
1040
|
+
function (obj) {
|
|
1041
|
+
try {
|
|
1042
|
+
return JSON.parse(JSON.stringify(obj == null ? {} : obj));
|
|
1043
|
+
}
|
|
1044
|
+
catch (e) {
|
|
1045
|
+
return {};
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
1048
|
+
/**
|
|
1049
|
+
* @private
|
|
1050
|
+
* @param {?} msg
|
|
1051
|
+
* @return {?}
|
|
1052
|
+
*/
|
|
1053
|
+
HdFilterComponent.prototype.showSuccess = /**
|
|
1054
|
+
* @private
|
|
1055
|
+
* @param {?} msg
|
|
1056
|
+
* @return {?}
|
|
1057
|
+
*/
|
|
1058
|
+
function (msg) {
|
|
1059
|
+
if (typeof window !== 'undefined' && ((/** @type {?} */ (window))).hdMessageService) {
|
|
1060
|
+
((/** @type {?} */ (window))).hdMessageService.prototype.success(msg);
|
|
1061
|
+
}
|
|
1062
|
+
};
|
|
1063
|
+
/**
|
|
1064
|
+
* @private
|
|
1065
|
+
* @param {?} msg
|
|
1066
|
+
* @return {?}
|
|
1067
|
+
*/
|
|
1068
|
+
HdFilterComponent.prototype.showError = /**
|
|
1069
|
+
* @private
|
|
1070
|
+
* @param {?} msg
|
|
1071
|
+
* @return {?}
|
|
1072
|
+
*/
|
|
1073
|
+
function (msg) {
|
|
1074
|
+
if (typeof window !== 'undefined' && ((/** @type {?} */ (window))).hdMessageService) {
|
|
1075
|
+
((/** @type {?} */ (window))).hdMessageService.prototype.error(msg);
|
|
1076
|
+
}
|
|
1077
|
+
else {
|
|
1078
|
+
// eslint-disable-next-line no-console
|
|
1079
|
+
console.error(msg);
|
|
1080
|
+
}
|
|
1081
|
+
};
|
|
333
1082
|
HdFilterComponent.decorators = [
|
|
334
1083
|
{ type: Component, args: [{
|
|
335
1084
|
selector: 'hd-filter',
|
|
336
|
-
template: "<form nz-form [formGroup]=\"validateFilterForm\" class=\"ant-advanced-search-form hd-filter-container\">\n <!-- \u6574\u4F53\u7ED3\u6784 -->\n <div nz-row [nzGutter]=\"24\">\n <!-- \u5BF9\u7EC4\u4EF6\u5217\u8868\u5FAA\u73AF\u5904\u7406 -->\n <ng-container *ngFor=\"let filter of filterList\">\n <div nz-col [nzSpan]=\"6\" [hidden]=\"!filter.show\">\n <nz-form-item nzFlex>\n <nz-form-label class=\"hd-filter-label\" [nzNoColon]=\"true\"><span class=\"hd-red\" *ngIf=\"filter.require\">*</span>{{ filter.label }}\n </nz-form-label>\n <nz-form-control class=\"hd-filter-control\">\n <ng-container [ngSwitch]=\"filter.type\">\n <!-- \u8FD9\u91CC\u6570\u5B57\u5BF9\u5E94\u679A\u4E3E\u7C7B\u578B\uFF0C\u53EF\u5728hd-filter.service.ts\u6587\u4EF6\u4E2D\u67E5\u770B\u5BF9\u5E94\u5173\u7CFB -->\n <ng-container *ngSwitchCase=\"0\">\n <nz-input-group [nzSuffix]=\"inputCleanTemplate\">\n <input nz-input [placeholder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u8F93\u5165' + filter.label\"\n [formControlName]=\"filter.name\"\n (blur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\"/>\n </nz-input-group>\n <ng-template #inputCleanTemplate><i nz-icon nz-tooltip class=\"ant-input-clear-icon\" nzTheme=\"fill\"\n nzType=\"close-circle\" *ngIf=\"isAllowClear(filter) && validateFilterForm.get(filter.name).value\"\n (click)=\"inputClean(filter)\"></i></ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"1\">\n <nz-select\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"2\">\n <nz-date-picker *ngIf=\"filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n nzShowTime nzFormat=\"yyyy-MM-dd HH:mm:ss\">\n </nz-date-picker>\n <nz-date-picker *ngIf=\"!filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\">\n </nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"3\">\n <nz-range-picker [nzPlaceHolder]=\"['\u5F00\u59CB\u65E5\u671F','\u7ED3\u675F\u65E5\u671F']\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\" [formControlName]=\"filter.name\">\n </nz-range-picker>\n </ng-container>\n <!-- \u591A\u9879\u9009\u62E9\u5668 -->\n <ng-container *ngSwitchCase=\"4\">\n <nz-select\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n nzMode=\"multiple\"\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"5\">\n <nz-cascader [nzOptions]=\"filter.cascaderOption.options\" [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzShowSearch]=\"getCascaderShowSearch(filter.cascaderOption)\"\n [nzMenuClassName]=\"getCascaderMenuClassName(filter.cascaderOption)\"\n [nzMenuStyle]=\"getCascaderMenuStyle(filter.cascaderOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\">\n </nz-cascader>\n </ng-container>\n <ng-container *ngSwitchCase=\"6\">\n <nz-month-picker [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"7\">\n <nz-input-number [formControlName]=\"filter.name\" [nzMin]=\"filter?.inputNumber?.min || 0\"\n [nzMax]=\"filter?.inputNumber?.max || 99999999\" [nzStep]=\"filter?.inputNumber?.step || 1\"\n [nzPlaceHolder]=\"'\u8BF7\u8F93\u5165' + filter.label\"\n [nzPrecision]=\"filter?.inputNumber?.precision != null ? filter.inputNumber.precision : 4\"\n (nzBlur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\">\n </nz-input-number>\n </ng-container>\n </ng-container>\n </nz-form-control>\n </nz-form-item>\n </div>\n </ng-container>\n\n <div class=\"hd-filter-btn\" nz-col [nzSpan]=\"6\" [nzOffset]=\"computeOffset()\">\n <a *ngIf=\"filterList.length > 7\" class=\"hd-filter-more\" (click)=\"showMore()\">\n {{ isShowMore ? '\u5C55\u5F00' : '\u6536\u8D77' }}\n <i nz-icon [nzType]=\"isShowMore ? 'down' : 'up'\"></i>\n </a>\n <hd-button type=\"primary\" (click)=\"submitForm()\">\u67E5\u8BE2</hd-button>\n <hd-button type=\"reset\" (click)=\"resetForm()\">\u91CD\u7F6E</hd-button>\n </div>\n </div>\n</form>\n",
|
|
337
|
-
styles: ["::ng-deep .common-btn-group>a{font-size:14px;font-weight:400;color:#20b95d!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset}::ng-deep .ant-form-item-label>label{color:#4b504e;font-size:14px}::ng-deep .ant-input-number-input{height:32px}::ng-deep .ant-input-number{height:32px}textarea.ant-input{height:auto;min-height:32px}::ng-deep .ant-select-selection--multiple{min-height:32px}::ng-deep .ant-select-selection__rendered>ul>li{height:26px!important;margin-top:3px!important;line-height:26px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:32px!important}::ng-deep .ant-input{height:32px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:32px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}::ng-deep .hd-table-container .ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-th-right-sticky{z-index:2;transform:translateZ(0)}::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-right-sticky{background:#f5f8f6!important}::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-right-sticky{background:#fff}::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-right-sticky{background:#ecf8f1!important}::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-th-right-sticky{box-shadow:none!important}::ng-deep .hd-table-container .ant-table-fixed-right{right:0!important}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:14px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-pagination-options .ant-select,::ng-deep .ant-pagination-options .ant-select-selection--single{min-width:100px}::ng-deep .ant-pagination-options-size-changer.ant-select{min-width:100px}::ng-deep .ant-time-picker{width:100%}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:var(--hd-cascader-menu-min-width,auto);max-width:560px}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child .ant-cascader-menu-item{white-space:nowrap}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.hd-filter-container{padding:20px 23px;background:#fff;border-radius:4px;margin-bottom:8px!important;font-size:14px}.hd-filter-container .ant-row{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:4px;margin-right:0!important;margin-left:0!important}.hd-filter-container .ant-row::after,.hd-filter-container .ant-row::before{display:none}.hd-filter-container .ant-col-6{float:none;padding-left:0!important;padding-right:0!important}.hd-filter-container .hd-filter-label{width:124px;word-break:break-all;font-size:14px}.hd-filter-container .hd-filter-label ::ng-deep label{font-size:14px}.hd-filter-container .hd-filter-control{width:calc(100% - 124px)}.hd-filter-container ::ng-deep .ant-calendar-picker{width:100%}.hd-filter-container .hd-filter-more{color:#20b95d}.hd-filter-container .hd-filter-btn{height:40px;display:inline-flex;align-items:center;justify-content:flex-end}.hd-filter-container hd-button{margin-left:
|
|
1085
|
+
template: "<form nz-form [formGroup]=\"validateFilterForm\" class=\"ant-advanced-search-form hd-filter-container\">\n <!-- \u6574\u4F53\u7ED3\u6784 -->\n <div nz-row [nzGutter]=\"24\">\n <!-- \u5BF9\u7EC4\u4EF6\u5217\u8868\u5FAA\u73AF\u5904\u7406 -->\n <ng-container *ngFor=\"let filter of filterList\">\n <div nz-col [nzSpan]=\"6\" [hidden]=\"!filter.show\">\n <nz-form-item nzFlex>\n <nz-form-label class=\"hd-filter-label\" [nzNoColon]=\"true\"><span class=\"hd-red\" *ngIf=\"filter.require\">*</span>{{ filter.label }}\n </nz-form-label>\n <nz-form-control class=\"hd-filter-control\">\n <ng-container [ngSwitch]=\"filter.type\">\n <!-- \u8FD9\u91CC\u6570\u5B57\u5BF9\u5E94\u679A\u4E3E\u7C7B\u578B\uFF0C\u53EF\u5728hd-filter.service.ts\u6587\u4EF6\u4E2D\u67E5\u770B\u5BF9\u5E94\u5173\u7CFB -->\n <ng-container *ngSwitchCase=\"0\">\n <nz-input-group [nzSuffix]=\"inputCleanTemplate\">\n <input nz-input [placeholder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u8F93\u5165' + filter.label\"\n [formControlName]=\"filter.name\"\n (blur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\"/>\n </nz-input-group>\n <ng-template #inputCleanTemplate><i nz-icon nz-tooltip class=\"ant-input-clear-icon\" nzTheme=\"fill\"\n nzType=\"close-circle\" *ngIf=\"isAllowClear(filter) && validateFilterForm.get(filter.name).value\"\n (click)=\"inputClean(filter)\"></i></ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"1\">\n <nz-select\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"2\">\n <nz-date-picker *ngIf=\"filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n nzShowTime nzFormat=\"yyyy-MM-dd HH:mm:ss\">\n </nz-date-picker>\n <nz-date-picker *ngIf=\"!filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\">\n </nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"3\">\n <nz-range-picker [nzPlaceHolder]=\"['\u5F00\u59CB\u65E5\u671F','\u7ED3\u675F\u65E5\u671F']\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\" [formControlName]=\"filter.name\">\n </nz-range-picker>\n </ng-container>\n <!-- \u591A\u9879\u9009\u62E9\u5668 -->\n <ng-container *ngSwitchCase=\"4\">\n <nz-select\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n nzMode=\"multiple\"\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"5\">\n <nz-cascader [nzOptions]=\"filter.cascaderOption.options\" [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzShowSearch]=\"getCascaderShowSearch(filter.cascaderOption)\"\n [nzMenuClassName]=\"getCascaderMenuClassName(filter.cascaderOption)\"\n [nzMenuStyle]=\"getCascaderMenuStyle(filter.cascaderOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\">\n </nz-cascader>\n </ng-container>\n <ng-container *ngSwitchCase=\"6\">\n <nz-month-picker [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"7\">\n <nz-input-number [formControlName]=\"filter.name\" [nzMin]=\"filter?.inputNumber?.min || 0\"\n [nzMax]=\"filter?.inputNumber?.max || 99999999\" [nzStep]=\"filter?.inputNumber?.step || 1\"\n [nzPlaceHolder]=\"'\u8BF7\u8F93\u5165' + filter.label\"\n [nzPrecision]=\"filter?.inputNumber?.precision != null ? filter.inputNumber.precision : 4\"\n (nzBlur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\">\n </nz-input-number>\n </ng-container>\n </ng-container>\n </nz-form-control>\n </nz-form-item>\n </div>\n </ng-container>\n\n <div class=\"hd-filter-btn\" nz-col [nzSpan]=\"6\" [nzOffset]=\"computeOffset()\">\n <!-- \u7A3F\u9762\u987A\u5E8F\uFF1A\u9ED8\u8BA4\u6761\u4EF6 \u2192 \u64CD\u4F5C(\u9F7F\u8F6E) \u2192 \u6536\u8D77 \u2192 \u67E5\u8BE2 \u2192 \u91CD\u7F6E -->\n <ng-container *ngIf=\"canUseScheme\">\n <a class=\"hd-filter-scheme-name\" (click)=\"openSwitchModal()\" nz-tooltip [nzTitle]=\"currentSchemeName\">\n <span class=\"hd-filter-scheme-name-text\">{{ currentSchemeName }}</span>\n <i nz-icon nzType=\"down\" nzTheme=\"outline\"></i>\n </a>\n <a class=\"hd-filter-scheme-op\" nz-dropdown [nzDropdownMenu]=\"schemeOpMenu\" nzTrigger=\"click\">\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\n \u64CD\u4F5C\n </a>\n <nz-dropdown-menu #schemeOpMenu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"saveCurrentScheme()\">\u4FDD\u5B58\u4E3A\u5F53\u524D</li>\n <li nz-menu-item (click)=\"openSaveAsModal()\">\u53E6\u5B58\u4E3A</li>\n <li nz-menu-item *ngIf=\"canDeleteCurrent()\"\n class=\"hd-filter-scheme-op-delete\"\n nz-popconfirm\n nzTitle=\"\u786E\u5B9A\u5220\u9664\u5F53\u524D\u7B5B\u9009\u7EC4\u5417\uFF1F\"\n nzPopconfirmPlacement=\"bottomRight\"\n (nzOnConfirm)=\"deleteCurrentScheme()\">\u5220\u9664</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <a *ngIf=\"filterList.length > 7\" class=\"hd-filter-more\" (click)=\"showMore()\">\n {{ isShowMore ? '\u5C55\u5F00' : '\u6536\u8D77' }}\n <i nz-icon [nzType]=\"isShowMore ? 'down' : 'up'\"></i>\n </a>\n <hd-button type=\"primary\" (click)=\"submitForm()\">\u67E5\u8BE2</hd-button>\n <hd-button type=\"reset\" (click)=\"resetForm()\">\u91CD\u7F6E</hd-button>\n </div>\n </div>\n</form>\n\n<!-- \u9009\u62E9\u7B5B\u9009\u7EC4 -->\n<nz-modal\n [(nzVisible)]=\"switchModalVisible\"\n nzTitle=\"\u9009\u62E9\u7B5B\u9009\u7EC4\"\n nzWidth=\"420px\"\n [nzOkLoading]=\"schemeLoading\"\n (nzOnCancel)=\"closeSwitchModal()\"\n (nzOnOk)=\"confirmSwitch()\">\n <hd-form [formList]=\"switchFormList\" (changeEvent)=\"switchFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n\n<!-- \u53E6\u5B58\u4E3A -->\n<nz-modal\n [(nzVisible)]=\"saveAsModalVisible\"\n nzTitle=\"\u4FDD\u5B58\u7B5B\u9009\u7EC4\"\n nzWidth=\"420px\"\n [nzOkLoading]=\"schemeSaving\"\n (nzOnCancel)=\"closeSaveAsModal()\"\n (nzOnOk)=\"confirmSaveAs()\">\n <hd-form [formList]=\"saveAsFormList\" (changeEvent)=\"saveAsFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n",
|
|
1086
|
+
styles: ["::ng-deep .common-btn-group>a{font-size:14px;font-weight:400;color:#20b95d!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset}::ng-deep .ant-form-item-label>label{color:#4b504e;font-size:14px}::ng-deep .ant-input-number-input{height:32px}::ng-deep .ant-input-number{height:32px}textarea.ant-input{height:auto;min-height:32px}::ng-deep .ant-select-selection--multiple{min-height:32px}::ng-deep .ant-select-selection__rendered>ul>li{height:26px!important;margin-top:3px!important;line-height:26px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:32px!important}::ng-deep .ant-input{height:32px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:32px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}::ng-deep .hd-table-container .ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-th-right-sticky{z-index:2;transform:translateZ(0)}::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-right-sticky{background:#f5f8f6!important}::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-right-sticky{background:#fff}::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-right-sticky{background:#ecf8f1!important}::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-th-right-sticky{box-shadow:none!important}::ng-deep .hd-table-container .ant-table-fixed-right{right:0!important}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:14px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-pagination-options .ant-select,::ng-deep .ant-pagination-options .ant-select-selection--single{min-width:100px}::ng-deep .ant-pagination-options-size-changer.ant-select{min-width:100px}::ng-deep .ant-time-picker{width:100%}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:var(--hd-cascader-menu-min-width,auto);max-width:560px}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child .ant-cascader-menu-item{white-space:nowrap}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.hd-filter-container{padding:20px 23px;background:#fff;border-radius:4px;margin-bottom:8px!important;font-size:14px}.hd-filter-container .ant-row{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:4px;margin-right:0!important;margin-left:0!important}.hd-filter-container .ant-row::after,.hd-filter-container .ant-row::before{display:none}.hd-filter-container .ant-col-6{float:none;padding-left:0!important;padding-right:0!important}.hd-filter-container .hd-filter-label{width:124px;word-break:break-all;font-size:14px}.hd-filter-container .hd-filter-label ::ng-deep label{font-size:14px}.hd-filter-container .hd-filter-control{width:calc(100% - 124px)}.hd-filter-container ::ng-deep .ant-calendar-picker{width:100%}.hd-filter-container .hd-filter-more{color:#20b95d;white-space:nowrap;flex-shrink:0}.hd-filter-container .hd-filter-btn{height:40px;display:inline-flex;align-items:center;justify-content:flex-end;gap:10px;max-width:100%;min-width:0;padding-left:12px;box-sizing:border-box}.hd-filter-container hd-button{margin-left:0;flex-shrink:0}.hd-filter-container ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}.hd-filter-container ::ng-deep .ant-select-selection--single{height:32px!important}.hd-filter-container ::ng-deep .ant-input{height:32px!important}.hd-filter-container ::ng-deep .ant-calendar-range-picker-input{text-align:left!important}.hd-filter-container .ant-input-number{width:100%}.hd-filter-container .hd-red{color:#f5222d}.hd-filter-container .hd-filter-scheme-name,.hd-filter-container .hd-filter-scheme-op{color:#4e5369;white-space:nowrap;display:inline-flex;align-items:center;gap:4px;padding:3px;margin:0;box-sizing:border-box}.hd-filter-container .hd-filter-scheme-name i[nz-icon],.hd-filter-container .hd-filter-scheme-op i[nz-icon]{font-size:14px;flex-shrink:0}.hd-filter-container .hd-filter-scheme-name{flex:0 1 auto;max-width:160px;min-width:0;overflow:hidden}.hd-filter-container .hd-filter-scheme-name .hd-filter-scheme-name-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hd-filter-container .hd-filter-scheme-name i[nz-icon]{font-size:12px}.hd-filter-container .hd-filter-scheme-op{flex-shrink:0}::ng-deep .hd-filter-scheme-op-delete{color:#f5222d!important}"]
|
|
338
1087
|
}] }
|
|
339
1088
|
];
|
|
340
1089
|
/** @nocollapse */
|
|
341
1090
|
HdFilterComponent.ctorParameters = function () { return [
|
|
342
|
-
{ type: FormBuilder }
|
|
1091
|
+
{ type: FormBuilder },
|
|
1092
|
+
{ type: HdFilterSchemeStore, decorators: [{ type: Optional }, { type: Inject, args: [HD_FILTER_SCHEME_STORE,] }] }
|
|
343
1093
|
]; };
|
|
344
1094
|
HdFilterComponent.propDecorators = {
|
|
345
1095
|
filterList: [{ type: Input }],
|
|
1096
|
+
enableFilterScheme: [{ type: Input }],
|
|
1097
|
+
filterSchemeKey: [{ type: Input }],
|
|
346
1098
|
searchEvent: [{ type: Output }],
|
|
347
1099
|
resetEvent: [{ type: Output }]
|
|
348
1100
|
};
|
|
1101
|
+
tslib_1.__decorate([
|
|
1102
|
+
InputBoolean(),
|
|
1103
|
+
tslib_1.__metadata("design:type", Object)
|
|
1104
|
+
], HdFilterComponent.prototype, "enableFilterScheme", void 0);
|
|
349
1105
|
return HdFilterComponent;
|
|
350
1106
|
}());
|
|
351
1107
|
export { HdFilterComponent };
|
|
352
1108
|
if (false) {
|
|
353
1109
|
/** @type {?} */
|
|
354
1110
|
HdFilterComponent.prototype.filterList;
|
|
1111
|
+
/**
|
|
1112
|
+
* 是否启用筛选组(默认关闭)
|
|
1113
|
+
* @type {?}
|
|
1114
|
+
*/
|
|
1115
|
+
HdFilterComponent.prototype.enableFilterScheme;
|
|
1116
|
+
/**
|
|
1117
|
+
* 筛选器标识,开启筛选组时必传
|
|
1118
|
+
* @type {?}
|
|
1119
|
+
*/
|
|
1120
|
+
HdFilterComponent.prototype.filterSchemeKey;
|
|
355
1121
|
/** @type {?} */
|
|
356
1122
|
HdFilterComponent.prototype.searchEvent;
|
|
357
1123
|
/** @type {?} */
|
|
@@ -377,6 +1143,56 @@ if (false) {
|
|
|
377
1143
|
* @private
|
|
378
1144
|
*/
|
|
379
1145
|
HdFilterComponent.prototype.searchSubscription;
|
|
1146
|
+
/**
|
|
1147
|
+
* @type {?}
|
|
1148
|
+
* @private
|
|
1149
|
+
*/
|
|
1150
|
+
HdFilterComponent.prototype.schemeLoadSub;
|
|
1151
|
+
/**
|
|
1152
|
+
* @type {?}
|
|
1153
|
+
* @private
|
|
1154
|
+
*/
|
|
1155
|
+
HdFilterComponent.prototype.schemeActionSub;
|
|
1156
|
+
/**
|
|
1157
|
+
* 页面配置的初始值(虚拟「默认条件」)
|
|
1158
|
+
* @type {?}
|
|
1159
|
+
* @private
|
|
1160
|
+
*/
|
|
1161
|
+
HdFilterComponent.prototype.defaultFilterValues;
|
|
1162
|
+
/**
|
|
1163
|
+
* @type {?}
|
|
1164
|
+
* @private
|
|
1165
|
+
*/
|
|
1166
|
+
HdFilterComponent.prototype.defaultValuesCaptured;
|
|
1167
|
+
/** @type {?} */
|
|
1168
|
+
HdFilterComponent.prototype.schemeList;
|
|
1169
|
+
/** @type {?} */
|
|
1170
|
+
HdFilterComponent.prototype.currentScheme;
|
|
1171
|
+
/** @type {?} */
|
|
1172
|
+
HdFilterComponent.prototype.currentSchemeName;
|
|
1173
|
+
/** @type {?} */
|
|
1174
|
+
HdFilterComponent.prototype.schemeLoading;
|
|
1175
|
+
/** @type {?} */
|
|
1176
|
+
HdFilterComponent.prototype.schemeSaving;
|
|
1177
|
+
/** @type {?} */
|
|
1178
|
+
HdFilterComponent.prototype.switchModalVisible;
|
|
1179
|
+
/** @type {?} */
|
|
1180
|
+
HdFilterComponent.prototype.switchFormList;
|
|
1181
|
+
/** @type {?} */
|
|
1182
|
+
HdFilterComponent.prototype.switchValidateForm;
|
|
1183
|
+
/** @type {?} */
|
|
1184
|
+
HdFilterComponent.prototype.saveAsModalVisible;
|
|
1185
|
+
/** @type {?} */
|
|
1186
|
+
HdFilterComponent.prototype.saveAsFormList;
|
|
1187
|
+
/** @type {?} */
|
|
1188
|
+
HdFilterComponent.prototype.saveAsValidateForm;
|
|
1189
|
+
/** @type {?} */
|
|
1190
|
+
HdFilterComponent.prototype.defaultSchemeName;
|
|
1191
|
+
/**
|
|
1192
|
+
* @type {?}
|
|
1193
|
+
* @private
|
|
1194
|
+
*/
|
|
1195
|
+
HdFilterComponent.prototype.switchDefaultKey;
|
|
380
1196
|
/** @type {?} */
|
|
381
1197
|
HdFilterComponent.prototype.getCascaderShowSearch;
|
|
382
1198
|
/** @type {?} */
|
|
@@ -388,5 +1204,10 @@ if (false) {
|
|
|
388
1204
|
* @private
|
|
389
1205
|
*/
|
|
390
1206
|
HdFilterComponent.prototype.fb;
|
|
1207
|
+
/**
|
|
1208
|
+
* @type {?}
|
|
1209
|
+
* @private
|
|
1210
|
+
*/
|
|
1211
|
+
HdFilterComponent.prototype.schemeStore;
|
|
391
1212
|
}
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDO0lBbUJFLDJCQUFvQixFQUFlO1FBQW5DLGlCQUlDO1FBSm1CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFYekIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRzFDLGVBQVUsR0FBWSxJQUFJLENBQUM7O1FBRTNCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUN0QixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFnRCxDQUFDO1FBQzVFLG9CQUFlLEdBQVcsQ0FBQyxDQUFDLENBQUUsU0FBUztRQXlLL0MsMEJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDOUMsNkJBQXdCLEdBQUcsd0JBQXdCLENBQUM7UUFDcEQseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUF2SzFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDL0MsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDbkMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFB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RCxDQUFDO0lBRUQ7O09BRUc7Ozs7OztJQUNILHdDQUFZOzs7OztJQUFaLFVBQWEsSUFBWTtRQUN2QixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDN0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDL0QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7U0FDekM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2dCQXZMRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLGltUEFBeUM7O2lCQUUxQzs7OztnQkFkUSxXQUFXOzs7NkJBaUJqQixLQUFLOzhCQUNMLE1BQU07NkJBQ04sTUFBTTs7SUFtTFQsd0JBQUM7Q0FBQSxBQTVMRCxJQTRMQztTQXZMWSxpQkFBaUI7OztJQUU1Qix1Q0FBbUM7O0lBQ25DLHdDQUEyQzs7SUFDM0MsdUNBQTBDOztJQUUxQywrQ0FBOEI7O0lBQzlCLHVDQUEyQjs7SUFFM0IsOENBQThCOzs7OztJQUM5QiwwQ0FBb0Y7Ozs7O0lBQ3BGLDRDQUFvQzs7Ozs7SUFFcEMsK0NBQXFEOztJQXVLckQsa0RBQThDOztJQUM5QyxxREFBb0Q7O0lBQ3BELGlEQUE0Qzs7Ozs7SUF4S2hDLCtCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuL2hkLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvY2FzY2FkZXIudXRpbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hkLWZpbHRlci5jb21wb25lbnQubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIEhkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBmaWx0ZXJMaXN0OiBBcnJheTxGaWx0ZXI+O1xuICBAT3V0cHV0KCkgc2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZXNldEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHZhbGlkYXRlRmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBpc1Nob3dNb3JlOiBib29sZWFuID0gdHJ1ZTtcbiAgLy8g5a+5ZmlsdGVyTGlzdOWPluaooei/kOeul1xuICBmaWx0ZXJMaXN0TW9kdWxhcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnk7IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwOyAgLy8g6buY6K6k6Ziy5oqW5pe26Ze0XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9IHRydWU7XG4gICAgLy8g5byC5bi45o2V6I63XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZpbHRlckxpc3QpKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDJztcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggJSA0O1xuICAgIC8vIOmmluWFiOagueaNruWumuS5ieeahOe7hOS7tuaVsOe7hCAg5Y675Yid5aeL5YyW6KGo5Y2VXG4gICAgbGV0IGZvcm1Hcm91cExpc3QgPSB7fTtcbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChpdGVtLnZhbHVlLCBbXSk7XG4gICAgICAvLyDliJ3lp4vljJbmjqfku7bmmL7lvbFcbiAgICAgIGl0ZW0uc2hvdyA9IGluZGV4IDwgNztcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwTGlzdCk7XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChmbjogYW55LCBldmVudDogYW55LCBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICAvLyDmm7TmlrDpmLLmipbml7bpl7RcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gb25TZWFyY2hFdmVudERlYm91bmNlVGltZTtcblxuICAgICAgLy8g5Y+W5raI5LmL5YmN55qE6K6i6ZiFXG4gICAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgLy8g5Yib5bu65paw55qE6K6i6ZiFXG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpXG4gICAgICApLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbiB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbikpO1xuXG4gICAgICAvLyDlj5HpgIHkuovku7ZcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSwgc2VsZWN0T3B0aW9uPzogYW55KSB7XG4gICAgaWYgKGZuICYmIHNlbGVjdE9wdGlvbikge1xuICAgICAgZm4oZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29tcHV0ZU9mZnNldCgpIHtcbiAgICAvLyDnibnmrorlpITnkIbkuIvnrYnkuo405Liq6YCJ6aG555qE5oOF5Ya1XG4gICAgaWYgKHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJldHVybiAxODtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNTaG93TW9yZSA/ICgodGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9PT0gMCB8fCB0aGlzLmZpbHRlckxpc3QubGVuZ3RoID4gNykgPyAwIDogKDMgLSB0aGlzLmZpbHRlckxpc3RNb2R1bGFyKSAqIDYpIDogKHRoaXMuZmlsdGVyTGlzdE1vZHVsYXIgPT09IDAgPyAxOCA6ICgzIC0gdGhpcy5maWx0ZXJMaXN0TW9kdWxhcikgKiA2KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZpbHRlcj4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IG5hbWVMaXN0ID0gW107XG4gICAgbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAvLyDmoKHpqozljZXpobnpgInmi6nlmahcbiAgICAgIC8vIGlmIChpdGVtLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLlNlbGVjdCAmJiAoIWl0ZW0uc2VsZWN0T3B0aW9uLnNlbGVjdExpc3QgfHwgKGl0ZW0uc2VsZWN0T3B0aW9uLnNlbGVjdExpc3QgJiYgaXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdC5sZW5ndGggPT09IDApKSkge1xuICAgICAgLy8gICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo5Y2V6aG56YCJ5oup5Zmo5rKh5pyJ5Lyg5YWl6YCJ6aG5ISdcbiAgICAgIC8vIH1cbiAgICAgIG5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcbiAgICB9KTtcbiAgICAvLyDmoKHpqoxuYW1l5piv5ZCm6YeN5aSNXG4gICAgaWYgKFsuLi5uZXcgU2V0KG5hbWVMaXN0KV0ubGVuZ3RoICE9PSBsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgJ2ZpbHRlcue7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMg++8jOWtmOWcqOmHjeWkjW5hbWXlgLwhJztcbiAgICB9XG4gICAgLy8gLi4ubW9yZSBjaGVja1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpO1xuICAgIC8vIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMucmVzZXRFdmVudC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8g5aaC5p6c5pyJ54i257uE5Lu257uR5a6a5LqGIHJlc2V0RXZlbnQg55qE5aSE55CG5ZmoXG4gICAgICB0aGlzLnJlc2V0RXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g5aaC5p6c5rKh5pyJ57uR5a6a5aSE55CG5Zmo77yM5YiZ6Kem5Y+RIHNlYXJjaEV2ZW50XG4gICAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOW4puWIneWni+WAvOmHjee9ruihqOWNlVxuICAgKi9cbiAgcHVibGljIHJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpIHtcbiAgICBjb25zdCByZXNldFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHJlc2V0VmFsdWVbaXRlbS5uYW1lXSA9IGl0ZW0udmFsdWU7XG4gICAgfSk7XG4gICAgLy8g6YeN572u6KGo5Y2V5YC877yI5Lya6Kem5Y+RdmFsdWVDaGFuZ2Vz5LqL5Lu277yJXG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShyZXNldFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNob3dNb3JlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9ICF0aGlzLmlzU2hvd01vcmU7XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLnNob3cgPSB0aGlzLmlzU2hvd01vcmUgPyBpbmRleCA8IDcgOiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlucHV0Q2xlYW4oZmlsdGVyOiBGaWx0ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRjaE9iamVjdCA9IHt9O1xuICAgIHBhdGNoT2JqZWN0W2ZpbHRlci5uYW1lXSA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5wYXRjaFZhbHVlKHBhdGNoT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmmK/lkKblhYHorrjmuIXnqbrvvJrkvJjlhYggRmlsdGVyLmhkQWxsb3dDbGVhcu+8jOWFtuasoSBzZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFy77yM6buY6K6kIHRydWVcbiAgICovXG4gIGlzQWxsb3dDbGVhcihpdGVtOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXRlbS5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIGlmIChpdGVtLnNlbGVjdE9wdGlvbiAmJiBpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5zZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFyO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCA9IGdldENhc2NhZGVyU2hvd1NlYXJjaDtcbiAgZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lID0gZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lO1xuICBnZXRDYXNjYWRlck1lbnVTdHlsZSA9IGdldENhc2NhZGVyTWVudVN0eWxlO1xufVxuIl19
|
|
1213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCO0lBK0NFLDJCQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFGdEYsaUJBT0M7UUFOUyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQzZCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjs7OztRQXhDN0QsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBSTFDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcxQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLHNCQUFpQixHQUFXLENBQUMs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QWtEOzs7Ozs7SUFHbEQsZ0RBQXlEOzs7OztJQUN6RCxrREFBc0M7O0lBRXRDLHVDQUF1Qzs7SUFDdkMsMENBQXFDOztJQUNyQyw4Q0FBa0Q7O0lBQ2xELDBDQUFzQjs7SUFDdEIseUNBQXFCOztJQUVyQiwrQ0FBMkI7O0lBQzNCLDJDQUFxQzs7SUFDckMsK0NBQThCOztJQUU5QiwrQ0FBMkI7O0lBQzNCLDJDQUFxQzs7SUFDckMsK0NBQThCOztJQUU5Qiw4Q0FBMkQ7Ozs7O0lBQzNELDZDQUFrRDs7SUE4akJsRCxrREFBOEM7O0lBQzlDLHFEQUFvRDs7SUFDcEQsaURBQTRDOzs7OztJQTdqQjFDLCtCQUF1Qjs7Ozs7SUFDdkIsd0NBQW9GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJMaXN0VHlwZSB9IGZyb20gJy4vaGQtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUl0ZW0sIEZvcm1MaXN0VHlwZSB9IGZyb20gJy4uL2hkLWZvcm0vaGQtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvY2FzY2FkZXIudXRpbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJ25nLXpvcnJvLWFudGQnO1xuaW1wb3J0IHtcbiAgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gIEhEX0ZJTFRFUl9TQ0hFTUVfU1RPUkUsXG4gIEhkRmlsdGVyU2NoZW1lLFxuICBIZEZpbHRlclNjaGVtZVN0b3JlXG59IGZyb20gJy4vaGQtZmlsdGVyLXNjaGVtZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGZpbHRlckxpc3Q6IEFycmF5PEZpbHRlcj47XG4gIC8qKiDmmK/lkKblkK/nlKjnrZvpgInnu4TvvIjpu5jorqTlhbPpl63vvIkgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGVuYWJsZUZpbHRlclNjaGVtZSA9IGZhbHNlO1xuICAvKiog562b6YCJ5Zmo5qCH6K+G77yM5byA5ZCv562b6YCJ57uE5pe25b+F5LygICovXG4gIEBJbnB1dCgpIGZpbHRlclNjaGVtZUtleTogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2V0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdmFsaWRhdGVGaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGlzU2hvd01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJMaXN0TW9kdWxhcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnk7IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NoZW1lTG9hZFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNjaGVtZUFjdGlvblN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiDpobXpnaLphY3nva7nmoTliJ3lp4vlgLzvvIjomZrmi5/jgIzpu5jorqTmnaHku7bjgI3vvIkgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gZmFsc2U7XG5cbiAgc2NoZW1lTGlzdDogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+ID0gW107XG4gIGN1cnJlbnRTY2hlbWU6IEhkRmlsdGVyU2NoZW1lID0gbnVsbDtcbiAgY3VycmVudFNjaGVtZU5hbWUgPSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICBzY2hlbWVTYXZpbmcgPSBmYWxzZTtcblxuICBzd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc3dpdGNoRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzd2l0Y2hWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICBzYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2F2ZUFzRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzYXZlQXNWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICByZWFkb25seSBkZWZhdWx0U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICBwcml2YXRlIHJlYWRvbmx5IHN3aXRjaERlZmF1bHRLZXkgPSAnX19ERUZBVUxUX18nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSERfRklMVEVSX1NDSEVNRV9TVE9SRSkgcHJpdmF0ZSBzY2hlbWVTdG9yZTogSGRGaWx0ZXJTY2hlbWVTdG9yZVxuICApIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnRyeUxvYWRTY2hlbWVzKHRydWUpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJMaXN0J10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10gfHwgY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10pIHtcbiAgICAgIHRoaXMudHJ5TG9hZFNjaGVtZXModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2hlbWVMb2FkU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUxvYWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjYW5Vc2VTY2hlbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuZW5hYmxlRmlsdGVyU2NoZW1lICYmIHRoaXMuZmlsdGVyU2NoZW1lS2V5ICYmIHRoaXMuc2NoZW1lU3RvcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZpbHRlckxpc3QpKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3RNb2R1bGFyID0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAlIDQ7XG4gICAgY29uc3QgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKGl0ZW0udmFsdWUsIFtdKTtcbiAgICAgIGl0ZW0uc2hvdyA9IGluZGV4IDwgNztcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwTGlzdCk7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZXNDYXB0dXJlZCkge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZ2V0RmlsdGVyRGF0YSgpKTtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChmbjogYW55LCBldmVudDogYW55LCBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChmbiAmJiBzZWxlY3RPcHRpb24pIHtcbiAgICAgIGZuKGV2ZW50LCBzZWxlY3RPcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbXB1dGVPZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJldHVybiAxODtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNTaG93TW9yZSA/ICgodGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9PT0gMCB8fCB0aGlzLmZpbHRlckxpc3QubGVuZ3RoID4gNykgPyAwIDogKDMgLSB0aGlzLmZpbHRlckxpc3RNb2R1bGFyKSAqIDYpIDogKHRoaXMuZmlsdGVyTGlzdE1vZHVsYXIgPT09IDAgPyAxOCA6ICgzIC0gdGhpcy5maWx0ZXJMaXN0TW9kdWxhcikgKiA2KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZpbHRlcj4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZUxpc3QgPSBbXTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIG5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoWy4uLm5ldyBTZXQobmFtZUxpc3QpXS5sZW5ndGggIT09IGxpc3QubGVuZ3RoKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo6YeN5aSNbmFtZeWAvCEnO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKTtcbiAgICBpZiAodGhpcy5yZXNldEV2ZW50Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0RXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKSB7XG4gICAgY29uc3QgcmVzZXRWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICByZXNldFZhbHVlW2l0ZW0ubmFtZV0gPSBpdGVtLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsdGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93TW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd01vcmUgPSAhdGhpcy5pc1Nob3dNb3JlO1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zaG93ID0gdGhpcy5pc1Nob3dNb3JlID8gaW5kZXggPCA3IDogdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG4gICAgY29uc3QgcGF0Y2hPYmplY3QgPSB7fTtcbiAgICBwYXRjaE9iamVjdFtmaWx0ZXIubmFtZV0gPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2hPYmplY3QpO1xuICB9XG5cbiAgaXNBbGxvd0NsZWFyKGl0ZW06IEZpbHRlcik6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpdGVtLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLmhkQWxsb3dDbGVhcjtcbiAgICB9XG4gICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLSDnrZvpgInnu4QgLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgdHJ5TG9hZFNjaGVtZXMoYXBwbHlEZWZhdWx0OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUxvYWRTdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lTG9hZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRTdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnF1ZXJ5QnlGaWx0ZXJLZXkodGhpcy5maWx0ZXJTY2hlbWVLZXkpLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSBsaXN0IHx8IFtdO1xuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kIHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kID8gZm91bmQudGVtcGxhdGVOYW1lIDogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Yqg6L29562b6YCJ5qih54mI5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgICAgaWYgKGFwcGx5RGVmYXVsdCkge1xuICAgICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiDlsZXnpLrnlKjliJfooajvvJrkv53or4HmnInjgIzpu5jorqTmnaHku7bjgI0gKi9cbiAgZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PEhkRmlsdGVyU2NoZW1lPiA9IFtdO1xuICAgIGNvbnN0IGZyb21EYiA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICBpZiAoZnJvbURiKSB7XG4gICAgICByZXN1bHQucHVzaChmcm9tRGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICAgIHRlbXBsYXRlTmFtZTogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICAgIGZpbHRlclZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgICB9KTtcbiAgICB9XG4gICAgKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuZm9yRWFjaChzID0+IHtcbiAgICAgIGlmIChzLnRlbXBsYXRlTmFtZSAhPT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9wZW5Td2l0Y2hNb2RhbCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTY2hlbWVcbiAgICAgIHx8IHtcbiAgICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgICBmaWx0ZXJWYWx1ZTogJydcbiAgICAgIH07XG4gICAgdGhpcy5idWlsZFN3aXRjaEZvcm1MaXN0KHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGN1cnJlbnQpKTtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBjbG9zZVN3aXRjaE1vZGFsKCkge1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hGb3JtQ2hhbmdlRXZlbnQoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0gPSBmb3JtO1xuICB9XG5cbiAgZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW06IEhkRmlsdGVyU2NoZW1lKTogc3RyaW5nIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gICAgfVxuICAgIGlmIChpdGVtLnV1aWQpIHtcbiAgICAgIHJldHVybiBpdGVtLnV1aWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3dpdGNoRm9ybUxpc3Qoc2VsZWN0ZWRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbGVjdExpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW0pLFxuICAgICAgICBsYWJlbDogaXRlbS50ZW1wbGF0ZU5hbWVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLlNlbGVjdCxcbiAgICAgICAgbGFiZWw6ICfnrZvpgInnu4QnLFxuICAgICAgICBuYW1lOiAnc2NoZW1lS2V5JyxcbiAgICAgICAgcmVxdWlyZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgIHZhbHVlOiBzZWxlY3RlZEtleSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6nnrZvpgInnu4QnLFxuICAgICAgICBzZWxlY3RPcHRpb246IHtcbiAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBoZFNob3dTZWFyY2g6IHRydWUsXG4gICAgICAgICAgc2VsZWN0TGlzdDogc2VsZWN0TGlzdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNvbmZpcm1Td2l0Y2goKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybSB8fCAhdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lS2V5ID0gdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0uZ2V0UmF3VmFsdWUoKS5zY2hlbWVLZXk7XG4gICAgaWYgKHNjaGVtZUtleSA9PSBudWxsIHx8IHNjaGVtZUtleSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBsZXQgdGFyZ2V0OiBIZEZpbHRlclNjaGVtZSA9IG51bGw7XG4gICAgaWYgKHNjaGVtZUtleSA9PT0gdGhpcy5zd2l0Y2hEZWZhdWx0S2V5KSB7XG4gICAgICB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUgJiYgIXMudXVpZClcbiAgICAgICAgfHwgbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy51dWlkID09PSBzY2hlbWVLZXkpO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5U2NoZW1lKHRhcmdldCwgdHJ1ZSk7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRGVmYXVsdFNjaGVtZShpdGVtOiBIZEZpbHRlclNjaGVtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShpdGVtICYmIGl0ZW0udGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gIH1cblxuICBjYW5EZWxldGVDdXJyZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWRcbiAgICAgICYmIHRoaXMuY3VycmVudFNjaGVtZS50ZW1wbGF0ZU5hbWUgIT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgfVxuXG4gIHNhdmVDdXJyZW50U2NoZW1lKCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuY3VycmVudFNjaGVtZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgY29uc3QgYm9keTogSGRGaWx0ZXJTY2hlbWUgPSB7XG4gICAgICB1dWlkOiB0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQgPyB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCA6IG51bGwsXG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyVmFsdWU6IHRoaXMuc2VyaWFsaXplRmlsdGVyVmFsdWUoKVxuICAgIH07XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnNhdmUoYm9keSkuc3Vic2NyaWJlKFxuICAgICAgKHNhdmVkKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+S/neWtmOaIkOWKnycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzYXZlZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHNhdmVkLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5L+d5a2Y5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb3BlblNhdmVBc01vZGFsKCkge1xuICAgIHRoaXMuYnVpbGRTYXZlQXNGb3JtTGlzdCgpO1xuICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlU2F2ZUFzTW9kYWwoKSB7XG4gICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNhdmVBc0Zvcm1DaGFuZ2VFdmVudChmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybSA9IGZvcm07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZUFzRm9ybUxpc3QoKSB7XG4gICAgdGhpcy5zYXZlQXNGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLklucHV0LFxuICAgICAgICBsYWJlbDogJ+etm+mAiee7hOWQjeensCcsXG4gICAgICAgIG5hbWU6ICd0ZW1wbGF0ZU5hbWUnLFxuICAgICAgICByZXF1aXJlOiB0cnVlLFxuICAgICAgICB3aWR0aDogNCxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCdcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY29uZmlybVNhdmVBcygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtIHx8ICF0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gKCh0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybS5nZXRSYXdWYWx1ZSgpLnRlbXBsYXRlTmFtZSkgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign5LiN6IO95L2/55So44CM6buY6K6k5p2h5Lu244CN5L2c5Li6562b6YCJ57uE5ZCN56ew77yM6K+35L2/55So44CM5L+d5a2Y5Li65b2T5YmN44CN6KaG55uW6buY6K6k5p2h5Lu2Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLnNvbWUocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+etm+mAiee7hOWQjeensOW3suWtmOWcqCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBib2R5OiBIZEZpbHRlclNjaGVtZSA9IHtcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IG5hbWUsXG4gICAgICBmaWx0ZXJWYWx1ZTogdGhpcy5zZXJpYWxpemVGaWx0ZXJWYWx1ZSgpXG4gICAgfTtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuc2F2ZShib2R5KS5zdWJzY3JpYmUoXG4gICAgICAoc2F2ZWQpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5Y+m5a2Y5Li65oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNhdmVkO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gc2F2ZWQudGVtcGxhdGVOYW1lO1xuICAgICAgICB0aGlzLnJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCflj6blrZjkuLrlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlQ3VycmVudFNjaGVtZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuRGVsZXRlQ3VycmVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHV1aWQgPSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZDtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuZGVsZXRlKHV1aWQpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5Yig6Zmk5oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9ICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLmZpbHRlcihzID0+IHMudXVpZCAhPT0gdXVpZCk7XG4gICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+WIoOmZpOWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNjaGVtZUxpc3RLZWVwQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lU3RvcmUucXVlcnlCeUZpbHRlcktleSh0aGlzLmZpbHRlclNjaGVtZUtleSkuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gbGlzdCB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCkge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zY2hlbWVMaXN0LmZpbmQocyA9PiBzLnV1aWQgPT09IHRoaXMuY3VycmVudFNjaGVtZS51dWlkKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoKSA9PiB7IC8qIGlnbm9yZSAqLyB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTY2hlbWVCeU5hbWUobmFtZTogc3RyaW5nLCBlbWl0U2VhcmNoOiBib29sZWFuKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBjb25zdCB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5hcHBseVNjaGVtZSh0YXJnZXQsIGVtaXRTZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTY2hlbWUoc2NoZW1lOiBIZEZpbHRlclNjaGVtZSwgZW1pdFNlYXJjaDogYm9vbGVhbikge1xuICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNjaGVtZSAmJiBzY2hlbWUudXVpZCA/IHNjaGVtZSA6IHtcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IHNjaGVtZSA/IHNjaGVtZS50ZW1wbGF0ZU5hbWUgOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgICAgIGZpbHRlclZhbHVlOiBzY2hlbWUgPyBzY2hlbWUuZmlsdGVyVmFsdWUgOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gdGhpcy5jdXJyZW50U2NoZW1lLnRlbXBsYXRlTmFtZSB8fCBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcblxuICAgIGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSAmJiAhKHNjaGVtZSAmJiBzY2hlbWUudXVpZCkpIHtcbiAgICAgIHZhbHVlcyA9IHRoaXMuY2xvbmVQbGFpbih0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZXMgPSBKU09OLnBhcnNlKHNjaGVtZS5maWx0ZXJWYWx1ZSB8fCAne30nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdmFsdWVzID0ge307XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgLy8g5bqT5Lit6buY6K6k5p2h5Lu26KaG55uW5Yid5aeL5YC877ya5Lul6buY6K6k5YC85Li65bqV77yM5YaN5Y+g5Yqg5bqT5YC8XG4gICAgICAgIHZhbHVlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSwgdmFsdWVzIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYXRjaEZpbHRlclZhbHVlcyh2YWx1ZXMpO1xuICAgIGlmIChlbWl0U2VhcmNoKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0RmlsdGVyRGF0YSgpIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGaWx0ZXJWYWx1ZXModmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSB8fCAhdGhpcy5maWx0ZXJMaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGNoOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodmFsdWVzICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZXMsIGl0ZW0ubmFtZSkpIHtcbiAgICAgICAgcGF0Y2hbaXRlbS5uYW1lXSA9IHRoaXMucmV2aXZlRmlsdGVyVmFsdWUoaXRlbSwgdmFsdWVzW2l0ZW0ubmFtZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2gpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXZpdmVGaWx0ZXJWYWx1ZShmaWx0ZXI6IEZpbHRlciwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5EYXRlUmFuZ2UpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4gdGhpcy5wYXJzZURhdGVMaWtlKHYpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5EYXRlIHx8IGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5Nb250aCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VEYXRlTGlrZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlTGlrZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4oZC5nZXRUaW1lKCkpID8gdmFsdWUgOiBkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyB2YWx1ZSA6IGQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVQbGFpbihvYmo6IGFueSk6IGFueSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaiA9PSBudWxsID8ge30gOiBvYmopKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3VjY2Vzcyhtc2c6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZSkge1xuICAgICAgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UucHJvdG90eXBlLnN1Y2Nlc3MobXNnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dFcnJvcihtc2c6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZSkge1xuICAgICAgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UucHJvdG90eXBlLmVycm9yKG1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2FzY2FkZXJTaG93U2VhcmNoID0gZ2V0Q2FzY2FkZXJTaG93U2VhcmNoO1xuICBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWUgPSBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWU7XG4gIGdldENhc2NhZGVyTWVudVN0eWxlID0gZ2V0Q2FzY2FkZXJNZW51U3R5bGU7XG59XG4iXX0=
|