.. _gs3_editMask: Маска ввода в редакторе ============================ Общая информация ----------------- Сервер предоставляет возможность использовать :term:`маску ввода <Маска ввода>` в редакторах. Маска ввода реализована при помощи сторонней Javascript библиотеки `Imask `_. .. warning:: Если функциональность масок ввода перестанет соответствовать требованиям разработки, рекомендуется выполнить следующие шаги: 1. Изучить возможности библиотеки `Imask `_ на предмет наличия необходимого функционала. 2. Если требуемые возможности поддерживаются, запросить у системных разработчиков их интеграцию. 3. Если необходимый функционал отсутствует, рассмотреть альтернативные варианты: - Пересмотр и доработка прикладного кода. - Замена библиотеки на более подходящую (совместно с системным отделом). - Разработка собственного решения (совместно с системным отделом). Виды масок ввода ----------------- Ниже представлена таблица, в которой указаны виды масок ввода, которые можно использовать в редакторах. Перейдя в метаданные Postgres вы можете детально изучить возможности каждой маски ввода. .. list-table:: :header-rows: 1 * - Вид маски ввода - Элемент в метаданных Postgres * - Маска ввода, которая состоит из паттерна - :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern` * - Маска ввода на основе регулярного выражения - :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Regular` * - Маска ввода для работы с числовыми значениями - :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Number` * - Динамическая маска ввода - :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic` Способы установки маски ввода в редактор ----------------------------------------- Маски ввода устанавливаются только внутри прикладных приложений. Маски ввода устанавливаются при помощи элемента :xsd:class:`editMask ` в следующих редакторах: - :xsd:class:`Редактор в строке ` - :xsd:class:`Редактор в строке с произвольными кнопками ` - :xsd:class:`Редактор в строке с кнопкой ` Ниже приведены основные способы, с помощью которых можно установить маску ввода в редактор. .. _gs3_editMask_set_mask_avm: Через разметку выборки ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Подход, при котором маска ввода устанавливается в ``*.avm.xml`` файлах, является основным. Ниже представлен пример установки маски ввода для :xsd:class:`редактора в строке `. .. code-block:: xml :caption: Установка маски ввода для редактора через разметку выборки :linenos: .. _gs3_editMask_set_mask_avi: Через код интерактивной бизнес логики ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Подход, при котором маска ввода устанавливается в ``*Avi.scala`` файлах, следует использовать в тех случаях, когда необходимо программно установить маску ввода в редактор. Это может потребоваться, когда в зависимости от определённых условий в прикладном коде необходимо изменять маску ввода. Ниже представлен пример установки маски ввода для редактора, который указан в примере для установки маски ввода через :ref:`разметку выборки `. .. code-block:: scala :caption: Установка маски ввода для редактора через код интерактивной бизнес логики :linenos: attrs("edit_mask_1").editMask = """ |{ | "options": { | "type": "PATTERN", | "items": [ | { | "type": "DEFINITION", | "name": "0" | }, | { | "type": "DEFINITION", | "name": "0" | }, | { | "type": "DEFINITION", | "name": "0" | } | ] | } |} |""".stripMargin .. seealso:: :ref:`gs3_editMask_json` .. _gs3_editMask_reserved_definitions: Зарезервированные определения ------------------------------- Ниже представлена таблица, в которой указаны зарезервированные :term:`определения <Определение маски ввода>`, которые можно использовать в :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Definition.key`. .. list-table:: :header-rows: 1 * - Ключ зарезервированного определения - Описание - Регулярное выражение * - ``L`` - Любая буква - ``/^\p{L}$/u`` * - ``A`` - Любая буква или цифра - ``/^(\p{L}|[0-9])$/u`` * - ``C`` - Любой символ - ``/^.$/`` * - ``0`` - Любая цифра - ``/^[0-9]$/`` * - ``#`` - Любая цифра, символ ``+``, символ ``-`` - ``/^[0-9+-]$/`` .. _gs3_editMask_json: Эквиваленты элементов маски ввода в JSON формате -------------------------------------------------- В данном разделе описаны JSON-эквиваленты элементов маски ввода. Это поможет понять, как настраивается маска ввода в :ref:`коде интерактивной бизнес-логики `. --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``saveWithLiteralsEnabled`` - ``Тип: boolean`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.saveWithLiteralsEnabled` - Да * - ``options`` - См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern - - Нет .. tab-item:: Пример .. code-block:: json { "saveWithLiteralsEnabled": true, "options": {} // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: PATTERN`` - - Нет * - ``items`` - См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items - - Нет * - ``definitions`` - См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Definitions - - Да * - ``blocks`` - См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Blocks - - Да * - ``placeholderChar`` - ``Тип: string`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.placeholderChar` - Да * - ``textTransform`` - Допустимые значения смотри в :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Enums.TextTransformTypes` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.textTransform` - Да * - ``eagerEnabled`` - ``Тип: boolean`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.eagerEnabled` - Да * - ``lazyEnabled`` - ``Тип: boolean`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.lazyEnabled` - Да .. tab-item:: Пример .. code-block:: json { "key": "PATTERN", "items": [], //См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items "definitions": {}, //См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items "blocks": {}, //См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items "placeholderChar": "*", "textTransform": "DEFAULT", "eagerEnabled": false, "lazyEnabled": false } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items`: .. tab-set:: .. tab-item:: JSON-Массив 1. См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Block 2. См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Definition 3. См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Literal .. tab-item:: Пример .. code-block:: json [ // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Block // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Definition // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Literal ] --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Block`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: BLOCK`` - - Нет * - ``key`` - ``Тип: string`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Block.key` - Нет * - ``optionalEnabled`` - ``Тип: boolean`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Block.optionalEnabled` - Да .. tab-item:: Пример .. code-block:: json { "type": "BLOCK", "key": "test_block_1", "optionalEnabled": false } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Definition`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: DEFINITION`` - - Нет * - ``key`` - ``Тип: string`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Definition.key` - Нет * - ``optionalEnabled`` - ``Тип: boolean`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Definition.optionalEnabled` - Да .. tab-item:: Пример .. code-block:: json { "type": "DEFINITION", "key": "a", "optionalEnabled": false } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Literal`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: LITERAL`` - - Нет * - ``value`` - ``Тип: string`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Literal.value` - Нет .. tab-item:: Пример .. code-block:: json { "type": "LITERAL", "value": "-" } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Definitions`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Может быть не указано или указано как ``null`` * - Ключ определения (см. :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Definitions.Definition.key`) - См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.RegExp - Да .. tab-item:: Пример .. code-block:: json { "a": {}, // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.RegExp "b": {}, // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.RegExp "c": {}, // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.RegExp } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Blocks`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Может быть не указано или указано как ``null`` * - Ключ блока (см. :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Pattern.Items.Block.key`) - См. JSON-эквиваленты следующих элементов: View.Representation.Attributes.Attribute.Editor.EditMask.Pattern, View.Representation.Attributes.Attribute.Editor.EditMask.Number, View.Representation.Attributes.Attribute.Editor.EditMask.Regular, View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic - Да .. tab-item:: Пример .. code-block:: json { "a": {}, // См. JSON-эквиваленты следующих элементов: View.Representation.Attributes.Attribute.Editor.EditMask.Pattern, View.Representation.Attributes.Attribute.Editor.EditMask.Number, View.Representation.Attributes.Attribute.Editor.EditMask.Regular, View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic "block_1": {}, // См. JSON-эквиваленты следующих элементов: View.Representation.Attributes.Attribute.Editor.EditMask.Pattern, View.Representation.Attributes.Attribute.Editor.EditMask.Number, View.Representation.Attributes.Attribute.Editor.EditMask.Regular, View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic "test_block_b": {} // См. JSON-эквиваленты следующих элементов: View.Representation.Attributes.Attribute.Editor.EditMask.Pattern, View.Representation.Attributes.Attribute.Editor.EditMask.Number, View.Representation.Attributes.Attribute.Editor.EditMask.Regular, View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Regular`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: REGULAR`` - - Нет * - ``value`` - См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.RegExp - - Нет * - ``textTransform`` - Допустимые значения смотри в :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Enums.TextTransformTypes` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Regular.textTransform` - Да .. tab-item:: Пример .. code-block:: json { "type": "REGULAR", "value": {}, // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.RegExp "textTransform": "DEFAULT" } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.RegExp`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``value`` - ``Тип: string`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.RegExp.value` - Нет * - ``flags`` - ``Тип: string`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.RegExp.flags` - Да .. tab-item:: Пример .. code-block:: json { "value": "^[0-9]$", "flags": "g" } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Number`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Метаданные Postgres - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: NUMBER`` - - Нет * - ``min`` - ``Тип: integer`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Number.min` - Да * - ``max`` - ``Тип: integer`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Number.max` - Да * - ``scale`` - ``Тип: integer`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Number.scale` - Да * - ``thousandsSeparatorEnabled`` - ``Тип: boolean`` - :xsd:attr:`View.Representation.Attributes.Attribute.Editor.EditMask.Number.thousandsSeparatorEnabled` - Да .. tab-item:: Пример .. code-block:: json { "type": "NUMBER", "min": 0, "max": 0, "scale": 0, "thousandsSeparatorEnabled": false, } --- JSON-эквивалент :xsd:class:`View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic`: .. tab-set:: .. tab-item:: JSON-Объект .. list-table:: :header-rows: 1 * - Ключ - Значение - Может быть не указано или указано как ``null`` * - ``type`` - ``Значение: DYNAMIC`` - Нет * - ``optionsList`` - ``Тип: JSON-массив``. Массив может содержать следующие JSON-эквиваленты: View.Representation.Attributes.Attribute.Editor.EditMask.Pattern, View.Representation.Attributes.Attribute.Editor.EditMask.Number, View.Representation.Attributes.Attribute.Editor.EditMask.Regular, View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic - Нет .. tab-item:: Пример .. code-block:: json { "key": "DYNAMIC", "optionsList": [ // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Pattern // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Number // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Regular // См. JSON-эквивалент View.Representation.Attributes.Attribute.Editor.EditMask.Dynamic ] } Примеры масок ввода в JSON формате ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Чтобы лучше разобраться в структуре масок ввода в формате JSON, ниже приведены несколько примеров таких масок. Для удобства указаны все опциональные свойства. .. dropdown:: Номер телефона, который начинается с "+7" или "8" .. code-block:: json { "options": { "eagerEnabled": false, "blocks": { "a": { "optionsList": [ { "eagerEnabled": false, "blocks": {}, "placeholderChar": "*", "type": "pattern", "items": [ { "type": "literal", "value": "+" }, { "optionalEnabled": false, "name": "a", "type": "definition" } ], "definitions": { "a": { "flags": "", "value": "^7$" } }, "lazyEnabled": false, "textTransform": "default" }, { "eagerEnabled": false, "blocks": {}, "placeholderChar": "*", "type": "pattern", "items": [ { "optionalEnabled": false, "name": "a", "type": "definition" } ], "definitions": { "a": { "flags": "", "value": "^8$" } }, "lazyEnabled": false, "textTransform": "default" } ], "type": "dynamic" } }, "placeholderChar": "*", "type": "pattern", "items": [ { "optionalEnabled": false, "name": "a", "type": "block" }, { "type": "literal", "value": " " }, { "type": "literal", "value": "(" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "type": "literal", "value": ")" }, { "type": "literal", "value": " " }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "type": "literal", "value": "-" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "type": "literal", "value": "-" }, { "optionalEnabled": false, "name": "0", "type": "definition" }, { "optionalEnabled": false, "name": "0", "type": "definition" } ], "definitions": {}, "lazyEnabled": false, "textTransform": "default" }, "saveWithLiteralsEnabled": false } .. dropdown:: IPv4-адрес .. code-block:: json { "options": { "eagerEnabled": false, "blocks": { "a": { "min": 0, "max": 255, "scale": 0, "type": "number", "thousandsSeparatorEnabled": false } }, "placeholderChar": "*", "type": "pattern", "items": [ { "optionalEnabled": false, "name": "a", "type": "block" }, { "type": "literal", "value": "." }, { "optionalEnabled": false, "name": "a", "type": "block" }, { "type": "literal", "value": "." }, { "optionalEnabled": false, "name": "a", "type": "block" }, { "type": "literal", "value": "." }, { "optionalEnabled": false, "name": "a", "type": "block" } ], "definitions": {}, "lazyEnabled": false, "textTransform": "default" }, "saveWithLiteralsEnabled": false } .. dropdown:: Любое кол-во цифр, либо ничего .. code-block:: json { "options": { "type": "regular", "value": { "flags": "", "value": "^[0-9]{0,}$" }, "textTransform": "default" }, "saveWithLiteralsEnabled": true }