====== Описание формата ======
==== Navigation ====
* [[ru:first|Главная]]
* [[ru:airlay|Информация о системе]]
==== Описание ====
В основе формата описания лежит шаблонизатор [[https://mustache.github.io/mustache.5.html]]. В описание можно добавлять:
* HTML разметку.
* Значение атрибутов объекта слоя.
* Вызов встроенных функций.
* Возможность копирования текстового содержимого HTML элементов в буфер обмена.
* Конвертацию **unixtime** времени.
==== Добавление значений атрибутов объекта слоя ====
За добавление значений атрибутов объекта слоя отвечает шаблонизатор Mustache. Справочную информацию по синтаксису Mustache можно найти [[http://websketches.ru/plugins/mustache|здесь]].
Также можно использовать операторы сравнения (=,!=,>,<), по следующему принципу:
{{!#obj.field="value"}}...{{/obj.field}}
**Пример атрибутов объекта слоя:**
{
"color": "Красный",
"workers": [
{"name": "Василий", "age": 20},
{"name": "Пётр", "age": 23},
{"name": "Мария", "age": 25}
],
"count": 25
}
**Пример описания:**
Цвет: {{color}}
{{#workers}}
Имя: {{name}}
Возраст: {{age}}
{{/workers}}
{{#count}}
Количество: {{count}}
{{/count}}
{{#flag}}
Этот текст никогда не будет выведен, так как атрибута flag нет.
{{/flag}}
{{!#color="Красный"}}
тут будет показа {{color}}
{{/color}}
{{!#color="синий"}}
это текст не будет показан так как color != Красный
{{/color}}
**Итоговое описание объекта:**
Цвет: Красный
Имя: Василий
Возраст: 20
Имя: Пётр
Возраст: 23
Имя: Мария
Возраст: 25
Количество: 25
==== Вызов встроенных функций ====
Для вызова встроенных функций необходимо добавить к HTML элементу атрибут **data-createFunctionCall**. Значение атрибута - это список имён функций, которые будут вызваны при клике на HTML элемент и/или **json** объекты в формате:
{
"name": "Имя функции",
"agruments": ["первый аргумент", 1, "третий аргумент", false]
}
Доступные функции:
* **addToPreparedData** - добавить элемент в список "Подготовленные данные".
* **loadTrack** - функция получения трека, для мобильных объектов имеющих deviceId.
* **hideTrack** - функция скрытия трека.
* **runSearchInRadius** - функция показа информации об объекте слоя в SideBar. HTML тег, с вызовом этой функции, автоматически удаляется, если в настройках портала включен SideBar.
* **setCategory** - функция изменения категории объекта.
* **editProperties** - редактировать свойства объекта.
* **createObject** - создать объект в другом наборе данных, аргументы:
- Идентификатор набора данных, в котором нужно создать объект.
- Идентификатор категории, которую нужно присвоить объекту (необязательный аргумент).
* **MrskModule::getSap** - функция перехода в SAP (при подключённом плагине SAP-connector), аргументы:
- Идентификатор объекта (необязательный аргумент, по умолчанию берется значение уникального поля объекта).
- Имя системы (необязательный аргумент).
- Команда (необязательный аргумент).
* **enableLineRunner** - функция открытия инструмента "расстояние на линии" (для объектов типа "Линия").
* **createNewMilestone** - функция создания мероприятия (объект с которого производился вызов, будет добавлен в список объектов Мероприятия), аргументы:
- Идентификатор шаблона мероприятия.
* **PluginBinderModule::showPluginBinder** - функция открытия плагина связывания.
* **OporyRelationPickerModule::showOporyPicker** - функция открытия плагина редактора пролётов.
* **sendUrlRequest** - функция для отправки объекта по указанному url (параметр url должен содержаться в передаваемом объекте). Также может быть добавлено поле `filter` в котором может быть передан фильтр.
* **createReport** - функция для получения(скачивания) отчета. В случае успеха отчет будет добавлен в очередь скачивания. Требуется ид отчета, второй опциональный параметр true/false(делать/не делать скриншот), третий опциональный параметр это формат (blob, image, base64).
**Пример описания:**
==== Функция отправки сообщения с карты====
* **sendMessages** - функция отправки push сообщения из окна с описанием.
Для этой функции помимо кнопки необходимо добавить пустой textarea.
**Пример описания:**
==== Копирование текстового содержимого HTML элемента====
Для копирования текстового содержимого HTML элемента в буфер обмена необходимо добавить к элементу атрибут **data-canBeCopied**. При клике на данный элемент его текстовое содержимое будет скопировано в буфер обмена.
**Пример описания:**
Копируемое значение атрибута: {{attribute}}
==== Конвертация unixtime времени ====
Если текстовое содержимое HTML элемента это время в формате [[https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F|unixtime]], то его можно преобразовать в удобочитаемый вид. Для этого необходимо добавить к HTML элементу атрибут **data-convertUnixTime**. Значение атрибута - это формат вывода времени. Форматирование времени осуществляется с помощью библиотеки [[https://momentjs.com/|momentjs]] описание форматов можно найти [[https://momentjs.com/docs/#/displaying/format/|здесь]].
**Пример атрибутов объекта:**
{
"time": "1325412001"
}
**Пример описания:**
Формат №1: {{time}}
Формат №2: {{time}}
Формат №3: {{time}}
Unixtime: {{time}}
**Итоговое описание объекта:**
Формат №1: 01-01-2012 18:00:01
Формат №2: 1-1-2012 18:0:1
Формат №3: 1-янв.-2012 18:00:01
Unixtime: 1325412001
==== Округление чисел ====
Если содержимое HTML элемента это число или строка, содержащая только число, то его можно округлить. Для этого необходимо добавить к HTML элементу атрибут **data-roundingNumber**. Значение атрибута - это стратегия округления:
* **math** - округление по математическим правилам (по умолчанию).
* **up** - округление вверх.
* **down** - округление вниз.
**Пример атрибутов объекта:**
{
"value": 0.616
}
**Пример описания:**
Формат №1: {{value}}
Формат №2: {{value}}
Формат №3: {{value}}
Формат №4: {{value}}
Формат №5: {{value}}
Значение: {{value}}
**Итоговое описание объекта:**
Формат №1: 1
Формат №2: 1
Формат №3: 1
Формат №4: 0
Формат №5: 0.61
Значение: 0.6
==== Фильтрация описания по правам доступа ====
Если требуется показывать часть описания только пользователям с определенными правами доступа к набору данных, то необходимо воспользоваться атрибутом **data-showOnlyByAccess**. Значение атрибута - маска доступа пользователя к набору данных (целое число от 0 до 7).
В маске:
* Первый бит - чтение.
* Второй бит - запись.
* Третий бит - изменение категории.
**Пример описания:**
Этот текст увидят пользователи с правами на чтениеЭтот текст увидят пользователи с правами на записьЭтот текст увидят пользователи с правами на чтение и записьЭтот текст увидят пользователи с правами на изменение категории
==== Вставка иконки слоя в описание ====
Для того, чтобы вставить в описание иконку слоя необходимо воспользоваться тегом **description-layer-icon**. По умолчанию иконка будет не больше 24 пикселей по высоте и ширине, если необходимо изменить это ограничение, то задайте встроенные css стиль с опциями **height** и **width** у тэга **description-layer-icon** на требуемые.
P.S. Тег **layer-icon** отображается как **inline-block**.
**Пример описания:**
Стандартная иконка
Маленькая иконка
Большая иконка
Имя пользователя: {{userInfo.name}}
Номер телефона: {{userInfo.number}}
==== Вставка координат точечного объекта в описание ====
Для того, чтобы вставить в описание координаты точечного объекта необходимо воспользоваться тегом **point-lng-lat**.
**Пример описания:**
Координаты объекта:
==== Наследование описания (доступно в версии 1.90 и выше) ====
Для того что бы унаследовать описание слоя от вышестоящего элемента дерева (папки/дерева) необходимо:
1. Оставить описание слоя пустым (Слой полностью унаследует описание вышестоящего элемента)
2. Использовать тэг {{@include name}}(на место тэга будет вставлен родительский тэг с заданным именем)
**Примеры наследования:**
**Описание**
{
"name" : "Дерево 1"
"description" : "