UNPKG

@ngx-performance-ui/ui

Version:
265 lines 20.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, Injector, Input, ViewChild, ViewEncapsulation, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { AbstractNgModelComponent, EventListenerState, uuid } from '@ngx-performance-ui/core'; import { Select } from '@ngxs/store'; import * as enLocale from 'date-fns/locale/en'; import * as trLocale from 'date-fns/locale/tr'; import { NgDatepickerComponent } from 'ng2-datepicker'; import { Observable, Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; var DatePickerComponent = /** @class */ (function (_super) { tslib_1.__extends(DatePickerComponent, _super); function DatePickerComponent(injector) { var _this = _super.call(this, injector) || this; _this.injector = injector; _this.locale = 'tr'; _this.position = 'bottom-right'; _this.barTitleIfEmpty = 'Click to select a date'; _this.placeholder = 'Click to select a date'; _this.addClass = 'form-control'; _this.labelClass = ''; _this.label = 'Start Date'; _this.destroy$ = new Subject(); _this.closable = false; return _this; } Object.defineProperty(DatePickerComponent.prototype, "options", { get: /** * @return {?} */ function () { return { minYear: 1890, maxYear: 2040, displayFormat: this.displayFormat, barTitleFormat: 'MMMM YYYY', dayNamesFormat: 'dd', firstCalendarDay: 1, // 0 - Sunday, 1 - Monday locale: this.locale === 'tr' ? trLocale : enLocale, barTitleIfEmpty: this.barTitleIfEmpty, placeholder: this.placeholder, // HTML input placeholder attribute (default: '') addClass: this.addClass, // Optional, value to pass on to [ngClass] on the input field fieldId: "p-date-picker-" + uuid(), }; }, enumerable: true, configurable: true }); Object.defineProperty(DatePickerComponent.prototype, "displayFormat", { get: /** * @return {?} */ function () { return this.locale === 'tr' ? 'dd.MM.yyyy' : 'MMM d, y'; }, enumerable: true, configurable: true }); Object.defineProperty(DatePickerComponent.prototype, "date", { get: /** * @return {?} */ function () { return this.value ? new Date(this.value) : null; }, enumerable: true, configurable: true }); /** * @private * @return {?} */ DatePickerComponent.prototype.subscribeToEvents = /** * @private * @return {?} */ function () { var _this = this; this.click$ .pipe(takeUntil(this.destroy$), filter((/** * @param {?} event * @return {?} */ function (event) { return event && _this.closable && !_this.group.nativeElement.contains(event.target) && !document.querySelector('#datepicker').contains((/** @type {?} */ (event.target))); }))) .subscribe((/** * @return {?} */ function () { return _this.toggle(); })); }; /** * @return {?} */ DatePickerComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.destroy$.next(); }; /** * @return {?} */ DatePickerComponent.prototype.onClick = /** * @return {?} */ function () { if (this.datePicker.isOpened) return; this.toggle(); }; /** * @return {?} */ DatePickerComponent.prototype.toggle = /** * @return {?} */ function () { var _this = this; if (this.datePicker.isOpened) { this.hide(); } else { this.show(); } setTimeout((/** * @return {?} */ function () { return _this.cdRef.detectChanges(); }), 0); }; /** * @return {?} */ DatePickerComponent.prototype.show = /** * @return {?} */ function () { var _this = this; this.flip(); this.datePicker.toggle(); this.closable = false; this.subscribeToEvents(); setTimeout((/** * @return {?} */ function () { _this.closable = true; }), 500); }; /** * @return {?} */ DatePickerComponent.prototype.hide = /** * @return {?} */ function () { this.datePicker.toggle(); this.destroy$.next(); }; /** * @return {?} */ DatePickerComponent.prototype.flip = /** * @return {?} */ function () { var _a = ((/** @type {?} */ (this.group.nativeElement))).getBoundingClientRect(), bottom = _a.bottom, top = _a.top; var innerHeight = window.innerHeight; if (bottom + 330 > innerHeight && this.position.indexOf('bottom') > -1) { this.position = (/** @type {?} */ (this.position.replace('bottom', 'top'))); this.cdRef.detectChanges(); } else if (top - 330 < 0 && this.position.indexOf('top') > -1) { this.position = (/** @type {?} */ (this.position.replace('top', 'bottom'))); this.cdRef.detectChanges(); } }; /** * @return {?} */ DatePickerComponent.prototype.clear = /** * @return {?} */ function () { this.value = null; }; DatePickerComponent.decorators = [ { type: Component, args: [{ selector: 'p-datepicker', template: "<div class=\"datepicker-container\">\n <label class=\"{{ labelClass }}\" [attr.for]=\"options.fieldId\">{{ label }}</label>\n <div #group class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control bg-white\"\n [readonly]=\"true\"\n [attr.placeholder]=\"placeholder\"\n [value]=\"date | date: displayFormat\"\n (click)=\"onClick()\"\n />\n <fa-icon *ngIf=\"value\" [icon]=\"['fas', 'times']\" class=\"text-secondary\" (click)=\"clear()\"></fa-icon>\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text bg-white\" (click)=\"toggle()\">\n <fa-icon *ngIf=\"value\" [icon]=\"['fas', 'calendar-day']\"></fa-icon>\n </span>\n </div>\n </div>\n <ng-datepicker\n id=\"datepicker\"\n #datePicker\n [headless]=\"true\"\n [position]=\"position\"\n [options]=\"options\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"destroy$.next()\"\n >\n </ng-datepicker>\n</div>\n", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return DatePickerComponent; })), multi: true, }, ] }] } ]; /** @nocollapse */ DatePickerComponent.ctorParameters = function () { return [ { type: Injector } ]; }; DatePickerComponent.propDecorators = { locale: [{ type: Input }], position: [{ type: Input }], barTitleIfEmpty: [{ type: Input }], placeholder: [{ type: Input }], addClass: [{ type: Input }], labelClass: [{ type: Input }], label: [{ type: Input }], datePicker: [{ type: ViewChild, args: ['datePicker',] }], group: [{ type: ViewChild, args: ['group', { read: ElementRef },] }] }; tslib_1.__decorate([ Select(EventListenerState.getOne('click')), tslib_1.__metadata("design:type", Observable) ], DatePickerComponent.prototype, "click$", void 0); return DatePickerComponent; }(AbstractNgModelComponent)); export { DatePickerComponent }; if (false) { /** @type {?} */ DatePickerComponent.prototype.locale; /** @type {?} */ DatePickerComponent.prototype.position; /** @type {?} */ DatePickerComponent.prototype.barTitleIfEmpty; /** @type {?} */ DatePickerComponent.prototype.placeholder; /** @type {?} */ DatePickerComponent.prototype.addClass; /** @type {?} */ DatePickerComponent.prototype.labelClass; /** @type {?} */ DatePickerComponent.prototype.label; /** @type {?} */ DatePickerComponent.prototype.click$; /** @type {?} */ DatePickerComponent.prototype.datePicker; /** @type {?} */ DatePickerComponent.prototype.group; /** @type {?} */ DatePickerComponent.prototype.destroy$; /** @type {?} */ DatePickerComponent.prototype.closable; /** @type {?} */ DatePickerComponent.prototype.injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXBlcmZvcm1hbmNlLXVpL3VpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQXFCLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRDtJQWF5QywrQ0FBZ0Q7SUFrRHZGLDZCQUFtQixRQUFrQjtRQUFyQyxZQUNFLGtCQUFNLFFBQVEsQ0FBQyxTQUNoQjtRQUZrQixjQUFRLEdBQVIsUUFBUSxDQUFVO1FBakQ1QixZQUFNLEdBQWdCLElBQUksQ0FBQztRQUUzQixjQUFRLEdBQThELGNBQWMsQ0FBQztRQUVyRixxQkFBZSxHQUFXLHdCQUF3QixDQUFDO1FBRW5ELGlCQUFXLEdBQVcsd0JBQXdCLENBQUM7UUFFL0MsY0FBUSxH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SUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4Qix1OUJBQTBDO29CQUMxQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxtQkFBbUIsRUFBbkIsQ0FBbUIsRUFBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBMUJDLFFBQVE7Ozt5QkE0QlAsS0FBSzsyQkFFTCxLQUFLO2tDQUVMLEtBQUs7OEJBRUwsS0FBSzsyQkFFTCxLQUFLOzZCQUVMLEtBQUs7d0JBRUwsS0FBSzs2QkFLTCxTQUFTLFNBQUMsWUFBWTt3QkFFdEIsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O0lBSnhDO1FBREMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzswQ0FDbkMsVUFBVTt1REFBYTtJQXlHakMsMEJBQUM7Q0FBQSxBQXRJRCxDQWF5Qyx3QkFBd0IsR0F5SGhFO1NBekhZLG1CQUFtQjs7O0lBQzlCLHFDQUFvQzs7SUFFcEMsdUNBQThGOztJQUU5Riw4Q0FBNEQ7O0lBRTVELDBDQUF3RDs7SUFFeEQsdUNBQTJDOztJQUUzQyx5Q0FBaUM7O0lBRWpDLG9DQUFzQzs7SUFFdEMscUNBQytCOztJQUUvQix5Q0FBMkQ7O0lBRTNELG9DQUE0RDs7SUFFNUQsdUNBQStCOztJQUUvQix1Q0FBMEI7O0lBMEJkLHVDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFic3RyYWN0TmdNb2RlbENvbXBvbmVudCwgRXZlbnRMaXN0ZW5lclN0YXRlLCB1dWlkIH0gZnJvbSAnQG5neC1wZXJmb3JtYW5jZS11aS9jb3JlJztcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCAqIGFzIGVuTG9jYWxlIGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbic7XG5pbXBvcnQgKiBhcyB0ckxvY2FsZSBmcm9tICdkYXRlLWZucy9sb2NhbGUvdHInO1xuaW1wb3J0IHsgRGF0ZXBpY2tlck9wdGlvbnMsIE5nRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlcGlja2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwLWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TmdNb2RlbENvbXBvbmVudDxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPiB7XG4gIEBJbnB1dCgpIGxvY2FsZTogJ3RyJyB8ICdlbicgPSAndHInO1xuXG4gIEBJbnB1dCgpIHBvc2l0aW9uOiAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCcgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgPSAnYm90dG9tLXJpZ2h0JztcblxuICBASW5wdXQoKSBiYXJUaXRsZUlmRW1wdHk6IHN0cmluZyA9ICdDbGljayB0byBzZWxlY3QgYSBkYXRlJztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ0NsaWNrIHRvIHNlbGVjdCBhIGRhdGUnO1xuXG4gIEBJbnB1dCgpIGFkZENsYXNzOiBzdHJpbmcgPSAnZm9ybS1jb250cm9sJztcblxuICBASW5wdXQoKSBsYWJlbENsYXNzOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJ1N0YXJ0IERhdGUnO1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgnY2xpY2snKSlcbiAgY2xpY2skOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyOiBOZ0RhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnZ3JvdXAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZ3JvdXA6IEVsZW1lbnRSZWY7XG5cbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNsb3NhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IG9wdGlvbnMoKTogRGF0ZXBpY2tlck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBtaW5ZZWFyOiAxODkwLFxuICAgICAgbWF4WWVhcjogMjA0MCxcbiAgICAgIGRpc3BsYXlGb3JtYXQ6IHRoaXMuZGlzcGxheUZvcm1hdCxcbiAgICAgIGJhclRpdGxlRm9ybWF0OiAnTU1NTSBZWVlZJyxcbiAgICAgIGRheU5hbWVzRm9ybWF0OiAnZGQnLFxuICAgICAgZmlyc3RDYWxlbmRhckRheTogMSwgLy8gMCAtIFN1bmRheSwgMSAtIE1vbmRheVxuICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSA9PT0gJ3RyJyA/IHRyTG9jYWxlIDogZW5Mb2NhbGUsXG4gICAgICBiYXJUaXRsZUlmRW1wdHk6IHRoaXMuYmFyVGl0bGVJZkVtcHR5LFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsIC8vIEhUTUwgaW5wdXQgcGxhY2Vob2xkZXIgYXR0cmlidXRlIChkZWZhdWx0OiAnJylcbiAgICAgIGFkZENsYXNzOiB0aGlzLmFkZENsYXNzLCAvLyBPcHRpb25hbCwgdmFsdWUgdG8gcGFzcyBvbiB0byBbbmdDbGFzc10gb24gdGhlIGlucHV0IGZpZWxkXG4gICAgICBmaWVsZElkOiBgcC1kYXRlLXBpY2tlci0ke3V1aWQoKX1gLCAvLyBJRCB0byBhc3NpZ24gdG8gdGhlIGlucHV0IGZpZWxkLiBEZWZhdWx0cyB0byBkYXRlcGlja2VyLTxjb3VudGVyPixcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUgPT09ICd0cicgPyAnZGQuTU0ueXl5eScgOiAnTU1NIGQsIHknO1xuICB9XG5cbiAgZ2V0IGRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNsaWNrJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGV2ZW50ID0+XG4gICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgdGhpcy5jbG9zYWJsZSAmJlxuICAgICAgICAgICAgIXRoaXMuZ3JvdXAubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RhdGVwaWNrZXInKS5jb250YWlucyhldmVudC50YXJnZXQgYXMgYW55KSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGUoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIG9uQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVBpY2tlci5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRlUGlja2VyLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSwgMCk7XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuZmxpcCgpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci50b2dnbGUoKTtcblxuICAgIHRoaXMuY2xvc2FibGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NhYmxlID0gdHJ1ZTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXIudG9nZ2xlKCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBmbGlwKCkge1xuICAgIGNvbnN0IHsgYm90dG9tLCB0b3AgfSA9ICh0aGlzLmdyb3VwLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgaW5uZXJIZWlnaHQgfSA9IHdpbmRvdztcblxuICAgIGlmIChib3R0b20gKyAzMzAgPiBpbm5lckhlaWdodCAmJiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ2JvdHRvbScpID4gLTEpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLnJlcGxhY2UoJ2JvdHRvbScsICd0b3AnKSBhcyBhbnk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRvcCAtIDMzMCA8IDAgJiYgdGhpcy5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbi5yZXBsYWNlKCd0b3AnLCAnYm90dG9tJykgYXMgYW55O1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==