From 4c7b7881c84eb83f2fcff11cff5ba41fc5a615d4 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Sun, 23 Feb 2025 15:56:00 +0100 Subject: [PATCH] feat: add d/u shortcuts for half page navigation, closes #62 (#437) --- .../src/app/reader/hooks/useBookShortcuts.ts | 18 ++++++++++++++++++ apps/readest-app/src/helpers/shortcuts.ts | 6 +++++- apps/readest-app/src/types/view.ts | 4 ++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/readest-app/src/app/reader/hooks/useBookShortcuts.ts b/apps/readest-app/src/app/reader/hooks/useBookShortcuts.ts index 2c5779fa..a4b5fe2f 100644 --- a/apps/readest-app/src/app/reader/hooks/useBookShortcuts.ts +++ b/apps/readest-app/src/app/reader/hooks/useBookShortcuts.ts @@ -61,6 +61,22 @@ const useBookShortcuts = ({ sideBarBookKey, bookKeys }: UseBookShortcutsProps) = getView(sideBarBookKey)?.history.back(); }; + const goHalfPageDown = () => { + const view = getView(sideBarBookKey); + const viewSettings = getViewSettings(sideBarBookKey ?? ''); + if (view && viewSettings && viewSettings.scrolled) { + view.next(view.renderer.size / 2); + } + }; + + const goHalfPageUp = () => { + const view = getView(sideBarBookKey); + const viewSettings = getViewSettings(sideBarBookKey ?? ''); + if (view && viewSettings && viewSettings.scrolled) { + view.prev(view.renderer.size / 2); + } + }; + const goForward = () => { getView(sideBarBookKey)?.history.forward(); }; @@ -123,6 +139,8 @@ const useBookShortcuts = ({ sideBarBookKey, bookKeys }: UseBookShortcutsProps) = onGoRight: goRight, onGoPrev: goPrev, onGoNext: goNext, + onGoHalfPageDown: goHalfPageDown, + onGoHalfPageUp: goHalfPageUp, onGoBack: goBack, onGoForward: goForward, onZoomIn: zoomIn, diff --git a/apps/readest-app/src/helpers/shortcuts.ts b/apps/readest-app/src/helpers/shortcuts.ts index 79c45172..0a7e1a67 100644 --- a/apps/readest-app/src/helpers/shortcuts.ts +++ b/apps/readest-app/src/helpers/shortcuts.ts @@ -11,6 +11,8 @@ export interface ShortcutConfig { onGoRight: string[]; onGoNext: string[]; onGoPrev: string[]; + onGoHalfPageDown: string[]; + onGoHalfPageUp: string[]; onGoBack: string[]; onGoForward: string[]; onZoomIn: string[]; @@ -33,13 +35,15 @@ const DEFAULT_SHORTCUTS: ShortcutConfig = { onGoRight: ['ArrowRight', 'PageDown', 'l', ' '], onGoNext: ['ArrowDown', 'j'], onGoPrev: ['ArrowUp', 'k'], + onGoHalfPageDown: ['shift+ArrowDown', 'd'], + onGoHalfPageUp: ['shift+ArrowUp', 'u'], onGoBack: ['shift+ArrowLeft', 'shift+h'], onGoForward: ['shift+ArrowRight', 'shift+l'], onZoomIn: ['ctrl+=', 'cmd+=', 'shift+='], onZoomOut: ['ctrl+-', 'cmd+-', 'shift+-'], onResetZoom: ['ctrl+0', 'cmd+0'], onSaveNote: ['ctrl+Enter'], - onCloseNote: ['Escape'] + onCloseNote: ['Escape'], }; // Load shortcuts from localStorage or fallback to defaults diff --git a/apps/readest-app/src/types/view.ts b/apps/readest-app/src/types/view.ts index 01226636..34f5abf6 100644 --- a/apps/readest-app/src/types/view.ts +++ b/apps/readest-app/src/types/view.ts @@ -36,8 +36,8 @@ export interface FoliateView extends HTMLElement { }; renderer: { scrolled?: boolean; - size: number; - viewSize: number; + size: number; // current page height + viewSize: number; // whole document view height start: number; end: number; setAttribute: (name: string, value: string | number) => void;