UNPKG

ngx-mat-calendar

Version:

A datepicker with nepali and english calendar support

157 lines 21.9 kB
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==