ngx-mat-calendar
Version:
A datepicker with nepali and english calendar support
157 lines • 21.9 kB
JavaScript
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
import { DateType, DateFormat } from '../../model/calendar.model';
export class CalendarPopupComponent {
constructor() {
this.DateTimeChanged = new EventEmitter();
this.fromToTitle = 'From Date';
this.isFront = true;
this.className = '';
this.withTime = false;
this.dateType = DateType.AD;
this.dateFormatAD = DateFormat.ddMMyyyy;
this.dateFormatBS = DateFormat.yyyyMMdd;
this.minDate = new Date(1913, 3, 13);
this.maxDate = new Date(new Date().getFullYear() + 100, new Date().getMonth(), new Date().getDate());
this.closeOnClick = true;
this.defaultDateRange = true;
this.lang = 0;
this.currentDate = new Date();
}
get dateRange() {
return this.defaultDateRange;
}
set dateRange(val) {
this.defaultDateRange = val;
}
showCalendar(dateType, dateFormatAD, dateFormatBS, withTime, minDate, maxDate, closeOnClick, currentDate, lang) {
this.isFront = true;
this.dateType = dateType;
this.dateFormatAD = dateFormatAD;
this.dateFormatBS = dateFormatBS;
this.withTime = withTime;
this.minDate = minDate;
this.maxDate = maxDate;
this.closeOnClick = closeOnClick;
this.currentDate = currentDate ? currentDate : new Date();
this.lang = lang;
if (this.lang === 0) {
this.fromToTitle = 'From Date';
}
else {
this.fromToTitle = 'देखि';
}
this.selectedToDate = null;
this.cal1.showCalendar(this.dateType, this.dateFormatAD, this.dateFormatBS, this.withTime, this.minDate, this.maxDate, this.closeOnClick, this.currentDate, this.lang);
if (this.withTime) {
if (this.dateRange) {
this.className = 'container with-range-with-time';
}
else {
this.className = 'container without-range-with-time';
}
}
else {
if (this.dateRange) {
this.className = 'container with-range';
}
else {
this.className = 'container without-range';
}
}
}
ngOnInit() {
}
revert() {
this.DateTimeChanged.emit(undefined);
}
submit() {
let result;
if (this.dateRange === false) {
result = [this.cal1.selectedDate];
this.DateTimeChanged.emit(result);
}
else {
if (this.isFront === true) {
this.nextPanel();
}
else {
result = [this.cal1.selectedDate, this.cal2.selectedDate];
this.DateTimeChanged.emit(result);
}
}
}
datetimeChangedFrom(e) {
this.selectedFromDate = {
date: e.date,
dateAD: e.dateAD,
dateBS: e.dateBS,
selectedDateType: e.selectedDateType
};
if (this.dateRange === false) {
if (this.closeOnClick === true) {
const result = [
this.selectedFromDate
];
this.DateTimeChanged.emit(result);
return;
}
}
else {
if (this.closeOnClick === true) {
this.nextPanel();
}
}
}
datetimeChangedTo(e) {
this.selectedToDate = {
date: e.date,
dateAD: e.dateAD,
dateBS: e.dateBS,
selectedDateType: e.selectedDateType
};
if (this.closeOnClick === true) {
const result = [this.selectedFromDate, this.selectedToDate];
this.DateTimeChanged.emit(result);
}
}
nextPanel() {
if (this.lang === 0) {
this.fromToTitle = 'To Date';
}
else {
this.fromToTitle = 'सम्म';
}
if (this.selectedFromDate == null) {
this.selectedFromDate = this.cal1.selectedDate;
}
const minDate = new Date(this.selectedFromDate.date.toDateString());
this.cal2.showCalendar(this.selectedFromDate.selectedDateType, this.dateFormatAD, this.dateFormatBS, this.withTime, minDate, this.maxDate, this.closeOnClick, minDate, this.lang);
this.isFront = !this.isFront;
}
previousPanel() {
if (this.lang === 0) {
this.fromToTitle = 'From Date';
}
else {
this.fromToTitle = 'देखि';
}
this.selectedToDate = null;
this.isFront = !this.isFront;
}
}
CalendarPopupComponent.decorators = [
{ type: Component, args: [{
selector: 'app-calendar-popup',
template: "<section [class]=\"className\">\r\n <div *ngIf=\"dateRange==true\" class=\"range-heading\">\r\n <button *ngIf=\"isFront==false\" mat-button mat-icon-button color=\"primary\" tabindex=\"-1\"\r\n (click)=\"previousPanel()\">\r\n <mat-icon class=\"mat-14\">chevron_left</mat-icon>\r\n </button>\r\n <div style=\"padding-left:16px; padding-right:16px;\">\r\n <label class=\"text-bold\">{{fromToTitle}}</label>\r\n </div>\r\n <button *ngIf=\"isFront==true\" mat-button mat-icon-button color=\"primary\" tabindex=\"-1\"\r\n (click)=\"nextPanel()\">\r\n <mat-icon class=\"mat-14\">chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div #card class=\"card\" [ngClass]=\"isFront===true? 'card' : 'card flipped'\">\r\n <div class=\"front\">\r\n <dp-calendar [ngClass]=\"isFront===true? 'active' : 'none-active'\" #cal1 [dateRange]=\"dateRange\"\r\n (DateTimeChanged)=\"datetimeChangedFrom($event)\">\r\n </dp-calendar>\r\n </div>\r\n <div class=\"back\">\r\n <dp-calendar [ngClass]=\"isFront===true? 'none-active' : 'active'\" #cal2 [dateRange]=\"dateRange\"\r\n (DateTimeChanged)=\"datetimeChangedTo($event)\">\r\n </dp-calendar>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"withTime===true\" class=\"footer-with-time\" style.padding=\"20px\">\r\n <div class=\"button-container\">\r\n <button mat-button (click)=\"revert()\">{{lang==0?'Cancel':'\u0930\u0926\u094D\u0926'}}</button>\r\n <button mat-button (click)=\"submit()\">{{lang==0?'Ok':'\u0920\u093F\u0915'}}</button>\r\n </div>\r\n </div>\r\n</section>",
styles: [".with-range{height:318px}.with-range-with-time{height:405px}.without-range{height:277px}.without-range-with-time{height:365px}.footer-with-time{background:#fff;display:flex;place-content:flex-end;position:relative;top:327px;width:100%}.button-container{align-self:flex-end}.button-container>*{min-width:100px}.container{border:1px solid #ccc;overflow:hidden;width:275px}.card,.container{position:relative}.card{-transform-origin:50% 50%;transform-style:preserve-3d;transition:transform .25s;width:100%}.card div{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;height:100%;position:absolute;text-align:center;width:100%}.card .front{background:#ccc}.card .back{transform:rotateY(180deg)}.active{background-color:#fff}.none-active{background-color:silver;display:none}.card.flipped{transform:rotateY(180deg)}.range-heading{align-items:center;display:flex;justify-content:space-between}"]
},] }
];
CalendarPopupComponent.ctorParameters = () => [];
CalendarPopupComponent.propDecorators = {
DateTimeChanged: [{ type: Output }],
cal1: [{ type: ViewChild, args: ['cal1', { static: false },] }],
cal2: [{ type: ViewChild, args: ['cal2', { static: false },] }],
card: [{ type: ViewChild, args: ['card', { static: false },] }],
dateRange: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L2xpYnJhcnkvTWF0Q2FsZW5kYXIvcHJvamVjdHMvbmd4LW1hdC1jYWxlbmRhci9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYWxlbmRhci1wb3B1cC9jYWxlbmRhci1wb3B1cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFHdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVNsRSxNQUFNLE9BQU8sc0JBQXNCO0lBeUJqQztRQXhCVSxvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBS2xFLGdCQUFXLEdBQUcsV0FBVyxDQUFDO1FBRzFCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVULGFBQVEsR0FBYSxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pDLGlCQUFZLEdBQWUsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUMvQyxpQkFBWSxHQUFlLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFFL0MsWUFBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsWUFBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLHFCQUFnQixHQUFHLElBQUksQ0FBQztR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SUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQzs7O1lBakxGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QiwydURBQThDOzthQUUvQzs7Ozs4QkFFRSxNQUFNO21CQUNOLFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO21CQUNuQyxTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTttQkFDbkMsU0FBUyxTQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7d0JBd0JuQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuaW1wb3J0IHsgRGF0ZVR5cGUsIERhdGVGb3JtYXQgfSBmcm9tICcuLi8uLi9tb2RlbC9jYWxlbmRhci5tb2RlbCc7XHJcbmltcG9ydCB7IElTZWxlY3RlZERhdGUgfSBmcm9tICcuLi8uLi9tb2RlbC9jYWxlbmRhci5tb2RlbCc7XHJcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNhbGVuZGFyLXBvcHVwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLXBvcHVwLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhbGVuZGFyUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBEYXRlVGltZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbDEnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBjYWwxOiBDYWxlbmRhckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdjYWwyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgY2FsMjogQ2FsZW5kYXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnY2FyZCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGNhcmQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGZyb21Ub1RpdGxlID0gJ0Zyb20gRGF0ZSc7XHJcbiAgcHJpdmF0ZSBzZWxlY3RlZEZyb21EYXRlOiBJU2VsZWN0ZWREYXRlO1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRUb0RhdGU6IElTZWxlY3RlZERhdGU7XHJcbiAgaXNGcm9udCA9IHRydWU7XHJcbiAgY2xhc3NOYW1lID0gJyc7XHJcbiAgd2l0aFRpbWUgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBkYXRlVHlwZTogRGF0ZVR5cGUgPSBEYXRlVHlwZS5BRDtcclxuICBwcml2YXRlIGRhdGVGb3JtYXRBRDogRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZGRNTXl5eXk7XHJcbiAgcHJpdmF0ZSBkYXRlRm9ybWF0QlM6IERhdGVGb3JtYXQgPSBEYXRlRm9ybWF0Lnl5eXlNTWRkO1xyXG5cclxuICBwcml2YXRlIG1pbkRhdGUgPSBuZXcgRGF0ZSgxOTEzLCAzLCAxMyk7XHJcbiAgcHJpdmF0ZSBtYXhEYXRlID0gbmV3IERhdGUobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICsgMTAwLCBuZXcgRGF0ZSgpLmdldE1vbnRoKCksIG5ldyBEYXRlKCkuZ2V0RGF0ZSgpKTtcclxuICBwcml2YXRlIGNsb3NlT25DbGljayA9IHRydWU7XHJcbiAgcHJpdmF0ZSBkZWZhdWx0RGF0ZVJhbmdlID0gdHJ1ZTtcclxuICBsYW5nID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkYXRlUmFuZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0ZVJhbmdlO1xyXG4gIH1cclxuICBzZXQgZGF0ZVJhbmdlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kZWZhdWx0RGF0ZVJhbmdlID0gdmFsO1xyXG4gIH1cclxuXHJcblxyXG4gIHNob3dDYWxlbmRhcihcclxuICAgIGRhdGVUeXBlOiBEYXRlVHlwZSwgZGF0ZUZvcm1hdEFEOiBEYXRlRm9ybWF0LFxyXG4gICAgZGF0ZUZvcm1hdEJTOiBEYXRlRm9ybWF0LCB3aXRoVGltZTogYm9vbGVhbiwgbWluRGF0ZTogRGF0ZSwgbWF4RGF0ZTogRGF0ZSxcclxuICAgIGNsb3NlT25DbGljazogYm9vbGVhbiwgY3VycmVudERhdGU6IERhdGUsIGxhbmc6IG51bWJlclxyXG4gICkge1xyXG4gICAgdGhpcy5pc0Zyb250ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGF0ZVR5cGUgPSBkYXRlVHlwZTtcclxuICAgIHRoaXMuZGF0ZUZvcm1hdEFEID0gZGF0ZUZvcm1hdEFEO1xyXG4gICAgdGhpcy5kYXRlRm9ybWF0QlMgPSBkYXRlRm9ybWF0QlM7XHJcbiAgICB0aGlzLndpdGhUaW1lID0gd2l0aFRpbWU7XHJcbiAgICB0aGlzLm1pbkRhdGUgPSBtaW5EYXRlO1xyXG4gICAgdGhpcy5tYXhEYXRlID0gbWF4RGF0ZTtcclxuICAgIHRoaXMuY2xvc2VPbkNsaWNrID0gY2xvc2VPbkNsaWNrO1xyXG4gICAgdGhpcy5jdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlID8gY3VycmVudERhdGUgOiBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5sYW5nID0gbGFuZztcclxuICAgIGlmICh0aGlzLmxhbmcgPT09IDApIHtcclxuICAgICAgdGhpcy5mcm9tVG9UaXRsZSA9ICdGcm9tIERhdGUnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mcm9tVG9UaXRsZSA9ICfgpKbgpYfgpJbgpL8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFRvRGF0ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5jYWwxLnNob3dDYWxlbmRhcihcclxuICAgICAgdGhpcy5kYXRlVHlwZSxcclxuICAgICAgdGhpcy5kYXRlRm9ybWF0QUQsXHJcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdEJTLFxyXG4gICAgICB0aGlzLndpdGhUaW1lLFxyXG4gICAgICB0aGlzLm1pbkRhdGUsXHJcbiAgICAgIHRoaXMubWF4RGF0ZSxcclxuICAgICAgdGhpcy5jbG9zZU9uQ2xpY2ssXHJcbiAgICAgIHRoaXMuY3VycmVudERhdGUsIHRoaXMubGFuZyk7XHJcbiAgICBpZiAodGhpcy53aXRoVGltZSkge1xyXG4gICAgICBpZiAodGhpcy5kYXRlUmFuZ2UpIHtcclxuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9ICdjb250YWluZXIgd2l0aC1yYW5nZS13aXRoLXRpbWUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ2NvbnRhaW5lciB3aXRob3V0LXJhbmdlLXdpdGgtdGltZSc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGVSYW5nZSkge1xyXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ2NvbnRhaW5lciB3aXRoLXJhbmdlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9ICdjb250YWluZXIgd2l0aG91dC1yYW5nZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyByZXZlcnQoKSB7XHJcbiAgICB0aGlzLkRhdGVUaW1lQ2hhbmdlZC5lbWl0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VibWl0KCkge1xyXG4gICAgbGV0IHJlc3VsdDogSVNlbGVjdGVkRGF0ZVtdO1xyXG4gICAgaWYgKHRoaXMuZGF0ZVJhbmdlID09PSBmYWxzZSkge1xyXG4gICAgICByZXN1bHQgPSBbdGhpcy5jYWwxLnNlbGVjdGVkRGF0ZV07XHJcbiAgICAgIHRoaXMuRGF0ZVRpbWVDaGFuZ2VkLmVtaXQocmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRnJvbnQgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLm5leHRQYW5lbCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IFt0aGlzLmNhbDEuc2VsZWN0ZWREYXRlLCB0aGlzLmNhbDIuc2VsZWN0ZWREYXRlXTtcclxuICAgICAgICB0aGlzLkRhdGVUaW1lQ2hhbmdlZC5lbWl0KHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGV0aW1lQ2hhbmdlZEZyb20oZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZyb21EYXRlID0ge1xyXG4gICAgICBkYXRlOiBlLmRhdGUsXHJcbiAgICAgIGRhdGVBRDogZS5kYXRlQUQsXHJcbiAgICAgIGRhdGVCUzogZS5kYXRlQlMsXHJcbiAgICAgIHNlbGVjdGVkRGF0ZVR5cGU6IGUuc2VsZWN0ZWREYXRlVHlwZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRlUmFuZ2UgPT09IGZhbHNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmNsb3NlT25DbGljayA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVNlbGVjdGVkRGF0ZVtdID0gW1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZyb21EYXRlXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLkRhdGVUaW1lQ2hhbmdlZC5lbWl0KHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5jbG9zZU9uQ2xpY2sgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLm5leHRQYW5lbCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRhdGV0aW1lQ2hhbmdlZFRvKGUpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUb0RhdGUgPSB7XHJcbiAgICAgIGRhdGU6IGUuZGF0ZSxcclxuICAgICAgZGF0ZUFEOiBlLmRhdGVBRCxcclxuICAgICAgZGF0ZUJTOiBlLmRhdGVCUyxcclxuICAgICAgc2VsZWN0ZWREYXRlVHlwZTogZS5zZWxlY3RlZERhdGVUeXBlXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuY2xvc2VPbkNsaWNrID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFt0aGlzLnNlbGVjdGVkRnJvbURhdGUsIHRoaXMuc2VsZWN0ZWRUb0RhdGVdO1xyXG4gICAgICB0aGlzLkRhdGVUaW1lQ2hhbmdlZC5lbWl0KHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0UGFuZWwoKSB7XHJcbiAgICBpZiAodGhpcy5sYW5nID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZnJvbVRvVGl0bGUgPSAnVG8gRGF0ZSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZyb21Ub1RpdGxlID0gJ+CkuOCkruCljeCkric7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZyb21EYXRlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyb21EYXRlID0gdGhpcy5jYWwxLnNlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtaW5EYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZEZyb21EYXRlLmRhdGUudG9EYXRlU3RyaW5nKCkpO1xyXG4gICAgdGhpcy5jYWwyLnNob3dDYWxlbmRhcihcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyb21EYXRlLnNlbGVjdGVkRGF0ZVR5cGUsXHJcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdEFELFxyXG4gICAgICB0aGlzLmRhdGVGb3JtYXRCUyxcclxuICAgICAgdGhpcy53aXRoVGltZSxcclxuICAgICAgbWluRGF0ZSxcclxuICAgICAgdGhpcy5tYXhEYXRlLFxyXG4gICAgICB0aGlzLmNsb3NlT25DbGljayxcclxuICAgICAgbWluRGF0ZSwgdGhpcy5sYW5nKTtcclxuICAgIHRoaXMuaXNGcm9udCA9ICF0aGlzLmlzRnJvbnQ7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91c1BhbmVsKCkge1xyXG4gICAgaWYgKHRoaXMubGFuZyA9PT0gMCkge1xyXG4gICAgICB0aGlzLmZyb21Ub1RpdGxlID0gJ0Zyb20gRGF0ZSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZyb21Ub1RpdGxlID0gJ+CkpuClh+CkluCkvyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVG9EYXRlID0gbnVsbDtcclxuICAgIHRoaXMuaXNGcm9udCA9ICF0aGlzLmlzRnJvbnQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==