Skip to content

Repository files navigation

Читалка

Современная браузерная читалка для книг в форматах FB2 и EPUB. Книга обрабатывается локально и не загружается на сервер.

Возможности

  • Открытие FB2, FB2.ZIP и EPUB 2/3 без DRM через диалог или drag-and-drop.
  • Поддержка UTF-8, UTF-16 и распространённых однобайтовых кодировок, включая Windows-1251.
  • Чтение адаптивных EPUB с главами, иллюстрациями, внутренними ссылками и сносками.
  • Адаптивный режим одной или двух страниц.
  • Навигация кнопками, стрелками клавиатуры, Page Up/Page Down и свайпом; кнопки можно скрыть или показывать адаптивно.
  • Автоматически скрывающаяся верхняя панель с возвратом по движению мыши или тапу.
  • Масштаб текста, светлая/тёмная тема и два режима сносок.
  • Обложки и иллюстрации, встроенные в книгу.
  • Сохранение настроек и позиции чтения в localStorage.
  • Оценка времени до конца книги.

Стек

  • Vite — разработка и production-сборка.
  • TypeScript без UI-фреймворка — интерфейс и доменная логика.
  • fflate — распаковка ZIP в браузере.
  • Vitest + jsdom — модульные и интеграционные тесты.
  • GitHub Actions — проверка тестов и сборки.

Минимальная версия Node.js — 22.22.2. Для локальной разработки рекомендуется Node.js 24.

Запуск

npm install
npm run dev

Vite выведет локальный адрес приложения. По умолчанию открывается демонстрационная «Анна Каренина»; другую книгу можно выбрать кнопкой в шапке.

Проверка

npm test
npm run build
npm run preview

Устройство

src/
├── book/            общая модель книги и разбиение DOM на части
├── epub/            разбор контейнера EPUB и безопасный DOM-рендеринг
├── fb2/             загрузка, декодирование, разбор и DOM-рендеринг FB2
├── reader/          пагинация и безопасное локальное хранение
├── app.ts           пользовательские сценарии и управление интерфейсом
├── settings.ts      типы и значения настроек
├── main.ts          точка входа
└── style.css        адаптивный интерфейс и книжная типографика

books/
├── Anna-Karenina.fb2      демонстрационная книга
├── Anna-Karenina.fb2.zip  архивная версия для проверки поддержки ZIP
└── Anna-Karenina.epub     книга для проверки поддержки EPUB

FB2 и EPUB преобразуются в DOM напрямую. Для EPUB стили и исполняемое содержимое книги отключаются, внешние ресурсы не загружаются, а внутренние ссылки разрешаются только внутри архива. EPUB с DRM, зашифрованным содержимым или фиксированной вёрсткой отклоняется с понятным сообщением.

About

Reader component

Resources

Stars

83 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages