Олдскульные HTML-шаблоны снова в моде! htmx и другие средства борьбы с javascript fatigue / Хабр

Рендеринг веб-страниц на стороне сервера, как знают многие читатели, вышел из употребления уже лет 10 как. «Перезагрузка страниц занимает ощутимое время, при этом пользователю не показывается даже спиннер! Что об этом говорят наши UX гайдлайны?» — таким вопросом задавались IT компании, принимая решение немедленно переезжать на single-page application.

Долгие годы никто не решался идти против веяний эпохи, пока лет 5 назад затишье не нарушил популярный веб-фреймворк Phoenix для языка Elixir (курица в капле на моей картинке). Его авторы считали, что обладающая сверхспособностями Erlang VM сумеет развеять предрассудки о якобы тормознутом серверном рендеринге.

Что ж — они не ошиблись: Phoenix Live View получила популярность, и теперь является для поклонников языка Elixir свидетельством преимуществ их рантайма. Сервер с клиентом общаются исключительно по вебсокету, html генерируется на сервере, коэффициент полезной информации в передаваемом трафике близок к 100%.

Видимо, у авторов Phoenix — не только вера в возможности рантайма, но ещё и прямые руки.

Возвращение к серверным шаблонам в 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 есть события на все случаи жизни — в том числе, можно заводить кастомные. Флаг наступления события может установить как предыдущий ответ с сервера — с помощью хедеров, так и нотификация по вебсокету, например.

Несмотря на простоту концепта, кроме htmx — такое впечатление, что никто до этого не додумался. (UPDATE: есть ещё Hotwire, который построен на похожих принципах)

В общем, если Вы сомневаетесь, использовать ли для django-админки SPA или серверные шаблоны — то не сомневайтесь и берите htmx. Если Вы адепт full-stack разработки на Python — тоже. Разделение труда — единственный весомый контраргумент для меня: серверные разработчики обычно не очень разбираются в вёрстке, вне зависимости от используемого языка.

А теперь — о самом интересном аспекте (на мой взгляд). Интересующиеся мобильной разработкой или читающие блог Яндекса, наверно, видели анонс о выходе в опен-сорс фреймворка divkit.

Кроме хабра и ютуба , о нём не очень много можно найти за пределами Яндекса (сам я не из Яндекса). В демо на ютубе девушка несколько раз упоминает фреймворк как «дивный кит». Лично мне название нравится — осталось только кита на логотипе фреймворка изобразить.

divkit — это что-то вроде такого универсального html (точнее, json), который он (divkit) умеет отображать на Android, iOS и на вебе. Таким образом, клиентский код сводится к минимуму, а задача сервера — как раз, формировать этот самый json. Получается, в Яндексе тоже используют рендеринг на сервере — для мобилок! (замахнулись на их нативную природу, не иначе)

Так вот, лично я считаю, что для мобилок серверный рендеринг ещё нужнее . Потому что у нас есть две разные платформы, как минимум — сами знаете, какие. Языки для разработки приложений у них — разные, графические библиотеки — тоже, причём, в случае Apple — закрытые. Какое в Яндексе нашли этому решение — писать максимум логики на стороне сервера, логично же?

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

Создание шаблона в формате HTML

Перейти к основному содержанию

  1. Главная
  2. Tekla Structures
  3. Manage Tekla Structures
  4. Templates
  5. Создание шаблона в формате HTML

Tekla Structures

2022

Tekla Structures

Шаблоны в формате HTML предоставляют больше возможностей в плане компоновки, использования шрифтов и изображений. Шаблоны, формирующие выходные данные в формате HTML, являются графическими; их файлы имеют расширение *.html.rpt.

  1. В меню Файл выберите Редакторы > Редактор шаблонов.
  2. В редакторе шаблонов выберите Файл > Создать.
  3. Выберите Графический шаблон и нажмите ОК.
  4. Добавьте в шаблон новые строки.
    1. Выберите Вставить > Компонент > Строка, чтобы добавить новую строку.
    2. Выберите тип содержимого строки и нажмите ОК.
    3. Повторите шаги a–b для каждой новой строки.
  5. Для получения нужных данных из базы данных Tekla Structures добавьте в строки поля значений.
    1. Выберите Вставить > Поле значения.
    2. Щелкните точку, чтобы определить положение поля в строке.

      Появится диалоговое окно Выбрать атрибут для выбора атрибута для поля значения.

    3. Выберите атрибут и нажмите ОК.
    4. Повторите шаги a–c для каждого поля значения.
  6. Добавьте верхний колонтитул для каждого поля значения.
    1. Выберите Вставить > Компонент > Верхний колонтитул…
    2. Выберите Вставить > Текст…
    3. Введите заголовок для шаблона и нажмите кнопку ОК.
    4. Укажите точку для определения положения заголовка в строке верхнего колонтитула.
    5. Повторяйте шаги a–d, чтобы создать заголовки для полей всех значений.
  7. Сохраните шаблон:
    1. Выберите Файл > Сохранить как
    2. Перейдите к папке шаблонов, заданной расширенным параметром XS_TEMPLATE_DIRECTORY.
    3. В поле Имя файла введите новое имя для шаблона.

      Имя файла должно содержать расширение *.html.rpt. Например: Part_list.html.rpt.

    4. Нажмите кнопку ОК.

Прим.:

При добавлении в HTML-шаблон изображений эти изображения должны находиться в папке ..\Program Files\Tekla Structures\<version>\bin\applications\Tekla\Tools\TplEd\bitmaps; в противном случае они не отображаются в выходных HTML-данных.

  1. Верхний колонтитул, содержащий текстовые поля
  2. Строка, содержащая два поля значений
Was this helpful?

What is missing?

Назад Далее

HTML-шаблонов | Могу ли я использовать… Таблицы поддержки для HTML5, CSS3 и т. д.

Могу ли я использовать

Поиск

?

HTML-шаблоны

— ЛС

  • Глобальное использование
    97,57% + 0,12% «=» 97,69%

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

Chrome
  1. 4 — 25: не поддерживается
  2. 26 — 34: Частичная поддержка
  3. 36% — Supported»> 35 — 109: поддержано
  4. 110: поддержано
  5. 111 — 113: не поддержал
8
6
  • 6
  • 6
  • 6
    6
    6
  • 6
    6
    6
    6
    6
    6
  • 6
    6
    6
  • 6
    6
    6
    6
    6
    6
    6
    6
    6:
  • 13 — 14: Частичная поддержка
  • 15 — 108: Поддерживается
  • 109: Поддерживается
  • SAFARI
    1. 3,1 — 6: Не поддерживается
    2. 00% — Not supported»> 6.1: Не поддерживается
    3. 7: не поддержал
    4. 6.1: не поддерживается
    5. 7: не поддержал
    6. 6.1: не поддерживается
    7. 7: не поддержал
    8. 7.13888888888888888888. : Частичная поддержка
    9. 9 — 16.2: Supported
    10. 16.3: Supported
    11. TP: Supported
    Firefox
    1. 2 — 21: Not supported
    2. 22 — 108: Supported
    3. 109: Supported
    4. 01% — Supported»> 110 — 111: Supported
    Opera
    1. 9 — 12,1: не поддерживается
    2. 15 — 21: Частичная поддержка
    3. 22 — 93: поддержано
    4. 94: Поддержано
    1. .5.5-1015
    1. . поддерживается
    Chrome for Android
    1. 109: Supported
    Safari on iOS
    1. 3.2 — 7.1: Not supported
    2. 8 — 8.4: Partial support
    3. 9 — 16.2: Supported
    4. 16.3: Supported
    Samsung Internet
    1. 65% — Supported»> 4–18.0: Поддерживается
    2. 19.0: Поддерживается
    Opera Mini
    1. все: Не поддерживается
    Opera Mobile

    1 9.0015

  • 73: Поддерживается
  • UC Browser для Android
    1. 13,4: Поддерживается
    Android Browser
    1. 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
    1. 109: поддержан
    QQ Browser
    1. 13,1: Поддержано
    Baidu Browser
    1. 13. 18: поддерживает
    913
    1. 13.18: поддерживает
    92913
    1. 13.18: поддерживает
    1. .0021
    2. 2.5: Поддерживается
    Ресурсы:
    Элемент шаблона на MDN
    Скрипт Polyfill
    web.dev — Тег нового шаблона HTML

    Шаблоны HTML

    HTMLs

    Примечание рабочей группы W3C 18 марта 2014 г.

    Эта версия
    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,

    Copyright © 2014 W3C ® ( MIT , ERCIM , Кейо, Бейхан), все права защищены. Применяются правила ответственности W3C, использования товарных знаков и документов.


    Abstract

    В этой спецификации описывается метод объявления инертных поддеревьев DOM в HTML и манипулирования ими для создания экземпляров фрагментов документа с идентичным содержимым.

    В этом разделе описывается статус этого документа на момент его публикации. Этот документ может быть заменен другими документами. Список текущих публикаций W3C и последнюю редакцию этого технического отчета можно найти в указателе технических отчетов W3C по адресу http://www.w3.org/TR/.

    Работа над этим документом прекращена, и его не следует упоминаются или используются в качестве основы для реализации. Особенности ранее указанные в этом документе, теперь указаны в HTML5.

    Этот документ был опубликован рабочей группой веб-приложений в качестве примечания рабочей группы. Если вы хотите высказать комментарии относительно этого документа, отправьте их по адресу [email protected] (подписка, архивы). Все отзывы приветствуются.

    Публикация в качестве примечания рабочей группы не означает одобрения Членством W3C .

    Автор записи

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *