ngx-pluto
Version:
192 lines • 18 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, Input, ElementRef, ViewChild, Output, EventEmitter } from "@angular/core";
import * as moment_ from 'moment';
/** @type {?} */
const moment = moment_;
import { NpDatePickerService } from "../date-picker.service";
import { NotifyService } from "../../shared/services/notify.service";
/**
* @ignore
*/
export class NpTimePickerPanel {
/**
* @param {?} datePickerService
* @param {?} notifyService
*/
constructor(datePickerService, notifyService) {
this.datePickerService = datePickerService;
this.notifyService = notifyService;
this.onTimeClicked = new EventEmitter();
this.onConfirmClicked = new EventEmitter();
this.hours = [];
this.minutes = [];
this.seconds = [];
this.selectedHour = '';
this.selectedMinute = '';
this.selectedSecond = '';
}
/**
* @return {?}
*/
ngOnInit() {
this.buildData();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
/** @type {?} */
const time = (/** @type {?} */ (changes['time'].currentValue));
}
/**
* @param {?} hour
* @return {?}
*/
onHourClicked(hour) {
this.selectedHour = hour;
this.buildSelectedTime();
this.onTimeClicked.emit(this.time);
}
/**
* @param {?} minute
* @return {?}
*/
onMinuteClicked(minute) {
this.selectedMinute = minute;
this.buildSelectedTime();
this.onTimeClicked.emit(this.time);
}
/**
* @param {?} second
* @return {?}
*/
onSecondClicked(second) {
this.selectedSecond = second;
this.buildSelectedTime();
this.onTimeClicked.emit(this.time);
}
/**
* @return {?}
*/
onConfirmButtonClicked() {
this.onConfirmClicked.emit(this.time);
}
/**
* 根据传入时间滚动到指定时间位置
* @param {?} time 当前传入时间,格式为\@link TIME_FORMAT
* @return {?}
*/
scrollTo(time) {
/** @type {?} */
const itemHeight = 28;
this.selectedHour = time.split(':')[0];
this.selectedMinute = time.split(':')[1];
this.selectedSecond = time.split(':')[2];
this.hoursElementRef.nativeElement.scrollTo({
top: +this.selectedHour * itemHeight
});
this.minutesElementRef.nativeElement.scrollTo({
top: +this.selectedMinute * itemHeight
});
this.secondsElementRef.nativeElement.scrollTo({
top: +this.selectedSecond * itemHeight
});
}
/**
* @private
* @return {?}
*/
buildData() {
for (let i = 0; i < 24; i++) {
this.hours.push((i + '').padStart(2, '0'));
}
for (let i = 0; i < 60; i++) {
this.minutes.push((i + '').padStart(2, '0'));
}
for (let i = 0; i < 60; i++) {
this.seconds.push((i + '').padStart(2, '0'));
}
}
/**
* @private
* @return {?}
*/
buildSelectedTime() {
this.time = this.selectedHour;
if (this.selectedMinute) {
this.time += ':' + this.selectedMinute;
}
if (this.selectedSecond) {
this.time += ':' + this.selectedSecond;
}
this.scrollTo(this.time);
}
}
NpTimePickerPanel.decorators = [
{ type: Component, args: [{
selector: `np-time-picker-panel`,
template: "<div class=\"np-time-picker-panel flex-wrap col-flex\">\r\n <div class=\"time-picker-header\">{{ time }}</div>\r\n <div class=\"time-picker-body flex-wrap row-flex\">\r\n <div #hoursElementRef class=\"hours flex-wrap col-flex\">\r\n <span *ngFor=\"let hour of hours\" [ngClass]=\"{'selected-item': selectedHour === hour}\"\r\n (click)=\"onHourClicked(hour)\">{{ hour }}</span>\r\n </div>\r\n <div #minutesElementRef class=\"minutes flex-wrap col-flex\">\r\n <span *ngFor=\"let minute of minutes\" [ngClass]=\"{'selected-item': selectedMinute === minute}\"\r\n (click)=\"onMinuteClicked(minute)\">{{ minute }}</span>\r\n </div>\r\n <div #secondsElementRef class=\"seconds flex-wrap col-flex\">\r\n <span *ngFor=\"let second of seconds\" [ngClass]=\"{'selected-item': selectedSecond === second}\"\r\n (click)=\"onSecondClicked(second)\">{{ second }}</span>\r\n </div>\r\n </div>\r\n <div class=\"time-picker-footer flex-wrap col-flex\">\r\n <np-button *ngIf=\"confirmButtonText\" (click)=\"onConfirmButtonClicked()\">{{ confirmButtonText }}</np-button>\r\n </div>\r\n</div>\r\n",
encapsulation: ViewEncapsulation.None,
styles: [".np-time-picker-panel{width:169px}.np-time-picker-panel .time-picker-header{height:41px;line-height:41px;text-align:center;font-weight:500}.np-time-picker-panel .time-picker-body{height:232px;justify-content:space-between}.np-time-picker-panel .time-picker-body .hours,.np-time-picker-panel .time-picker-body .minutes,.np-time-picker-panel .time-picker-body .seconds{width:56px;flex-wrap:nowrap;overflow:hidden;padding-bottom:204px;scroll-behavior:smooth}.np-time-picker-panel .time-picker-body .hours:hover,.np-time-picker-panel .time-picker-body .minutes:hover,.np-time-picker-panel .time-picker-body .seconds:hover{overflow-y:auto}.np-time-picker-panel .time-picker-body .hours:hover>span,.np-time-picker-panel .time-picker-body .minutes:hover>span,.np-time-picker-panel .time-picker-body .seconds:hover>span{margin-left:-8.5px}.np-time-picker-panel .time-picker-body .hours>span,.np-time-picker-panel .time-picker-body .minutes>span,.np-time-picker-panel .time-picker-body .seconds>span{width:56px;height:28px;text-align:center;line-height:28px}.np-time-picker-panel .time-picker-footer{height:41px;justify-content:center;align-items:flex-end}.np-time-picker-panel .time-picker-footer .np-button-wrapper{width:auto;letter-spacing:initial;font-size:13px;line-height:16px}"]
}] }
];
/** @nocollapse */
NpTimePickerPanel.ctorParameters = () => [
{ type: NpDatePickerService },
{ type: NotifyService }
];
NpTimePickerPanel.propDecorators = {
time: [{ type: Input }],
confirmButtonText: [{ type: Input }],
onTimeClicked: [{ type: Output }],
onConfirmClicked: [{ type: Output }],
hoursElementRef: [{ type: ViewChild, args: ['hoursElementRef',] }],
minutesElementRef: [{ type: ViewChild, args: ['minutesElementRef',] }],
secondsElementRef: [{ type: ViewChild, args: ['secondsElementRef',] }]
};
if (false) {
/**
* 传入time,格式为‘HH:mm:ss,如23:59:59’
* @type {?}
*/
NpTimePickerPanel.prototype.time;
/** @type {?} */
NpTimePickerPanel.prototype.confirmButtonText;
/** @type {?} */
NpTimePickerPanel.prototype.onTimeClicked;
/** @type {?} */
NpTimePickerPanel.prototype.onConfirmClicked;
/** @type {?} */
NpTimePickerPanel.prototype.hoursElementRef;
/** @type {?} */
NpTimePickerPanel.prototype.minutesElementRef;
/** @type {?} */
NpTimePickerPanel.prototype.secondsElementRef;
/** @type {?} */
NpTimePickerPanel.prototype.hours;
/** @type {?} */
NpTimePickerPanel.prototype.minutes;
/** @type {?} */
NpTimePickerPanel.prototype.seconds;
/** @type {?} */
NpTimePickerPanel.prototype.selectedHour;
/** @type {?} */
NpTimePickerPanel.prototype.selectedMinute;
/** @type {?} */
NpTimePickerPanel.prototype.selectedSecond;
/**
* @type {?}
* @private
*/
NpTimePickerPanel.prototype.datePickerService;
/**
* @type {?}
* @private
*/
NpTimePickerPanel.prototype.notifyService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXItcGFuZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvZGF0ZS1waWNrZXIvY29tcG9uZW50cy90aW1lLXBpY2tlci1wYW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBaUIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7TUFBTyxNQUFNLEdBQUcsT0FBTztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFXckUsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7SUFtQjFCLFlBQW9CLGlCQUFzQyxFQUM5QyxhQUE0QjtRQURwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBZjlCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXhELFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO0lBR2dCLENBQUM7Ozs7SUFFN0MsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxPQUFzQjs7Y0FDeEIsSUFBSSxHQUFXLG1CQUFBLE9BQU8sQ0FBQyxNQUFNLENB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TyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7WUExR0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDZuQ0FBcUM7Z0JBRXJDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN4Qzs7OztZQVhRLG1CQUFtQjtZQUNuQixhQUFhOzs7bUJBYWpCLEtBQUs7Z0NBQ0wsS0FBSzs0QkFFTCxNQUFNOytCQUNOLE1BQU07OEJBRU4sU0FBUyxTQUFDLGlCQUFpQjtnQ0FDM0IsU0FBUyxTQUFDLG1CQUFtQjtnQ0FDN0IsU0FBUyxTQUFDLG1CQUFtQjs7Ozs7OztJQVI5QixpQ0FBc0I7O0lBQ3RCLDhDQUFtQzs7SUFFbkMsMENBQXFEOztJQUNyRCw2Q0FBd0Q7O0lBRXhELDRDQUF1RTs7SUFDdkUsOENBQTJFOztJQUMzRSw4Q0FBMkU7O0lBRTNFLGtDQUEwQjs7SUFDMUIsb0NBQTRCOztJQUM1QixvQ0FBNEI7O0lBQzVCLHlDQUEwQjs7SUFDMUIsMkNBQTRCOztJQUM1QiwyQ0FBNEI7Ozs7O0lBRWhCLDhDQUE4Qzs7Ozs7SUFDdEQsMENBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0LCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JzsgY29uc3QgbW9tZW50ID0gbW9tZW50X1xyXG5pbXBvcnQgeyBOcERhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2RhdGUtcGlja2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm90aWZ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvc2VydmljZXMvbm90aWZ5LnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBgbnAtdGltZS1waWNrZXItcGFuZWxgLFxyXG4gICAgdGVtcGxhdGVVcmw6ICd0aW1lLXBpY2tlci1wYW5lbC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWyd0aW1lLXBpY2tlci1wYW5lbC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOcFRpbWVQaWNrZXJQYW5lbCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICAvKirkvKDlhaV0aW1l77yM5qC85byP5Li64oCYSEg6bW06c3PvvIzlpoIyMzo1OTo1OeKAmSAqL1xyXG4gICAgQElucHV0KCkgdGltZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgY29uZmlybUJ1dHRvblRleHQ6IHN0cmluZztcclxuXHJcbiAgICBAT3V0cHV0KCkgb25UaW1lQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ29uZmlybUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdob3Vyc0VsZW1lbnRSZWYnKSBob3Vyc0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgnbWludXRlc0VsZW1lbnRSZWYnKSBtaW51dGVzRWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdzZWNvbmRzRWxlbWVudFJlZicpIHNlY29uZHNFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgICBob3VyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgbWludXRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgc2Vjb25kczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgc2VsZWN0ZWRIb3VyOiBzdHJpbmcgPSAnJztcclxuICAgIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSAnJztcclxuICAgIHNlbGVjdGVkU2Vjb25kOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaWNrZXJTZXJ2aWNlOiBOcERhdGVQaWNrZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogTm90aWZ5U2VydmljZSkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5idWlsZERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgdGltZTogc3RyaW5nID0gY2hhbmdlc1sndGltZSddLmN1cnJlbnRWYWx1ZSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ib3VyQ2xpY2tlZChob3VyOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXI7XHJcbiAgICAgICAgdGhpcy5idWlsZFNlbGVjdGVkVGltZSgpO1xyXG4gICAgICAgIHRoaXMub25UaW1lQ2xpY2tlZC5lbWl0KHRoaXMudGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NaW51dGVDbGlja2VkKG1pbnV0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZTtcclxuICAgICAgICB0aGlzLmJ1aWxkU2VsZWN0ZWRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5vblRpbWVDbGlja2VkLmVtaXQodGhpcy50aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlY29uZENsaWNrZWQoc2Vjb25kOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2Vjb25kID0gc2Vjb25kO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZWxlY3RlZFRpbWUoKTtcclxuICAgICAgICB0aGlzLm9uVGltZUNsaWNrZWQuZW1pdCh0aGlzLnRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ29uZmlybUJ1dHRvbkNsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNvbmZpcm1DbGlja2VkLmVtaXQodGhpcy50aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOagueaNruS8oOWFpeaXtumXtOa7muWKqOWIsOaMh+WumuaXtumXtOS9jee9rlxyXG4gICAgICogQHBhcmFtIHRpbWUg5b2T5YmN5Lyg5YWl5pe26Ze077yM5qC85byP5Li6QGxpbmsgVElNRV9GT1JNQVRcclxuICAgICAqL1xyXG4gICAgc2Nyb2xsVG8odGltZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUhlaWdodCA9IDI4OyAgIC8vIGVhY2ggaXRlbSBoZWlnaHQgaXMgMjhweFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGltZS5zcGxpdCgnOicpWzBdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aW1lLnNwbGl0KCc6JylbMV07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZCA9IHRpbWUuc3BsaXQoJzonKVsyXTtcclxuXHJcbiAgICAgICAgdGhpcy5ob3Vyc0VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7XHJcbiAgICAgICAgICAgIHRvcDogK3RoaXMuc2VsZWN0ZWRIb3VyICogaXRlbUhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1pbnV0ZXNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6ICt0aGlzLnNlbGVjdGVkTWludXRlICogaXRlbUhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlY29uZHNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6ICt0aGlzLnNlbGVjdGVkU2Vjb25kICogaXRlbUhlaWdodFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGREYXRhKCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmhvdXJzLnB1c2goKGkgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDYwOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5taW51dGVzLnB1c2goKGkgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDYwOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmRzLnB1c2goKGkgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRTZWxlY3RlZFRpbWUoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lID0gdGhpcy5zZWxlY3RlZEhvdXI7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW51dGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lICs9ICc6JyArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY29uZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgKz0gJzonICsgdGhpcy5zZWxlY3RlZFNlY29uZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy50aW1lKTtcclxuICAgIH1cclxufSJdfQ==