Олдскульные HTML-шаблоны снова в моде! htmx и другие средства борьбы с javascript fatigue / Хабр
Рендеринг веб-страниц на стороне сервера, как знают многие читатели, вышел из употребления уже лет 10 как. «Перезагрузка страниц занимает ощутимое время, при этом пользователю не показывается даже спиннер! Что об этом говорят наши UX гайдлайны?» — таким вопросом задавались IT компании, принимая решение немедленно переезжать на single-page application.
Долгие годы никто не решался идти против веяний эпохи, пока лет 5 назад затишье не нарушил популярный веб-фреймворк Phoenix для языка Elixir (курица в капле на моей картинке). Его авторы считали, что обладающая сверхспособностями Erlang VM сумеет развеять предрассудки о якобы тормознутом серверном рендеринге.
Что ж — они не ошиблись: Phoenix Live View получила популярность, и теперь является для поклонников языка Elixir свидетельством преимуществ их рантайма. Сервер с клиентом общаются исключительно по вебсокету, html генерируется на сервере, коэффициент полезной информации в передаваемом трафике близок к 100%.
Возвращение к серверным шаблонам в Python сообществе стало для некоторых неожиданностью — я, конечно, про фреймворк htmx. Я смотрел их демо на DjangoCon — у них обычный сайт на django, они даже вебсокеты используют только в крайнем случае. Сайт, при этом, отзывчивый — перезагрузок страницы не происходит. (Как это работает? А что, так можно было?)
htmx — это вообще говоря, клиентский код — npm пакет. Он расширяет набор атрибутов в html тэгах для добавления логики (так же делают многие js-фреймворки). Каждый компонент — это такая псевдо-форма (иногда — настоящая форма). При определённых событиях, она шлёт на сервер запросы и — частый случай — перезаписывает своё содержимое на то, что пришло в ответе с сервера.
Вот пример простого компонента:
<div hx-target="this" hx-swap="outerHTML"> <div><label>First Name</label>: Joe</div> <div><label>Last Name</label>: Blow</div> <div><label>Email</label>: joe@blow. com</div> <button hx-get="/contact/1/edit"> Click To Edit </button> </div>
Клик на кнопку заменяет поля на редактируемые, причём запрос на сервер, скорее всего, опять вернёт перезаписываемый компонент.
Почему эта магия работает? Потому что обычный reactive фреймворк делает, по сути, то же самое: при определённых событиях он вызывает логику, которая решает, изменится ли его состояние. Эта логика чаще всего предполагает запрос на сервер. А в htmx запрос на сервер делается всегда (и урл этого запроса явно прописан в соответствующем атрибуте).
<button hx-delete="/account">Соцсети не для меня</button>
В клиент-ориентированном фреймворке onclick был бы функцией, но без запроса на сервер всё равно бы не обошлось. А если нет разницы, зачем платить больше?
Ещё один пример: пусть у нас есть большая страничка, которую мы рендерим по серверному шаблону. Пусть она состоит из 5 визуальных компонентов. В результате действий пользователя, 2 компонента «сообразили», что информация в них больше не актуальна, и им нужен апдейт.
Несмотря на простоту концепта, кроме htmx — такое впечатление, что никто до этого не додумался. (UPDATE: есть ещё Hotwire, который построен на похожих принципах)
В общем, если Вы сомневаетесь, использовать ли для django-админки SPA или серверные шаблоны — то не сомневайтесь и берите htmx. Если Вы адепт full-stack разработки на Python — тоже. Разделение труда — единственный весомый контраргумент для меня: серверные разработчики обычно не очень разбираются в вёрстке, вне зависимости от используемого языка.
А теперь — о самом интересном аспекте (на мой взгляд). Интересующиеся мобильной разработкой или читающие блог Яндекса, наверно, видели анонс о выходе в опен-сорс фреймворка divkit.
divkit — это что-то вроде такого универсального html (точнее, json), который он (divkit) умеет отображать на Android, iOS и на вебе. Таким образом, клиентский код сводится к минимуму, а задача сервера — как раз, формировать этот самый json. Получается, в Яндексе тоже используют рендеринг на сервере — для мобилок! (замахнулись на их нативную природу, не иначе)
Так вот, лично я считаю, что для мобилок серверный рендеринг ещё нужнее . Потому что у нас есть две разные платформы, как минимум — сами знаете, какие. Языки для разработки приложений у них — разные, графические библиотеки — тоже, причём, в случае Apple — закрытые. Какое в Яндексе нашли этому решение — писать максимум логики на стороне сервера, логично же?
В связи с этим, есть все причины думать, что серверный рендеринг будет развиваться и дальше, а дивному киту хочется отдельно пожелать успехов и завоевания мира.
Создание шаблона в формате HTML
Перейти к основному содержанию
- Главная
- Tekla Structures
- Manage Tekla Structures
- Templates
- Создание шаблона в формате HTML
Tekla Structures
2022
Tekla Structures
Шаблоны в формате HTML предоставляют больше возможностей в плане компоновки, использования шрифтов и изображений. Шаблоны, формирующие выходные данные в формате HTML, являются графическими; их файлы имеют расширение *.html.rpt.
- В меню Файл выберите Редакторы > Редактор шаблонов.
- В редакторе шаблонов выберите Файл > Создать.
- Выберите Графический шаблон и нажмите ОК.
- Добавьте в шаблон новые строки.
- Выберите Вставить > Компонент > Строка, чтобы добавить новую строку.
- Выберите тип содержимого строки и нажмите ОК.
- Повторите шаги a–b для каждой новой строки.
- Для получения нужных данных из базы данных Tekla Structures добавьте в строки поля значений.
- Выберите Вставить > Поле значения.
- Щелкните точку, чтобы определить положение поля в строке.
Появится диалоговое окно Выбрать атрибут для выбора атрибута для поля значения.
- Выберите атрибут и нажмите ОК.
- Повторите шаги a–c для каждого поля значения.
- Добавьте верхний колонтитул для каждого поля значения.
- Выберите Вставить > Компонент > Верхний колонтитул…
- Выберите Вставить > Текст…
- Введите заголовок для шаблона и нажмите кнопку ОК.
- Укажите точку для определения положения заголовка в строке верхнего колонтитула.
- Повторяйте шаги a–d, чтобы создать заголовки для полей всех значений.
- Сохраните шаблон:
- Выберите Файл > Сохранить как
- Перейдите к папке шаблонов, заданной расширенным параметром
XS_TEMPLATE_DIRECTORY
. - В поле Имя файла введите новое имя для шаблона.
Имя файла должно содержать расширение *.html.rpt. Например: Part_list.html.rpt.
- Нажмите кнопку ОК.
Прим.:
При добавлении в HTML-шаблон изображений эти изображения должны находиться в папке ..\Program Files\Tekla Structures\<version>\bin\applications\Tekla\Tools\TplEd\bitmaps; в противном случае они не отображаются в выходных HTML-данных.
- Верхний колонтитул, содержащий текстовые поля
- Строка, содержащая два поля значений
HTML-шаблонов | Могу ли я использовать… Таблицы поддержки для HTML5, CSS3 и т. д.
Могу ли я использовать
Поиск?
HTML-шаблоны
— ЛСГлобальное использование
97,57% + 0,12% «=» 97,69%
Метод объявления части многократно используемой разметки, которая анализируется, но не отображается до тех пор, пока не будет клонировано.
Chrome
- 4 — 25: не поддерживается
- 26 — 34: Частичная поддержка 36% — Supported»> 35 — 109: поддержано
- 110: поддержано
- 111 — 113: не поддержал
8
6
6
6
6
66
6
66
66
66
66
6
66
66
66
66:
13 — 14: Частичная поддержка 15 — 108: Поддерживается 109: Поддерживается SAFARI
- 3,1 — 6: Не поддерживается
00% — Not supported»> 6.1: Не поддерживается
7: не поддержал 6.1: не поддерживается 7: не поддержал 6.1: не поддерживается 7: не поддержал 7.13888888888888888888. : Частичная поддержка 9 — 16.2: Supported 16.3: Supported TP: Supported Firefox
- 2 — 21: Not supported
- 22 — 108: Supported
- 109: Supported
01% — Supported»> 110 — 111: Supported
Opera
- 9 — 12,1: не поддерживается
- 15 — 21: Частичная поддержка
- 22 — 93: поддержано
- 94: Поддержано
- .5.5-1015
6
66
66
66
66
6
66
66
66
66:
13 — 14: Частичная поддержка 15 — 108: Поддерживается 109: Поддерживается SAFARI
- 3,1 — 6: Не поддерживается
00% — Not supported»> 6.1: Не поддерживается
7: не поддержал 6.1: не поддерживается 7: не поддержал 6.1: не поддерживается 7: не поддержал 7.13888888888888888888. : Частичная поддержка 9 — 16.2: Supported 16.3: Supported TP: Supported Firefox
- 2 — 21: Not supported
- 22 — 108: Supported
- 109: Supported
01% — Supported»> 110 — 111: Supported
6
66
66
6
66
66
66
66:
13 — 14: Частичная поддержка 15 — 108: Поддерживается 109: Поддерживается SAFARI
- 3,1 — 6: Не поддерживается
00% — Not supported»> 6.1: Не поддерживается
7: не поддержал 6.1: не поддерживается 7: не поддержал 6.1: не поддерживается 7: не поддержал 7.13888888888888888888. : Частичная поддержка 9 — 16.2: Supported 16.3: Supported TP: Supported Firefox
- 2 — 21: Not supported
- 22 — 108: Supported
- 109: Supported
01% — Supported»> 110 — 111: Supported
6
66
6
66
66
66
66:
13 — 14: Частичная поддержка 15 — 108: Поддерживается 109: Поддерживается SAFARI
- 3,1 — 6: Не поддерживается
00% — Not supported»> 6.1: Не поддерживается
6
66
66
66
66:
6
66
66:
6:
- . поддерживается
Chrome for Android
- 109: Supported
Safari on iOS
- 3.2 — 7.1: Not supported
- 8 — 8.4: Partial support
- 9 — 16.2: Supported
- 16.3: Supported
Samsung Internet
- 65% — Supported»> 4–18.0: Поддерживается
Opera Mini
- все: Не поддерживается
Opera Mobile
1 9.0015
UC Browser для Android
- 13,4: Поддерживается
Android Browser
- 2.1 — 4.3: не поддерживается 6 4.4 -4.44: 4.1.3:: 4.44: 4.4: 4.4: 4.4: 4.3: не поддерживается. 4.44: 4.44: 4.3: 4.3. Для Android
- 109: поддержан
- 13,1: Поддержано
- 13. 18: поддерживает
- 13.18: поддерживает
- 13.18: поддерживает
- .0021
- 2.5: Поддерживается
- Ресурсы:
- Элемент шаблона на MDN
- Скрипт Polyfill
- web.dev — Тег нового шаблона HTML
- Эта версия
- http://www.w3.org/TR/2014/NOTE-html-templates-20140318/
- Последняя версия
- http://www.w3.org/TR/html-templates/
- Последний черновик редактора
- https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html
- Предыдущая версия
- http://www.w3.org/TR/2013/WD-html-templates-20130214/
- История изменений
- https://dvcs. w3.org/hg/webcomponents/log/tip/spec/templates/index.html
- Участвовать
- Обсудить на [email protected] (Рабочая группа по веб-приложениям)
- Ошибки файлов (Bugzilla w3.org)
- Редакторы
- Дмитрий Глазков, Google,
- Рафаэль Вайнштейн, Google,
- Тони Росс, Microsoft,
QQ Browser
Baidu Browser
Шаблоны HTML
HTMLsПримечание рабочей группы W3C 18 марта 2014 г.
Copyright © 2014 W3C ® ( MIT , ERCIM , Кейо, Бейхан), все права защищены. Применяются правила ответственности W3C, использования товарных знаков и документов.
Abstract
В этой спецификации описывается метод объявления инертных поддеревьев DOM в HTML и манипулирования ими для создания экземпляров фрагментов документа с идентичным содержимым.
В этом разделе описывается статус этого документа на момент его публикации. Этот документ может быть заменен другими документами. Список текущих публикаций W3C и последнюю редакцию этого технического отчета можно найти в указателе технических отчетов W3C по адресу http://www.w3.org/TR/.
Работа над этим документом прекращена, и его не следует упоминаются или используются в качестве основы для реализации. Особенности ранее указанные в этом документе, теперь указаны в HTML5.
Этот документ был опубликован рабочей группой веб-приложений в качестве примечания рабочей группы. Если вы хотите высказать комментарии относительно этого документа, отправьте их по адресу [email protected] (подписка, архивы). Все отзывы приветствуются.
Публикация в качестве примечания рабочей группы не означает одобрения Членством W3C .