Comments (21)
Кастую команду разработчиков в этот тред и прошу проголосовать.
from ajenti.
Голосую против, потому что такой подход
а) потребует от разработчтика плагина целиком верстать свой UI
б) на корню убивает консистентность дизайна UI между плагинами
from ajenti.
Я сейчас делаю упрощенную шаблонизацию на UI "как есть" (см ветку newui)
Так вроде и шаблоны есть, и переверстывать не надо
from ajenti.
Ничего не убивает, я сейчас переписываю текущий UI с использованием валидного XML (зачем изобретать методы get_HTML() когда все было придумано до нас в XML)
Просто использовать шаблоны нужно с умом, т.е. некоторые задачи вынести в шаблоны - например верстку страницы, будет удобнее и дизайнерам и программистам, а некоторые (типа создания UI элементов) оставить на текущем модуле
Таким образом должны остаться сплошные удобства :)
Единственное что - мне по душе больше Genshi - как полностью XML-валидный шаблонизатор
from ajenti.
потребует от разработчика плагина целиком верстать свой UI
то как это сейчас сделано, требует от разработчика еще больше усилий чем просто сверстать панель плагина самому.
на корню убивает консистентность дизайна UI между плагинами
не убьет если предоставить автору плагина готовые теги шаблона.
XML-валидный шаблонизатор
зачем XML о.О? есть прекрасные python style шаблонизаторы Mako, Jinja2
from ajenti.
зачем XML о.О? есть прекрасные python style шаблонизаторы Mako, Jinja2
Я неправильно выразился - Genshi тоже python style, можно использовать питон как и в любом другом темплейтере. Его преимущество в том, что он не определяет новую разметку темплейтов (Мако использует % для своих тегов, а Jinja2 фигурные скобки), а использует свойства XML, что просто более читабельно для человека который просто будет редактировать шаблон.
Ну и одно из преимуществ с чем я столкнулся - так как там используется разметка внутри тегов HTML (XML), это не ломает подсветку редакторов HTML чем облегчает работу дизайнерам
то как это сейчас сделано, требует от разработчика еще больше усилий чем просто сверстать панель плагина самому.
Просто текущая реализация далека от юзабилити, хотя идея отличная
ИМХО конструктор UI идея гут и должна жить, темплейтер тоже имеет право на жизнь - текущая реалиазация dump_base_page или MainWindow просто просит темплейтера. В идеале темплейтер и UI конструктор должны быть тесно связаны. Например возможность загрузить темплейт в контрол (например сложный какой-то для редактирования кучи всего) или включить контрол в темплейт простым тегом
from ajenti.
DmZ,
Возможно есть смысл сделать XML-based генератор UI (см. Glade)
Дабы не рожать тонны кода для построения интерфейса
from ajenti.
ЗЫ. немного кода из Mako и Genshi:
Mako:
% for name in row
${name}
% endfor
Genshi:
${name}
ИМХО последнее красивее :) Хотя с Мако не работал, может и там можно лаконично написать
from ajenti.
Возможно есть смысл сделать XML-based генератор UI (см. Glade)
Дабы не рожать тонны кода для построения интерфейса
Glade всего лишь инструмент, при загрузке интерфейса все равно вызывается тонна кода, которая правда спрятана от девелопера.
Да, это именно тот подход, о котором я говорю (наверно :)), когда есть некий шаблон index.html где прописан шаблон, а туда можно добавить что-нить типа
И этот же код (или взаимопреобразуемый) получать от ajenti.ui.Table, с возможностью сказать loadtemplate('index.html').getElementsByTag('body').appendChild(Table)
Тогда будет и единый UI и все прелести темплейтера
ЗЫ. с любым темплейтером можно сделать <% ui.Table(someparams) %> и теор. получить консистентный UI. А каким образом реализовать этот самый ui.Table - тонной прямого кода, тонной кода которая будет парсить файлик widgets/Table.xml и т.п...
from ajenti.
Согласен красивее :) но зато медленней (http://stackoverflow.com/questions/1324238/what-is-the-fastest-template-system-for-python). Хотя скорость в данном случае не особо важна. Отдаю свой голос за Genshi.
from ajenti.
Хорошая ссылочка :) правда нам 10х1000 таблиц не нужно (хотя кто знает)
В закладки, нужно поизучать темплейтеров :)
from ajenti.
Голосую против!
а) Не хочу писать шаблоны
б) Удобней пользоваться классами ui
в) Без этого в любой момент можно полностью переделать UI всего лишь переписав один-пару файлов
from ajenti.
б) Удобней пользоваться классами ui
Мне тоже "удобно" пользоваться ui (до полного удобства пилить и пилить)
Но если представить какой-то сложный интерфейс, то только его описание в питоне займет уйму места, и искать по этому коду, а где же тут собственно обработка данных будет проблематично.
Поэтому органичное взаимодействие шаблона и UI-классов есть ответ на такую проблему - хочешь делай классами, хочешь пиши шаблон - работать и выглядеть должно одинаково.
в) Без этого в любой момент можно полностью переделать UI всего лишь переписав один-пару файлов
В любом случае менятся будут css стили, которые ну никак на UI не завязаны :) и разница по времени изменения внешнего вида при UI и при шаблоне не существенна.
PS. Я за шаблоны если они органично впишутся в систему UI-классов
from ajenti.
Склонен к идеи использования шаблонизатора, и если понадобится при помощи его вызывать код ui. Только вопрос, неполучится ли у нас "спагетти-стайл" код если один будет юзать шаблоны, а другой ui
from ajenti.
DmZ убедил.
Если сделать возможность использовать и то и то, то...
Разумеется в таком случае надо описать типовые компоненты на том же шаблонизаторе и дать возможность создавать свои компоненты.
from ajenti.
DmZ, я не совсем это в виду имел.
Допустим, плагин имеет layout.xml:
[layout]
[panel height="400" width="400"]
[label id="lblOne" text="asda" /]
[button id="btnTwo" text="qwerty" /]
[/panel]
[/layout](парсер съел угловые скобки)
и т.п.
Платформа имеет файлы panel.html, button.html, label.html, etc. (возможно, с питоновыми вставками для правильной генерации HTML основываясь на атрибутах в Layout XML) которые парсятся шаблонизатором.
Потом на ходу берется сий layout.xml и перегоняется в HTML, используя panel.html, button.html, label.html, etc.
from ajenti.
Попробую обьяснить на примере, ИМХО это тоже, что Евгений имел ввиду.
(примеры взяты из документации Genshi)
Для того чтобы UI и темплейтер работали вместе - процессинг кода нужно переносить на что-то одно. В данном случае примем за основу темплейтер.
Genshi позволяет определять собственные XML-теги (типа label/panel, то что нам нужно).
Итак, положим есть файл widgets.xml следующего содержания:
<py:match path="greeting">
Hello ${select('@name')}
/py:match
Ну, или просто содержит инклуды на кучу подобных конструкций.
В основной темплейт или темплейт видгета мы импортим данный файл, и дальше используем в виде:
В итоге получим:
Hello Dude
Функции UI выдают на-гора соответствующие теги XML:
>>> ui.Span("Dude").toxml()
''
И в коде таким образом можно использовать конструкции вида (псевдокод):
template = initTemplate()
window = ui.MainWindow()
template.appendElements(window)
return template.render()
или вида:
template = initTemplate()
template.appendFromFile('layout.xml')
return template.render()
Таким образом обеспечится консистентность вида между темплейтером и UI-виджетами.
ЗЫ. Если лень писать xml для сложных виджетов, то можно запрограмить это в питоне и на конечном виджете вызвать toxml() и задампить вывод в файл, для последующего юзания - вариантов использования просто масса.
from ajenti.
Это божественно, я сжигаю рукописи своего UI (:
from ajenti.
Это божественно, я сжигаю рукописи своего UI (:
А сколько еще интересных идей/опыта есть ;)
ЗЫ. Попытаюсь завтра накидать пример рабочий на своих плагинах (а то сегодняшнее пиво все ушло на предыдущее описание :) )
from ajenti.
DmZ молодчина!
from ajenti.
Перенесено:
http://groups.google.com/group/ajenti-dev/browse_thread/thread/f51899f2e69725e?hl=ru
from ajenti.
Related Issues (20)
- Can't open PID file /var/run/ajenti.pid (yet?) after start-post: No such file or directory HOT 7
- [BUG] Error when Closing Handle in gipc.gipc: GIPCLocked Exception HOT 2
- Reboot does not work HOT 1
- Connecting to ajenti on Ubuntu 22.04 HOT 2
- Does this project provide commercial support? HOT 2
- “Available plugins” take a long time to load on Debian 11.7 HOT 2
- Docker images and containers are not shown in the plugin - venv incompatibility? HOT 3
- Nginx configuration HOT 4
- Error: $q is not defined HOT 2
- crash-2024-01-01-20h39.txt HOT 2
- Ntg
- cara mengatasi ini di debian 10 (how to solve this problem on debian10) HOT 2
- Ajenti not catching IP Tables root permissions error HOT 1
- Error upgrading from 2.2.7 to 2.2.9 HOT 1
- fail to install debian bookworm HOT 7
- unmet dependencies python HOT 1
- Feature request: installing and running ajenti as its own user in a venv HOT 1
- curl https://raw.githubusercontent.com/ajenti/ajenti/master/scripts/install.sh | sudo bash -s -
- Can it be (mis)used to execute custom commands? HOT 5
- ajenti crash report HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ajenti.