truly-ui
Version:
Web Components for Desktop Applications.
131 lines • 17 kB
JavaScript
import { CurrencyService } from './currency.service';
export class CurrencyHandler {
get inputService() {
return this._inputService;
}
set inputService(value) {
this._inputService = value;
}
constructor(htmlInputElement, options) {
this.inputService = new CurrencyService(htmlInputElement, options);
}
handleCut(event) {
setTimeout(() => {
this.inputService.updateFieldValue();
this.setValue(this.inputService.value);
this.onModelChange(this.inputService.value);
}, 0);
}
handleInput(event) {
const keyCode = this.inputService.rawValue.charCodeAt(this.inputService.rawValue.length - 1);
const rawValueLength = this.inputService.rawValue.length;
const rawValueSelectionEnd = this.inputService.inputSelection.selectionEnd;
const storedRawValueLength = this.inputService.storedRawValue.length;
this.inputService.rawValue = this.inputService.storedRawValue;
if (rawValueLength !== rawValueSelectionEnd || Math.abs(rawValueLength - storedRawValueLength) !== 1) {
this.setCursorPosition(event);
return;
}
if (rawValueLength < storedRawValueLength) {
this.inputService.removeNumber(8);
}
if (rawValueLength > storedRawValueLength) {
switch (keyCode) {
case 43:
this.inputService.changeToPositive();
break;
case 45:
this.inputService.changeToNegative();
break;
default:
if (!this.inputService.canInputMoreNumbers) {
return;
}
this.inputService.addNumber(keyCode);
}
}
this.setCursorPosition(event);
this.onModelChange(this.inputService.value);
}
handleKeydown(event) {
const keyCode = event.which || event.charCode || event.keyCode;
if (keyCode === 8 || keyCode === 46 || keyCode === 63272) {
event.preventDefault();
const selectionRangeLength = Math.abs(this.inputService.inputSelection.selectionEnd
- this.inputService.inputSelection.selectionStart);
if (selectionRangeLength === 0) {
this.inputService.removeNumber(keyCode);
this.onModelChange(this.inputService.value);
}
if (selectionRangeLength >= (this.inputService.rawValue.length - this.inputService.prefixLength())) {
this.clearValue();
}
}
}
clearValue() {
this.setValue(this.inputService.isNullable() ? null : 0);
this.onModelChange(this.inputService.value);
}
handleKeypress(event) {
const keyCode = event.which || event.charCode || event.keyCode;
if (keyCode === 97 && event.ctrlKey) {
return;
}
switch (keyCode) {
case undefined:
case 9:
case 13:
case 37:
case 39:
return;
case 43:
this.inputService.changeToPositive();
break;
case 45:
this.inputService.changeToNegative();
break;
default:
if (this.inputService.canInputMoreNumbers) {
const selectionRangeLength = Math.abs(this.inputService.inputSelection.selectionEnd
- this.inputService.inputSelection.selectionStart);
if (selectionRangeLength === this.inputService.rawValue.length) {
this.setValue(0);
}
this.inputService.addNumber(keyCode);
}
}
event.preventDefault();
this.onModelChange(this.inputService.value);
}
handlePaste(event) {
setTimeout(() => {
this.inputService.updateFieldValue();
this.setValue(this.inputService.value);
this.onModelChange(this.inputService.value);
}, 1);
}
updateOptions(options) {
this.inputService.updateOptions(options);
}
getOnModelChange() {
return this.onModelChange;
}
setOnModelChange(callbackFunction) {
this.onModelChange = callbackFunction;
}
getOnModelTouched() {
return this.onModelTouched;
}
setOnModelTouched(callbackFunction) {
this.onModelTouched = callbackFunction;
}
setValue(value) {
this.inputService.value = value;
}
setCursorPosition(event) {
setTimeout(function () {
event.target.setSelectionRange(event.target.value.length, event.target.value.length);
}, 0);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2lucHV0L2RpcmVjdGl2ZXMvY3VycmVuY3kvY3VycmVuY3kuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsTUFBTSxPQUFPLGVBQWU7SUFNMUIsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBRSxLQUFzQjtRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxnQkFBa0MsRUFBRSxPQUFZO1FBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFFOUQsSUFBSSxjQUFjLEtBQUssb0JBQW9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU87U0FDUjtRQUVELElBQUksY0FBYyxHQUFHLG9CQUFvQixFQUFFO1lBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxjQUFjLEdBQUcsb0JBQW9CLEVBQUU7WUFDekMsUUFBUSxPQUFPLEVBQUU7Z0JBQ2YsS0FBSyxFQUFFO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckMsTUFBTTtnQkFDUixLQUFLLEVBQUU7b0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNyQyxNQUFNO2dCQUNSO29CQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFO3dCQUMxQyxPQUFPO3FCQUNSO29CQUVELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUUvRCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQ3hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsWUFBWTtrQkFDL0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFckQsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0M7WUFFRCxJQUFJLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRTtnQkFDbEcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRS9ELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLENBQUMsQ0FBQztZQUNQLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLEVBQUU7Z0JBQ0wsT0FBTztZQUNULEtBQUssRUFBRTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JDLE1BQU07WUFDUixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQyxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFO29CQUN6QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsWUFBWTswQkFDL0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBRXJELElBQUksb0JBQW9CLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO3dCQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNsQjtvQkFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEM7U0FDSjtRQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQVk7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZ0JBQTBCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQTBCO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBVTtRQUNsQyxVQUFVLENBQUM7WUFDVCxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0N1cnJlbmN5U2VydmljZX0gZnJvbSAnLi9jdXJyZW5jeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5SGFuZGxlciB7XG5cbiAgcHJpdmF0ZSBfaW5wdXRTZXJ2aWNlOiBDdXJyZW5jeVNlcnZpY2U7XG4gIHByaXZhdGUgb25Nb2RlbENoYW5nZTogRnVuY3Rpb247XG4gIHByaXZhdGUgb25Nb2RlbFRvdWNoZWQ6IEZ1bmN0aW9uO1xuXG4gIGdldCBpbnB1dFNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0U2VydmljZTtcbiAgfVxuXG4gIHNldCBpbnB1dFNlcnZpY2UoIHZhbHVlOiBDdXJyZW5jeVNlcnZpY2UgKSB7XG4gICAgdGhpcy5faW5wdXRTZXJ2aWNlID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihodG1sSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmlucHV0U2VydmljZSA9IG5ldyBDdXJyZW5jeVNlcnZpY2UoaHRtbElucHV0RWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cblxuICBoYW5kbGVDdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbnB1dFNlcnZpY2UudXBkYXRlRmllbGRWYWx1ZSgpO1xuICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5pbnB1dFNlcnZpY2UudmFsdWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgaGFuZGxlSW5wdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSB0aGlzLmlucHV0U2VydmljZS5yYXdWYWx1ZS5jaGFyQ29kZUF0KHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IHJhd1ZhbHVlTGVuZ3RoID0gdGhpcy5pbnB1dFNlcnZpY2UucmF3VmFsdWUubGVuZ3RoO1xuICAgIGNvbnN0IHJhd1ZhbHVlU2VsZWN0aW9uRW5kID0gdGhpcy5pbnB1dFNlcnZpY2UuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uRW5kO1xuICAgIGNvbnN0IHN0b3JlZFJhd1ZhbHVlTGVuZ3RoID0gdGhpcy5pbnB1dFNlcnZpY2Uuc3RvcmVkUmF3VmFsdWUubGVuZ3RoO1xuICAgIHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlID0gdGhpcy5pbnB1dFNlcnZpY2Uuc3RvcmVkUmF3VmFsdWU7XG5cbiAgICBpZiAocmF3VmFsdWVMZW5ndGggIT09IHJhd1ZhbHVlU2VsZWN0aW9uRW5kIHx8IE1hdGguYWJzKHJhd1ZhbHVlTGVuZ3RoIC0gc3RvcmVkUmF3VmFsdWVMZW5ndGgpICE9PSAxKSB7XG4gICAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmF3VmFsdWVMZW5ndGggPCBzdG9yZWRSYXdWYWx1ZUxlbmd0aCkge1xuICAgICAgdGhpcy5pbnB1dFNlcnZpY2UucmVtb3ZlTnVtYmVyKDgpO1xuICAgIH1cblxuICAgIGlmIChyYXdWYWx1ZUxlbmd0aCA+IHN0b3JlZFJhd1ZhbHVlTGVuZ3RoKSB7XG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLmlucHV0U2VydmljZS5jaGFuZ2VUb1Bvc2l0aXZlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy5pbnB1dFNlcnZpY2UuY2hhbmdlVG9OZWdhdGl2ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghdGhpcy5pbnB1dFNlcnZpY2UuY2FuSW5wdXRNb3JlTnVtYmVycykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaW5wdXRTZXJ2aWNlLmFkZE51bWJlcihrZXlDb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5pbnB1dFNlcnZpY2UudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlS2V5ZG93bihldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlIHx8IGV2ZW50LmtleUNvZGU7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gOCB8fCBrZXlDb2RlID09PSA0NiB8fCBrZXlDb2RlID09PSA2MzI3Mikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlTGVuZ3RoID0gTWF0aC5hYnModGhpcy5pbnB1dFNlcnZpY2UuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uRW5kXG4gICAgICAgIC0gdGhpcy5pbnB1dFNlcnZpY2UuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uUmFuZ2VMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbnB1dFNlcnZpY2UucmVtb3ZlTnVtYmVyKGtleUNvZGUpO1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5pbnB1dFNlcnZpY2UudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0aW9uUmFuZ2VMZW5ndGggPj0gKHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMuaW5wdXRTZXJ2aWNlLnByZWZpeExlbmd0aCgpKSkge1xuICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclZhbHVlKCkge1xuICAgIHRoaXMuc2V0VmFsdWUodGhpcy5pbnB1dFNlcnZpY2UuaXNOdWxsYWJsZSgpID8gbnVsbCA6IDApO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVLZXlwcmVzcyhldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlIHx8IGV2ZW50LmtleUNvZGU7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gOTcgJiYgZXZlbnQuY3RybEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEzOlxuICAgICAgY2FzZSAzNzpcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIHRoaXMuaW5wdXRTZXJ2aWNlLmNoYW5nZVRvUG9zaXRpdmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ1OlxuICAgICAgICB0aGlzLmlucHV0U2VydmljZS5jaGFuZ2VUb05lZ2F0aXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRTZXJ2aWNlLmNhbklucHV0TW9yZU51bWJlcnMpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25SYW5nZUxlbmd0aCA9IE1hdGguYWJzKHRoaXMuaW5wdXRTZXJ2aWNlLmlucHV0U2VsZWN0aW9uLnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgLSB0aGlzLmlucHV0U2VydmljZS5pbnB1dFNlbGVjdGlvbi5zZWxlY3Rpb25TdGFydCk7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2VMZW5ndGggPT09IHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlucHV0U2VydmljZS5hZGROdW1iZXIoa2V5Q29kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVQYXN0ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0U2VydmljZS51cGRhdGVGaWVsZFZhbHVlKCk7XG4gICAgICB0aGlzLnNldFZhbHVlKHRoaXMuaW5wdXRTZXJ2aWNlLnZhbHVlKTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gICAgfSwgMSk7XG4gIH1cblxuICB1cGRhdGVPcHRpb25zKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRTZXJ2aWNlLnVwZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBnZXRPbk1vZGVsQ2hhbmdlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5vbk1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgc2V0T25Nb2RlbENoYW5nZShjYWxsYmFja0Z1bmN0aW9uOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGNhbGxiYWNrRnVuY3Rpb247XG4gIH1cblxuICBnZXRPbk1vZGVsVG91Y2hlZCgpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMub25Nb2RlbFRvdWNoZWQ7XG4gIH1cblxuICBzZXRPbk1vZGVsVG91Y2hlZChjYWxsYmFja0Z1bmN0aW9uOiBGdW5jdGlvbikge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBjYWxsYmFja0Z1bmN0aW9uO1xuICB9XG5cbiAgc2V0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRTZXJ2aWNlLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvclBvc2l0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShldmVudC50YXJnZXQudmFsdWUubGVuZ3RoLCBldmVudC50YXJnZXQudmFsdWUubGVuZ3RoKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuIl19