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 type { ReaderMetadata } from "../../types/reader";
|
||||||
|
import { PageCalculationResult } from "../ebook/page-calculator";
|
||||||
|
|
||||||
type ReaderType = "ebook" | "pdf" | "comic" | "manga";
|
type ReaderType = "ebook" | "pdf" | "comic" | "manga";
|
||||||
|
|
||||||
@@ -6,6 +7,9 @@ interface UniversalReader {
|
|||||||
type: "ebook";
|
type: "ebook";
|
||||||
cif: any;
|
cif: any;
|
||||||
currentSpineIndex: number;
|
currentSpineIndex: number;
|
||||||
|
currentPage?: number;
|
||||||
|
pageCalculationResult?: PageCalculationResult;
|
||||||
|
currentScrollPosition?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PDFReader {
|
interface PDFReader {
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ type ReaderEventType =
|
|||||||
| "themeChanged"
|
| "themeChanged"
|
||||||
| "progressUpdated"
|
| "progressUpdated"
|
||||||
| "beforePageChange"
|
| "beforePageChange"
|
||||||
| "afterPageChange";
|
| "afterPageChange"
|
||||||
|
| "settings:changed";
|
||||||
|
|
||||||
class EventBus {
|
class EventBus {
|
||||||
private listeners = new Map<ReaderEventType, Function[]>();
|
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 { getState, setState } from "./core/reader-state";
|
||||||
import { createNavigationAPI } from "./core/reader-navigation";
|
import { createNavigationAPI } from "./core/reader-navigation";
|
||||||
import { readerEvents } from "./core/reader-events";
|
import { readerEvents } from "./core/reader-events";
|
||||||
|
import { renderSpineItem } from "./core/reader-navigation";
|
||||||
|
|
||||||
interface UniversalReader {
|
interface UniversalReader {
|
||||||
type: "ebook";
|
type: "ebook";
|
||||||
@@ -142,6 +143,13 @@ async function initializeReader(): Promise<void> {
|
|||||||
|
|
||||||
await initializeFeatures(context);
|
await initializeFeatures(context);
|
||||||
readerEvents.emit("readerReady", currentReader);
|
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) {
|
} catch (error) {
|
||||||
console.error("Render initialization failed:", error);
|
console.error("Render initialization failed:", error);
|
||||||
}
|
}
|
||||||
@@ -183,7 +191,13 @@ async function initializeEbookReader(metadata: any): Promise<UniversalReader> {
|
|||||||
metadata.mime_type,
|
metadata.mime_type,
|
||||||
getFileExtension(metadata.file_path),
|
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 {
|
return {
|
||||||
type: "ebook",
|
type: "ebook",
|
||||||
cif,
|
cif,
|
||||||
|
|||||||
Reference in New Issue
Block a user