Как показал опыт эксплуатации 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 специальным образом, чтобы
он обнаружил файлы из нашего рабочего каталога — находясь
в этом каталоге, выполняем команду alterator -l -c configd.layout. Теперь отправляемся браузером к web-интерфейсу по адресу /foo (https://localhost:8080/foo) и обнаруживаем, что только что сделанный модуль успешно функционирует.