UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

272 lines (266 loc) • 9.55 kB
/** * DevExtreme (cjs/ui/text_box/ui.text_editor.mask.rule.js) * Version: 23.2.6 * Build date: Wed May 01 2024 * * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; exports.StubMaskRule = exports.MaskRule = exports.EmptyMaskRule = void 0; var _extend = require("../../core/utils/extend"); var _type = require("../../core/utils/type"); function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass) } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(o, p) { o.__proto__ = p; return o }; return _setPrototypeOf(o, p) } const EMPTY_CHAR = " "; let BaseMaskRule = function() { function BaseMaskRule(config) { this._value = " "; (0, _extend.extend)(this, config) } var _proto = BaseMaskRule.prototype; _proto.next = function(rule) { if (!arguments.length) { return this._next } this._next = rule }; _proto._prepareHandlingArgs = function(args, config) { var _config$str, _config$start, _config$length; config = config || {}; const handlingProperty = Object.prototype.hasOwnProperty.call(args, "value") ? "value" : "text"; args[handlingProperty] = null !== (_config$str = config.str) && void 0 !== _config$str ? _config$str : args[handlingProperty]; args.start = null !== (_config$start = config.start) && void 0 !== _config$start ? _config$start : args.start; args.length = null !== (_config$length = config.length) && void 0 !== _config$length ? _config$length : args.length; args.index = args.index + 1; return args }; _proto.first = function(index) { index = index || 0; return this.next().first(index + 1) }; _proto.isAccepted = function() { return false }; _proto.adjustedCaret = function(caret, isForwardDirection, char) { return isForwardDirection ? this._adjustedForward(caret, 0, char) : this._adjustedBackward(caret, 0, char) }; _proto._adjustedForward = function() {}; _proto._adjustedBackward = function() {}; _proto.isValid = function() {}; _proto.reset = function() {}; _proto.clear = function() {}; _proto.text = function() {}; _proto.value = function() {}; _proto.rawValue = function() {}; _proto.handle = function() {}; return BaseMaskRule }(); let EmptyMaskRule = function(_BaseMaskRule) { _inheritsLoose(EmptyMaskRule, _BaseMaskRule); function EmptyMaskRule() { return _BaseMaskRule.apply(this, arguments) || this } var _proto2 = EmptyMaskRule.prototype; _proto2.next = function() {}; _proto2.handle = function() { return 0 }; _proto2.text = function() { return "" }; _proto2.value = function() { return "" }; _proto2.first = function() { return 0 }; _proto2.rawValue = function() { return "" }; _proto2.adjustedCaret = function() { return 0 }; _proto2.isValid = function() { return true }; return EmptyMaskRule }(BaseMaskRule); exports.EmptyMaskRule = EmptyMaskRule; let MaskRule = function(_BaseMaskRule2) { _inheritsLoose(MaskRule, _BaseMaskRule2); function MaskRule() { return _BaseMaskRule2.apply(this, arguments) || this } var _proto3 = MaskRule.prototype; _proto3.text = function() { return (" " !== this._value ? this._value : this.maskChar) + this.next().text() }; _proto3.value = function() { return this._value + this.next().value() }; _proto3.rawValue = function() { return this._value + this.next().rawValue() }; _proto3.handle = function(args) { const str = Object.prototype.hasOwnProperty.call(args, "value") ? args.value : args.text; if (!str || !str.length || !args.length) { return 0 } if (args.start) { return this.next().handle(this._prepareHandlingArgs(args, { start: args.start - 1 })) } const char = str[0]; const rest = str.substring(1); this._tryAcceptChar(char, args); return this._accepted() ? this.next().handle(this._prepareHandlingArgs(args, { str: rest, length: args.length - 1 })) + 1 : this.handle(this._prepareHandlingArgs(args, { str: rest, length: args.length - 1 })) }; _proto3.clear = function(args) { this._tryAcceptChar(" ", args); this.next().clear(this._prepareHandlingArgs(args)) }; _proto3.reset = function() { this._accepted(false); this.next().reset() }; _proto3._tryAcceptChar = function(char, args) { this._accepted(false); if (!this._isAllowed(char, args)) { return } const acceptedChar = " " === char ? this.maskChar : char; args.fullText = args.fullText.substring(0, args.index) + acceptedChar + args.fullText.substring(args.index + 1); this._accepted(true); this._value = char }; _proto3._accepted = function(value) { if (!arguments.length) { return !!this._isAccepted } this._isAccepted = !!value }; _proto3.first = function(index) { return " " === this._value ? index || 0 : _BaseMaskRule2.prototype.first.call(this, index) }; _proto3._isAllowed = function(char, args) { if (" " === char) { return true } return this._isValid(char, args) }; _proto3._isValid = function(char, args) { const allowedChars = this.allowedChars; if (allowedChars instanceof RegExp) { return allowedChars.test(char) } if ((0, _type.isFunction)(allowedChars)) { return allowedChars(char, args.index, args.fullText) } if (Array.isArray(allowedChars)) { return allowedChars.includes(char) } return allowedChars === char }; _proto3.isAccepted = function(caret) { return 0 === caret ? this._accepted() : this.next().isAccepted(caret - 1) }; _proto3._adjustedForward = function(caret, index, char) { if (index >= caret) { return index } return this.next()._adjustedForward(caret, index + 1, char) || index + 1 }; _proto3._adjustedBackward = function(caret, index) { if (index >= caret - 1) { return caret } return this.next()._adjustedBackward(caret, index + 1) || index + 1 }; _proto3.isValid = function(args) { return this._isValid(this._value, args) && this.next().isValid(this._prepareHandlingArgs(args)) }; return MaskRule }(BaseMaskRule); exports.MaskRule = MaskRule; let StubMaskRule = function(_MaskRule) { _inheritsLoose(StubMaskRule, _MaskRule); function StubMaskRule() { return _MaskRule.apply(this, arguments) || this } var _proto4 = StubMaskRule.prototype; _proto4.value = function() { return this.next().value() }; _proto4.handle = function(args) { const hasValueProperty = Object.prototype.hasOwnProperty.call(args, "value"); const str = hasValueProperty ? args.value : args.text; if (!str.length || !args.length) { return 0 } if (args.start || hasValueProperty) { return this.next().handle(this._prepareHandlingArgs(args, { start: args.start && args.start - 1 })) } const char = str[0]; const rest = str.substring(1); this._tryAcceptChar(char); const nextArgs = this._isAllowed(char) ? this._prepareHandlingArgs(args, { str: rest, length: args.length - 1 }) : args; return this.next().handle(nextArgs) + 1 }; _proto4.clear = function(args) { this._accepted(false); this.next().clear(this._prepareHandlingArgs(args)) }; _proto4._tryAcceptChar = function(char) { this._accepted(this._isValid(char)) }; _proto4._isValid = function(char) { return char === this.maskChar }; _proto4.first = function(index) { index = index || 0; return this.next().first(index + 1) }; _proto4._adjustedForward = function(caret, index, char) { if (index >= caret && char === this.maskChar) { return index } if (caret === index + 1 && this._accepted()) { return caret } return this.next()._adjustedForward(caret, index + 1, char) }; _proto4._adjustedBackward = function(caret, index) { if (index >= caret - 1) { return 0 } return this.next()._adjustedBackward(caret, index + 1) }; _proto4.isValid = function(args) { return this.next().isValid(this._prepareHandlingArgs(args)) }; return StubMaskRule }(MaskRule); exports.StubMaskRule = StubMaskRule;