.. _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
}