UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

170 lines 26.9 kB
import { __decorate, __metadata, __param } from "tslib"; import { Pipe, Inject } from '@angular/core'; import { IGX_TIME_PICKER_COMPONENT } from './time-picker.common'; /** * Formats `IgxTimePickerComponent` display value according to the `format` property, * when the input element loses focus. **/ let TimeDisplayFormatPipe = class TimeDisplayFormatPipe { constructor(timePicker) { this.timePicker = timePicker; } transform(value) { let hour, minutes, seconds, amPM; const maskAmPM = this.timePicker.parseMask(); const mask = this.timePicker.parseMask(false); if (!value || value === mask || value === maskAmPM) { return ''; } const sections = value.split(/[\s:]+/); if (this.timePicker.showHoursList) { hour = sections[0]; } if (this.timePicker.showMinutesList) { minutes = this.timePicker.showHoursList ? sections[1] : sections[0]; } if (this.timePicker.showSecondsList) { seconds = sections[sections.length - (this.timePicker.showAmPmList ? 2 : 1)]; } if (this.timePicker.showAmPmList) { amPM = sections[sections.length - 1]; } const format = this.timePicker.format; const prompt = this.timePicker.promptChar; const regExp = new RegExp(this.timePicker.promptChar, 'g'); if (format.indexOf('hh') !== -1 || format.indexOf('HH') !== -1 && hour.indexOf(prompt) !== -1) { hour = hour === prompt + prompt ? '00' : hour.replace(regExp, '0'); } if (format.indexOf('mm') !== -1 && minutes.indexOf(prompt) !== -1) { minutes = minutes === prompt + prompt ? '00' : minutes.replace(regExp, '0'); } if (format.indexOf('ss') !== -1 && seconds.indexOf(prompt) !== -1) { seconds = seconds === prompt + prompt ? '00' : seconds.replace(regExp, '0'); } if (format.indexOf('hh') === -1 && format.indexOf('HH') === -1 && hour !== undefined) { hour = hour.indexOf(prompt) !== -1 ? hour.replace(regExp, '') : hour; const hourVal = parseInt(hour, 10); hour = !hourVal ? '0' : hourVal < 10 && hourVal !== 0 ? hour.replace('0', '') : hour; } if (format.indexOf('mm') === -1 && minutes !== undefined) { minutes = minutes.indexOf(prompt) !== -1 ? minutes.replace(regExp, '') : minutes; const minutesVal = parseInt(minutes, 10); minutes = !minutesVal ? '0' : minutesVal < 10 && minutesVal !== 0 ? minutes.replace('0', '') : minutes; } if (format.indexOf('ss') === -1 && seconds !== undefined) { seconds = seconds.indexOf(prompt) !== -1 ? seconds.replace(regExp, '') : seconds; const secondsVal = parseInt(seconds, 10); seconds = !secondsVal ? '0' : secondsVal < 10 && secondsVal !== 0 ? seconds.replace('0', '') : seconds; } if (format.indexOf('tt') !== -1 && (amPM !== 'AM' || amPM !== 'PM')) { amPM = amPM.indexOf('p') !== -1 || amPM.indexOf('P') !== -1 ? 'PM' : 'AM'; } let result = `${hour}:${minutes}:${seconds}`; if (!hour) { // remove the hours result = result.slice(result.indexOf(':') + 1); } if (!minutes) { if (hour) { // get the hours and seconds and concat them result = result.slice(0, result.indexOf(':')) + result.slice(result.lastIndexOf(':'), result.length); } else { // remove the minutes result = result.slice(result.indexOf(':') + 1); } } if (!seconds) { // remove the seconds result = result.slice(0, result.lastIndexOf(':')); } return amPM ? `${result} ${amPM}` : result; } }; TimeDisplayFormatPipe.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [IGX_TIME_PICKER_COMPONENT,] }] } ]; TimeDisplayFormatPipe = __decorate([ Pipe({ name: 'displayFormat' }), __param(0, Inject(IGX_TIME_PICKER_COMPONENT)), __metadata("design:paramtypes", [Object]) ], TimeDisplayFormatPipe); export { TimeDisplayFormatPipe }; /** * Formats `IgxTimePickerComponent` display value according to the `format` property, * when the input element gets focus. **/ let TimeInputFormatPipe = class TimeInputFormatPipe { constructor(timePicker) { this.timePicker = timePicker; } transform(value) { const prompt = this.timePicker.promptChar; const regExp = new RegExp(prompt, 'g'); let mask, hour, minutes, seconds, amPM; if (this.timePicker.cleared) { this.timePicker.cleared = false; mask = this.timePicker.parseMask(false); } else { mask = this.timePicker.parseMask(); } if (!value || value === mask) { return mask; } const sections = value.split(/[\s:]+/); if (this.timePicker.showHoursList) { hour = sections[0]; hour = hour.replace(regExp, ''); const leadZeroHour = (parseInt(hour, 10) < 10 && !hour.startsWith('0')) || hour === '0'; hour = leadZeroHour ? '0' + hour : hour; } if (this.timePicker.showMinutesList) { minutes = this.timePicker.showHoursList ? sections[1] : sections[0]; minutes = minutes.replace(regExp, ''); const leadZeroMinutes = (parseInt(minutes, 10) < 10 && !minutes.startsWith('0')) || minutes === '0'; minutes = leadZeroMinutes ? '0' + minutes : minutes; } if (this.timePicker.showSecondsList) { seconds = sections[sections.length - (this.timePicker.showAmPmList ? 2 : 1)]; seconds = seconds.replace(regExp, ''); const leadZeroSeconds = (parseInt(seconds, 10) < 10 && !seconds.startsWith('0')) || seconds === '0'; seconds = leadZeroSeconds ? '0' + seconds : seconds; } if (this.timePicker.showAmPmList) { amPM = sections[sections.length - 1]; } let result = `${hour}:${minutes}:${seconds}`; if (!hour) { // remove the hours result = result.slice(result.indexOf(':') + 1); } if (!minutes) { if (hour) { // get the hours and seconds and concat them result = result.slice(0, result.indexOf(':')) + result.slice(result.lastIndexOf(':'), result.length); } else { // remove the minutes result = result.slice(result.indexOf(':') + 1); } } if (!seconds) { // remove the seconds result = result.slice(0, result.lastIndexOf(':')); } return amPM ? `${result} ${amPM}` : result; } }; TimeInputFormatPipe.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [IGX_TIME_PICKER_COMPONENT,] }] } ]; TimeInputFormatPipe = __decorate([ Pipe({ name: 'inputFormat' }), __param(0, Inject(IGX_TIME_PICKER_COMPONENT)), __metadata("design:paramtypes", [Object]) ], TimeInputFormatPipe); export { TimeInputFormatPipe }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIucGlwZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBR3BGOzs7SUFHSTtBQUVKLElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBQzlCLFlBQXVELFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQUksQ0FBQztJQUV6RixTQUFTLENBQUMsS0FBVTtRQUNoQixJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztRQUVqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ2hELE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUU7WUFDakMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFD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QUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3RELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUMxRztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3RELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUMx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Q0FBQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNILHFCQUFxQjtnQkFDckIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNsRDtTQUNKO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLHFCQUFxQjtZQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsQ0FBQztDQUNKLENBQUE7OzRDQXZFZ0IsTUFBTSxTQUFDLHlCQUF5Qjs7QUFEcEMsbUJBQW1CO0lBRC9CLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUViLFdBQUEsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUE7O0dBRHJDLG1CQUFtQixDQXdFL0I7U0F4RVksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJR1hfVElNRV9QSUNLRVJfQ09NUE9ORU5ULCBJZ3hUaW1lUGlja2VyQmFzZSB9IGZyb20gJy4vdGltZS1waWNrZXIuY29tbW9uJztcblxuXG4vKipcbiAqIEZvcm1hdHMgYElneFRpbWVQaWNrZXJDb21wb25lbnRgIGRpc3BsYXkgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBgZm9ybWF0YCBwcm9wZXJ0eSxcbiAqIHdoZW4gdGhlIGlucHV0IGVsZW1lbnQgbG9zZXMgZm9jdXMuXG4gKiovXG5AUGlwZSh7IG5hbWU6ICdkaXNwbGF5Rm9ybWF0JyB9KVxuZXhwb3J0IGNsYXNzIFRpbWVEaXNwbGF5Rm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCkgcHJpdmF0ZSB0aW1lUGlja2VyOiBJZ3hUaW1lUGlja2VyQmFzZSkgeyB9XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBob3VyLCBtaW51dGVzLCBzZWNvbmRzLCBhbVBNO1xuXG4gICAgICAgIGNvbnN0IG1hc2tBbVBNID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzaygpO1xuICAgICAgICBjb25zdCBtYXNrID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzayhmYWxzZSk7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09IG1hc2sgfHwgdmFsdWUgPT09IG1hc2tBbVBNKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHZhbHVlLnNwbGl0KC9bXFxzOl0rLyk7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0KSB7XG4gICAgICAgICAgICBob3VyID0gc2VjdGlvbnNbMF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgbWludXRlcyA9IHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0ID8gc2VjdGlvbnNbMV0gOiBzZWN0aW9uc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIuc2hvd1NlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgIGFtUE0gPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMudGltZVBpY2tlci5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHRoaXMudGltZVBpY2tlci5wcm9tcHRDaGFyO1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHRoaXMudGltZVBpY2tlci5wcm9tcHRDaGFyLCAnZycpO1xuXG4gICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignaGgnKSAhPT0gLTEgfHwgZm9ybWF0LmluZGV4T2YoJ0hIJykgIT09IC0xICYmIGhvdXIuaW5kZXhPZihwcm9tcHQpICE9PSAtMSkge1xuICAgICAgICAgICAgaG91ciA9IGhvdXIgPT09IHByb21wdCArIHByb21wdCA/ICcwMCcgOiBob3VyLnJlcGxhY2UocmVnRXhwLCAnMCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdtbScpICE9PSAtMSAmJiBtaW51dGVzLmluZGV4T2YocHJvbXB0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW51dGVzID09PSBwcm9tcHQgKyBwcm9tcHQgPyAnMDAnIDogbWludXRlcy5yZXBsYWNlKHJlZ0V4cCwgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignc3MnKSAhPT0gLTEgJiYgc2Vjb25kcy5pbmRleE9mKHByb21wdCkgIT09IC0xKSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyA9PT0gcHJvbXB0ICsgcHJvbXB0ID8gJzAwJyA6IHNlY29uZHMucmVwbGFjZShyZWdFeHAsICcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ2hoJykgPT09IC0xICYmIGZvcm1hdC5pbmRleE9mKCdISCcpID09PSAtMSAmJiBob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhvdXIgPSBob3VyLmluZGV4T2YocHJvbXB0KSAhPT0gLTEgPyBob3VyLnJlcGxhY2UocmVnRXhwLCAnJykgOiBob3VyO1xuICAgICAgICAgICAgY29uc3QgaG91clZhbCA9IHBhcnNlSW50KGhvdXIsIDEwKTtcbiAgICAgICAgICAgIGhvdXIgPSAhaG91clZhbCA/ICcwJyA6IGhvdXJWYWwgPCAxMCAmJiBob3VyVmFsICE9PSAwID8gaG91ci5yZXBsYWNlKCcwJywgJycpIDogaG91cjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignbW0nKSA9PT0gLTEgJiYgbWludXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtaW51dGVzID0gbWludXRlcy5pbmRleE9mKHByb21wdCkgIT09IC0xID8gbWludXRlcy5yZXBsYWNlKHJlZ0V4cCwgJycpIDogbWludXRlcztcbiAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXNWYWwgPSBwYXJzZUludChtaW51dGVzLCAxMCk7XG4gICAgICAgICAgICBtaW51dGVzID0gIW1pbnV0ZXNWYWwgPyAnMCcgOiBtaW51dGVzVmFsIDwgMTAgJiYgbWludXRlc1ZhbCAhPT0gMCA/IG1pbnV0ZXMucmVwbGFjZSgnMCcsICcnKSA6IG1pbnV0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ3NzJykgPT09IC0xICYmIHNlY29uZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMuaW5kZXhPZihwcm9tcHQpICE9PSAtMSA/IHNlY29uZHMucmVwbGFjZShyZWdFeHAsICcnKSA6IHNlY29uZHM7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRzVmFsID0gcGFyc2VJbnQoc2Vjb25kcywgMTApO1xuICAgICAgICAgICAgc2Vjb25kcyA9ICFzZWNvbmRzVmFsID8gJzAnIDogc2Vjb25kc1ZhbCA8IDEwICYmIHNlY29uZHNWYWwgIT09IDAgPyBzZWNvbmRzLnJlcGxhY2UoJzAnLCAnJykgOiBzZWNvbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCd0dCcpICE9PSAtMSAmJiAoYW1QTSAhPT0gJ0FNJyB8fCBhbVBNICE9PSAnUE0nKSkge1xuICAgICAgICAgICAgYW1QTSA9IGFtUE0uaW5kZXhPZigncCcpICE9PSAtMSB8fCBhbVBNLmluZGV4T2YoJ1AnKSAhPT0gLTEgPyAnUE0nIDogJ0FNJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBgJHtob3VyfToke21pbnV0ZXN9OiR7c2Vjb25kc31gO1xuICAgICAgICBpZiAoIWhvdXIpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgaG91cnNcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZShyZXN1bHQuaW5kZXhPZignOicpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW51dGVzKSB7XG4gICAgICAgICAgICBpZiAoaG91cikge1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgaG91cnMgYW5kIHNlY29uZHMgYW5kIGNvbmNhdCB0aGVtXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5pbmRleE9mKCc6JykpICtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNsaWNlKHJlc3VsdC5sYXN0SW5kZXhPZignOicpLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBtaW51dGVzXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKHJlc3VsdC5pbmRleE9mKCc6JykgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlY29uZHMpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc2Vjb25kc1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5sYXN0SW5kZXhPZignOicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbVBNID8gYCR7cmVzdWx0fSAke2FtUE19YCA6IHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogRm9ybWF0cyBgSWd4VGltZVBpY2tlckNvbXBvbmVudGAgZGlzcGxheSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGBmb3JtYXRgIHByb3BlcnR5LFxuICogd2hlbiB0aGUgaW5wdXQgZWxlbWVudCBnZXRzIGZvY3VzLlxuICoqL1xuQFBpcGUoeyBuYW1lOiAnaW5wdXRGb3JtYXQnIH0pXG5leHBvcnQgY2xhc3MgVGltZUlucHV0Rm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCkgcHJpdmF0ZSB0aW1lUGlja2VyOiBJZ3hUaW1lUGlja2VyQmFzZSkgeyB9XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHRoaXMudGltZVBpY2tlci5wcm9tcHRDaGFyO1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHByb21wdCwgJ2cnKTtcblxuICAgICAgICBsZXQgbWFzaywgaG91ciwgbWludXRlcywgc2Vjb25kcywgYW1QTTtcblxuICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyLmNsZWFyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlci5jbGVhcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBtYXNrID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzayhmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXNrID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gbWFzaykge1xuICAgICAgICAgICAgcmV0dXJuIG1hc2s7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHZhbHVlLnNwbGl0KC9bXFxzOl0rLyk7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0KSB7XG4gICAgICAgICAgICBob3VyID0gc2VjdGlvbnNbMF07XG4gICAgICAgICAgICBob3VyID0gaG91ci5yZXBsYWNlKHJlZ0V4cCwgJycpO1xuXG4gICAgICAgICAgICBjb25zdCBsZWFkWmVyb0hvdXIgPSAocGFyc2VJbnQoaG91ciwgMTApIDwgMTAgJiYgIWhvdXIuc3RhcnRzV2l0aCgnMCcpKSB8fCBob3VyID09PSAnMCc7XG4gICAgICAgICAgICBob3VyID0gbGVhZFplcm9Ib3VyID8gJzAnICsgaG91ciA6IGhvdXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgbWludXRlcyA9IHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0ID8gc2VjdGlvbnNbMV0gOiBzZWN0aW9uc1swXTtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW51dGVzLnJlcGxhY2UocmVnRXhwLCAnJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlYWRaZXJvTWludXRlcyA9IChwYXJzZUludChtaW51dGVzLCAxMCkgPCAxMCAmJiAhbWludXRlcy5zdGFydHNXaXRoKCcwJykpIHx8IG1pbnV0ZXMgPT09ICcwJztcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBsZWFkWmVyb01pbnV0ZXMgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIuc2hvd1NlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMucmVwbGFjZShyZWdFeHAsICcnKTtcblxuICAgICAgICAgICAgY29uc3QgbGVhZFplcm9TZWNvbmRzID0gKHBhcnNlSW50KHNlY29uZHMsIDEwKSA8IDEwICYmICFzZWNvbmRzLnN0YXJ0c1dpdGgoJzAnKSkgfHwgc2Vjb25kcyA9PT0gJzAnO1xuICAgICAgICAgICAgc2Vjb25kcyA9IGxlYWRaZXJvU2Vjb25kcyA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgIGFtUE0gPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBgJHtob3VyfToke21pbnV0ZXN9OiR7c2Vjb25kc31gO1xuICAgICAgICBpZiAoIWhvdXIpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgaG91cnNcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZShyZXN1bHQuaW5kZXhPZignOicpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW51dGVzKSB7XG4gICAgICAgICAgICBpZiAoaG91cikge1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgaG91cnMgYW5kIHNlY29uZHMgYW5kIGNvbmNhdCB0aGVtXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5pbmRleE9mKCc6JykpICtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNsaWNlKHJlc3VsdC5sYXN0SW5kZXhPZignOicpLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBtaW51dGVzXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKHJlc3VsdC5pbmRleE9mKCc6JykgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlY29uZHMpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc2Vjb25kc1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5sYXN0SW5kZXhPZignOicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbVBNID8gYCR7cmVzdWx0fSAke2FtUE19YCA6IHJlc3VsdDtcbiAgICB9XG59XG4iXX0=