%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/BootstrapComponent.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2018 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences * */ namespace humhub\widgets; use humhub\components\Widget; use humhub\libs\Html; use humhub\modules\ui\icon\widgets\Icon; use Yii; use yii\helpers\ArrayHelper; /** * BootstrapComponent is an abstract class used to define bootstrap based ui components and provides common * features as sizing, color, text and alignment configuration. * * This class follows the builder pattern for instantiation and configuration. By default this class provides the following * static initializers: * * - none * - primary * - defaultType * - info * - warn * - danger * * Example: * * ``` * // Set only text * BootstrapComponent::instance('My Label')->right(); * * // Component with primary color and text * BootstrapComponent::primary('My Label'); * ``` * * * * @package humhub\widgets */ abstract class BootstrapComponent extends Widget { const TYPE_PRIMARY = 'primary'; const TYPE_DEFAULT = 'default'; const TYPE_INFO = 'info'; const TYPE_WARNING = 'warning'; const TYPE_DANGER = 'danger'; const TYPE_SUCCESS = 'success'; const TYPE_NONE = 'none'; public $type; public $htmlOptions = []; public $text; public $encode = false; public $_icon; public $_iconRight; public $_visible = true; /** * @param string $text Button text * @return static */ public static function instance($text = null) { return new static(['type' => self::TYPE_NONE, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function none($text = null) { return new static(['type' => self::TYPE_NONE, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function primary($text = null) { return new static(['type' => self::TYPE_PRIMARY, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function defaultType($text = null) { return new static(['type' => self::TYPE_DEFAULT, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function info($text = null) { return new static(['type' => self::TYPE_INFO, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function warning($text = null) { return new static(['type' => self::TYPE_WARNING, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function success($text = null) { return new static(['type' => self::TYPE_SUCCESS, 'text' => $text]); } /** * @param string $text Button text * @return static */ public static function danger($text = null) { return new static(['type' => self::TYPE_DANGER, 'text' => $text]); } /** * @param $color * @param null $text * @return $this */ public static function asColor($color, $text = null) { return static::info($text)->color($color); } public function setType($type) { $this->type = $type; return $this; } /** * @param $text * @return $this */ public function setText($text) { $this->text = $text; return $this; } /** * @param bool $right * @return $this */ public function right($right = true) { if ($right) { Html::removeCssClass($this->htmlOptions, 'pull-left'); Html::addCssClass($this->htmlOptions, 'pull-right'); } else { Html::removeCssClass($this->htmlOptions, 'pull-right'); } return $this; } /** * @param bool $left * @return $this */ public function left($left = true) { if ($left) { Html::removeCssClass($this->htmlOptions, 'pull-right'); Html::addCssClass($this->htmlOptions, 'pull-left'); } else { Html::removeCssClass($this->htmlOptions, 'pull-left'); } return $this; } /** * @return $this */ public function sm() { Html::addCssClass($this->htmlOptions, 'btn-sm'); return $this; } /** * @return $this */ public function lg() { Html::addCssClass($this->htmlOptions, 'btn-lg'); return $this; } /** * @return $this */ public function xs() { Html::addCssClass($this->htmlOptions, 'btn-xs'); return $this; } /** * @param $style * @return $this */ public function style($style) { Html::addCssStyle($this->htmlOptions, $style); return $this; } /** * @param $id * @return $this */ public function id($id) { $this->id = $id; return $this; } /** * Adds an html title attribute * @param $title * @return $this * @since 1.3 */ public function title($title) { return $this->options(['title' => $title]); } /** * Adds an title + tooltip behaviour class * @param $id * @return $this * @since 1.3 */ public function tooltip($title) { return $this->title($title)->cssClass('tt'); } /** * @param $cssClass * @return $this */ public function cssClass($cssClass) { Html::addCssClass($this->htmlOptions, $cssClass); return $this; } /** * @param $options * @return $this */ public function options($options) { if (isset($options['class'])) { $this->cssClass($options['class']); unset($options['class']); } if (isset($options['style'])) { $this->style($options['style']); unset($options['style']); } $this->htmlOptions = ArrayHelper::merge($this->htmlOptions, $options); return $this; } /** * @param $content * @param bool $right * @param bool $raw * @return $this * @throws \Exception */ public function icon($content, $right = false, $raw = false) { if (!empty($content)) { if (!$raw) { $this->icon(Icon::get($content)->right($right)->asString(), $right, true); } else { $this->_icon = $content; $this->_iconRight = $right; } } return $this; } /** * @inheritdoc */ public function run() { $this->setCssClass(); if($this->getId(false)) { $this->htmlOptions['id'] = $this->getId(false); } return $this->renderComponent(); } public function color($color) { if ($color) { $this->style('background-color:' . $color); } return $this; } public function textColor($color) { $this->style('color:' . $color); return $this; } /** * @return string renders and returns the actual html element by means of the current settings */ abstract public function renderComponent(); /** * @return string the bootstrap css base class */ abstract public function getComponentBaseClass(); /** * @return string the bootstrap css class by $type */ abstract public function getTypedClass($type); protected function setCssClass() { if ($this->type !== self::TYPE_NONE) { Html::addCssClass($this->htmlOptions, $this->getComponentBaseClass()); Html::addCssClass($this->htmlOptions, $this->getTypedClass($this->type)); } } protected function getText() { $text = ($this->encode) ? Html::encode($this->text) : $this->text; if ($this->_icon) { return ($this->_iconRight) ? $text.' '.$this->_icon : $this->_icon.' '.$text; } return $text; } public function visible($isVisible = true) { $this->_visible = $isVisible; return $this; } /** * @return string * @since 1.4 */ public function asString() { return (string) $this; } /** * @return string */ public function __toString() { try { $result = $this::widget($this->getWidgetOptions()); return $result ?: ''; } catch (\Exception $e) { Yii::error($e); } return ''; } /** * @return array all options required for rendering the widget */ public function getWidgetOptions() { return [ 'id' => $this->id, 'type' => $this->type, 'text' => $this->text, 'htmlOptions' => $this->htmlOptions, 'encode' => $this->encode, '_icon' => $this->_icon, '_iconRight' => $this->_iconRight, 'render' => $this->_visible ]; } }