reader: convert feature modules to Feature Registration Pattern
- Add init(context) exported function to each feature module - Store module-level context reference for event handlers - Fix gestures.ts to use library_type_name instead of library_type - Features: gestures, keyboard-shortcuts, navigator-panel, offline-manager, panel-dock-system, progress-indicator, reading-speed-tracker
This commit is contained in:
@@ -4,23 +4,32 @@
|
||||
|
||||
import type { ReaderContext } from "../core/reader-context";
|
||||
|
||||
export function init(context: ReaderContext): void {
|
||||
let context: ReaderContext;
|
||||
|
||||
export function init(readerContext: ReaderContext): void {
|
||||
context = readerContext;
|
||||
let state: NavigatorState | null = null;
|
||||
|
||||
context.events.on("navigator:initialize", (detail: { containerSelector: string; totalPages: number }) => {
|
||||
state = initializeNavigator(detail.containerSelector);
|
||||
state.totalPages = detail.totalPages;
|
||||
});
|
||||
context.events.on(
|
||||
"navigator:initialize",
|
||||
(detail: { containerSelector: string; totalPages: number }) => {
|
||||
state = initializeNavigator(detail.containerSelector);
|
||||
state.totalPages = detail.totalPages;
|
||||
},
|
||||
);
|
||||
|
||||
context.events.on("navigator:update", (detail: { currentPage: number; contentImage?: HTMLImageElement }) => {
|
||||
if (state) {
|
||||
state.currentPage = detail.currentPage;
|
||||
if (detail.contentImage) {
|
||||
state.contentImage = detail.contentImage;
|
||||
updateNavigatorViewport(state);
|
||||
context.events.on(
|
||||
"navigator:update",
|
||||
(detail: { currentPage: number; contentImage?: HTMLImageElement }) => {
|
||||
if (state) {
|
||||
state.currentPage = detail.currentPage;
|
||||
if (detail.contentImage) {
|
||||
state.contentImage = detail.contentImage;
|
||||
updateNavigatorViewport(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
context.events.on("navigator:pan", (detail: { x: number; y: number }) => {
|
||||
if (state) {
|
||||
@@ -124,10 +133,10 @@ function handleNavigatorPan(state: NavigatorState, x: number, y: number): void {
|
||||
if (!state.contentImage) return;
|
||||
|
||||
const imgRect = state.contentImage.getBoundingClientRect();
|
||||
|
||||
|
||||
const viewportX = x * state.container.offsetWidth;
|
||||
const viewportY = y * state.container.offsetHeight;
|
||||
|
||||
state.viewport.style.left = `${viewportX}px`;
|
||||
state.viewport.style.top = `${viewportY}px`;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user