@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
132 lines • 24.5 kB
JavaScript
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, ContentChild, HostBinding, Input, ViewEncapsulation, } from '@angular/core';
import { BehaviorSubject, Subject, combineLatest, distinctUntilChanged, filter, iif, map, merge, of, skip, startWith, takeUntil, tap, } from 'rxjs';
import { DokuEndDate } from './end-date.directive';
import { DokuStartDate } from './start-date.directive';
import * as i0 from "@angular/core";
export class DokuDateRangePickerInput {
constructor() {
this.class = 'd-date-range-picker-input';
this.destroy$ = new Subject();
this.dateChange$ = new BehaviorSubject({ start: null, end: null });
}
ngOnInit() {
if (this.rangePicker) {
this.rangePicker['dateChangeHandler'] = (value) => this.dateChange$.next(value);
}
}
ngAfterContentInit() {
this.hideInputs();
this.listenToDateChange();
}
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
hideInputs() {
if (this.startDate) {
this.startDate['elementRef'].nativeElement.style.display = 'none';
}
if (this.endDate) {
this.endDate['elementRef'].nativeElement.style.display = 'none';
}
}
listenToDateChange() {
const startDateControl = this.startDate?.['ngControl']?.control;
const endDateControl = this.endDate?.['ngControl']?.control;
const startDate$ = iif(() => !!startDateControl, startDateControl?.valueChanges.pipe(startWith(this.normalizeDate(startDateControl.getRawValue())), map(this.normalizeDate), distinctUntilChanged(this.distinct)) || of(), of(this.startDate?.['elementRef']).pipe(map((ref) => ref?.nativeElement), map((el) => this.normalizeDate(el.value)), startWith(this.normalizeDate(this.startDate?.['elementRef']?.nativeElement?.target?.value || null))));
const endDate$ = iif(() => !!endDateControl, endDateControl?.valueChanges.pipe(startWith(this.normalizeDate(endDateControl.getRawValue())), map(this.normalizeDate), distinctUntilChanged(this.distinct)) || of(), of(this.endDate?.['elementRef']).pipe(map((ref) => ref?.nativeElement), map((el) => this.normalizeDate(el.value)), startWith(this.normalizeDate(this.endDate?.['elementRef']?.nativeElement?.target?.value || null))));
const dateRange$ = combineLatest([startDate$, endDate$]).pipe(map(([start, end]) => ({ start, end })), distinctUntilChanged(this.distinct), filter((value) => {
// Skip if start date is null but end date is exists.
if (!value.start && !!value.end)
return false;
// Skip when choosing start date but end date value still there.
if (this.dateChange$.value.start && !this.dateChange$.value.end && value.end)
return false;
// Skip when resetting value but end date value still the same.
if (value.start &&
value.end &&
JSON.stringify(value.start) !== JSON.stringify(this.dateChange$.value.start) &&
JSON.stringify(value.end) === JSON.stringify(this.dateChange$.value.end)) {
return false;
}
return true;
}));
merge(this.dateChange$.pipe(skip(1)), dateRange$)
.pipe(
// Set initial value to the date range picker
distinctUntilChanged(this.distinct), tap((value) => {
if (!this.rangePicker)
return;
this.rangePicker['value'] = value;
this.rangePicker['_cdr'].detectChanges();
}), skip(1), takeUntil(this.destroy$))
.subscribe((value) => {
this.emitDateChangeToViewOrControl(value);
if (!this.rangePicker)
return;
this.rangePicker['valueChange'].emit({
start: value.start?.toISOString() || null,
end: value.end?.toISOString() || null,
});
});
}
emitDateChangeToViewOrControl(value) {
const startDate = value?.start?.toISOString() || null;
const endDate = value?.end?.toISOString() || null;
const startDateElement = this.startDate?.['elementRef'].nativeElement;
const endDateElement = this.endDate?.['elementRef'].nativeElement;
if (startDateElement.value !== startDate) {
startDateElement.value = startDate || '';
startDateElement.dispatchEvent(new Event('change'));
}
if (endDateElement.value !== endDate) {
endDateElement.value = endDate || '';
endDateElement.dispatchEvent(new Event('change'));
}
const startDateControl = this.startDate?.['ngControl']?.control;
const endDateControl = this.endDate?.['ngControl']?.control;
if (startDateControl && startDateControl.value !== startDate) {
startDateControl?.setValue(startDate);
}
if (endDateControl && endDateControl.value !== endDate) {
endDateControl?.setValue(endDate);
}
}
normalizeDate(date) {
if (!date)
return null;
if (!(date instanceof Date || typeof date === 'string'))
return null;
return date instanceof Date ? date : new Date(date);
}
distinct(prev, current) {
return JSON.stringify(prev) === JSON.stringify(current);
}
}
DokuDateRangePickerInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDateRangePickerInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
DokuDateRangePickerInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuDateRangePickerInput, isStandalone: true, selector: "doku-date-range-picker-input", inputs: { rangePicker: "rangePicker" }, host: { properties: { "class": "this.class" } }, queries: [{ propertyName: "startDate", first: true, predicate: DokuStartDate, descendants: true }, { propertyName: "endDate", first: true, predicate: DokuEndDate, descendants: true }], exportAs: ["dokuDateRangePickerInput"], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDateRangePickerInput, decorators: [{
type: Component,
args: [{
selector: 'doku-date-range-picker-input',
exportAs: 'dokuDateRangePickerInput',
standalone: true,
imports: [CommonModule],
template: `<ng-content></ng-content>`,
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], propDecorators: { class: [{
type: HostBinding,
args: ['class']
}], rangePicker: [{
type: Input
}], startDate: [{
type: ContentChild,
args: [DokuStartDate]
}], endDate: [{
type: ContentChild,
args: [DokuEndDate]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXItaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2RhdGUtcGlja2VyL2NvbW1vbi9kYXRlLXJhbmdlLXBpY2tlci1pbnB1dC9kYXRlLXJhbmdlLXBpY2tlci1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBVyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFDUCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsR0FBRyxFQUNILEtBQUssRUFDTCxFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFXdkQsTUFBTSxPQUFPLHdCQUF3QjtJQVRyQztRQVdxQixVQUFLLEdBQXVCLDJCQUEyQixDQUFDO1FBT25FLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXpCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBa0psRjtJQWhKQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENB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SUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sUUFBUSxDQUFPLElBQU8sRUFBRSxPQUFVO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7O3FIQTVKVSx3QkFBd0I7eUdBQXhCLHdCQUF3Qix3TkFNckIsYUFBYSwwRUFDYixXQUFXLHdGQVhmLDJCQUEyQiwyREFEM0IsWUFBWTsyRkFLWCx3QkFBd0I7a0JBVHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFHb0IsS0FBSztzQkFEdkIsV0FBVzt1QkFBQyxPQUFPO2dCQUdYLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRXVCLFNBQVM7c0JBQXJDLFlBQVk7dUJBQUMsYUFBYTtnQkFDQSxPQUFPO3NCQUFqQyxZQUFZO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIFN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGlpZixcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHNraXAsXG4gIHN0YXJ0V2l0aCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZVZhbHVlIH0gZnJvbSAnLi4vLi4vYmFzZS9kYXRlLXBpY2tlci1iYXNlLXByb3BzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb2t1RGF0ZVJhbmdlUGlja2VyIH0gZnJvbSAnLi4vLi4vZGF0ZS1yYW5nZS1waWNrZXItZmxvYXQvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERva3VEYXRlUmFuZ2VQaWNrZXJJbmxpbmUgfSBmcm9tICcuLi8uLi9kYXRlLXJhbmdlLXBpY2tlci1pbmxpbmUvZGF0ZS1yYW5nZS1waWNrZXItaW5saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb2t1RW5kRGF0ZSB9IGZyb20gJy4vZW5kLWRhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERva3VTdGFydERhdGUgfSBmcm9tICcuL3N0YXJ0LWRhdGUuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZG9rdS1kYXRlLXJhbmdlLXBpY2tlci1pbnB1dCcsXG4gIGV4cG9ydEFzOiAnZG9rdURhdGVSYW5nZVBpY2tlcklucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEb2t1RGF0ZVJhbmdlUGlja2VySW5wdXQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xhc3M6IE5nQ2xhc3NbJ25nQ2xhc3MnXSA9ICdkLWRhdGUtcmFuZ2UtcGlja2VyLWlucHV0JztcblxuICBASW5wdXQoKSByYW5nZVBpY2tlcj86IERva3VEYXRlUmFuZ2VQaWNrZXIgfCBEb2t1RGF0ZVJhbmdlUGlja2VySW5saW5lO1xuXG4gIEBDb250ZW50Q2hpbGQoRG9rdVN0YXJ0RGF0ZSkgc3RhcnREYXRlPzogRG9rdVN0YXJ0RGF0ZTtcbiAgQENvbnRlbnRDaGlsZChEb2t1RW5kRGF0ZSkgZW5kRGF0ZT86IERva3VFbmREYXRlO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgZGF0ZUNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGVWYWx1ZT4oeyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhbmdlUGlja2VyKSB7XG4gICAgICB0aGlzLnJhbmdlUGlja2VyWydkYXRlQ2hhbmdlSGFuZGxlciddID0gKHZhbHVlKSA9PiB0aGlzLmRhdGVDaGFuZ2UkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVJbnB1dHMoKTtcbiAgICB0aGlzLmxpc3RlblRvRGF0ZUNoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZUlucHV0cygpIHtcbiAgICBpZiAodGhpcy5zdGFydERhdGUpIHtcbiAgICAgICh0aGlzLnN0YXJ0RGF0ZVsnZWxlbWVudFJlZiddLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUpIHtcbiAgICAgICh0aGlzLmVuZERhdGVbJ2VsZW1lbnRSZWYnXS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuVG9EYXRlQ2hhbmdlKCkge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUNvbnRyb2wgPSB0aGlzLnN0YXJ0RGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcbiAgICBjb25zdCBlbmREYXRlQ29udHJvbCA9IHRoaXMuZW5kRGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSQgPSBpaWYoXG4gICAgICAoKSA9PiAhIXN0YXJ0RGF0ZUNvbnRyb2wsXG4gICAgICBzdGFydERhdGVDb250cm9sPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMubm9ybWFsaXplRGF0ZShzdGFydERhdGVDb250cm9sLmdldFJhd1ZhbHVlKCkpKSxcbiAgICAgICAgbWFwKHRoaXMubm9ybWFsaXplRGF0ZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHRoaXMuZGlzdGluY3QpXG4gICAgICApIHx8IG9mKCksXG4gICAgICBvZih0aGlzLnN0YXJ0RGF0ZT8uWydlbGVtZW50UmVmJ10pLnBpcGUoXG4gICAgICAgIG1hcCgocmVmKSA9PiByZWY/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCksXG4gICAgICAgIG1hcCgoZWwpID0+IHRoaXMubm9ybWFsaXplRGF0ZShlbC52YWx1ZSkpLFxuICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgdGhpcy5ub3JtYWxpemVEYXRlKHRoaXMuc3RhcnREYXRlPy5bJ2VsZW1lbnRSZWYnXT8ubmF0aXZlRWxlbWVudD8udGFyZ2V0Py52YWx1ZSB8fCBudWxsKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZERhdGUkID0gaWlmKFxuICAgICAgKCkgPT4gISFlbmREYXRlQ29udHJvbCxcbiAgICAgIGVuZERhdGVDb250cm9sPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMubm9ybWFsaXplRGF0ZShlbmREYXRlQ29udHJvbC5nZXRSYXdWYWx1ZSgpKSksXG4gICAgICAgIG1hcCh0aGlzLm5vcm1hbGl6ZURhdGUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmRpc3RpbmN0KVxuICAgICAgKSB8fCBvZigpLFxuICAgICAgb2YodGhpcy5lbmREYXRlPy5bJ2VsZW1lbnRSZWYnXSkucGlwZShcbiAgICAgICAgbWFwKChyZWYpID0+IHJlZj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KSxcbiAgICAgICAgbWFwKChlbCkgPT4gdGhpcy5ub3JtYWxpemVEYXRlKGVsLnZhbHVlKSksXG4gICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZURhdGUodGhpcy5lbmREYXRlPy5bJ2VsZW1lbnRSZWYnXT8ubmF0aXZlRWxlbWVudD8udGFyZ2V0Py52YWx1ZSB8fCBudWxsKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGVSYW5nZSQgPSBjb21iaW5lTGF0ZXN0KFtzdGFydERhdGUkLCBlbmREYXRlJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4gPERhdGVWYWx1ZT57IHN0YXJ0LCBlbmQgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmRpc3RpbmN0KSxcbiAgICAgIGZpbHRlcigodmFsdWUpID0+IHtcbiAgICAgICAgLy8gU2tpcCBpZiBzdGFydCBkYXRlIGlzIG51bGwgYnV0IGVuZCBkYXRlIGlzIGV4aXN0cy5cbiAgICAgICAgaWYgKCF2YWx1ZS5zdGFydCAmJiAhIXZhbHVlLmVuZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBTa2lwIHdoZW4gY2hvb3Npbmcgc3RhcnQgZGF0ZSBidXQgZW5kIGRhdGUgdmFsdWUgc3RpbGwgdGhlcmUuXG4gICAgICAgIGlmICh0aGlzLmRhdGVDaGFuZ2UkLnZhbHVlLnN0YXJ0ICYmICF0aGlzLmRhdGVDaGFuZ2UkLnZhbHVlLmVuZCAmJiB2YWx1ZS5lbmQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gU2tpcCB3aGVuIHJlc2V0dGluZyB2YWx1ZSBidXQgZW5kIGRhdGUgdmFsdWUgc3RpbGwgdGhlIHNhbWUuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZS5zdGFydCAmJlxuICAgICAgICAgIHZhbHVlLmVuZCAmJlxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLnN0YXJ0KSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRlQ2hhbmdlJC52YWx1ZS5zdGFydCkgJiZcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZS5lbmQpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGVDaGFuZ2UkLnZhbHVlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBtZXJnZSh0aGlzLmRhdGVDaGFuZ2UkLnBpcGUoc2tpcCgxKSksIGRhdGVSYW5nZSQpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWUgdG8gdGhlIGRhdGUgcmFuZ2UgcGlja2VyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHRoaXMuZGlzdGluY3QpLFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnJhbmdlUGlja2VyKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5yYW5nZVBpY2tlclsndmFsdWUnXSA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMucmFuZ2VQaWNrZXJbJ19jZHInXS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdERhdGVDaGFuZ2VUb1ZpZXdPckNvbnRyb2wodmFsdWUpO1xuXG4gICAgICAgIGlmICghdGhpcy5yYW5nZVBpY2tlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLnJhbmdlUGlja2VyWyd2YWx1ZUNoYW5nZSddLmVtaXQoe1xuICAgICAgICAgIHN0YXJ0OiB2YWx1ZS5zdGFydD8udG9JU09TdHJpbmcoKSB8fCBudWxsLFxuICAgICAgICAgIGVuZDogdmFsdWUuZW5kPy50b0lTT1N0cmluZygpIHx8IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXREYXRlQ2hhbmdlVG9WaWV3T3JDb250cm9sKHZhbHVlOiBEYXRlVmFsdWUpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSB2YWx1ZT8uc3RhcnQ/LnRvSVNPU3RyaW5nKCkgfHwgbnVsbDtcbiAgICBjb25zdCBlbmREYXRlID0gdmFsdWU/LmVuZD8udG9JU09TdHJpbmcoKSB8fCBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnREYXRlRWxlbWVudCA9IHRoaXMuc3RhcnREYXRlPy5bJ2VsZW1lbnRSZWYnXS5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZW5kRGF0ZUVsZW1lbnQgPSB0aGlzLmVuZERhdGU/LlsnZWxlbWVudFJlZiddLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIGlmIChzdGFydERhdGVFbGVtZW50LnZhbHVlICE9PSBzdGFydERhdGUpIHtcbiAgICAgIHN0YXJ0RGF0ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGUgfHwgJyc7XG4gICAgICBzdGFydERhdGVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGVFbGVtZW50LnZhbHVlICE9PSBlbmREYXRlKSB7XG4gICAgICBlbmREYXRlRWxlbWVudC52YWx1ZSA9IGVuZERhdGUgfHwgJyc7XG4gICAgICBlbmREYXRlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZUNvbnRyb2wgPSB0aGlzLnN0YXJ0RGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcbiAgICBjb25zdCBlbmREYXRlQ29udHJvbCA9IHRoaXMuZW5kRGF0ZT8uWyduZ0NvbnRyb2wnXT8uY29udHJvbDtcblxuICAgIGlmIChzdGFydERhdGVDb250cm9sICYmIHN0YXJ0RGF0ZUNvbnRyb2wudmFsdWUgIT09IHN0YXJ0RGF0ZSkge1xuICAgICAgc3RhcnREYXRlQ29udHJvbD8uc2V0VmFsdWUoc3RhcnREYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZUNvbnRyb2wgJiYgZW5kRGF0ZUNvbnRyb2wudmFsdWUgIT09IGVuZERhdGUpIHtcbiAgICAgIGVuZERhdGVDb250cm9sPy5zZXRWYWx1ZShlbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZGF0ZT86IERhdGUgfCBzdHJpbmcgfCBudWxsKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IG5ldyBEYXRlKGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXN0aW5jdDxQLCBDPihwcmV2OiBQLCBjdXJyZW50OiBDKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50KTtcbiAgfVxufVxuIl19