Commit Graph
3 Commits
Author SHA1 Message Date
john-okeefe 03f7c15445 feat(reader): Add dynamic panel detection loading in frontend
- Add enablePanelDetection, libraryType, formatGroup state
- Add panelDetector instance for dynamic loading
- Update initReader to accept and process configuration
- Conditionally load panel detection only when enabled
- Use dynamic import for foliate-js/panel-detection.js
- Add error handling for panel detection loading
2026-04-12 20:44:00 -04:00
john-okeefe 157bf734c7 feat: Create minimal reader entry point for foliate-js
Create minimal Alpine.js integration for foliate-js reader. This file
serves as the entry point that imports foliate-js and provides basic
navigation controls.

Implementation:
1. Import foliate-js/view.js:
   - Registers <foliate-view> custom element globally
   - Makes foliate reader functional when element is added to DOM
   - No explicit EPUB imports needed (foliate detects format automatically)

2. Alpine.js integration:
   - Create readerShell data object for UI state management
   - Provide nextPage() and previousPage() methods for button controls
   - Methods access <foliate-view> custom element's API (next(), prev())
   - Simple, functional approach (no OOP, follows project guidelines)

3. Init placeholder:
   - initReader() method for future initialization logic
   - Currently just logs for debugging
   - Will be extended with theme switching, progress sync, etc.

Design Choices:
- Follow project guidelines: No classes, functional/procedural style
- Use Alpine.js for UI state (consistent with rest of application)
- Defer book loading to foliate's internal format detection
- Minimal footprint: Only what's needed to make <foliate-view> work

Next Steps (Future Commits):
- Theme switching logic (apply CSS custom properties)
- Progress sync to API (listen to foliate's relocate event)
- Book loading integration (open book path, handle CFI locations)
- Settings persistence (save theme, font, spacing preferences)

File: web/src/reader/reader.ts (31 lines)
- Clean separation: Foliate handles rendering, Alpine handles UI state
- Type-safe with @ts-ignore for foliate custom element API access
2026-04-12 12:10:02 -04:00
john-okeefe 4abc814c1b types: add format_group, library_type_name, manga_type to ReaderMetadata
- Move ReaderMetadata from api.ts to reader.d.ts as global type
- Add format_group field for format detection (reflowable/fixed_layout/comic_archive)
- Add library_type_name for library type (ebooks/comics/manga/pdf)
- Add manga_type for manga-specific reading direction metadata
- Remove duplicate mime_type field and fix typo (unkown -> unknown)
2026-04-04 18:17:11 -04:00