UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

86 lines (85 loc) 3.36 kB
/** * DevExtreme (esm/ui/text_box/ui.text_editor.mask.strategy.input_events.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import BaseMaskStrategy from "./ui.text_editor.mask.strategy.base"; var DELETE_INPUT_TYPE = "deleteContentBackward"; class InputEventsMaskStrategy extends BaseMaskStrategy { _getStrategyName() { return "inputEvents" } getHandleEventNames() { return [...super.getHandleEventNames(), "beforeInput"] } _beforeInputHandler() { this._prevCaret = this.editorCaret() } _inputHandler(_ref) { var { originalEvent: originalEvent } = _ref; if (!originalEvent) { return } var { inputType: inputType, data: data } = originalEvent; var currentCaret = this.editorCaret(); if (inputType === DELETE_INPUT_TYPE) { var length = this._prevCaret.end - this._prevCaret.start || 1; this.editor.setBackwardDirection(); this._updateEditorMask({ start: currentCaret.start, length: length, text: this._getEmptyString(length) }) } else { var _this$_prevCaret, _this$_prevCaret2, _this$_prevCaret3; if (!currentCaret.end) { return } this._autoFillHandler(originalEvent); this.editorCaret(currentCaret); var _length = (null === (_this$_prevCaret = this._prevCaret) || void 0 === _this$_prevCaret ? void 0 : _this$_prevCaret.end) - (null === (_this$_prevCaret2 = this._prevCaret) || void 0 === _this$_prevCaret2 ? void 0 : _this$_prevCaret2.start); var newData = data + (_length ? this._getEmptyString(_length - data.length) : ""); this.editor.setForwardDirection(); var hasValidChars = this._updateEditorMask({ start: null === (_this$_prevCaret3 = this._prevCaret) || void 0 === _this$_prevCaret3 ? void 0 : _this$_prevCaret3.start, length: _length || newData.length, text: newData }); if (!hasValidChars) { this.editorCaret(this._prevCaret) } } } _getEmptyString(length) { return Array(length + 1).join(" ") } _updateEditorMask(args) { var textLength = args.text.length; var updatedCharsCount = this.editor._handleChain(args); if (this.editor.isForwardDirection()) { var { start: start, end: end } = this.editorCaret(); var correction = updatedCharsCount - textLength; if (start <= updatedCharsCount && updatedCharsCount > 1) { this.editorCaret({ start: start + correction, end: end + correction }) } this.editor.isForwardDirection() && this.editor._adjustCaret() } this.editor._displayMask(); return !!updatedCharsCount } } export default InputEventsMaskStrategy;