Библиотека Inputmask при инициализации создает экземпляр маски,
который привязывается к DOM-элементу и становится доступным через
свойство элемента. Центральной точкой доступа к внутреннему состоянию
выступает объект inputmask, закрепленный за элементом
формы.
После применения маски структура выглядит следующим образом:
Ключевая особенность архитектуры заключается в разделении:
Доступ к внутреннему состоянию Inputmask осуществляется через несколько стабильно используемых точек:
element.inputmask — основной публичный доступ к
экземпляруim.opts — конфигурационные параметрыim.maskset — структура маски и тестовim.value — текущее значение с учетом маскиim.unmaskedvalue() — значение без маскиim.isValid() — проверка валидности текущего
состоянияДополнительно существуют внутренние методы и поля, которые не документируются как публичные API, но активно используются внутри библиотеки:
_valueGet_valueSet_buffer_lastValidPosition_cursormodeskipOptionalPartCharacterЭти элементы формируют низкоуровневое состояние маски.
maskset представляет собой ядро логической модели
Inputmask. Это объект, описывающий правила маскирования и все возможные
состояния ввода.
Внутренняя структура maskset включает:
mask — строковое описание маскиtests — массив тестов для каждого символа маскиbuffer — начальное состояние заполненияlastValidPosition — последняя валидная позиция
вводаp (positioning) — данные позиционирования символовmetadata — дополнительные сведения о маскеОсобую роль играет массив tests. Он содержит объекты,
описывающие поведение каждого символа:
Каждый ввод пользователя проходит через сопоставление с
tests, что делает maskset центральным
механизмом валидации.
buffer представляет собой массив или строковую
структуру, отражающую текущее отображаемое значение в input-поле.
Особенности buffer:
maskset.testsВ отличие от unmaskedvalue, buffer всегда отражает
визуальное состояние, включая маску.
Пример концептуального различия:
+7 (7__) ___ __ __77opts хранит все параметры и настройки, определяющие
поведение маски.
Ключевые группы параметров:
placeholdershowMaskOnHovershowMaskOnFocusclearMaskOnLostFocusgreedyskipOptionalPartCharacterjitMaskingdefinitionsrulesaliasesoncompleteonincompleteonclearedonBeforeMaskonBeforeWriteopts влияет на формирование maskset и
пересборку buffer. При изменении параметров часто происходит
пересоздание внутренних структур.
Inputmask предоставляет набор методов для извлечения состояния, каждый из которых работает на разных уровнях абстракции.
im.value возвращает значение с учетом маски. Это
синтетическое состояние, формируемое из buffer.
Метод im.unmaskedvalue() возвращает «чистое» значение
без форматирования.
Особенность заключается в том, что результат формируется из:
Метод im.isValid() проверяет текущее состояние на
соответствие маске.
Он опирается на:
Возвращаемое значение может отражать не только boolean, но и более сложные состояния в зависимости от конфигурации.
Состояние валидности внутри Inputmask не является бинарным в классическом смысле. Оно формируется через комбинацию внутренних флагов.
Основные индикаторы состояния:
isComplete — маска полностью заполненаisValid — текущее значение соответствует правиламisOptional — заполнение необязательноisDirty — поле было изменено пользователемДополнительно используются вычисляемые признаки:
testsВалидация выполняется инкрементально, при каждом изменении input.
Для повышения производительности Inputmask использует ряд оптимизационных механизмов, напрямую влияющих на состояние.
Just-in-time masking означает создание части маски только при необходимости. Это влияет на:
Определяет символ, который используется для пропуска необязательных частей. Влияет на:
greedy определяет, насколько агрессивно маска заполняет
доступные позиции. При включении:
После инициализации Inputmask связывает состояние с DOM-элементом:
element.inputmask
Через этот объект доступно:
element.inputmask.optselement.inputmask.masksetelement.inputmask._valueGet()element.inputmask._valueSet()element.inputmask.isValid()Дополнительно Inputmask использует скрытые поля данных:
data-inputmaskdata-inputmask-maskdata-inputmask-placeholderЭти атрибуты участвуют в восстановлении состояния при повторной инициализации.
Слой внутренних методов обеспечивает прямую работу с состоянием без участия событий DOM.
Извлекает текущее значение поля с учетом buffer и maskset. Используется внутри библиотеки для синхронизации состояния.
Устанавливает новое значение, проходя через:
Пересобирает внутреннюю структуру маски при изменении конфигурации.
Запускает повторную проверку всех тестов maskset относительно текущего buffer.
Состояние Inputmask тесно связано с системой событий. Каждое изменение buffer инициирует цепочку обновлений:
События влияют на доступ к состоянию:
onBeforeMask — изменение входных данных до
обработкиonBeforeWrite — контроль финального bufferoncomplete — достижение полного состоянияonincomplete — неполное состояниеВнутреннее состояние Inputmask можно представить как трехслойную систему:
Связь между слоями является двунаправленной:
Каждое изменение состояния проходит полный цикл перерасчета, обеспечивая консистентность между логикой и отображением.