This commit is contained in:
Mawoka
2023-06-17 17:41:19 +02:00
parent da30beffc2
commit f6962a3044
+34 -2
View File
@@ -6,12 +6,16 @@
<script lang="ts"> <script lang="ts">
import { browser } from '$app/environment'; import { browser } from '$app/environment';
import { fade } from 'svelte/transition';
export let src: string; export let src: string;
export let css_classes = 'max-h-64 h-auto w-auto'; export let css_classes = 'max-h-64 h-auto w-auto';
export let muted = true; export let muted = true;
export let allow_fullscreen = true;
let type: 'img' | 'video' | undefined = undefined; let type: 'img' | 'video' | undefined = undefined;
let img_data;
const get_media = async () => { const get_media = async () => {
if (!browser) { if (!browser) {
return; return;
@@ -23,7 +27,7 @@
} else { } else {
type = 'img'; type = 'img';
const data = await fetch(`/api/v1/storage/download/${src}`); const data = await fetch(`/api/v1/storage/download/${src}`);
return { img_data = {
data: URL.createObjectURL(await data.blob()), data: URL.createObjectURL(await data.blob()),
alt_text: res.headers.get('X-Alt-Text') alt_text: res.headers.get('X-Alt-Text')
}; };
@@ -37,13 +41,27 @@
src; src;
update_url(); update_url();
} }
let fullscreen_open = false;
const open_fullscreen = () => {
if (!allow_fullscreen) {
return;
}
fullscreen_open = true;
};
</script> </script>
{#await media} {#await media}
<p>Placeholder</p> <p>Placeholder</p>
{:then data} {:then data}
{#if type === 'img'} {#if type === 'img'}
<img src={data.data} alt={data.alt_text ?? 'Not available'} class={css_classes} /> <img
src={img_data.data}
alt={img_data.alt_text ?? 'Not available'}
class={css_classes}
on:click={() => open_fullscreen()}
/>
{:else if type === 'video'} {:else if type === 'video'}
<video <video
class={css_classes} class={css_classes}
@@ -61,3 +79,17 @@
<p>Unknown media type</p> <p>Unknown media type</p>
{/if} {/if}
{/await} {/await}
{#if fullscreen_open}
<div
class="fixed top-0 left-0 z-50 w-screen h-screen bg-black bg-opacity-50 fle p-2"
transition:fade={{ duration: 80 }}
on:click={() => (fullscreen_open = false)}
>
<img
src={img_data.data}
alt={img_data.alt_text ?? 'Not available'}
class="object-cover rounded m-auto max-h-full max-w-full"
/>
</div>
{/if}