@ngx-performance-ui/ui
Version:
Ngx Performance UI - UI
265 lines • 20.9 kB
JavaScript
/**
* @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==