Введение
Элемент интерфейса типа 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>