feat: initialize page calculation on reader load
- Add pageCalculationResult and currentScrollPosition to UniversalReader type - Add settings:changed event type for settings change notifications - Call initializePageCalculation after reader ready in reader-shell.ts - Add tabindex to reader-content for keyboard navigation focus
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { ReaderMetadata } from "../../types/reader";
|
||||
import { PageCalculationResult } from "../ebook/page-calculator";
|
||||
|
||||
type ReaderType = "ebook" | "pdf" | "comic" | "manga";
|
||||
|
||||
@@ -6,6 +7,9 @@ interface UniversalReader {
|
||||
type: "ebook";
|
||||
cif: any;
|
||||
currentSpineIndex: number;
|
||||
currentPage?: number;
|
||||
pageCalculationResult?: PageCalculationResult;
|
||||
currentScrollPosition?: number;
|
||||
}
|
||||
|
||||
interface PDFReader {
|
||||
|
||||
@@ -6,7 +6,8 @@ type ReaderEventType =
|
||||
| "themeChanged"
|
||||
| "progressUpdated"
|
||||
| "beforePageChange"
|
||||
| "afterPageChange";
|
||||
| "afterPageChange"
|
||||
| "settings:changed";
|
||||
|
||||
class EventBus {
|
||||
private listeners = new Map<ReaderEventType, Function[]>();
|
||||
|
||||
@@ -5,6 +5,7 @@ import { createReaderContext, type ReaderContext } from "./core/reader-context";
|
||||
import { getState, setState } from "./core/reader-state";
|
||||
import { createNavigationAPI } from "./core/reader-navigation";
|
||||
import { readerEvents } from "./core/reader-events";
|
||||
import { renderSpineItem } from "./core/reader-navigation";
|
||||
|
||||
interface UniversalReader {
|
||||
type: "ebook";
|
||||
@@ -142,6 +143,13 @@ async function initializeReader(): Promise<void> {
|
||||
|
||||
await initializeFeatures(context);
|
||||
readerEvents.emit("readerReady", currentReader);
|
||||
// Render the initial chapter content
|
||||
await renderSpineItem();
|
||||
// Initialize page calculation for dynamic page numbers
|
||||
setTimeout(() => {
|
||||
const { initializePageCalculation } = require("./core/reader-navigation");
|
||||
initializePageCalculation();
|
||||
}, 100);
|
||||
} catch (error) {
|
||||
console.error("Render initialization failed:", error);
|
||||
}
|
||||
@@ -183,7 +191,13 @@ async function initializeEbookReader(metadata: any): Promise<UniversalReader> {
|
||||
metadata.mime_type,
|
||||
getFileExtension(metadata.file_path),
|
||||
);
|
||||
|
||||
console.log("EPUB Parse Result:", {
|
||||
spineLength: cif.spine?.length,
|
||||
spineItems: cif.spine?.map((s: any) => s.href),
|
||||
tocLength: cif.toc?.length,
|
||||
keys: Object.keys(cif),
|
||||
});
|
||||
console.log("Spine items detail:", JSON.stringify(cif.spine));
|
||||
return {
|
||||
type: "ebook",
|
||||
cif,
|
||||
|
||||
Reference in New Issue
Block a user