From 5725ace0065812edecfece29617ec2e154b637ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Wed, 6 Jul 2022 20:42:37 +0200 Subject: [PATCH] fix URL changes, re-gimmes, etc. --- src/Player.svelte | 86 ++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/src/Player.svelte b/src/Player.svelte index 0f1ddad..f636549 100644 --- a/src/Player.svelte +++ b/src/Player.svelte @@ -6,15 +6,18 @@ export let audioId; export let videoId; + // @ts-ignore + let ytReady = Boolean(window.YT); + let videoUrl = ""; let audioUrl = ""; - $: videoCode = extract(videoUrl); - $: audioCode = extract(audioUrl); - let videoReady = false; let audioReady = false; + let videoEl; + let audioEl; + let videoPlayer; let audioPlayer; @@ -27,12 +30,7 @@ } } - onMount(async () => { - const tag = document.createElement("script"); - tag.src = "https://www.youtube.com/iframe_api"; - const firstScriptTag = document.getElementsByTagName("script")[0]; - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); - + async function init() { const currentResult = await fetch("grid.php"); if (!currentResult.ok) { alert(currentResult.status); @@ -42,30 +40,56 @@ videoUrl = current.find((link) => link.id == videoId).url; audioUrl = current.find((link) => link.id == audioId).url; + videoEl.innerHTML = ""; + let videoPlayerEl = document.createElement("div"); + videoEl.appendChild(videoPlayerEl); + + // @ts-ignore + videoPlayer = new YT.Player(videoPlayerEl, { + videoId: extract(videoUrl), + events: { + onReady: () => { + videoReady = true; + }, + }, + }); + + audioEl.innerHTML = ""; + let audioPlayerEl = document.createElement("div"); + audioEl.appendChild(audioPlayerEl); + + // @ts-ignore + audioPlayer = new YT.Player(audioPlayerEl, { + videoId: extract(audioUrl), + events: { + onReady: () => { + audioReady = true; + }, + }, + }); + } + + onMount(() => { + const tag = document.createElement("script"); + tag.src = "https://www.youtube.com/iframe_api"; + const firstScriptTag = document.getElementsByTagName("script")[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + // @ts-ignore window.onYouTubeIframeAPIReady = () => { - // @ts-ignore - videoPlayer = new YT.Player("videoPlayer", { - videoId: videoCode, - events: { - onReady: () => { - videoReady = true; - }, - }, - }); - - // @ts-ignore - audioPlayer = new YT.Player("audioPlayer", { - videoId: audioCode, - events: { - onReady: () => { - audioReady = true; - }, - }, - }); + ytReady = true; }; }); + $: { + audioId; + videoId; + + if (ytReady) { + init(); + } + } + function go() { videoPlayer.playVideo(); videoPlayer.mute(); @@ -84,10 +108,10 @@

Video

{#if !videoReady}{/if} -
+

Audio

{#if !audioReady}{/if} -
+
BACK @@ -118,7 +142,7 @@ text-decoration: none; } - #audioPlayer { + :global(#audioPlayer > *) { height: 128px; }