UNPKG

ng-devui

Version:

DevUI components based on Angular

150 lines 19.8 kB
import { Directive, ElementRef, EventEmitter, forwardRef, HostListener, Output, Renderer2 } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { addClassToOrigin, removeClassFromOrigin } from 'ng-devui/utils'; import { fromEvent } from 'rxjs'; import { debounceTime, map } from 'rxjs/operators'; import { TwoDatePickerComponent } from './two-datepicker.component'; import * as i0 from "@angular/core"; import * as i1 from "./two-datepicker.component"; export class TwoDatePickerEndDirective { constructor(twoDatePicker, renderer, el) { this.twoDatePicker = twoDatePicker; this.renderer = renderer; this.el = el; this.selectEnd = new EventEmitter(); this.onChange = (_) => null; this.clear = () => { this.twoDatePicker.clear('end'); }; this.twoDateSub = this.twoDatePicker.selectDateSubject.subscribe(data => { if (data.side === 'end') { if (this.el.nativeElement.tagName === 'INPUT') { this.writeValue(data.date); } else { this.el.nativeElement.innerHTML = data.date ? this.twoDatePicker.formatDate(data.date) : this.userHtml; } if (!data.onlyWrite) { this.selectEnd.emit(data.date); this.onChange(data.date); } } }); this.switchOriginSub = this.twoDatePicker.switchOriginPositionSub.subscribe(side => { if (side === 'end') { addClassToOrigin(this.el); } else { removeClassFromOrigin(this.el); } }); } toggle(event) { this.twoDatePicker.toggle('end'); } onBlur($event) { if (!this.validDate(this.el.nativeElement.value)) { this.resetValue(); } } ngOnInit() { this.userHtml = this.el.nativeElement.innerHTML; this.initInputChanges(); } initInputChanges() { this.valueChangeSubscrip = fromEvent(this.el.nativeElement, 'keyup').pipe(map((e) => { console.log(e); return e.target.value; }), debounceTime(300)).subscribe(value => { this.transUserInputToDatePicker(value); }); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { return; } writeValue(selectedEnd) { selectedEnd = selectedEnd || null; const formatEnd = selectedEnd ? this.twoDatePicker.dateConverter.format(selectedEnd, this.twoDatePicker.dateFormat, this.twoDatePicker.locale) : ''; this.renderer.setProperty(this.el.nativeElement, 'value', formatEnd); this.twoDatePicker.selectEnd(selectedEnd, true); } transUserInputToDatePicker(value) { if (!this.twoDatePicker.showTime) { const _value = value || this.el.nativeElement.value; if (!_value && !this.twoDatePicker.rangeEnd || !_value) { this.clear(); return; } const valueDate = new Date(_value); if (_value && this.validDate(_value)) { this.twoDatePicker.selectEnd(valueDate); [this.twoDatePicker.rangeStart, this.twoDatePicker.rangeEnd] = this.twoDatePicker.selectedRange; } } else { this.resetValue(); } } validDate(value) { if (!value) { return true; } const valueDate = new Date(value); const valueFormat = valueDate && !isNaN(valueDate.getTime()) && this.twoDatePicker.dateConverter.format(valueDate, this.twoDatePicker.dateFormat, this.twoDatePicker.locale); if (!valueDate || value !== valueFormat || (value === valueFormat && (valueDate.getTime() < this.twoDatePicker.minDate.getTime() || valueDate.getTime() > this.twoDatePicker.maxDate.getTime()))) { return false; } else { return true; } } resetValue() { if (this.twoDatePicker.rangeEnd) { this.el.nativeElement.value = this.twoDatePicker.dateConverter.format(this.twoDatePicker.rangeEnd, this.twoDatePicker.dateFormat, this.twoDatePicker.locale); } } ngOnDestroy() { if (this.twoDateSub) { this.twoDateSub.unsubscribe(); } if (this.switchOriginSub) { this.switchOriginSub.unsubscribe(); } if (this.valueChangeSubscrip) { this.valueChangeSubscrip.unsubscribe(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoDatePickerEndDirective, deps: [{ token: i1.TwoDatePickerComponent }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TwoDatePickerEndDirective, selector: "[dTwoDatePickerEnd]", outputs: { selectEnd: "selectEnd" }, host: { listeners: { "blur": "onBlur($event)" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TwoDatePickerEndDirective), multi: true }], exportAs: ["twoDatePickerEnd"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoDatePickerEndDirective, decorators: [{ type: Directive, args: [{ selector: '[dTwoDatePickerEnd]', exportAs: 'twoDatePickerEnd', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TwoDatePickerEndDirective), multi: true }] }] }], ctorParameters: () => [{ type: i1.TwoDatePickerComponent }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { selectEnd: [{ type: Output }], onBlur: [{ type: HostListener, args: ['blur', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWRhdGVwaWNrZXItZW5kLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RldnVpL2RhdGVwaWNrZXIvdHdvLWRhdGVwaWNrZXIvdHdvLWRhdGVwaWNrZXItZW5kLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBV3BFLE1BQU0sT0FBTyx5QkFBeUI7SUFXcEMsWUFBb0IsYUFBcUMsRUFBVSxRQUFtQixFQUNsRSxFQUFjO1FBRGQsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNsRSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBVnhCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBT3RDLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBdUVwQyxVQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBckVBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN4QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN6RyxDQUFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pGLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNuQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWtCO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFHRCxNQUFNLENBQUMsTUFBTTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdkUsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN4QixDQUFDLENBQUMsRUFDRixZQUFZLENBQUMsR0FBRyxDQUFDLENBQ2xCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLE9BQU87SUFDVCxDQUFDO0lBRUQsVUFBVSxDQUFDLFdBQVc7UUFDcEIsV0FBVyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEgsRUFBRSxDQUFDO1FBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBTUQsMEJBQTBCLENBQUMsS0FBYztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3BELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDbEcsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRyxJQUNFLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxXQUFXO1lBQ25DLENBQUMsS0FBSyxLQUFLLFdBQVc7Z0JBQ3RCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQzNILENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSztnQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkksQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7K0dBeklVLHlCQUF5QjttR0FBekIseUJBQXlCLHNJQU56QixDQUFDO2dCQUNWLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7Z0JBQ3hELEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQzs7NEZBRVMseUJBQXlCO2tCQVRyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFNBQVMsRUFBRSxDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO2lCQUNIOzRJQUdXLFNBQVM7c0JBQWxCLE1BQU07Z0JBc0NQLE1BQU07c0JBREwsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGFkZENsYXNzVG9PcmlnaW4sIHJlbW92ZUNsYXNzRnJvbU9yaWdpbiB9IGZyb20gJ25nLWRldnVpL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFR3b0RhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL3R3by1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkVHdvRGF0ZVBpY2tlckVuZF0nLFxuICBleHBvcnRBczogJ3R3b0RhdGVQaWNrZXJFbmQnLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHdvRGF0ZVBpY2tlckVuZERpcmVjdGl2ZSksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgVHdvRGF0ZVBpY2tlckVuZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQE91dHB1dCgpIHNlbGVjdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHVzZXJIdG1sO1xuICBwcml2YXRlIHN3aXRjaE9yaWdpblN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHR3b0RhdGVTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0d29EYXRlUGlja2VyOiBUd29EYXRlUGlja2VyQ29tcG9uZW50LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLnR3b0RhdGVTdWIgPSB0aGlzLnR3b0RhdGVQaWNrZXIuc2VsZWN0RGF0ZVN1YmplY3Quc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEuc2lkZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKGRhdGEuZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGEuZGF0ZSA/IHRoaXMudHdvRGF0ZVBpY2tlci5mb3JtYXREYXRlKGRhdGEuZGF0ZSkgOiB0aGlzLnVzZXJIdG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YS5vbmx5V3JpdGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEVuZC5lbWl0KGRhdGEuZGF0ZSk7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRhLmRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hPcmlnaW5TdWIgPSB0aGlzLnR3b0RhdGVQaWNrZXIuc3dpdGNoT3JpZ2luUG9zaXRpb25TdWIuc3Vic2NyaWJlKHNpZGUgPT4ge1xuICAgICAgaWYgKHNpZGUgPT09ICdlbmQnKSB7XG4gICAgICAgIGFkZENsYXNzVG9PcmlnaW4odGhpcy5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDbGFzc0Zyb21PcmlnaW4odGhpcy5lbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHRoaXMudHdvRGF0ZVBpY2tlci50b2dnbGUoJ2VuZCcpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIG9uQmx1cigkZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMudmFsaWREYXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSkpIHtcbiAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXNlckh0bWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIHRoaXMuaW5pdElucHV0Q2hhbmdlcygpO1xuICB9XG5cbiAgaW5pdElucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXAgPSBmcm9tRXZlbnQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgbWFwKChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHJldHVybiBlLnRhcmdldC52YWx1ZTtcbiAgICAgIH0pLFxuICAgICAgZGVib3VuY2VUaW1lKDMwMClcbiAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnRyYW5zVXNlcklucHV0VG9EYXRlUGlja2VyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3cml0ZVZhbHVlKHNlbGVjdGVkRW5kKTogdm9pZCB7XG4gICAgc2VsZWN0ZWRFbmQgPSBzZWxlY3RlZEVuZCB8fCBudWxsO1xuICAgIGNvbnN0IGZvcm1hdEVuZCA9IHNlbGVjdGVkRW5kID9cbiAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlQ29udmVydGVyLmZvcm1hdChzZWxlY3RlZEVuZCwgdGhpcy50d29EYXRlUGlja2VyLmRhdGVGb3JtYXQsIHRoaXMudHdvRGF0ZVBpY2tlci5sb2NhbGUpIDpcbiAgICAgICcnO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmb3JtYXRFbmQpO1xuICAgIHRoaXMudHdvRGF0ZVBpY2tlci5zZWxlY3RFbmQoc2VsZWN0ZWRFbmQsIHRydWUpO1xuICB9XG5cbiAgY2xlYXIgPSAoKSA9PiB7XG4gICAgdGhpcy50d29EYXRlUGlja2VyLmNsZWFyKCdlbmQnKTtcbiAgfTtcblxuICB0cmFuc1VzZXJJbnB1dFRvRGF0ZVBpY2tlcih2YWx1ZT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy50d29EYXRlUGlja2VyLnNob3dUaW1lKSB7XG4gICAgICBjb25zdCBfdmFsdWUgPSB2YWx1ZSB8fCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICBpZiAoIV92YWx1ZSAmJiAhdGhpcy50d29EYXRlUGlja2VyLnJhbmdlRW5kIHx8ICFfdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZURhdGUgPSBuZXcgRGF0ZShfdmFsdWUpO1xuICAgICAgaWYgKF92YWx1ZSAmJiB0aGlzLnZhbGlkRGF0ZShfdmFsdWUpKSB7XG4gICAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5zZWxlY3RFbmQodmFsdWVEYXRlKTtcbiAgICAgICAgW3RoaXMudHdvRGF0ZVBpY2tlci5yYW5nZVN0YXJ0LCB0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmRdID0gdGhpcy50d29EYXRlUGlja2VyLnNlbGVjdGVkUmFuZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVGb3JtYXQgPSB2YWx1ZURhdGUgJiYgIWlzTmFOKHZhbHVlRGF0ZS5nZXRUaW1lKCkpICYmXG4gICAgICB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUNvbnZlcnRlci5mb3JtYXQodmFsdWVEYXRlLCB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUZvcm1hdCwgdGhpcy50d29EYXRlUGlja2VyLmxvY2FsZSk7XG4gICAgaWYgKFxuICAgICAgIXZhbHVlRGF0ZSB8fCB2YWx1ZSAhPT0gdmFsdWVGb3JtYXQgfHxcbiAgICAgICh2YWx1ZSA9PT0gdmFsdWVGb3JtYXQgJiZcbiAgICAgICh2YWx1ZURhdGUuZ2V0VGltZSgpIDwgdGhpcy50d29EYXRlUGlja2VyLm1pbkRhdGUuZ2V0VGltZSgpIHx8IHZhbHVlRGF0ZS5nZXRUaW1lKCkgPiB0aGlzLnR3b0RhdGVQaWNrZXIubWF4RGF0ZS5nZXRUaW1lKCkpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXNldFZhbHVlKCkge1xuICAgIGlmICh0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmQpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlQ29udmVydGVyLmZvcm1hdCh0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmQsIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlRm9ybWF0LCB0aGlzLnR3b0RhdGVQaWNrZXIubG9jYWxlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy50d29EYXRlU3ViKSB7XG4gICAgICB0aGlzLnR3b0RhdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3dpdGNoT3JpZ2luU3ViKSB7XG4gICAgICB0aGlzLnN3aXRjaE9yaWdpblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXApIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19