ВведениеLink to Введение


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

Элемент metadataLink to Элемент metadata


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

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

Атрибуты metadataLink to Атрибуты metadata

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

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

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

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

Элемент coldataLink to Элемент 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>

Элемент colLink to Элемент col


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

Пример из orion:

Атрибуты элемента colLink to Атрибуты элемента 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

ЛокализацияLink to Локализация

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

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

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


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

Тип данных data (@type=data или @type=msg)Link to Тип данных 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)Link to Тип данных 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 Link to  Тип данных toggle

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

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

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

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

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

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

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

Пример из orion:

propLink to prop

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

xpropLink to xprop

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

Атрибуты элемента prop/xpropLink to Атрибуты элемента 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.

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

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

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

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

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

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

Пример из orion:

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


Наличии у колонки атрибута @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 в ответе на редактирование).

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


При наличии у элемента 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 — колонка по которой кликнули

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


При налчии большого количество элементов в списке, список разбивается на страницы. Определить количество страниц можно по количеству элементов 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 или заданное пользователем.

ЛокализацияLink to Локализация

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

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


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

Пример из orion:

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

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

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

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

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

Пример из orion:

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

ЛокализацияLink to Локализация

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

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

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


Если элемент 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>

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


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

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

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

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

Иконки в orion:

ЛокализацияLink to Локализация

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

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

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


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

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

ФильтрLink to Фильтр


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

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

Пример из orion:

XML:

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

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

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


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

Пример:

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

БаннерыLink to Баннеры


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

Предполагается, что тип баннера (атрибут @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>

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

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

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

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

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

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

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

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

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

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

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

При выполнении групповой операции может произойти ошибка, и в 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>

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

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

Элемент toolbarLink to Элемент 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>

Элемент toolgrpLink to Элемент toolgrp


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

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

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

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

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


Атрибуты элемента toolbtnLink to Атрибуты элемента 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 кнопка должна находиться вне тулбара обособленно.

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

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

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

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

Типы кнопокLink to Типы кнопок

newLink to new

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

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

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

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

backLink to back

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

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

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

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

editLink to edit

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

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

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

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

actionLink to action

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

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

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

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

editnoselLink to editnosel

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

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

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

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

editlistLink to editlist

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

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

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

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

groupLink to group

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

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

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

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

groupdownloadLink to groupdownload

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

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

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

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

groupformLink to groupform

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

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

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

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

groupformnoselLink to groupformnosel

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

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

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

listLink to list

Список

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

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

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

refreshLink to refresh

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

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

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

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

windownoselLink to windownosel

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

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

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

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

windowLink to window

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

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

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

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

groupwindowLink to groupwindow

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

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

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

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

urlLink to url

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

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

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

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

previewLink to preview

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

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

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

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

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

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

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

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

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

ЛокализацияLink to Локализация

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

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

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

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

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

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

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

Элемент contextmenuLink to Элемент contextmenu


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

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

ДиаграммыLink to Диаграммы


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

Пример xml:

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