@ngx-performance-ui/ui
Version:
Ngx Performance UI - UI
222 lines • 19 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';
export class DatePickerComponent extends AbstractNgModelComponent {
/**
* @param {?} injector
*/
constructor(injector) {
super(injector);
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 {?}
*/
get options() {
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()}`,
};
}
/**
* @return {?}
*/
get displayFormat() {
return this.locale === 'tr' ? 'dd.MM.yyyy' : 'MMM d, y';
}
/**
* @return {?}
*/
get date() {
return this.value ? new Date(this.value) : null;
}
/**
* @private
* @return {?}
*/
subscribeToEvents() {
this.click$
.pipe(takeUntil(this.destroy$), filter((/**
* @param {?} event
* @return {?}
*/
event => event &&
this.closable &&
!this.group.nativeElement.contains(event.target) &&
!document.querySelector('#datepicker').contains((/** @type {?} */ (event.target))))))
.subscribe((/**
* @return {?}
*/
() => this.toggle()));
}
/**
* @return {?}
*/
ngOnDestroy() {
this.destroy$.next();
}
/**
* @return {?}
*/
onClick() {
if (this.datePicker.isOpened)
return;
this.toggle();
}
/**
* @return {?}
*/
toggle() {
if (this.datePicker.isOpened) {
this.hide();
}
else {
this.show();
}
setTimeout((/**
* @return {?}
*/
() => this.cdRef.detectChanges()), 0);
}
/**
* @return {?}
*/
show() {
this.flip();
this.datePicker.toggle();
this.closable = false;
this.subscribeToEvents();
setTimeout((/**
* @return {?}
*/
() => {
this.closable = true;
}), 500);
}
/**
* @return {?}
*/
hide() {
this.datePicker.toggle();
this.destroy$.next();
}
/**
* @return {?}
*/
flip() {
const { bottom, top } = ((/** @type {?} */ (this.group.nativeElement))).getBoundingClientRect();
const { innerHeight } = window;
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 {?}
*/
clear() {
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 {?}
*/
() => DatePickerComponent)),
multi: true,
},
]
}] }
];
/** @nocollapse */
DatePickerComponent.ctorParameters = () => [
{ 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);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXBlcmZvcm1hbmNlLXVpL3VpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQXFCLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWVuRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsd0JBQWdEOzs7O0lBa0R2RixZQUFtQixRQUFrQjtRQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakQ1QixXQUFNLEdBQWdCLElBQUksQ0FBQztRQUUzQixhQUFRLEdBQThELGNBQWMsQ0FBQztRQUVyRixvQkFBZSxHQUFXLHdCQUF3QixDQUFDO1FBRW5ELGdCQUFXLEdBQVcsd0JBQXdCLENB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TUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVTs7O3dCQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixFQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7O1lBMUJDLFFBQVE7OztxQkE0QlAsS0FBSzt1QkFFTCxLQUFLOzhCQUVMLEtBQUs7MEJBRUwsS0FBSzt1QkFFTCxLQUFLO3lCQUVMLEtBQUs7b0JBRUwsS0FBSzt5QkFLTCxTQUFTLFNBQUMsWUFBWTtvQkFFdEIsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O0FBSnhDO0lBREMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztzQ0FDbkMsVUFBVTttREFBYTs7O0lBZi9CLHFDQUFvQzs7SUFFcEMsdUNBQThGOztJQUU5Riw4Q0FBNEQ7O0lBRTVELDBDQUF3RDs7SUFFeEQsdUNBQTJDOztJQUUzQyx5Q0FBaUM7O0lBRWpDLG9DQUFzQzs7SUFFdEMscUNBQytCOztJQUUvQix5Q0FBMkQ7O0lBRTNELG9DQUE0RDs7SUFFNUQsdUNBQStCOztJQUUvQix1Q0FBMEI7O0lBMEJkLHVDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFic3RyYWN0TmdNb2RlbENvbXBvbmVudCwgRXZlbnRMaXN0ZW5lclN0YXRlLCB1dWlkIH0gZnJvbSAnQG5neC1wZXJmb3JtYW5jZS11aS9jb3JlJztcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCAqIGFzIGVuTG9jYWxlIGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbic7XG5pbXBvcnQgKiBhcyB0ckxvY2FsZSBmcm9tICdkYXRlLWZucy9sb2NhbGUvdHInO1xuaW1wb3J0IHsgRGF0ZXBpY2tlck9wdGlvbnMsIE5nRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlcGlja2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwLWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TmdNb2RlbENvbXBvbmVudDxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPiB7XG4gIEBJbnB1dCgpIGxvY2FsZTogJ3RyJyB8ICdlbicgPSAndHInO1xuXG4gIEBJbnB1dCgpIHBvc2l0aW9uOiAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCcgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgPSAnYm90dG9tLXJpZ2h0JztcblxuICBASW5wdXQoKSBiYXJUaXRsZUlmRW1wdHk6IHN0cmluZyA9ICdDbGljayB0byBzZWxlY3QgYSBkYXRlJztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ0NsaWNrIHRvIHNlbGVjdCBhIGRhdGUnO1xuXG4gIEBJbnB1dCgpIGFkZENsYXNzOiBzdHJpbmcgPSAnZm9ybS1jb250cm9sJztcblxuICBASW5wdXQoKSBsYWJlbENsYXNzOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJ1N0YXJ0IERhdGUnO1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgnY2xpY2snKSlcbiAgY2xpY2skOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyOiBOZ0RhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnZ3JvdXAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZ3JvdXA6IEVsZW1lbnRSZWY7XG5cbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNsb3NhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IG9wdGlvbnMoKTogRGF0ZXBpY2tlck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBtaW5ZZWFyOiAxODkwLFxuICAgICAgbWF4WWVhcjogMjA0MCxcbiAgICAgIGRpc3BsYXlGb3JtYXQ6IHRoaXMuZGlzcGxheUZvcm1hdCxcbiAgICAgIGJhclRpdGxlRm9ybWF0OiAnTU1NTSBZWVlZJyxcbiAgICAgIGRheU5hbWVzRm9ybWF0OiAnZGQnLFxuICAgICAgZmlyc3RDYWxlbmRhckRheTogMSwgLy8gMCAtIFN1bmRheSwgMSAtIE1vbmRheVxuICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSA9PT0gJ3RyJyA/IHRyTG9jYWxlIDogZW5Mb2NhbGUsXG4gICAgICBiYXJUaXRsZUlmRW1wdHk6IHRoaXMuYmFyVGl0bGVJZkVtcHR5LFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsIC8vIEhUTUwgaW5wdXQgcGxhY2Vob2xkZXIgYXR0cmlidXRlIChkZWZhdWx0OiAnJylcbiAgICAgIGFkZENsYXNzOiB0aGlzLmFkZENsYXNzLCAvLyBPcHRpb25hbCwgdmFsdWUgdG8gcGFzcyBvbiB0byBbbmdDbGFzc10gb24gdGhlIGlucHV0IGZpZWxkXG4gICAgICBmaWVsZElkOiBgcC1kYXRlLXBpY2tlci0ke3V1aWQoKX1gLCAvLyBJRCB0byBhc3NpZ24gdG8gdGhlIGlucHV0IGZpZWxkLiBEZWZhdWx0cyB0byBkYXRlcGlja2VyLTxjb3VudGVyPixcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUgPT09ICd0cicgPyAnZGQuTU0ueXl5eScgOiAnTU1NIGQsIHknO1xuICB9XG5cbiAgZ2V0IGRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNsaWNrJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGV2ZW50ID0+XG4gICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgdGhpcy5jbG9zYWJsZSAmJlxuICAgICAgICAgICAgIXRoaXMuZ3JvdXAubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RhdGVwaWNrZXInKS5jb250YWlucyhldmVudC50YXJnZXQgYXMgYW55KSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGUoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIG9uQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVBpY2tlci5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRlUGlja2VyLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSwgMCk7XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuZmxpcCgpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci50b2dnbGUoKTtcblxuICAgIHRoaXMuY2xvc2FibGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NhYmxlID0gdHJ1ZTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXIudG9nZ2xlKCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBmbGlwKCkge1xuICAgIGNvbnN0IHsgYm90dG9tLCB0b3AgfSA9ICh0aGlzLmdyb3VwLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgaW5uZXJIZWlnaHQgfSA9IHdpbmRvdztcblxuICAgIGlmIChib3R0b20gKyAzMzAgPiBpbm5lckhlaWdodCAmJiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ2JvdHRvbScpID4gLTEpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLnJlcGxhY2UoJ2JvdHRvbScsICd0b3AnKSBhcyBhbnk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRvcCAtIDMzMCA8IDAgJiYgdGhpcy5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbi5yZXBsYWNlKCd0b3AnLCAnYm90dG9tJykgYXMgYW55O1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==