diff --git a/Jellyfin.Plugin.Seasonals/Web/easter.js b/Jellyfin.Plugin.Seasonals/Web/easter.js index 28da845..c30011d 100644 --- a/Jellyfin.Plugin.Seasonals/Web/easter.js +++ b/Jellyfin.Plugin.Seasonals/Web/easter.js @@ -245,6 +245,7 @@ function animateRabbit(rabbit) { isAnimating = false; rabbitTimeout = setTimeout(() => { + if (!document.body.contains(rabbit)) return; animateRabbit(document.querySelector('#rabbit')); }, restTime); return; diff --git a/Jellyfin.Plugin.Seasonals/Web/fireworks.js b/Jellyfin.Plugin.Seasonals/Web/fireworks.js index 290ab81..43ae998 100644 --- a/Jellyfin.Plugin.Seasonals/Web/fireworks.js +++ b/Jellyfin.Plugin.Seasonals/Web/fireworks.js @@ -162,6 +162,7 @@ function startFireworks() { } fireworksInterval = setInterval(() => { + if (!document.body.contains(fireworkContainer)) { clearInterval(fireworksInterval); return; } const randomCount = Math.floor(Math.random() * maxFireworks) + minFireworks; for (let i = 0; i < randomCount; i++) { setTimeout(() => { diff --git a/Jellyfin.Plugin.Seasonals/Web/friday13.js b/Jellyfin.Plugin.Seasonals/Web/friday13.js index 0d7ffca..0f3d32e 100644 --- a/Jellyfin.Plugin.Seasonals/Web/friday13.js +++ b/Jellyfin.Plugin.Seasonals/Web/friday13.js @@ -61,12 +61,12 @@ function createFriday13(container) { cat.parentNode.removeChild(cat); } // Respawn with random delay between 5 to 25 seconds - setTimeout(spawnCat, Math.random() * 20000 + 5000); + setTimeout(() => { if (document.body.contains(container)) spawnCat(); }, Math.random() * 20000 + 5000); }, (catWalkDurationSeconds * 1000) + 500); // Wait for duration + 500ms safety margin } // Initial spawn with random delay - setTimeout(spawnCat, Math.random() * 5000); + setTimeout(() => { if (document.body.contains(container)) spawnCat(); }, Math.random() * 5000); } function initializeFriday13() { diff --git a/Jellyfin.Plugin.Seasonals/Web/marioday.js b/Jellyfin.Plugin.Seasonals/Web/marioday.js index d8c0943..5fb5d6a 100644 --- a/Jellyfin.Plugin.Seasonals/Web/marioday.js +++ b/Jellyfin.Plugin.Seasonals/Web/marioday.js @@ -51,8 +51,9 @@ function createMarioDay(container) { container.appendChild(wrapper); // Periodically throw out an 8-bit coin - setInterval(() => { - if (!document.querySelector('.marioday-container')) return; + const intervalId = setInterval(() => { + if (!document.body.contains(container)) { clearInterval(intervalId); return; } + if (container.style.display === 'none') return; const coin = document.createElement('div'); coin.className = 'mario-coin'; diff --git a/Jellyfin.Plugin.Seasonals/Web/matrix.js b/Jellyfin.Plugin.Seasonals/Web/matrix.js index d89b245..1ff8fb9 100644 --- a/Jellyfin.Plugin.Seasonals/Web/matrix.js +++ b/Jellyfin.Plugin.Seasonals/Web/matrix.js @@ -136,6 +136,7 @@ function createElements() { for(let i=0; i