UNPKG

ng-devui

Version:

DevUI components based on Angular

147 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 TwoDatePickerStartDirective { constructor(twoDatePicker, renderer, el) { this.twoDatePicker = twoDatePicker; this.renderer = renderer; this.el = el; this.selectStart = new EventEmitter(); this.onChange = (_) => null; this.clear = () => { this.twoDatePicker.clear('start'); }; this.twoDateSub = this.twoDatePicker.selectDateSubject.subscribe(data => { if (data.side === 'start') { 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.selectStart.emit(data.date); this.onChange(data.date); } } }); this.switchOriginSub = this.twoDatePicker.switchOriginPositionSub.subscribe(side => { if (side === 'start') { addClassToOrigin(this.el); } else { removeClassFromOrigin(this.el); } }); } toggle(event) { this.twoDatePicker.toggle('start'); } 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) => e.target.value), debounceTime(300)).subscribe(value => { this.transUserInputToDatePicker(value); }); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { return; } writeValue(selectedStart) { selectedStart = selectedStart || null; const formatStart = selectedStart ? this.twoDatePicker.dateConverter.format(selectedStart, this.twoDatePicker.dateFormat, this.twoDatePicker.locale) : ''; this.renderer.setProperty(this.el.nativeElement, 'value', formatStart); this.twoDatePicker.selectStart(selectedStart, true); } transUserInputToDatePicker(value) { if (!this.twoDatePicker.showTime) { const _value = value || this.el.nativeElement.value; if (!_value && !this.twoDatePicker.rangeStart || !_value) { this.clear(); return; } const valueDate = new Date(_value); if (_value && this.validDate(_value)) { this.twoDatePicker.selectStart(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.rangeStart) { this.el.nativeElement.value = this.twoDatePicker.dateConverter.format(this.twoDatePicker.rangeStart, 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: TwoDatePickerStartDirective, 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: TwoDatePickerStartDirective, selector: "[dTwoDatePickerStart]", outputs: { selectStart: "selectStart" }, host: { listeners: { "blur": "onBlur($event)" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TwoDatePickerStartDirective), multi: true }], exportAs: ["twoDatePickerStart"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoDatePickerStartDirective, decorators: [{ type: Directive, args: [{ selector: '[dTwoDatePickerStart]', exportAs: 'twoDatePickerStart', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TwoDatePickerStartDirective), multi: true }] }] }], ctorParameters: () => [{ type: i1.TwoDatePickerComponent }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { selectStart: [{ type: Output }], onBlur: [{ type: HostListener, args: ['blur', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWRhdGVwaWNrZXItc3RhcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci90d28tZGF0ZXBpY2tlci90d28tZGF0ZXBpY2tlci1zdGFydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQVdwRSxNQUFNLE9BQU8sMkJBQTJCO0lBV3RDLFlBQW9CLGFBQXFDLEVBQVUsUUFBbUIsRUFDbEUsRUFBYztRQURkLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbEUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQVZ4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFPeEMsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFvRXBDLFVBQUssR0FBRyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7UUFsRUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3pHLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakYsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04scUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBa0I7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUdELE1BQU0sQ0FBQyxNQUFNO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUN2RSxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQy9CLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FDbEIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsT0FBTztJQUNULENBQUM7SUFFRCxVQUFVLENBQUMsYUFBYTtRQUN0QixhQUFhLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNsSCxFQUFFLENBQUM7UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFNRCwwQkFBMEIsQ0FBQyxLQUFjO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUNsRyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9HLElBQ0UsQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLFdBQVc7WUFDbkMsQ0FBQyxLQUFLLEtBQUssV0FBVztnQkFDdEIsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFDM0gsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLO2dCQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzFCLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzsrR0F6SVUsMkJBQTJCO21HQUEzQiwyQkFBMkIsNElBTjNCLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztnQkFDMUQsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDOzs0RkFFUywyQkFBMkI7a0JBVHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsU0FBUyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUM7NEJBQzFELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7aUJBQ0g7NElBR1csV0FBVztzQkFBcEIsTUFBTTtnQkFzQ1AsTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYWRkQ2xhc3NUb09yaWdpbiwgcmVtb3ZlQ2xhc3NGcm9tT3JpZ2luIH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHdvRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vdHdvLWRhdGVwaWNrZXIuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RUd29EYXRlUGlja2VyU3RhcnRdJyxcbiAgZXhwb3J0QXM6ICd0d29EYXRlUGlja2VyU3RhcnQnLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHdvRGF0ZVBpY2tlclN0YXJ0RGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBUd29EYXRlUGlja2VyU3RhcnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBPdXRwdXQoKSBzZWxlY3RTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHVzZXJIdG1sO1xuICBwcml2YXRlIHN3aXRjaE9yaWdpblN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHR3b0RhdGVTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0d29EYXRlUGlja2VyOiBUd29EYXRlUGlja2VyQ29tcG9uZW50LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLnR3b0RhdGVTdWIgPSB0aGlzLnR3b0RhdGVQaWNrZXIuc2VsZWN0RGF0ZVN1YmplY3Quc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEuc2lkZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgICB0aGlzLndyaXRlVmFsdWUoZGF0YS5kYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0YS5kYXRlID8gdGhpcy50d29EYXRlUGlja2VyLmZvcm1hdERhdGUoZGF0YS5kYXRlKSA6IHRoaXMudXNlckh0bWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhLm9ubHlXcml0ZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3RhcnQuZW1pdChkYXRhLmRhdGUpO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoZGF0YS5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3dpdGNoT3JpZ2luU3ViID0gdGhpcy50d29EYXRlUGlja2VyLnN3aXRjaE9yaWdpblBvc2l0aW9uU3ViLnN1YnNjcmliZShzaWRlID0+IHtcbiAgICAgIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIGFkZENsYXNzVG9PcmlnaW4odGhpcy5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDbGFzc0Zyb21PcmlnaW4odGhpcy5lbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHRoaXMudHdvRGF0ZVBpY2tlci50b2dnbGUoJ3N0YXJ0Jyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcbiAgb25CbHVyKCRldmVudCkge1xuICAgIGlmICghdGhpcy52YWxpZERhdGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlKSkge1xuICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51c2VySHRtbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgdGhpcy5pbml0SW5wdXRDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0SW5wdXRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcCA9IGZyb21FdmVudCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpLnBpcGUoXG4gICAgICBtYXAoKGU6IGFueSkgPT4gZS50YXJnZXQudmFsdWUpLFxuICAgICAgZGVib3VuY2VUaW1lKDMwMClcbiAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnRyYW5zVXNlcklucHV0VG9EYXRlUGlja2VyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3cml0ZVZhbHVlKHNlbGVjdGVkU3RhcnQpOiB2b2lkIHtcbiAgICBzZWxlY3RlZFN0YXJ0ID0gc2VsZWN0ZWRTdGFydCB8fCBudWxsO1xuICAgIGNvbnN0IGZvcm1hdFN0YXJ0ID0gc2VsZWN0ZWRTdGFydCA/XG4gICAgICB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUNvbnZlcnRlci5mb3JtYXQoc2VsZWN0ZWRTdGFydCwgdGhpcy50d29EYXRlUGlja2VyLmRhdGVGb3JtYXQsIHRoaXMudHdvRGF0ZVBpY2tlci5sb2NhbGUpIDpcbiAgICAgICcnO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmb3JtYXRTdGFydCk7XG4gICAgdGhpcy50d29EYXRlUGlja2VyLnNlbGVjdFN0YXJ0KHNlbGVjdGVkU3RhcnQsIHRydWUpO1xuICB9XG5cbiAgY2xlYXIgPSAoKSA9PiB7XG4gICAgdGhpcy50d29EYXRlUGlja2VyLmNsZWFyKCdzdGFydCcpO1xuICB9O1xuXG4gIHRyYW5zVXNlcklucHV0VG9EYXRlUGlja2VyKHZhbHVlPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnR3b0RhdGVQaWNrZXIuc2hvd1RpbWUpIHtcbiAgICAgIGNvbnN0IF92YWx1ZSA9IHZhbHVlIHx8IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgIGlmICghX3ZhbHVlICYmICF0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VTdGFydCB8fCAhX3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWVEYXRlID0gbmV3IERhdGUoX3ZhbHVlKTtcbiAgICAgIGlmIChfdmFsdWUgJiYgdGhpcy52YWxpZERhdGUoX3ZhbHVlKSkge1xuICAgICAgICB0aGlzLnR3b0RhdGVQaWNrZXIuc2VsZWN0U3RhcnQodmFsdWVEYXRlKTtcbiAgICAgICAgW3RoaXMudHdvRGF0ZVBpY2tlci5yYW5nZVN0YXJ0LCB0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmRdID0gdGhpcy50d29EYXRlUGlja2VyLnNlbGVjdGVkUmFuZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVGb3JtYXQgPSB2YWx1ZURhdGUgJiYgIWlzTmFOKHZhbHVlRGF0ZS5nZXRUaW1lKCkpICYmXG4gICAgICB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUNvbnZlcnRlci5mb3JtYXQodmFsdWVEYXRlLCB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUZvcm1hdCwgdGhpcy50d29EYXRlUGlja2VyLmxvY2FsZSk7XG4gICAgaWYgKFxuICAgICAgIXZhbHVlRGF0ZSB8fCB2YWx1ZSAhPT0gdmFsdWVGb3JtYXQgfHxcbiAgICAgICh2YWx1ZSA9PT0gdmFsdWVGb3JtYXQgJiZcbiAgICAgICh2YWx1ZURhdGUuZ2V0VGltZSgpIDwgdGhpcy50d29EYXRlUGlja2VyLm1pbkRhdGUuZ2V0VGltZSgpIHx8IHZhbHVlRGF0ZS5nZXRUaW1lKCkgPiB0aGlzLnR3b0RhdGVQaWNrZXIubWF4RGF0ZS5nZXRUaW1lKCkpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXNldFZhbHVlKCkge1xuICAgIGlmICh0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VTdGFydCkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID1cbiAgICAgICB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUNvbnZlcnRlci5mb3JtYXQoXG4gICAgICAgICB0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VTdGFydCxcbiAgICAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlRm9ybWF0LFxuICAgICAgICAgdGhpcy50d29EYXRlUGlja2VyLmxvY2FsZVxuICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudHdvRGF0ZVN1Yikge1xuICAgICAgdGhpcy50d29EYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN3aXRjaE9yaWdpblN1Yikge1xuICAgICAgdGhpcy5zd2l0Y2hPcmlnaW5TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcCkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=