====== Описание формата ====== ==== 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" : "
tree-header
tree-footer
" } { "name" : "Папка 1 дерева 1", "description" : "{{@include tree-header}}
dir-header
name = {{name}}
dir-footer
{{@include tree-footer}}" } { "name" : "Слой 1 папки 1 дерева 1", "description" : "{{@include dir-footer}} name = {{name}} {{@include tree-header}}" } { "name" : "Слой 2 папки 1 дерева 1", "description" : "{{@include dir-header}} text {{@include tree-footer}}\n{{@include dir-footer}}" } { "type" : "Папка 2 дерева 1", "description" : "" } { "type" : "Слой 1 папки 2 дерева 1", "description" : "" } **Полученное описание для слоев** { "name" : "Слой 1 папки 1 дерева 1", "description" : "
dir-footer
name = {{name}}
tree-header
" } { "name" : "Слой 2 папки 1 дерева 1", "description" : "
dir-header
text
tree-footer
\n
dir-footer
" } { "type" : "Слой 1 папки 2 дерева 1", "description" : "
tree-header
tree-footer
" }
**Описание** { "name" : "Дерево 2", "description" : "

this h1

this h2

this h3

this div1
this div2
" } { "name" : "Слой 1 дерева 2", "description" : "{{@include h1t}}\n\n{{@include h2t}}\n\n{{@include h3t}}\n\n{{@include div1}}\n\n{{@include div2}}", } **Полученное описание для слоя** { "type" : "Слой 1 дерева 2", "description" : "

this h1

this h2

this h3

\n\n

this h2

this h3

\n\n

this h3

\n\n
this div1
this div2
\n\n
this div2
" }
**Пример не правильного наследования:** **Описание** { "name" : "Дерево 3", "description" : "
tree-header
" } { "name" : "Папка 1 дерева 3", "description" : "
dir-footer
" } { "name" : "Слой 1 папки 1 дерева 3", "description" : "{{@include dir-footer}} name = {{name}} {{@include tree-header}}" } **Полученное описание** { "type" : "layerEntity" "description" : "
dir-footer
name = {{name}} " }
В данном варианте тэг tree-header не унаследуется так как его нет в папке. ==== Отображение изображения в слое ==== **Изображение в атрибуте img** {{#media}} {{/media}} **Медиа и изображение** {{#media}} {{/media}} ==== Отображение документа в слое ==== {{#document}} Скачать документ {{/document}} ==== Для массива ссылок (Например imagesLinks) ==== {{#imagesLinks}} {{/imagesLinks}}