* @link http://www.tassos.gr * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved * @license GNU GPLv3 or later */ namespace NRFramework\Widgets; defined('_JEXEC') or die; use Joomla\CMS\Uri\Uri; use Joomla\CMS\HTML\HTMLHelper; class YouTube extends Video { /** * Widget default options * * @var array */ protected $video_widget_options = [ /** * Set the cover image type. * * Allowed Values: * - none * - auto * - custom */ 'coverImageType' => 'none', // The Cover Image URL when coverImage="custom" 'coverImage' => '', // Whether we allow fullscreen 'fs' => false, // Whether controls will appear in the video 'controls' => true, // Loop 'loop' => false, // Mute 'mute' => false, // Closed Captions 'cc_load_policy' => false, /** * The color that will be used in the player's video progress bar to highlight * the amount of the video that the viewer has already seen. * * Allowed Values: * - red * - white */ 'color' => 'red', // Whether to allow or not keyboard shortcuts 'disablekb' => false, // Start the video from X seconds 'start' => null, // End the video at X seconds 'end' => null, /** * Set whether to show related videos. * * Allowed Values: * 0: Don't show related videos * 1: Show related videos from anywhere */ 'rel' => '1', /** * Set whether to load the video in privacy-enhanced mode. * * When this is enabled, YouTube won't store information about * visitors unless they play the video. */ 'privacy' => false ]; /** * Prepares the widget. * * @return void */ protected function prepare() { $videoDetails = \NRFramework\Helpers\Video::getDetails($this->options['value']); $videoProvider = isset($videoDetails['provider']) ? $videoDetails['provider'] : ''; // Abort if ($videoProvider !== 'youtube') { $this->options['value'] = null; return; } $this->options['css_class'] .= ' youtube'; $videoID = isset($videoDetails['id']) ? $videoDetails['id'] : ''; if ($this->options['coverImageType'] === 'auto') { $this->options['coverImage'] = 'url("https://img.youtube.com/vi/' . $videoID . '/maxresdefault.jpg")'; } else if ($this->options['coverImageType'] === 'custom' && !empty($this->options['coverImage'])) { $coverImage = explode('#', $this->options['coverImage']); $this->options['coverImage'] = 'url("' . Uri::base() . reset($coverImage) . '")'; } $atts = [ 'data-video-id="' . $videoID . '"', 'data-video-controls="' . var_export($this->options['controls'], true) . '"', 'data-video-type="' . $videoProvider . '"', 'data-video-mute="' . var_export($this->options['mute'], true) . '"', 'data-video-loop="' . var_export($this->options['loop'], true) . '"', 'data-video-start="' . $this->options['start'] . '"', 'data-video-end="' . $this->options['end'] . '"', 'data-video-autoplay="' . var_export($this->options['autoplay'], true) . '"', 'data-video-fs="' . var_export($this->options['fs'], true) . '"', 'data-video-autopause="' . var_export($this->options['autopause'], true) . '"', 'data-video-cc="' . var_export($this->options['cc_load_policy'], true) . '"', 'data-video-disablekb="' . var_export($this->options['disablekb'], true) . '"', 'data-video-privacy="' . var_export($this->options['privacy'], true) . '"', 'data-video-rel="' . $this->options['rel'] . '"', 'data-video-color="' . $this->options['color'] . '"' ]; $this->options['atts'] = implode(' ', $atts); } /** * We use the video widget layout file. * * @return string */ public function getName() { return 'video'; } /** * Loads media files * * @return void */ public function videoAssets() { HTMLHelper::script('plg_system_nrframework/widgets/video/youtube.js', ['relative' => true, 'version' => 'auto']); } }