Документация COREmanager

Списки

Введение

Элемент интерфейса типа list представляет собой таблицу со списком элементов и кнопки операций над элементами. Колонки таблицы описаны в элементе coldata, кнопки toolbar.

Элемент metadata

Атрибуты metadata задают ключевое поле и поле с сообщением для подтверждения групповых операций.

<metadata type="list" key="mgr" keyname="name">
  ...
</metadata>

Атрибуты metadata

@key ключевое поле, значение это поля нужно передать параметром elid при операции над элементом/ми.

@keyname имя поля, которое задает сообщения для списка выбранных элементов при групповых операциях, если не указано использовать @key

@autoupdate при наличии атрибута, нужно обновить список через заданое в значении атрибута секунд @selficon необязательный атрибут, задает иконку перед заголовком списка

Примечание: Поля с ключевыми элементами могут быть не доступны для пользавателя (отсутствывать в coldata)

Элемент coldata

Элемент coldata содержит элементы col описывающие колонки таблицы.

  <coldata>
    <col name="name" type="data" sort="alpha" sorted="yes" width="23%"/>
    <col name="version" type="data" width="20%"/>
    <col name="avail_version" type="data" width="25%"/>
    <col name="state" sort="prop" width="7%">
      <xprop name="installed" value="on" img="p-on" sprite="yes"/>
      <xprop name="installed" img="p-off" sprite="yes"/> 
      <xprop name="status" value="installing" img="p-install" animated="yes"/>
      <xprop name="status" value="updating" img="p-install" animated="yes"/>
      <xprop name="status" value="deleting" img="p-install" animated="yes"/>
    </col>
    <col name="descr" type="msg" width="25%"/>
  </coldata>

Элемент col

Элемент col описывает колонку таблицы: тип данных, сортировку, ширину и т.д.

Пример из orion:

Атрибуты элемента col

@name имя колонки

@type тип данных в колонке

@view используется в связке с типом indicator, если равно bracket, то значение ячейки должно отображаться в виде 80 (10).

@sort тип сортировки

@sorted наличие атрибута указывает, что таблица отсортирована по этой колонке, в заголовке таблицы нужно показать иконку сортировки, а если сортировка по нескольким полям отобразить так же значение атрибута

@width ширина колонки по умолчанию, может быть просто числом или в процентах

@stat наличие атрибута указывает на то, что нужно показать внизу таблице(строке состояния), сумму данных по столбцу

@total сумма элементов по столбцу, для строки состояния

@wrap перенос строк в столбце

@align выравнивание текста в колонке. Может принимать значения left, right, center

@noescaping отключить экранирование html

@convert алгоритм кодирования столбца, если колонка является ключевой, то нужно к запросу операции добавить параметр tconvert со значением в атрибуте; Если convert равно money, то при подсчете итогов нужно выводить все в формате 100 000.00

@edit поле может редактироваться прямо в списке, значение содержит имя ф-ции формы которую нужно позвать

@editform значение ячейки должно быть отображено в виде ссылки на форму редактирования. Имя ф-ции задано в значение атрибута. В запрос на форму редактирования надо добавить elid строки и plid списка.

@hidden скрыть столбец. По умолчанию столбец отображаться не будет, включить его отображение можно в настройках списка.

@fastfilter по полю можно установить быстрый фильтр по списку

@nestedlist Отобразить значение ячейки колонки в виде ссылки на новый список. При клике по ссылке нужно вызвать ф-цию из атрибута, а также передать следующие параметры:

  • col_value — значение ячейки
  • elid — идентификатор строки (@key)
  • plid — идентификатор подсписка
  • +значения полей фильтра текущего списка

В колонке могут быть элементы для которых нужно игнорировать этот атрибут, эти элементы будут иметь атрибут @nestedlist="no"

@nestedlist_blank Списки будут открываться в новой вкладке панели, используется только в связке с атрибутом @nestedlist

Локализация

заголовок колонки берется из локализованных сообщений по имени колонки

подробное описание (hint) берется из локализованных сообщений, по имени колонки и префиксу 'hint_'

Типы данных колонки

Данные в колонке могут быть нескольких видов, определяются явно атрибутом @type, неявно наличием элементов prop/xprop, @sort=prop.

Тип данных data (@type=data или @type=msg)

Тип data задается атрибутом @type, со значением data и msg. Различия между ними в источниках данных, локализованные сообщения или нет, но это все обрабатывает панель, нам всегда нужно брать данные из elem.

Каждой строке таблице соответствует элемент elem, в нем содержатся значения для каждой колонки, для типа data значения берутся из элементов с названием совпадающим с названием колонки.

Элемент elem может иметь дополнительные данные:

@color — цвет строки

XML:

<doc ...>
  ...
  <elem>
    <mgrname>core</mgrname>
    <name>COREmanager</name>
    <version>5.8.0-30.07.13_14:10_IRKT</version>
    <installed>on</installed>
    <avail_version>alpha (5.7.1-24.07.13_15:36_IRKT)</avail_version>
    <descr>Ядро программного комплекса</descr>
  </elem>
  <elem>
    <mgrname>dnsmgr</mgrname>
    <name>DNSmanager</name>
    <installed>off</installed>
    <avail_version>beta (5.880.1), alpha (5.0.11-23.07.13_10:42_IRKT)</avail_version>
    <descr>Панель управления сервером DNS</descr>
  </elem>
  ...
</doc>

Тип данных indicator (@type=indicator)

Тип данных задается атрибутом @type. Из себя представляет две цифры, значение лимита и текущее значение, и полоску с длиной процентного соотношения текущего значения к лимиту. Так же может быть представлен в виде двух чисел одно из которых заключено в скобки, тогда у элемента будет атрибут @view=brackets.

Пример из orion:

Пример @view=brackets:

Значение ограничения берется из элемента, который находится в elem с именем соответствующим имени колонким c постфиксом _total, текущее значние с постфиксом _used.

XML:

<doc ...>
  ...
  <elem>
    <indicator_total>255</indicator_total>
    <indicator_used>101</indicator_used>
    ...
  </elem>
  <elem>
    <indicator_total>255</indicator_total>
    <indicator_used>82</indicator_used>
    ...
  </elem>
...
</doc>

Тип данных toggle

Тип toggle задаётся атрибутом @type со значением toggle и наличием элемента toggle в элементе col. Представляет собой переключатель строки. Используется как альтернатива toolbtn для более быстрого выполнения действия.

Атрибуты элемента toggle

@name — имя свойства

@onenable — имя функции, которую нужно вызвать при переводе переключателя в значение "включено"

@ondisable — имя функции, которую нужно вызвать при переводе переключателя в значение "выключено"

Тип данных prop (@sort=prop)

Тип данных prop (свойства) задается неявным образом при помощи @sort=prop и наличию элементов prop/xprop в элементе col. Представляет собой строку с иконками.

Пример из orion:

prop

Нужно показать иконку свойства в строке, если в elem присутствует элемент совпадающий с именем свойства.

xprop

Это расшириный prop, отображение, которого зависит от значения в элементе. Нужно показать иконку свойства, если в elem присутствует элемент совпадающий с именем свойства, а значение элемента совпадает со значением атрибута @value. Значение атрибута @value не может быть пустым. Отсутствие атрибута @value говорит, что этот xprop является дефолтным, и его нужно показать, если значение поля не совпало с @value других xprop с таким же именем(то есть по сути работает как prop, кроме случая, когда xprop с таким же именем уже показан).

Атрибуты элемента prop/xprop

@name имя свойства

@img имя иконки без расширения, по умолчанию расширение png

@animated анимированная иконка, нужно подставить расширение gif

@sort=no свойство не участвует в сортировке

@sort=invert обратная сортировка для свойства

@func задает имя функции, которую нужно позвать, при клике по свойству, используется в связке с атрибутом @type (альтернатива toolbtn для более быстрого выполнения)

@type задает тип свойства с функцией, доступные типы

  • edit — вызов формы редактирования одного выбранного элемента.
  • list — вызов функции-списка, для которого родительским элементом (plid) будет являться выбранный элемент в текущем списке.
  • group — операция с подтверждением над выбранным элементом.
  • window — вызов фукции в отдельной вкладке браузера.
  • url — открыть URL указанный в атрибуте @func в отдельной вкладке браузера.

@value только для xprop. Используеися в связке с @name, для условия показа свойства.

@cgi отправлять запрос на cgi скрипт указанный в значение атрибута. Для этого надо к имени хоста добавить адрес этого cgi скрипта. Например 127.0.0.1:1500/mancgi/download?func=getfile.

Локализация prop

подробное описание (hint) берется из локализованных сообщений по имени свойства c префиксом hint_p_, если в сообщении есть макрос _value_ нужно заменить его на значение из элемента

Локализация xprop

подробное описание (hint) при наличии локализованного сообщения с именем hint_p_<@name><@value> берется из него, иначе из hint_p<@name>, если в сообщении есть макрос _value_ нужно заменить его на значение из элемента

Смешанный тип prop + data

При наличие у col типа data, элементов prop/xprop — свойства нужно показать перед текстом. Все остальное аналогично типам data и prop/xprop.

Пример из orion:

Редактирование в списке

Наличии у колонки атрибута @edit, означает что значение ячейки можно отредактировать без открытия формы редактирования элемента.

Пример из orion:

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

Для получения формы нужно отправить запрос с параметрами:

  • func — имя функции из атрибута @edit;
  • colname — имя колонки, в которой расположена ячейка;
  • tablename — функция списка;
  • elid — идентификатор редактируемого элемента;
  • plid — идентификатор родительского списка (при наличии);
  • stylesheet — укажите значение editinlist.

В ответ придёт полная форма редактирования элемента, к которой применён шаблон editinlist.xsl. Для отображения формы используется поле, название которого совпадает с названием колонки ячейки. При редактировании значения ячейки могут использоватся только следующие элементы управления:

  • input\[type=text\]\[zoom, unlimit, date\];
  • select;
  • select\[type=radio\];
  • slider;
  • textarea.

При формировании запроса на сохранение необходимо включить все поля формы, в том числе, скрытие поля input\[type=hidden\]. В ответе могут прийти новые значения elid и elname (текстовое значение при подтверждении), если новое значение elid не совпадает со старым. В таком случае необходимо заменить elid для дальнейшего редактирования элемента.

При возникновении ошибок их надо как-то отобразить. Например, показать уведомление с текстом ошибки (элемент error в ответе на редактирование).

Сортировка колонок

При наличии у элемента col атрибута @sort, предполагает наличие сортировки колонки. Атрибут @sorted показывает направление сортировки и порядок колонки в сортировке (например: +1 — первая колонка в сортировке, отсортирована по возрастанию; -2 — вторая колонка в сортировке, отсортирована по убыванию)

Сортировка происходит на стороне сервера. Сортировка может быть по нескольким колонкам, колонки в сортировку добавляются при клике по колонке с зажатым CTRL.

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

  • p_current — текущие состояние сортировки; имя отсортированных колонок с направлением сортировки, в порядке сортировки (значение атрибута @sorted), через запятую (например: -time,+user)
  • p_col — колонка по которой кликнули; имя колонки и текущая сортировка из атрибута @sorted (например +time — колонка была отсортирована по возрастанию, -time — отсортирована по убыванию, time — не была отсортирована)

При клике без CTRL — отправляем пустой p_current, и p_col — колонка по которой кликнули

При клике с CTRL — отправляем текущие состояние сортировки p_current, и p_col — колонка по которой кликнули

Сортировка типа alpha

Сортировка по алфавиту.

Сортировка типа calpha

Регистронезависимая сортировка по алфавиту

Сортировка типа digit

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

Сортировка типа indicator

Сортировка для колонок с индикаторами. Как числовая только по текущему значению _used.

Сортировка типа ip

Сортировка ip адресов. Могут быть как ipv4, так и ipv6.

Сортировка типа prop

Сортирует prop/xprop по их наличию. То есть для каждой строки строится число вида 010101, и потом сравнивается. Если у свойства есть атрибут @sort=no, то это свойство не участвует в сортировке. Если колонка имеет смешаный тип (prop + data), то при одинаковых свойствах, так же происходит сортировка текста по алфавиту.

Сортировка типа version

Сортировка по версиям, разделенными ., _, -

Сортировка типа file

Описание уточняется...

Страничная навигация

При налчии большого количество элементов в списке, список разбивается на страницы. Определить количество страниц можно по количеству элементов page в корне XML. При количестве страниц более одной следует показать пейджер.

Пример из orion:

XML:

<doc ...>
  ...
  <p_sort>time</p_sort>
  <p_order>asc</p_order>
  <page>2013-07-17 14:17:22 — 2013-07-18 13:24:45</page>
  <page>2013-07-18 13:25:32 — 2013-07-22 13:10:12</page>
  <page>2013-07-22 13:10:36 — 2013-07-22 17:21:50</page>
  <page>2013-07-22 17:22:01 — 2013-07-24 08:57:00</page>
  <page>2013-07-24 10:44:39 — 2013-07-26 11:59:14</page>
  <page>2013-07-26 11:59:14 — 2013-07-29 17:52:42</page>
  <page>2013-07-30 10:38:36 — 2013-09-24 16:30:53</page>
  <page>2013-09-24 16:32:25 — 2013-09-24 16:54:57</page>
  ...
  <p_cnt>50</p_cnt>
  <p_num>1</p_num>
  <p_elems>352</p_elems>
</doc>

При страничной навигации предполагается наличние select со значениями из page элементов. А так же поле для ввода количества элементов на странице, дефрлтное значение передается в элементе p_cnt.

Для получения выбраной пользователем страницы, нужно к запросу списка добавить параметр p_num c номером страницы, p_sort — значение из элемента p_sort, p_order — значение из элемента p_order, p_cnt — значение из p_cnt или заданное пользователем.

Локализация

Сообщение "Показать" берется из локализованных сообщений с именем pagershow Сообщение "строк на страницы" берется из локализованных сообщений с именем pagerline

Строка состояния

Если у элемента col присутствует атрибут @total предполагается отображение статистики по этой колонке в строке состояния (может присутстыввать только у колонок с числами или индикаторами или свойствами).

Пример из orion:

Поведение строки состояния

Данные в строке состояния зависят от количество выделенных элементов таблицы. Если в списке нет выделенных элементов, то должны показыватся данные из атрибута @total. При выделение должна быть посчитана сумма выделеных элементов.

Для колонки со свойствами в строке должены быть отражены иконки с количеством.

Предполагается, что под первой колонкой показано общее количество элементов (из элемента p_elems), а при выделении строк, показано количество выделенных строк.

Если у числа есть суффикс, например ("EUR", "RUB", "USD" ...), то сумма должна считаться отдельно по этим суффиксам и выводится через ;

Пример из orion:

Если колонка имеет атрибут convert="money", то итоги надо выводить в формате 100 000.00

Локализация

Сообщение "Всего" берется из локализованных сообщений главного меню с именем msg_total

Сообщение "Выделено" берется из локализованных сообщений главного меню с именем msg_selected

Раскраска текста и фона строки

Если элемент elem имеет атрибут @color, то нужно выставить фон строки в заданный атрибутом цвет (он может быть red, green, blue, yellow, cyan).

Если элемент с данными поля имеет аттрибут @color, то нужно выставить цвет текста в заданный атрибутом цвет (он может быть red, green, blue, yellow, cyan).

Пример из orion:

XML:

<doc>
  ...
  <elem color="red">
    <line_color>red</line_color>
    <text_color_1 color="red">red</text_color_1>
    <text_color_2 color="yellow">yellow</text_color_2>
    <text_color_3 color="yellow">yellow</text_color_3>
    <text_color_4 color="blue">blue</text_color_4>
    <text_color_5 color="red">red</text_color_5>
    <text_color_6 color="green">green</text_color_6>
    <text_color_7 color="yellow">yellow</text_color_7>
  </elem>
  ...
</doc>

Настройка таблицы и экспорт в csv

У каждой таблицы есть форма настроек, где можно задать колонки, сортировку, количество элементов на страницу.

Для вызова этой формы нужно позвать ф-цию tsetting c параметрами: elid — имя ф-ции списка, plid — все параметры с которым вызвывался список.

У каждого списка помимо настроек, есть возможность экспорта в csv. Для этого нужно к параметрам запроса списка добавить out=csv

Так же есть печатная версия, для ее вызова к параметрам запроса списка надо добавить out=print

Иконки в orion:

Локализация

Подробное описание настроек таблицы(hint) берется из сообщений локализации c именем msg_tsetting

Подробное описание экспорта в csv(hint) берется из сообщений локализации c именем hint_export

Настройка ширины колонок в таблице

Предполагается, что можно регулировать ширину колонок таблицы. При регулировке ширины колонок, нужно отправить запрос панели, для сохранения ширины, заданной пользователем. Для этого нужно позвать ф-цию colwidth параметрами нужно передать имена колонок и их размер (предполагается, что размер в процентах, в них же он будет навешан на элемент col) без знака %, а так же нужен параметр elid — имя ф-ции списка.

Например: id=6&name=18&user=12&host=17&pool=11&size=10&attached=25&func=colwidth&out=xml&elid=volume

Фильтр

Во многих списках существует фильтр, с помощью, которого можно отфильтровать строки в списке. Из себя он предстваляет просто форму (в orion, она выводится на вкладке списка). Но когда он применен нужно отобразить это в таблице, а так же нужна кнопка для его снятия.

Сообщение с параметрами примененного списка передаются в элементе p_filter. Для снятия фильтра нужно позвать ф-цию фильтра (ее можно взять из @func элемента toolbtn @name=filter) c параметром drop=on и перезагрузить список.

Пример из orion:

XML:

<doc...>
  ...
  <p_filter>Логин ~ admin, Уровень доступа = Администратор</p_filter>
</doc>

Если вы хотите выводить иконки фильтра как сделано в orion нужно проверять значения формы на не пустые поля, select не равный '*' и checkbox не равный 'off'. Имена колонок в таблице и полей в формуе обычно совпадают.

Быстрый фильтр по списку

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

Пример:

Быстрый фильтр навешивается на колонку, если у колонки есть атрибут @fastfilter, или в фильтре есть селект и в списке есть соответствующая ему колонка.

Баннеры

В списках могут быть показаны баннеры. Баннеры это информационные сообщения, могут быть трех типов: ошибка, предупреждение и совет/информация. У Баннера могут быть две ссылки "скрыть" и "подробнее".

Предполагается, что тип баннера (атрибут @status) задает цвет баннера (ошибка — красный, предупреждение — желтый, совет/информация — зеленый).

Сообщение баннера передается в элементе msg.

Пример из orion:

 

<doc ...>
  ...
  <banner id="list_a_loaded" status="3">
    <msg>Список A успешно загружен</msg>
  </banner>
  <banner id="lastlogin" status="3">
    <param name="date">2013-08-01 11:07:31</param>
    <param name="ip">188.120.252.26</param>
    <msg>
      Последний раз вы заходили в панель: 2013-08-01 11:07:31, c IP-адреса: 188.120.252.26
    </msg>
  </banner>
</doc>

Атрибуты элемента banner

@status тип баннера, может принимать значения: 1 — ошибка, 2 — предупреждение, 3 — совет/информация

@nodismiss не показывать ссылку "скрыть"

@infotype определяет поведение ссылки подробнее, может принимать значения: url, help — перейти по URL, func — открыть список, formfunc — открыть форму

@id идентификатор баннера, нужен для ф-ции dismiss

@infoelid дополнительный идентификатор для ф-ции dismiss и ссылки "подробнее"

@info передает имя ф-ции или ссылку для "подробнее"

Поведение баннеров

Ссылка "скрыть", скрывает баннер, а также отправляет запрос панели, о том что пользователь скрыл баннер, его можно больше не показывать. Нужно позвать ф-цию dismiss с параметом id из атрибута @id, и если есть атрибут @infoelid, его значение нужно передать в парметре elid.

Ссылка "подробнее" может открывать список, форму или URL. Если @infotype равен url или help, нужно открыть URL из значения атрибута @info. Если @infotype равен func или formfunc, нужно открыть список или форму. Имя ф-ции будет передано в атрибуте @info, а если задан атрибут @infoelid, то его нужно передать параметром elid.

Баннер с ошибкой при групповой операции

При выполнении групповой операции может произойти ошибка, и в XML c ответом будет баннер и возможно элементы warning, с элементами вызвавшими ошибку.

Нужно отобразить баннер в списке, выделить элементы из warning (elid элемента задает атрибут @elid), отобразить иконку с ошибкой и подробным сообщением (берется из элемента msg).

Пример из orion:

XML:

<doc ...>
  <warning elid="primary">
    <error type="constraint_delete" object="iptype" lang="ru">
      <param name="object" type="msg">iptype</param>
      <param name="value">id='1'</param>
      <param name="group_id">primary</param>
      <stack>
        <action level="29" user="admin">iptype.delete</action>
      </stack>
      <detail>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</detail>
      <msg>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</msg>
    </error>
  </warning>
  <warning elid="ds">
    <error type="constraint_delete" object="iptype" lang="ru">
      <param name="object" type="msg">iptype</param>
      <param name="value">id='3'</param>
      <param name="group_id">ds</param>
      <stack>
        <action level="29" user="admin">iptype.delete</action>
      </stack>
      <detail>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</detail>
      <msg>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</msg>
    </error>
  </warning>
  <warning elid="dns">
    <error type="constraint_delete" object="iptype" lang="ru">
      <param name="object" type="msg">iptype</param>
      <param name="value">id='4'</param>
      <param name="group_id">dns</param>
      <stack>
        <action level="29" user="admin">iptype.delete</action>
      </stack>
      <detail>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</detail>
      <msg>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</msg>
    </error>
  </warning>
  <warning elid="alias">
    <error type="constraint_delete" object="iptype" lang="ru">
      <param name="object" type="msg">iptype</param>
      <param name="value">id='2'</param>
      <param name="group_id">alias</param>
      <stack>
        <action level="29" user="admin">iptype.delete</action>
      </stack>
      <detail>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</detail>
      <msg>Имеются IP-адреса данного типа. Сначала нужно их освободить либо сменить им тип</msg>
    </error>
  </warning>
  <banner id="groupfail_delete" status="1">
    <param name="count">4</param>
    <msg>Не удалось удалить 4 элемент(-а,-ов). Для получения подробностей наведите курсор на значок ошибки в строке таблицы.</msg>
  </banner>
  <ok/>
  ...
</doc>

Баннер с формы

В ответе на отправку формы может быть баннер, его нужно отобразить в дочернем списке

Элемент toolbar

Элемент toolbar содержит в себе элементы toolgrp (группы кнопок), которые содержат в себе элементы toolbtn описывающие кнопки операций на элементе.

Toolbar в orion:

XML:

<metadata type="list">
  <toolbar>
    <toolgrp name="one">
      <toolbtn type="new" name="new" func="spec.list_a.edit" img="t-new" sprite="yes"/>
      <toolbtn type="edit" name="edit" func="spec.list_a.edit" img="t-edit" sprite="yes"/>
      <toolbtn type="groupform" name="groupedit" func="spec.list_a.groupedit" img="t-project" sprite="yes"/>
      <toolbtn type="group" name="delete" func="spec.list_a.delete" img="t-delete" sprite="yes"/>
    </toolgrp>
    <toolgrp name="two">
      <toolbtn type="editlist" name="sublist" func="spec.sublist_a" img="t-editlist" sprite="yes"/>
      <toolbtn type="window" name="window" func="void" img="t-invoice" sprite="yes"/>
      <toolbtn type="list" name="list" func="spec.list_refresh" img="t-liststart" sprite="yes"/>
      <toolbtn type="new" name="void" func="void" img="t-mime" default="yes" sprite="yes"/>
      <toolbtn type="refresh" name="refresh" func="spec.list_a" img="t-retry" sprite="yes"/>
      <toolbtn type="new" name="admin" func="admin" img="t-users" sprite="yes"/>
    </toolgrp>
    <toolgrp name="tree">
      <toolbtn type="group" name="setnull" func="spec.list_a.setnull" img="t-discount" sprite="yes">
        <hide name="text" value="hello"/>
        <hide name="admintext" value="hallo"/>
      </toolbtn>
      <toolbtn type="group" name="randomize" func="spec.list_a.randomize" img="t-iplist" sprite="yes">
        <show name="admintext" value="hallo""/>
      </toolbtn>
      <toolbtn type="new" name="filter" func="spec.list_a.filter" img="t-filter" sprite="yes"/>
    </toolgrp>
  </toolbar>
</metadata>

Элемент toolgrp

Содержит в себе кнопки объеденные какой-то логикой. В случае если кнопки не влезают в допустимую для них область, они должны сворачиваться в группы.

Атрибуты элемента toolgrp

@name имя используется для локализации

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

@collapsed группа кнопок в схлопнутом состоянии, кнопки должны появляться при наведении или нажатии. Группа выглядит как кнопка, иконка берётся из атрибута img. Пример:


Атрибуты элемента toolbtn

@name имя кнопки

@func имя функции, которую нужно позвать при нажатии

@type задает тип кнопки

@img содержит имя иконки без расширения

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

@sprite наличие атрибута, говорит о том, что иконка кнопки находится в спрайте

@progressbar показать прогрессбар, при значение notime не вычислять время, подробнее см. прогресс

@cgi отправлять запрос на cgi скрипт указанный в значение атрибута. Для этого надо к имени хоста добавить адрес этого cgi скрипта. Например 127.0.0.1:1500/mancgi/download?func=getfile.

@sametab показать модуль в той же вкладке панели (не открывать как дочернюю)

@newtab показать модуль в новой вкладке панели (не открывать как дочернюю)

@warning только для групповой операции, конфирм сообщение будет выделено красным цветом, слева будет иконка с восклицательным знаком

@detached кнопка должна находиться вне тулбара обособленно.

Общее описание поведения кнопок

Кнопки имеют два состояния: активна не активна. Состояние задается типом кнопки и условиями hide/show. Так же кнопка может быть скрыта, по условию remove.

По нажатию кнопки, открывается либо список, либо форма, либо URL, либо окно подтверждения операции.

Окно подтверждения групповой операции в orion:

Типы кнопок

new

Создание нового элемента

Активна : всегда

Действия : открывает форму создания нового элемента

Параметры : не требуются

back

Возвращение в родительский список

Активна : всегда

Действия : открывает список

Параметры : если есть*plid*

edit

Редактирование элемента

Активна : при выборе одного элемента

Действия : открывает форму редактирования

Параметры : elid выбранного элемента, если есть plid

action

Действие без подтверждения

Активна : при выборе одного элемента

Действия : вызывает ф-цию, перезагружает список

Параметры : elid*выбранного элемента, если есть*plid

editnosel

Редактирование элемента

Активна : при выборе ни одного или одного элемента

Действия : открывает форму редактирования

Параметры : elid выбранного элемента, если есть plid

editlist

Открытие подсписка

Активна : при выборе одного элемента

Действия : открывает список

Параметры : elid выбранного элемента, если есть plid

group

Групповая операция

Активна : при выборе одного и более элемента

Действия : показывает окно подтверждения операции, вызывает ф-цию, перезагружает список

Параметры : elid выбранных элементов через запятую, если есть plid

groupdownload

Групповое скачивание

Активна : при выборе одного и более элемента

Действия : показывает окно подтверждения операции, вызывает ф-цию, которая отдает файл

Параметры : elid выбранных элементов через запятую, если есть plid

groupform

Групповое редактирование

Активна : при выборе одного и более элемента

Действия : открывает форму редактирования выбранных элементов

Параметры : elid выбранных элементов через запятую, если есть plid

groupformnosel

Активна : всегда

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

Параметры : elid выбранных элементов через запятую, если есть plid

list

Список

Активна : всегда

Действия : открывает список

Параметры : не требуются

refresh

Обновить список

Активна : всегда

Действия : вызывает ф-цию, обновляет список

Параметры : не требуются

windownosel

Функция в новом окне

Активна : всегда

Действия : вызывает ф-цию в новой вкладке браузера

Параметры : если есть plid

window

Функция в новом окне

Активна : при выборе одного элемента

Действия : вызывает ф-цию в новой вкладке браузера

Параметры : elid выбранного элемента; если есть plid

groupwindow

Функция в новом окне

Активна : при выборе одного и более элемента

Действия : вызывает ф-цию в новой вкладке браузера

Параметры : elid выбранных элементов через запятую; если есть plid

url

URL в новой вкладке

Активна : всегда

Действия : открывает URL из @func в новой вкладке браузера

Параметры : не требуются

preview

Открыть картинку по ссылке в превью

Активна : при выборе одного элемента

Действия : открывает картинку в превью

Параметры : elid выбранного элемента, если есть plid

Активация/деактивация кнопок

Помимо стандартной активации/деактивации кнопок в зависимости от их типов, есть механизм принудительной активации/деативации/скрытия кнопок, с помощью элементов hide/show/remove.

При выделении строки нужно смотреть совпадает ли значение в колонке c именем из @name со значением из @value элементов hide/show/remove.

Принудительная активация не может сделать кнопку активной, если такое поведение не предусмотрено ее типом.

В условиях hide/show/remove может быть прописана колонке не отображаемая пользователю (отсутсвует в col).

Локализация

подписи к кнопки берется из локальных сообщений по имени кнопки c префиксом 'short_'

подробное описание кнопки(hint) берется из локальных сообщений по имени кнопки c префиксом 'hint_'

подробное описание неактивной(по show/hide условиям) кнопки берется из локальных сообщений по имени кнопки c префиксом 'hint_' и суффиксом _disabled

подробное описание неактивной(по количеству выбранных строк) кнопки берется из локальных сообщений по имени кнопки c префиксом 'hint' и суффиксом _noselect

сообщения для окна подтверждения берется из локальных сообщений по имени кнопки c префиксом 'msg_confirm_'

сообщения для окна подтверждения большого числа элементов берется из локальных сообщений c именем msg_totalelem, макрос _s_ для замены на количество элементов

разделитель элементов для окна подтверждения берется из локального сообщения с именем msg_confirm_delimiter

Элемент contextmenu

Контекстное меню, отображается при нажатии на в строке таблицы. Функционально полностью повторяет toolbar: действуют правила hide, show, remove, отображение группами. 

Пример элемента

Диаграммы

В списке есть возможность отобразить диаграммы по данным из списка. Возможно только одна диаграмма.

Пример xml:

<metadata name="longtask" type="list" key="pidfile" mgr="core">
  ...
  <diagram name="one" type="histogram" data="id" label="name"/>
</metadata>