From 0d87e1e064a57e4819ba96b8ce3e0f77ea79fbba Mon Sep 17 00:00:00 2001 From: Maya Date: Wed, 10 Sep 2025 10:50:05 +0300 Subject: [PATCH] feat: allow pasting files --- src/routes/+layout.svelte | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 23913db..b98c056 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -16,6 +16,7 @@ dropping, vertdLoaded, locale, + updateLocale, } from "$lib/store/index.svelte"; import "$lib/css/app.scss"; import { browser } from "$app/environment"; @@ -58,18 +59,39 @@ dropping.set(drag); }; + const handlePaste = (e: ClipboardEvent) => { + const clipboardData = e.clipboardData; + if (!clipboardData || !clipboardData.files.length) return; + e.preventDefault(); + + if (page.url.pathname !== "/jpegify/") { + const oldLength = files.files.length; + files.add(clipboardData.files); + if (oldLength !== files.files.length) goto("/convert"); + } else { + files.add(clipboardData.files); + } + }; + + + onMount(() => { initAnimStores(); - isMobile.set(window.innerWidth <= 768); - window.addEventListener("resize", () => { + const handleResize = () => { isMobile.set(window.innerWidth <= 768); - }); + }; + + isMobile.set(window.innerWidth <= 768); // initial page load + window.addEventListener("resize", handleResize); // handle window resize + window.addEventListener("paste", handlePaste); effects.set(localStorage.getItem("effects") !== "false"); // defaults to true if not set theme.set( (localStorage.getItem("theme") as "light" | "dark") || "light", ); + updateLocale(localStorage.getItem("locale") || "en"); + Settings.instance.load(); fetch(`${Settings.instance.settings.vertdURL}/api/version`).then( @@ -77,6 +99,11 @@ if (res.ok) $vertdLoaded = true; }, ); + + return () => { + window.removeEventListener("paste", handlePaste); + window.removeEventListener("resize", handleResize); + }; }); $effect(() => {