UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

202 lines (200 loc) • 7.7 kB
/** * DevExtreme (cjs/ui/text_box/ui.text_editor.mask.strategy.base.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/ */ "use strict"; exports.default = void 0; var _events_engine = _interopRequireDefault(require("../../events/core/events_engine")); var _index = require("../../events/utils/index"); var _browser = _interopRequireDefault(require("../../core/utils/browser")); var _array = require("../../core/utils/array"); var _dom = require("../../core/utils/dom"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } var MASK_EVENT_NAMESPACE = "dxMask"; var BLUR_EVENT = "blur beforedeactivate"; var EMPTY_CHAR = " "; var BaseMaskStrategy = function() { function BaseMaskStrategy(editor) { this.editor = editor; this.DIRECTION = { FORWARD: "forward", BACKWARD: "backward" }; this.NAME = this._getStrategyName() } var _proto = BaseMaskStrategy.prototype; _proto._getStrategyName = function() { return "base" }; _proto.editorOption = function() { var _this$editor; return (_this$editor = this.editor).option.apply(_this$editor, arguments) }; _proto.editorInput = function() { return this.editor._input() }; _proto.editorCaret = function(newCaret) { if (!newCaret) { return this.editor._caret() } this.editor._caret(newCaret) }; _proto.getHandler = function(handlerName) { var handler = this["_".concat(handlerName, "Handler")] || function() {}; return handler.bind(this) }; _proto.attachEvents = function() { var _this = this; var $input = this.editorInput(); this.getHandleEventNames().forEach((function(eventName) { var subscriptionName = (0, _index.addNamespace)(eventName.toLowerCase(), MASK_EVENT_NAMESPACE); _events_engine.default.on($input, subscriptionName, _this.getEventHandler(eventName)) })); this._attachChangeEventHandlers() }; _proto.getHandleEventNames = function() { return ["focusIn", "focusOut", "keyDown", "input", "paste", "cut", "drop"] }; _proto.getEventHandler = function(eventName) { return this["_".concat(eventName, "Handler")].bind(this) }; _proto.detachEvents = function() { _events_engine.default.off(this.editorInput(), ".".concat(MASK_EVENT_NAMESPACE)) }; _proto._attachChangeEventHandlers = function() { if (-1 === (0, _array.inArray)("change", this.editorOption("valueChangeEvent").split(" "))) { return } _events_engine.default.on(this.editorInput(), (0, _index.addNamespace)(BLUR_EVENT, MASK_EVENT_NAMESPACE), function(e) { this._suppressCaretChanging(this._changeHandler, [e]); this._changeHandler(e) }.bind(this.editor)) }; _proto._focusInHandler = function() { this.editor._showMaskPlaceholder(); this.editor._direction(this.DIRECTION.FORWARD); if (!this.editor._isValueEmpty() && this.editorOption("isValid")) { this.editor._adjustCaret() } else { var caret = this.editor._maskRulesChain.first(); this._caretTimeout = setTimeout(function() { this._caret({ start: caret, end: caret }) }.bind(this.editor), 0) } }; _proto._focusOutHandler = function(event) { this.editor._changeHandler(event); if ("onFocus" === this.editorOption("showMaskMode") && this.editor._isValueEmpty()) { this.editorOption("text", ""); this.editor._renderDisplayText("") } }; _proto._cutHandler = function(event) { var caret = this.editorCaret(); var selectedText = this.editorInput().val().substring(caret.start, caret.end); this.editor._maskKeyHandler(event, (function() { return (0, _dom.clipboardText)(event, selectedText) })) }; _proto._dropHandler = function() { this._clearDragTimer(); this._dragTimer = setTimeout(function() { this.option("value", this._convertToValue(this._input().val())) }.bind(this.editor)) }; _proto._clearDragTimer = function() { clearTimeout(this._dragTimer) }; _proto._keyDownHandler = function() { this._keyPressHandled = false }; _proto._pasteHandler = function(event) { var editor = this.editor; this._keyPressHandled = true; var caret = this.editorCaret(); editor._maskKeyHandler(event, (function() { var pastedText = (0, _dom.clipboardText)(event); var restText = editor._maskRulesChain.text().substring(caret.end); var accepted = editor._handleChain({ text: pastedText, start: caret.start, length: pastedText.length }); var newCaret = caret.start + accepted; editor._handleChain({ text: restText, start: newCaret, length: restText.length }); editor._caret({ start: newCaret, end: newCaret }) })) }; _proto._autoFillHandler = function(event) { var _this2 = this; var editor = this.editor; var inputVal = this.editorInput().val(); this._inputHandlerTimer = setTimeout((function() { _this2._keyPressHandled = true; if (_this2._isAutoFill()) { _this2._keyPressHandled = true; editor._maskKeyHandler(event, (function() { editor._handleChain({ text: inputVal, start: 0, length: inputVal.length }) })); editor._validateMask() } })) }; _proto._isAutoFill = function() { var $input = this.editor._input(); var result = false; if (_browser.default.msie && _browser.default.version > 11) { result = $input.hasClass("edge-autofilled") } else if (_browser.default.webkit) { var input = $input.get(0); result = input && input.matches(":-webkit-autofill") } return result }; _proto.runWithoutEventProcessing = function(action) { var keyPressHandled = this._keyPressHandled; this._keyPressHandled = true; action(); this._keyPressHandled = keyPressHandled }; _proto._backspaceHandler = function() {}; _proto._delHandler = function(event) { var editor = this.editor; this._keyPressHandled = true; editor._maskKeyHandler(event, (function() { return !editor._hasSelection() && editor._handleKey(EMPTY_CHAR) })) }; _proto.clean = function() { this._clearDragTimer(); clearTimeout(this._backspaceHandlerTimeout); clearTimeout(this._caretTimeout); clearTimeout(this._inputHandlerTimer) }; return BaseMaskStrategy }(); exports.default = BaseMaskStrategy; module.exports = exports.default; module.exports.default = exports.default;