Первое приложение

Unpoly — это библиотека для JavaScript, предназначенная для создания динамичных, отзывчивых веб-приложений с минимальным использованием JavaScript. В отличие от традиционных SPA-фреймворков, она фокусируется на использовании обычных HTML-страниц и обновлении только необходимых фрагментов страницы. Unpoly значительно упрощает работу с клиентской частью веб-приложений, снижая необходимость в сложных и трудоёмких операциях, таких как создание SPA с маршрутизацией и манипуляциями с состоянием.

Для начала работы с Unpoly достаточно подключить библиотеку через CDN или скачать её и разместить локально. Библиотека работает с обычными HTML-документами, используя технологии, уже встроенные в браузеры: HTTP-запросы, серверные шаблонизаторы и браузерный рендеринг.

Основной принцип работы Unpoly заключается в том, что оно обновляет лишь те части страницы, которые требуют изменений. Это позволяет значительно сократить количество необходимого JavaScript-кода и делает взаимодействие с сервером более быстрым и простым. Библиотека работает путем использования специального атрибута up-target, который указывает, какой фрагмент страницы нужно обновить после выполнения действия, например, отправки формы или клика по ссылке.

Установка и подключение

Для начала работы с Unpoly достаточно подключить библиотеку в HTML-документ. Это можно сделать как через CDN, так и через локальные файлы.

Подключение через CDN

<script src="https://unpoly.com/unpoly.js"></script>
<link rel="stylesheet" href="https://unpoly.com/unpoly.css">

Локальное подключение

Скачав файлы с официального сайта или с репозитория GitHub, можно подключить их следующим образом:

<script src="path/to/unpoly.js"></script>
<link rel="stylesheet" href="path/to/unpoly.css">

Основные принципы работы

Unpoly взаимодействует с веб-страницей через несколько ключевых концепций:

  • up-target — это атрибут, который используется для указания части страницы, которая будет обновлена после выполнения действия (например, после отправки формы или клика по ссылке).

  • up-request — атрибут, который добавляется к элементам (например, кнопкам или ссылкам) и позволяет выполнить AJAX-запрос для обновления только части страницы, вместо перезагрузки всего документа.

  • up-boost — улучшает поведение ссылок и форм, автоматически перехватывая их действия и отправляя запросы через AJAX, если это возможно.

  • up-form — автоматически обновляет фрагменты страницы после отправки формы.

Пример создания первого приложения с Unpoly

Для создания простого динамичного приложения с помощью Unpoly можно использовать обычную HTML-страницу с небольшими улучшениями, которые реализуют динамическую загрузку данных.

Структура HTML-документа

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Unpoly Пример</title>
    <script src="https://unpoly.com/unpoly.js"></script>
    <link rel="stylesheet" href="https://unpoly.com/unpoly.css">
</head>
<body>
    <h1>Добро пожаловать в моё приложение</h1>

    <div id="content">
        <!-- Контент будет обновляться здесь -->
    </div>

    <button up-target="#content" up-request="/data">Загрузить данные</button>
    
</body>
</html>

Серверная часть

На серверной стороне необходимо настроить обработку запросов. Для примера можно использовать любой серверный язык программирования. Для простоты рассмотрим пример на Node.js с использованием Express.

const express = require('express');
const app = express();
const path = require('path');

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'index.html'));
});

app.get('/data', (req, res) => {
    res.send('<p>Данные загружены! Это динамически загруженная информация.</p>');
});

app.listen(3000, () => {
    console.log('Сервер запущен на http://localhost:3000');
});

Объяснение примера

В этом примере:

  • При клике на кнопку будет отправлен запрос по маршруту /data.
  • Ответ от сервера, состоящий из нового фрагмента HTML, будет вставлен в элемент с id="content".
  • Таким образом, будет обновлена только часть страницы, а не вся.

Управление формами

Unpoly предоставляет простое управление формами, что делает создание динамических форм удобным и быстрым. Например, при отправке формы можно обновить только её содержимое или целый раздел страницы, не перезагружая страницу.

Пример формы

<form up-target="#content" action="/submit" method="post">
    <input type="text" name="username" placeholder="Введите имя">
    <input type="submit" value="Отправить">
</form>

Когда пользователь отправляет форму, она будет обработана на сервере, и ответ, состоящий из нового фрагмента HTML, обновит только тот элемент, который был указан в up-target.

Обработка ошибок и отладка

Unpoly поддерживает стандартную обработку ошибок через механизм HTTP-статусов. Например, если на сервере произошла ошибка (например, 404 или 500), библиотека может отобразить ошибку на странице без полной перезагрузки.

Для этого достаточно настроить обработку ошибок на сервере, а Unpoly позаботится о том, чтобы заменить только нужные фрагменты страницы.

app.get('/data', (req, res) => {
    res.status(500).send('<p>Произошла ошибка!</p>');
});

Если запрос вернул ошибку, Unpoly автоматически заменит содержимое целевого элемента на сообщение об ошибке.

Расширенные возможности

Unpoly позволяет настроить более сложные взаимодействия между клиентом и сервером с помощью таких функций, как:

  • up-transition — добавляет анимации при переходах между состояниями.
  • up-history — управляет состоянием истории браузера, создавая возможность для “отката” к предыдущим состояниям страницы без полной перезагрузки.
  • up-morph — позволяет анимировать изменения DOM, создавая плавные переходы между состояниями страницы.

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

Вывод

Unpoly — это мощная и лёгкая библиотека для динамического обновления частей веб-страницы без необходимости в сложных JavaScript-фреймворках. Простота интеграции, использование стандартных HTML-элементов и минимизация объёма клиентского кода делают её отличным выбором для создания современных, высокопроизводительных веб-приложений.