%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/JsWidget.php |
<?php namespace humhub\widgets; use humhub\components\Widget; use humhub\libs\Html; use yii\helpers\ArrayHelper; use yii\helpers\Url; /** * Description of JsWidget * * @author buddha * @since 1.2 */ class JsWidget extends Widget { /** * Defines the select input field id * * @var string */ public $id; /** * Js Widget namespace * @var string */ public $jsWidget; /* * Used to overwrite select input field attributes. This array can be used for overwriting * texts, or other picker settings. * * @var [] */ public $options = []; /** * Event action handler. * @var [] */ public $events = []; /** * Auto init flag. * @var mixed */ public $init = false; /** * Used to hide/show the actual input element. * @var boolean */ public $visible = true; /** * @var string html container element. */ public $container = 'div'; /** * If set to true or 'fast', 'slow' or a integer duration in milliseconds the jsWidget will fade in the root element after initialization. * This can be handy for widgets which need some time to initialize. * * @var bool|string|integer * @since 1.2.2 */ public $fadeIn = false; /** * @var string html content. */ public $content; /** * Default implementation of JsWidget. * This will render a widget html element specified by $container and $content and the given $options/$event attributes. * This function should be overwritten for widgets with a more complex rendering. * * @return string */ public function run() { return Html::tag($this->container, $this->content, $this->getOptions()); } /** * Assembles all widget attributes and data settings of this widget. * Those attributes/options are are normally transfered to the js client by ordinary html attributes * or by using data-* attributes. * * @return array */ protected function getOptions() { $attributes = $this->getAttributes(); $attributes['data'] = $this->getData(); $attributes['id'] = $this->getId(); $this->setDefaultOptions(); $result = ArrayHelper::merge($attributes, $this->options); if (!$this->visible) { Html::addCssStyle($result, 'display:none'); } return $result; } /** * Sets some default data options required by all widgets as the widget implementation * and the widget events and initialization trigger. */ public function setDefaultOptions() { // Set event data foreach ($this->events as $event => $handler) { $this->options['data']['widget-action-' . $event] = $handler; } if($this->jsWidget) { $this->options['data']['ui-widget'] = $this->jsWidget; } if($this->fadeIn) { $fadeIn = $this->fadeIn === true ? 'fast' : $this->fadeIn; $this->options['data']['widget-fade-in'] = $fadeIn; $this->visible = false; } if (!empty($this->init)) { $this->options['data']['ui-init'] = $this->init; } if($this instanceof Reloadable) { $reloadUrl = $this->getReloadUrl(); if(is_array($reloadUrl)) { $reloadUrl['reload'] = true; } $this->options['data']['widget-reload-url'] = is_array($reloadUrl) ? Url::toRoute($reloadUrl) : $reloadUrl; } } /** * Returns the html id of this widget, if no id is set this function will generate * an id if $autoGenerate is set to true (default). * * Note that the id is automatically included within the <code>getOptions()<code> function. * * @param boolean $autoGenerate * @return string */ public function getId($autoGenerate = true) { if ($this->id) { return $this->id; } return $this->id = parent::getId($autoGenerate); } /** * Returns an array of data-* attributes to configure your clientside js widget. * Note that this function does not require to add the data- prefix. This will be done by Yii. * * The data-* attributes should be inserted to the widgets root element. * * @return [] */ protected function getData() { return []; } /** * Returns all html attributes for used by this widget and will normally inserted in the widgets root html element. * @return [] */ protected function getAttributes() { return []; } }