113 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * @author          Tassos Marinos <info@tassos.gr>
 | |
|  * @link            http://www.tassos.gr
 | |
|  * @copyright       Copyright © 2020 Tassos Marinos All Rights Reserved
 | |
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
 | |
|  */
 | |
| 
 | |
| namespace NRFramework\Widgets;
 | |
| 
 | |
| defined('_JEXEC') or die;
 | |
| 
 | |
| use Joomla\CMS\HTML\HTMLHelper;
 | |
| use Joomla\CMS\Factory;
 | |
| 
 | |
| abstract class Video extends Widget
 | |
| {
 | |
| 	/**
 | |
| 	 * Widget default options
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	protected $widget_options = [
 | |
| 		// Video URL
 | |
| 		'value' => '',
 | |
| 
 | |
| 		// Video width
 | |
| 		'width' => '480px',
 | |
| 
 | |
| 		// Video height
 | |
| 		'height' => '270px',
 | |
| 
 | |
| 		// Whether the video will autoplay
 | |
| 		'autoplay' => false,
 | |
| 
 | |
| 		// Whether the video will autopause whenever we scroll and it hides from our viewport
 | |
| 		'autopause' => false
 | |
| 	];
 | |
| 
 | |
| 	public function __construct($options = [])
 | |
| 	{
 | |
| 		$this->widget_options = array_merge($this->widget_options, $this->video_widget_options);
 | |
| 
 | |
| 		parent::__construct($options);
 | |
| 
 | |
| 		$this->prepare();
 | |
| 
 | |
| 		$this->styles();
 | |
| 	}
 | |
| 
 | |
| 	protected function prepare()
 | |
| 	{}
 | |
| 
 | |
| 	public function render()
 | |
| 	{
 | |
| 		$this->loadMedia();
 | |
| 
 | |
| 		return parent::render();
 | |
| 	}
 | |
| 
 | |
| 	public function styles()
 | |
| 	{
 | |
| 		if (!$this->options['load_css_vars'])
 | |
| 		{
 | |
| 			return;
 | |
| 		}
 | |
| 	
 | |
| 		$controls = [
 | |
|             [
 | |
|                 'property' => '--video-width',
 | |
|                 'value' => $this->options['width']
 | |
|             ],
 | |
|             [
 | |
|                 'property' => '--video-height',
 | |
|                 'value' => $this->options['height']
 | |
|             ]
 | |
| 		];
 | |
| 
 | |
| 		$selector = '.nrf-widget.tf-video.' . $this->options['id'];
 | |
| 		
 | |
| 		$controlsInstance = new \NRFramework\Controls\Controls(null, $selector);
 | |
| 
 | |
|         if (!$controlsCSS = $controlsInstance->generateCSS($controls))
 | |
|         {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         Factory::getDocument()->addStyleDeclaration($controlsCSS);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Loads media files
 | |
| 	 * 
 | |
| 	 * @return  void
 | |
| 	 */
 | |
| 	public function loadMedia()
 | |
| 	{
 | |
| 		if ($this->options['load_stylesheet'])
 | |
| 		{
 | |
| 			HTMLHelper::stylesheet('plg_system_nrframework/widgets/video.css', ['relative' => true, 'version' => 'auto']);
 | |
| 		}
 | |
| 
 | |
| 		HTMLHelper::script('plg_system_nrframework/widgets/video.js', ['relative' => true, 'version' => 'auto']);
 | |
| 
 | |
| 		if (method_exists($this, 'videoAssets'))
 | |
| 		{
 | |
| 			$this->videoAssets();
 | |
| 		}
 | |
| 		
 | |
| 		HTMLHelper::script('plg_system_nrframework/widgets/videos.js', ['relative' => true, 'version' => 'auto']);
 | |
| 	}
 | |
| } |