// Manga-specific settings integration // Feature Registration Pattern implementation import type { ReaderContext } from "../core/reader-context"; export function init(context: ReaderContext): void { let currentSettings: MangaSettings | null = null; context.events.on("reader:loaded", async () => { currentSettings = await getMangaSettings(); applyMangaSettings(currentSettings); context.events.emit("manga-settings:loaded", currentSettings); }); context.events.on("manga-settings:update", async (detail: { settings: Partial }) => { if (currentSettings) { currentSettings = { ...currentSettings, ...detail.settings }; await updateMangaSettings(detail.settings); applyMangaSettings(currentSettings); context.events.emit("manga-settings:changed", currentSettings); } }); context.events.on("manga-settings:get", () => { if (currentSettings) { context.events.emit("manga-settings:current", currentSettings); } }); } interface MangaSettings { readingDirection: "auto" | "ltr" | "rtl" | "vertical"; verticalScrollSpeed: "slow" | "normal" | "fast"; rtlPageTransition: "slide" | "fade" | "none"; webtoonMode: boolean; } async function getMangaSettings(): Promise { const defaultSettings: MangaSettings = { readingDirection: "auto", verticalScrollSpeed: "normal", rtlPageTransition: "slide", webtoonMode: false, }; try { const userId = localStorage.getItem("userId"); const response = await fetch(`/api/users/${userId}/settings`); if (response.ok) { const settings = await response.json(); return { ...defaultSettings, ...settings }; } } catch (error) { console.error("Failed to load manga settings:", error); } return defaultSettings; } async function updateMangaSettings( settings: Partial, ): Promise { const userId = localStorage.getItem("userId"); try { const response = await fetch(`/api/users/${userId}/settings`, { method: "PUT", headers: { "Content-Type": "application/json", Authorization: `Bearer ${localStorage.getItem("token")}`, }, body: JSON.stringify(settings), }); if (!response.ok) { throw new Error("Failed to update manga settings"); } } catch (error) { console.error("Failed to save manga settings:", error); } } function applyMangaSettings(settings: MangaSettings): void { document.documentElement.dataset.readingDirection = settings.readingDirection; if (settings.verticalScrollSpeed === "slow") { document.documentElement.style.scrollBehavior = "smooth"; } else if (settings.verticalScrollSpeed === "fast") { document.documentElement.style.scrollBehavior = "auto"; } if (settings.rtlPageTransition !== "none") { document.documentElement.dataset.pageTransition = settings.rtlPageTransition; } document.documentElement.dataset.webtoonMode = String(settings.webtoonMode); }