|
1 | 1 | <script>
|
2 |
| - import { assets } from '$app/paths'; |
3 | 2 | import TextzeugenSelector from '$lib/components/TextzeugenSelector.svelte';
|
| 3 | + import IIIFViewer from '$lib/components/IIIFViewer.svelte'; |
4 | 4 |
|
5 | 5 | /** @type {import('./$types').PageData} */
|
6 | 6 | export let data;
|
7 | 7 |
|
8 |
| - /** |
9 |
| - * @type {import('openseadragon')} |
10 |
| - */ |
11 |
| - let OpenSeadragon; |
12 |
| -
|
13 |
| - /** |
14 |
| - * @type {import('openseadragon').Viewer[]} |
15 |
| - */ |
16 |
| - let viewer = []; |
17 |
| -
|
18 |
| - const generateViewer = (/** @type {Element} */ node, /** @type {Promise<Object>} */ iiif) => { |
19 |
| - const i = Number(node.id.split('-')[1]); |
20 |
| - if (!iiif) return; |
21 |
| - /** @type {ResizeObserver}*/ |
22 |
| - let observer; |
23 |
| - const createViewer = () => { |
24 |
| - viewer[i] = new OpenSeadragon.Viewer({ |
25 |
| - id: node.id, |
26 |
| - prefixUrl: `${assets}/openseadragon-svg-icons/icons/`, |
27 |
| - navImages: { |
28 |
| - zoomIn: { |
29 |
| - REST: 'zoomin_rest.svg', |
30 |
| - GROUP: 'zoomin_grouphover.svg', |
31 |
| - HOVER: 'zoomin_hover.svg', |
32 |
| - DOWN: 'zoomin_pressed.svg' |
33 |
| - }, |
34 |
| - next: { |
35 |
| - REST: 'next_rest.svg', |
36 |
| - GROUP: 'next_grouphover.svg', |
37 |
| -
|
38 |
| - HOVER: 'next_hover.svg', |
39 |
| - DOWN: 'next_pressed.svg' |
40 |
| - }, |
41 |
| - previous: { |
42 |
| - REST: 'previous_rest.svg', |
43 |
| - GROUP: 'previous_grouphover.svg', |
44 |
| - HOVER: 'previous_hover.svg', |
45 |
| - DOWN: 'previous_pressed.svg' |
46 |
| - }, |
47 |
| - fullpage: { |
48 |
| - REST: 'fullpage_rest.svg', |
49 |
| - GROUP: 'fullpage_grouphover.svg', |
50 |
| - HOVER: 'fullpage_hover.svg', |
51 |
| - DOWN: 'fullpage_pressed.svg' |
52 |
| - }, |
53 |
| - home: { |
54 |
| - REST: 'home_rest.svg', |
55 |
| - GROUP: 'home_grouphover.svg', |
56 |
| - HOVER: 'home_hover.svg', |
57 |
| - DOWN: 'home_pressed.svg' |
58 |
| - }, |
59 |
| - zoomOut: { |
60 |
| - REST: 'zoomout_rest.svg', |
61 |
| - GROUP: 'zoomout_grouphover.svg', |
62 |
| - HOVER: 'zoomout_hover.svg', |
63 |
| - DOWN: 'zoomout_pressed.svg' |
64 |
| - }, |
65 |
| - rotateleft: { |
66 |
| - REST: 'rotateleft_rest.svg', |
67 |
| - GROUP: 'rotateleft_grouphover.svg', |
68 |
| - HOVER: 'rotateleft_hover.svg', |
69 |
| - DOWN: 'rotateleft_pressed.svg' |
70 |
| - }, |
71 |
| - rotateright: { |
72 |
| - REST: 'rotateright_rest.svg', |
73 |
| - GROUP: 'rotateright_grouphover.svg', |
74 |
| - HOVER: 'rotateright_hover.svg', |
75 |
| - DOWN: 'rotateright_pressed.svg' |
76 |
| - }, |
77 |
| - flip: { |
78 |
| - REST: 'flip_rest.svg', |
79 |
| - GROUP: 'flip_grouphover.svg', |
80 |
| - HOVER: 'flip_hover.svg', |
81 |
| - DOWN: 'flip_pressed.svg' |
82 |
| - } |
83 |
| - }, |
84 |
| - sequenceMode: false |
85 |
| - }); |
86 |
| - iiif.then((iiif) => { |
87 |
| - if (iiif === 'not found') return; |
88 |
| - viewer[i].open(iiif); |
89 |
| - }); |
90 |
| - observer = new ResizeObserver((_entries) => { |
91 |
| - setTimeout(() => { |
92 |
| - viewer[i].viewport.goHome(false); |
93 |
| - }, 50); |
94 |
| - }); |
95 |
| - observer.observe(node); |
96 |
| - }; |
97 |
| - if (!OpenSeadragon) { |
98 |
| - import('openseadragon').then((r) => { |
99 |
| - OpenSeadragon = r.default; |
100 |
| - createViewer(); |
101 |
| - }); |
102 |
| - } else { |
103 |
| - createViewer(); |
104 |
| - } |
105 |
| -
|
106 |
| - return { |
107 |
| - /** |
108 |
| - * @param {Promise<Object>} iiif |
109 |
| - */ |
110 |
| - update(iiif) { |
111 |
| - iiif.then((iiif) => viewer[i].open(iiif)); |
112 |
| - }, |
113 |
| - destroy() { |
114 |
| - viewer[i].destroy(); |
115 |
| - if (observer) { |
116 |
| - observer.disconnect(); |
117 |
| - } |
118 |
| - } |
119 |
| - }; |
120 |
| - }; |
121 |
| -
|
122 | 8 | const generateLabel = (/** @type {String[]} */ sigla) => {
|
123 | 9 | const info = [...data.codices, ...data.fragments];
|
124 | 10 | sigla.map((s) => {
|
|
238 | 124 | </section>
|
239 | 125 | <section>
|
240 | 126 | {#if typeof data.iiif === 'object'}
|
241 |
| - <div id="viewer-{i}" class="w-full h-full" use:generateViewer={data.iiif[i]}></div> |
| 127 | + <IIIFViewer iiif={data.iiif[i]} /> |
242 | 128 | {/if}
|
243 | 129 | </section>
|
244 | 130 | </article>
|
|
0 commit comments