|
5 | 5 | import { Switch } from '@skeletonlabs/skeleton-svelte'; |
6 | 6 | import { base } from '$app/paths'; |
7 | 7 | import { page } from '$app/state'; |
8 | | - import { replaceState } from '$app/navigation'; |
| 8 | + import { goto, replaceState } from '$app/navigation'; |
9 | 9 | import { iiif } from '$lib/constants'; |
10 | 10 |
|
11 | 11 | /** @type {{data: import('./$types').PageData}} */ |
|
62 | 62 | } |
63 | 63 | return link.toString(); |
64 | 64 | }; |
65 | | - let localVerses = $state(Array(data.content?.length).fill(`${data.thirties}.${data.verse}`)); |
66 | | - let targetverses = $state(Array(data.content?.length).fill(`${data.thirties}.${data.verse}`)); |
| 65 | + let localVerses = $state( |
| 66 | + Array(data.content?.length).fill(`${data.thirties}.${data.verse ? data.verse : '01'}`) |
| 67 | + ); |
| 68 | + let targetverses = $state( |
| 69 | + Array(data.content?.length).fill(`${data.thirties}.${data.verse ? data.verse : '01'}`) |
| 70 | + ); |
67 | 71 | const generateLocalPagesFromData = (d) => { |
68 | 72 | return d?.map((c) => { |
69 | 73 | if (typeof c.meta === 'object') { |
|
81 | 85 | if (typeof c.meta === 'object') { |
82 | 86 | let meta = await c.meta; |
83 | 87 | let active = meta.find((m) => m.active); |
84 | | - return await active.iiif; |
| 88 | + return active?.iiif; |
85 | 89 | } |
86 | 90 | }); |
87 | 91 | }; |
88 | 92 | let currentIiif = $state(generateIiifFromData(data.content)); |
89 | 93 | $effect(() => { |
90 | | - localVerses = Array(data.content?.length).fill(`${data.thirties}.${data.verse}`); |
91 | | - targetverses = Array(data.content?.length).fill(`${data.thirties}.${data.verse}`); |
| 94 | + localVerses = Array(data.content?.length).fill( |
| 95 | + `${data.thirties}.${data.verse ? data.verse : '01'}` |
| 96 | + ); |
| 97 | + targetverses = Array(data.content?.length).fill( |
| 98 | + `${data.thirties}.${data.verse ? data.verse : '01'}` |
| 99 | + ); |
92 | 100 | localPages = generateLocalPagesFromData(data.content); |
93 | 101 | currentIiif = generateIiifFromData(data.content); |
94 | 102 | }); |
|
101 | 109 | const indexCurrent = (await localPages[i]).findIndex( |
102 | 110 | (/** @type {{ id: string; }} */ p) => p.id === pageInfo.id |
103 | 111 | ); |
| 112 | + const pageArray = await localPages[i]; |
104 | 113 | // Don't switch the iiif viewer on page change, just on click |
105 | | - // localPages[i][indexCurrent]?.iiif.then((/** @type {any} */ iiif) => { |
| 114 | + //pageArray[indexCurrent]?.iiif.then((/** @type {any} */ iiif) => { |
106 | 115 | // currentIiif[i] = iiif; |
107 | 116 | // }); |
108 | 117 | const createObject = (/** @type {string} */ id) => { |
|
114 | 123 | }; |
115 | 124 | }; |
116 | 125 |
|
117 | | - //switch statement for the cases -1, 0, localPages[i].length |
| 126 | + //switch statement for the cases -1, 0,pageArray.length |
118 | 127 | switch (indexCurrent) { |
119 | 128 | case -1: |
120 | | - console.error('current page not found in localPages', pageInfo.id); |
| 129 | + console.error('current page not found in localPages', pageInfo); |
121 | 130 | break; |
122 | 131 | case 0: |
123 | 132 | if (pageInfo.previous) { |
124 | | - localPages[i] = [createObject(pageInfo.previous), ...(await localPages[i])]; |
| 133 | + localPages[i] = [createObject(pageInfo.previous), ...pageArray]; |
125 | 134 | } |
126 | 135 | break; |
127 | | - case localPages[i].length - 1: |
| 136 | + case pageArray.length - 1: |
128 | 137 | if (pageInfo.next) { |
129 | | - localPages[i] = [...(await localPages[i]), createObject(pageInfo.next)]; |
| 138 | + localPages[i] = [...pageArray, createObject(pageInfo.next)]; |
130 | 139 | } |
131 | 140 | break; |
132 | 141 | } |
| 142 | + return true; |
133 | 143 | }; |
134 | 144 | </script> |
135 | 145 |
|
|
161 | 171 | </section> |
162 | 172 | {#if data.content} |
163 | 173 | <div class="grid grid-cols-[repeat(auto-fit,minmax(550px,1fr))] gap-4"> |
164 | | - {#each data.content as content, i} |
| 174 | + {#each data.content as content, i (content.sigla)} |
165 | 175 | <article |
166 | 176 | class="grid grid-cols-[repeat(auto-fit,minmax(500px,1fr))] gap-4 preset-filled-surface-500 my-4 py-4 px-8 rounded-xl" |
167 | 177 | > |
|
203 | 213 | {#await localPages[i]} |
204 | 214 | Lade Text... |
205 | 215 | {:then pages} |
206 | | - <TextzeugenContent |
207 | | - {pages} |
208 | | - targetverse={targetverses[i]} |
209 | | - localVerseChange={(verse) => { |
210 | | - localVerses[i] = verse; |
211 | | - if (synchro) { |
212 | | - const indexOfOther = localVerses.findIndex((v) => v != verse); |
213 | | - if (indexOfOther != -1) { |
214 | | - localVerses[indexOfOther] = verse; |
215 | | - targetverses[indexOfOther] = verse; |
| 216 | + {#if pages?.length && pages[0].id} |
| 217 | + <TextzeugenContent |
| 218 | + {pages} |
| 219 | + targetverse={targetverses[i]} |
| 220 | + localVerseChange={(verse) => { |
| 221 | + localVerses[i] = verse; |
| 222 | + if (synchro) { |
| 223 | + const indexOfOther = localVerses.findIndex((v) => v != verse); |
| 224 | + if (indexOfOther != -1) { |
| 225 | + localVerses[indexOfOther] = verse; |
| 226 | + targetverses[indexOfOther] = verse; |
| 227 | + } |
216 | 228 | } |
217 | | - } |
218 | | - replaceState( |
219 | | - `${base}/textzeugen/${page.params.sigla}/${verse.replace('.', '/')}?${page.url.searchParams.toString()}`, |
220 | | - {} |
221 | | - ); |
222 | | - }} |
223 | | - localPageChange={( |
224 | | - /** @type {{ id: string; previous: string; next: string; }} */ pageinfo |
225 | | - ) => checklocalPages(pageinfo, i, content.sigla)} |
226 | | - localIiifChange={(/** @type {Object} */ e) => (currentIiif[i] = e)} |
227 | | - /> |
| 229 | + replaceState( |
| 230 | + `${base}/textzeugen/${page.params.sigla}/${verse.replace('.', '/')}?${page.url.searchParams.toString()}`, |
| 231 | + {} |
| 232 | + ); |
| 233 | + }} |
| 234 | + localPageChange={( |
| 235 | + /** @type {{ id: string; previous: string; next: string; }} */ pageinfo |
| 236 | + ) => { |
| 237 | + checklocalPages(pageinfo, i, content.sigla); |
| 238 | + }} |
| 239 | + localIiifChange={(/** @type {Object} */ e) => (currentIiif[i] = e)} |
| 240 | + range={data.ranges.find((r) => r.label === content.sigla).values} |
| 241 | + label={content.sigla} |
| 242 | + /> |
| 243 | + {:else} |
| 244 | + <p class="text-error-500"> |
| 245 | + Keine Daten zum Vers gefunden. Möglicherweise existiert der Vers nicht? <button |
| 246 | + onclick={() => { |
| 247 | + goto( |
| 248 | + `${base}/textzeugen/${page.params.sigla}/${localVerses[i].replace('.', '/')}?${page.url.searchParams.toString()}` |
| 249 | + ); |
| 250 | + }} |
| 251 | + class="btn">aktualisieren</button |
| 252 | + > |
| 253 | + </p> |
| 254 | + {/if} |
228 | 255 | {/await} |
229 | 256 | </section> |
230 | 257 | {#if !(page.url.searchParams.get('iiif')?.split('-')[i] === 'false')} |
|
0 commit comments