Unpoly — это библиотека для улучшения пользовательского интерфейса веб-приложений, позволяющая динамически обновлять части страницы без полной перезагрузки. Основой её работы является механизм целевых контейнеров и режимов обновления, определяющий, как и куда будут вставляться обновляемые фрагменты HTML.
target) — элемент
на странице, в который будет подгружаться новый контент. Может быть
указан с помощью CSS-селектора, например, #content или
.main-panel.up-target и
up-transition) — определяет способ вставки и
анимации нового содержимого.Unpoly поддерживает несколько режимов вставки контента, каждый из которых задаёт поведение при подгрузке HTML:
replace (по умолчанию) Контейнер
полностью заменяется новым содержимым. Это стандартный режим, который
подходит для большинства обновлений.
up.navigate('/profile', { target: '#content', mode: 'replace' });
Новый HTML заменяет старый, при этом выполняются все стандартные хуки
жизненного цикла: up:before-replace,
up:replace, up:after-replace.
insert Добавляет новый контент
внутрь контейнера, не удаляя существующего. Может быть полезен для
списков сообщений или комментариев.
up.navigate('/comments', { target: '#comments', mode: 'insert' });
Вставка происходит в конец контейнера по умолчанию, но можно указать
точное место через up-insert атрибут (top,
bottom, before, after).
append / prepend
Специальные варианты вставки для добавления элементов в начало
(prepend) или конец (append) контейнера.
Отличие от insert заключается в явной позиции:
up.navigate('/notifications', { target: '#notifications', mode: 'prepend' });swap Новый контент заменяет старый,
но элементы, отсутствующие в новом HTML, удаляются только после
анимации. Это позволяет создавать более плавные переходы. Часто
используется вместе с up-transition.
none Контент загружается, но не
вставляется в DOM автоматически. Этот режим полезен, если требуется
обработка HTML вручную перед вставкой.
up.navigate('/data', { target: '#content', mode: 'none' }).then(result => {
processHTML(result.responseText);
});Unpoly предоставляет HTML-атрибуты, которые позволяют задавать режим обновления прямо в разметке:
up-target — CSS-селектор контейнера для
обновления.up-mode — режим вставки (replace,
insert, append, prepend,
swap, none).up-transition — название анимации, которая будет
применяться при обновлении контейнера.up-insert — позиция вставки при использовании
insert (top, bottom,
before, after).Пример кнопки, подгружающей новый контент с анимацией:
<button
up-target="#content"
up-mode="replace"
up-transition="fade">
Обновить
</button>
Режимы обновления тесно связаны с анимационными переходами
(up-transition). Например, режим swap
позволяет анимировать удаление старого содержимого и появление
нового:
up.navigate('/dashboard', { target: '#main', mode: 'swap', transition: 'slide' });
В этом случае старый контент сначала плавно сдвигается или исчезает, после чего появляется новый, что улучшает пользовательский опыт.
replace — когда требуется полная
замена содержимого.insert / append /
prepend — для добавления элементов к существующему
списку.swap — когда важны плавные анимации
замены.none — когда требуется контроль над
вставкой HTML вручную или обработка данных перед отображением.Unpoly поддерживает обновления вложенных
контейнеров. Если внутри основного контейнера находятся другие
элементы с up-target, обновление может затронуть только
указанный контейнер. Это предотвращает перезагрузку всей страницы и
позволяет строить сложные интерфейсы, где каждая панель обновляется
независимо:
<div id="dashboard">
<div id="stats" up-target="#stats"></div>
<div id="notifications" up-target="#notifications"></div>
</div>
При вызове:
up.navigate('/stats', { target: '#stats', mode: 'replace' });
обновится только блок #stats, оставляя уведомления
нетронутыми.
Каждый режим обновления сопровождается событиями жизненного цикла, позволяющими выполнять дополнительные действия:
up:before-update — перед началом вставки контента.up:before-replace / up:before-insert —
перед конкретным типом обновления.up:replace / up:insert — непосредственно
после вставки.up:after-update — финальная точка после завершения всех
операций.Использование этих событий позволяет контролировать динамику интерфейса, управлять фокусом, инициализировать плагины или отслеживать метрики.
insert,
append или prepend, чтобы избежать полной
перезагрузки.replace или swap, особенно если требуется
анимация.target, чтобы обновление не
затронуло случайные элементы страницы.mode и transition позволяет
создавать визуально богатые интерфейсы без избыточного JavaScript.Режимы обновления в Unpoly обеспечивают гибкость и контроль над динамикой страницы, делая возможным построение интерактивных и отзывчивых интерфейсов с минимальными усилиями.