UNPKG

systelab-components

Version:

systelab-components is a set of components that use wide accepted and adopted standard technologies like Angular and Bootstrap, as well as other popular libraries. Please read the ATTRIBUTION.md file for a complete list of dependencies.

174 lines 27.4 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; export class TouchspinComponent { constructor() { this.validKeys = ['Digit0', 'Digit1', 'Digit2', 'Digit3', 'Digit4', 'Digit5', 'Digit6', 'Digit7', 'Digit8', 'Digit9', 'Numpad0', 'Numpad1', 'Numpad2', 'Numpad3', 'Numpad4', 'Numpad5', 'Numpad6', 'Numpad7', 'Numpad8', 'Numpad9', 'NumpadSubtract', 'Minus', 'Comma', 'Period', 'NumpadDecimal']; this.error = false; this.disabled = false; this.fillUnitsWithZero = false; //0 if false, and 1 if true this.isInGrid = false; this.valueChange = new EventEmitter(); this.change = new EventEmitter(); this.valueStrChange = new EventEmitter(); } get value() { return this._spinValues ? this._spinValues.value : 0; } set value(val) { if (this._spinValues) { this.previousValue = this._spinValues.value; this._spinValues.value = val; const numberOfZeros = typeof this.fillUnitsWithZero === 'boolean' ? this.fillUnitsWithZero ? 1 : 0 : this.fillUnitsWithZero; if (val) { const valStr = val > 0 ? String(val) .padStart(numberOfZeros + 1, '0') : String(val) .substring(0, 1) + String(val) .substring(1) .padStart(numberOfZeros + 1, '0'); if (valStr !== this.valueStr) { this.valueStr = valStr; } } else { this.valueStr = '0'.padStart(numberOfZeros + 1, '0'); } } } get spinValues() { return this._spinValues; } set spinValues(val) { this._spinValues = val; if (!this._spinValues.step) { this._spinValues.step = 1; } this.value = this._spinValues.value; this.previousValue = this._spinValues.value; } get valueStr() { return this._valueStr; } set valueStr(val) { if (val) { const valNumber = Number(val); if (this.value && this.value !== valNumber) { if (valNumber < this._spinValues.min || valNumber > this._spinValues.max) { this.value = this.previousValue; } } this._valueStr = (val.length === 1 && this.fillUnitsWithZero) ? ('0' + val) : val; } else { this._valueStr = this.fillUnitsWithZero ? '00' : '0'; } this.valueStrChange.emit(this._valueStr); } minus() { const value = Number(this._spinValues.value); if (value - this._spinValues.step > this._spinValues.min) { this._spinValues.value = Number((value - this._spinValues.step).toFixed(this._spinValues.getPrecision())); this.saveValueAndEmit(this._spinValues.value); } else { if (this._spinValues.value !== this._spinValues.min) { this._spinValues.value = this._spinValues.min; this.saveValueAndEmit(this._spinValues.value); } } } plus() { const value = Number(this._spinValues.value); if (value + this._spinValues.step < this._spinValues.max) { this._spinValues.value = Number((value + this._spinValues.step).toFixed(this._spinValues.getPrecision())); this.saveValueAndEmit(this._spinValues.value); } else { if (this._spinValues.value !== this._spinValues.max) { this._spinValues.value = this._spinValues.max; this.saveValueAndEmit(this._spinValues.value); } } } doCheckKey(event) { return this.validKeys.some(code => code === event.code); } doKeyDown(event) { if (event.code === 'ArrowUp') { this.plus(); event.preventDefault(); } else { if (event.code === 'ArrowDown') { this.minus(); event.preventDefault(); } else { if (event.code === 'Tab' && this.isInGrid || event.code === 'Enter') { this.checkValue(this.valueStr); } } } } checkValue(valueStr) { const value = Number(valueStr); if (isNaN(value)) { this._spinValues.value = this.previousValue; } else { if (value < this._spinValues.min || value > this._spinValues.max) { this._spinValues.value = this.previousValue; if (this.previousValue) { const valStr = (this.previousValue <= 9 && this.fillUnitsWithZero) ? '0' + this.previousValue : String(this.previousValue); if (valStr !== this.valueStr) { this.valueStr = valStr; } } else { this.valueStr = this.fillUnitsWithZero ? '00' : '0'; } } else { this.saveValueAndEmit(value); } } } saveValueAndEmit(value) { this.previousValue = value; this.value = Number(value.toFixed(this._spinValues.getPrecision())); this.valueChange.emit(this.value); this.change.emit(this.value); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TouchspinComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: TouchspinComponent, selector: "systelab-spinner", inputs: { error: "error", disabled: "disabled", fillUnitsWithZero: "fillUnitsWithZero", tabindex: "tabindex", isInGrid: "isInGrid", value: "value", spinValues: "spinValues", valueStr: "valueStr" }, outputs: { valueChange: "valueChange", change: "change", valueStrChange: "valueStrChange" }, ngImport: i0, template: "<div class=\"slab-spinner-container d-flex\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <button type=\"button\" id=\"minus-button\" class=\"btn pt-0 pb-0 pl-1 pr-1\" [disabled]=\"disabled\" [tabIndex]=\"-1\"\n [class.disabled]=\"disabled\" [class.slab-spinner-error]=\"error\" (click)=\"minus()\"><i\n class=\"icon-minus-thin\"></i></button>\n </div>\n <input [class.disabled]=\"disabled\" name=\"sp\" [(ngModel)]=\"valueStr\"\n [tabindex]=\"tabindex\"\n class=\"slab-flex-1 slab-spinner-input form-control text-center\" [class.slab-spinner-error]=\"error\" type=\"text\"\n (keydown)=\"doKeyDown($event)\"\n (keypress)=\"doCheckKey($event)\"\n (blur)=\"checkValue(valueStr)\"\n autocomplete=\"off\" [disabled]=\"disabled\">\n <div class=\"input-group-append\">\n <button type=\"button\" id=\"plus-button\" class=\"btn pt-0 pb-0 pl-1 pr-1\" [disabled]=\"disabled\" [tabIndex]=\"-1\"\n [class.disabled]=\"disabled\" [class.slab-spinner-error]=\"error\" (click)=\"plus()\"><i\n class=\"icon-plus-thin\"></i></button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TouchspinComponent, decorators: [{ type: Component, args: [{ selector: 'systelab-spinner', template: "<div class=\"slab-spinner-container d-flex\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <button type=\"button\" id=\"minus-button\" class=\"btn pt-0 pb-0 pl-1 pr-1\" [disabled]=\"disabled\" [tabIndex]=\"-1\"\n [class.disabled]=\"disabled\" [class.slab-spinner-error]=\"error\" (click)=\"minus()\"><i\n class=\"icon-minus-thin\"></i></button>\n </div>\n <input [class.disabled]=\"disabled\" name=\"sp\" [(ngModel)]=\"valueStr\"\n [tabindex]=\"tabindex\"\n class=\"slab-flex-1 slab-spinner-input form-control text-center\" [class.slab-spinner-error]=\"error\" type=\"text\"\n (keydown)=\"doKeyDown($event)\"\n (keypress)=\"doCheckKey($event)\"\n (blur)=\"checkValue(valueStr)\"\n autocomplete=\"off\" [disabled]=\"disabled\">\n <div class=\"input-group-append\">\n <button type=\"button\" id=\"plus-button\" class=\"btn pt-0 pb-0 pl-1 pr-1\" [disabled]=\"disabled\" [tabIndex]=\"-1\"\n [class.disabled]=\"disabled\" [class.slab-spinner-error]=\"error\" (click)=\"plus()\"><i\n class=\"icon-plus-thin\"></i></button>\n </div>\n </div>\n</div>\n" }] }], propDecorators: { error: [{ type: Input }], disabled: [{ type: Input }], fillUnitsWithZero: [{ type: Input }], tabindex: [{ type: Input }], isInGrid: [{ type: Input }], value: [{ type: Input }], valueChange: [{ type: Output }], change: [{ type: Output }], spinValues: [{ type: Input }], valueStr: [{ type: Input }], valueStrChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi1jb21wb25lbnRzL3NyYy9saWIvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLWNvbXBvbmVudHMvc3JjL2xpYi9zcGlubmVyL3NwaW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT3ZFLE1BQU0sT0FBTyxrQkFBa0I7SUFKL0I7UUFNUyxjQUFTLEdBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO1lBQ2hJLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVM7WUFDNUcsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFaEQsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsc0JBQWlCLEdBQXFCLEtBQUssQ0FBQyxDQUFDLDJCQUEyQjtRQUt4RSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBOEJoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDekMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFxQzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQStFN0Q7SUEvSUEsSUFDSSxLQUFLO1FBQ1Is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Q0FBQyxLQUFhO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQS9KVyxrQkFBa0I7a0dBQWxCLGtCQUFrQiwyVkNQL0IsK3dDQXFCQTs7MkZEZGEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNJLGtCQUFrQjs4QkFTZixLQUFLO3NCQUFwQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBSVUsUUFBUTtzQkFBdkIsS0FBSztnQkFLRixLQUFLO3NCQURSLEtBQUs7Z0JBMEJXLFdBQVc7c0JBQTNCLE1BQU07Z0JBQ1UsTUFBTTtzQkFBdEIsTUFBTTtnQkFHSCxVQUFVO3NCQURiLEtBQUs7Z0JBZ0JGLFFBQVE7c0JBRFgsS0FBSztnQkFvQlcsY0FBYztzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb3VjaFNwaW5WYWx1ZXMgfSBmcm9tICcuL3RvdWNoLnNwaW4tdmFsdWVzJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAgICAnc3lzdGVsYWItc3Bpbm5lcicsXG5cdHRlbXBsYXRlVXJsOiAnc3Bpbm5lci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVG91Y2hzcGluQ29tcG9uZW50IHtcblxuXHRwcml2YXRlIHZhbGlkS2V5czogc3RyaW5nW10gPSBbJ0RpZ2l0MCcsICdEaWdpdDEnLCAnRGlnaXQyJywgJ0RpZ2l0MycsICdEaWdpdDQnLCAnRGlnaXQ1JywgJ0RpZ2l0NicsICdEaWdpdDcnLCAnRGlnaXQ4JywgJ0RpZ2l0OScsXG5cdFx0J051bXBhZDAnLCAnTnVtcGFkMScsICdOdW1wYWQyJywgJ051bXBhZDMnLCAnTnVtcGFkNCcsICdOdW1wYWQ1JywgJ051bXBhZDYnLCAnTnVtcGFkNycsICdOdW1wYWQ4JywgJ051bXBhZDknLFxuXHRcdCdOdW1wYWRTdWJ0cmFjdCcsICdNaW51cycsICdDb21tYScsICdQZXJpb2QnLCAnTnVtcGFkRGVjaW1hbCddO1xuXG5cdEBJbnB1dCgpIHB1YmxpYyBlcnJvciA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIGZpbGxVbml0c1dpdGhaZXJvOiBib29sZWFuIHwgbnVtYmVyID0gZmFsc2U7IC8vMCBpZiBmYWxzZSwgYW5kIDEgaWYgdHJ1ZVxuXHRASW5wdXQoKSBwdWJsaWMgdGFiaW5kZXg6IG51bWJlcjtcblx0cHJpdmF0ZSBfc3BpblZhbHVlczogVG91Y2hTcGluVmFsdWVzO1xuXHRwcm90ZWN0ZWQgX3ZhbHVlU3RyOiBzdHJpbmc7XG5cblx0QElucHV0KCkgcHVibGljIGlzSW5HcmlkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwcmV2aW91c1ZhbHVlOiBudW1iZXI7XG5cblx0QElucHV0KClcblx0Z2V0IHZhbHVlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX3NwaW5WYWx1ZXMgPyB0aGlzLl9zcGluVmFsdWVzLnZhbHVlIDogMDtcblx0fVxuXG5cdHNldCB2YWx1ZSh2YWw6IG51bWJlcikge1xuXHRcdGlmICh0aGlzLl9zcGluVmFsdWVzKSB7XG5cdFx0XHR0aGlzLnByZXZpb3VzVmFsdWUgPSB0aGlzLl9zcGluVmFsdWVzLnZhbHVlO1xuXHRcdFx0dGhpcy5fc3BpblZhbHVlcy52YWx1ZSA9IHZhbDtcblx0XHRcdGNvbnN0IG51bWJlck9mWmVyb3MgPSB0eXBlb2YgdGhpcy5maWxsVW5pdHNXaXRoWmVybyA9PT0gJ2Jvb2xlYW4nID8gdGhpcy5maWxsVW5pdHNXaXRoWmVybyA/IDEgOiAwIDogdGhpcy5maWxsVW5pdHNXaXRoWmVybztcblx0XHRcdGlmICh2YWwpIHtcblx0XHRcdFx0Y29uc3QgdmFsU3RyOiBzdHJpbmcgPSB2YWwgPiAwID8gU3RyaW5nKHZhbClcblx0XHRcdFx0XHRcdC5wYWRTdGFydChudW1iZXJPZlplcm9zICsgMSwgJzAnKSA6XG5cdFx0XHRcdFx0U3RyaW5nKHZhbClcblx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgMSkgKyBTdHJpbmcodmFsKVxuXHRcdFx0XHRcdFx0LnN1YnN0cmluZygxKVxuXHRcdFx0XHRcdFx0LnBhZFN0YXJ0KG51bWJlck9mWmVyb3MgKyAxLCAnMCcpO1xuXHRcdFx0XHRpZiAodmFsU3RyICE9PSB0aGlzLnZhbHVlU3RyKSB7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZVN0ciA9IHZhbFN0cjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52YWx1ZVN0ciA9ICcwJy5wYWRTdGFydChudW1iZXJPZlplcm9zICsgMSwgJzAnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAT3V0cHV0KCkgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdEBJbnB1dCgpXG5cdGdldCBzcGluVmFsdWVzKCk6IFRvdWNoU3BpblZhbHVlcyB7XG5cdFx0cmV0dXJuIHRoaXMuX3NwaW5WYWx1ZXM7XG5cdH1cblxuXHRzZXQgc3BpblZhbHVlcyh2YWw6IFRvdWNoU3BpblZhbHVlcykge1xuXHRcdHRoaXMuX3NwaW5WYWx1ZXMgPSB2YWw7XG5cblx0XHRpZiAoIXRoaXMuX3NwaW5WYWx1ZXMuc3RlcCkge1xuXHRcdFx0dGhpcy5fc3BpblZhbHVlcy5zdGVwID0gMTtcblx0XHR9XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuX3NwaW5WYWx1ZXMudmFsdWU7XG5cdFx0dGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy5fc3BpblZhbHVlcy52YWx1ZTtcblx0fVxuXG5cdEBJbnB1dCgpXG5cdGdldCB2YWx1ZVN0cigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl92YWx1ZVN0cjtcblx0fVxuXG5cdHNldCB2YWx1ZVN0cih2YWw6IHN0cmluZykge1xuXHRcdGlmICh2YWwpIHtcblx0XHRcdGNvbnN0IHZhbE51bWJlcjogbnVtYmVyID0gTnVtYmVyKHZhbCk7XG5cdFx0XHRpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlICE9PSB2YWxOdW1iZXIpIHtcblx0XHRcdFx0aWYgKHZhbE51bWJlciA8IHRoaXMuX3NwaW5WYWx1ZXMubWluIHx8IHZhbE51bWJlciA+IHRoaXMuX3NwaW5WYWx1ZXMubWF4KSB7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMucHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5fdmFsdWVTdHIgPSAodmFsLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmZpbGxVbml0c1dpdGhaZXJvKSA/ICgnMCcgKyB2YWwpIDogdmFsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl92YWx1ZVN0ciA9IHRoaXMuZmlsbFVuaXRzV2l0aFplcm8gPyAnMDAnIDogJzAnO1xuXHRcdH1cblx0XHR0aGlzLnZhbHVlU3RyQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWVTdHIpO1xuXHR9XG5cblx0QE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN0ckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG5cdHB1YmxpYyBtaW51cygpIHtcblx0XHRjb25zdCB2YWx1ZTogbnVtYmVyID0gTnVtYmVyKHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUpO1xuXG5cdFx0aWYgKHZhbHVlIC0gdGhpcy5fc3BpblZhbHVlcy5zdGVwID4gdGhpcy5fc3BpblZhbHVlcy5taW4pIHtcblx0XHRcdHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUgPSBOdW1iZXIoKHZhbHVlIC0gdGhpcy5fc3BpblZhbHVlcy5zdGVwKS50b0ZpeGVkKHRoaXMuX3NwaW5WYWx1ZXMuZ2V0UHJlY2lzaW9uKCkpKTtcblx0XHRcdHRoaXMuc2F2ZVZhbHVlQW5kRW1pdCh0aGlzLl9zcGluVmFsdWVzLnZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUgIT09IHRoaXMuX3NwaW5WYWx1ZXMubWluKSB7XG5cdFx0XHRcdHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUgPSB0aGlzLl9zcGluVmFsdWVzLm1pbjtcblx0XHRcdFx0dGhpcy5zYXZlVmFsdWVBbmRFbWl0KHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBwbHVzKCkge1xuXHRcdGNvbnN0IHZhbHVlOiBudW1iZXIgPSBOdW1iZXIodGhpcy5fc3BpblZhbHVlcy52YWx1ZSk7XG5cblx0XHRpZiAodmFsdWUgKyB0aGlzLl9zcGluVmFsdWVzLnN0ZXAgPCB0aGlzLl9zcGluVmFsdWVzLm1heCkge1xuXHRcdFx0dGhpcy5fc3BpblZhbHVlcy52YWx1ZSA9IE51bWJlcigodmFsdWUgKyB0aGlzLl9zcGluVmFsdWVzLnN0ZXApLnRvRml4ZWQodGhpcy5fc3BpblZhbHVlcy5nZXRQcmVjaXNpb24oKSkpO1xuXHRcdFx0dGhpcy5zYXZlVmFsdWVBbmRFbWl0KHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5fc3BpblZhbHVlcy52YWx1ZSAhPT0gdGhpcy5fc3BpblZhbHVlcy5tYXgpIHtcblx0XHRcdFx0dGhpcy5fc3BpblZhbHVlcy52YWx1ZSA9IHRoaXMuX3NwaW5WYWx1ZXMubWF4O1xuXHRcdFx0XHR0aGlzLnNhdmVWYWx1ZUFuZEVtaXQodGhpcy5fc3BpblZhbHVlcy52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRvQ2hlY2tLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy52YWxpZEtleXMuc29tZShjb2RlID0+IGNvZGUgPT09IGV2ZW50LmNvZGUpO1xuXHR9XG5cblx0cHVibGljIGRvS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuXHRcdGlmIChldmVudC5jb2RlID09PSAnQXJyb3dVcCcpIHtcblx0XHRcdHRoaXMucGx1cygpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd0Rvd24nKSB7XG5cdFx0XHRcdHRoaXMubWludXMoKTtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChldmVudC5jb2RlID09PSAnVGFiJyAmJiB0aGlzLmlzSW5HcmlkIHx8IGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcblx0XHRcdFx0XHR0aGlzLmNoZWNrVmFsdWUodGhpcy52YWx1ZVN0cik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2hlY2tWYWx1ZSh2YWx1ZVN0cjogc3RyaW5nKSB7XG5cdFx0Y29uc3QgdmFsdWU6IG51bWJlciA9IE51bWJlcih2YWx1ZVN0cik7XG5cblx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHR0aGlzLl9zcGluVmFsdWVzLnZhbHVlID0gdGhpcy5wcmV2aW91c1ZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodmFsdWUgPCB0aGlzLl9zcGluVmFsdWVzLm1pbiB8fCB2YWx1ZSA+IHRoaXMuX3NwaW5WYWx1ZXMubWF4KSB7XG5cdFx0XHRcdHRoaXMuX3NwaW5WYWx1ZXMudmFsdWUgPSB0aGlzLnByZXZpb3VzVmFsdWU7XG5cdFx0XHRcdGlmICh0aGlzLnByZXZpb3VzVmFsdWUpIHtcblxuXHRcdFx0XHRcdGNvbnN0IHZhbFN0cjogc3RyaW5nID0gKHRoaXMucHJldmlvdXNWYWx1ZSA8PSA5ICYmIHRoaXMuZmlsbFVuaXRzV2l0aFplcm8pID8gJzAnICsgdGhpcy5wcmV2aW91c1ZhbHVlIDogU3RyaW5nKHRoaXMucHJldmlvdXNWYWx1ZSk7XG5cdFx0XHRcdFx0aWYgKHZhbFN0ciAhPT0gdGhpcy52YWx1ZVN0cikge1xuXHRcdFx0XHRcdFx0dGhpcy52YWx1ZVN0ciA9IHZhbFN0cjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZVN0ciA9IHRoaXMuZmlsbFVuaXRzV2l0aFplcm8gPyAnMDAnIDogJzAnO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNhdmVWYWx1ZUFuZEVtaXQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2F2ZVZhbHVlQW5kRW1pdCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5wcmV2aW91c1ZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy52YWx1ZSA9IE51bWJlcih2YWx1ZS50b0ZpeGVkKHRoaXMuX3NwaW5WYWx1ZXMuZ2V0UHJlY2lzaW9uKCkpKTtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG5cdFx0dGhpcy5jaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcblx0fVxufVxuIiwiPGRpdiBjbGFzcz1cInNsYWItc3Bpbm5lci1jb250YWluZXIgZC1mbGV4XCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cIm1pbnVzLWJ1dHRvblwiIGNsYXNzPVwiYnRuIHB0LTAgcGItMCBwbC0xIHByLTFcIiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLnNsYWItc3Bpbm5lci1lcnJvcl09XCJlcnJvclwiIChjbGljayk9XCJtaW51cygpXCI+PGlcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLW1pbnVzLXRoaW5cIj48L2k+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgbmFtZT1cInNwXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVN0clwiXG4gICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJzbGFiLWZsZXgtMSBzbGFiLXNwaW5uZXItaW5wdXQgZm9ybS1jb250cm9sIHRleHQtY2VudGVyXCIgW2NsYXNzLnNsYWItc3Bpbm5lci1lcnJvcl09XCJlcnJvclwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgIChrZXlkb3duKT1cImRvS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJkb0NoZWNrS2V5KCRldmVudClcIlxuICAgICAgICAgICAgICAgKGJsdXIpPVwiY2hlY2tWYWx1ZSh2YWx1ZVN0cilcIlxuICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwicGx1cy1idXR0b25cIiBjbGFzcz1cImJ0biBwdC0wIHBiLTAgcGwtMSBwci0xXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLnNsYWItc3Bpbm5lci1lcnJvcl09XCJlcnJvclwiIChjbGljayk9XCJwbHVzKClcIj48aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tcGx1cy10aGluXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19