From 2fea58db47a8b0fd32aa93e49e0043ffa0d74cfc Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 30 May 2026 15:22:24 -0500 Subject: [PATCH] feat: add local video mode with media picker and install script - New "Local Video" hero mode with Joomla Media Manager file picker - Install script creates images/heroes/ folder on install/update - Updated showMuteToggle to show for both video and localvideo modes - All language strings (en-US/en-GB, ini + sys.ini) updated with new keys: MODE_LOCALVIDEO, LOCAL_VIDEO_LABEL/DESC, CARD_DELAY, MUTE_TOGGLE Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/language/en-GB/mod_mokojoomhero.ini | 13 +++++++---- src/language/en-GB/mod_mokojoomhero.sys.ini | 21 +++++++++++++---- src/language/en-US/mod_mokojoomhero.ini | 13 +++++++---- src/language/en-US/mod_mokojoomhero.sys.ini | 21 +++++++++++++---- src/mod_mokojoomhero.php | 5 +++- src/mod_mokojoomhero.xml | 14 ++++++++++- src/script.php | 26 +++++++++++++++++++++ src/tmpl/default.php | 4 ++-- 8 files changed, 97 insertions(+), 20 deletions(-) create mode 100644 src/script.php diff --git a/src/language/en-GB/mod_mokojoomhero.ini b/src/language/en-GB/mod_mokojoomhero.ini index 12ee63f..d5db8d0 100644 --- a/src/language/en-GB/mod_mokojoomhero.ini +++ b/src/language/en-GB/mod_mokojoomhero.ini @@ -20,9 +20,10 @@ MOD_MOKOJOOMHERO_SHOW_CARD_DESC="Wrap the content in a card with a white backgro ; Hero mode MOD_MOKOJOOMHERO_MODE_LABEL="Hero Mode" -MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images or a background video." +MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images, an embedded video (YouTube/Vimeo), or a local video file." MOD_MOKOJOOMHERO_MODE_IMAGES="Images" -MOD_MOKOJOOMHERO_MODE_VIDEO="Video" +MOD_MOKOJOOMHERO_MODE_VIDEO="Video (YouTube/Vimeo)" +MOD_MOKOJOOMHERO_MODE_LOCALVIDEO="Local Video" ; Image settings MOD_MOKOJOOMHERO_IMAGE_FOLDER_LABEL="Image Folder" @@ -32,9 +33,13 @@ MOD_MOKOJOOMHERO_IMAGE_COUNT_DESC="How many random images to include in the slid MOD_MOKOJOOMHERO_SLIDE_INTERVAL_LABEL="Slide Interval (ms)" MOD_MOKOJOOMHERO_SLIDE_INTERVAL_DESC="Time between slides in milliseconds (e.g. 5000 = 5 seconds)." -; Video settings +; Video settings (embedded) MOD_MOKOJOOMHERO_VIDEO_FILE_LABEL="Video URL" -MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="Local file path, YouTube URL, or Vimeo URL. Any format works — the module auto-detects the source." +MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="YouTube or Vimeo URL. The module auto-detects the source." + +; Local video settings +MOD_MOKOJOOMHERO_LOCAL_VIDEO_LABEL="Video File" +MOD_MOKOJOOMHERO_LOCAL_VIDEO_DESC="Select a video file from the Media Manager (mp4, webm, ogg)." ; Card delay MOD_MOKOJOOMHERO_CARD_DELAY_LABEL="Card Fade-in Delay (ms)" diff --git a/src/language/en-GB/mod_mokojoomhero.sys.ini b/src/language/en-GB/mod_mokojoomhero.sys.ini index 880b35f..a221749 100644 --- a/src/language/en-GB/mod_mokojoomhero.sys.ini +++ b/src/language/en-GB/mod_mokojoomhero.sys.ini @@ -21,9 +21,10 @@ MOD_MOKOJOOMHERO_SHOW_CARD_DESC="Wrap the content in a card with a white backgro ; Hero mode MOD_MOKOJOOMHERO_MODE_LABEL="Hero Mode" -MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images or a background video." +MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images, an embedded video (YouTube/Vimeo), or a local video file." MOD_MOKOJOOMHERO_MODE_IMAGES="Images" -MOD_MOKOJOOMHERO_MODE_VIDEO="Video" +MOD_MOKOJOOMHERO_MODE_VIDEO="Video (YouTube/Vimeo)" +MOD_MOKOJOOMHERO_MODE_LOCALVIDEO="Local Video" ; Image settings MOD_MOKOJOOMHERO_IMAGE_FOLDER_LABEL="Image Folder" @@ -33,9 +34,21 @@ MOD_MOKOJOOMHERO_IMAGE_COUNT_DESC="How many random images to include in the slid MOD_MOKOJOOMHERO_SLIDE_INTERVAL_LABEL="Slide Interval (ms)" MOD_MOKOJOOMHERO_SLIDE_INTERVAL_DESC="Time between slides in milliseconds (e.g. 5000 = 5 seconds)." -; Video settings +; Video settings (embedded) MOD_MOKOJOOMHERO_VIDEO_FILE_LABEL="Video URL" -MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="Local file path, YouTube URL, or Vimeo URL. Any format works — the module auto-detects the source." +MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="YouTube or Vimeo URL. The module auto-detects the source." + +; Local video settings +MOD_MOKOJOOMHERO_LOCAL_VIDEO_LABEL="Video File" +MOD_MOKOJOOMHERO_LOCAL_VIDEO_DESC="Select a video file from the Media Manager (mp4, webm, ogg)." + +; Card delay +MOD_MOKOJOOMHERO_CARD_DELAY_LABEL="Card Fade-in Delay (ms)" +MOD_MOKOJOOMHERO_CARD_DELAY_DESC="Delay in milliseconds before the content card fades in. Set to 0 for no delay." + +; Mute toggle +MOD_MOKOJOOMHERO_MUTE_TOGGLE_LABEL="Show Mute Toggle" +MOD_MOKOJOOMHERO_MUTE_TOGGLE_DESC="Show a mute/unmute button on the hero video. Videos always start muted (required for autoplay)." ; Hero height MOD_MOKOJOOMHERO_HERO_HEIGHT_LABEL="Hero Height" diff --git a/src/language/en-US/mod_mokojoomhero.ini b/src/language/en-US/mod_mokojoomhero.ini index 0931854..3c5fc91 100644 --- a/src/language/en-US/mod_mokojoomhero.ini +++ b/src/language/en-US/mod_mokojoomhero.ini @@ -20,9 +20,10 @@ MOD_MOKOJOOMHERO_SHOW_CARD_DESC="Wrap the content in a card with a white backgro ; Hero mode MOD_MOKOJOOMHERO_MODE_LABEL="Hero Mode" -MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images or a background video." +MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images, an embedded video (YouTube/Vimeo), or a local video file." MOD_MOKOJOOMHERO_MODE_IMAGES="Images" -MOD_MOKOJOOMHERO_MODE_VIDEO="Video" +MOD_MOKOJOOMHERO_MODE_VIDEO="Video (YouTube/Vimeo)" +MOD_MOKOJOOMHERO_MODE_LOCALVIDEO="Local Video" ; Image settings MOD_MOKOJOOMHERO_IMAGE_FOLDER_LABEL="Image Folder" @@ -32,9 +33,13 @@ MOD_MOKOJOOMHERO_IMAGE_COUNT_DESC="How many random images to include in the slid MOD_MOKOJOOMHERO_SLIDE_INTERVAL_LABEL="Slide Interval (ms)" MOD_MOKOJOOMHERO_SLIDE_INTERVAL_DESC="Time between slides in milliseconds (e.g. 5000 = 5 seconds)." -; Video settings +; Video settings (embedded) MOD_MOKOJOOMHERO_VIDEO_FILE_LABEL="Video URL" -MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="Local file path, YouTube URL, or Vimeo URL. Any format works - the module auto-detects the source." +MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="YouTube or Vimeo URL. The module auto-detects the source." + +; Local video settings +MOD_MOKOJOOMHERO_LOCAL_VIDEO_LABEL="Video File" +MOD_MOKOJOOMHERO_LOCAL_VIDEO_DESC="Select a video file from the Media Manager (mp4, webm, ogg)." ; Hero height MOD_MOKOJOOMHERO_HERO_HEIGHT_LABEL="Hero Height" diff --git a/src/language/en-US/mod_mokojoomhero.sys.ini b/src/language/en-US/mod_mokojoomhero.sys.ini index 0f978d5..8196ed3 100644 --- a/src/language/en-US/mod_mokojoomhero.sys.ini +++ b/src/language/en-US/mod_mokojoomhero.sys.ini @@ -21,9 +21,10 @@ MOD_MOKOJOOMHERO_SHOW_CARD_DESC="Wrap the content in a card with a white backgro ; Hero mode MOD_MOKOJOOMHERO_MODE_LABEL="Hero Mode" -MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images or a background video." +MOD_MOKOJOOMHERO_MODE_DESC="Choose between a slideshow of images, an embedded video (YouTube/Vimeo), or a local video file." MOD_MOKOJOOMHERO_MODE_IMAGES="Images" -MOD_MOKOJOOMHERO_MODE_VIDEO="Video" +MOD_MOKOJOOMHERO_MODE_VIDEO="Video (YouTube/Vimeo)" +MOD_MOKOJOOMHERO_MODE_LOCALVIDEO="Local Video" ; Image settings MOD_MOKOJOOMHERO_IMAGE_FOLDER_LABEL="Image Folder" @@ -33,9 +34,21 @@ MOD_MOKOJOOMHERO_IMAGE_COUNT_DESC="How many random images to include in the slid MOD_MOKOJOOMHERO_SLIDE_INTERVAL_LABEL="Slide Interval (ms)" MOD_MOKOJOOMHERO_SLIDE_INTERVAL_DESC="Time between slides in milliseconds (e.g. 5000 = 5 seconds)." -; Video settings +; Video settings (embedded) MOD_MOKOJOOMHERO_VIDEO_FILE_LABEL="Video URL" -MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="Local file path, YouTube URL, or Vimeo URL. Any format works - the module auto-detects the source." +MOD_MOKOJOOMHERO_VIDEO_FILE_DESC="YouTube or Vimeo URL. The module auto-detects the source." + +; Local video settings +MOD_MOKOJOOMHERO_LOCAL_VIDEO_LABEL="Video File" +MOD_MOKOJOOMHERO_LOCAL_VIDEO_DESC="Select a video file from the Media Manager (mp4, webm, ogg)." + +; Card delay +MOD_MOKOJOOMHERO_CARD_DELAY_LABEL="Card Fade-in Delay (ms)" +MOD_MOKOJOOMHERO_CARD_DELAY_DESC="Delay in milliseconds before the content card fades in. Set to 0 for no delay." + +; Mute toggle +MOD_MOKOJOOMHERO_MUTE_TOGGLE_LABEL="Show Mute Toggle" +MOD_MOKOJOOMHERO_MUTE_TOGGLE_DESC="Show a mute/unmute button on the hero video. Videos always start muted (required for autoplay)." ; Hero height MOD_MOKOJOOMHERO_HERO_HEIGHT_LABEL="Hero Height" diff --git a/src/mod_mokojoomhero.php b/src/mod_mokojoomhero.php index 58a6c2a..a57ed9a 100644 --- a/src/mod_mokojoomhero.php +++ b/src/mod_mokojoomhero.php @@ -37,6 +37,7 @@ $heroContent = $params->get('heroContent', ''); $showCard = (bool) $params->get('showCard', 1); $cardDelay = (int) $params->get('cardDelay', 0); $showMuteToggle = (bool) $params->get('showMuteToggle', 0); +$localVideoFile = $params->get('localVideoFile', ''); // Collect hero images $heroImages = []; @@ -70,7 +71,9 @@ $videoUrl = ''; $youtubeId = ''; $vimeoId = ''; -if ($heroMode === 'video' && $videoFile) { +if ($heroMode === 'localvideo' && $localVideoFile) { + $videoUrl = Uri::root() . ltrim($localVideoFile, '/'); +} elseif ($heroMode === 'video' && $videoFile) { // YouTube: watch, embed, shorts, youtu.be, with optional timestamps/params if (preg_match('/(?:youtube\.com\/(?:watch\?.*v=|embed\/|shorts\/|v\/)|youtu\.be\/)([\w-]{11})/', $videoFile, $m)) { $youtubeId = $m[1]; diff --git a/src/mod_mokojoomhero.xml b/src/mod_mokojoomhero.xml index 655c66b..753d31b 100644 --- a/src/mod_mokojoomhero.xml +++ b/src/mod_mokojoomhero.xml @@ -25,9 +25,12 @@ 01.00.20-dev Displays a random hero image slideshow or background video with content overlaid. Designed for MokoOnyx template. By Moko Consulting. + script.php + mod_mokojoomhero.php mod_mokojoomhero.xml + script.php tmpl language @@ -57,6 +60,7 @@ > + + diff --git a/src/script.php b/src/script.php new file mode 100644 index 0000000..b5edcd1 --- /dev/null +++ b/src/script.php @@ -0,0 +1,26 @@ +?autoplay=1&mute=1&loop=1&playlist=&controls=0&showinfo=0&rel=0&modestbranding=1&playsinline=1&enablejsapi=1&origin=" allow="autoplay; encrypted-media" allowfullscreen> - + @@ -63,7 +63,7 @@ $heightAttr = htmlspecialchars($heroHeight, ENT_QUOTES, 'UTF-8'); - +