diff --git a/src/lib/components/Reader/Reader.svelte b/src/lib/components/Reader/Reader.svelte
index 89eb448..4a906c7 100644
--- a/src/lib/components/Reader/Reader.svelte
+++ b/src/lib/components/Reader/Reader.svelte
@@ -1,11 +1,23 @@
+
{#if volume && pages}
- (page = 1)} class="hover:text-primary-600" />
+ changePage($settings.rightToLeft ? pages.length : 1, true)}
+ class="hover:text-primary-600"
+ />
(page = pages.length)}
+ on:click={() => changePage($settings.rightToLeft ? 1 : pages.length, true)}
class="hover:text-primary-600"
/>
-
+
-
-
- {#if !$settings.singlePageView && index + 1 < pages.length}
-
- {/if}
-
-
-
+
(hidden = true)} class="mb-4 dark:text-white" />
+
+
+
{#each toggles as { key, text, value }}
updateSetting(key, !value)}
>{text}
-
+
diff --git a/src/lib/panzoom/util.ts b/src/lib/panzoom/util.ts
index 36a4692..c80b1fd 100644
--- a/src/lib/panzoom/util.ts
+++ b/src/lib/panzoom/util.ts
@@ -1,6 +1,7 @@
+import { settings, type ZoomModes } from '$lib/settings';
import panzoom from 'panzoom';
import type { PanZoom } from 'panzoom';
-import { writable } from 'svelte/store';
+import { get, writable } from 'svelte/store';
let pz: PanZoom | undefined;
let container: HTMLElement | undefined;
@@ -95,6 +96,7 @@ export function zoomFitToWidth() {
const scale =
(1 / pz.getTransform().scale) * (innerWidth / container.offsetWidth);
+
pz.moveTo(0, 0);
pz.zoomTo(0, 0, scale);
panAlign('center', 'top');
@@ -114,16 +116,24 @@ export function zoomFitToScreen() {
panAlign('center', 'center');
}
-export function zoomDefault(zoomDefault: any) {
+export function keepZoomStart() {
+ panAlign('center', 'top');
+}
+
+export function zoomDefault() {
+ const zoomDefault = get(settings).zoomDefault
switch (zoomDefault) {
- case 'fit to screen':
+ case 'zoomFitToScreen':
zoomFitToScreen();
- break;
- case 'fit to width':
+ return;
+ case 'zoomFitToWidth':
zoomFitToWidth();
- break;
- case 'original size':
+ return;
+ case 'zoomOriginal':
zoomOriginal();
- break;
+ return;
+ case 'keepZoomStart':
+ keepZoomStart();
+ return;
}
}
\ No newline at end of file
diff --git a/src/lib/settings/index.ts b/src/lib/settings/index.ts
index 15fd4dd..e495c4d 100644
--- a/src/lib/settings/index.ts
+++ b/src/lib/settings/index.ts
@@ -1,7 +1,8 @@
import { browser } from "$app/environment";
+import { zoomDefault } from "$lib/panzoom";
import { writable } from "svelte/store";
-type FontSize = 'auto' |
+export type FontSize = 'auto' |
'9' |
'10' |
'11' |
@@ -16,8 +17,13 @@ type FontSize = 'auto' |
'48' |
'60'
-type Settings = {
- zoomMode: 'keep' | 'something'
+export type ZoomModes = 'zoomFitToScreen' |
+ 'zoomFitToWidth' |
+ 'zoomOriginal' |
+ 'keepZoom' |
+ 'keepZoomStart'
+
+export type Settings = {
rightToLeft: boolean;
singlePageView: boolean;
textEditable: boolean;
@@ -28,12 +34,12 @@ type Settings = {
hasCover: boolean;
backgroundColor: string;
fontSize: FontSize;
+ zoomDefault: ZoomModes;
};
export type SettingsKey = keyof Settings
const defaultSettings: Settings = {
- zoomMode: 'keep',
rightToLeft: true,
singlePageView: true,
hasCover: false,
@@ -43,7 +49,8 @@ const defaultSettings: Settings = {
boldFont: false,
pageNum: true,
backgroundColor: '#0d0d0f',
- fontSize: 'auto'
+ fontSize: 'auto',
+ zoomDefault: 'zoomFitToScreen'
}
const stored = browser ? window.localStorage.getItem('settings') : undefined