raise-common-lib 0.0.248 → 0.0.249
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 +57 -57
- package/bundles/raise-common-lib.umd.js +1937 -12
- package/bundles/raise-common-lib.umd.js.map +1 -1
- package/bundles/raise-common-lib.umd.min.js +1 -1
- package/bundles/raise-common-lib.umd.min.js.map +1 -1
- package/esm2015/lib/common-grid/index.component.js +210 -8
- package/esm2015/lib/date-tree-filter/date-tree-filter-popover/index.component.js +761 -0
- package/esm2015/lib/date-tree-filter/date-tree-filter.helper.js +679 -0
- package/esm2015/lib/raise-common-lib.module.js +4 -1
- package/esm2015/public-api.js +3 -1
- package/esm2015/raise-common-lib.js +2 -2
- package/esm5/lib/common-grid/index.component.js +244 -8
- package/esm5/lib/date-tree-filter/date-tree-filter-popover/index.component.js +902 -0
- package/esm5/lib/date-tree-filter/date-tree-filter.helper.js +787 -0
- package/esm5/lib/raise-common-lib.module.js +4 -1
- package/esm5/public-api.js +3 -1
- package/esm5/raise-common-lib.js +2 -2
- package/fesm2015/raise-common-lib.js +1649 -9
- package/fesm2015/raise-common-lib.js.map +1 -1
- package/fesm5/raise-common-lib.js +1931 -10
- package/fesm5/raise-common-lib.js.map +1 -1
- package/lib/common-grid/index.component.d.ts +30 -1
- package/lib/date-tree-filter/date-tree-filter-popover/index.component.d.ts +46 -0
- package/lib/date-tree-filter/date-tree-filter.helper.d.ts +54 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/raise-common-lib.metadata.json +1 -1
- package/src/assets/img/arrow_right.svg +4 -4
- package/src/assets/img/calendar-disabled.svg +6 -6
- package/src/assets/img/calendar.svg +6 -6
- package/src/assets/img/calendar_arrow_left.svg +3 -3
- package/src/assets/img/calendar_arrow_right.svg +3 -3
- package/src/assets/img/checked-vector.svg +3 -3
- package/src/assets/img/dialog-close.svg +4 -4
- package/src/assets/img/dialog-grow.svg +6 -6
- package/src/assets/img/dialog-shrink.svg +6 -6
- package/src/assets/img/plus.svg +4 -4
- package/src/assets/img/raise_logo_main_new.svg +27 -27
- package/src/assets/img/search.svg +4 -4
- package/src/assets/img/shrink-icon.svg +6 -6
- package/src/assets/img/time-disabled.svg +4 -4
- package/src/assets/img/time.svg +4 -4
- package/src/assets/img/toolbar-action-addFolder.svg +17 -17
- package/src/assets/img/toolbar-action-calculator.svg +11 -11
- package/src/assets/img/toolbar-action-collapse.svg +7 -7
- package/src/assets/img/toolbar-action-combine.svg +4 -4
- package/src/assets/img/toolbar-action-edit.svg +4 -4
- package/src/assets/img/toolbar-action-expand.svg +7 -7
- package/src/assets/img/toolbar-action-folderMove.svg +8 -8
- package/src/assets/img/toolbar-action-lock.svg +6 -6
- package/src/assets/img/toolbar-action-preview.svg +7 -7
- package/src/assets/img/toolbar-action-publish.svg +5 -5
- package/src/assets/img/toolbar-action-reminders.svg +10 -10
- package/src/assets/img/toolbar-action-rename.svg +7 -7
- package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
- package/src/assets/img/toolbar-action-send-file.svg +5 -5
- package/src/assets/img/toolbar-action-settle.svg +7 -7
- package/src/assets/img/toolbar-action-share.svg +5 -5
- package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
- package/src/assets/img/toolbar-action-sync.svg +4 -4
- package/src/assets/img/toolbar-action-template.svg +6 -6
- package/src/assets/img/toolbar-action-workflow.svg +9 -9
|
@@ -0,0 +1,902 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* Generated from: lib/date-tree-filter/date-tree-filter-popover/index.component.ts
|
|
4
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
+
*/
|
|
6
|
+
import { Component, EventEmitter, Input, Output, } from "@angular/core";
|
|
7
|
+
import moment from "moment";
|
|
8
|
+
var DateTreeFilterPopoverComponent = /** @class */ (function () {
|
|
9
|
+
function DateTreeFilterPopoverComponent() {
|
|
10
|
+
this.field = "";
|
|
11
|
+
this.sourceRows = [];
|
|
12
|
+
this.dateFields = [];
|
|
13
|
+
this.selectedByField = {};
|
|
14
|
+
this.fieldLabelMap = {};
|
|
15
|
+
this.apply = new EventEmitter();
|
|
16
|
+
this.close = new EventEmitter();
|
|
17
|
+
this.keyword = "";
|
|
18
|
+
this.years = [];
|
|
19
|
+
this.expandStateByField = {};
|
|
20
|
+
this.workingSelectedByField = {};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @param {?} changes
|
|
24
|
+
* @return {?}
|
|
25
|
+
*/
|
|
26
|
+
DateTreeFilterPopoverComponent.prototype.ngOnChanges = /**
|
|
27
|
+
* @param {?} changes
|
|
28
|
+
* @return {?}
|
|
29
|
+
*/
|
|
30
|
+
function (changes) {
|
|
31
|
+
if (changes.field ||
|
|
32
|
+
changes.sourceRows ||
|
|
33
|
+
changes.selectedByField ||
|
|
34
|
+
changes.dateFields) {
|
|
35
|
+
this.keyword = "";
|
|
36
|
+
this.workingSelectedByField = this.cloneSelectionMap(this.selectedByField);
|
|
37
|
+
this.rebuildTree();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* @return {?}
|
|
42
|
+
*/
|
|
43
|
+
DateTreeFilterPopoverComponent.prototype.closePopover = /**
|
|
44
|
+
* @return {?}
|
|
45
|
+
*/
|
|
46
|
+
function () {
|
|
47
|
+
this.close.emit();
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* @param {?} value
|
|
51
|
+
* @return {?}
|
|
52
|
+
*/
|
|
53
|
+
DateTreeFilterPopoverComponent.prototype.onKeywordChange = /**
|
|
54
|
+
* @param {?} value
|
|
55
|
+
* @return {?}
|
|
56
|
+
*/
|
|
57
|
+
function (value) {
|
|
58
|
+
this.keyword = value || "";
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* @return {?}
|
|
62
|
+
*/
|
|
63
|
+
DateTreeFilterPopoverComponent.prototype.getVisibleYears = /**
|
|
64
|
+
* @return {?}
|
|
65
|
+
*/
|
|
66
|
+
function () {
|
|
67
|
+
/** @type {?} */
|
|
68
|
+
var searchText = (this.keyword || "").trim().toLowerCase();
|
|
69
|
+
if (!searchText) {
|
|
70
|
+
return this.years;
|
|
71
|
+
}
|
|
72
|
+
return this.years
|
|
73
|
+
.map((/**
|
|
74
|
+
* @param {?} yearNode
|
|
75
|
+
* @return {?}
|
|
76
|
+
*/
|
|
77
|
+
function (yearNode) {
|
|
78
|
+
/** @type {?} */
|
|
79
|
+
var yearMatched = String(yearNode.year).toLowerCase().indexOf(searchText) > -1;
|
|
80
|
+
/** @type {?} */
|
|
81
|
+
var months = yearNode.months
|
|
82
|
+
.map((/**
|
|
83
|
+
* @param {?} monthNode
|
|
84
|
+
* @return {?}
|
|
85
|
+
*/
|
|
86
|
+
function (monthNode) {
|
|
87
|
+
/** @type {?} */
|
|
88
|
+
var monthMatched = String(monthNode.label)
|
|
89
|
+
.toLowerCase()
|
|
90
|
+
.indexOf(searchText) > -1;
|
|
91
|
+
/** @type {?} */
|
|
92
|
+
var days = monthNode.days.filter((/**
|
|
93
|
+
* @param {?} dayNode
|
|
94
|
+
* @return {?}
|
|
95
|
+
*/
|
|
96
|
+
function (dayNode) {
|
|
97
|
+
return (String(dayNode.label)
|
|
98
|
+
.toLowerCase()
|
|
99
|
+
.indexOf(searchText) > -1);
|
|
100
|
+
}));
|
|
101
|
+
if (yearMatched || monthMatched) {
|
|
102
|
+
return monthNode;
|
|
103
|
+
}
|
|
104
|
+
return Object.assign({}, monthNode, { days: days });
|
|
105
|
+
}))
|
|
106
|
+
.filter((/**
|
|
107
|
+
* @param {?} monthNode
|
|
108
|
+
* @return {?}
|
|
109
|
+
*/
|
|
110
|
+
function (monthNode) { return monthNode.days.length > 0; }));
|
|
111
|
+
if (yearMatched) {
|
|
112
|
+
return yearNode;
|
|
113
|
+
}
|
|
114
|
+
return Object.assign({}, yearNode, { months: months });
|
|
115
|
+
}))
|
|
116
|
+
.filter((/**
|
|
117
|
+
* @param {?} yearNode
|
|
118
|
+
* @return {?}
|
|
119
|
+
*/
|
|
120
|
+
function (yearNode) { return yearNode.months.length > 0; }));
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* @param {?} yearNode
|
|
124
|
+
* @return {?}
|
|
125
|
+
*/
|
|
126
|
+
DateTreeFilterPopoverComponent.prototype.toggleYearExpanded = /**
|
|
127
|
+
* @param {?} yearNode
|
|
128
|
+
* @return {?}
|
|
129
|
+
*/
|
|
130
|
+
function (yearNode) {
|
|
131
|
+
/** @type {?} */
|
|
132
|
+
var state = this.getOrCreateExpandState(this.field);
|
|
133
|
+
state.years[yearNode.key] = !state.years[yearNode.key];
|
|
134
|
+
yearNode.expanded = !!state.years[yearNode.key];
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* @param {?} monthNode
|
|
138
|
+
* @return {?}
|
|
139
|
+
*/
|
|
140
|
+
DateTreeFilterPopoverComponent.prototype.toggleMonthExpanded = /**
|
|
141
|
+
* @param {?} monthNode
|
|
142
|
+
* @return {?}
|
|
143
|
+
*/
|
|
144
|
+
function (monthNode) {
|
|
145
|
+
/** @type {?} */
|
|
146
|
+
var state = this.getOrCreateExpandState(this.field);
|
|
147
|
+
state.months[monthNode.key] = !state.months[monthNode.key];
|
|
148
|
+
monthNode.expanded = !!state.months[monthNode.key];
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* @return {?}
|
|
152
|
+
*/
|
|
153
|
+
DateTreeFilterPopoverComponent.prototype.isAllChecked = /**
|
|
154
|
+
* @return {?}
|
|
155
|
+
*/
|
|
156
|
+
function () {
|
|
157
|
+
/** @type {?} */
|
|
158
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
159
|
+
/** @type {?} */
|
|
160
|
+
var enabledDayKeys = this.getEnabledDayKeysInCurrentField();
|
|
161
|
+
if (!enabledDayKeys.length) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return enabledDayKeys.every((/**
|
|
165
|
+
* @param {?} key
|
|
166
|
+
* @return {?}
|
|
167
|
+
*/
|
|
168
|
+
function (key) { return !!selectedMap[key]; }));
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* @return {?}
|
|
172
|
+
*/
|
|
173
|
+
DateTreeFilterPopoverComponent.prototype.isAllIndeterminate = /**
|
|
174
|
+
* @return {?}
|
|
175
|
+
*/
|
|
176
|
+
function () {
|
|
177
|
+
/** @type {?} */
|
|
178
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
179
|
+
/** @type {?} */
|
|
180
|
+
var enabledDayKeys = this.getEnabledDayKeysInCurrentField();
|
|
181
|
+
if (!enabledDayKeys.length) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
/** @type {?} */
|
|
185
|
+
var selectedCount = enabledDayKeys.filter((/**
|
|
186
|
+
* @param {?} key
|
|
187
|
+
* @return {?}
|
|
188
|
+
*/
|
|
189
|
+
function (key) { return !!selectedMap[key]; }))
|
|
190
|
+
.length;
|
|
191
|
+
return selectedCount > 0 && selectedCount < enabledDayKeys.length;
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* @param {?} checked
|
|
195
|
+
* @return {?}
|
|
196
|
+
*/
|
|
197
|
+
DateTreeFilterPopoverComponent.prototype.toggleAllDays = /**
|
|
198
|
+
* @param {?} checked
|
|
199
|
+
* @return {?}
|
|
200
|
+
*/
|
|
201
|
+
function (checked) {
|
|
202
|
+
/** @type {?} */
|
|
203
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
204
|
+
/** @type {?} */
|
|
205
|
+
var enabledDayKeys = this.getEnabledDayKeysInCurrentField();
|
|
206
|
+
enabledDayKeys.forEach((/**
|
|
207
|
+
* @param {?} key
|
|
208
|
+
* @return {?}
|
|
209
|
+
*/
|
|
210
|
+
function (key) {
|
|
211
|
+
if (checked) {
|
|
212
|
+
selectedMap[key] = true;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
delete selectedMap[key];
|
|
216
|
+
}
|
|
217
|
+
}));
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* @param {?} dayNode
|
|
221
|
+
* @return {?}
|
|
222
|
+
*/
|
|
223
|
+
DateTreeFilterPopoverComponent.prototype.isDayChecked = /**
|
|
224
|
+
* @param {?} dayNode
|
|
225
|
+
* @return {?}
|
|
226
|
+
*/
|
|
227
|
+
function (dayNode) {
|
|
228
|
+
/** @type {?} */
|
|
229
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
230
|
+
return !!selectedMap[dayNode.key];
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* @param {?} dayNode
|
|
234
|
+
* @param {?} checked
|
|
235
|
+
* @return {?}
|
|
236
|
+
*/
|
|
237
|
+
DateTreeFilterPopoverComponent.prototype.toggleDay = /**
|
|
238
|
+
* @param {?} dayNode
|
|
239
|
+
* @param {?} checked
|
|
240
|
+
* @return {?}
|
|
241
|
+
*/
|
|
242
|
+
function (dayNode, checked) {
|
|
243
|
+
if (dayNode.disabled) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
/** @type {?} */
|
|
247
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
248
|
+
if (checked) {
|
|
249
|
+
selectedMap[dayNode.key] = true;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
delete selectedMap[dayNode.key];
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* @param {?} monthNode
|
|
257
|
+
* @return {?}
|
|
258
|
+
*/
|
|
259
|
+
DateTreeFilterPopoverComponent.prototype.isMonthDisabled = /**
|
|
260
|
+
* @param {?} monthNode
|
|
261
|
+
* @return {?}
|
|
262
|
+
*/
|
|
263
|
+
function (monthNode) {
|
|
264
|
+
return monthNode.days.every((/**
|
|
265
|
+
* @param {?} dayNode
|
|
266
|
+
* @return {?}
|
|
267
|
+
*/
|
|
268
|
+
function (dayNode) { return dayNode.disabled; }));
|
|
269
|
+
};
|
|
270
|
+
/**
|
|
271
|
+
* @param {?} monthNode
|
|
272
|
+
* @return {?}
|
|
273
|
+
*/
|
|
274
|
+
DateTreeFilterPopoverComponent.prototype.isMonthChecked = /**
|
|
275
|
+
* @param {?} monthNode
|
|
276
|
+
* @return {?}
|
|
277
|
+
*/
|
|
278
|
+
function (monthNode) {
|
|
279
|
+
if (this.isMonthDisabled(monthNode)) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
/** @type {?} */
|
|
283
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
284
|
+
/** @type {?} */
|
|
285
|
+
var enabledDays = monthNode.days.filter((/**
|
|
286
|
+
* @param {?} dayNode
|
|
287
|
+
* @return {?}
|
|
288
|
+
*/
|
|
289
|
+
function (dayNode) { return !dayNode.disabled; }));
|
|
290
|
+
return enabledDays.every((/**
|
|
291
|
+
* @param {?} dayNode
|
|
292
|
+
* @return {?}
|
|
293
|
+
*/
|
|
294
|
+
function (dayNode) { return !!selectedMap[dayNode.key]; }));
|
|
295
|
+
};
|
|
296
|
+
/**
|
|
297
|
+
* @param {?} monthNode
|
|
298
|
+
* @return {?}
|
|
299
|
+
*/
|
|
300
|
+
DateTreeFilterPopoverComponent.prototype.isMonthIndeterminate = /**
|
|
301
|
+
* @param {?} monthNode
|
|
302
|
+
* @return {?}
|
|
303
|
+
*/
|
|
304
|
+
function (monthNode) {
|
|
305
|
+
if (this.isMonthDisabled(monthNode)) {
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
/** @type {?} */
|
|
309
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
310
|
+
/** @type {?} */
|
|
311
|
+
var enabledDays = monthNode.days.filter((/**
|
|
312
|
+
* @param {?} dayNode
|
|
313
|
+
* @return {?}
|
|
314
|
+
*/
|
|
315
|
+
function (dayNode) { return !dayNode.disabled; }));
|
|
316
|
+
/** @type {?} */
|
|
317
|
+
var selectedCount = enabledDays.filter((/**
|
|
318
|
+
* @param {?} dayNode
|
|
319
|
+
* @return {?}
|
|
320
|
+
*/
|
|
321
|
+
function (dayNode) {
|
|
322
|
+
return !!selectedMap[dayNode.key];
|
|
323
|
+
})).length;
|
|
324
|
+
return selectedCount > 0 && selectedCount < enabledDays.length;
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* @param {?} monthNode
|
|
328
|
+
* @param {?} checked
|
|
329
|
+
* @return {?}
|
|
330
|
+
*/
|
|
331
|
+
DateTreeFilterPopoverComponent.prototype.toggleMonth = /**
|
|
332
|
+
* @param {?} monthNode
|
|
333
|
+
* @param {?} checked
|
|
334
|
+
* @return {?}
|
|
335
|
+
*/
|
|
336
|
+
function (monthNode, checked) {
|
|
337
|
+
if (this.isMonthDisabled(monthNode)) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
/** @type {?} */
|
|
341
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
342
|
+
monthNode.days.forEach((/**
|
|
343
|
+
* @param {?} dayNode
|
|
344
|
+
* @return {?}
|
|
345
|
+
*/
|
|
346
|
+
function (dayNode) {
|
|
347
|
+
if (dayNode.disabled) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
if (checked) {
|
|
351
|
+
selectedMap[dayNode.key] = true;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
delete selectedMap[dayNode.key];
|
|
355
|
+
}
|
|
356
|
+
}));
|
|
357
|
+
};
|
|
358
|
+
/**
|
|
359
|
+
* @param {?} yearNode
|
|
360
|
+
* @return {?}
|
|
361
|
+
*/
|
|
362
|
+
DateTreeFilterPopoverComponent.prototype.isYearDisabled = /**
|
|
363
|
+
* @param {?} yearNode
|
|
364
|
+
* @return {?}
|
|
365
|
+
*/
|
|
366
|
+
function (yearNode) {
|
|
367
|
+
var _this = this;
|
|
368
|
+
return yearNode.months.every((/**
|
|
369
|
+
* @param {?} monthNode
|
|
370
|
+
* @return {?}
|
|
371
|
+
*/
|
|
372
|
+
function (monthNode) {
|
|
373
|
+
return _this.isMonthDisabled(monthNode);
|
|
374
|
+
}));
|
|
375
|
+
};
|
|
376
|
+
/**
|
|
377
|
+
* @param {?} yearNode
|
|
378
|
+
* @return {?}
|
|
379
|
+
*/
|
|
380
|
+
DateTreeFilterPopoverComponent.prototype.isYearChecked = /**
|
|
381
|
+
* @param {?} yearNode
|
|
382
|
+
* @return {?}
|
|
383
|
+
*/
|
|
384
|
+
function (yearNode) {
|
|
385
|
+
var _this = this;
|
|
386
|
+
if (this.isYearDisabled(yearNode)) {
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
/** @type {?} */
|
|
390
|
+
var enabledMonths = yearNode.months.filter((/**
|
|
391
|
+
* @param {?} monthNode
|
|
392
|
+
* @return {?}
|
|
393
|
+
*/
|
|
394
|
+
function (monthNode) { return !_this.isMonthDisabled(monthNode); }));
|
|
395
|
+
return enabledMonths.every((/**
|
|
396
|
+
* @param {?} monthNode
|
|
397
|
+
* @return {?}
|
|
398
|
+
*/
|
|
399
|
+
function (monthNode) { return _this.isMonthChecked(monthNode); }));
|
|
400
|
+
};
|
|
401
|
+
/**
|
|
402
|
+
* @param {?} yearNode
|
|
403
|
+
* @return {?}
|
|
404
|
+
*/
|
|
405
|
+
DateTreeFilterPopoverComponent.prototype.isYearIndeterminate = /**
|
|
406
|
+
* @param {?} yearNode
|
|
407
|
+
* @return {?}
|
|
408
|
+
*/
|
|
409
|
+
function (yearNode) {
|
|
410
|
+
if (this.isYearDisabled(yearNode)) {
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
/** @type {?} */
|
|
414
|
+
var selectedMap = this.getFieldDaySelectionMap(this.field);
|
|
415
|
+
/** @type {?} */
|
|
416
|
+
var enabledDays = [];
|
|
417
|
+
yearNode.months.forEach((/**
|
|
418
|
+
* @param {?} monthNode
|
|
419
|
+
* @return {?}
|
|
420
|
+
*/
|
|
421
|
+
function (monthNode) {
|
|
422
|
+
monthNode.days.forEach((/**
|
|
423
|
+
* @param {?} dayNode
|
|
424
|
+
* @return {?}
|
|
425
|
+
*/
|
|
426
|
+
function (dayNode) {
|
|
427
|
+
if (!dayNode.disabled) {
|
|
428
|
+
enabledDays.push(dayNode.key);
|
|
429
|
+
}
|
|
430
|
+
}));
|
|
431
|
+
}));
|
|
432
|
+
/** @type {?} */
|
|
433
|
+
var selectedCount = enabledDays.filter((/**
|
|
434
|
+
* @param {?} key
|
|
435
|
+
* @return {?}
|
|
436
|
+
*/
|
|
437
|
+
function (key) { return !!selectedMap[key]; })).length;
|
|
438
|
+
return selectedCount > 0 && selectedCount < enabledDays.length;
|
|
439
|
+
};
|
|
440
|
+
/**
|
|
441
|
+
* @param {?} yearNode
|
|
442
|
+
* @param {?} checked
|
|
443
|
+
* @return {?}
|
|
444
|
+
*/
|
|
445
|
+
DateTreeFilterPopoverComponent.prototype.toggleYear = /**
|
|
446
|
+
* @param {?} yearNode
|
|
447
|
+
* @param {?} checked
|
|
448
|
+
* @return {?}
|
|
449
|
+
*/
|
|
450
|
+
function (yearNode, checked) {
|
|
451
|
+
var _this = this;
|
|
452
|
+
if (this.isYearDisabled(yearNode)) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
yearNode.months.forEach((/**
|
|
456
|
+
* @param {?} monthNode
|
|
457
|
+
* @return {?}
|
|
458
|
+
*/
|
|
459
|
+
function (monthNode) {
|
|
460
|
+
_this.toggleMonth(monthNode, checked);
|
|
461
|
+
}));
|
|
462
|
+
};
|
|
463
|
+
/**
|
|
464
|
+
* @return {?}
|
|
465
|
+
*/
|
|
466
|
+
DateTreeFilterPopoverComponent.prototype.clearSelection = /**
|
|
467
|
+
* @return {?}
|
|
468
|
+
*/
|
|
469
|
+
function () {
|
|
470
|
+
if (this.field) {
|
|
471
|
+
this.workingSelectedByField[this.field] = {};
|
|
472
|
+
}
|
|
473
|
+
this.apply.emit(this.cloneSelectionMap(this.workingSelectedByField));
|
|
474
|
+
this.rebuildTree();
|
|
475
|
+
};
|
|
476
|
+
/**
|
|
477
|
+
* @return {?}
|
|
478
|
+
*/
|
|
479
|
+
DateTreeFilterPopoverComponent.prototype.applySelection = /**
|
|
480
|
+
* @return {?}
|
|
481
|
+
*/
|
|
482
|
+
function () {
|
|
483
|
+
this.apply.emit(this.cloneSelectionMap(this.workingSelectedByField));
|
|
484
|
+
this.closePopover();
|
|
485
|
+
};
|
|
486
|
+
/**
|
|
487
|
+
* @private
|
|
488
|
+
* @return {?}
|
|
489
|
+
*/
|
|
490
|
+
DateTreeFilterPopoverComponent.prototype.rebuildTree = /**
|
|
491
|
+
* @private
|
|
492
|
+
* @return {?}
|
|
493
|
+
*/
|
|
494
|
+
function () {
|
|
495
|
+
var _this = this;
|
|
496
|
+
if (!this.field) {
|
|
497
|
+
this.years = [];
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
/** @type {?} */
|
|
501
|
+
var sourceRows = this.sourceRows || [];
|
|
502
|
+
/** @type {?} */
|
|
503
|
+
var rowsByOtherFilters = this.filterRowsBySelectedDateTree(sourceRows, this.field);
|
|
504
|
+
/** @type {?} */
|
|
505
|
+
var availableDayKeyMap = {};
|
|
506
|
+
rowsByOtherFilters.forEach((/**
|
|
507
|
+
* @param {?} row
|
|
508
|
+
* @return {?}
|
|
509
|
+
*/
|
|
510
|
+
function (row) {
|
|
511
|
+
/** @type {?} */
|
|
512
|
+
var dayKey = _this.getDayKeyByRowValue(row[_this.field]);
|
|
513
|
+
if (dayKey) {
|
|
514
|
+
availableDayKeyMap[dayKey] = true;
|
|
515
|
+
}
|
|
516
|
+
}));
|
|
517
|
+
/** @type {?} */
|
|
518
|
+
var groupedMap = {};
|
|
519
|
+
sourceRows.forEach((/**
|
|
520
|
+
* @param {?} row
|
|
521
|
+
* @return {?}
|
|
522
|
+
*/
|
|
523
|
+
function (row) {
|
|
524
|
+
/** @type {?} */
|
|
525
|
+
var date = _this.parseDateValue(row[_this.field]);
|
|
526
|
+
if (!date) {
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
/** @type {?} */
|
|
530
|
+
var year = date.getFullYear();
|
|
531
|
+
/** @type {?} */
|
|
532
|
+
var month = date.getMonth() + 1;
|
|
533
|
+
/** @type {?} */
|
|
534
|
+
var day = date.getDate();
|
|
535
|
+
if (!groupedMap[year]) {
|
|
536
|
+
groupedMap[year] = {};
|
|
537
|
+
}
|
|
538
|
+
if (!groupedMap[year][month]) {
|
|
539
|
+
groupedMap[year][month] = {};
|
|
540
|
+
}
|
|
541
|
+
if (!groupedMap[year][month][day]) {
|
|
542
|
+
groupedMap[year][month][day] = 0;
|
|
543
|
+
}
|
|
544
|
+
groupedMap[year][month][day] += 1;
|
|
545
|
+
}));
|
|
546
|
+
/** @type {?} */
|
|
547
|
+
var expandState = this.getOrCreateExpandState(this.field);
|
|
548
|
+
this.years = Object.keys(groupedMap)
|
|
549
|
+
.map((/**
|
|
550
|
+
* @param {?} key
|
|
551
|
+
* @return {?}
|
|
552
|
+
*/
|
|
553
|
+
function (key) { return Number(key); }))
|
|
554
|
+
.sort((/**
|
|
555
|
+
* @param {?} a
|
|
556
|
+
* @param {?} b
|
|
557
|
+
* @return {?}
|
|
558
|
+
*/
|
|
559
|
+
function (a, b) { return b - a; }))
|
|
560
|
+
.map((/**
|
|
561
|
+
* @param {?} year
|
|
562
|
+
* @return {?}
|
|
563
|
+
*/
|
|
564
|
+
function (year) {
|
|
565
|
+
/** @type {?} */
|
|
566
|
+
var months = Object.keys(groupedMap[year])
|
|
567
|
+
.map((/**
|
|
568
|
+
* @param {?} key
|
|
569
|
+
* @return {?}
|
|
570
|
+
*/
|
|
571
|
+
function (key) { return Number(key); }))
|
|
572
|
+
.sort((/**
|
|
573
|
+
* @param {?} a
|
|
574
|
+
* @param {?} b
|
|
575
|
+
* @return {?}
|
|
576
|
+
*/
|
|
577
|
+
function (a, b) { return a - b; }))
|
|
578
|
+
.map((/**
|
|
579
|
+
* @param {?} month
|
|
580
|
+
* @return {?}
|
|
581
|
+
*/
|
|
582
|
+
function (month) {
|
|
583
|
+
/** @type {?} */
|
|
584
|
+
var monthKey = year + "-" + _this.pad2(month);
|
|
585
|
+
if (expandState.months[monthKey] === undefined) {
|
|
586
|
+
expandState.months[monthKey] = true;
|
|
587
|
+
}
|
|
588
|
+
/** @type {?} */
|
|
589
|
+
var days = Object.keys(groupedMap[year][month])
|
|
590
|
+
.map((/**
|
|
591
|
+
* @param {?} key
|
|
592
|
+
* @return {?}
|
|
593
|
+
*/
|
|
594
|
+
function (key) { return Number(key); }))
|
|
595
|
+
.sort((/**
|
|
596
|
+
* @param {?} a
|
|
597
|
+
* @param {?} b
|
|
598
|
+
* @return {?}
|
|
599
|
+
*/
|
|
600
|
+
function (a, b) { return a - b; }))
|
|
601
|
+
.map((/**
|
|
602
|
+
* @param {?} day
|
|
603
|
+
* @return {?}
|
|
604
|
+
*/
|
|
605
|
+
function (day) {
|
|
606
|
+
/** @type {?} */
|
|
607
|
+
var dayKey = _this.toDayKey(year, month, day);
|
|
608
|
+
/** @type {?} */
|
|
609
|
+
var dayDate = new Date(year, month - 1, day);
|
|
610
|
+
return {
|
|
611
|
+
key: dayKey,
|
|
612
|
+
day: day,
|
|
613
|
+
label: moment(dayDate).format("D MMM YYYY"),
|
|
614
|
+
count: groupedMap[year][month][day],
|
|
615
|
+
disabled: !availableDayKeyMap[dayKey],
|
|
616
|
+
};
|
|
617
|
+
}));
|
|
618
|
+
return {
|
|
619
|
+
key: monthKey,
|
|
620
|
+
month: month,
|
|
621
|
+
label: moment()
|
|
622
|
+
.month(month - 1)
|
|
623
|
+
.format("MMM"),
|
|
624
|
+
expanded: !!expandState.months[monthKey],
|
|
625
|
+
days: days,
|
|
626
|
+
};
|
|
627
|
+
}));
|
|
628
|
+
/** @type {?} */
|
|
629
|
+
var yearKey = String(year);
|
|
630
|
+
if (expandState.years[yearKey] === undefined) {
|
|
631
|
+
expandState.years[yearKey] = true;
|
|
632
|
+
}
|
|
633
|
+
return {
|
|
634
|
+
key: yearKey,
|
|
635
|
+
year: year,
|
|
636
|
+
expanded: !!expandState.years[yearKey],
|
|
637
|
+
months: months,
|
|
638
|
+
};
|
|
639
|
+
}));
|
|
640
|
+
};
|
|
641
|
+
/**
|
|
642
|
+
* @private
|
|
643
|
+
* @param {?} rows
|
|
644
|
+
* @param {?=} excludeField
|
|
645
|
+
* @return {?}
|
|
646
|
+
*/
|
|
647
|
+
DateTreeFilterPopoverComponent.prototype.filterRowsBySelectedDateTree = /**
|
|
648
|
+
* @private
|
|
649
|
+
* @param {?} rows
|
|
650
|
+
* @param {?=} excludeField
|
|
651
|
+
* @return {?}
|
|
652
|
+
*/
|
|
653
|
+
function (rows, excludeField) {
|
|
654
|
+
var _this = this;
|
|
655
|
+
/** @type {?} */
|
|
656
|
+
var filteredRows = rows ? rows.slice() : [];
|
|
657
|
+
(this.dateFields || []).forEach((/**
|
|
658
|
+
* @param {?} field
|
|
659
|
+
* @return {?}
|
|
660
|
+
*/
|
|
661
|
+
function (field) {
|
|
662
|
+
if (excludeField && field === excludeField) {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
/** @type {?} */
|
|
666
|
+
var selectedMap = _this.getFieldDaySelectionMap(field);
|
|
667
|
+
/** @type {?} */
|
|
668
|
+
var selectedKeys = Object.keys(selectedMap);
|
|
669
|
+
if (!selectedKeys.length) {
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
filteredRows = filteredRows.filter((/**
|
|
673
|
+
* @param {?} row
|
|
674
|
+
* @return {?}
|
|
675
|
+
*/
|
|
676
|
+
function (row) {
|
|
677
|
+
/** @type {?} */
|
|
678
|
+
var dayKey = _this.getDayKeyByRowValue(row[field]);
|
|
679
|
+
return dayKey ? !!selectedMap[dayKey] : false;
|
|
680
|
+
}));
|
|
681
|
+
}));
|
|
682
|
+
return filteredRows;
|
|
683
|
+
};
|
|
684
|
+
/**
|
|
685
|
+
* @private
|
|
686
|
+
* @param {?} value
|
|
687
|
+
* @return {?}
|
|
688
|
+
*/
|
|
689
|
+
DateTreeFilterPopoverComponent.prototype.parseDateValue = /**
|
|
690
|
+
* @private
|
|
691
|
+
* @param {?} value
|
|
692
|
+
* @return {?}
|
|
693
|
+
*/
|
|
694
|
+
function (value) {
|
|
695
|
+
if (!value) {
|
|
696
|
+
return null;
|
|
697
|
+
}
|
|
698
|
+
if (value instanceof Date) {
|
|
699
|
+
return value;
|
|
700
|
+
}
|
|
701
|
+
/** @type {?} */
|
|
702
|
+
var parsed = moment(value, [
|
|
703
|
+
"YYYY-MM-DD",
|
|
704
|
+
"MM/DD/YYYY",
|
|
705
|
+
"DD/MM/YYYY",
|
|
706
|
+
"YYYY/MM/DD",
|
|
707
|
+
"DD-MMM-YYYY",
|
|
708
|
+
"MMM DD, YYYY",
|
|
709
|
+
moment.ISO_8601,
|
|
710
|
+
], true);
|
|
711
|
+
if (parsed.isValid()) {
|
|
712
|
+
return parsed.toDate();
|
|
713
|
+
}
|
|
714
|
+
/** @type {?} */
|
|
715
|
+
var fallback = new Date(value);
|
|
716
|
+
return isNaN(fallback.getTime()) ? null : fallback;
|
|
717
|
+
};
|
|
718
|
+
/**
|
|
719
|
+
* @private
|
|
720
|
+
* @param {?} field
|
|
721
|
+
* @return {?}
|
|
722
|
+
*/
|
|
723
|
+
DateTreeFilterPopoverComponent.prototype.getOrCreateExpandState = /**
|
|
724
|
+
* @private
|
|
725
|
+
* @param {?} field
|
|
726
|
+
* @return {?}
|
|
727
|
+
*/
|
|
728
|
+
function (field) {
|
|
729
|
+
if (!this.expandStateByField[field]) {
|
|
730
|
+
this.expandStateByField[field] = { years: {}, months: {} };
|
|
731
|
+
}
|
|
732
|
+
return this.expandStateByField[field];
|
|
733
|
+
};
|
|
734
|
+
/**
|
|
735
|
+
* @private
|
|
736
|
+
* @param {?} field
|
|
737
|
+
* @return {?}
|
|
738
|
+
*/
|
|
739
|
+
DateTreeFilterPopoverComponent.prototype.getFieldDaySelectionMap = /**
|
|
740
|
+
* @private
|
|
741
|
+
* @param {?} field
|
|
742
|
+
* @return {?}
|
|
743
|
+
*/
|
|
744
|
+
function (field) {
|
|
745
|
+
if (!this.workingSelectedByField[field]) {
|
|
746
|
+
this.workingSelectedByField[field] = {};
|
|
747
|
+
}
|
|
748
|
+
return this.workingSelectedByField[field];
|
|
749
|
+
};
|
|
750
|
+
/**
|
|
751
|
+
* @private
|
|
752
|
+
* @param {?} year
|
|
753
|
+
* @param {?} month
|
|
754
|
+
* @param {?} day
|
|
755
|
+
* @return {?}
|
|
756
|
+
*/
|
|
757
|
+
DateTreeFilterPopoverComponent.prototype.toDayKey = /**
|
|
758
|
+
* @private
|
|
759
|
+
* @param {?} year
|
|
760
|
+
* @param {?} month
|
|
761
|
+
* @param {?} day
|
|
762
|
+
* @return {?}
|
|
763
|
+
*/
|
|
764
|
+
function (year, month, day) {
|
|
765
|
+
return year + "-" + this.pad2(month) + "-" + this.pad2(day);
|
|
766
|
+
};
|
|
767
|
+
/**
|
|
768
|
+
* @private
|
|
769
|
+
* @param {?} value
|
|
770
|
+
* @return {?}
|
|
771
|
+
*/
|
|
772
|
+
DateTreeFilterPopoverComponent.prototype.pad2 = /**
|
|
773
|
+
* @private
|
|
774
|
+
* @param {?} value
|
|
775
|
+
* @return {?}
|
|
776
|
+
*/
|
|
777
|
+
function (value) {
|
|
778
|
+
return value < 10 ? "0" + value : String(value);
|
|
779
|
+
};
|
|
780
|
+
/**
|
|
781
|
+
* @private
|
|
782
|
+
* @param {?} value
|
|
783
|
+
* @return {?}
|
|
784
|
+
*/
|
|
785
|
+
DateTreeFilterPopoverComponent.prototype.getDayKeyByRowValue = /**
|
|
786
|
+
* @private
|
|
787
|
+
* @param {?} value
|
|
788
|
+
* @return {?}
|
|
789
|
+
*/
|
|
790
|
+
function (value) {
|
|
791
|
+
/** @type {?} */
|
|
792
|
+
var date = this.parseDateValue(value);
|
|
793
|
+
if (!date) {
|
|
794
|
+
return "";
|
|
795
|
+
}
|
|
796
|
+
return this.toDayKey(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
797
|
+
};
|
|
798
|
+
/**
|
|
799
|
+
* @private
|
|
800
|
+
* @return {?}
|
|
801
|
+
*/
|
|
802
|
+
DateTreeFilterPopoverComponent.prototype.getEnabledDayKeysInCurrentField = /**
|
|
803
|
+
* @private
|
|
804
|
+
* @return {?}
|
|
805
|
+
*/
|
|
806
|
+
function () {
|
|
807
|
+
/** @type {?} */
|
|
808
|
+
var keys = [];
|
|
809
|
+
this.years.forEach((/**
|
|
810
|
+
* @param {?} yearNode
|
|
811
|
+
* @return {?}
|
|
812
|
+
*/
|
|
813
|
+
function (yearNode) {
|
|
814
|
+
yearNode.months.forEach((/**
|
|
815
|
+
* @param {?} monthNode
|
|
816
|
+
* @return {?}
|
|
817
|
+
*/
|
|
818
|
+
function (monthNode) {
|
|
819
|
+
monthNode.days.forEach((/**
|
|
820
|
+
* @param {?} dayNode
|
|
821
|
+
* @return {?}
|
|
822
|
+
*/
|
|
823
|
+
function (dayNode) {
|
|
824
|
+
if (!dayNode.disabled) {
|
|
825
|
+
keys.push(dayNode.key);
|
|
826
|
+
}
|
|
827
|
+
}));
|
|
828
|
+
}));
|
|
829
|
+
}));
|
|
830
|
+
return keys;
|
|
831
|
+
};
|
|
832
|
+
/**
|
|
833
|
+
* @private
|
|
834
|
+
* @param {?} source
|
|
835
|
+
* @return {?}
|
|
836
|
+
*/
|
|
837
|
+
DateTreeFilterPopoverComponent.prototype.cloneSelectionMap = /**
|
|
838
|
+
* @private
|
|
839
|
+
* @param {?} source
|
|
840
|
+
* @return {?}
|
|
841
|
+
*/
|
|
842
|
+
function (source) {
|
|
843
|
+
try {
|
|
844
|
+
return source ? JSON.parse(JSON.stringify(source)) : {};
|
|
845
|
+
}
|
|
846
|
+
catch (e) {
|
|
847
|
+
return {};
|
|
848
|
+
}
|
|
849
|
+
};
|
|
850
|
+
DateTreeFilterPopoverComponent.decorators = [
|
|
851
|
+
{ type: Component, args: [{
|
|
852
|
+
selector: "rs-date-tree-filter-popover",
|
|
853
|
+
template: "<div class=\"date-tree-filter-popover\">\r\n <div class=\"popover-search\">\r\n <span class=\"search-icon\"><img src=\"/assets/img/search.svg\" alt=\"\" /></span>\r\n <input\r\n type=\"text\"\r\n [placeholder]=\"translation.SEARCH || '.SEARCH'\"\r\n [value]=\"keyword\"\r\n (input)=\"onKeywordChange($event.target.value)\"\r\n />\r\n </div>\r\n\r\n <div class=\"popover-tree\">\r\n <label class=\"tree-row all-row\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllChecked()\"\r\n [indeterminate]=\"isAllIndeterminate()\"\r\n (change)=\"toggleAllDays($event.target.checked)\"\r\n />\r\n <span class=\"row-label\">{{ translation.ALL || '.ALL' }}</span>\r\n </label>\r\n\r\n <div class=\"year-block\" *ngFor=\"let yearNode of getVisibleYears()\">\r\n <div class=\"tree-row\">\r\n <button\r\n type=\"button\"\r\n class=\"tree-toggle-btn\"\r\n (click)=\"toggleYearExpanded(yearNode); $event.stopPropagation()\"\r\n >\r\n <span class=\"tree-arrow\" [ngClass]=\"{ expanded: yearNode.expanded }\"></span>\r\n </button>\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"isYearDisabled(yearNode)\"\r\n [checked]=\"isYearChecked(yearNode)\"\r\n [indeterminate]=\"isYearIndeterminate(yearNode)\"\r\n (change)=\"toggleYear(yearNode, $event.target.checked)\"\r\n />\r\n <span class=\"row-label\">{{ yearNode.year }}</span>\r\n </div>\r\n\r\n <div class=\"month-block\" *ngIf=\"yearNode.expanded\">\r\n <div class=\"month-item\" *ngFor=\"let monthNode of yearNode.months\">\r\n <div class=\"tree-row\">\r\n <button\r\n type=\"button\"\r\n class=\"tree-toggle-btn\"\r\n (click)=\"toggleMonthExpanded(monthNode); $event.stopPropagation()\"\r\n >\r\n <span class=\"tree-arrow\" [ngClass]=\"{ expanded: monthNode.expanded }\"></span>\r\n </button>\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"isMonthDisabled(monthNode)\"\r\n [checked]=\"isMonthChecked(monthNode)\"\r\n [indeterminate]=\"isMonthIndeterminate(monthNode)\"\r\n (change)=\"toggleMonth(monthNode, $event.target.checked)\"\r\n />\r\n <span class=\"row-label\">{{ monthNode.label }}</span>\r\n </div>\r\n\r\n <div class=\"day-block\" *ngIf=\"monthNode.expanded\">\r\n <label\r\n class=\"tree-row day-row\"\r\n *ngFor=\"let dayNode of monthNode.days\"\r\n [ngClass]=\"{ disabled: dayNode.disabled }\"\r\n >\r\n <span class=\"tree-toggle-spacer\"></span>\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"dayNode.disabled\"\r\n [checked]=\"isDayChecked(dayNode)\"\r\n (change)=\"toggleDay(dayNode, $event.target.checked)\"\r\n />\r\n <span class=\"row-label\">{{ dayNode.label }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"popover-footer\">\r\n <button type=\"button\" (click)=\"clearSelection()\">\r\n {{ translation.CLEAR || '.CLEAR' }}\r\n </button>\r\n <button type=\"button\" class=\"primary-btn\" (click)=\"applySelection()\">\r\n {{ translation.APPLY || '.APPLY' }}\r\n </button>\r\n </div>\r\n</div>\r\n",
|
|
854
|
+
styles: [":host{position:fixed;left:12px;top:12px;z-index:20;width:300px}.date-tree-filter-popover{background:#fff;border:1px solid #eaedf0;border-radius:10px;box-shadow:0 0 4px rgba(0,0,0,.25);padding:4px 8px;display:flex;flex-direction:column;color:#44566c;font-family:Arial}.popover-search{position:relative;padding:4px 0 8px}.popover-search .search-icon{position:absolute;left:10px;top:10px;color:#929dab;font-size:12px;line-height:12px}.popover-search input{width:100%;height:28px;border:1px solid #eaedf0;border-radius:16px;padding:0 10px 0 28px;outline:0;font-size:12px;color:#44566c}.popover-tree{max-height:320px;overflow:auto;padding-right:2px}.tree-row{display:flex;align-items:center;min-height:24px;font-size:11px;line-height:14px;color:#44566c}.tree-row input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;margin:0 6px 0 0;box-sizing:border-box;border:1px solid #d8d8d8;border-radius:3px;background-color:#fff;cursor:pointer;vertical-align:middle;flex-shrink:0}.tree-row input[type=checkbox]:checked{border-color:#1f7bff;background-color:#1f7bff;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9' viewBox='0 0 9 9' fill='none'%3E%3Cpath d='M0.5 4.31818L3 7.5L5.75 4L8.5 0.5' stroke='white' stroke-linecap='round'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:center;background-size:9px 9px}.tree-row input[type=checkbox]:indeterminate{border-color:#1f7bff;background-color:#1f7bff;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9' viewBox='0 0 9 9' fill='none'%3E%3Cpath d='M1.5 4.5H7.5' stroke='white' stroke-width='1.2' stroke-linecap='round'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:center;background-size:9px 9px}.tree-row input[type=checkbox]:disabled{cursor:not-allowed;opacity:.5}.all-row{padding-left:20px;margin-bottom:2px}.year-block{margin-bottom:2px}.month-block{padding-left:20px}.day-block{padding-left:24px}.tree-toggle-btn{width:16px;height:16px;padding:0;margin-right:4px;border:none;background:0 0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.tree-arrow{display:inline-block;width:6px;height:6px;border-right:1px solid #6c7c90;border-bottom:1px solid #6c7c90;transform:rotate(-45deg);transition:transform .15s}.tree-arrow.expanded{transform:rotate(45deg)}.tree-toggle-spacer{width:20px;display:inline-block}.row-label{color:#44566c}.day-row.disabled .row-label{color:#adb5bd}.popover-footer{margin-top:8px;padding:12px 0 8px;border-top:1px solid #eaedf0;display:flex;justify-content:flex-end;gap:12px}.popover-footer button{min-width:56px;height:26px;padding:0 8px;border-radius:4px;border:1px solid #dbe1e7;background:#fff;font-size:11px;color:#44566c;cursor:pointer}.popover-footer .primary-btn{background:#1364b3;border-color:#1364b3;color:#fff}"]
|
|
855
|
+
}] }
|
|
856
|
+
];
|
|
857
|
+
DateTreeFilterPopoverComponent.propDecorators = {
|
|
858
|
+
field: [{ type: Input }],
|
|
859
|
+
translation: [{ type: Input }],
|
|
860
|
+
sourceRows: [{ type: Input }],
|
|
861
|
+
dateFields: [{ type: Input }],
|
|
862
|
+
selectedByField: [{ type: Input }],
|
|
863
|
+
fieldLabelMap: [{ type: Input }],
|
|
864
|
+
apply: [{ type: Output }],
|
|
865
|
+
close: [{ type: Output }]
|
|
866
|
+
};
|
|
867
|
+
return DateTreeFilterPopoverComponent;
|
|
868
|
+
}());
|
|
869
|
+
export { DateTreeFilterPopoverComponent };
|
|
870
|
+
if (false) {
|
|
871
|
+
/** @type {?} */
|
|
872
|
+
DateTreeFilterPopoverComponent.prototype.field;
|
|
873
|
+
/** @type {?} */
|
|
874
|
+
DateTreeFilterPopoverComponent.prototype.translation;
|
|
875
|
+
/** @type {?} */
|
|
876
|
+
DateTreeFilterPopoverComponent.prototype.sourceRows;
|
|
877
|
+
/** @type {?} */
|
|
878
|
+
DateTreeFilterPopoverComponent.prototype.dateFields;
|
|
879
|
+
/** @type {?} */
|
|
880
|
+
DateTreeFilterPopoverComponent.prototype.selectedByField;
|
|
881
|
+
/** @type {?} */
|
|
882
|
+
DateTreeFilterPopoverComponent.prototype.fieldLabelMap;
|
|
883
|
+
/** @type {?} */
|
|
884
|
+
DateTreeFilterPopoverComponent.prototype.apply;
|
|
885
|
+
/** @type {?} */
|
|
886
|
+
DateTreeFilterPopoverComponent.prototype.close;
|
|
887
|
+
/** @type {?} */
|
|
888
|
+
DateTreeFilterPopoverComponent.prototype.keyword;
|
|
889
|
+
/** @type {?} */
|
|
890
|
+
DateTreeFilterPopoverComponent.prototype.years;
|
|
891
|
+
/**
|
|
892
|
+
* @type {?}
|
|
893
|
+
* @private
|
|
894
|
+
*/
|
|
895
|
+
DateTreeFilterPopoverComponent.prototype.expandStateByField;
|
|
896
|
+
/**
|
|
897
|
+
* @type {?}
|
|
898
|
+
* @private
|
|
899
|
+
*/
|
|
900
|
+
DateTreeFilterPopoverComponent.prototype.workingSelectedByField;
|
|
901
|
+
}
|
|
902
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kYXRlLXRyZWUtZmlsdGVyL2RhdGUtdHJlZS1maWx0ZXItcG9wb3Zlci9pbmRleC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QjtJQUFBO1FBTVcsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFhLEVBQUUsQ0FBQztRQUMxQixvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUV2QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNoQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVqQix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IsMkJBQXNCLEdBQVEsRUFBRSxDQUFDO0lBeVozQyxDQUFDOzs7OztJQXZaQyxvREFBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFDRSxPQUFPLENBQUMsS0FBSztZQUNiLE9BQU8sQ0FBQyxVQUFVO1lBQ2xCLE9BQU8sQ0FBQyxlQUFlO1lBQ3ZCLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCO1lBQ0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDbEQsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNI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O1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7O2dCQTVhRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsb3dJQUFxQzs7aUJBRXRDOzs7d0JBRUUsS0FBSzs4QkFDTCxLQUFLOzZCQUNMLEtBQUs7NkJBQ0wsS0FBSztrQ0FDTCxLQUFLO2dDQUNMLEtBQUs7d0JBRUwsTUFBTTt3QkFDTixNQUFNOztJQStaVCxxQ0FBQztDQUFBLEFBN2FELElBNmFDO1NBeGFZLDhCQUE4Qjs7O0lBQ3pDLCtDQUFvQjs7SUFDcEIscURBQTBCOztJQUMxQixvREFBZ0M7O0lBQ2hDLG9EQUFtQzs7SUFDbkMseURBQW1DOztJQUNuQyx1REFBaUM7O0lBRWpDLCtDQUEwQzs7SUFDMUMsK0NBQTJDOztJQUUzQyxpREFBb0I7O0lBQ3BCLCtDQUF5Qjs7Ozs7SUFFekIsNERBQXFDOzs7OztJQUNyQyxnRUFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicnMtZGF0ZS10cmVlLWZpbHRlci1wb3BvdmVyXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9pbmRleC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUcmVlRmlsdGVyUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgZmllbGQgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHRyYW5zbGF0aW9uOiBhbnk7XHJcbiAgQElucHV0KCkgc291cmNlUm93czogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBkYXRlRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQnlGaWVsZDogYW55ID0ge307XHJcbiAgQElucHV0KCkgZmllbGRMYWJlbE1hcDogYW55ID0ge307XHJcblxyXG4gIEBPdXRwdXQoKSBhcHBseSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGtleXdvcmQgPSBcIlwiO1xyXG4gIHB1YmxpYyB5ZWFyczogYW55W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRTdGF0ZUJ5RmllbGQ6IGFueSA9IHt9O1xyXG4gIHByaXZhdGUgd29ya2luZ1NlbGVjdGVkQnlGaWVsZDogYW55ID0ge307XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlcy5maWVsZCB8fFxyXG4gICAgICBjaGFuZ2VzLnNvdXJjZVJvd3MgfHxcclxuICAgICAgY2hhbmdlcy5zZWxlY3RlZEJ5RmllbGQgfHxcclxuICAgICAgY2hhbmdlcy5kYXRlRmllbGRzXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5rZXl3b3JkID0gXCJcIjtcclxuICAgICAgdGhpcy53b3JraW5nU2VsZWN0ZWRCeUZpZWxkID0gdGhpcy5jbG9uZVNlbGVjdGlvbk1hcChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQnlGaWVsZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlYnVpbGRUcmVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25LZXl3b3JkQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMua2V5d29yZCA9IHZhbHVlIHx8IFwiXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmlzaWJsZVllYXJzKCk6IGFueVtdIHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSAodGhpcy5rZXl3b3JkIHx8IFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKCFzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnllYXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMueWVhcnNcclxuICAgICAgLm1hcCgoeWVhck5vZGUpID0+IHtcclxuICAgICAgICBjb25zdCB5ZWFyTWF0Y2hlZCA9XHJcbiAgICAgICAgICBTdHJpbmcoeWVhck5vZGUueWVhcikudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpID4gLTE7XHJcbiAgICAgICAgY29uc3QgbW9udGhzID0geWVhck5vZGUubW9udGhzXHJcbiAgICAgICAgICAubWFwKChtb250aE5vZGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9udGhNYXRjaGVkID1cclxuICAgICAgICAgICAgICBTdHJpbmcobW9udGhOb2RlLmxhYmVsKVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5pbmRleE9mKHNlYXJjaFRleHQpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IGRheXMgPSBtb250aE5vZGUuZGF5cy5maWx0ZXIoKGRheU5vZGUpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgU3RyaW5nKGRheU5vZGUubGFiZWwpXHJcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgIC5pbmRleE9mKHNlYXJjaFRleHQpID4gLTFcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHllYXJNYXRjaGVkIHx8IG1vbnRoTWF0Y2hlZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtb250aE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG1vbnRoTm9kZSwgeyBkYXlzOiBkYXlzIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5maWx0ZXIoKG1vbnRoTm9kZSkgPT4gbW9udGhOb2RlLmRheXMubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgaWYgKHllYXJNYXRjaGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geWVhck5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB5ZWFyTm9kZSwgeyBtb250aHM6IG1vbnRocyB9KTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigoeWVhck5vZGUpID0+IHllYXJOb2RlLm1vbnRocy5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVZZWFyRXhwYW5kZWQoeWVhck5vZGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldE9yQ3JlYXRlRXhwYW5kU3RhdGUodGhpcy5maWVsZCk7XHJcbiAgICBzdGF0ZS55ZWFyc1t5ZWFyTm9kZS5rZXldID0gIXN0YXRlLnllYXJzW3llYXJOb2RlLmtleV07XHJcbiAgICB5ZWFyTm9kZS5leHBhbmRlZCA9ICEhc3RhdGUueWVhcnNbeWVhck5vZGUua2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVNb250aEV4cGFuZGVkKG1vbnRoTm9kZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0T3JDcmVhdGVFeHBhbmRTdGF0ZSh0aGlzLmZpZWxkKTtcclxuICAgIHN0YXRlLm1vbnRoc1ttb250aE5vZGUua2V5XSA9ICFzdGF0ZS5tb250aHNbbW9udGhOb2RlLmtleV07XHJcbiAgICBtb250aE5vZGUuZXhwYW5kZWQgPSAhIXN0YXRlLm1vbnRoc1ttb250aE5vZGUua2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0FsbENoZWNrZWQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3RlZE1hcCA9IHRoaXMuZ2V0RmllbGREYXlTZWxlY3Rpb25NYXAodGhpcy5maWVsZCk7XHJcbiAgICBjb25zdCBlbmFibGVkRGF5S2V5cyA9IHRoaXMuZ2V0RW5hYmxlZERheUtleXNJbkN1cnJlbnRGaWVsZCgpO1xyXG4gICAgaWYgKCFlbmFibGVkRGF5S2V5cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuYWJsZWREYXlLZXlzLmV2ZXJ5KChrZXkpID0+ICEhc2VsZWN0ZWRNYXBba2V5XSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNBbGxJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRNYXAgPSB0aGlzLmdldEZpZWxkRGF5U2VsZWN0aW9uTWFwKHRoaXMuZmllbGQpO1xyXG4gICAgY29uc3QgZW5hYmxlZERheUtleXMgPSB0aGlzLmdldEVuYWJsZWREYXlLZXlzSW5DdXJyZW50RmllbGQoKTtcclxuICAgIGlmICghZW5hYmxlZERheUtleXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSBlbmFibGVkRGF5S2V5cy5maWx0ZXIoKGtleSkgPT4gISFzZWxlY3RlZE1hcFtrZXldKVxyXG4gICAgICAubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkQ291bnQgPiAwICYmIHNlbGVjdGVkQ291bnQgPCBlbmFibGVkRGF5S2V5cy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlQWxsRGF5cyhjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZE1hcCA9IHRoaXMuZ2V0RmllbGREYXlTZWxlY3Rpb25NYXAodGhpcy5maWVsZCk7XHJcbiAgICBjb25zdCBlbmFibGVkRGF5S2V5cyA9IHRoaXMuZ2V0RW5hYmxlZERheUtleXNJbkN1cnJlbnRGaWVsZCgpO1xyXG4gICAgZW5hYmxlZERheUtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRNYXBba2V5XSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVsZXRlIHNlbGVjdGVkTWFwW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRGF5Q2hlY2tlZChkYXlOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkTWFwID0gdGhpcy5nZXRGaWVsZERheVNlbGVjdGlvbk1hcCh0aGlzLmZpZWxkKTtcclxuICAgIHJldHVybiAhIXNlbGVjdGVkTWFwW2RheU5vZGUua2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVEYXkoZGF5Tm9kZTogYW55LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoZGF5Tm9kZS5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZE1hcCA9IHRoaXMuZ2V0RmllbGREYXlTZWxlY3Rpb25NYXAodGhpcy5maWVsZCk7XHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICBzZWxlY3RlZE1hcFtkYXlOb2RlLmtleV0gPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHNlbGVjdGVkTWFwW2RheU5vZGUua2V5XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc01vbnRoRGlzYWJsZWQobW9udGhOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBtb250aE5vZGUuZGF5cy5ldmVyeSgoZGF5Tm9kZSkgPT4gZGF5Tm9kZS5kaXNhYmxlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNNb250aENoZWNrZWQobW9udGhOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmlzTW9udGhEaXNhYmxlZChtb250aE5vZGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkTWFwID0gdGhpcy5nZXRGaWVsZERheVNlbGVjdGlvbk1hcCh0aGlzLmZpZWxkKTtcclxuICAgIGNvbnN0IGVuYWJsZWREYXlzID0gbW9udGhOb2RlLmRheXMuZmlsdGVyKChkYXlOb2RlKSA9PiAhZGF5Tm9kZS5kaXNhYmxlZCk7XHJcbiAgICByZXR1cm4gZW5hYmxlZERheXMuZXZlcnkoKGRheU5vZGUpID0+ICEhc2VsZWN0ZWRNYXBbZGF5Tm9kZS5rZXldKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc01vbnRoSW5kZXRlcm1pbmF0ZShtb250aE5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaXNNb250aERpc2FibGVkKG1vbnRoTm9kZSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRNYXAgPSB0aGlzLmdldEZpZWxkRGF5U2VsZWN0aW9uTWFwKHRoaXMuZmllbGQpO1xyXG4gICAgY29uc3QgZW5hYmxlZERheXMgPSBtb250aE5vZGUuZGF5cy5maWx0ZXIoKGRheU5vZGUpID0+ICFkYXlOb2RlLmRpc2FibGVkKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSBlbmFibGVkRGF5cy5maWx0ZXIoKGRheU5vZGUpID0+IHtcclxuICAgICAgcmV0dXJuICEhc2VsZWN0ZWRNYXBbZGF5Tm9kZS5rZXldO1xyXG4gICAgfSkubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkQ291bnQgPiAwICYmIHNlbGVjdGVkQ291bnQgPCBlbmFibGVkRGF5cy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlTW9udGgobW9udGhOb2RlOiBhbnksIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzTW9udGhEaXNhYmxlZChtb250aE5vZGUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkTWFwID0gdGhpcy5nZXRGaWVsZERheVNlbGVjdGlvbk1hcCh0aGlzLmZpZWxkKTtcclxuICAgIG1vbnRoTm9kZS5kYXlzLmZvckVhY2goKGRheU5vZGUpID0+IHtcclxuICAgICAgaWYgKGRheU5vZGUuZGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICBzZWxlY3RlZE1hcFtkYXlOb2RlLmtleV0gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RlZE1hcFtkYXlOb2RlLmtleV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzWWVhckRpc2FibGVkKHllYXJOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB5ZWFyTm9kZS5tb250aHMuZXZlcnkoKG1vbnRoTm9kZSkgPT5cclxuICAgICAgdGhpcy5pc01vbnRoRGlzYWJsZWQobW9udGhOb2RlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1llYXJDaGVja2VkKHllYXJOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmlzWWVhckRpc2FibGVkKHllYXJOb2RlKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmFibGVkTW9udGhzID0geWVhck5vZGUubW9udGhzLmZpbHRlcihcclxuICAgICAgKG1vbnRoTm9kZSkgPT4gIXRoaXMuaXNNb250aERpc2FibGVkKG1vbnRoTm9kZSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZW5hYmxlZE1vbnRocy5ldmVyeSgobW9udGhOb2RlKSA9PiB0aGlzLmlzTW9udGhDaGVja2VkKG1vbnRoTm9kZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzWWVhckluZGV0ZXJtaW5hdGUoeWVhck5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaXNZZWFyRGlzYWJsZWQoeWVhck5vZGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkTWFwID0gdGhpcy5nZXRGaWVsZERheVNlbGVjdGlvbk1hcCh0aGlzLmZpZWxkKTtcclxuICAgIGNvbnN0IGVuYWJsZWREYXlzID0gW107XHJcbiAgICB5ZWFyTm9kZS5tb250aHMuZm9yRWFjaCgobW9udGhOb2RlKSA9PiB7XHJcbiAgICAgIG1vbnRoTm9kZS5kYXlzLmZvckVhY2goKGRheU5vZGUpID0+IHtcclxuICAgICAgICBpZiAoIWRheU5vZGUuZGlzYWJsZWQpIHtcclxuICAgICAgICAgIGVuYWJsZWREYXlzLnB1c2goZGF5Tm9kZS5rZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSBlbmFibGVkRGF5cy5maWx0ZXIoKGtleSkgPT4gISFzZWxlY3RlZE1hcFtrZXldKS5sZW5ndGg7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCA8IGVuYWJsZWREYXlzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVZZWFyKHllYXJOb2RlOiBhbnksIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzWWVhckRpc2FibGVkKHllYXJOb2RlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB5ZWFyTm9kZS5tb250aHMuZm9yRWFjaCgobW9udGhOb2RlKSA9PiB7XHJcbiAgICAgIHRoaXMudG9nZ2xlTW9udGgobW9udGhOb2RlLCBjaGVja2VkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmllbGQpIHtcclxuICAgICAgdGhpcy53b3JraW5nU2VsZWN0ZWRCeUZpZWxkW3RoaXMuZmllbGRdID0ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5LmVtaXQodGhpcy5jbG9uZVNlbGVjdGlvbk1hcCh0aGlzLndvcmtpbmdTZWxlY3RlZEJ5RmllbGQpKTtcclxuICAgIHRoaXMucmVidWlsZFRyZWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseVNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwbHkuZW1pdCh0aGlzLmNsb25lU2VsZWN0aW9uTWFwKHRoaXMud29ya2luZ1NlbGVjdGVkQnlGaWVsZCkpO1xyXG4gICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVidWlsZFRyZWUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQpIHtcclxuICAgICAgdGhpcy55ZWFycyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzb3VyY2VSb3dzID0gdGhpcy5zb3VyY2VSb3dzIHx8IFtdO1xyXG4gICAgY29uc3Qgcm93c0J5T3RoZXJGaWx0ZXJzID0gdGhpcy5maWx0ZXJSb3dzQnlTZWxlY3RlZERhdGVUcmVlKFxyXG4gICAgICBzb3VyY2VSb3dzLFxyXG4gICAgICB0aGlzLmZpZWxkXHJcbiAgICApO1xyXG4gICAgY29uc3QgYXZhaWxhYmxlRGF5S2V5TWFwID0ge307XHJcbiAgICByb3dzQnlPdGhlckZpbHRlcnMuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRheUtleSA9IHRoaXMuZ2V0RGF5S2V5QnlSb3dWYWx1ZShyb3dbdGhpcy5maWVsZF0pO1xyXG4gICAgICBpZiAoZGF5S2V5KSB7XHJcbiAgICAgICAgYXZhaWxhYmxlRGF5S2V5TWFwW2RheUtleV0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBncm91cGVkTWFwID0ge307XHJcbiAgICBzb3VyY2VSb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZURhdGVWYWx1ZShyb3dbdGhpcy5maWVsZF0pO1xyXG4gICAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcclxuICAgICAgaWYgKCFncm91cGVkTWFwW3llYXJdKSB7XHJcbiAgICAgICAgZ3JvdXBlZE1hcFt5ZWFyXSA9IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghZ3JvdXBlZE1hcFt5ZWFyXVttb250aF0pIHtcclxuICAgICAgICBncm91cGVkTWFwW3llYXJdW21vbnRoXSA9IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghZ3JvdXBlZE1hcFt5ZWFyXVttb250aF1bZGF5XSkge1xyXG4gICAgICAgIGdyb3VwZWRNYXBbeWVhcl1bbW9udGhdW2RheV0gPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGdyb3VwZWRNYXBbeWVhcl1bbW9udGhdW2RheV0gKz0gMTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGV4cGFuZFN0YXRlID0gdGhpcy5nZXRPckNyZWF0ZUV4cGFuZFN0YXRlKHRoaXMuZmllbGQpO1xyXG4gICAgdGhpcy55ZWFycyA9IE9iamVjdC5rZXlzKGdyb3VwZWRNYXApXHJcbiAgICAgIC5tYXAoKGtleSkgPT4gTnVtYmVyKGtleSkpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSlcclxuICAgICAgLm1hcCgoeWVhcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1vbnRocyA9IE9iamVjdC5rZXlzKGdyb3VwZWRNYXBbeWVhcl0pXHJcbiAgICAgICAgICAubWFwKChrZXkpID0+IE51bWJlcihrZXkpKVxyXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKVxyXG4gICAgICAgICAgLm1hcCgobW9udGgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9udGhLZXkgPSB5ZWFyICsgXCItXCIgKyB0aGlzLnBhZDIobW9udGgpO1xyXG4gICAgICAgICAgICBpZiAoZXhwYW5kU3RhdGUubW9udGhzW21vbnRoS2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgZXhwYW5kU3RhdGUubW9udGhzW21vbnRoS2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZGF5cyA9IE9iamVjdC5rZXlzKGdyb3VwZWRNYXBbeWVhcl1bbW9udGhdKVxyXG4gICAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gTnVtYmVyKGtleSkpXHJcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKVxyXG4gICAgICAgICAgICAgIC5tYXAoKGRheSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5S2V5ID0gdGhpcy50b0RheUtleSh5ZWFyLCBtb250aCwgZGF5KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRheURhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICBrZXk6IGRheUtleSxcclxuICAgICAgICAgICAgICAgICAgZGF5OiBkYXksXHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBtb21lbnQoZGF5RGF0ZSkuZm9ybWF0KFwiRCBNTU0gWVlZWVwiKSxcclxuICAgICAgICAgICAgICAgICAgY291bnQ6IGdyb3VwZWRNYXBbeWVhcl1bbW9udGhdW2RheV0sXHJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhYXZhaWxhYmxlRGF5S2V5TWFwW2RheUtleV0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGtleTogbW9udGhLZXksXHJcbiAgICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBtb21lbnQoKVxyXG4gICAgICAgICAgICAgICAgLm1vbnRoKG1vbnRoIC0gMSlcclxuICAgICAgICAgICAgICAgIC5mb3JtYXQoXCJNTU1cIiksXHJcbiAgICAgICAgICAgICAgZXhwYW5kZWQ6ICEhZXhwYW5kU3RhdGUubW9udGhzW21vbnRoS2V5XSxcclxuICAgICAgICAgICAgICBkYXlzOiBkYXlzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgeWVhcktleSA9IFN0cmluZyh5ZWFyKTtcclxuICAgICAgICBpZiAoZXhwYW5kU3RhdGUueWVhcnNbeWVhcktleV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZXhwYW5kU3RhdGUueWVhcnNbeWVhcktleV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAga2V5OiB5ZWFyS2V5LFxyXG4gICAgICAgICAgeWVhcjogeWVhcixcclxuICAgICAgICAgIGV4cGFuZGVkOiAhIWV4cGFuZFN0YXRlLnllYXJzW3llYXJLZXldLFxyXG4gICAgICAgICAgbW9udGhzOiBtb250aHMsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlclJvd3NCeVNlbGVjdGVkRGF0ZVRyZWUocm93czogYW55W10sIGV4Y2x1ZGVGaWVsZD86IHN0cmluZykge1xyXG4gICAgbGV0IGZpbHRlcmVkUm93cyA9IHJvd3MgPyByb3dzLnNsaWNlKCkgOiBbXTtcclxuICAgICh0aGlzLmRhdGVGaWVsZHMgfHwgW10pLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChleGNsdWRlRmllbGQgJiYgZmllbGQgPT09IGV4Y2x1ZGVGaWVsZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzZWxlY3RlZE1hcCA9IHRoaXMuZ2V0RmllbGREYXlTZWxlY3Rpb25NYXAoZmllbGQpO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZE1hcCk7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRLZXlzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBmaWx0ZXJlZFJvd3MgPSBmaWx0ZXJlZFJvd3MuZmlsdGVyKChyb3cpID0+IHtcclxuICAgICAgICBjb25zdCBkYXlLZXkgPSB0aGlzLmdldERheUtleUJ5Um93VmFsdWUocm93W2ZpZWxkXSk7XHJcbiAgICAgICAgcmV0dXJuIGRheUtleSA/ICEhc2VsZWN0ZWRNYXBbZGF5S2V5XSA6IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkUm93cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VEYXRlVmFsdWUodmFsdWU6IGFueSk6IERhdGUge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFyc2VkID0gbW9tZW50KFxyXG4gICAgICB2YWx1ZSxcclxuICAgICAgW1xyXG4gICAgICAgIFwiWVlZWS1NTS1ERFwiLFxyXG4gICAgICAgIFwiTU0vREQvWVlZWVwiLFxyXG4gICAgICAgIFwiREQvTU0vWVlZWVwiLFxyXG4gICAgICAgIFwiWVlZWS9NTS9ERFwiLFxyXG4gICAgICAgIFwiREQtTU1NLVlZWVlcIixcclxuICAgICAgICBcIk1NTSBERCwgWVlZWVwiLFxyXG4gICAgICAgIG1vbWVudC5JU09fODYwMSxcclxuICAgICAgXSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHJldHVybiBwYXJzZWQudG9EYXRlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmYWxsYmFjayA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgIHJldHVybiBpc05hTihmYWxsYmFjay5nZXRUaW1lKCkpID8gbnVsbCA6IGZhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPckNyZWF0ZUV4cGFuZFN0YXRlKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5leHBhbmRTdGF0ZUJ5RmllbGRbZmllbGRdKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kU3RhdGVCeUZpZWxkW2ZpZWxkXSA9IHsgeWVhcnM6IHt9LCBtb250aHM6IHt9IH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5leHBhbmRTdGF0ZUJ5RmllbGRbZmllbGRdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZERheVNlbGVjdGlvbk1hcChmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMud29ya2luZ1NlbGVjdGVkQnlGaWVsZFtmaWVsZF0pIHtcclxuICAgICAgdGhpcy53b3JraW5nU2VsZWN0ZWRCeUZpZWxkW2ZpZWxkXSA9IHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud29ya2luZ1NlbGVjdGVkQnlGaWVsZFtmaWVsZF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvRGF5S2V5KHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB5ZWFyICsgXCItXCIgKyB0aGlzLnBhZDIobW9udGgpICsgXCItXCIgKyB0aGlzLnBhZDIoZGF5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFkMih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IFwiMFwiICsgdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREYXlLZXlCeVJvd1ZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlRGF0ZVZhbHVlKHZhbHVlKTtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRvRGF5S2V5KFxyXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbmFibGVkRGF5S2V5c0luQ3VycmVudEZpZWxkKCkge1xyXG4gICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgdGhpcy55ZWFycy5mb3JFYWNoKCh5ZWFyTm9kZSkgPT4ge1xyXG4gICAgICB5ZWFyTm9kZS5tb250aHMuZm9yRWFjaCgobW9udGhOb2RlKSA9PiB7XHJcbiAgICAgICAgbW9udGhOb2RlLmRheXMuZm9yRWFjaCgoZGF5Tm9kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXlOb2RlLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGtleXMucHVzaChkYXlOb2RlLmtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvbmVTZWxlY3Rpb25NYXAoc291cmNlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBzb3VyY2UgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNvdXJjZSkpIDoge307XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|