@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
172 lines • 27.1 kB
JavaScript
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.
**/
var TimeDisplayFormatPipe = /** @class */ (function () {
function TimeDisplayFormatPipe(timePicker) {
this.timePicker = timePicker;
}
TimeDisplayFormatPipe.prototype.transform = function (value) {
var hour, minutes, seconds, amPM;
var maskAmPM = this.timePicker.parseMask();
var mask = this.timePicker.parseMask(false);
if (!value || value === mask || value === maskAmPM) {
return '';
}
var 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];
}
var format = this.timePicker.format;
var prompt = this.timePicker.promptChar;
var 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;
var 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;
var 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;
var 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';
}
var 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 = function () { return [
{ 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);
return TimeDisplayFormatPipe;
}());
export { TimeDisplayFormatPipe };
/**
* Formats `IgxTimePickerComponent` display value according to the `format` property,
* when the input element gets focus.
**/
var TimeInputFormatPipe = /** @class */ (function () {
function TimeInputFormatPipe(timePicker) {
this.timePicker = timePicker;
}
TimeInputFormatPipe.prototype.transform = function (value) {
var prompt = this.timePicker.promptChar;
var regExp = new RegExp(prompt, 'g');
var 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;
}
var sections = value.split(/[\s:]+/);
if (this.timePicker.showHoursList) {
hour = sections[0];
hour = hour.replace(regExp, '');
var 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, '');
var 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, '');
var leadZeroSeconds = (parseInt(seconds, 10) < 10 && !seconds.startsWith('0')) || seconds === '0';
seconds = leadZeroSeconds ? '0' + seconds : seconds;
}
if (this.timePicker.showAmPmList) {
amPM = sections[sections.length - 1];
}
var 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 = function () { return [
{ 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);
return TimeInputFormatPipe;
}());
export { TimeInputFormatPipe };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIucGlwZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBR3BGOzs7SUFHSTtBQUVKO0lBQ0ksK0JBQXVELFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQUksQ0FBQztJQUV6Rix5Q0FBUyxHQUFULFVBQVUsS0FBVTtRQUNoQixJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztRQUVqQyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ2hELE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUU7WUFDakMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FB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S0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3RELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pGLElBQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUMxRztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3RELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pGLElBQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUMxRztRQUVELElBQUksTUFBTSxDQUFDLE9B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LEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0o7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YscUJBQXFCO1lBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUksTUFBTSxTQUFJLElBQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9DLENBQUM7O2dEQXRFWSxNQUFNLFNBQUMseUJBQXlCOztJQURwQyxtQkFBbUI7UUFEL0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBRWIsV0FBQSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTs7T0FEckMsbUJBQW1CLENBd0UvQjtJQUFELDBCQUFDO0NBQUEsQUF4RUQsSUF3RUM7U0F4RVksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJR1hfVElNRV9QSUNLRVJfQ09NUE9ORU5ULCBJZ3hUaW1lUGlja2VyQmFzZSB9IGZyb20gJy4vdGltZS1waWNrZXIuY29tbW9uJztcblxuXG4vKipcbiAqIEZvcm1hdHMgYElneFRpbWVQaWNrZXJDb21wb25lbnRgIGRpc3BsYXkgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBgZm9ybWF0YCBwcm9wZXJ0eSxcbiAqIHdoZW4gdGhlIGlucHV0IGVsZW1lbnQgbG9zZXMgZm9jdXMuXG4gKiovXG5AUGlwZSh7IG5hbWU6ICdkaXNwbGF5Rm9ybWF0JyB9KVxuZXhwb3J0IGNsYXNzIFRpbWVEaXNwbGF5Rm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCkgcHJpdmF0ZSB0aW1lUGlja2VyOiBJZ3hUaW1lUGlja2VyQmFzZSkgeyB9XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBob3VyLCBtaW51dGVzLCBzZWNvbmRzLCBhbVBNO1xuXG4gICAgICAgIGNvbnN0IG1hc2tBbVBNID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzaygpO1xuICAgICAgICBjb25zdCBtYXNrID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzayhmYWxzZSk7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09IG1hc2sgfHwgdmFsdWUgPT09IG1hc2tBbVBNKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHZhbHVlLnNwbGl0KC9bXFxzOl0rLyk7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0KSB7XG4gICAgICAgICAgICBob3VyID0gc2VjdGlvbnNbMF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgbWludXRlcyA9IHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0ID8gc2VjdGlvbnNbMV0gOiBzZWN0aW9uc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIuc2hvd1NlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgIGFtUE0gPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMudGltZVBpY2tlci5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHRoaXMudGltZVBpY2tlci5wcm9tcHRDaGFyO1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHRoaXMudGltZVBpY2tlci5wcm9tcHRDaGFyLCAnZycpO1xuXG4gICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignaGgnKSAhPT0gLTEgfHwgZm9ybWF0LmluZGV4T2YoJ0hIJykgIT09IC0xICYmIGhvdXIuaW5kZXhPZihwcm9tcHQpICE9PSAtMSkge1xuICAgICAgICAgICAgaG91ciA9IGhvdXIgPT09IHByb21wdCArIHByb21wdCA/ICcwMCcgOiBob3VyLnJlcGxhY2UocmVnRXhwLCAnMCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdtbScpICE9PSAtMSAmJiBtaW51dGVzLmluZGV4T2YocHJvbXB0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW51dGVzID09PSBwcm9tcHQgKyBwcm9tcHQgPyAnMDAnIDogbWludXRlcy5yZXBsYWNlKHJlZ0V4cCwgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignc3MnKSAhPT0gLTEgJiYgc2Vjb25kcy5pbmRleE9mKHByb21wdCkgIT09IC0xKSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyA9PT0gcHJvbXB0ICsgcHJvbXB0ID8gJzAwJyA6IHNlY29uZHMucmVwbGFjZShyZWdFeHAsICcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ2hoJykgPT09IC0xICYmIGZvcm1hdC5pbmRleE9mKCdISCcpID09PSAtMSAmJiBob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhvdXIgPSBob3VyLmluZGV4T2YocHJvbXB0KSAhPT0gLTEgPyBob3VyLnJlcGxhY2UocmVnRXhwLCAnJykgOiBob3VyO1xuICAgICAgICAgICAgY29uc3QgaG91clZhbCA9IHBhcnNlSW50KGhvdXIsIDEwKTtcbiAgICAgICAgICAgIGhvdXIgPSAhaG91clZhbCA/ICcwJyA6IGhvdXJWYWwgPCAxMCAmJiBob3VyVmFsICE9PSAwID8gaG91ci5yZXBsYWNlKCcwJywgJycpIDogaG91cjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignbW0nKSA9PT0gLTEgJiYgbWludXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtaW51dGVzID0gbWludXRlcy5pbmRleE9mKHByb21wdCkgIT09IC0xID8gbWludXRlcy5yZXBsYWNlKHJlZ0V4cCwgJycpIDogbWludXRlcztcbiAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXNWYWwgPSBwYXJzZUludChtaW51dGVzLCAxMCk7XG4gICAgICAgICAgICBtaW51dGVzID0gIW1pbnV0ZXNWYWwgPyAnMCcgOiBtaW51dGVzVmFsIDwgMTAgJiYgbWludXRlc1ZhbCAhPT0gMCA/IG1pbnV0ZXMucmVwbGFjZSgnMCcsICcnKSA6IG1pbnV0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ3NzJykgPT09IC0xICYmIHNlY29uZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMuaW5kZXhPZihwcm9tcHQpICE9PSAtMSA/IHNlY29uZHMucmVwbGFjZShyZWdFeHAsICcnKSA6IHNlY29uZHM7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRzVmFsID0gcGFyc2VJbnQoc2Vjb25kcywgMTApO1xuICAgICAgICAgICAgc2Vjb25kcyA9ICFzZWNvbmRzVmFsID8gJzAnIDogc2Vjb25kc1ZhbCA8IDEwICYmIHNlY29uZHNWYWwgIT09IDAgPyBzZWNvbmRzLnJlcGxhY2UoJzAnLCAnJykgOiBzZWNvbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCd0dCcpICE9PSAtMSAmJiAoYW1QTSAhPT0gJ0FNJyB8fCBhbVBNICE9PSAnUE0nKSkge1xuICAgICAgICAgICAgYW1QTSA9IGFtUE0uaW5kZXhPZigncCcpICE9PSAtMSB8fCBhbVBNLmluZGV4T2YoJ1AnKSAhPT0gLTEgPyAnUE0nIDogJ0FNJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBgJHtob3VyfToke21pbnV0ZXN9OiR7c2Vjb25kc31gO1xuICAgICAgICBpZiAoIWhvdXIpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgaG91cnNcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZShyZXN1bHQuaW5kZXhPZignOicpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW51dGVzKSB7XG4gICAgICAgICAgICBpZiAoaG91cikge1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgaG91cnMgYW5kIHNlY29uZHMgYW5kIGNvbmNhdCB0aGVtXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5pbmRleE9mKCc6JykpICtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNsaWNlKHJlc3VsdC5sYXN0SW5kZXhPZignOicpLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBtaW51dGVzXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKHJlc3VsdC5pbmRleE9mKCc6JykgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlY29uZHMpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc2Vjb25kc1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5sYXN0SW5kZXhPZignOicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbVBNID8gYCR7cmVzdWx0fSAke2FtUE19YCA6IHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogRm9ybWF0cyBgSWd4VGltZVBpY2tlckNvbXBvbmVudGAgZGlzcGxheSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGBmb3JtYXRgIHByb3BlcnR5LFxuICogd2hlbiB0aGUgaW5wdXQgZWxlbWVudCBnZXRzIGZvY3VzLlxuICoqL1xuQFBpcGUoeyBuYW1lOiAnaW5wdXRGb3JtYXQnIH0pXG5leHBvcnQgY2xhc3MgVGltZUlucHV0Rm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCkgcHJpdmF0ZSB0aW1lUGlja2VyOiBJZ3hUaW1lUGlja2VyQmFzZSkgeyB9XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHRoaXMudGltZVBpY2tlci5wcm9tcHRDaGFyO1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHByb21wdCwgJ2cnKTtcblxuICAgICAgICBsZXQgbWFzaywgaG91ciwgbWludXRlcywgc2Vjb25kcywgYW1QTTtcblxuICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyLmNsZWFyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlci5jbGVhcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBtYXNrID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzayhmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXNrID0gdGhpcy50aW1lUGlja2VyLnBhcnNlTWFzaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gbWFzaykge1xuICAgICAgICAgICAgcmV0dXJuIG1hc2s7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHZhbHVlLnNwbGl0KC9bXFxzOl0rLyk7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0KSB7XG4gICAgICAgICAgICBob3VyID0gc2VjdGlvbnNbMF07XG4gICAgICAgICAgICBob3VyID0gaG91ci5yZXBsYWNlKHJlZ0V4cCwgJycpO1xuXG4gICAgICAgICAgICBjb25zdCBsZWFkWmVyb0hvdXIgPSAocGFyc2VJbnQoaG91ciwgMTApIDwgMTAgJiYgIWhvdXIuc3RhcnRzV2l0aCgnMCcpKSB8fCBob3VyID09PSAnMCc7XG4gICAgICAgICAgICBob3VyID0gbGVhZFplcm9Ib3VyID8gJzAnICsgaG91ciA6IGhvdXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgbWludXRlcyA9IHRoaXMudGltZVBpY2tlci5zaG93SG91cnNMaXN0ID8gc2VjdGlvbnNbMV0gOiBzZWN0aW9uc1swXTtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW51dGVzLnJlcGxhY2UocmVnRXhwLCAnJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlYWRaZXJvTWludXRlcyA9IChwYXJzZUludChtaW51dGVzLCAxMCkgPCAxMCAmJiAhbWludXRlcy5zdGFydHNXaXRoKCcwJykpIHx8IG1pbnV0ZXMgPT09ICcwJztcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBsZWFkWmVyb01pbnV0ZXMgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIuc2hvd1NlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMucmVwbGFjZShyZWdFeHAsICcnKTtcblxuICAgICAgICAgICAgY29uc3QgbGVhZFplcm9TZWNvbmRzID0gKHBhcnNlSW50KHNlY29uZHMsIDEwKSA8IDEwICYmICFzZWNvbmRzLnN0YXJ0c1dpdGgoJzAnKSkgfHwgc2Vjb25kcyA9PT0gJzAnO1xuICAgICAgICAgICAgc2Vjb25kcyA9IGxlYWRaZXJvU2Vjb25kcyA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlci5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgIGFtUE0gPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBgJHtob3VyfToke21pbnV0ZXN9OiR7c2Vjb25kc31gO1xuICAgICAgICBpZiAoIWhvdXIpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgaG91cnNcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZShyZXN1bHQuaW5kZXhPZignOicpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW51dGVzKSB7XG4gICAgICAgICAgICBpZiAoaG91cikge1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgaG91cnMgYW5kIHNlY29uZHMgYW5kIGNvbmNhdCB0aGVtXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5pbmRleE9mKCc6JykpICtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNsaWNlKHJlc3VsdC5sYXN0SW5kZXhPZignOicpLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBtaW51dGVzXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKHJlc3VsdC5pbmRleE9mKCc6JykgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlY29uZHMpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc2Vjb25kc1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIHJlc3VsdC5sYXN0SW5kZXhPZignOicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbVBNID8gYCR7cmVzdWx0fSAke2FtUE19YCA6IHJlc3VsdDtcbiAgICB9XG59XG4iXX0=