diff --git a/src/lib/components/Reader/Reader.svelte b/src/lib/components/Reader/Reader.svelte index 6f5c5f8..b7fbbac 100644 --- a/src/lib/components/Reader/Reader.svelte +++ b/src/lib/components/Reader/Reader.svelte @@ -16,6 +16,8 @@ import { page as pageStore } from '$app/stores'; import SettingsButton from './SettingsButton.svelte'; + // TODO: Refactor this whole mess + $: volume = $catalog ?.find((item) => item.id === $pageStore.params.manga) ?.manga.find((item) => item.mokuroData.volume_uuid === $pageStore.params.volume); diff --git a/src/lib/components/Settings/ReaderSelects.svelte b/src/lib/components/Settings/Reader/ReaderSelects.svelte similarity index 100% rename from src/lib/components/Settings/ReaderSelects.svelte rename to src/lib/components/Settings/Reader/ReaderSelects.svelte diff --git a/src/lib/components/Settings/ReaderSettings.svelte b/src/lib/components/Settings/Reader/ReaderSettings.svelte similarity index 79% rename from src/lib/components/Settings/ReaderSettings.svelte rename to src/lib/components/Settings/Reader/ReaderSettings.svelte index 677db6f..5d13fd7 100644 --- a/src/lib/components/Settings/ReaderSettings.svelte +++ b/src/lib/components/Settings/Reader/ReaderSettings.svelte @@ -2,10 +2,10 @@ import { AccordionItem } from 'flowbite-svelte'; import ReaderSelects from './ReaderSelects.svelte'; import ReaderToggles from './ReaderToggles.svelte'; - import { page } from '$app/stores'; + import { isReader } from '$lib/util'; - + Reader
diff --git a/src/lib/components/Settings/ReaderToggles.svelte b/src/lib/components/Settings/Reader/ReaderToggles.svelte similarity index 100% rename from src/lib/components/Settings/ReaderToggles.svelte rename to src/lib/components/Settings/Reader/ReaderToggles.svelte diff --git a/src/lib/components/Settings/Settings.svelte b/src/lib/components/Settings/Settings.svelte index 5a8e01d..d785848 100644 --- a/src/lib/components/Settings/Settings.svelte +++ b/src/lib/components/Settings/Settings.svelte @@ -5,8 +5,9 @@ import { resetSettings } from '$lib/settings'; import { promptConfirmation } from '$lib/util'; import AnkiConnectSettings from './AnkiConnectSettings.svelte'; - import ReaderSettings from './ReaderSettings.svelte'; - import Profiles from './Profiles.svelte'; + import ReaderSettings from './Reader/ReaderSettings.svelte'; + import VolumeSettings from './VolumeSettings.svelte'; + // import Profiles from './Profiles.svelte'; let transitionParams = { x: 320, @@ -42,9 +43,10 @@
+ - +
diff --git a/src/lib/components/Settings/VolumeSettings.svelte b/src/lib/components/Settings/VolumeSettings.svelte new file mode 100644 index 0000000..49abaf2 --- /dev/null +++ b/src/lib/components/Settings/VolumeSettings.svelte @@ -0,0 +1,14 @@ + + +{#if isReader()} + + Volume settings +
sdafsd
+
sdafsd
+
sdafsd
+
+{/if} diff --git a/src/lib/reader/index.ts b/src/lib/reader/index.ts new file mode 100644 index 0000000..1e959a6 --- /dev/null +++ b/src/lib/reader/index.ts @@ -0,0 +1 @@ +// TODO: Make reader navigation less awful \ No newline at end of file diff --git a/src/lib/settings/index.ts b/src/lib/settings/index.ts index f29583a..b6c113f 100644 --- a/src/lib/settings/index.ts +++ b/src/lib/settings/index.ts @@ -1,120 +1,2 @@ -import { browser } from '$app/environment'; -import { zoomDefault } from '$lib/panzoom'; -import { writable } from 'svelte/store'; - -export type FontSize = - | 'auto' - | '9' - | '10' - | '11' - | '12' - | '14' - | '16' - | '18' - | '20' - | '24' - | '32' - | '40' - | '48' - | '60'; - -export type ZoomModes = - | 'zoomFitToScreen' - | 'zoomFitToWidth' - | 'zoomOriginal' - | 'keepZoom' - | 'keepZoomStart'; - -export type Settings = { - rightToLeft: boolean; - singlePageView: boolean; - textEditable: boolean; - textBoxBorders: boolean; - displayOCR: boolean; - boldFont: boolean; - pageNum: boolean; - charCount: boolean; - hasCover: boolean; - mobile: boolean; - backgroundColor: string; - fontSize: FontSize; - zoomDefault: ZoomModes; - ankiConnectSettings: AnkiConnectSettings; -}; - -export type SettingsKey = keyof Settings; - -export type AnkiConnectSettings = { - enabled: boolean; - pictureField: string; - sentenceField: string; - cropImage: boolean; - overwriteImage: boolean; - grabSentence: boolean; -} - -export type AnkiSettingsKey = keyof AnkiConnectSettings; - - -const defaultSettings: Settings = { - rightToLeft: true, - singlePageView: false, - hasCover: false, - displayOCR: true, - textEditable: false, - textBoxBorders: false, - boldFont: false, - pageNum: true, - charCount: false, - mobile: false, - backgroundColor: '#030712', - fontSize: 'auto', - zoomDefault: 'zoomFitToScreen', - ankiConnectSettings: { - enabled: false, - cropImage: false, - grabSentence: false, - overwriteImage: true, - pictureField: 'Picture', - sentenceField: 'Sentence' - } -}; - -const stored = browser ? window.localStorage.getItem('settings') : undefined; -const initialSettings: Settings = stored && browser ? JSON.parse(stored) : defaultSettings; - -export * from './progress'; - -export const settings = writable(initialSettings); - -export function updateSetting(key: SettingsKey, value: any) { - settings.update((settings) => { - return { - ...settings, - [key]: value - }; - }); - zoomDefault(); -} - -export function updateAnkiSetting(key: AnkiSettingsKey, value: any) { - settings.update((settings) => { - return { - ...settings, - ankiConnectSettings: { - ...settings.ankiConnectSettings, - [key]: value - } - }; - }); -} - -export function resetSettings() { - settings.set(defaultSettings); -} - -settings.subscribe((settings) => { - if (browser) { - window.localStorage.setItem('settings', JSON.stringify(settings)); - } -}); +export * from './progress' +export * from './settings' \ No newline at end of file diff --git a/src/lib/settings/profiles.ts b/src/lib/settings/profiles.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/settings/settings.ts b/src/lib/settings/settings.ts new file mode 100644 index 0000000..a574ec5 --- /dev/null +++ b/src/lib/settings/settings.ts @@ -0,0 +1,119 @@ +import { browser } from '$app/environment'; +import { zoomDefault } from '$lib/panzoom'; +import { writable } from 'svelte/store'; + +export type FontSize = + | 'auto' + | '9' + | '10' + | '11' + | '12' + | '14' + | '16' + | '18' + | '20' + | '24' + | '32' + | '40' + | '48' + | '60'; + +export type ZoomModes = + | 'zoomFitToScreen' + | 'zoomFitToWidth' + | 'zoomOriginal' + | 'keepZoom' + | 'keepZoomStart'; + +export type Settings = { + rightToLeft: boolean; + singlePageView: boolean; + textEditable: boolean; + textBoxBorders: boolean; + displayOCR: boolean; + boldFont: boolean; + pageNum: boolean; + charCount: boolean; + hasCover: boolean; + mobile: boolean; + backgroundColor: string; + fontSize: FontSize; + zoomDefault: ZoomModes; + ankiConnectSettings: AnkiConnectSettings; +}; + +export type SettingsKey = keyof Settings; + +export type AnkiConnectSettings = { + enabled: boolean; + pictureField: string; + sentenceField: string; + cropImage: boolean; + overwriteImage: boolean; + grabSentence: boolean; +} + +export type AnkiSettingsKey = keyof AnkiConnectSettings; + + +const defaultSettings: Settings = { + rightToLeft: true, + singlePageView: false, + hasCover: false, + displayOCR: true, + textEditable: false, + textBoxBorders: false, + boldFont: false, + pageNum: true, + charCount: false, + mobile: false, + backgroundColor: '#030712', + fontSize: 'auto', + zoomDefault: 'zoomFitToScreen', + ankiConnectSettings: { + enabled: false, + cropImage: false, + grabSentence: false, + overwriteImage: true, + pictureField: 'Picture', + sentenceField: 'Sentence' + } +}; + +const stored = browser ? window.localStorage.getItem('settings') : undefined; +const initialSettings: Settings = stored && browser ? JSON.parse(stored) : defaultSettings; + + +export const settings = writable(initialSettings); + +export function updateSetting(key: SettingsKey, value: any) { + settings.update((settings) => { + return { + ...settings, + [key]: value + }; + }); + zoomDefault(); +} + +export function updateAnkiSetting(key: AnkiSettingsKey, value: any) { + settings.update((settings) => { + return { + ...settings, + ankiConnectSettings: { + ...settings.ankiConnectSettings, + [key]: value + } + }; + }); +} + +export function resetSettings() { + settings.set(defaultSettings); +} + +settings.subscribe((settings) => { + if (browser) { + window.localStorage.setItem('settings', JSON.stringify(settings)); + } +}); diff --git a/src/lib/util/misc.ts b/src/lib/util/misc.ts index 9635b97..3569330 100644 --- a/src/lib/util/misc.ts +++ b/src/lib/util/misc.ts @@ -1,3 +1,10 @@ +import { page } from "$app/stores"; +import { get } from "svelte/store"; + export function clamp(num: number, min: number, max: number) { return Math.min(Math.max(num, min), max); } + +export function isReader() { + return get(page).route.id === '/[manga]/[volume]' +} \ No newline at end of file