diff --git a/web/src/components/save/Omnibox.svelte b/web/src/components/save/Omnibox.svelte index f4d80b54..59e98b5a 100644 --- a/web/src/components/save/Omnibox.svelte +++ b/web/src/components/save/Omnibox.svelte @@ -1,4 +1,6 @@ <script lang="ts"> + import { SvelteComponent, tick } from "svelte"; + import IconLink from "@tabler/icons-svelte/IconLink.svelte"; import ClearButton from "$components/save/buttons/ClearButton.svelte"; @@ -17,6 +19,8 @@ let link: string = ""; let isFocused = false; + let downloadButton: SvelteComponent; + const validLink = (link: string) => { try { return /^https:/i.test(new URL(link).protocol); @@ -26,10 +30,13 @@ }; const pasteClipboard = () => { - navigator.clipboard.readText().then((text) => { + navigator.clipboard.readText().then(async (text) => { let matchLink = text.match(/https:\/\/[^\s]+/g); if (matchLink) { link = matchLink[0]; + + await tick(); // wait for button to render + downloadButton.download(link); } }); }; @@ -62,7 +69,7 @@ <ClearButton click={() => (link = "")} /> {/if} {#if validLink(link)} - <DownloadButton url={link} /> + <DownloadButton url={link} bind:this={downloadButton} /> {/if} </div> diff --git a/web/src/components/save/buttons/DownloadButton.svelte b/web/src/components/save/buttons/DownloadButton.svelte index aaa9768f..171a2f82 100644 --- a/web/src/components/save/buttons/DownloadButton.svelte +++ b/web/src/components/save/buttons/DownloadButton.svelte @@ -11,7 +11,7 @@ const ua = navigator.userAgent.toLowerCase(); const isIOS = ua.includes("iphone os") || (ua.includes("mac os") && navigator.maxTouchPoints > 0); - export const changeDownloadButton = (state: string) => { + const changeDownloadButton = (state: string) => { isDisabled = true; switch(state) { case "think": @@ -29,7 +29,7 @@ } } - export const restoreDownloadButton = () => { + const restoreDownloadButton = () => { setTimeout(() => { buttonText = '>>'; isDisabled = false; @@ -45,7 +45,7 @@ } // alerts are temporary, we don't have an error popup yet >_< - const download = async (link: string) => { + export const download = async (link: string) => { changeDownloadButton("think"); const response = await API.request(link);