%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/xj/yii2-jplayer-widget/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/xj/yii2-jplayer-widget/JplayerWidget.php |
<?php
namespace xj\jplayer;
use Yii;
use yii\base\Widget;
use yii\web\JsExpression;
use yii\helpers\Json;
use yii\helpers\ArrayHelper;
use xj\jplayer\CommonAssets;
/**
* JPlayer Widget
* @author xjflyttp <xjflyttp@gmail.com>
*/
class JplayerWidget extends Widget
{
/**
* render to jquery selector
* @var string
* @see http://jplayer.org/latest/developer-guide/#jPlayer-constructor
* @example
* #id-name
* .class-name
*/
public $selectorJplayer;
/**
* cssSelectorAncestor
* @var string
* @see http://jplayer.org/latest/developer-guide/#jPlayer-option-cssSelectorAncestor
*/
public $selectorAncestor;
/**
* render Tag Enable
* @var bool
*/
public $tagEnable = true;
/**
* Tag ID
* @var string
*/
public $tagId;
/**
* Tag Class
* @var string
*/
public $tagClass;
/**
* Tag Style
* @var type
*/
public $tagStyle;
/**
* render view
* @var string
*/
public $tagView;
/**
* jplayer options
* @var array
*/
public $jsOptions = [];
/**
* Assets Publish Dir
* @var string
*/
private $assetPublishDir;
/**
* JPlayer onReady Event
* @var string
* @see http://jplayer.org/latest/developer-guide/#jPlayer-option-ready
*/
public $onReady;
/**
* setMedia Options
* @var []
* @see http://jplayer.org/latest/developer-guide/#jPlayer-setMedia
*/
public $mediaOptions = [];
/**
* Skin Assets
* @var string
* @example
* xj\jplayer\skins\BlueAssets
* xj\jplayer\skins\PinkAssets
* xj\jplayer\skins\CircleAssets
*/
public $skinAsset = 'xj\jplayer\skins\BlueAssets';
/**
* Renders the widget.
*/
public function run()
{
$this->registerAssets();
$this->setOptions();
$this->setEvent();
$this->renderTag();
$this->registerScripts();
parent::run();
}
/**
* register Assets/Css
*/
protected function registerAssets()
{
$this->loadSkinAssets();
$asset = CommonAssets::register($this->view);
$this->assetPublishDir = $asset->baseUrl;
}
protected function loadSkinAssets()
{
if ($this->skinAsset !== null) {
$funcName = $this->skinAsset . '::register';
call_user_func($funcName, $this->view);
}
}
protected function setOptions()
{
$this->jsOptions = ArrayHelper::merge($this->jsOptions, [
'swfPath' => $this->assetPublishDir . '/js',
]);
$this->jsOptions['cssSelectorAncestor'] = '#' . $this->getSelectorAncestor();
}
protected function setMediaOptions()
{
if ($this->mediaOptions !== null) {
$mediaOptions = Json::encode($this->mediaOptions);
$readyFunction = "function () {\$(this).jPlayer(\"setMedia\", {$mediaOptions});}";
$this->jsOptions['ready'] = new JsExpression($readyFunction);
}
}
protected function setEvent()
{
if ($this->onReady !== null) {
$this->jsOptions['ready'] = new JsExpression($this->onReady);
}
}
/**
* get Default Selector JPlayer
* @return string
*/
protected function getDefaultSelectorJplayer()
{
return "jquery_jplayer_" . $this->getId();
}
/**
* get Default Selector Ancestor
* @return string
*/
protected function getDefaultSelectorAncestor()
{
return "jp_container_" . $this->getId();
}
/**
* get Selector JPlayer
* @return string
*/
public function getSelectorJplayer()
{
return $this->selectorJplayer === null ? $this->getDefaultSelectorJplayer() : $this->selectorJplayer;
}
/**
* get Selector Ancestor
* @return string
*/
public function getSelectorAncestor()
{
return $this->selectorAncestor === null ? $this->getDefaultSelectorAncestor() : $this->selectorAncestor;
}
protected function renderTag()
{
if ($this->tagEnable === true) {
echo $this->getTagHtml();
}
}
protected function getTagHtml()
{
$ancestorId = $this->getSelectorAncestor();
$jplayerId = $this->getSelectorJplayer();
return $this->render($this->tagView, [
'ancestorId' => $ancestorId,
'ancestorClass' => $this->tagClass,
'ancestorStyle' => $this->tagStyle,
'jplayerId' => $jplayerId,
]);
}
protected function registerScripts()
{
$jplayerSelector = '#' . $this->getSelectorJplayer();
$jsonOptions = Json::encode($this->jsOptions);
$script = "\$(\"{$jplayerSelector}\").jPlayer({$jsonOptions});";
$this->view->registerJs($script);
}
}