ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
162 lines • 17 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { Subject } from 'rxjs';
import { isNil, isNotNil } from 'ng-zorro-antd/core/util';
export class TimeHolder {
constructor() {
this.selected12Hours = undefined;
this._use12Hours = false;
this._changes = new Subject();
}
setMinutes(value, disabled) {
if (value !== this.minutes && !disabled) {
this.initValue();
this.value.setMinutes(value);
this.update();
}
return this;
}
setHours(value, disabled) {
if (value !== this.hours && !disabled) {
this.initValue();
if (this._use12Hours) {
if (this.selected12Hours === 'PM' && value !== 12) {
this.value.setHours(value + 12);
}
else if (this.selected12Hours === 'AM' && value === 12) {
this.value.setHours(0);
}
else {
this.value.setHours(value);
}
}
else {
this.value.setHours(value);
}
this.update();
}
return this;
}
setSeconds(value, disabled) {
if (value !== this.seconds && !disabled) {
this.initValue();
this.value.setSeconds(value);
this.update();
}
return this;
}
setUse12Hours(value) {
this._use12Hours = value;
return this;
}
get changes() {
return this._changes.asObservable();
}
setValue(value, use12Hours) {
if (isNotNil(use12Hours)) {
this._use12Hours = use12Hours;
}
if (value !== this.value) {
this._value = value;
if (isNotNil(this.value)) {
if (this._use12Hours && isNotNil(this.hours)) {
this.selected12Hours = this.hours >= 12 ? 'PM' : 'AM';
}
}
else {
this._clear();
}
}
return this;
}
initValue() {
if (isNil(this.value)) {
this.setValue(new Date(), this._use12Hours);
}
}
clear() {
this._clear();
this.update();
}
get isEmpty() {
return !(isNotNil(this.hours) || isNotNil(this.minutes) || isNotNil(this.seconds));
}
_clear() {
this._value = undefined;
this.selected12Hours = undefined;
}
update() {
if (this.isEmpty) {
this._value = undefined;
}
else {
if (isNotNil(this.hours)) {
this.value.setHours(this.hours);
}
if (isNotNil(this.minutes)) {
this.value.setMinutes(this.minutes);
}
if (isNotNil(this.seconds)) {
this.value.setSeconds(this.seconds);
}
if (this._use12Hours) {
if (this.selected12Hours === 'PM' && this.hours < 12) {
this.value.setHours(this.hours + 12);
}
if (this.selected12Hours === 'AM' && this.hours >= 12) {
this.value.setHours(this.hours - 12);
}
}
}
this.changed();
}
changed() {
this._changes.next(this.value);
}
/**
* @description
* UI view hours
* Get viewHours which is selected in `time-picker-panel` and its range is [12, 1, 2, ..., 11]
*/
get viewHours() {
return this._use12Hours && isNotNil(this.hours) ? this.calculateViewHour(this.hours) : this.hours;
}
setSelected12Hours(value) {
if (value.toUpperCase() !== this.selected12Hours) {
this.selected12Hours = value.toUpperCase();
this.update();
}
}
get value() {
return this._value || this._defaultOpenValue;
}
get hours() {
var _a;
return (_a = this.value) === null || _a === void 0 ? void 0 : _a.getHours();
}
get minutes() {
var _a;
return (_a = this.value) === null || _a === void 0 ? void 0 : _a.getMinutes();
}
get seconds() {
var _a;
return (_a = this.value) === null || _a === void 0 ? void 0 : _a.getSeconds();
}
setDefaultOpenValue(value) {
this._defaultOpenValue = value;
return this;
}
calculateViewHour(value) {
const selected12Hours = this.selected12Hours;
if (selected12Hours === 'PM' && value > 12) {
return value - 12;
}
if (selected12Hours === 'AM' && value === 0) {
return 12;
}
return value;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1ob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL3RpbWUtcGlja2VyL3RpbWUtaG9sZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRCxNQUFNLE9BQU8sVUFBVTtJQWdLckI7UUEvSkEsb0JBQWUsR0FBdUIsU0FBUyxDQUFDO1FBRXhDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBMkp4QixDQUFDO0lBekpoQixVQUFVLENBQUMsS0FBYSxFQUFFLFFBQWlCO1FBQ3pDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWEsRUFBRSxRQUFpQjtRQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtvQkFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUUsS0FBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDN0M7cUJBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO29CQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzVCO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUI7WUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsUUFBaUI7UUFDekMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN2QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUF1QixFQUFFLFVBQW9CO1FBQ3BELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBcUIsQ0FBQztTQUMxQztRQUNELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ3ZEO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2Y7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUVPLE1BQU07UUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLEtBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQU0sQ0FBQyxDQUFDO2FBQ25DO1lBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsS0FBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLENBQUM7YUFDdkM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxLQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFRLENBQUMsQ0FBQzthQUN2QztZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBTSxHQUFHLEVBQUUsRUFBRTtvQkFDckQsSUFBSSxDQUFDLEtBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBTSxJQUFJLEVBQUUsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLEtBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDeEM7YUFDRjtTQUNGO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckcsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXlCO1FBQzFDLElBQUksS0FBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxLQUFLOztRQUNQLGFBQU8sSUFBSSxDQUFDLEtBQUssMENBQUUsUUFBUSxHQUFHO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87O1FBQ1QsYUFBTyxJQUFJLENBQUMsS0FBSywwQ0FBRSxVQUFVLEdBQUc7SUFDbEMsQ0FBQztJQUVELElBQUksT0FBTzs7UUFDVCxhQUFPLElBQUksQ0FBQyxLQUFLLDBDQUFFLFVBQVUsR0FBRztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUlPLGlCQUFpQixDQUFDLEtBQWE7UUFDckMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLGVBQWUsS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtZQUMxQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDbkI7UUFDRCxJQUFJLGVBQWUsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS91dGlsJztcblxuZXhwb3J0IGNsYXNzIFRpbWVIb2xkZXIge1xuICBzZWxlY3RlZDEySG91cnM6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3VzZTEySG91cnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGVmYXVsdE9wZW5WYWx1ZSE6IERhdGU7XG4gIHByaXZhdGUgX2NoYW5nZXMgPSBuZXcgU3ViamVjdDxEYXRlPigpO1xuXG4gIHNldE1pbnV0ZXModmFsdWU6IG51bWJlciwgZGlzYWJsZWQ6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMubWludXRlcyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5pdFZhbHVlKCk7XG4gICAgICB0aGlzLnZhbHVlLnNldE1pbnV0ZXModmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRIb3Vycyh2YWx1ZTogbnVtYmVyLCBkaXNhYmxlZDogYm9vbGVhbik6IHRoaXMge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5ob3VycyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5pdFZhbHVlKCk7XG4gICAgICBpZiAodGhpcy5fdXNlMTJIb3Vycykge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZDEySG91cnMgPT09ICdQTScgJiYgdmFsdWUgIT09IDEyKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zZXRIb3VycygodmFsdWUgYXMgbnVtYmVyKSArIDEyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkMTJIb3VycyA9PT0gJ0FNJyAmJiB2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNldEhvdXJzKDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUuc2V0SG91cnModmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlLnNldEhvdXJzKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0U2Vjb25kcyh2YWx1ZTogbnVtYmVyLCBkaXNhYmxlZDogYm9vbGVhbik6IHRoaXMge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zZWNvbmRzICYmICFkaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbml0VmFsdWUoKTtcbiAgICAgIHRoaXMudmFsdWUuc2V0U2Vjb25kcyh2YWx1ZSk7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFVzZTEySG91cnModmFsdWU6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICB0aGlzLl91c2UxMkhvdXJzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgY2hhbmdlcygpOiBPYnNlcnZhYmxlPERhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkLCB1c2UxMkhvdXJzPzogYm9vbGVhbik6IHRoaXMge1xuICAgIGlmIChpc05vdE5pbCh1c2UxMkhvdXJzKSkge1xuICAgICAgdGhpcy5fdXNlMTJIb3VycyA9IHVzZTEySG91cnMgYXMgYm9vbGVhbjtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKGlzTm90TmlsKHRoaXMudmFsdWUpKSB7XG4gICAgICAgIGlmICh0aGlzLl91c2UxMkhvdXJzICYmIGlzTm90TmlsKHRoaXMuaG91cnMpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZDEySG91cnMgPSB0aGlzLmhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0VmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKG5ldyBEYXRlKCksIHRoaXMuX3VzZTEySG91cnMpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFyKCk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKGlzTm90TmlsKHRoaXMuaG91cnMpIHx8IGlzTm90TmlsKHRoaXMubWludXRlcykgfHwgaXNOb3ROaWwodGhpcy5zZWNvbmRzKSk7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkMTJIb3VycyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRW1wdHkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3ROaWwodGhpcy5ob3VycykpIHtcbiAgICAgICAgdGhpcy52YWx1ZSEuc2V0SG91cnModGhpcy5ob3VycyEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOb3ROaWwodGhpcy5taW51dGVzKSkge1xuICAgICAgICB0aGlzLnZhbHVlIS5zZXRNaW51dGVzKHRoaXMubWludXRlcyEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOb3ROaWwodGhpcy5zZWNvbmRzKSkge1xuICAgICAgICB0aGlzLnZhbHVlIS5zZXRTZWNvbmRzKHRoaXMuc2Vjb25kcyEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fdXNlMTJIb3Vycykge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZDEySG91cnMgPT09ICdQTScgJiYgdGhpcy5ob3VycyEgPCAxMikge1xuICAgICAgICAgIHRoaXMudmFsdWUhLnNldEhvdXJzKHRoaXMuaG91cnMhICsgMTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkMTJIb3VycyA9PT0gJ0FNJyAmJiB0aGlzLmhvdXJzISA+PSAxMikge1xuICAgICAgICAgIHRoaXMudmFsdWUhLnNldEhvdXJzKHRoaXMuaG91cnMhIC0gMTIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlZCgpO1xuICB9XG5cbiAgY2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFuZ2VzLm5leHQodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFVJIHZpZXcgaG91cnNcbiAgICogR2V0IHZpZXdIb3VycyB3aGljaCBpcyBzZWxlY3RlZCBpbiBgdGltZS1waWNrZXItcGFuZWxgIGFuZCBpdHMgcmFuZ2UgaXMgWzEyLCAxLCAyLCAuLi4sIDExXVxuICAgKi9cbiAgZ2V0IHZpZXdIb3VycygpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91c2UxMkhvdXJzICYmIGlzTm90TmlsKHRoaXMuaG91cnMpID8gdGhpcy5jYWxjdWxhdGVWaWV3SG91cih0aGlzLmhvdXJzISkgOiB0aGlzLmhvdXJzO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWQxMkhvdXJzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUhLnRvVXBwZXJDYXNlKCkgIT09IHRoaXMuc2VsZWN0ZWQxMkhvdXJzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkMTJIb3VycyA9IHZhbHVlIS50b1VwcGVyQ2FzZSgpO1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlIHx8IHRoaXMuX2RlZmF1bHRPcGVuVmFsdWU7XG4gIH1cblxuICBnZXQgaG91cnMoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZT8uZ2V0SG91cnMoKTtcbiAgfVxuXG4gIGdldCBtaW51dGVzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU/LmdldE1pbnV0ZXMoKTtcbiAgfVxuXG4gIGdldCBzZWNvbmRzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU/LmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIHNldERlZmF1bHRPcGVuVmFsdWUodmFsdWU6IERhdGUpOiB0aGlzIHtcbiAgICB0aGlzLl9kZWZhdWx0T3BlblZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVWaWV3SG91cih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzZWxlY3RlZDEySG91cnMgPSB0aGlzLnNlbGVjdGVkMTJIb3VycztcbiAgICBpZiAoc2VsZWN0ZWQxMkhvdXJzID09PSAnUE0nICYmIHZhbHVlID4gMTIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAtIDEyO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWQxMkhvdXJzID09PSAnQU0nICYmIHZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gMTI7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19