From f1381d722a94d6b0fd410651608925e65a15661b Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 6 Mar 2025 15:34:50 -0500 Subject: [PATCH] Fix resource loading issues: add favicon, fix material-bg path, and add video error handling --- docker/showerloop/public/js/video-init.js | 36 ++++++++++++------- docker/showerloop/public/static/favicon.ico | 1 + docker/showerloop/public/static/favicon.svg | 4 +++ .../public/static/videos/hls/blank/blank0.ts | 0 .../public/static/videos/hls/blank/index.m3u8 | 7 ++++ .../chocolate/layouts/partials/head.html | 4 +++ 6 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 docker/showerloop/public/static/favicon.ico create mode 100644 docker/showerloop/public/static/favicon.svg create mode 100644 docker/showerloop/public/static/videos/hls/blank/blank0.ts create mode 100644 docker/showerloop/public/static/videos/hls/blank/index.m3u8 diff --git a/docker/showerloop/public/js/video-init.js b/docker/showerloop/public/js/video-init.js index b90523a..9da1d6d 100644 --- a/docker/showerloop/public/js/video-init.js +++ b/docker/showerloop/public/js/video-init.js @@ -2,18 +2,28 @@ * Initialize Video.js players */ document.addEventListener('DOMContentLoaded', function() { - // Wait for Video.js to be loaded - function checkVideoJS() { - if (window.videojs) { - // Initialize any video players on the page - var players = document.querySelectorAll('.video-js'); - players.forEach(function(player) { - videojs(player.id); - }); - } else { - setTimeout(checkVideoJS, 50); - } - } + // Find all video.js players + var videoElements = document.querySelectorAll('.video-js'); - checkVideoJS(); + // Initialize each player with error handling + videoElements.forEach(function(videoElement) { + if (videoElement.id) { + var player = videojs(videoElement.id, { + // Enable responsive mode + responsive: true, + // Provide a default source if none is found + sources: videoElement.querySelector('source') ? undefined : [ + { src: '/static/videos/hls/blank/index.m3u8', type: 'application/x-mpegURL' } + ] + }); + + // Add error handling + player.on('error', function() { + var errorDisplay = videoElement.querySelector('.vjs-error-display'); + if (errorDisplay) { + errorDisplay.innerHTML = '
Video unavailable or still processing. Please check back later.
'; + } + }); + } + }); }); \ No newline at end of file diff --git a/docker/showerloop/public/static/favicon.ico b/docker/showerloop/public/static/favicon.ico new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/docker/showerloop/public/static/favicon.ico @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docker/showerloop/public/static/favicon.svg b/docker/showerloop/public/static/favicon.svg new file mode 100644 index 0000000..115a40a --- /dev/null +++ b/docker/showerloop/public/static/favicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/docker/showerloop/public/static/videos/hls/blank/blank0.ts b/docker/showerloop/public/static/videos/hls/blank/blank0.ts new file mode 100644 index 0000000..e69de29 diff --git a/docker/showerloop/public/static/videos/hls/blank/index.m3u8 b/docker/showerloop/public/static/videos/hls/blank/index.m3u8 new file mode 100644 index 0000000..f28361f --- /dev/null +++ b/docker/showerloop/public/static/videos/hls/blank/index.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-TARGETDURATION:1 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:1.000, +blank0.ts +#EXT-X-ENDLIST \ No newline at end of file diff --git a/docker/showerloop/public/themes/chocolate/layouts/partials/head.html b/docker/showerloop/public/themes/chocolate/layouts/partials/head.html index 9688fc4..696d3cf 100644 --- a/docker/showerloop/public/themes/chocolate/layouts/partials/head.html +++ b/docker/showerloop/public/themes/chocolate/layouts/partials/head.html @@ -171,4 +171,8 @@ + + + +