Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.
Form based interface
Разделение сущностей
Как показал опыт эксплуатации alterator, главная проблема, с которой сталкивается пользователь этой системы — создание динамического интерфейса. Бакенд пишется мгновенно, а как только требуется изобразить что-то на экране — возникает полное непонимание того, как:
нарисовать виджет
разместить виджеты на форме
добавить различные реакции на нажатие кнопок, смену текущего элемента и т. д.
Проект FBI (сокращение от Form Based Interface) призван решить эту проблему. Типичный модуль конфигуратора делится на следующие составляющие:
шаблон формы — HTML-файл, содержащий заготовку для формы;
дизайн — таблицы стилей CSS, изображения;
бакенд — скрипт или программа на любом известном разработчику языке программирования;
заполнение формы (workflow) — указания того, как должно осуществляться заполнение шаблона и при каких условиях будет происходить переход между формами;
визуальные эффекты — активация/деактивация, скрытие части формы, изменение содержимого «на лету» в зависимости от состояния виджетов. Для web-интерфейса эту часть работы осуществляют библиотеки функций на JavaScript, выполняемые на стороне браузера.
Дизайн
Eдиный стиль и оформление рисует дизайнер, очень редко требуется сделать незначительные поправки для конкретного модуля. В репозитории пакетов можно найти несколько готовых дизайнов под разные дистрибутивы.
Workflow
Большинство диалогов имеют одну и ту же логику заполнения шаблона; часть особенных случаев решается заданием дополнительных параметров. Вместе с FBI поставляется набор самых распространённых workflow, таких как: form (форма) и card-index (картотека).
Визуальные эффекты
Эффекты также повторяются от формы к форме. Налицо повторное использование компонент. Большую часть работы (за исключением написания бакенда) для автора модуля уже сделали другие разработчики. Вместе с FBI поставляется набор самых распространённых визуальных эффектов. Например, возможно добавить возможности AJAX при работе с card-index и тем самым сильно приблизить поведение web-приложения к традиционному GUI.
Первый модуль
Сделаем простейший модуль, который будет считывать и записывать два параметра в некоторый конфигурационный файл.
Рабочий каталог
Все модули alterator имеют единую внутреннюю структуру. В принципе никто не запрещает вольностей, но при использовании стандартной раскладки можно воспользоваться удобными функциями отладки модуля и готовыми правилами для make.
В нашем примере используются следующие каталоги:
backend3 — внешние бакенды alterator;
backend2 — внутренние бакенды alterator;
design — всё, что относится к дизайну;
templates — шаблоны форм.
Бакенд
Пользуясь любимым языком программирования системных администраторов shell, пишем бакенд, который занимается важным делом — управлением конфигурационным файлом от приложения foo.
Сохраняем файл бакенда как backend3/foo и, находясь в рабочем каталоге, убеждаемся, что бакенд работает:
Шаблон
Теперь давайте нарисуем шаблон формы. Если мы планируем из браузера обращаться к шаблону по адресу /foo, то сохраняем файл шаблона как templates/foo/index.html. Шаблон будет состоять всёго лишь из двух текстовых полей и меток к ним.
Обратите внимание на параметр wf в теге html — там указано, что заполнением формы будет заниматься стандартный workflow form.
Браузер
Первым делом запускаем сервис configd специальным образом, чтобы он обнаружил файлы из нашего рабочего каталога — находясь в этом каталоге, выполняем команду /usr/sbin/configd -l. Теперь отправляемся браузером к web-интерфейсу по адресу /foo (https://localhost:8080/foo) и обнаруживаем, что только что сделанный модуль успешно функционирует.