docs: add comprehensive rework plan for navigation, honest progress and chapter detection to TODO.md
This commit is contained in:
1 parent
6ee67c0653
commit
f642a131ad
1 file changed
+26
-12
@@ -120,18 +120,32 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 6. 📖 Запоминание позиции чтения и прогресс главы (Scroll position, Chapter Progress & Auto-restore)
|
### 6. 🔄 Комплексная переработка навигации, роутинга и честного прогресса чтения (In Progress)
|
||||||
- [x] **Индикатор прогресса текущей главы**:
|
- [ ] **6.1. Нативная маршрутизация окон (URL Hash Router & Zero-Flicker F5)**:
|
||||||
- Тонкий неоновый прогресс-бар в шапке читалки (`reader-chapter-progress-bar`), плавно показывающий процент прочитанного в текущей главе.
|
- Внедрение хэш-роутинга: `#dictionary`, `#srs`, `#bookshelf`, `#reader/:book_id`, `#reader/:book_id/ch/:chapter_idx`.
|
||||||
- Процентный бейдж в центре тулбара читалки рядом с выбором главы (`reader-scroll-pct-badge`, например `42%`).
|
- Синхронное переключение `view` при старте скрипта (до любых сетевых запросов авторизации): если в URL `#reader/...`, сразу скрывать `#dictionary-view` и показывать скелетон читалки, устраняя мигание словарем.
|
||||||
- [x] **Автоматическое сохранение позиции чтения**:
|
- Развязка асинхронных вызовов: `loadBookshelf()` больше не должен принудительно гасить `readerInterface`, если уже инициировано открытие книги через `openBook()`.
|
||||||
- Отслеживание скролла читалки в реальном времени (`handleReaderScroll`).
|
- Поддержка нативной истории браузера (кнопки «Назад» / «Вперёд» на мыши, клавиатуре и мобильных свайпах).
|
||||||
- Мгновенное сохранение в `localStorage` (`notes_book_{id}_pos`: номер главы, точные пиксели `scrollTop`, доля прогресса `fraction`).
|
- Автоматическая синхронизация активного экрана в URL и `localStorage`.
|
||||||
- Фоновая отправка прогресса на бэкенд (`PUT /api/books/{id}/progress`) с дебаунсом 800 мс.
|
- [ ] **6.2. Честный непрерывный расчет прогресса книги и главы (Weighted Reading Progress)**:
|
||||||
- Гарантированная фиксация позиции при закрытии/обновлении страницы через `beforeunload` + `navigator.sendBeacon`.
|
- Устранение бага ложных «100%»: полная ликвидация формулы `(current_ch + 1) / total_ch`, выдававшей 100% на первой странице одноглавных документов.
|
||||||
- [x] **Бесшовное восстановление чтения при перезагрузке страницы**:
|
- Прогресс текущей главы в реальном времени: непрерывный расчет от вертикального скролла (`scrollTop / (scrollHeight - clientHeight) * 100`) от 0% до 100%.
|
||||||
- Сервис запоминает активный экран и ID открытой книги (`notes_active_book_id`).
|
- Взвешенный общий прогресс книги: расчет по объему слов прочитанных глав + точная доля текущей главы:
|
||||||
- При обновлении страницы (`F5` или свайп на телефоне) приложение автоматически открывает читалку на той же книге, той же главе и восстанавливает точную позицию скролла вплоть до пикселя.
|
$$\text{TotalProgress} = \frac{\sum_{i=0}^{\text{cur}-1} \text{words}(ch_i) + \text{words}(ch_{\text{cur}}) \times \frac{\text{ChapterPct}}{100}}{\text{TotalWords}} \times 100\%$$
|
||||||
|
- Для документа на 1000 слов прогресс будет плавно расти: 0% $\rightarrow$ 15% $\rightarrow$ 50% $\rightarrow$ 100%.
|
||||||
|
- Отображение честного суммарного прогресса на карточках книг в библиотеке и в тулбаре читалки.
|
||||||
|
- [ ] **6.3. Интеллектуальный парсинг глав и оглавление (Smart Chapter & ToC Detection)**:
|
||||||
|
- Расширение детектора глав в `app/reader.py`:
|
||||||
|
- Markdown-заголовки всех уровней (`# `, `## `, `### `, `#### `).
|
||||||
|
- Нумерованные разделы и модули (`1. `, `1.1 `, `2.0 `, `Section 1`, `Part 1`, `Раздел 1`).
|
||||||
|
- Выделенные строки в верхнем регистре (ALL CAPS) от 3 до 60 символов, обрамленные пустыми строками (`INTRODUCTION`, `ETHERNET BASICS`).
|
||||||
|
- Жирные заголовки в начале абзацев (`**Chapter 1**`, `**Глава 1**`).
|
||||||
|
- Адаптивный порог авто-разбивки: снижение порога чанкования текста без явных глав с 3000 до 800–1000 слов, чтобы даже небольшие статьи имели логическое деление на части.
|
||||||
|
- Интерактивное оглавление со статусами прочтения: `✔ Прочитано`, `▶ В процессе (45%)`, `○ Не начато`.
|
||||||
|
- [ ] **6.4. Устойчивая фиксация позиции чтения (Paragraph Anchor + Scroll)**:
|
||||||
|
- Сохранение не только пикселей `scrollTop`, но и индекса первого видимого абзаца (`anchor_paragraph_idx`).
|
||||||
|
- Устойчивость к изменению шрифта `Aa` и ориентации экрана: восстановление скролла к конкретному предложению/абзацу, а не слепым пикселям.
|
||||||
|
- Фиксация скролл-контейнера `#reader-scroll-area` с аппаратным ускорением на мобильных.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user