UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

131 lines 17 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2lucHV0L2RpcmVjdGl2ZXMvY3VycmVuY3kvY3VycmVuY3kuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsTUFBTSxPQUFPLGVBQWU7SUFNMUIsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBRSxLQUFzQjtRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxnQkFBa0MsRUFBRSxPQUFZO1FBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RixNQUFNLGNBQWMsR0FBRyxJ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WSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQVk7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZ0JBQTBCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQTBCO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBVTtRQUNsQyxVQUFVLENBQUM7WUFDVCxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0N1cnJlbmN5U2VydmljZX0gZnJvbSAnLi9jdXJyZW5jeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5SGFuZGxlciB7XG5cbiAgcHJpdmF0ZSBfaW5wdXRTZXJ2aWNlOiBDdXJyZW5jeVNlcnZpY2U7XG4gIHByaXZhdGUgb25Nb2RlbENoYW5nZTogRnVuY3Rpb247XG4gIHByaXZhdGUgb25Nb2RlbFRvdWNoZWQ6IEZ1bmN0aW9uO1xuXG4gIGdldCBpbnB1dFNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0U2VydmljZTtcbiAgfVxuXG4gIHNldCBpbnB1dFNlcnZpY2UoIHZhbHVlOiBDdXJyZW5jeVNlcnZpY2UgKSB7XG4gICAgdGhpcy5faW5wdXRTZXJ2aWNlID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihodG1sSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmlucHV0U2VydmljZSA9IG5ldyBDdXJyZW5jeVNlcnZpY2UoaHRtbElucHV0RWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cblxuICBoYW5kbGVDdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbnB1dFNlcnZpY2UudXBkYXRlRmllbGRWYWx1ZSgpO1xuICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5pbnB1dFNlcnZpY2UudmFsdWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgaGFuZGxlSW5wdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSB0aGlzLmlucHV0U2VydmljZS5yYXdWYWx1ZS5jaGFyQ29kZUF0KHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IHJhd1ZhbHVlTGVuZ3RoID0gdGhpcy5pbnB1dFNlcnZpY2UucmF3VmFsdWUubGVuZ3RoO1xuICAgIGNvbnN0IHJhd1ZhbHVlU2VsZWN0aW9uRW5kID0gdGhpcy5pbnB1dFNlcnZpY2UuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uRW5kO1xuICAgIGNvbnN0IHN0b3JlZFJhd1ZhbHVlTGVuZ3RoID0gdGhpcy5pbnB1dFNlcnZpY2Uuc3RvcmVkUmF3VmFsdWUubGVuZ3RoO1xuICAgIHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlID0gdGhpcy5pbnB1dFNlcnZpY2Uuc3RvcmVkUmF3VmFsdWU7XG5cbiAgICBpZiAocmF3VmFsdWVMZW5ndGggIT09IHJhd1ZhbHVlU2VsZWN0aW9uRW5kIHx8IE1hdGguYWJzKHJhd1ZhbHVlTGVuZ3RoIC0gc3RvcmVkUmF3VmFsdWVMZW5ndGgpICE9PSAxKSB7XG4gICAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmF3VmFsdWVMZW5ndGggPCBzdG9yZWRSYXdWYWx1ZUxlbmd0aCkge1xuICAgICAgdGhpcy5pbnB1dFNlcnZpY2UucmVtb3ZlTnVtYmVyKDgpO1xuICAgIH1cblxuICAgIGlmIChyYXdWYWx1ZUxlbmd0aCA+IHN0b3JlZFJhd1ZhbHVlTGVuZ3RoKSB7XG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLmlucHV0U2VydmljZS5jaGFuZ2VUb1Bvc2l0aXZlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy5pbnB1dFNlcnZpY2UuY2hhbmdlVG9OZWdhdGl2ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghdGhpcy5pbnB1dFNlcnZpY2UuY2FuSW5wdXRNb3JlTnVtYmVycykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaW5wdXRTZXJ2aWNlLmFkZE51bWJlcihrZXlDb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5pbnB1dFNlcnZpY2UudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlS2V5ZG93bihldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlIHx8IGV2ZW50LmtleUNvZGU7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gOCB8fCBrZXlDb2RlID09PSA0NiB8fCBrZXlDb2RlID09PSA2MzI3Mikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlTGVuZ3RoID0gTWF0aC5hYnModGhpcy5pbnB1dFNlcnZpY2UuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uRW5kXG4gICAgICAgIC0gdGhpcy5pbnB1dFNlcnZpY2UuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uUmFuZ2VMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbnB1dFNlcnZpY2UucmVtb3ZlTnVtYmVyKGtleUNvZGUpO1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5pbnB1dFNlcnZpY2UudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0aW9uUmFuZ2VMZW5ndGggPj0gKHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMuaW5wdXRTZXJ2aWNlLnByZWZpeExlbmd0aCgpKSkge1xuICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclZhbHVlKCkge1xuICAgIHRoaXMuc2V0VmFsdWUodGhpcy5pbnB1dFNlcnZpY2UuaXNOdWxsYWJsZSgpID8gbnVsbCA6IDApO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVLZXlwcmVzcyhldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlIHx8IGV2ZW50LmtleUNvZGU7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gOTcgJiYgZXZlbnQuY3RybEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEzOlxuICAgICAgY2FzZSAzNzpcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIHRoaXMuaW5wdXRTZXJ2aWNlLmNoYW5nZVRvUG9zaXRpdmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ1OlxuICAgICAgICB0aGlzLmlucHV0U2VydmljZS5jaGFuZ2VUb05lZ2F0aXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRTZXJ2aWNlLmNhbklucHV0TW9yZU51bWJlcnMpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25SYW5nZUxlbmd0aCA9IE1hdGguYWJzKHRoaXMuaW5wdXRTZXJ2aWNlLmlucHV0U2VsZWN0aW9uLnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgLSB0aGlzLmlucHV0U2VydmljZS5pbnB1dFNlbGVjdGlvbi5zZWxlY3Rpb25TdGFydCk7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2VMZW5ndGggPT09IHRoaXMuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlucHV0U2VydmljZS5hZGROdW1iZXIoa2V5Q29kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVQYXN0ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0U2VydmljZS51cGRhdGVGaWVsZFZhbHVlKCk7XG4gICAgICB0aGlzLnNldFZhbHVlKHRoaXMuaW5wdXRTZXJ2aWNlLnZhbHVlKTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmlucHV0U2VydmljZS52YWx1ZSk7XG4gICAgfSwgMSk7XG4gIH1cblxuICB1cGRhdGVPcHRpb25zKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRTZXJ2aWNlLnVwZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBnZXRPbk1vZGVsQ2hhbmdlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5vbk1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgc2V0T25Nb2RlbENoYW5nZShjYWxsYmFja0Z1bmN0aW9uOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGNhbGxiYWNrRnVuY3Rpb247XG4gIH1cblxuICBnZXRPbk1vZGVsVG91Y2hlZCgpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMub25Nb2RlbFRvdWNoZWQ7XG4gIH1cblxuICBzZXRPbk1vZGVsVG91Y2hlZChjYWxsYmFja0Z1bmN0aW9uOiBGdW5jdGlvbikge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBjYWxsYmFja0Z1bmN0aW9uO1xuICB9XG5cbiAgc2V0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRTZXJ2aWNlLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvclBvc2l0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShldmVudC50YXJnZXQudmFsdWUubGVuZ3RoLCBldmVudC50YXJnZXQudmFsdWUubGVuZ3RoKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuIl19