refactor(reader): rewrite reader module for foliate-js pan/zoom integration
Major rewrite of the web reader to properly interface with
@bookhoard/foliate-js, replacing the abandoned panel-detection
architecture with direct pan and zoom support built into the
foliate-js FixedLayout renderer.
Template (reader.templ):
- Fix critical bug: x-init config was using literal strings
'{ readerData.X }' inside a quoted attribute, which templ
treated as raw text and never interpolated. Values were never
actually passed to JavaScript. Now uses fmt.Sprintf() with
templ's expression attribute syntax ={ }.
- Pass fileUrl from server so foliate-js can open books directly.
- Redesign bottom bar with foliate-js parity: left/right navigation
buttons, progress slider with tick marks, and zoom controls
(zoom out, percentage display, zoom in, magnifier, pan/select
mode toggle for PDFs).
- Remove panel editor button and enablePanelDetection config.
- Add SVG icon styles for consistent reader controls.
Go types (templates/types.go):
- Expand ReaderMetadata with FormatGroup, MangaType,
ReadingDirection, FileURL, and LibraryID fields needed by
the reader frontend.
Router (internal/router/reader.go):
- Populate new ReaderMetadata fields from database values.
- Construct FileURL from library ID and file path for the
/uploads/library-{id}/* file serving route.
Reader JS (reader.ts):
- Full rewrite modeled on foliate-js Reader class, adapted for
Alpine.js. Opens books via view.open(fileUrl), accesses
view.renderer for zoom/pan/navigation, and wires up keyboard
shortcuts (+/-/0 for zoom, arrows for nav, Escape for magnifier).
- Uses view.isFixedLayout instead of importing FixedLayout class,
avoiding a TypeScript module resolution issue with the Vite alias.
Settings manager (settings-manager.ts):
- Remove dependency on deleted ReaderContext event bus.
- Export loadSettings/saveSettings/syncSettings directly as
standalone async functions.
Cleanup:
- Delete reader-context.ts and reader-events.ts (over-engineered
event system replaced by direct function calls).
- Remove panel_zoom_enabled from ReaderSettings type.
This commit is contained in:
+14
-9
@@ -147,15 +147,20 @@ func (u UnsafeHTML) ToComponent() templ.Component {
|
||||
|
||||
// Reader types
|
||||
type ReaderMetadata struct {
|
||||
MediaItemID string `json:"media_item_id"`
|
||||
Title string `json:"title"`
|
||||
Author string `json:"author"`
|
||||
CoverImagePath string `json:"cover_image_path"`
|
||||
LibraryType string `json:"library_type"`
|
||||
MimeType string `json:"mime_type"`
|
||||
FilePath string `json:"file_path"`
|
||||
TotalPages int `json:"total_pages"`
|
||||
ChapterCount int `json:"chapter_count"`
|
||||
MediaItemID string `json:"media_item_id"`
|
||||
Title string `json:"title"`
|
||||
Author string `json:"author"`
|
||||
CoverImagePath string `json:"cover_image_path"`
|
||||
LibraryType string `json:"library_type"`
|
||||
MimeType string `json:"mime_type"`
|
||||
FilePath string `json:"file_path"`
|
||||
TotalPages int `json:"total_pages"`
|
||||
ChapterCount int `json:"chapter_count"`
|
||||
FormatGroup string `json:"format_group"`
|
||||
MangaType string `json:"manga_type"`
|
||||
ReadingDirection string `json:"reading_direction"`
|
||||
FileURL string `json:"file_url"`
|
||||
LibraryID string `json:"library_id"`
|
||||
}
|
||||
|
||||
type ReadingProgress struct {
|
||||
|
||||
Reference in New Issue
Block a user