UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

304 lines 20.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Input, Output, Injector, Directive, forwardRef, EventEmitter, HostListener, ViewContainerRef, ComponentFactoryResolver } from '@angular/core'; import { DatePickerComponent } from './date-picker.component'; import { DatePickerOptions } from './date-picker-options.provider'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; export class DatePickerDirective { /** * @param {?} _viewContainerRef * @param {?} _defaultOptions * @param {?} _cfr */ constructor(_viewContainerRef, _defaultOptions, _cfr) { this._viewContainerRef = _viewContainerRef; this._defaultOptions = _defaultOptions; this._cfr = _cfr; this._eventListeners = []; this.minuteStep = 1; this.value = new Date(); this.onVisibleChange = new EventEmitter(true); this.onValueChange = new EventEmitter(); this.onOk = new EventEmitter(); this.onDismiss = new EventEmitter(); } /** * @return {?} */ togglePicker() { if (!this.picker) { this.showPicker(); } else { this.hidePicker(); } } /** * @return {?} */ showPicker() { if (!this.picker && !this.disabled) { setTimeout((/** * @return {?} */ () => { this._eventListeners = []; })); /** @type {?} */ const options = new DatePickerOptions(); Object.assign(options, this._defaultOptions, { hidePicker: (/** * @param {?} event * @return {?} */ (event) => { this.hidePicker(); }), updateNgModel: (/** * @param {?} value * @return {?} */ (value) => { if (this._ngModelOnChange) { this.value = value; this._ngModelOnChange(value); } }) }); /** @type {?} */ const optionalParams = [ 'mode', 'minDate', 'maxDate', 'minuteStep', 'value', 'mask', 'title', 'okText', 'dismissText', 'disabled', 'locale', 'appendToBody', 'showErrorToast', 'showErrorToastInterval', 'onOk', 'onDismiss', 'onValueChange' ]; optionalParams.forEach((/** * @param {?} param * @return {?} */ param => { if (typeof this[param] !== 'undefined') { ((/** @type {?} */ (options)))[param] = this[param]; } })); /** @type {?} */ const componentFactory = this._cfr.resolveComponentFactory(DatePickerComponent); /** @type {?} */ const childInjector = Injector.create([ { provide: DatePickerOptions, useValue: options } ]); this.picker = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector); if (options.appendToBody) { document.body.appendChild(this.picker.location.nativeElement); } this.onVisibleChange.emit(true); } } /** * @return {?} */ hidePicker() { if (this.picker) { this.picker.destroy(); delete this.picker; this.onVisibleChange.emit(false); this._eventListeners.forEach((/** * @param {?} fn * @return {?} */ fn => fn())); this._eventListeners = []; } } /** * @param {?} value * @return {?} */ writeValue(value) { this.value = value; } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this._ngModelOnChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this._ngModelOnTouched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { this.disabled = isDisabled; } /** * @return {?} */ ngOnInit() { this.onVisibleChange.emit(false); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes.isOpen) { if (changes.isOpen.currentValue === true) { this.showPicker(); } else { this.hidePicker(); } } } /** * @return {?} */ ngOnDestroy() { this.hidePicker(); } } DatePickerDirective.decorators = [ { type: Directive, args: [{ selector: '[DatePicker]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => DatePickerDirective)), multi: true } ] },] } ]; /** @nocollapse */ DatePickerDirective.ctorParameters = () => [ { type: ViewContainerRef }, { type: DatePickerOptions }, { type: ComponentFactoryResolver } ]; DatePickerDirective.propDecorators = { isOpen: [{ type: Input }], mode: [{ type: Input }], minDate: [{ type: Input }], maxDate: [{ type: Input }], use12Hours: [{ type: Input }], minuteStep: [{ type: Input }], value: [{ type: Input }], mask: [{ type: Input }], title: [{ type: Input }], okText: [{ type: Input }], dismissText: [{ type: Input }], disabled: [{ type: Input }], locale: [{ type: Input }], appendToBody: [{ type: Input }], showErrorToast: [{ type: Input }], showErrorToastInterval: [{ type: Input }], onVisibleChange: [{ type: Output }], onValueChange: [{ type: Output }], onOk: [{ type: Output }], onDismiss: [{ type: Output }], togglePicker: [{ type: HostListener, args: ['click',] }] }; if (false) { /** @type {?} */ DatePickerDirective.prototype.picker; /** * @type {?} * @private */ DatePickerDirective.prototype._eventListeners; /** * @type {?} * @private */ DatePickerDirective.prototype._ngModelOnChange; /** * @type {?} * @private */ DatePickerDirective.prototype._ngModelOnTouched; /** @type {?} */ DatePickerDirective.prototype.isOpen; /** @type {?} */ DatePickerDirective.prototype.mode; /** @type {?} */ DatePickerDirective.prototype.minDate; /** @type {?} */ DatePickerDirective.prototype.maxDate; /** @type {?} */ DatePickerDirective.prototype.use12Hours; /** @type {?} */ DatePickerDirective.prototype.minuteStep; /** @type {?} */ DatePickerDirective.prototype.value; /** @type {?} */ DatePickerDirective.prototype.mask; /** @type {?} */ DatePickerDirective.prototype.title; /** @type {?} */ DatePickerDirective.prototype.okText; /** @type {?} */ DatePickerDirective.prototype.dismissText; /** @type {?} */ DatePickerDirective.prototype.disabled; /** @type {?} */ DatePickerDirective.prototype.locale; /** @type {?} */ DatePickerDirective.prototype.appendToBody; /** @type {?} */ DatePickerDirective.prototype.showErrorToast; /** @type {?} */ DatePickerDirective.prototype.showErrorToastInterval; /** @type {?} */ DatePickerDirective.prototype.onVisibleChange; /** @type {?} */ DatePickerDirective.prototype.onValueChange; /** @type {?} */ DatePickerDirective.prototype.onOk; /** @type {?} */ DatePickerDirective.prototype.onDismiss; /** * @type {?} * @private */ DatePickerDirective.prototype._viewContainerRef; /** * @type {?} * @private */ DatePickerDirective.prototype._defaultOptions; /** * @type {?} * @private */ DatePickerDirective.prototype._cfr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJkYXRlLXBpY2tlci9kYXRlLXBpY2tlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFFBQVEsRUFHUixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBSVosZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXekUsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7O0lBd0Q5QixZQUNVLGlCQUFtQyxFQUNuQyxlQUFrQyxFQUNsQyxJQUE4QjtRQUY5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxTQUFJLEdBQUosSUFBSSxDQUEwQjtRQXpEaEMsb0JBQWUsR0FBc0IsRUFBRSxDQUFDO1FBZWhELGVBQVUsR0FBVyxDQUFDLENBQUM7UUFFdkIsVUFBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFvQnpCLG9CQUFlLEdBQTBCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhFLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdEQsU0FBSSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTdDLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQWUvQyxDQUFDOzs7O0lBWkosWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lB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Szt5QkFFTCxLQUFLO3lCQUVMLEtBQUs7b0JBRUwsS0FBSzttQkFFTCxLQUFLO29CQUVMLEtBQUs7cUJBRUwsS0FBSzswQkFFTCxLQUFLO3VCQUVMLEtBQUs7cUJBRUwsS0FBSzsyQkFFTCxLQUFLOzZCQUVMLEtBQUs7cUNBRUwsS0FBSzs4QkFFTCxNQUFNOzRCQUVOLE1BQU07bUJBRU4sTUFBTTt3QkFFTixNQUFNOzJCQUdOLFlBQVksU0FBQyxPQUFPOzs7O0lBOUNyQixxQ0FBMEM7Ozs7O0lBQzFDLDhDQUFnRDs7Ozs7SUFDaEQsK0NBQThDOzs7OztJQUM5QyxnREFBb0M7O0lBRXBDLHFDQUNnQjs7SUFDaEIsbUNBQ2E7O0lBQ2Isc0NBQ2dCOztJQUNoQixzQ0FDZ0I7O0lBQ2hCLHlDQUNvQjs7SUFDcEIseUNBQ3VCOztJQUN2QixvQ0FDeUI7O0lBQ3pCLG1DQUNjOztJQUNkLG9DQUNjOztJQUNkLHFDQUNlOztJQUNmLDBDQUNvQjs7SUFDcEIsdUNBQ2tCOztJQUNsQixxQ0FDWTs7SUFDWiwyQ0FDc0I7O0lBQ3RCLDZDQUN3Qjs7SUFDeEIscURBQytCOztJQUMvQiw4Q0FDZ0U7O0lBQ2hFLDRDQUNzRDs7SUFDdEQsbUNBQzZDOztJQUM3Qyx3Q0FDa0Q7Ozs7O0lBWWhELGdEQUEyQzs7Ozs7SUFDM0MsOENBQTBDOzs7OztJQUMxQyxtQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkluaXQsXG4gIEluamVjdG9yLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgRGlyZWN0aXZlLFxuICBmb3J3YXJkUmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgQ29tcG9uZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlck9wdGlvbnMgfSBmcm9tICcuL2RhdGUtcGlja2VyLW9wdGlvbnMucHJvdmlkZXInO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW0RhdGVQaWNrZXJdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHBpY2tlcjogQ29tcG9uZW50UmVmPERhdGVQaWNrZXJDb21wb25lbnQ+O1xuICBwcml2YXRlIF9ldmVudExpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgcHJpdmF0ZSBfbmdNb2RlbE9uQ2hhbmdlOiAodmFsdWU6IERhdGUpID0+IHt9O1xuICBwcml2YXRlIF9uZ01vZGVsT25Ub3VjaGVkOiAoKSA9PiB7fTtcblxuICBASW5wdXQoKVxuICBpc09wZW46IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIG1vZGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgbWluRGF0ZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtYXhEYXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHVzZTEySG91cnM6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIG1pbnV0ZVN0ZXA6IG51bWJlciA9IDE7XG4gIEBJbnB1dCgpXG4gIHZhbHVlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgQElucHV0KClcbiAgbWFzazogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgb2tUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGRpc21pc3NUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBsb2NhbGU6IGFueTtcbiAgQElucHV0KClcbiAgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBzaG93RXJyb3JUb2FzdDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgc2hvd0Vycm9yVG9hc3RJbnRlcnZhbDogbnVtYmVyO1xuICBAT3V0cHV0KClcbiAgb25WaXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKHRydWUpO1xuICBAT3V0cHV0KClcbiAgb25WYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvbk9rOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIG9uRGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICB0b2dnbGVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlcikge1xuICAgICAgdGhpcy5zaG93UGlja2VyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM6IERhdGVQaWNrZXJPcHRpb25zLFxuICAgIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBzaG93UGlja2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5waWNrZXIgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgdGhpcy5fZGVmYXVsdE9wdGlvbnMsIHtcbiAgICAgICAgaGlkZVBpY2tlcjogKGV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZU5nTW9kZWw6ICh2YWx1ZTogRGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9uZ01vZGVsT25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX25nTW9kZWxPbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJhbXM6IEFycmF5PGtleW9mIERhdGVQaWNrZXJEaXJlY3RpdmU+ID0gW1xuICAgICAgICAnbW9kZScsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21heERhdGUnLFxuICAgICAgICAnbWludXRlU3RlcCcsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdtYXNrJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ29rVGV4dCcsXG4gICAgICAgICdkaXNtaXNzVGV4dCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdsb2NhbGUnLFxuICAgICAgICAnYXBwZW5kVG9Cb2R5JyxcbiAgICAgICAgJ3Nob3dFcnJvclRvYXN0JyxcbiAgICAgICAgJ3Nob3dFcnJvclRvYXN0SW50ZXJ2YWwnLFxuICAgICAgICAnb25PaycsXG4gICAgICAgICdvbkRpc21pc3MnLFxuICAgICAgICAnb25WYWx1ZUNoYW5nZSdcbiAgICAgIF07XG4gICAgICBvcHRpb25hbFBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW3BhcmFtXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAob3B0aW9ucyBhcyBhbnkpW3BhcmFtXSA9IHRoaXNbcGFyYW1dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8RGF0ZVBpY2tlckNvbXBvbmVudD4gPSB0aGlzLl9jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIERhdGVQaWNrZXJDb21wb25lbnRcbiAgICAgICk7XG4gICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IERhdGVQaWNrZXJPcHRpb25zLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgICAgdGhpcy5waWNrZXIgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGgsXG4gICAgICAgIGNoaWxkSW5qZWN0b3JcbiAgICAgICk7XG4gICAgICBpZiAob3B0aW9ucy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlci5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGlkZVBpY2tlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5waWNrZXIpIHtcbiAgICAgIHRoaXMucGlja2VyLmRlc3Ryb3koKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnBpY2tlcjtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBEYXRlKSA9PiB7fSk6IHZvaWQge1xuICAgIHRoaXMuX25nTW9kZWxPbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XG4gICAgdGhpcy5fbmdNb2RlbE9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pc09wZW4pIHtcbiAgICAgIGlmIChjaGFuZ2VzLmlzT3Blbi5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zaG93UGlja2VyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhpZGVQaWNrZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmhpZGVQaWNrZXIoKTtcbiAgfVxufVxuIl19