@skyux/datetime 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/bundles/skyux-datetime.umd.js +1321 -948
- package/bundles/skyux-datetime.umd.js.map +1 -1
- package/bundles/skyux-datetime.umd.min.js +2 -2
- package/bundles/skyux-datetime.umd.min.js.map +1 -1
- package/esm2015/modules/date-range-picker/date-range-picker.component.js +1 -1
- package/esm2015/modules/datepicker/datepicker-calendar-change.js +1 -0
- package/esm2015/modules/datepicker/datepicker-calendar-inner.component.js +30 -4
- package/esm2015/modules/datepicker/datepicker-calendar.component.js +15 -2
- package/esm2015/modules/datepicker/datepicker-custom-date.js +1 -0
- package/esm2015/modules/datepicker/datepicker-date.js +1 -1
- package/esm2015/modules/datepicker/datepicker-input-fuzzy.directive.js +10 -6
- package/esm2015/modules/datepicker/datepicker-input.directive.js +1 -1
- package/esm2015/modules/datepicker/datepicker.component.js +52 -7
- package/esm2015/modules/datepicker/datepicker.module.js +20 -9
- package/esm2015/modules/datepicker/datepicker.service.js +20 -0
- package/esm2015/modules/datepicker/daypicker-button.component.js +26 -0
- package/esm2015/modules/datepicker/daypicker-cell.component.js +131 -0
- package/esm2015/modules/datepicker/daypicker.component.js +96 -4
- package/esm2015/modules/datepicker/fuzzy-date.service.js +11 -1
- package/esm2015/modules/datepicker/monthpicker.component.js +1 -1
- package/esm2015/modules/datepicker/yearpicker.component.js +1 -1
- package/esm2015/modules/timepicker/timepicker.component.js +7 -4
- package/esm2015/modules/timepicker/timepicker.directive.js +3 -2
- package/esm2015/public_api.js +1 -1
- package/esm2015/skyux-datetime.js +6 -3
- package/esm5/modules/date-range-picker/date-range-picker.component.js +1 -1
- package/esm5/modules/datepicker/datepicker-calendar-change.js +1 -0
- package/esm5/modules/datepicker/datepicker-calendar-inner.component.js +30 -4
- package/esm5/modules/datepicker/datepicker-calendar.component.js +15 -2
- package/esm5/modules/datepicker/datepicker-custom-date.js +1 -0
- package/esm5/modules/datepicker/datepicker-date.js +1 -1
- package/esm5/modules/datepicker/datepicker-input-fuzzy.directive.js +10 -6
- package/esm5/modules/datepicker/datepicker-input.directive.js +1 -1
- package/esm5/modules/datepicker/datepicker.component.js +53 -7
- package/esm5/modules/datepicker/datepicker.module.js +20 -9
- package/esm5/modules/datepicker/datepicker.service.js +21 -0
- package/esm5/modules/datepicker/daypicker-button.component.js +27 -0
- package/esm5/modules/datepicker/daypicker-cell.component.js +134 -0
- package/esm5/modules/datepicker/daypicker.component.js +100 -4
- package/esm5/modules/datepicker/fuzzy-date.service.js +11 -1
- package/esm5/modules/datepicker/monthpicker.component.js +1 -1
- package/esm5/modules/datepicker/yearpicker.component.js +1 -1
- package/esm5/modules/timepicker/timepicker.component.js +7 -4
- package/esm5/modules/timepicker/timepicker.directive.js +3 -2
- package/esm5/public_api.js +1 -1
- package/esm5/skyux-datetime.js +6 -3
- package/fesm2015/skyux-datetime.js +1397 -1036
- package/fesm2015/skyux-datetime.js.map +1 -1
- package/fesm5/skyux-datetime.js +1316 -945
- package/fesm5/skyux-datetime.js.map +1 -1
- package/modules/datepicker/datepicker-calendar-change.d.ts +24 -0
- package/modules/datepicker/datepicker-calendar-inner.component.d.ts +12 -2
- package/modules/datepicker/datepicker-calendar.component.d.ts +6 -0
- package/modules/datepicker/datepicker-custom-date.d.ts +21 -0
- package/modules/datepicker/datepicker-date.d.ts +2 -0
- package/modules/datepicker/datepicker-input-fuzzy.directive.d.ts +1 -0
- package/modules/datepicker/datepicker-input.directive.d.ts +1 -1
- package/modules/datepicker/datepicker.component.d.ts +15 -1
- package/modules/datepicker/datepicker.service.d.ts +12 -0
- package/modules/datepicker/daypicker-button.component.d.ts +13 -0
- package/modules/datepicker/daypicker-cell.component.d.ts +37 -0
- package/modules/datepicker/daypicker.component.d.ts +17 -2
- package/modules/datepicker/fuzzy-date.service.d.ts +5 -1
- package/modules/timepicker/timepicker.component.d.ts +2 -1
- package/package.json +3 -2
- package/public_api.d.ts +2 -0
- package/skyux-datetime.d.ts +5 -2
- package/skyux-datetime.metadata.json +1 -1
- package/src/assets/img/guidelines/date-range-picker/content-error.png +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
3
|
+
import { SkyPopoverMessageType } from '@skyux/popovers';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';
|
|
7
|
+
import { SkyDatepickerService } from './datepicker.service';
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
let SkyDayPickerCellComponent = class SkyDayPickerCellComponent {
|
|
12
|
+
constructor(datepicker, datepickerService) {
|
|
13
|
+
this.datepicker = datepicker;
|
|
14
|
+
this.datepickerService = datepickerService;
|
|
15
|
+
this.hasTooltip = false;
|
|
16
|
+
this.popoverController = new Subject();
|
|
17
|
+
this.activeUid = '';
|
|
18
|
+
this.cancelPopover = false;
|
|
19
|
+
this.popoverOpen = false;
|
|
20
|
+
this.ngUnsubscribe = new Subject();
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.hasTooltip =
|
|
24
|
+
this.date.keyDate &&
|
|
25
|
+
this.date.keyDateText &&
|
|
26
|
+
this.date.keyDateText.length > 0 &&
|
|
27
|
+
this.date.keyDateText[0].length > 0;
|
|
28
|
+
// show the tooltip if this is the active date and is not the
|
|
29
|
+
// initial active date (activeDateHasChanged)
|
|
30
|
+
if (this.datepicker.isActive(this.date) &&
|
|
31
|
+
this.activeDateHasChanged &&
|
|
32
|
+
this.hasTooltip) {
|
|
33
|
+
this.activeUid = this.date.uid;
|
|
34
|
+
this.showTooltip();
|
|
35
|
+
}
|
|
36
|
+
if (this.hasTooltip) {
|
|
37
|
+
this.datepickerService.keyDatePopoverStream
|
|
38
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
39
|
+
.subscribe(date => {
|
|
40
|
+
if (date) {
|
|
41
|
+
this.activeUid = date.uid;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.activeUid = '';
|
|
45
|
+
}
|
|
46
|
+
// If this day has an open popover and they have moved off of the day close the popover.
|
|
47
|
+
if (this.date.uid !== this.activeUid) {
|
|
48
|
+
this.hideTooltip();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
this.ngUnsubscribe.next();
|
|
55
|
+
this.ngUnsubscribe.complete();
|
|
56
|
+
}
|
|
57
|
+
onDayMouseenter() {
|
|
58
|
+
this.cancelPopover = false;
|
|
59
|
+
if (this.hasTooltip) {
|
|
60
|
+
this.showTooltip();
|
|
61
|
+
this.datepickerService.keyDatePopoverStream.next(this.date);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
onDayMouseleave() {
|
|
65
|
+
this.cancelPopover = true;
|
|
66
|
+
if (this.hasTooltip) {
|
|
67
|
+
this.hideTooltip();
|
|
68
|
+
}
|
|
69
|
+
this.datepickerService.keyDatePopoverStream.next(undefined);
|
|
70
|
+
}
|
|
71
|
+
onPopoverClosed() {
|
|
72
|
+
this.popoverOpen = false;
|
|
73
|
+
}
|
|
74
|
+
onPopoverOpened() {
|
|
75
|
+
this.popoverOpen = true;
|
|
76
|
+
/* istanbul ignore else */
|
|
77
|
+
if (this.cancelPopover) {
|
|
78
|
+
// If the popover gets opened just as a mouseout event happens, close it.
|
|
79
|
+
this.hideTooltip();
|
|
80
|
+
this.cancelPopover = false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
getKeyDateLabel() {
|
|
84
|
+
if (this.hasTooltip) {
|
|
85
|
+
return this.date.keyDateText.join(', ');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return '';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
hideTooltip() {
|
|
92
|
+
/* istanbul ignore else */
|
|
93
|
+
if (this.popoverOpen) {
|
|
94
|
+
this.popoverController.next({ type: SkyPopoverMessageType.Close });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
showTooltip() {
|
|
98
|
+
/* istanbul ignore else */
|
|
99
|
+
if (this.hasTooltip &&
|
|
100
|
+
!this.popoverOpen) {
|
|
101
|
+
/**
|
|
102
|
+
* Delay 1/2 second before opening the popover as long as mouse hasn't moved off the date.
|
|
103
|
+
*/
|
|
104
|
+
setTimeout(() => {
|
|
105
|
+
if (!this.cancelPopover &&
|
|
106
|
+
this.activeUid === this.date.uid) {
|
|
107
|
+
this.popoverController.next({ type: SkyPopoverMessageType.Open });
|
|
108
|
+
}
|
|
109
|
+
}, 500);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
SkyDayPickerCellComponent.ctorParameters = () => [
|
|
114
|
+
{ type: SkyDatepickerCalendarInnerComponent },
|
|
115
|
+
{ type: SkyDatepickerService }
|
|
116
|
+
];
|
|
117
|
+
__decorate([
|
|
118
|
+
Input()
|
|
119
|
+
], SkyDayPickerCellComponent.prototype, "activeDateHasChanged", void 0);
|
|
120
|
+
__decorate([
|
|
121
|
+
Input()
|
|
122
|
+
], SkyDayPickerCellComponent.prototype, "date", void 0);
|
|
123
|
+
SkyDayPickerCellComponent = __decorate([
|
|
124
|
+
Component({
|
|
125
|
+
selector: 'sky-daypicker-cell',
|
|
126
|
+
template: "<div *ngIf=\"hasTooltip\"\n class=\"sky-daypicker-cell\"\n [attr.aria-label]=\"getKeyDateLabel()\"\n [skyPopover]=\"dayInfoPopover\"\n skyPopoverPlacement=\"left\"\n [skyPopoverMessageStream]=\"popoverController\"\n (mouseenter)=\"onDayMouseenter()\"\n (mouseleave)=\"onDayMouseleave()\"\n>\n <ng-container *ngTemplateOutlet=\"daypickerButtonTemplateRef\"></ng-container>\n <sky-popover\n (popoverClosed)=\"onPopoverClosed()\"\n (popoverOpened)=\"onPopoverOpened()\"\n #dayInfoPopover\n >\n <div *ngFor=\"let text of date.keyDateText\">\n {{text}}\n </div>\n </sky-popover>\n</div>\n<div *ngIf=\"!hasTooltip\"\n class=\"sky-daypicker-cell\"\n (mouseenter)=\"onDayMouseenter()\"\n (mouseleave)=\"onDayMouseleave()\"\n>\n <ng-container *ngTemplateOutlet=\"daypickerButtonTemplateRef\"></ng-container>\n</div>\n\n<ng-template #daypickerButtonTemplateRef>\n <sky-daypicker-button\n [date]=\"date\"\n >\n </sky-daypicker-button>\n</ng-template>\n",
|
|
127
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
128
|
+
})
|
|
129
|
+
], SkyDayPickerCellComponent);
|
|
130
|
+
export { SkyDayPickerCellComponent };
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2RhdGV0aW1lLyIsInNvdXJjZXMiOlsibW9kdWxlcy9kYXRlcGlja2VyL2RheXBpY2tlci1jZWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTCxxQkFBcUIsRUFDdEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLE9BQU8sRUFDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxtQ0FBbUMsRUFDcEMsTUFBTSx1Q0FBdUMsQ0FBQztBQU0vQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3JCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUI7O0dBRUc7QUFNSCxJQUFhLHlCQUF5QixHQUF0QyxNQUFhLHlCQUF5QjtJQTBCcEMsWUFDVSxVQUErQyxFQUMvQyxpQkFBdUM7UUFEdkMsZUFBVSxHQUFWLFVBQVUsQ0FBcUM7UUFDL0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQWQxQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTVCLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBRXBELGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0Isa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBS3pDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztnQkFDckIsSUFBSSxDQUFDLElBQUks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QUFXO1FBQ2pCLDBCQUEwQjtRQUMxQixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUNqQjtZQUNBOztlQUVHO1lBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWE7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQ2hDO29CQUNBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDbkU7WUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7Q0FDRixDQUFBOztZQTdHdUIsbUNBQW1DO1lBQzVCLG9CQUFvQjs7QUF0QmpEO0lBREMsS0FBSyxFQUFFO3VFQUM2QjtBQU1yQztJQURDLEtBQUssRUFBRTt1REFDdUI7QUFacEIseUJBQXlCO0lBTHJDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxvQkFBb0I7UUFDOUIsaytCQUE0QztRQUM1QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtLQUNoRCxDQUFDO0dBQ1cseUJBQXlCLENBd0lyQztTQXhJWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIFNreVBvcG92ZXJNZXNzYWdlLFxuICBTa3lQb3BvdmVyTWVzc2FnZVR5cGVcbn0gZnJvbSAnQHNreXV4L3BvcG92ZXJzJztcblxuaW1wb3J0IHtcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnRcbn0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7XG4gIFNreURhdGVwaWNrZXJEYXRlXG59IGZyb20gJy4vZGF0ZXBpY2tlci1kYXRlJztcblxuaW1wb3J0IHtcbiAgU2t5RGF0ZXBpY2tlclNlcnZpY2Vcbn0gZnJvbSAnLi9kYXRlcGlja2VyLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF5cGlja2VyLWNlbGwnLFxuICB0ZW1wbGF0ZVVybDogJ2RheXBpY2tlci1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF5UGlja2VyQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGlmIHRoZSBhY3RpdmUgZGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFjdGl2ZURhdGVIYXNDaGFuZ2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgdGhpcyBwaWNrZXIgY2VsbCB3aWxsIHJlcHJlc2VudCBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0ZTogU2t5RGF0ZXBpY2tlckRhdGU7XG5cbiAgcHVibGljIGhhc1Rvb2x0aXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgcG9wb3ZlckNvbnRyb2xsZXIgPSBuZXcgU3ViamVjdDxTa3lQb3BvdmVyTWVzc2FnZT4oKTtcblxuICBwcml2YXRlIGFjdGl2ZVVpZDogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBjYW5jZWxQb3BvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZXBpY2tlcjogU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBkYXRlcGlja2VyU2VydmljZTogU2t5RGF0ZXBpY2tlclNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc1Rvb2x0aXAgPVxuICAgICAgdGhpcy5kYXRlLmtleURhdGUgJiZcbiAgICAgIHRoaXMuZGF0ZS5rZXlEYXRlVGV4dCAmJlxuICAgICAgdGhpcy5kYXRlLmtleURhdGVUZXh0Lmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuZGF0ZS5rZXlEYXRlVGV4dFswXS5sZW5ndGggPiAwO1xuXG4gICAgLy8gc2hvdyB0aGUgdG9vbHRpcCBpZiB0aGlzIGlzIHRoZSBhY3RpdmUgZGF0ZSBhbmQgaXMgbm90IHRoZVxuICAgIC8vIGluaXRpYWwgYWN0aXZlIGRhdGUgKGFjdGl2ZURhdGVIYXNDaGFuZ2VkKVxuICAgIGlmIChcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5pc0FjdGl2ZSh0aGlzLmRhdGUpICYmXG4gICAgICB0aGlzLmFjdGl2ZURhdGVIYXNDaGFuZ2VkICYmXG4gICAgICB0aGlzLmhhc1Rvb2x0aXBcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZlVWlkID0gdGhpcy5kYXRlLnVpZDtcbiAgICAgIHRoaXMuc2hvd1Rvb2x0aXAoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNUb29sdGlwKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJTZXJ2aWNlLmtleURhdGVQb3BvdmVyU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVVaWQgPSBkYXRlLnVpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVVpZCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoaXMgZGF5IGhhcyBhbiBvcGVuIHBvcG92ZXIgYW5kIHRoZXkgaGF2ZSBtb3ZlZCBvZmYgb2YgdGhlIGRheSBjbG9zZSB0aGUgcG9wb3Zlci5cbiAgICAgICAgaWYgKHRoaXMuZGF0ZS51aWQgIT09IHRoaXMuYWN0aXZlVWlkKSB7XG4gICAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRGF5TW91c2VlbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbFBvcG92ZXIgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5oYXNUb29sdGlwKSB7XG4gICAgICB0aGlzLnNob3dUb29sdGlwKCk7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJTZXJ2aWNlLmtleURhdGVQb3BvdmVyU3RyZWFtLm5leHQodGhpcy5kYXRlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25EYXlNb3VzZWxlYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsUG9wb3ZlciA9IHRydWU7XG4gICAgaWYgKHRoaXMuaGFzVG9vbHRpcCkge1xuICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgIH1cbiAgICB0aGlzLmRhdGVwaWNrZXJTZXJ2aWNlLmtleURhdGVQb3BvdmVyU3RyZWFtLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5wb3BvdmVyT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uUG9wb3Zlck9wZW5lZCgpOiB2b2lkIHtcbiAgICB0aGlzLnBvcG92ZXJPcGVuID0gdHJ1ZTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNhbmNlbFBvcG92ZXIpIHtcbiAgICAgIC8vIElmIHRoZSBwb3BvdmVyIGdldHMgb3BlbmVkIGp1c3QgYXMgYSBtb3VzZW91dCBldmVudCBoYXBwZW5zLCBjbG9zZSBpdC5cbiAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgIHRoaXMuY2FuY2VsUG9wb3ZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRLZXlEYXRlTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNUb29sdGlwKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmtleURhdGVUZXh0LmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhpZGVUb29sdGlwKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMucG9wb3Zlck9wZW4pIHtcbiAgICAgIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIubmV4dCh7IHR5cGU6IFNreVBvcG92ZXJNZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dUb29sdGlwKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgdGhpcy5oYXNUb29sdGlwICYmXG4gICAgICAhdGhpcy5wb3BvdmVyT3BlblxuICAgICkge1xuICAgICAgLyoqXG4gICAgICAgKiBEZWxheSAxLzIgc2Vjb25kIGJlZm9yZSBvcGVuaW5nIHRoZSBwb3BvdmVyIGFzIGxvbmcgYXMgbW91c2UgaGFzbid0IG1vdmVkIG9mZiB0aGUgZGF0ZS5cbiAgICAgICAqL1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jYW5jZWxQb3BvdmVyICYmXG4gICAgICAgICAgdGhpcy5hY3RpdmVVaWQgPT09IHRoaXMuZGF0ZS51aWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5uZXh0KHsgdHlwZTogU2t5UG9wb3Zlck1lc3NhZ2VUeXBlLk9wZW4gfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { Component } from '@angular/core';
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
3
4
|
import { SkyDatepickerCalendarInnerComponent } from './datepicker-calendar-inner.component';
|
|
4
5
|
/**
|
|
5
6
|
* @internal
|
|
6
7
|
*/
|
|
7
8
|
let SkyDayPickerComponent = class SkyDayPickerComponent {
|
|
8
9
|
constructor(datepicker) {
|
|
10
|
+
this.calendarDateRangeChange = new EventEmitter();
|
|
11
|
+
this.isWaiting = false;
|
|
9
12
|
this.labels = [];
|
|
10
13
|
this.rows = [];
|
|
11
14
|
this.weekNumbers = [];
|
|
15
|
+
this.activeDateHasChanged = false;
|
|
12
16
|
this.daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
17
|
+
this.ngUnsubscribe = new Subject();
|
|
13
18
|
this.datepicker = datepicker;
|
|
14
19
|
}
|
|
20
|
+
set customDates(value) {
|
|
21
|
+
/* istanbul ignore else */
|
|
22
|
+
if (value) {
|
|
23
|
+
this.applyCustomDates(value, this.rows);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
15
26
|
ngOnInit() {
|
|
16
27
|
this.datepicker.stepDay = { months: 1 };
|
|
28
|
+
this.initialDate = this.datepicker.activeDate.getDate();
|
|
17
29
|
this.datepicker.setRefreshViewHandler(() => {
|
|
18
30
|
this.refreshDayView();
|
|
19
31
|
}, 'day');
|
|
@@ -23,6 +35,10 @@ let SkyDayPickerComponent = class SkyDayPickerComponent {
|
|
|
23
35
|
}, 'day');
|
|
24
36
|
this.datepicker.refreshView();
|
|
25
37
|
}
|
|
38
|
+
ngOnDestroy() {
|
|
39
|
+
this.ngUnsubscribe.next();
|
|
40
|
+
this.ngUnsubscribe.complete();
|
|
41
|
+
}
|
|
26
42
|
getDates(startDate, n) {
|
|
27
43
|
let dates = new Array(n);
|
|
28
44
|
let current = new Date(startDate.getTime());
|
|
@@ -50,6 +66,9 @@ let SkyDayPickerComponent = class SkyDayPickerComponent {
|
|
|
50
66
|
? 7 - difference
|
|
51
67
|
: -difference;
|
|
52
68
|
let firstDate = new Date(firstDayOfMonth.getTime());
|
|
69
|
+
if (this.datepicker.activeDate.getDate() !== this.initialDate) {
|
|
70
|
+
this.activeDateHasChanged = true;
|
|
71
|
+
}
|
|
53
72
|
/* istanbul ignore else */
|
|
54
73
|
/* sanity check */
|
|
55
74
|
if (numDisplayedFromPreviousMonth > 0) {
|
|
@@ -71,7 +90,15 @@ let SkyDayPickerComponent = class SkyDayPickerComponent {
|
|
|
71
90
|
}
|
|
72
91
|
this.title =
|
|
73
92
|
this.datepicker.dateFilter(this.datepicker.activeDate, this.datepicker.formatDayTitle);
|
|
93
|
+
const oldDateRange = this.getDateRange(this.rows);
|
|
74
94
|
this.rows = this.datepicker.createCalendarRows(pickerDates, 7);
|
|
95
|
+
const newDateRange = this.getDateRange(this.rows);
|
|
96
|
+
if (!this.dateRangeRowsAreEqual(oldDateRange, newDateRange)) {
|
|
97
|
+
this.calendarDateRangeChange.next({
|
|
98
|
+
startDate: newDateRange.startDate,
|
|
99
|
+
endDate: newDateRange.endDate
|
|
100
|
+
});
|
|
101
|
+
}
|
|
75
102
|
}
|
|
76
103
|
keydownDays(key, event) {
|
|
77
104
|
let date = this.datepicker.activeDate.getDate();
|
|
@@ -107,16 +134,81 @@ let SkyDayPickerComponent = class SkyDayPickerComponent {
|
|
|
107
134
|
return month === 1 && year % 4 === 0 &&
|
|
108
135
|
(year % 400 === 0 || year % 100 !== 0) ? 29 : this.daysInMonth[month];
|
|
109
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Applies custom date properties to the existing dates displayed in the calendar.
|
|
139
|
+
*/
|
|
140
|
+
applyCustomDates(customDates, dateRows) {
|
|
141
|
+
let date;
|
|
142
|
+
let newDate;
|
|
143
|
+
let dateIndex;
|
|
144
|
+
/* istanbul ignore else */
|
|
145
|
+
if (customDates && dateRows) {
|
|
146
|
+
customDates.forEach(customDate => {
|
|
147
|
+
dateIndex = -1;
|
|
148
|
+
dateRows.forEach(row => {
|
|
149
|
+
if (dateIndex === -1) {
|
|
150
|
+
dateIndex = row.findIndex(d => {
|
|
151
|
+
return d.date.getTime() === customDate.date.getTime();
|
|
152
|
+
});
|
|
153
|
+
if (dateIndex > -1) {
|
|
154
|
+
date = row[dateIndex];
|
|
155
|
+
// Replace the date with a new instance so the display gets updated.
|
|
156
|
+
newDate = {
|
|
157
|
+
current: date.current,
|
|
158
|
+
date: date.date,
|
|
159
|
+
disabled: !!date.disabled || !!customDate.disabled,
|
|
160
|
+
keyDate: !!customDate.keyDate || !!date.keyDate,
|
|
161
|
+
keyDateText: customDate.keyDateText || date.keyDateText,
|
|
162
|
+
label: date.label,
|
|
163
|
+
secondary: date.secondary,
|
|
164
|
+
selected: date.selected,
|
|
165
|
+
uid: date.uid
|
|
166
|
+
};
|
|
167
|
+
row[dateIndex] = newDate;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
dateRangeRowsAreEqual(rangeA, rangeB) {
|
|
175
|
+
/* istanbul ignore if */
|
|
176
|
+
if (!rangeA && !rangeB) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
else if ((rangeA && !rangeB) || (!rangeA && rangeB)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
return this.compareDays(rangeA.startDate, rangeB.startDate) === 0 &&
|
|
183
|
+
this.compareDays(rangeA.endDate, rangeB.endDate) === 0;
|
|
184
|
+
}
|
|
185
|
+
getDateRange(rows) {
|
|
186
|
+
if (rows && rows.length > 0) {
|
|
187
|
+
return {
|
|
188
|
+
startDate: rows[0][0].date,
|
|
189
|
+
endDate: rows[rows.length - 1][rows[rows.length - 1].length - 1].date
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
110
193
|
};
|
|
111
194
|
SkyDayPickerComponent.ctorParameters = () => [
|
|
112
195
|
{ type: SkyDatepickerCalendarInnerComponent }
|
|
113
196
|
];
|
|
197
|
+
__decorate([
|
|
198
|
+
Input()
|
|
199
|
+
], SkyDayPickerComponent.prototype, "customDates", null);
|
|
200
|
+
__decorate([
|
|
201
|
+
Output()
|
|
202
|
+
], SkyDayPickerComponent.prototype, "calendarDateRangeChange", void 0);
|
|
203
|
+
__decorate([
|
|
204
|
+
Input()
|
|
205
|
+
], SkyDayPickerComponent.prototype, "isWaiting", void 0);
|
|
114
206
|
SkyDayPickerComponent = __decorate([
|
|
115
207
|
Component({
|
|
116
208
|
selector: 'sky-daypicker',
|
|
117
|
-
template: "<div *ngIf=\"datepicker.datepickerMode === 'day'\"\n class=\"sky-daypicker-wrapper\"\n>\n
|
|
118
|
-
styles: [".sky-theme-modern :host:focus
|
|
209
|
+
template: "<div *ngIf=\"datepicker.datepickerMode === 'day'\"\n class=\"sky-daypicker-wrapper\"\n>\n <table\n class=\"sky-daypicker-table\"\n role=\"grid\"\n [attr.aria-labelledby]=\"datepicker.datepickerId+'-title'\"\n [attr.aria-activedescendant]=\"datepicker.activeDateId\"\n >\n <thead>\n <tr>\n <th\n class=\"sky-datepicker-header-left\"\n scope=\"col\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-previous\"\n (click)=\"datepicker.moveCalendar($event, -1)\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n >\n <sky-icon\n class=\"sky-datepicker-chevron-default\"\n icon=\"chevron-left\"\n ></sky-icon>\n <sky-icon\n class=\"sky-datepicker-chevron-modern\"\n icon=\"chevron-left\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </th>\n <th\n scope=\"col\"\n [attr.colspan]=\"5\"\n >\n <button\n [id]=\"datepicker.datepickerId + '-title'\"\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-calendar-title\"\n (click)=\"datepicker.toggleModeCalendar($event)\"\n [disabled]=\"datepicker.datepickerMode === datepicker.maxMode\"\n [ngClass]=\"{'sky-btn-disabled': datepicker.datepickerMode === datepicker.maxMode}\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n >\n <strong>{{title}}</strong>\n </button>\n </th>\n <th\n class=\"sky-datepicker-header-right\"\n scope=\"col\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-next\"\n (click)=\"datepicker.moveCalendar($event, 1)\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n >\n <sky-icon\n class=\"sky-datepicker-chevron-default\"\n icon=\"chevron-right\"\n ></sky-icon>\n <sky-icon\n class=\"sky-datepicker-chevron-modern\"\n icon=\"chevron-right\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </th>\n </tr>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let label of labels\"\n class=\"sky-datepicker-center sky-datepicker-weekdays\">\n <small [attr.aria-label]=\"label.full\">\n <b>{{label.abbr}}</b>\n </small>\n </th>\n </tr>\n </thead>\n <tbody>\n <!-- Wait indicator for async custom date stream -->\n <sky-wait\n [isWaiting]=\"isWaiting\"\n >\n </sky-wait>\n <ng-template\n ngFor\n [ngForOf]=\"rows\"\n let-row=\"$implicit\"\n let-index=\"index\"\n >\n <tr role=\"row\">\n <td *ngFor=\"let date of row\"\n class=\"sky-datepicker-center\"\n role=\"gridcell\"\n [id]=\"date.uid\"\n >\n <sky-daypicker-cell\n [activeDateHasChanged]=\"activeDateHasChanged\"\n [date]=\"date\"\n >\n </sky-daypicker-cell>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n</div>\n",
|
|
210
|
+
styles: [":host-context(.sky-theme-modern) :host:focus{outline:0}.sky-theme-modern :host:focus{outline:0}"]
|
|
119
211
|
})
|
|
120
212
|
], SkyDayPickerComponent);
|
|
121
213
|
export { SkyDayPickerComponent };
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9kYXRldGltZS8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvZGF0ZXBpY2tlci9kYXlwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxtQ0FBbUMsRUFDcEMsTUFBTSx1Q0FBdUMsQ0FBQztBQU0vQzs7R0FFRztBQU1ILElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBV2hDLFlBQW1CLFVBQStDO1FBVDNELFdBQU0sR0FBVSxFQUFFLENBQUM7UUFFbkIsU0FBSSxHQUFvQyxFQUFFLENBQUM7UUFDM0MsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFJMUIsZ0JBQVcsR0FBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBR3BGLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxRQUFRO1FBRWIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVWLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBVyxFQUFFLEtB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RUFBRTtZQUN6QixJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1Y7YUFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FDdEMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDaEQsT0FBTyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNsQyxDQUFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0NBRUYsQ0FBQTs7WUF6SGdDLG1DQUFtQzs7QUFYdkQscUJBQXFCO0lBTGpDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxlQUFlO1FBQ3pCLDB1SEFBdUM7O0tBRXhDLENBQUM7R0FDVyxxQkFBcUIsQ0FvSWpDO1NBcElZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnRcbn0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7XG4gIFNreURhdGVwaWNrZXJEYXRlXG59IGZyb20gJy4vZGF0ZXBpY2tlci1kYXRlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWRheXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnZGF5cGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF5cGlja2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF5UGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgbGFiZWxzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIHJvd3M6IEFycmF5PEFycmF5PFNreURhdGVwaWNrZXJEYXRlPj4gPSBbXTtcbiAgcHVibGljIHdlZWtOdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgZGF0ZXBpY2tlcjogU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQ7XG4gIHB1YmxpYyBDVVJSRU5UX1RIRU1FX1RFTVBMQVRFOiBhbnk7XG5cbiAgcHJpdmF0ZSBkYXlzSW5Nb250aDogQXJyYXk8bnVtYmVyPiA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoZGF0ZXBpY2tlcjogU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIgPSBkYXRlcGlja2VyO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5kYXRlcGlja2VyLnN0ZXBEYXkgPSB7bW9udGhzOiAxfTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRSZWZyZXNoVmlld0hhbmRsZXIoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoRGF5VmlldygpO1xuICAgIH0sICdkYXknKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRDb21wYXJlSGFuZGxlcih0aGlzLmNvbXBhcmVEYXlzLCAnZGF5Jyk7XG5cbiAgICB0aGlzLmRhdGVwaWNrZXIuc2V0S2V5ZG93bkhhbmRsZXIoKGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgdGhpcy5rZXlkb3duRGF5cyhrZXksIGV2ZW50KTtcbiAgICB9LCAnZGF5Jyk7XG5cbiAgICB0aGlzLmRhdGVwaWNrZXIucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREYXRlcyhzdGFydERhdGU6IERhdGUsIG46IG51bWJlcik6IERhdGVbXSB7XG4gICAgbGV0IGRhdGVzOiBEYXRlW10gPSBuZXcgQXJyYXkobik7XG4gICAgbGV0IGN1cnJlbnQgPSBuZXcgRGF0ZShzdGFydERhdGUuZ2V0VGltZSgpKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGRhdGU6IERhdGU7XG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoY3VycmVudC5nZXRUaW1lKCkpO1xuICAgICAgZGF0ZSA9IHRoaXMuZGF0ZXBpY2tlci5maXhUaW1lWm9uZShkYXRlKTtcbiAgICAgIGRhdGVzW2krK10gPSBkYXRlO1xuICAgICAgY3VycmVudCA9IG5ldyBEYXRlKGN1cnJlbnQuZ2V0RnVsbFllYXIoKSwgY3VycmVudC5nZXRNb250aCgpLCBjdXJyZW50LmdldERhdGUoKSArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZXM7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVEYXlzKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XG4gICAgbGV0IGQxID0gbmV3IERhdGUoZGF0ZTEuZ2V0RnVsbFllYXIoKSwgZGF0ZTEuZ2V0TW9udGgoKSwgZGF0ZTEuZ2V0RGF0ZSgpKTtcbiAgICBsZXQgZDIgPSBuZXcgRGF0ZShkYXRlMi5nZXRGdWxsWWVhcigpLCBkYXRlMi5nZXRNb250aCgpLCBkYXRlMi5nZXREYXRlKCkpO1xuICAgIHJldHVybiBkMS5nZXRUaW1lKCkgLSBkMi5nZXRUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hEYXlWaWV3KCkge1xuICAgIGxldCB5ZWFyID0gdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBsZXQgbW9udGggPSB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCBmaXJzdERheU9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XG4gICAgbGV0IGRpZmZlcmVuY2UgPSB0aGlzLmRhdGVwaWNrZXIuc3RhcnRpbmdEYXkgLSBmaXJzdERheU9mTW9udGguZ2V0RGF5KCk7XG4gICAgbGV0IG51bURpc3BsYXllZEZyb21QcmV2aW91c01vbnRoID0gKGRpZmZlcmVuY2UgPiAwKVxuICAgICAgPyA3IC0gZGlmZmVyZW5jZVxuICAgICAgOiAtZGlmZmVyZW5jZTtcbiAgICBsZXQgZmlyc3REYXRlID0gbmV3IERhdGUoZmlyc3REYXlPZk1vbnRoLmdldFRpbWUoKSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmIChudW1EaXNwbGF5ZWRGcm9tUHJldmlvdXNNb250aCA+IDApIHtcbiAgICAgIGZpcnN0RGF0ZS5zZXREYXRlKC1udW1EaXNwbGF5ZWRGcm9tUHJldmlvdXNNb250aCArIDEpO1xuICAgIH1cblxuICAgIC8vIDQyIGlzIHRoZSBudW1iZXIgb2YgZGF5cyBvbiBhIHNpeC13ZWVrIGNhbGVuZGFyXG4gICAgbGV0IGRheXM6IERhdGVbXSA9IHRoaXMuZ2V0RGF0ZXMoZmlyc3REYXRlLCA0Mik7XG4gICAgbGV0IHBpY2tlckRhdGVzOiBBcnJheTxTa3lEYXRlcGlja2VyRGF0ZT4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQyOyBpKyspIHtcbiAgICAgIGxldCBfZGF0ZU9iamVjdCA9IHRoaXMuZGF0ZXBpY2tlci5jcmVhdGVEYXRlT2JqZWN0KFxuICAgICAgICBkYXlzW2ldLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0RGF5LFxuICAgICAgICBkYXlzW2ldLmdldE1vbnRoKCkgIT09IG1vbnRoLFxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZGF0ZXBpY2tlcklkICsgJy0nICsgaVxuICAgICAgKTtcbiAgICAgIHBpY2tlckRhdGVzW2ldID0gX2RhdGVPYmplY3Q7XG4gICAgfVxuXG4gICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDc7IGorKykge1xuICAgICAgdGhpcy5sYWJlbHNbal0gPSB7fTtcbiAgICAgIHRoaXMubGFiZWxzW2pdLmFiYnIgPVxuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZGF0ZUZpbHRlcihwaWNrZXJEYXRlc1tqXS5kYXRlLCB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0RGF5SGVhZGVyKTtcbiAgICAgIHRoaXMubGFiZWxzW2pdLmZ1bGwgPSB0aGlzLmRhdGVwaWNrZXIuZGF0ZUZpbHRlcihwaWNrZXJEYXRlc1tqXS5kYXRlLCAnRUVFRScpO1xuICAgIH1cblxuICAgIHRoaXMudGl0bGUgPVxuICAgICAgdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXIodGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUsIHRoaXMuZGF0ZXBpY2tlci5mb3JtYXREYXlUaXRsZSk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5kYXRlcGlja2VyLmNyZWF0ZUNhbGVuZGFyUm93cyhwaWNrZXJEYXRlcywgNyk7XG4gIH1cblxuICBwcml2YXRlIGtleWRvd25EYXlzKGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgaWYgKGtleSA9PT0gJ2xlZnQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSAtIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICd1cCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlIC0gNztcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgZGF0ZSA9IGRhdGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZG93bicpIHtcbiAgICAgIGRhdGUgPSBkYXRlICsgNztcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3BhZ2V1cCcgfHwga2V5ID09PSAncGFnZWRvd24nKSB7XG4gICAgICBsZXQgbW9udGggPSB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgKGtleSA9PT0gJ3BhZ2V1cCcgPyAtIDEgOiAxKTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLnNldE1vbnRoKG1vbnRoLCAxKTtcbiAgICAgIGRhdGUgPVxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRNb250aCgpXG4gICAgICAgICksXG4gICAgICAgIGRhdGUpO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaG9tZScpIHtcbiAgICAgIGRhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW5kJykge1xuICAgICAgZGF0ZSA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldE1vbnRoKClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLnNldERhdGUoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldERheXNJbk1vbnRoKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlcikge1xuICAgIHJldHVybiBtb250aCA9PT0gMSAmJiB5ZWFyICUgNCA9PT0gMCAmJlxuICAgICAgKHllYXIgJSA0MDAgPT09IDAgfHwgeWVhciAlIDEwMCAhPT0gMCkgPyAyOSA6IHRoaXMuZGF5c0luTW9udGhbbW9udGhdO1xuICB9XG5cbn1cbiJdfQ==
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9kYXRldGltZS8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvZGF0ZXBpY2tlci9kYXlwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsbUNBQW1DLEVBQ3BDLE1BQU0sdUNBQXVDLENBQUM7QUEwQi9DOztHQUVHO0FBTUgsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUE0QmhDLFlBQ0UsVUFBK0M7UUFsQjFDLDRCQUF1QixHQUE4QyxJQUFJLFlBQVksRUFBK0IsQ0FBQztRQUdySCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLFdBQU0sR0FBVSxFQUFFLENBQUM7UUFFbkIsU0FBSSxHQUFvQyxFQUFFLENBQUM7UUFDM0MsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFHM0IseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXJDLGdCQUFXLEdBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU5RSxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFLMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQTdCRCxJQUFXLFdBQVcsQ0FBQyxLQUFnQztRQUNyRCwwQkFBMEI7UUFDMUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJ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LElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRTtZQUNyRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFxQztRQUN4RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQ3RFLENBQUM7U0FDSDtJQUNILENBQUM7Q0FFRixDQUFBOztZQTVNZSxtQ0FBbUM7O0FBMUJqRDtJQURDLEtBQUssRUFBRTt3REFNUDtBQUdEO0lBREMsTUFBTSxFQUFFO3NFQUNtSDtBQUc1SDtJQURDLEtBQUssRUFBRTt3REFDMEI7QUFkdkIscUJBQXFCO0lBTGpDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxlQUFlO1FBQ3pCLDRwSEFBdUM7O0tBRXhDLENBQUM7R0FDVyxxQkFBcUIsQ0F5T2pDO1NBek9ZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgU2t5RGF0ZXBpY2tlckNhbGVuZGFySW5uZXJDb21wb25lbnRcbn0gZnJvbSAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7XG4gIFNreURhdGVwaWNrZXJDdXN0b21EYXRlXG59IGZyb20gJy4vZGF0ZXBpY2tlci1jdXN0b20tZGF0ZSc7XG5cbmltcG9ydCB7XG4gIFNreURhdGVwaWNrZXJEYXRlXG59IGZyb20gJy4vZGF0ZXBpY2tlci1kYXRlJztcblxuaW1wb3J0IHtcbiAgU2t5RGF0ZXBpY2tlckNhbGVuZGFyQ2hhbmdlXG59IGZyb20gJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1jaGFuZ2UnO1xuXG4vKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgdG8gY29tcGFyZSBkYXRlIHJhbmdlcy5cbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5RGF0ZVJhbmdlIHtcblxuICBzdGFydERhdGU6IERhdGU7XG5cbiAgZW5kRGF0ZTogRGF0ZTtcblxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF5cGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICdkYXlwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXlwaWNrZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXlQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjdXN0b21EYXRlcyh2YWx1ZTogU2t5RGF0ZXBpY2tlckN1c3RvbURhdGVbXSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmFwcGx5Q3VzdG9tRGF0ZXModmFsdWUsIHRoaXMucm93cyk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjYWxlbmRhckRhdGVSYW5nZUNoYW5nZTogRXZlbnRFbWl0dGVyPFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFNreURhdGVwaWNrZXJDYWxlbmRhckNoYW5nZT4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNXYWl0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGxhYmVsczogYW55W10gPSBbXTtcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyByb3dzOiBBcnJheTxBcnJheTxTa3lEYXRlcGlja2VyRGF0ZT4+ID0gW107XG4gIHB1YmxpYyB3ZWVrTnVtYmVyczogbnVtYmVyW10gPSBbXTtcbiAgcHVibGljIGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50O1xuICBwdWJsaWMgQ1VSUkVOVF9USEVNRV9URU1QTEFURTogYW55O1xuICBwdWJsaWMgYWN0aXZlRGF0ZUhhc0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGRheXNJbk1vbnRoOiBBcnJheTxudW1iZXI+ID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuICBwcml2YXRlIGluaXRpYWxEYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGVwaWNrZXI6IFNreURhdGVwaWNrZXJDYWxlbmRhcklubmVyQ29tcG9uZW50XG4gICkge1xuICAgIHRoaXMuZGF0ZXBpY2tlciA9IGRhdGVwaWNrZXI7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyLnN0ZXBEYXkgPSB7bW9udGhzOiAxfTtcbiAgICB0aGlzLmluaXRpYWxEYXRlID0gdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgdGhpcy5kYXRlcGlja2VyLnNldFJlZnJlc2hWaWV3SGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hEYXlWaWV3KCk7XG4gICAgfSwgJ2RheScpO1xuXG4gICAgdGhpcy5kYXRlcGlja2VyLnNldENvbXBhcmVIYW5kbGVyKHRoaXMuY29tcGFyZURheXMsICdkYXknKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRLZXlkb3duSGFuZGxlcigoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmtleWRvd25EYXlzKGtleSwgZXZlbnQpO1xuICAgIH0sICdkYXknKTtcblxuICAgIHRoaXMuZGF0ZXBpY2tlci5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0ZXMoc3RhcnREYXRlOiBEYXRlLCBuOiBudW1iZXIpOiBEYXRlW10ge1xuICAgIGxldCBkYXRlczogRGF0ZVtdID0gbmV3IEFycmF5KG4pO1xuICAgIGxldCBjdXJyZW50ID0gbmV3IERhdGUoc3RhcnREYXRlLmdldFRpbWUoKSk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBkYXRlOiBEYXRlO1xuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnQuZ2V0VGltZSgpKTtcbiAgICAgIGRhdGUgPSB0aGlzLmRhdGVwaWNrZXIuZml4VGltZVpvbmUoZGF0ZSk7XG4gICAgICBkYXRlc1tpKytdID0gZGF0ZTtcbiAgICAgIGN1cnJlbnQgPSBuZXcgRGF0ZShjdXJyZW50LmdldEZ1bGxZZWFyKCksIGN1cnJlbnQuZ2V0TW9udGgoKSwgY3VycmVudC5nZXREYXRlKCkgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlRGF5cyhkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpOiBudW1iZXIge1xuICAgIGxldCBkMSA9IG5ldyBEYXRlKGRhdGUxLmdldEZ1bGxZZWFyKCksIGRhdGUxLmdldE1vbnRoKCksIGRhdGUxLmdldERhdGUoKSk7XG4gICAgbGV0IGQyID0gbmV3IERhdGUoZGF0ZTIuZ2V0RnVsbFllYXIoKSwgZGF0ZTIuZ2V0TW9udGgoKSwgZGF0ZTIuZ2V0RGF0ZSgpKTtcbiAgICByZXR1cm4gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoRGF5VmlldygpIHtcbiAgICBsZXQgeWVhciA9IHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0TW9udGgoKTtcbiAgICBsZXQgZmlyc3REYXlPZk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuICAgIGxldCBkaWZmZXJlbmNlID0gdGhpcy5kYXRlcGlja2VyLnN0YXJ0aW5nRGF5IC0gZmlyc3REYXlPZk1vbnRoLmdldERheSgpO1xuICAgIGxldCBudW1EaXNwbGF5ZWRGcm9tUHJldmlvdXNNb250aCA9IChkaWZmZXJlbmNlID4gMClcbiAgICAgID8gNyAtIGRpZmZlcmVuY2VcbiAgICAgIDogLWRpZmZlcmVuY2U7XG4gICAgbGV0IGZpcnN0RGF0ZSA9IG5ldyBEYXRlKGZpcnN0RGF5T2ZNb250aC5nZXRUaW1lKCkpO1xuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldERhdGUoKSAhPT0gdGhpcy5pbml0aWFsRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlSGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICBpZiAobnVtRGlzcGxheWVkRnJvbVByZXZpb3VzTW9udGggPiAwKSB7XG4gICAgICBmaXJzdERhdGUuc2V0RGF0ZSgtbnVtRGlzcGxheWVkRnJvbVByZXZpb3VzTW9udGggKyAxKTtcbiAgICB9XG5cbiAgICAvLyA0MiBpcyB0aGUgbnVtYmVyIG9mIGRheXMgb24gYSBzaXgtd2VlayBjYWxlbmRhclxuICAgIGxldCBkYXlzOiBEYXRlW10gPSB0aGlzLmdldERhdGVzKGZpcnN0RGF0ZSwgNDIpO1xuICAgIGxldCBwaWNrZXJEYXRlczogQXJyYXk8U2t5RGF0ZXBpY2tlckRhdGU+ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MjsgaSsrKSB7XG4gICAgICBsZXQgX2RhdGVPYmplY3QgPSB0aGlzLmRhdGVwaWNrZXIuY3JlYXRlRGF0ZU9iamVjdChcbiAgICAgICAgZGF5c1tpXSxcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLmZvcm1hdERheSxcbiAgICAgICAgZGF5c1tpXS5nZXRNb250aCgpICE9PSBtb250aCxcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLmRhdGVwaWNrZXJJZCArICctJyArIGlcbiAgICAgICk7XG4gICAgICBwaWNrZXJEYXRlc1tpXSA9IF9kYXRlT2JqZWN0O1xuICAgIH1cblxuICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgIHRoaXMubGFiZWxzW2pdID0ge307XG4gICAgICB0aGlzLmxhYmVsc1tqXS5hYmJyID1cbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXIocGlja2VyRGF0ZXNbal0uZGF0ZSwgdGhpcy5kYXRlcGlja2VyLmZvcm1hdERheUhlYWRlcik7XG4gICAgICB0aGlzLmxhYmVsc1tqXS5mdWxsID0gdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXIocGlja2VyRGF0ZXNbal0uZGF0ZSwgJ0VFRUUnKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpdGxlID1cbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5kYXRlRmlsdGVyKHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLCB0aGlzLmRhdGVwaWNrZXIuZm9ybWF0RGF5VGl0bGUpO1xuXG4gICAgY29uc3Qgb2xkRGF0ZVJhbmdlID0gdGhpcy5nZXREYXRlUmFuZ2UodGhpcy5yb3dzKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLmRhdGVwaWNrZXIuY3JlYXRlQ2FsZW5kYXJSb3dzKHBpY2tlckRhdGVzLCA3KTtcbiAgICBjb25zdCBuZXdEYXRlUmFuZ2UgPSB0aGlzLmdldERhdGVSYW5nZSh0aGlzLnJvd3MpO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVSYW5nZVJvd3NBcmVFcXVhbChvbGREYXRlUmFuZ2UsIG5ld0RhdGVSYW5nZSkpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJEYXRlUmFuZ2VDaGFuZ2UubmV4dCh7XG4gICAgICAgIHN0YXJ0RGF0ZTogbmV3RGF0ZVJhbmdlLnN0YXJ0RGF0ZSxcbiAgICAgICAgZW5kRGF0ZTogbmV3RGF0ZVJhbmdlLmVuZERhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUga2V5ZG93bkRheXMoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXREYXRlKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICBpZiAoa2V5ID09PSAnbGVmdCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlIC0gMTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3VwJykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSA3O1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncmlnaHQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdkb3duJykge1xuICAgICAgZGF0ZSA9IGRhdGUgKyA3O1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncGFnZXVwJyB8fCBrZXkgPT09ICdwYWdlZG93bicpIHtcbiAgICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldE1vbnRoKCkgKyAoa2V5ID09PSAncGFnZXVwJyA/IC0gMSA6IDEpO1xuICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuc2V0TW9udGgobW9udGgsIDEpO1xuICAgICAgZGF0ZSA9XG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICB0aGlzLmRhdGVwaWNrZXIuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci5hY3RpdmVEYXRlLmdldE1vbnRoKClcbiAgICAgICAgKSxcbiAgICAgICAgZGF0ZSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdob21lJykge1xuICAgICAgZGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbmQnKSB7XG4gICAgICBkYXRlID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuZ2V0TW9udGgoKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5kYXRlcGlja2VyLmFjdGl2ZURhdGUuc2V0RGF0ZShkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF5c0luTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG1vbnRoID09PSAxICYmIHllYXIgJSA0ID09PSAwICYmXG4gICAgICAoeWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgMTAwICE9PSAwKSA/IDI5IDogdGhpcy5kYXlzSW5Nb250aFttb250aF07XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBjdXN0b20gZGF0ZSBwcm9wZXJ0aWVzIHRvIHRoZSBleGlzdGluZyBkYXRlcyBkaXNwbGF5ZWQgaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUN1c3RvbURhdGVzKFxuICAgIGN1c3RvbURhdGVzOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZVtdLFxuICAgIGRhdGVSb3dzOiBTa3lEYXRlcGlja2VyRGF0ZVtdW11cbiAgKTogdm9pZCB7XG4gICAgbGV0IGRhdGU6IFNreURhdGVwaWNrZXJEYXRlO1xuICAgIGxldCBuZXdEYXRlOiBTa3lEYXRlcGlja2VyRGF0ZTtcbiAgICBsZXQgZGF0ZUluZGV4OiBudW1iZXI7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjdXN0b21EYXRlcyAmJiBkYXRlUm93cykge1xuICAgICAgY3VzdG9tRGF0ZXMuZm9yRWFjaChjdXN0b21EYXRlID0+IHtcbiAgICAgICAgZGF0ZUluZGV4ID0gLTE7XG4gICAgICAgIGRhdGVSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICBpZiAoZGF0ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZGF0ZUluZGV4ID0gcm93LmZpbmRJbmRleChkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZS5nZXRUaW1lKCkgPT09IGN1c3RvbURhdGUuZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkYXRlSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICBkYXRlID0gcm93W2RhdGVJbmRleF07XG4gICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGRhdGUgd2l0aCBhIG5ldyBpbnN0YW5jZSBzbyB0aGUgZGlzcGxheSBnZXRzIHVwZGF0ZWQuXG4gICAgICAgICAgICAgIG5ld0RhdGUgPSB7XG4gICAgICAgICAgICAgICAgY3VycmVudDogZGF0ZS5jdXJyZW50LFxuICAgICAgICAgICAgICAgIGRhdGU6IGRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogISFkYXRlLmRpc2FibGVkIHx8ICEhY3VzdG9tRGF0ZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBrZXlEYXRlOiAhIWN1c3RvbURhdGUua2V5RGF0ZSB8fCAhIWRhdGUua2V5RGF0ZSxcbiAgICAgICAgICAgICAgICBrZXlEYXRlVGV4dDogY3VzdG9tRGF0ZS5rZXlEYXRlVGV4dCB8fCBkYXRlLmtleURhdGVUZXh0LFxuICAgICAgICAgICAgICAgIGxhYmVsOiBkYXRlLmxhYmVsLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeTogZGF0ZS5zZWNvbmRhcnksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGRhdGUuc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgdWlkOiBkYXRlLnVpZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByb3dbZGF0ZUluZGV4XSA9IG5ld0RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGF0ZVJhbmdlUm93c0FyZUVxdWFsKHJhbmdlQTogU2t5RGF0ZVJhbmdlLCByYW5nZUI6IFNreURhdGVSYW5nZSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcmFuZ2VBICYmICFyYW5nZUIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHJhbmdlQSAmJiAhcmFuZ2VCKSB8fCAoIXJhbmdlQSAmJiByYW5nZUIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZURheXMocmFuZ2VBLnN0YXJ0RGF0ZSwgcmFuZ2VCLnN0YXJ0RGF0ZSkgPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURheXMocmFuZ2VBLmVuZERhdGUsIHJhbmdlQi5lbmREYXRlKSA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlKHJvd3M6IEFycmF5PEFycmF5PFNreURhdGVwaWNrZXJEYXRlPj4pOiBTa3lEYXRlUmFuZ2UgfCB1bmRlZmluZWQge1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnREYXRlOiByb3dzWzBdWzBdLmRhdGUsXG4gICAgICAgIGVuZERhdGU6IHJvd3Nbcm93cy5sZW5ndGggLSAxXVtyb3dzW3Jvd3MubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gMV0uZGF0ZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
@@ -41,6 +41,9 @@ let SkyFuzzyDateService = class SkyFuzzyDateService {
|
|
|
41
41
|
* If not provided, the locale will be taken from the browser's default locale.
|
|
42
42
|
*/
|
|
43
43
|
format(fuzzyDate, format, locale) {
|
|
44
|
+
if (!locale) {
|
|
45
|
+
locale = this.currentLocale;
|
|
46
|
+
}
|
|
44
47
|
if (!this.isFuzzyDateValid(fuzzyDate)) {
|
|
45
48
|
return '';
|
|
46
49
|
}
|
|
@@ -90,6 +93,10 @@ let SkyFuzzyDateService = class SkyFuzzyDateService {
|
|
|
90
93
|
const day = fuzzyDate.day || 1;
|
|
91
94
|
return moment([year, month, day]);
|
|
92
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Gets a string instance of a fuzzy date.
|
|
98
|
+
* @deprecated Deprecated in favor of the `format` function.
|
|
99
|
+
*/
|
|
93
100
|
getStringFromFuzzyDate(fuzzyDate, dateFormat) {
|
|
94
101
|
if (!fuzzyDate || !dateFormat) {
|
|
95
102
|
return;
|
|
@@ -341,6 +348,9 @@ let SkyFuzzyDateService = class SkyFuzzyDateService {
|
|
|
341
348
|
* year only
|
|
342
349
|
*/
|
|
343
350
|
isFuzzyDateValid(fuzzyDate) {
|
|
351
|
+
if (!fuzzyDate) {
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
344
354
|
// If none of the dates part are specified, return false.
|
|
345
355
|
if (!fuzzyDate.day && !fuzzyDate.month && !fuzzyDate.year) {
|
|
346
356
|
return false;
|
|
@@ -363,4 +373,4 @@ SkyFuzzyDateService = __decorate([
|
|
|
363
373
|
Injectable()
|
|
364
374
|
], SkyFuzzyDateService);
|
|
365
375
|
export { SkyFuzzyDateService };
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2RhdGV0aW1lLyIsInNvdXJjZXMiOlsibW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFVBQVUsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCxPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBcUJ2Qjs7R0FFRztBQUVILElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBTTlCLFlBQ1UsY0FBb0M7UUFBcEMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FBSHRDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUsxQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRTthQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIs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QUQvQixVQUFVLEVBQUU7R0FDQSxtQkFBbUIsQ0FpYS9CO1NBamFZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgU2t5QXBwTG9jYWxlUHJvdmlkZXJcbn0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQge1xuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICB0YWtlVW50aWxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBTa3lGdXp6eURhdGVcbn0gZnJvbSAnLi9mdXp6eS1kYXRlJztcblxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreURhdGVJbmRleGVzIHtcbiAgeWVhckluZGV4OiBudW1iZXI7XG4gIG1vbnRoSW5kZXg6IG51bWJlcjtcbiAgZGF5SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreUZ1enp5RGF0ZVJhbmdlIHtcbiAgeWVhcnM6IHN0cmluZztcbiAgbW9udGhzOiBzdHJpbmc7XG4gIGRheXM6IHN0cmluZztcbiAgdmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwcml2YXRlIGN1cnJlbnRMb2NhbGU6IHN0cmluZztcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyXG4gICkge1xuICAgIHRoaXMubG9jYWxlUHJvdmlkZXIuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxvY2FsZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2hvcnQgZm9ybWF0IG9mIHRoZSBwcm92aWRlZCBsb2NhbGUuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGxvY2FsZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRMb2NhbGVTaG9ydEZvcm1hdChsb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBtb21lbnQubG9jYWxlRGF0YShsb2NhbGUgfHwgdGhpcy5jdXJyZW50TG9jYWxlKS5sb25nRGF0ZUZvcm1hdCgnTCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBmdXp6eSBkYXRlIGJ5IHVzaW5nIHRoZSBwcm92aWRlZCBmb3JtYXQgYW5kIGxvY2FsZSBzdHJpbmdzLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0KGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLCBmb3JtYXQ6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc0Z1enp5RGF0ZVZhbGlkKGZ1enp5RGF0ZSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZ2V0RGF0ZVNlcGFyYXRvcihmb3JtYXQpO1xuICAgIGxldCBkYXRlUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGZvcm1hdFRva2Vuczogc3RyaW5nW10gPSBmb3JtYXQuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgdGhpcy5jdXJyZW50TG9jYWxlO1xuICAgIGxldCBmdXp6eURhdGVNb21lbnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKS5sb2NhbGUobG9jYWxlKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmb3JtYXRUb2tlbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGZvcm1hdFRva2Vuc1tpbmRleF07XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgICAgICBzd2l0Y2ggKHRva2VuLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLnllYXIpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goXG4gICAgICAgICAgICAgICAgZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgaWYgKGZ1enp5RGF0ZS5tb250aCkge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChcbiAgICAgICAgICAgICAgICBmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLmRheSkge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChcbiAgICAgICAgICAgICAgICBmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBhcnRzLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHllYXJzIHdpbGwgZGVmYXVsdCB0byBjdXJyZW50IHllYXI7IG1vbnRocyB3aWxsIGRlZmF1bHQgdG8gSmFudWFyeTtcbiAgICogZGF5cyB3aWxsIGRlZmF1bHQgdG8gMXN0IG9mIHRoZSBtb250aC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogYW55IHtcbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBmdXp6eURhdGUueWVhciB8fCB0aGlzLmdldERlZmF1bHRZZWFyKGZ1enp5RGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBmdXp6eURhdGUubW9udGggPiAwID8gKGZ1enp5RGF0ZS5tb250aCAtIDEpIDogMDtcbiAgICBjb25zdCBkYXkgPSBmdXp6eURhdGUuZGF5IHx8IDE7XG5cbiAgICByZXR1cm4gbW9tZW50KFt5ZWFyLCBtb250aCwgZGF5XSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RyaW5nRnJvbUZ1enp5RGF0ZShmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSwgZGF0ZUZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWZ1enp5RGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuZ2V0RGF0ZUZvcm1hdEluZGV4ZXMoZGF0ZUZvcm1hdCk7XG4gICAgbGV0IGRhdGVTdHJpbmc6IHN0cmluZyA9ICcnO1xuXG4gICAgLy8gR2V0IHRoZSBjb21wb25lbnRzIG9mIHRoZSBkYXRlIGluIHRoZSBvcmRlciBleHBlY3RlZCBvZiB0aGUgbG9jYWwgZm9ybWF0LlxuICAgIGxldCBkYXRlQ29tcG9uZW50cyA9IFtcbiAgICAgIHsgdmFsdWU6IGZ1enp5RGF0ZS55ZWFyIHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggfSxcbiAgICAgIHsgdmFsdWU6IGZ1enp5RGF0ZS5tb250aCB8fCAwLCBpbmRleDogZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCB9LFxuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLmRheSB8fCAwLCBpbmRleDogZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXggfVxuICAgIF07XG4gICAgZGF0ZUNvbXBvbmVudHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcblxuICAgIGRhdGVDb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGlmIChjb21wb25lbnQudmFsdWUgPiAwICYmIGNvbXBvbmVudC5pbmRleCA+IC0xKSB7XG4gICAgICAgIGlmIChkYXRlU3RyaW5nKSB7XG4gICAgICAgICAgZGF0ZVN0cmluZyArPSBzZXBhcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZVN0cmluZyArPSBjb21wb25lbnQudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRlU3RyaW5nLnRyaW0oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVGcm9tU2VsZWN0ZWREYXRlKHNlbGVjdGVkRGF0ZTogRGF0ZSwgZGF0ZUZvcm1hdDogc3RyaW5nKTogU2t5RnV6enlEYXRlIHtcbiAgICBpZiAoIXNlbGVjdGVkRGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSA9IHt9O1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy5nZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZnV6enlEYXRlLnllYXIgPSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgZnV6enlEYXRlLmRheSA9IHNlbGVjdGVkRGF0ZS5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggPiAtMSkge1xuICAgICAgZnV6enlEYXRlLm1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxOyAvLyBnZXRNb250aCgpIGlzIDAtaW5kZXhlZC5cbiAgICB9XG5cbiAgICByZXR1cm4gZnV6enlEYXRlO1xuICB9XG5cbiAgcHVibGljIGdldEZ1enp5RGF0ZUZyb21TdHJpbmcoZGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lGdXp6eURhdGUge1xuICAgIGlmICghZGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBkYXk6IGFueTtcbiAgICBsZXQgbW9udGg6IGFueTtcbiAgICBsZXQgeWVhcjogYW55O1xuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSB0aGlzLmdldERhdGVDb21wb25lbnRzKGRhdGUpO1xuICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLmdldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZSwgZGF0ZUZvcm1hdCk7XG5cbiAgICAvLyBMb29rIGF0IHRoZSBkYXRlIHN0cmluZydzIGNvbXBvbmVudCBjb3VudDpcbiAgICAvLyAzIGluZGljYXRlcyBhIGZ1bGwgZGF0ZVxuICAgIC8vIDIgaW5kaWNhdGVzIGEgbW9udGgteWVhciBvciBtb250aC1kYXkgZGF0ZVxuICAgIC8vIDEgaW5kaWNhdGVzIGEgeWVhclxuICAgIC8vIE90aGVyIGluZGljYXRlcyBhIHByb2JsZW1cbiAgICBzd2l0Y2ggKGRhdGVDb21wb25lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMzpcbiAgICAgIHllYXIgPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLnllYXJJbmRleF07XG4gICAgICBtb250aCA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMubW9udGhJbmRleF07XG4gICAgICBkYXkgPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLmRheUluZGV4XTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIC8vIEZpcnN0LCBjaGVjayBmb3IgYSA0LWRpZ2l0IHllYXIuIElmIHllYXIgZXhpc3RzLCB0aGVuIHdlIGFzc3VtZSB0aGUgb3RoZXIgY29tcG9uZW50XG4gICAgICAvLyBpcyB0aGUgbW9udGguIE90aGVyd2lzZSwgd2UgY2FuIGFzc3VtZSB0aGUgaW5wdXQgaXMgbW0vZGQgb3IgbW0veXkgKDItZGlnaXQgeWVhcikuXG4gICAgICB5ZWFyID0gdGhpcy5nZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZSk7XG4gICAgICBpZiAoeWVhcikge1xuICAgICAgICBtb250aCA9IGRhdGVDb21wb25lbnRzWzBdID09PSB5ZWFyLnRvU3RyaW5nKCkgPyBkYXRlQ29tcG9uZW50c1sxXSA6IGRhdGVDb21wb25lbnRzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgICAgIC8vIG1tL2RkXG4gICAgICAgICAgbW9udGggPSAoaW5kZXhlcy5tb250aEluZGV4IDwgaW5kZXhlcy5kYXlJbmRleCkgPyBkYXRlQ29tcG9uZW50c1swXSA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIGRheSA9IChtb250aCA9PT0gZGF0ZUNvbXBvbmVudHNbMV0pID8gZGF0ZUNvbXBvbmVudHNbMF0gOiBkYXRlQ29tcG9uZW50c1sxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBtbS95eVxuICAgICAgICAgIG1vbnRoID0gKGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMueWVhckluZGV4KSA/IGRhdGVDb21wb25lbnRzWzBdIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgeWVhciA9IChtb250aCA9PT0gZGF0ZUNvbXBvbmVudHNbMV0pID8gZGF0ZUNvbXBvbmVudHNbMF0gOiBkYXRlQ29tcG9uZW50c1sxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgeWVhciA9IGRhdGU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtb250aCkge1xuICAgICAgLy8gQ2hlY2sgaWYgbW9udGggaXMgdmFsaWQuXG4gICAgICBtb250aCA9IHRoaXMuZ2V0TW9udGhOdW1iZXIobW9udGgpO1xuICAgICAgaWYgKG1vbnRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBkYXkgaXMgdmFsaWQuXG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIGRheSA9IHBhcnNlSW50KGRheSwgMTApO1xuICAgICAgICBsZXQgZnV6enlNb21lbnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoeyBtb250aDogbW9udGgsIGRheTogZGF5LCB5ZWFyOiB5ZWFyIH0pO1xuICAgICAgICBpZiAoaXNOYU4oZGF5KSB8fCAhZnV6enlNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHllYXIpIHtcbiAgICAgIHllYXIgPSB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyID8gbW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyKHllYXIpIDogcGFyc2VJbnQoeWVhci50b1N0cmluZygpLCAxMCk7XG4gICAgICBpZiAoaXNOYU4oeWVhcikgfHwgeWVhci50b1N0cmluZygpLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgIGRheTogZGF5LFxuICAgICAgeWVhcjogeWVhclxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlUmFuZ2Uoc3RhcnRGdXp6eURhdGU6IFNreUZ1enp5RGF0ZSwgZW5kRnV6enlEYXRlOiBTa3lGdXp6eURhdGUpOiBTa3lGdXp6eURhdGVSYW5nZSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG4gICAgbGV0IGRheXM7XG4gICAgbGV0IG1vbnRocztcbiAgICBsZXQgeWVhcnM7XG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRGdXp6eURhdGUgJiYgc3RhcnRGdXp6eURhdGUueWVhciAmJiBlbmRGdXp6eURhdGUgJiYgZW5kRnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5nZXRNb21lbnRGcm9tRnV6enlEYXRlKHN0YXJ0RnV6enlEYXRlKTtcbiAgICAgIGVuZCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShlbmRGdXp6eURhdGUpO1xuXG4gICAgICB5ZWFycyA9IGVuZC5kaWZmKHN0YXJ0LCAneWVhcnMnKTtcbiAgICAgIG1vbnRocyA9IGVuZC5kaWZmKHN0YXJ0LCAnbW9udGhzJyk7XG4gICAgICBkYXlzID0gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XG4gICAgICB2YWxpZCA9IGVuZC5kaWZmKHN0YXJ0KSA+PSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyczogeWVhcnMsXG4gICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgIGRheXM6IGRheXMsXG4gICAgICB2YWxpZDogdmFsaWRcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRGdXp6eURhdGUoKTogU2t5RnV6enlEYXRlIHtcbiAgICBsZXQgY3VycmVudERhdGUgPSBtb21lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXk6IGN1cnJlbnREYXRlLmRhdGUoKSxcbiAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5tb250aCgpICsgMSwgLy8gbW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgICB5ZWFyOiBjdXJyZW50RGF0ZS55ZWFyKClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb3N0UmVjZW50TGVhcFllYXIoKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhcFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICB3aGlsZSAoIXRoaXMuaXNMZWFwWWVhcihsZWFwWWVhcikpIHtcbiAgICAgIGxlYXBZZWFyIC09IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYXBZZWFyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IHNlcGFyYXRvciBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgZGF0ZSBmb3JtYXQgc3RyaW5nLlxuICAgKiBBY2NlcHRlZCBzZXBhcmF0b3JzOiBbJy8nLCAnLicsICctJywgJyAnXS5cbiAgICogQHBhcmFtIGRhdGVGb3JtYXRcbiAgICovXG4gIHByaXZhdGUgZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXR1cm5WYWx1ZTogc3RyaW5nO1xuICAgIGxldCBzZXBhcmF0b3JzID0gWycvJywgJy4nLCAnLScsICcgJ107XG5cbiAgICBzZXBhcmF0b3JzLmZvckVhY2goc2VwYXJhdG9yID0+IHtcbiAgICAgIGlmICghcmV0dXJuVmFsdWUgJiYgZGF0ZUZvcm1hdC5pbmRleE9mKHNlcGFyYXRvcikgPiAwKSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gc2VwYXJhdG9yO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgeWVhcjogc3RyaW5nO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZ2V0RGF0ZVNlcGFyYXRvcihkYXRlKTtcblxuICAgIC8vIEZpbmQgdGhlIG51bWJlciB2YWx1ZSBpbiB0aGUgc3RyaW5nIHRoYXQgaXMgNCBkaWdpdHMgbG9uZy5cbiAgICBkYXRlLnNwbGl0KHNlcGFyYXRvcikuZm9yRWFjaChkYXRlQ29tcG9uZW50ID0+IHtcbiAgICAgIGlmICgheWVhciAmJiBwYXJzZUludChkYXRlQ29tcG9uZW50LCAxMCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgeWVhciA9IGRhdGVDb21wb25lbnQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoeWVhciAmJiAhaXNOYU4oTnVtYmVyKHllYXIpKSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgoeWVhciAlIDQgPT09IDApICYmICh5ZWFyICUgMTAwICE9PSAwKSkgfHwgKHllYXIgJSA0MDAgPT09IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb250aE51bWJlcihtb250aDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgcmV0dXJuVmFsdWU6IG51bWJlcjtcbiAgICBjb25zdCBtb250aEFzTnVtYmVyID0gcGFyc2VJbnQobW9udGgsIDEwKTtcblxuICAgIC8vIElmIHRoZSBtb250aCBjb21wb25lbnQgaXMgYSBzdHJpbmcgKFwiSmFuYXVyeVwiKSwgd2UgY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgdmFsaWQgbW9udGhcbiAgICBpZiAoaXNOYU4obW9udGhBc051bWJlcikpIHtcbiAgICAgIGlmICghbW9tZW50KG1vbnRoLCAnTU1NTScpLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm5WYWx1ZSA9IHBhcnNlSW50KG1vbWVudCgpLm1vbnRoKG1vbnRoKS5mb3JtYXQoJ00nKSwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IG1vbnRoQXNOdW1iZXI7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG1vbnRoIGlzIGJldHdlZW4gMSBhbmQgMTJcbiAgICBpZiAoISgxIDw9IHJldHVyblZhbHVlICYmIHJldHVyblZhbHVlIDw9IDEyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFllYXIoZnV6enlEYXRlOiBTa3lGdXp6eURhdGUpOiBudW1iZXIge1xuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGEgbGVhcCB5ZWFyIG9yIHRoZSBjdXJyZW50IHllYXIuXG4gICAgaWYgKGZ1enp5RGF0ZS5tb250aCA9PT0gMiAmJiBmdXp6eURhdGUuZGF5ID09PSAyOSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9zdFJlY2VudExlYXBZZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRlQ29tcG9uZW50cyhkYXRlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXREYXRlU2VwYXJhdG9yKGRhdGUpO1xuICAgIHJldHVybiBkYXRlLnNwbGl0KHNlcGFyYXRvcik7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBvcmRlciBvZiB5ZWFyLCBtb250aCwgYW5kIGRheSBmcm9tIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdC5cbiAgcHJpdmF0ZSBnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lEYXRlSW5kZXhlcyB7XG4gICAgZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeWVhckluZGV4OiBkYXRlRm9ybWF0LmluZGV4T2YoJ3knKSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZignbScpLFxuICAgICAgZGF5SW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZignZCcpXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGVhY2ggb2YgdGhlIGRhdGUgY29tcG9uZW50cyBpbiB0aGUgcHJvdmlkZWQgc3RyaW5nIChtb250aCwgZGF5LCB5ZWFyKS5cbiAgcHJpdmF0ZSBnZXREYXRlVmFsdWVJbmRleGVzKGRhdGU6IHN0cmluZywgZGF0ZUZvcm1hdDogc3RyaW5nKTogU2t5RGF0ZUluZGV4ZXMge1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy5nZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBsZXQgZGF0ZUNvbXBvbmVudEluZGV4ZXMgPSBbXTtcbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCA+IC0xKSB7XG4gICAgICBkYXRlQ29tcG9uZW50SW5kZXhlcy5wdXNoKGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCA+IC0xKSB7XG4gICAgICBkYXRlQ29tcG9uZW50SW5kZXhlcy5wdXNoKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4KTtcbiAgICB9XG5cbiAgICBkYXRlQ29tcG9uZW50SW5kZXhlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhIC0gYjsgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeWVhckluZGV4OiBkYXRlQ29tcG9uZW50SW5kZXhlcy5pbmRleE9mKGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCksXG4gICAgICBtb250aEluZGV4OiBkYXRlQ29tcG9uZW50SW5kZXhlcy5pbmRleE9mKGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXgpLFxuICAgICAgZGF5SW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIFNreUZ1enp5RGF0ZSBvYmplY3QuIFZhbGlkIGZ1enp5IGRhdGVzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiBtb250aCwgZGF5LCB5ZWFyXG4gICAqIG1vbnRoLCB5ZWFyXG4gICAqIG1vbnRoLCBkYXlcbiAgICogeWVhciBvbmx5XG4gICAqL1xuICBwcml2YXRlIGlzRnV6enlEYXRlVmFsaWQoZnV6enlEYXRlOiBTa3lGdXp6eURhdGUpOiBib29sZWFuIHtcblxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGRhdGVzIHBhcnQgYXJlIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmICghZnV6enlEYXRlLmRheSAmJiAhZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgbW9udGggaXMgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKCFmdXp6eURhdGUuZGF5ICYmIGZ1enp5RGF0ZS5tb250aCAmJiAhZnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IGRheSBpcyBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoZnV6enlEYXRlLmRheSAmJiAhZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2RhdGV0aW1lLyIsInNvdXJjZXMiOlsibW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFVBQVUsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCxPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBcUJ2Qjs7R0FFRztBQUVILElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBTTlCLFlBQ1UsY0FBb0M7UUFBcEMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FBSHRDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUsxQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRTthQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIs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SyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUN4RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQTs7WUF2YTJCLG9CQUFvQjs7QUFQbkMsbUJBQW1CO0lBRC9CLFVBQVUsRUFBRTtHQUNBLG1CQUFtQixDQThhL0I7U0E5YVksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBTa3lBcHBMb2NhbGVQcm92aWRlclxufSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7XG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIHRha2VVbnRpbFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIFNreUZ1enp5RGF0ZVxufSBmcm9tICcuL2Z1enp5LWRhdGUnO1xuXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5RGF0ZUluZGV4ZXMge1xuICB5ZWFySW5kZXg6IG51bWJlcjtcbiAgbW9udGhJbmRleDogbnVtYmVyO1xuICBkYXlJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5RnV6enlEYXRlUmFuZ2Uge1xuICB5ZWFyczogc3RyaW5nO1xuICBtb250aHM6IHN0cmluZztcbiAgZGF5czogc3RyaW5nO1xuICB2YWxpZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreUZ1enp5RGF0ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgY3VycmVudExvY2FsZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXJcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGVQcm92aWRlci5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJvd3NlcidzIGN1cnJlbnQgbG9jYWxlIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBnZXRDdXJyZW50TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaG9ydCBmb3JtYXQgb2YgdGhlIHByb3ZpZGVkIGxvY2FsZS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgbG9jYWxlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgYnJvd3NlcidzIGRlZmF1bHQgbG9jYWxlLlxuICAgKi9cbiAgcHVibGljIGdldExvY2FsZVNob3J0Rm9ybWF0KGxvY2FsZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1vbWVudC5sb2NhbGVEYXRhKGxvY2FsZSB8fCB0aGlzLmN1cnJlbnRMb2NhbGUpLmxvbmdEYXRlRm9ybWF0KCdMJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIGZ1enp5IGRhdGUgYnkgdXNpbmcgdGhlIHByb3ZpZGVkIGZvcm1hdCBhbmQgbG9jYWxlIHN0cmluZ3MuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGxvY2FsZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXQoZnV6enlEYXRlOiBTa3lGdXp6eURhdGUsIGZvcm1hdDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuY3VycmVudExvY2FsZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLmdldERhdGVTZXBhcmF0b3IoZm9ybWF0KTtcbiAgICBsZXQgZGF0ZVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBmb3JtYXRUb2tlbnM6IHN0cmluZ1tdID0gZm9ybWF0LnNwbGl0KHNlcGFyYXRvcik7XG4gICAgbG9jYWxlID0gbG9jYWxlIHx8IHRoaXMuY3VycmVudExvY2FsZTtcbiAgICBsZXQgZnV6enlEYXRlTW9tZW50ID0gdGhpcy5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZSkubG9jYWxlKGxvY2FsZSk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZm9ybWF0VG9rZW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSBmb3JtYXRUb2tlbnNbaW5kZXhdO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogc3dpdGNoLWRlZmF1bHRcbiAgICAgICAgc3dpdGNoICh0b2tlbi5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgaWYgKGZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICAgICAgICAgIGRhdGVQYXJ0cy5wdXNoKFxuICAgICAgICAgICAgICAgIGZ1enp5RGF0ZU1vbWVudC5mb3JtYXQodG9rZW4pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUubW9udGgpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goXG4gICAgICAgICAgICAgICAgZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgaWYgKGZ1enp5RGF0ZS5kYXkpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goXG4gICAgICAgICAgICAgICAgZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVQYXJ0cy5qb2luKHNlcGFyYXRvcik7XG4gIH1cblxuICAvKipcbiAgICogSWYgbm90IHByb3ZpZGVkLCB5ZWFycyB3aWxsIGRlZmF1bHQgdG8gY3VycmVudCB5ZWFyOyBtb250aHMgd2lsbCBkZWZhdWx0IHRvIEphbnVhcnk7XG4gICAqIGRheXMgd2lsbCBkZWZhdWx0IHRvIDFzdCBvZiB0aGUgbW9udGguXG4gICAqL1xuICBwdWJsaWMgZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IGFueSB7XG4gICAgaWYgKCFmdXp6eURhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB5ZWFyID0gZnV6enlEYXRlLnllYXIgfHwgdGhpcy5nZXREZWZhdWx0WWVhcihmdXp6eURhdGUpO1xuICAgIGNvbnN0IG1vbnRoID0gZnV6enlEYXRlLm1vbnRoID4gMCA/IChmdXp6eURhdGUubW9udGggLSAxKSA6IDA7XG4gICAgY29uc3QgZGF5ID0gZnV6enlEYXRlLmRheSB8fCAxO1xuXG4gICAgcmV0dXJuIG1vbWVudChbeWVhciwgbW9udGgsIGRheV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzdHJpbmcgaW5zdGFuY2Ugb2YgYSBmdXp6eSBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBgZm9ybWF0YCBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZnV6enlEYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXREYXRlU2VwYXJhdG9yKGRhdGVGb3JtYXQpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy5nZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBsZXQgZGF0ZVN0cmluZzogc3RyaW5nID0gJyc7XG5cbiAgICAvLyBHZXQgdGhlIGNvbXBvbmVudHMgb2YgdGhlIGRhdGUgaW4gdGhlIG9yZGVyIGV4cGVjdGVkIG9mIHRoZSBsb2NhbCBmb3JtYXQuXG4gICAgbGV0IGRhdGVDb21wb25lbnRzID0gW1xuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLnllYXIgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCB9LFxuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLm1vbnRoIHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUuZGF5IHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCB9XG4gICAgXTtcbiAgICBkYXRlQ29tcG9uZW50cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgZGF0ZUNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZSA+IDAgJiYgY29tcG9uZW50LmluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKGRhdGVTdHJpbmcpIHtcbiAgICAgICAgICBkYXRlU3RyaW5nICs9IHNlcGFyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICBkYXRlU3RyaW5nICs9IGNvbXBvbmVudC52YWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGVTdHJpbmcudHJpbSgpO1xuICB9XG5cbiAgcHVibGljIGdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoc2VsZWN0ZWREYXRlOiBEYXRlLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lGdXp6eURhdGUge1xuICAgIGlmICghc2VsZWN0ZWREYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlID0ge307XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLmdldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCA+IC0xKSB7XG4gICAgICBmdXp6eURhdGUueWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCA+IC0xKSB7XG4gICAgICBmdXp6eURhdGUuZGF5ID0gc2VsZWN0ZWREYXRlLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCA+IC0xKSB7XG4gICAgICBmdXp6eURhdGUubW9udGggPSBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSArIDE7IC8vIGdldE1vbnRoKCkgaXMgMC1pbmRleGVkLlxuICAgIH1cblxuICAgIHJldHVybiBmdXp6eURhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlRnJvbVN0cmluZyhkYXRlOiBzdHJpbmcsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreUZ1enp5RGF0ZSB7XG4gICAgaWYgKCFkYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGRheTogYW55O1xuICAgIGxldCBtb250aDogYW55O1xuICAgIGxldCB5ZWFyOiBhbnk7XG5cbiAgICBjb25zdCBkYXRlQ29tcG9uZW50cyA9IHRoaXMuZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZSk7XG4gICAgY29uc3QgaW5kZXhlcyA9IHRoaXMuZ2V0RGF0ZVZhbHVlSW5kZXhlcyhkYXRlLCBkYXRlRm9ybWF0KTtcblxuICAgIC8vIExvb2sgYXQgdGhlIGRhdGUgc3RyaW5nJ3MgY29tcG9uZW50IGNvdW50OlxuICAgIC8vIDMgaW5kaWNhdGVzIGEgZnVsbCBkYXRlXG4gICAgLy8gMiBpbmRpY2F0ZXMgYSBtb250aC15ZWFyIG9yIG1vbnRoLWRheSBkYXRlXG4gICAgLy8gMSBpbmRpY2F0ZXMgYSB5ZWFyXG4gICAgLy8gT3RoZXIgaW5kaWNhdGVzIGEgcHJvYmxlbVxuICAgIHN3aXRjaCAoZGF0ZUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAzOlxuICAgICAgeWVhciA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMueWVhckluZGV4XTtcbiAgICAgIG1vbnRoID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5tb250aEluZGV4XTtcbiAgICAgIGRheSA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMuZGF5SW5kZXhdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgLy8gRmlyc3QsIGNoZWNrIGZvciBhIDQtZGlnaXQgeWVhci4gSWYgeWVhciBleGlzdHMsIHRoZW4gd2UgYXNzdW1lIHRoZSBvdGhlciBjb21wb25lbnRcbiAgICAgIC8vIGlzIHRoZSBtb250aC4gT3RoZXJ3aXNlLCB3ZSBjYW4gYXNzdW1lIHRoZSBpbnB1dCBpcyBtbS9kZCBvciBtbS95eSAoMi1kaWdpdCB5ZWFyKS5cbiAgICAgIHllYXIgPSB0aGlzLmdldDREaWdpdFllYXJGcm9tRGF0ZVN0cmluZyhkYXRlKTtcbiAgICAgIGlmICh5ZWFyKSB7XG4gICAgICAgIG1vbnRoID0gZGF0ZUNvbXBvbmVudHNbMF0gPT09IHllYXIudG9TdHJpbmcoKSA/IGRhdGVDb21wb25lbnRzWzFdIDogZGF0ZUNvbXBvbmVudHNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5kZXhlcy5kYXlJbmRleCA+IC0xKSB7XG4gICAgICAgICAgLy8gbW0vZGRcbiAgICAgICAgICBtb250aCA9IChpbmRleGVzLm1vbnRoSW5kZXggPCBpbmRleGVzLmRheUluZGV4KSA/IGRhdGVDb21wb25lbnRzWzBdIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgZGF5ID0gKG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXSkgPyBkYXRlQ29tcG9uZW50c1swXSA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG1tL3l5XG4gICAgICAgICAgbW9udGggPSAoaW5kZXhlcy5tb250aEluZGV4IDwgaW5kZXhlcy55ZWFySW5kZXgpID8gZGF0ZUNvbXBvbmVudHNbMF0gOiBkYXRlQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICB5ZWFyID0gKG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXSkgPyBkYXRlQ29tcG9uZW50c1swXSA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICB5ZWFyID0gZGF0ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1vbnRoKSB7XG4gICAgICAvLyBDaGVjayBpZiBtb250aCBpcyB2YWxpZC5cbiAgICAgIG1vbnRoID0gdGhpcy5nZXRNb250aE51bWJlcihtb250aCk7XG4gICAgICBpZiAobW9udGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGRheSBpcyB2YWxpZC5cbiAgICAgIGlmIChkYXkpIHtcbiAgICAgICAgZGF5ID0gcGFyc2VJbnQoZGF5LCAxMCk7XG4gICAgICAgIGxldCBmdXp6eU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZSh7IG1vbnRoOiBtb250aCwgZGF5OiBkYXksIHllYXI6IHllYXIgfSk7XG4gICAgICAgIGlmIChpc05hTihkYXkpIHx8ICFmdXp6eU1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoeWVhcikge1xuICAgICAgeWVhciA9IHllYXIudG9TdHJpbmcoKS5sZW5ndGggPT09IDIgPyBtb21lbnQucGFyc2VUd29EaWdpdFllYXIoeWVhcikgOiBwYXJzZUludCh5ZWFyLnRvU3RyaW5nKCksIDEwKTtcbiAgICAgIGlmIChpc05hTih5ZWFyKSB8fCB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgZGF5OiBkYXksXG4gICAgICB5ZWFyOiB5ZWFyXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVSYW5nZShzdGFydEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLCBlbmRGdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IFNreUZ1enp5RGF0ZVJhbmdlIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcbiAgICBsZXQgZGF5cztcbiAgICBsZXQgbW9udGhzO1xuICAgIGxldCB5ZWFycztcbiAgICBsZXQgdmFsaWQgPSBmYWxzZTtcblxuICAgIGlmIChzdGFydEZ1enp5RGF0ZSAmJiBzdGFydEZ1enp5RGF0ZS55ZWFyICYmIGVuZEZ1enp5RGF0ZSAmJiBlbmRGdXp6eURhdGUueWVhcikge1xuICAgICAgc3RhcnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoc3RhcnRGdXp6eURhdGUpO1xuICAgICAgZW5kID0gdGhpcy5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGVuZEZ1enp5RGF0ZSk7XG5cbiAgICAgIHllYXJzID0gZW5kLmRpZmYoc3RhcnQsICd5ZWFycycpO1xuICAgICAgbW9udGhzID0gZW5kLmRpZmYoc3RhcnQsICdtb250aHMnKTtcbiAgICAgIGRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgICAgIHZhbGlkID0gZW5kLmRpZmYoc3RhcnQpID49IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJzOiB5ZWFycyxcbiAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgZGF5czogZGF5cyxcbiAgICAgIHZhbGlkOiB2YWxpZFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudEZ1enp5RGF0ZSgpOiBTa3lGdXp6eURhdGUge1xuICAgIGxldCBjdXJyZW50RGF0ZSA9IG1vbWVudCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRheTogY3VycmVudERhdGUuZGF0ZSgpLFxuICAgICAgbW9udGg6IGN1cnJlbnREYXRlLm1vbnRoKCkgKyAxLCAvLyBtb250aCgpIGlzIDAtaW5kZXhlZC5cbiAgICAgIHllYXI6IGN1cnJlbnREYXRlLnllYXIoKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1vc3RSZWNlbnRMZWFwWWVhcigpOiBudW1iZXIge1xuICAgIGxldCBsZWFwWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgIHdoaWxlICghdGhpcy5pc0xlYXBZZWFyKGxlYXBZZWFyKSkge1xuICAgICAgbGVhcFllYXIgLT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVhcFllYXI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3Qgc2VwYXJhdG9yIGZvdW5kIGluIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdCBzdHJpbmcuXG4gICAqIEFjY2VwdGVkIHNlcGFyYXRvcnM6IFsnLycsICcuJywgJy0nLCAnICddLlxuICAgKiBAcGFyYW0gZGF0ZUZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXREYXRlU2VwYXJhdG9yKGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJldHVyblZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IHNlcGFyYXRvcnMgPSBbJy8nLCAnLicsICctJywgJyAnXTtcblxuICAgIHNlcGFyYXRvcnMuZm9yRWFjaChzZXBhcmF0b3IgPT4ge1xuICAgICAgaWYgKCFyZXR1cm5WYWx1ZSAmJiBkYXRlRm9ybWF0LmluZGV4T2Yoc2VwYXJhdG9yKSA+IDApIHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBzZXBhcmF0b3I7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldDREaWdpdFllYXJGcm9tRGF0ZVN0cmluZyhkYXRlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCB5ZWFyOiBzdHJpbmc7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXREYXRlU2VwYXJhdG9yKGRhdGUpO1xuXG4gICAgLy8gRmluZCB0aGUgbnVtYmVyIHZhbHVlIGluIHRoZSBzdHJpbmcgdGhhdCBpcyA0IGRpZ2l0cyBsb25nLlxuICAgIGRhdGUuc3BsaXQoc2VwYXJhdG9yKS5mb3JFYWNoKGRhdGVDb21wb25lbnQgPT4ge1xuICAgICAgaWYgKCF5ZWFyICYmIHBhcnNlSW50KGRhdGVDb21wb25lbnQsIDEwKS50b1N0cmluZygpLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB5ZWFyID0gZGF0ZUNvbXBvbmVudDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh5ZWFyICYmICFpc05hTihOdW1iZXIoeWVhcikpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNMZWFwWWVhcih5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKCh5ZWFyICUgNCA9PT0gMCkgJiYgKHllYXIgJSAxMDAgIT09IDApKSB8fCAoeWVhciAlIDQwMCA9PT0gMCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vbnRoTnVtYmVyKG1vbnRoOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IG1vbnRoQXNOdW1iZXIgPSBwYXJzZUludChtb250aCwgMTApO1xuXG4gICAgLy8gSWYgdGhlIG1vbnRoIGNvbXBvbmVudCBpcyBhIHN0cmluZyAoXCJKYW5hdXJ5XCIpLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBtb250aFxuICAgIGlmIChpc05hTihtb250aEFzTnVtYmVyKSkge1xuICAgICAgaWYgKCFtb21lbnQobW9udGgsICdNTU1NJykuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnQobW9tZW50KCkubW9udGgobW9udGgpLmZvcm1hdCgnTScpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblZhbHVlID0gbW9udGhBc051bWJlcjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbW9udGggaXMgYmV0d2VlbiAxIGFuZCAxMlxuICAgIGlmICghKDEgPD0gcmV0dXJuVmFsdWUgJiYgcmV0dXJuVmFsdWUgPD0gMTIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0WWVhcihmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IG51bWJlciB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZXR1cm4gYSBsZWFwIHllYXIgb3IgdGhlIGN1cnJlbnQgeWVhci5cbiAgICBpZiAoZnV6enlEYXRlLm1vbnRoID09PSAyICYmIGZ1enp5RGF0ZS5kYXkgPT09IDI5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNb3N0UmVjZW50TGVhcFllYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVDb21wb25lbnRzKGRhdGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLmdldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG9yZGVyIG9mIHllYXIsIG1vbnRoLCBhbmQgZGF5IGZyb20gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0LlxuICBwcml2YXRlIGdldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZigneScpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdtJyksXG4gICAgICBkYXlJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdkJylcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgZWFjaCBvZiB0aGUgZGF0ZSBjb21wb25lbnRzIGluIHRoZSBwcm92aWRlZCBzdHJpbmcgKG1vbnRoLCBkYXksIHllYXIpLlxuICBwcml2YXRlIGdldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lEYXRlSW5kZXhlcyB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLmdldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuICAgIGxldCBkYXRlQ29tcG9uZW50SW5kZXhlcyA9IFtdO1xuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpO1xuICAgIH1cblxuICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCksXG4gICAgICBkYXlJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgU2t5RnV6enlEYXRlIG9iamVjdC4gVmFsaWQgZnV6enkgZGF0ZXMgYXJlIGFzIGZvbGxvd3M6XG4gICAqIG1vbnRoLCBkYXksIHllYXJcbiAgICogbW9udGgsIHllYXJcbiAgICogbW9udGgsIGRheVxuICAgKiB5ZWFyIG9ubHlcbiAgICovXG4gIHByaXZhdGUgaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFmdXp6eURhdGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBub25lIG9mIHRoZSBkYXRlcyBwYXJ0IGFyZSBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoIWZ1enp5RGF0ZS5kYXkgJiYgIWZ1enp5RGF0ZS5tb250aCAmJiAhZnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG1vbnRoIGlzIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmICghZnV6enlEYXRlLmRheSAmJiBmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBkYXkgaXMgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKGZ1enp5RGF0ZS5kYXkgJiYgIWZ1enp5RGF0ZS5tb250aCAmJiAhZnV6enlEYXRlLnllYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|
|
@@ -77,7 +77,7 @@ SkyMonthPickerComponent = __decorate([
|
|
|
77
77
|
Component({
|
|
78
78
|
selector: 'sky-monthpicker',
|
|
79
79
|
template: "<table *ngIf=\"datepicker.datepickerMode==='month'\" role=\"grid\">\n <thead>\n <tr>\n <th\n class=\"sky-datepicker-header-left\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-previous\"\n (click)=\"datepicker.moveCalendar($event, -1)\"\n tabindex=\"-1\"\n >\n <sky-icon\n class=\"sky-datepicker-chevron-default\"\n icon=\"chevron-left\"\n ></sky-icon>\n <sky-icon\n class=\"sky-datepicker-chevron-modern\"\n icon=\"chevron-left\"\n iconType=\"skyux\"\n ></sky-icon>\n </button></th>\n <th [attr.colspan]=\"((datepicker.monthColLimit - 2) <= 0) ? 1 : datepicker.monthColLimit - 2\">\n <button\n [id]=\"datepicker.datepickerId + '-title'\"\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-calendar-title\"\n (click)=\"datepicker.toggleModeCalendar($event)\"\n [disabled]=\"datepicker.datepickerMode === maxMode\"\n [ngClass]=\"{'sky-btn-disabled': datepicker.datepickerMode === maxMode}\"\n tabindex=\"-1\"\n >\n <strong>{{title}}</strong>\n </button>\n </th>\n <th\n class=\"sky-datepicker-header-right\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-next\"\n (click)=\"datepicker.moveCalendar($event, 1)\"\n tabindex=\"-1\"\n >\n <sky-icon\n class=\"sky-datepicker-chevron-default\"\n icon=\"chevron-right\"\n ></sky-icon>\n <sky-icon\n class=\"sky-datepicker-chevron-modern\"\n icon=\"chevron-right\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows\">\n <td\n *ngFor=\"let date of row\"\n class=\"text-center\"\n role=\"gridcell\"\n id=\"{{date.uid}}\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-datepicker-btn-date\"\n [ngClass]=\"{'sky-datepicker-btn-selected': date.selected, 'sky-btn-disabled': date.disabled, 'sky-btn-active': datepicker.isActive(date)}\"\n [disabled]=\"date.disabled\"\n (click)=\"datepicker.selectCalendar($event, date.date)\"\n tabindex=\"-1\"\n >\n <span [ngClass]=\"{'sky-datepicker-current': date.current}\">{{date.label}}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n",
|
|
80
|
-
styles: [".sky-theme-modern :host:focus
|
|
80
|
+
styles: [":host-context(.sky-theme-modern) :host:focus{outline:0}.sky-theme-modern :host:focus{outline:0}"]
|
|
81
81
|
})
|
|
82
82
|
], SkyMonthPickerComponent);
|
|
83
83
|
export { SkyMonthPickerComponent };
|
|
@@ -76,7 +76,7 @@ SkyYearPickerComponent = __decorate([
|
|
|
76
76
|
Component({
|
|
77
77
|
selector: 'sky-yearpicker',
|
|
78
78
|
template: "<table *ngIf=\"datepicker.datepickerMode==='year'\" role=\"grid\">\n <thead>\n <tr>\n <th\n class=\"sky-datepicker-header-left\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-previous\"\n (click)=\"datepicker.moveCalendar($event, -1)\"\n tabindex=\"-1\"\n >\n <sky-icon\n class=\"sky-datepicker-chevron-default\"\n icon=\"chevron-left\"\n ></sky-icon>\n <sky-icon\n class=\"sky-datepicker-chevron-modern\"\n icon=\"chevron-left\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </th>\n <th [attr.colspan]=\"((datepicker.yearColLimit - 2) <= 0) ? 1 : datepicker.yearColLimit - 2\">\n <button\n [id]=\"datepicker.datepickerId + '-title'\"\n role=\"heading\"\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-calendar-title\"\n (click)=\"datepicker.toggleModeCalendar($event)\"\n [disabled]=\"datepicker.datepickerMode === datepicker.maxMode\"\n [ngClass]=\"{'sky-btn-disabled': datepicker.datepickerMode === datepicker.maxMode}\"\n tabindex=\"-1\"\n >\n <strong>{{title}}</strong>\n </button>\n </th>\n <th\n class=\"sky-datepicker-header-right\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-btn-sm sky-datepicker-btn-next\"\n (click)=\"datepicker.moveCalendar($event, 1)\"\n tabindex=\"-1\"\n >\n <sky-icon\n class=\"sky-datepicker-chevron-default\"\n icon=\"chevron-right\"\n ></sky-icon>\n <sky-icon\n class=\"sky-datepicker-chevron-modern\"\n icon=\"chevron-right\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows\">\n <td\n *ngFor=\"let date of row\"\n class=\"sky-datepicker-row\"\n role=\"gridcell\"\n >\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-datepicker-btn-date\"\n [ngClass]=\"{'sky-datepicker-btn-selected': date.selected, 'sky-btn-disabled': date.disabled, 'sky-btn-active': datepicker.isActive(date)}\"\n [disabled]=\"date.disabled\"\n (click)=\"datepicker.selectCalendar($event, date.date)\"\n tabindex=\"-1\"\n >\n <span\n [ngClass]=\"{'sky-datepicker-current': date.current }\">{{date.label}}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n",
|
|
79
|
-
styles: [".sky-theme-modern :host:focus
|
|
79
|
+
styles: [":host-context(.sky-theme-modern) :host:focus{outline:0}.sky-theme-modern :host:focus{outline:0}"]
|
|
80
80
|
})
|
|
81
81
|
], SkyYearPickerComponent);
|
|
82
82
|
export { SkyYearPickerComponent };
|