summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/lib/reader/Reader.svelte
diff options
context:
space:
mode:
authorWolfgang Müller2025-02-18 15:51:14 +0100
committerWolfgang Müller2025-02-18 15:51:14 +0100
commit3f6bd71aaac4277d046485fe8ea2a791ea089cd8 (patch)
treeb07f2bd3096695cf94c7c0b341e4dae150673a6b /frontend/src/lib/reader/Reader.svelte
parentc70a78623a7fe2db2af1efb6a9896097f59855fc (diff)
downloadhircine-3f6bd71aaac4277d046485fe8ea2a791ea089cd8.tar.gz
frontend: Migrate PageView to Svelte 5
Diffstat (limited to 'frontend/src/lib/reader/Reader.svelte')
-rw-r--r--frontend/src/lib/reader/Reader.svelte73
1 files changed, 3 insertions, 70 deletions
diff --git a/frontend/src/lib/reader/Reader.svelte b/frontend/src/lib/reader/Reader.svelte
index b5cc725..2e7e851 100644
--- a/frontend/src/lib/reader/Reader.svelte
+++ b/frontend/src/lib/reader/Reader.svelte
@@ -1,72 +1,10 @@
-<script lang="ts" module>
- import { Layout, type PageFragment } from '$gql/graphql';
- import { getContext, setContext } from 'svelte';
-
- export interface Chunk {
- main: PageFragment;
- secondary?: PageFragment;
- index: number;
- }
-
- class ReaderContext {
- visible = $state(false);
- sidebar = $state(false);
- pages: PageFragment[] = $state([]);
- page = $state(0);
-
- open = (page: number) => {
- this.page = page;
- this.visible = true;
- };
- }
-
- export function initReaderContext() {
- return setContext<ReaderContext>('reader', new ReaderContext());
- }
-
- export function getReaderContext() {
- return getContext<ReaderContext>('reader');
- }
-
- export function partition(pages: PageFragment[], layout: Layout): [Chunk[], number[]] {
- const single = layout === Layout.Single;
- const offset = layout === Layout.DoubleOffset;
-
- const chunks: Chunk[] = [];
- const lookup: number[] = Array<number>(pages.length);
-
- for (let chunkIndex = 0, pageIndex = 0; pageIndex < pages.length; chunkIndex++) {
- const wide = () => pages[pageIndex].image.aspectRatio > 1;
-
- const nextPage = () => {
- lookup[pageIndex] = chunkIndex;
- return pages[pageIndex++];
- };
-
- const offsetFirst = pageIndex === 0 && offset;
- const full = single || wide() || offsetFirst;
-
- const chunk: Chunk = { index: pageIndex, main: nextPage() };
-
- if (!full && pageIndex < pages.length) {
- if (!wide()) {
- chunk.secondary = nextPage();
- }
- }
-
- chunks.push(chunk);
- }
- return [chunks, lookup];
- }
-</script>
-
<script lang="ts">
import { trapFocus } from '$lib/Actions';
+ import { getReaderContext } from '$lib/Reader.svelte';
import { fadeDefault, slideXDefault } from '$lib/Transitions';
import type { Snippet } from 'svelte';
import { fade, slide } from 'svelte/transition';
import CloseReaderButton from './components/CloseReaderButton.svelte';
- import PageIndicator from './components/PageIndicator.svelte';
import ReaderMenuButton from './components/ReaderMenuButton.svelte';
let { sidebar, children }: { sidebar?: Snippet; children?: Snippet } = $props();
@@ -77,7 +15,7 @@
{#if reader.visible}
<div
role="dialog"
- class="fixed bottom-0 left-0 right-0 top-0 z-10 flex h-full w-full bg-black"
+ class="fixed top-0 right-0 bottom-0 left-0 z-10 flex h-full w-full bg-black"
transition:fade={fadeDefault}
use:trapFocus
>
@@ -95,13 +33,8 @@
{/if}
<CloseReaderButton />
</div>
- <div class="absolute bottom-0 right-0 z-10 flex p-1 text-lg">
- <PageIndicator />
- </div>
- <div class="flex grow">
- {@render children?.()}
- </div>
+ {@render children?.()}
</main>
</div>
{/if}