Глобальные настройки

Архитектура библиотеки строится вокруг слоистой системы настроек, где локальные параметры экземпляра маски перекрывают алиасы, а алиасы, в свою очередь, наследуют поведение из глобальных конфигураций. Глобальный уровень предназначен для централизованного определения поведения масок во всём приложении без необходимости повторного описания одних и тех же правил.

Глобальные настройки влияют на:

  • стандартные параметры всех создаваемых масок;
  • поведение алиасов;
  • набор доступных дефиниций символов;
  • общие правила обработки ввода и форматирования;
  • системные callback-обработчики по умолчанию.

Такой уровень конфигурации позволяет формировать единый стандарт ввода данных в приложении: телефоны, даты, числовые поля, идентификаторы и пользовательские форматы.


Базовый объект глобальных настроек

Внутренне библиотека хранит глобальные параметры в объекте:

Inputmask.defaults

Этот объект содержит значения, которые применяются ко всем новым экземплярам масок, если они не были переопределены локально.

Типичная структура:

Inputmask.defaults = {
  placeholder: "_",
  showMaskOnFocus: true,
  showMaskOnHover: true,
  clearIncomplete: false,
  repeat: 0,
  greedy: false
};

Любое поле, отсутствующее в конфигурации конкретной маски, берётся из defaults.


Изменение глобальных значений через extendDefaults

Основной способ изменения глобального поведения:

Inputmask.extendDefaults({
  placeholder: "*",
  showMaskOnFocus: false
});

Механизм работает как поверхностное объединение объектов (shallow merge). Новые значения перезаписывают существующие, остальные остаются без изменений.

Особенности поведения:

  • изменения применяются только к будущим экземплярам;
  • уже инициализированные маски не обновляются автоматически;
  • вложенные объекты не клонируются глубоко;
  • массивы заменяются целиком.

Глобальные алиасы и их переопределение

Алиасы представляют собой именованные конфигурации масок, например:

  • phone
  • datetime
  • numeric
  • email

Глобальное хранилище алиасов:

Inputmask.aliases

Расширение или модификация:

Inputmask.extendAliases({
  "phone": {
    mask: "+7 (999) 999-99-99",
    country: "RU"
  }
});

Если алиас уже существует, он перезаписывается или дополняется в зависимости от структуры объекта.

Приоритет:

  1. Локальные параметры Inputmask(...)
  2. Алиас
  3. Inputmask.defaults

Расширение системы дефиниций символов

Дефиниции определяют правила интерпретации масочных символов. Например:

  • 9 — цифра
  • a — буква
  • * — буква или цифра

Глобальное хранилище:

Inputmask.definitions

Расширение:

Inputmask.extendDefinitions({
  "#": {
    validator: "[0-9]",
    cardinality: 1,
    definitionSymbol: "#"
  }
});

Каждая дефиниция описывает:

  • validator — регулярное выражение или функция проверки;
  • cardinality — количество символов;
  • prevalidator — предварительная проверка;
  • definitionSymbol — символ, используемый в маске.

Глобальные дефиниции применяются ко всем маскам без необходимости локального дублирования.


Глобальные callback-обработчики

В глобальных настройках допускается задание стандартных обработчиков событий:

  • onBeforeMask
  • onBeforePaste
  • onBeforeWrite
  • onUnMask

Пример:

Inputmask.extendDefaults({
  onBeforeMask: function (value) {
    return value.trim();
  }
});

Эти функции вызываются для каждой маски, если не переопределены локально.


Управление поведением ввода

Через глобальные настройки регулируется логика взаимодействия с полем ввода:

Отображение маски

Inputmask.extendDefaults({
  showMaskOnFocus: true,
  showMaskOnHover: false
});
  • showMaskOnFocus — отображение маски при фокусе;
  • showMaskOnHover — отображение при наведении;
  • showMaskOnAlways — постоянное отображение.

Очистка и валидация

Inputmask.extendDefaults({
  clearIncomplete: true,
  clearMaskOnLostFocus: false
});
  • clearIncomplete удаляет неполные значения при потере фокуса;
  • clearMaskOnLostFocus управляет поведением при blur.

Повторяемость и жадность маски

Inputmask.extendDefaults({
  repeat: 5,
  greedy: false
});
  • repeat задаёт количество повторений шаблона;
  • greedy управляет захватом доступного ввода.

Приоритетность глобальных настроек

Система конфигурации строится по строгой иерархии:

  1. Явно переданные параметры экземпляра
  2. Алиасы
  3. Глобальные дефолты (Inputmask.defaults)
  4. Встроенные значения библиотеки

При конфликте значений выбирается наиболее специфичный уровень.


Модификация глобального поведения во время выполнения

Глобальные параметры могут изменяться динамически:

Inputmask.extendDefaults({
  placeholder: "0"
});

После выполнения такого кода новые маски будут использовать обновлённое поведение.

Однако важный аспект заключается в том, что:

  • изменения не затрагивают уже привязанные DOM-элементы;
  • для обновления существующих масок требуется повторная инициализация.

Глобальные настройки и производительность

Использование глобального уровня конфигурации снижает накладные расходы:

  • исключается повторное создание одинаковых объектов конфигурации;
  • уменьшается количество вычислений при инициализации;
  • упрощается кеширование алиасов и дефиниций.

Особенно заметно при работе с большим количеством input-полей, где единые правила маскирования применяются системно.


Изоляция глобального состояния

Несмотря на глобальный характер, структура позволяет изолировать изменения:

const oldDefaults = { ...Inputmask.defaults };

Inputmask.extendDefaults({
  placeholder: "_"
});

// восстановление
Inputmask.extendDefaults(oldDefaults);

Такой подход используется в сценариях временного переопределения поведения, например при переключении режимов интерфейса или локализации.


Глобальная система как основа расширяемости

Механизм глобальных настроек формирует базовый слой расширения библиотеки. Через него реализуются:

  • тематические наборы масок;
  • корпоративные стандарты ввода;
  • региональные форматы данных;
  • централизованная валидация пользовательского ввода.

Глобальная конфигурация выступает связующим звеном между ядром библиотеки и прикладной логикой приложения, обеспечивая единообразие поведения масок на уровне всего интерфейса.