diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6195d12..008824f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - php: ['7.4', '8.0'] + php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0'] steps: - name: Checkout diff --git a/composer.json b/composer.json index e007bb4..1774d16 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ ], "minimum-stability": "stable", "require": { - "php": ">=7.4.0", + "php": ">=7.0", "ext-json": "*", "yiisoft/yii2": "^2.0.42", "bower-asset/bootstrap": "^5.0.0" diff --git a/src/Accordion.php b/src/Accordion.php index 0b6f540..98f5e27 100644 --- a/src/Accordion.php +++ b/src/Accordion.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Exception; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; @@ -83,16 +84,16 @@ class Accordion extends Widget * ]) * ``` */ - public array $items = []; + public $items = []; /** * @var bool whether the labels for header items should be HTML-encoded. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** * @var bool whether to close other items if an item is opened. Defaults to `true` which causes an * accordion effect. Set this to `false` to allow keeping multiple items open at once. */ - public bool $autoCloseItems = true; + public $autoCloseItems = true; /** * @var array the HTML options for the item toggle tag. Key 'tag' might be used here for the tag name specification. * For example: @@ -105,7 +106,7 @@ class Accordion extends Widget * ``` * */ - public array $itemToggleOptions = []; + public $itemToggleOptions = []; /** @@ -116,6 +117,7 @@ class Accordion extends Widget { $this->registerPlugin('collapse'); Html::addCssClass($this->options, ['widget' => 'accordion']); + return implode("\n", [ Html::beginTag('div', $this->options), $this->renderItems(), @@ -164,7 +166,7 @@ class Accordion extends Widget * @param int $index the item index as each item group content must have an id * @return string the rendering result * @throws InvalidConfigException - * @throws \Exception + * @throws Exception */ public function renderItem(string $header, array $item, int $index): string { diff --git a/src/ActiveField.php b/src/ActiveField.php index a38d9fc..ce8f691 100644 --- a/src/ActiveField.php +++ b/src/ActiveField.php @@ -93,15 +93,15 @@ class ActiveField extends \yii\widgets\ActiveField /** * @var bool whether to render [[checkboxList()]] and [[radioList()]] inline. */ - public bool $inline = false; + public $inline = false; /** * @var string|null optional template to render the `{input}` placeholder content */ - public ?string $inputTemplate = null; + public $inputTemplate = null; /** * @var array options for the wrapper tag, used in the `{beginWrapper}` placeholder */ - public array $wrapperOptions = []; + public $wrapperOptions = []; /** * {@inheritdoc} */ @@ -119,7 +119,7 @@ class ActiveField extends \yii\widgets\ActiveField * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. * @since 2.0.7 */ - public array $checkOptions = [ + public $checkOptions = [ 'class' => ['widget' => 'form-check-input'], 'labelOptions' => [ 'class' => ['widget' => 'form-check-label'], @@ -134,7 +134,7 @@ class ActiveField extends \yii\widgets\ActiveField * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. * @since 2.0.7 */ - public array $radioOptions = [ + public $radioOptions = [ 'class' => ['widget' => 'form-check-input'], 'labelOptions' => [ 'class' => ['widget' => 'form-check-label'], @@ -160,37 +160,37 @@ class ActiveField extends \yii\widgets\ActiveField * - 'error' the error grid class * - 'hint' the hint grid class */ - public ?array $horizontalCssClasses = []; + public $horizontalCssClasses = []; /** * @var string the template for checkboxes in default layout */ - public string $checkTemplate = "
\n{input}\n{label}\n{error}\n{hint}\n
"; + public $checkTemplate = "
\n{input}\n{label}\n{error}\n{hint}\n
"; /** * @var string the template for radios in default layout * @since 2.0.5 */ - public string $radioTemplate = "
\n{input}\n{label}\n{error}\n{hint}\n
"; + public $radioTemplate = "
\n{input}\n{label}\n{error}\n{hint}\n
"; /** * @var string the template for checkboxes and radios in horizontal layout */ - public string $checkHorizontalTemplate = "{beginWrapper}\n
\n{input}\n{label}\n{error}\n{hint}\n
\n{endWrapper}"; + public $checkHorizontalTemplate = "{beginWrapper}\n
\n{input}\n{label}\n{error}\n{hint}\n
\n{endWrapper}"; /** * @var string the template for checkboxes and radios in horizontal layout * @since 2.0.5 */ - public string $radioHorizontalTemplate = "{beginWrapper}\n
\n{input}\n{label}\n{error}\n{hint}\n
\n{endWrapper}"; + public $radioHorizontalTemplate = "{beginWrapper}\n
\n{input}\n{label}\n{error}\n{hint}\n
\n{endWrapper}"; /** * @var string the `enclosed by label` template for checkboxes and radios in default layout */ - public string $checkEnclosedTemplate = "
\n{beginLabel}\n{input}\n{labelTitle}\n{endLabel}\n{error}\n{hint}\n
"; + public $checkEnclosedTemplate = "
\n{beginLabel}\n{input}\n{labelTitle}\n{endLabel}\n{error}\n{hint}\n
"; /** * @var bool whether to render the error. Default is `true` except for layout `inline`. */ - public bool $enableError = true; + public $enableError = true; /** * @var bool whether to render the label. Default is `true`. */ - public bool $enableLabel = true; + public $enableLabel = true; /** @@ -238,6 +238,7 @@ class ActiveField extends \yii\widgets\ActiveField $this->parts['{input}'] = strtr($this->inputTemplate, ['{input}' => $input]); } } + return parent::render($content); } @@ -351,6 +352,7 @@ class ActiveField extends \yii\widgets\ActiveField } parent::checkboxList($items, $options); + return $this; } @@ -392,6 +394,7 @@ class ActiveField extends \yii\widgets\ActiveField } parent::radioList($items, $options); + return $this; } @@ -429,10 +432,11 @@ class ActiveField extends \yii\widgets\ActiveField * @return $this the field object itself * @see https://getbootstrap.com/docs/5.0/components/forms/#readonly-plain-text */ - public function staticControl($options = []): self + public function staticControl(array $options = []): self { $this->adjustLabelFor($options); $this->parts['{input}'] = Html::activeStaticControl($this->model, $this->attribute, $options); + return $this; } @@ -451,6 +455,7 @@ class ActiveField extends \yii\widgets\ActiveField $this->renderLabelParts($label, $options); parent::label($label, $options); } + return $this; } @@ -462,9 +467,20 @@ class ActiveField extends \yii\widgets\ActiveField public function inline($value = true): self { $this->inline = (bool)$value; + return $this; } + /** + * {@inheritdoc} + */ + public function fileInput($options = []) + { + Html::addCssClass($options, ['widget' => 'form-control']); + + return parent::fileInput($options); + } + /** * @param array $instanceConfig the configuration passed to this instance's constructor * @return array the layout specific default configuration for this instance @@ -527,20 +543,11 @@ class ActiveField extends \yii\widgets\ActiveField return $config; } - /** - * {@inheritdoc} - */ - public function fileInput($options = []) - { - Html::addCssClass($options, ['widget' => 'form-control']); - return parent::fileInput($options); - } - /** * @param string|null $label the label or null to use model label * @param array $options the tag options */ - protected function renderLabelParts($label = null, $options = []) + protected function renderLabelParts(string $label = null, array $options = []) { $options = array_merge($this->labelOptions, $options); if ($label === null) { diff --git a/src/ActiveForm.php b/src/ActiveForm.php index c97e315..95a4bcf 100644 --- a/src/ActiveForm.php +++ b/src/ActiveForm.php @@ -93,7 +93,7 @@ class ActiveForm extends \yii\widgets\ActiveForm * override these defaults through [[fieldConfig]]. * @see ActiveField for details on Bootstrap 5 field configuration */ - public string $layout = self::LAYOUT_DEFAULT; + public $layout = self::LAYOUT_DEFAULT; /** * @var string the CSS class that is added to a field container when the associated attribute has validation error. */ diff --git a/src/Alert.php b/src/Alert.php index 442bce6..28e3afa 100644 --- a/src/Alert.php +++ b/src/Alert.php @@ -46,7 +46,7 @@ class Alert extends Widget * the [[begin()]] and [[end()]] calls of the Alert widget will also be treated * as the body content, and will be rendered before this. */ - public string $body; + public $body; /** * @var array|false the options for rendering the close button tag. * The close button is displayed in the header of the modal window. Clicking @@ -99,7 +99,7 @@ class Alert extends Widget * Renders the close button. * @return string|null the rendering result */ - protected function renderCloseButton(): ?string + protected function renderCloseButton() { if (($closeButton = $this->closeButton) !== false) { $tag = ArrayHelper::remove($closeButton, 'tag', 'button'); diff --git a/src/BaseHtml.php b/src/BaseHtml.php index 2411d17..4df7c9e 100644 --- a/src/BaseHtml.php +++ b/src/BaseHtml.php @@ -16,12 +16,12 @@ abstract class BaseHtml extends \yii\helpers\Html * @var int a counter used to generate [[id]] for widgets. * @internal */ - public static int $counter = 0; + public static $counter = 0; /** * @var string the prefix to the automatically generated widget IDs. * @see getId() */ - public static string $autoIdPrefix = 'i'; + public static $autoIdPrefix = 'i'; /** * @var array list of tag attributes that should be specially handled when their values are of array type. * In particular, if the value of the `data` attribute is `['name' => 'xyz', 'age' => 13]`, two attributes @@ -46,12 +46,13 @@ abstract class BaseHtml extends \yii\helpers\Html static::addCssClass($options, 'form-control-plaintext'); $value = (string)$value; $options['readonly'] = true; + return static::input('text', null, $value, $options); } /** * Generates a Bootstrap static form control for the given model attribute. - * @param \yii\base\Model $model the model object. + * @param Model $model the model object. * @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format * about attribute expression. * @param array $options the tag options in terms of name-value pairs. See [[staticControl()]] for details. @@ -66,6 +67,7 @@ abstract class BaseHtml extends \yii\helpers\Html } else { $value = static::getAttributeValue($model, $attribute); } + return static::staticControl($value, $options); } @@ -86,6 +88,7 @@ abstract class BaseHtml extends \yii\helpers\Html 'labelOptions' => ['class' => 'form-check-label'], 'value' => $value, ], $itemOptions); + return '
' . static::radio($name, $checked, $options) . '
'; }; } @@ -110,6 +113,7 @@ abstract class BaseHtml extends \yii\helpers\Html 'labelOptions' => ['class' => 'form-check-label'], 'value' => $value, ], $itemOptions); + return '
' . Html::checkbox($name, $checked, $options) . '
'; }; } @@ -117,6 +121,18 @@ abstract class BaseHtml extends \yii\helpers\Html return parent::checkboxList($name, $selection, $items, $options); } + /** + * {@inheritdoc} + */ + public static function error($model, $attribute, $options = []): string + { + if (!array_key_exists('class', $options)) { + $options['class'] = ['invalid-feedback']; + } + + return parent::error($model, $attribute, $options); + } + /** * @inheritdoc */ @@ -152,23 +168,13 @@ abstract class BaseHtml extends \yii\helpers\Html } else { $content = $input . "\n" . static::label($label, $options['id'], $labelOptions); } + return $hidden . $content; } return $hidden . static::input($type, $name, $value, $options); } - /** - * {@inheritdoc} - */ - public static function error($model, $attribute, $options = []): string - { - if (!array_key_exists('class', $options)) { - $options['class'] = ['invalid-feedback']; - } - return parent::error($model, $attribute, $options); - } - /** * Returns an autogenerated ID * @return string Autogenerated ID diff --git a/src/BootstrapWidgetTrait.php b/src/BootstrapWidgetTrait.php index 777a80c..7235656 100644 --- a/src/BootstrapWidgetTrait.php +++ b/src/BootstrapWidgetTrait.php @@ -35,14 +35,14 @@ trait BootstrapWidgetTrait * For example, [this page](http://getbootstrap.com/javascript/#modals) shows * how to use the "Modal" plugin and the supported options (e.g. "remote"). */ - public array $clientOptions = []; + public $clientOptions = []; /** * @var array the event handlers for the underlying Bootstrap JS plugin. * Please refer to the corresponding Bootstrap plugin Web page for possible events. * For example, [this page](http://getbootstrap.com/javascript/#modals) shows * how to use the "Modal" plugin and the supported events (e.g. "shown"). */ - public array $clientEvents = []; + public $clientEvents = []; /** diff --git a/src/Breadcrumbs.php b/src/Breadcrumbs.php index 85fd3e0..906d777 100644 --- a/src/Breadcrumbs.php +++ b/src/Breadcrumbs.php @@ -7,7 +7,6 @@ namespace yii\bootstrap5; -use JsonException; use RuntimeException; use Yii; use yii\helpers\ArrayHelper; @@ -33,18 +32,18 @@ class Breadcrumbs extends Widget /** * @var string the name of the breadcrumb container tag. */ - public string $tag = 'ol'; + public $tag = 'ol'; /** * @var bool whether to HTML-encode the link labels. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** * @var array the first hyperlink in the breadcrumbs (called home link). * Please refer to [[links]] on the format of the link. * If this property is not set, it will default to a link pointing to [[\yii\web\Application::homeUrl]] * with the label 'Home'. If this property is false, the home link will not be rendered. */ - public array $homeLink = []; + public $homeLink = []; /** * @var array list of links to appear in the breadcrumbs. If this property is empty, * the widget will not render anything. Each array element represents a single link in the breadcrumbs @@ -60,22 +59,22 @@ class Breadcrumbs extends Widget * * */ - public array $links = []; + public $links = []; /** * @var string the template used to render each inactive item in the breadcrumbs. The token `{link}` * will be replaced with the actual HTML link for each inactive item. */ - public string $itemTemplate = "
  • {link}
  • \n"; + public $itemTemplate = "
  • {link}
  • \n"; /** * @var string the template used to render each active item in the breadcrumbs. The token `{link}` * will be replaced with the actual HTML link for each active item. */ - public string $activeItemTemplate = "
  • {link}
  • \n"; + public $activeItemTemplate = "
  • {link}
  • \n"; /** * @var array the HTML attributes for the widgets nav container tag. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $navOptions = ['aria-label' => 'breadcrumb']; + public $navOptions = ['aria-label' => 'breadcrumb']; /** @@ -127,42 +126,6 @@ class Breadcrumbs extends Widget return Html::tag('nav', Html::tag($this->tag, implode('', $links), $this->options), $this->navOptions); } - /** - * Renders a single breadcrumb item. - * - * @param array $link the link to be rendered. It must contain the "label" element. The "url" element is optional. - * @param string $template the template to be used to rendered the link. The token "{link}" will be replaced by the - * link. - * - * @throws RuntimeException if `$link` does not have "label" element. - * - * @return string the rendering result - */ - protected function renderItem(array $link, string $template): string - { - $encodeLabel = ArrayHelper::remove($link, 'encode', $this->encodeLabels); - - if (array_key_exists('label', $link)) { - $label = $encodeLabel ? Html::encode($link['label']) : $link['label']; - } else { - throw new RuntimeException('The "label" element is required for each link.'); - } - - if (isset($link['template'])) { - $template = $link['template']; - } - - if (isset($link['url'])) { - $options = $link; - unset($options['template'], $options['label'], $options['url']); - $linkHtml = Html::a($label, $link['url'], $options); - } else { - $linkHtml = $label; - } - - return strtr($template, ['{link}' => $linkHtml]); - } - /** * The template used to render each active item in the breadcrumbs. The token `{link}` will be replaced with the * actual HTML link for each active item. @@ -295,4 +258,40 @@ class Breadcrumbs extends Widget return $this; } + /** + * Renders a single breadcrumb item. + * + * @param array $link the link to be rendered. It must contain the "label" element. The "url" element is optional. + * @param string $template the template to be used to rendered the link. The token "{link}" will be replaced by the + * link. + * + * @return string the rendering result + * @throws RuntimeException if `$link` does not have "label" element. + * + */ + protected function renderItem(array $link, string $template): string + { + $encodeLabel = ArrayHelper::remove($link, 'encode', $this->encodeLabels); + + if (array_key_exists('label', $link)) { + $label = $encodeLabel ? Html::encode($link['label']) : $link['label']; + } else { + throw new RuntimeException('The "label" element is required for each link.'); + } + + if (isset($link['template'])) { + $template = $link['template']; + } + + if (isset($link['url'])) { + $options = $link; + unset($options['template'], $options['label'], $options['url']); + $linkHtml = Html::a($label, $link['url'], $options); + } else { + $linkHtml = $label; + } + + return strtr($template, ['{link}' => $linkHtml]); + } + } diff --git a/src/Button.php b/src/Button.php index 6ddff37..f0b5e58 100644 --- a/src/Button.php +++ b/src/Button.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace yii\bootstrap5; +use yii\base\InvalidConfigException; + /** * Button renders a bootstrap button. * @@ -23,21 +25,21 @@ class Button extends Widget /** * @var string the tag to use to render the button */ - public string $tagName = 'button'; + public $tagName = 'button'; /** * @var string the button label */ - public string $label = 'Button'; + public $label = 'Button'; /** * @var bool whether the label should be HTML-encoded. */ - public bool $encodeLabel = true; + public $encodeLabel = true; /** * Initializes the widget. * If you override this method, make sure you call the parent implementation first. - * @throws \yii\base\InvalidConfigException + * @throws InvalidConfigException */ public function init() { diff --git a/src/ButtonDropdown.php b/src/ButtonDropdown.php index 74dafd3..bb6aed4 100644 --- a/src/ButtonDropdown.php +++ b/src/ButtonDropdown.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Throwable; use yii\helpers\ArrayHelper; use yii\helpers\Url; @@ -50,7 +51,7 @@ class ButtonDropdown extends Widget /** * @var string the button label */ - public string $label = 'Button'; + public $label = 'Button'; /** * @var array the HTML attributes for the container tag. The following special options are recognized: * @@ -58,43 +59,43 @@ class ButtonDropdown extends Widget * * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $options = []; + public $options = []; /** * @var array the HTML attributes of the button. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $buttonOptions = []; + public $buttonOptions = []; /** * @var array the configuration array for [[Dropdown]]. */ - public array $dropdown = []; + public $dropdown = []; /** * @var string the drop-direction of the widget * * Possible values are 'left', 'right', 'up', or 'down' (default) */ - public string $direction = self::DIRECTION_DOWN; + public $direction = self::DIRECTION_DOWN; /** * @var bool whether to display a group of split-styled button group. */ - public bool $split = false; + public $split = false; /** * @var string the tag to use to render the button */ - public string $tagName = 'button'; + public $tagName = 'button'; /** * @var bool whether the label should be HTML-encoded. */ - public bool $encodeLabel = true; + public $encodeLabel = true; /** * @var string name of a class to use for rendering dropdowns withing this widget. Defaults to [[Dropdown]]. */ - public string $dropdownClass = Dropdown::class; + public $dropdownClass = Dropdown::class; /** * @var bool whether to render the container using the [[options]] as HTML attributes. If set to `false`, * the container element enclosing the button and dropdown will NOT be rendered. */ - public bool $renderContainer = true; + public $renderContainer = true; /** @@ -112,7 +113,7 @@ class ButtonDropdown extends Widget /** * {@inheritdoc} * @return string - * @throws \Throwable + * @throws Throwable */ public function run(): string { @@ -129,13 +130,14 @@ class ButtonDropdown extends Widget $this->options['id'] = $this->buttonOptions['id']; $this->registerPlugin('dropdown'); + return $html; } /** * Generates the button dropdown. * @return string the rendering result. - * @throws \Throwable + * @throws Throwable */ protected function renderButton(): string { @@ -188,7 +190,7 @@ class ButtonDropdown extends Widget /** * Generates the dropdown menu. * @return string the rendering result. - * @throws \Throwable + * @throws Throwable */ protected function renderDropdown(): string { @@ -197,6 +199,7 @@ class ButtonDropdown extends Widget $config['view'] = $this->getView(); /** @var Widget $dropdownClass */ $dropdownClass = $this->dropdownClass; + return $dropdownClass::widget($config); } } diff --git a/src/ButtonGroup.php b/src/ButtonGroup.php index 06fe5a7..21b1bf9 100644 --- a/src/ButtonGroup.php +++ b/src/ButtonGroup.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Throwable; use yii\helpers\ArrayHelper; /** @@ -48,11 +49,11 @@ class ButtonGroup extends Widget * - options: array, optional, the HTML attributes of the button. * - visible: bool, optional, whether this button is visible. Defaults to true. */ - public array $buttons = []; + public $buttons = []; /** * @var bool whether to HTML-encode the button labels. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** @@ -70,18 +71,19 @@ class ButtonGroup extends Widget /** * {@inheritdoc} * @return string - * @throws \Throwable + * @throws Throwable */ public function run(): string { BootstrapAsset::register($this->getView()); + return Html::tag('div', $this->renderButtons(), $this->options); } /** * Generates the buttons that compound the group as specified on [[buttons]]. * @return string the rendering result. - * @throws \Throwable + * @throws Throwable */ protected function renderButtons(): string { diff --git a/src/ButtonToolbar.php b/src/ButtonToolbar.php index 21603c1..22d0652 100644 --- a/src/ButtonToolbar.php +++ b/src/ButtonToolbar.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Throwable; + /** * ButtonToolbar Combines sets of button groups into button toolbars for more complex components. * Use utility classes as needed to space out groups, buttons, and more. @@ -57,7 +59,7 @@ class ButtonToolbar extends Widget * - options: array optional, the HTML attributes of the button group. * - encodeLabels: bool whether to HTML-encode the button labels. */ - public array $buttonGroups = []; + public $buttonGroups = []; /** @@ -75,18 +77,19 @@ class ButtonToolbar extends Widget /** * {@inheritdoc} * @return string - * @throws \Throwable + * @throws Throwable */ public function run(): string { BootstrapAsset::register($this->getView()); + return Html::tag('div', $this->renderButtonGroups(), $this->options); } /** * Generates the button groups that compound the toolbar as specified on [[buttonGroups]]. * @return string the rendering result. - * @throws \Throwable + * @throws Throwable */ protected function renderButtonGroups(): string { diff --git a/src/Carousel.php b/src/Carousel.php index 3495ae8..3f61466 100644 --- a/src/Carousel.php +++ b/src/Carousel.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Exception; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; @@ -40,7 +41,7 @@ class Carousel extends Widget * @var array|null the labels for the previous and the next control buttons. * If null, it means the previous and the next control buttons should not be displayed. */ - public ?array $controls = [ + public $controls = [ 'Previous', 'Next', ]; @@ -48,7 +49,7 @@ class Carousel extends Widget /** * @var bool whether carousel indicators (
      tag with anchors to items) should be displayed or not. */ - public bool $showIndicators = true; + public $showIndicators = true; /** * @var array list of slides in the carousel. Each array element represents a single * slide with the following structure: @@ -64,15 +65,15 @@ class Carousel extends Widget * ] * ``` */ - public array $items = []; + public $items = []; /** * @var bool Animate slides with a fade transition instead of a slide. Defaults to `false` */ - public bool $crossfade = false; + public $crossfade = false; /** * {@inheritdoc} */ - public array $options = ['data-bs-ride' => 'carousel']; + public $options = ['data-bs-ride' => 'carousel']; /** @@ -154,7 +155,7 @@ class Carousel extends Widget * @param int $index the item index as the first item should be set to `active` * @return string the rendering result * @throws InvalidConfigException if the item is invalid - * @throws \Exception + * @throws Exception */ public function renderItem($item, int $index): string { @@ -186,9 +187,12 @@ class Carousel extends Widget /** * Renders previous and next control buttons. + * + * @return string The rendered controls + * * @throws InvalidConfigException if [[controls]] is invalid. */ - public function renderControls() + public function renderControls(): string { if (isset($this->controls[0], $this->controls[1])) { return Html::button($this->controls[0], [ diff --git a/src/Dropdown.php b/src/Dropdown.php index f713377..2890484 100644 --- a/src/Dropdown.php +++ b/src/Dropdown.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Exception; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; @@ -51,19 +52,19 @@ class Dropdown extends Widget * * To insert divider use `-`. */ - public array $items = []; + public $items = []; /** * @var bool whether the labels for header items should be HTML-encoded. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** * @var array|null the HTML attributes for sub-menu container tags. */ - public ?array $submenuOptions = []; + public $submenuOptions = []; /** - * {@inheritdoc} + * {@inheritDoc} */ public function init() { @@ -80,6 +81,7 @@ class Dropdown extends Widget { BootstrapPluginAsset::register($this->getView()); $this->registerClientEvents(); + return $this->renderItems($this->items, $this->options); } @@ -89,7 +91,7 @@ class Dropdown extends Widget * @param array $options the container HTML attributes * @return string the rendering result. * @throws InvalidConfigException if the label option is not specified in one of the items. - * @throws \Exception + * @throws Exception */ protected function renderItems(array $items, array $options = []): string { diff --git a/src/LinkPager.php b/src/LinkPager.php index 6de5deb..273e2ca 100644 --- a/src/LinkPager.php +++ b/src/LinkPager.php @@ -37,54 +37,54 @@ class LinkPager extends Widget * @var Pagination the pagination object that this pager is associated with. * You must set this property in order to make LinkPager work. */ - public Pagination $pagination; + public $pagination; /** * @var array HTML attributes for the pager container tag. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $options = []; + public $options = []; /** * @var array HTML attributes for the pager list tag. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $listOptions = ['class' => ['pagination']]; + public $listOptions = ['class' => ['pagination']]; /** * @var array HTML attributes which will be applied to all link containers */ - public array $linkContainerOptions = ['class' => ['page-item']]; + public $linkContainerOptions = ['class' => ['page-item']]; /** * @var array HTML attributes for the link in a pager container tag. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $linkOptions = ['class' => ['page-link']]; + public $linkOptions = ['class' => ['page-link']]; /** * @var string the CSS class for the each page button. */ - public string $pageCssClass = 'page-item'; + public $pageCssClass = 'page-item'; /** * @var string the CSS class for the "first" page button. */ - public string $firstPageCssClass = 'first'; + public $firstPageCssClass = 'first'; /** * @var string the CSS class for the "last" page button. */ - public string $lastPageCssClass = 'last'; + public $lastPageCssClass = 'last'; /** * @var string the CSS class for the "previous" page button. */ - public string $prevPageCssClass = 'prev'; + public $prevPageCssClass = 'prev'; /** * @var string the CSS class for the "next" page button. */ - public string $nextPageCssClass = 'next'; + public $nextPageCssClass = 'next'; /** * @var string the CSS class for the active (currently selected) page button. */ - public string $activePageCssClass = 'active'; + public $activePageCssClass = 'active'; /** * @var string the CSS class for the disabled page buttons. */ - public string $disabledPageCssClass = 'disabled'; + public $disabledPageCssClass = 'disabled'; /** * @var array the options for the disabled tag to be generated inside the disabled list element. * In order to customize the html tag, please use the tag key. @@ -93,11 +93,11 @@ class LinkPager extends Widget * $disabledListItemSubTagOptions = ['class' => 'disabled-link']; * ``` */ - public array $disabledListItemSubTagOptions = []; + public $disabledListItemSubTagOptions = []; /** * @var int maximum number of page buttons that can be displayed. Defaults to 10. */ - public int $maxButtonCount = 10; + public $maxButtonCount = 10; /** * @var string|bool the label for the "next" page button. Note that this will NOT be HTML-encoded. * If this property is false, the "next" page button will not be displayed. @@ -126,15 +126,15 @@ class LinkPager extends Widget * @see http://www.w3.org/TR/html401/struct/links.html#h-12.1.2 * @see registerLinkTags() */ - public bool $registerLinkTags = false; + public $registerLinkTags = false; /** * @var bool Hide widget when only one page exist. */ - public bool $hideOnSinglePage = true; + public $hideOnSinglePage = true; /** * @var bool whether to render current page button as disabled. */ - public bool $disableCurrentPageButton = false; + public $disableCurrentPageButton = false; /** @@ -223,7 +223,7 @@ class LinkPager extends Widget } // internal pages - [$beginPage, $endPage] = $this->getPageRange(); + list($beginPage, $endPage) = $this->getPageRange(); for ($i = $beginPage; $i <= $endPage; ++$i) { $buttons[] = $this->renderPageButton( (string)($i + 1), @@ -262,6 +262,7 @@ class LinkPager extends Widget $options = $this->listOptions; $tag = ArrayHelper::remove($options, 'tag', 'ul'); + return Html::tag($tag, implode("\n", $buttons), $options); } diff --git a/src/Modal.php b/src/Modal.php index 912b081..4953e3a 100644 --- a/src/Modal.php +++ b/src/Modal.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; /** @@ -51,35 +52,35 @@ class Modal extends Widget /** * @var string the tile content in the modal window. */ - public string $title; + public $title; /** * @var array additional title options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $titleOptions = []; + public $titleOptions = []; /** * @var array additional header options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $headerOptions = []; + public $headerOptions = []; /** * @var array body options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $bodyOptions = []; + public $bodyOptions = []; /** * @var string|null the footer content in the modal window. */ - public ?string $footer; + public $footer; /** * @var array additional footer options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $footerOptions = []; + public $footerOptions = []; /** * @var string|null the modal size. Can be [[SIZE_LARGE]] or [[SIZE_SMALL]], or empty for default. */ - public ?string $size; + public $size; /** * @var array|false the options for rendering the close button tag. * The close button is displayed in the header of the modal window. Clicking @@ -116,25 +117,25 @@ class Modal extends Widget * When true the modal-dialog-centered class will be added to the modal-dialog * @since 2.0.9 */ - public bool $centerVertical = false; + public $centerVertical = false; /** * @var boolean whether to make the modal body scrollable * * When true the modal-dialog-scrollable class will be added to the modal-dialog * @since 2.0.9 */ - public bool $scrollable = false; + public $scrollable = false; /** * @var array modal dialog options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. * @since 2.0.9 */ - public array $dialogOptions = []; + public $dialogOptions = []; /** * {@inheritDoc} - * @throws \yii\base\InvalidConfigException + * @throws InvalidConfigException */ public function init() { @@ -184,6 +185,7 @@ class Modal extends Widget return ''; } Html::addCssClass($this->headerOptions, ['widget' => 'modal-header']); + return Html::tag('div', "\n" . $header . "\n", $this->headerOptions); } @@ -194,6 +196,7 @@ class Modal extends Widget protected function renderBodyBegin(): string { Html::addCssClass($this->bodyOptions, ['widget' => 'modal-body']); + return Html::beginTag('div', $this->bodyOptions); } @@ -208,12 +211,13 @@ class Modal extends Widget /** * Renders the HTML markup for the footer of the modal - * @return string the rendering result + * @return string|null the rendering result */ - protected function renderFooter(): ?string + protected function renderFooter() { if (isset($this->footer)) { Html::addCssClass($this->footerOptions, ['widget' => 'modal-footer']); + return Html::tag('div', "\n" . $this->footer . "\n", $this->footerOptions); } else { return null; @@ -222,9 +226,9 @@ class Modal extends Widget /** * Renders the toggle button. - * @return string the rendering result + * @return string|null the rendering result */ - protected function renderToggleButton(): ?string + protected function renderToggleButton() { if (($toggleButton = $this->toggleButton) !== false) { $tag = ArrayHelper::remove($toggleButton, 'tag', 'button'); @@ -238,9 +242,9 @@ class Modal extends Widget /** * Renders the close button. - * @return string the rendering result + * @return string|null the rendering result */ - protected function renderCloseButton(): ?string + protected function renderCloseButton() { if (($closeButton = $this->closeButton) !== false) { $tag = ArrayHelper::remove($closeButton, 'tag', 'button'); diff --git a/src/Nav.php b/src/Nav.php index c1b109a..85b4667 100644 --- a/src/Nav.php +++ b/src/Nav.php @@ -4,9 +4,11 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Exception; +use Throwable; +use Yii; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; -use Yii; /** * Nav renders a nav HTML component. @@ -67,39 +69,39 @@ class Nav extends Widget * * If a menu item is a string, it will be rendered directly without HTML encoding. */ - public array $items = []; + public $items = []; /** * @var bool whether the nav items labels should be HTML-encoded. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** * @var bool whether to automatically activate items according to whether their route setting * matches the currently requested route. * @see isItemActive */ - public bool $activateItems = true; + public $activateItems = true; /** * @var bool whether to activate parent menu items when one of the corresponding child menu items is active. */ - public bool $activateParents = false; + public $activateParents = false; /** * @var string|null the route used to determine if a menu item is active or not. * If not set, it will use the route of the current request. * @see params * @see isItemActive */ - public ?string $route = null; + public $route = null; /** * @var array|null the parameters used to determine if a menu item is active or not. * If not set, it will use `$_GET`. * @see route * @see isItemActive */ - public ?array $params = null; + public $params = null; /** * @var string name of a class to use for rendering dropdowns within this widget. Defaults to [[Dropdown]]. */ - public string $dropdownClass = Dropdown::class; + public $dropdownClass = Dropdown::class; /** @@ -120,18 +122,19 @@ class Nav extends Widget /** * Renders the widget. * @return string - * @throws InvalidConfigException|\Throwable + * @throws InvalidConfigException|Throwable */ public function run(): string { BootstrapAsset::register($this->getView()); + return $this->renderItems(); } /** * Renders widget items. * @return string - * @throws InvalidConfigException|\Throwable + * @throws InvalidConfigException|Throwable */ public function renderItems(): string { @@ -151,7 +154,7 @@ class Nav extends Widget * @param string|array $item the item to render. * @return string the rendering result. * @throws InvalidConfigException - * @throws \Throwable + * @throws Throwable */ public function renderItem($item): string { @@ -203,12 +206,13 @@ class Nav extends Widget * @param array $items the given items. Please refer to [[Dropdown::items]] for the array structure. * @param array $parentItem the parent item information. Please refer to [[items]] for the structure of this array. * @return string the rendering result. - * @throws \Throwable + * @throws Throwable */ protected function renderDropdown(array $items, array $parentItem): string { /** @var Widget $dropdownClass */ $dropdownClass = $this->dropdownClass; + return $dropdownClass::widget([ 'options' => ArrayHelper::getValue($parentItem, 'dropdownOptions', []), 'items' => $items, @@ -223,8 +227,8 @@ class Nav extends Widget * @param array $items @see items * @param bool $active should the parent be active too * @return array + * @throws Exception * @see items - * @throws \Exception */ protected function isChildActive(array $items, bool &$active): array { @@ -248,6 +252,7 @@ class Nav extends Widget } } } + return $items; } @@ -260,7 +265,7 @@ class Nav extends Widget * be considered active. * @param array $item the menu item to be checked * @return bool whether the menu item is active - * @throws \Exception + * @throws Exception */ protected function isItemActive(array $item): bool { diff --git a/src/NavBar.php b/src/NavBar.php index b2cf1cc..88d798e 100644 --- a/src/NavBar.php +++ b/src/NavBar.php @@ -47,7 +47,7 @@ class NavBar extends Widget * * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $options = []; + public $options = []; /** * @var array the HTML attributes for the container tag. The following special options are recognized: * @@ -55,7 +55,7 @@ class NavBar extends Widget * * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $collapseOptions = []; + public $collapseOptions = []; /** * @var string|bool the text of the brand or false if it's not used. Note that this is not HTML-encoded. * @see https://getbootstrap.com/docs/5.0/components/navbar/ @@ -78,34 +78,34 @@ class NavBar extends Widget * @var array the HTML attributes of the brand link. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $brandOptions = []; + public $brandOptions = []; /** * @var string text to show for screen readers for the button to toggle the navbar. */ - public string $screenReaderToggleText = 'Toggle navigation'; + public $screenReaderToggleText = 'Toggle navigation'; /** * @var string the toggle button content. Defaults to bootstrap 5 default `` */ - public string $togglerContent = ''; + public $togglerContent = ''; /** * @var array the HTML attributes of the navbar toggler button. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $togglerOptions = []; + public $togglerOptions = []; /** * @var bool whether the navbar content should be included in an inner div container which by default * adds left and right padding. Set this to false for a 100% width navbar. */ - public bool $renderInnerContainer = true; + public $renderInnerContainer = true; /** * @var array the HTML attributes of the inner container. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $innerContainerOptions = []; + public $innerContainerOptions = []; /** * {@inheritdoc} */ - public array $clientOptions = []; + public $clientOptions = []; /** diff --git a/src/Popover.php b/src/Popover.php index 2344b1b..32819a8 100644 --- a/src/Popover.php +++ b/src/Popover.php @@ -44,27 +44,27 @@ class Popover extends Widget /** * @var string|null the tile content in the popover. */ - public ?string $title = null; + public $title = null; /** * @var array additional header options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $headerOptions = []; + public $headerOptions = []; /** * @var array body options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $bodyOptions = []; + public $bodyOptions = []; /** * @var array arrow options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $arrowOptions = []; + public $arrowOptions = []; /** * @var string How to position the popover - [[PLACEMENT_AUTO]] | [[PLACEMENT_TOP]] | [[PLACEMENT_BOTTOM]] | * [[PLACEMENT_LEFT]] | [[PLACEMENT_RIGHT]]. When auto is specified, it will dynamically reorient the popover. */ - public string $placement = self::PLACEMENT_AUTO; + public $placement = self::PLACEMENT_AUTO; /** * @var array|false the options for rendering the toggle button tag. * The toggle button is used to toggle the visibility of the popover. @@ -96,7 +96,7 @@ class Popover extends Widget /** * {@inheritDoc} */ - public function run(): ?string + public function run() { $content = ob_get_clean(); @@ -117,6 +117,7 @@ class Popover extends Widget protected function renderArrow(): string { Html::addCssClass($this->arrowOptions, ['widget' => 'popover-arrow']); + return Html::tag('div', '', $this->arrowOptions); } @@ -127,6 +128,7 @@ class Popover extends Widget protected function renderHeader(): string { Html::addCssClass($this->headerOptions, ['widget' => 'popover-header']); + return Html::tag('h3', '', $this->headerOptions); } @@ -137,14 +139,15 @@ class Popover extends Widget protected function renderBody(): string { Html::addCssClass($this->bodyOptions, ['widget' => 'popover-body']); + return Html::tag('div', '', $this->bodyOptions); } /** * Renders the toggle button. - * @return string the rendering result + * @return string|null the rendering result */ - protected function renderToggleButton(): ?string + protected function renderToggleButton() { if (($toggleButton = $this->toggleButton) !== false) { $tag = ArrayHelper::remove($toggleButton, 'tag', 'button'); diff --git a/src/Progress.php b/src/Progress.php index f1de68d..1985650 100644 --- a/src/Progress.php +++ b/src/Progress.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Exception; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; @@ -80,17 +81,17 @@ class Progress extends Widget /** * @var string the button label. This property will only be considered if [[bars]] is empty */ - public string $label; + public $label; /** * @var int the amount of progress as a percentage. This property will only be considered if [[bars]] is empty */ - public int $percent = 0; + public $percent = 0; /** * @var array the HTML attributes of the bar. This property will only be considered if [[bars]] is empty * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. * @since 2.0.6 */ - public array $barOptions = []; + public $barOptions = []; /** * @var array a set of bars that are stacked together to form a single progress bar. * Each bar is an array of the following structure: @@ -106,7 +107,7 @@ class Progress extends Widget * ] * ``` */ - public array $bars; + public $bars; /** @@ -126,6 +127,7 @@ class Progress extends Widget public function run(): string { BootstrapAsset::register($this->getView()); + return $this->renderProgress(); } @@ -133,7 +135,7 @@ class Progress extends Widget * Renders the progress. * @return string the rendering result. * @throws InvalidConfigException if the "percent" option is not set in a stacked progress bar. - * @throws \Exception + * @throws Exception */ protected function renderProgress(): string { diff --git a/src/Tabs.php b/src/Tabs.php index ee9d6e0..46eee3f 100644 --- a/src/Tabs.php +++ b/src/Tabs.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace yii\bootstrap5; +use Exception; +use Throwable; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; @@ -81,7 +83,7 @@ class Tabs extends Widget * * content: string, required if `items` is not set. The content (HTML) of the tab pane. * * options: optional, array, the HTML attributes of the tab content container. */ - public array $items = []; + public $items = []; /** * @var array list of HTML attributes for the item container tags. This will be overwritten * by the "options" set in individual [[items]]. The following special options are recognized: @@ -90,46 +92,46 @@ class Tabs extends Widget * * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $itemOptions = []; + public $itemOptions = []; /** * @var array list of HTML attributes for the header container tags. This will be overwritten * by the "headerOptions" set in individual [[items]]. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $headerOptions = []; + public $headerOptions = []; /** * @var array list of HTML attributes for the tab header link tags. This will be overwritten * by the "linkOptions" set in individual [[items]]. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $linkOptions = []; + public $linkOptions = []; /** * @var bool whether the labels for header items should be HTML-encoded. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** * @var string specifies the Bootstrap tab styling. */ - public string $navType = 'nav-tabs'; + public $navType = 'nav-tabs'; /** * @var bool whether to render the `tab-content` container and its content. You may set this property * to be false so that you can manually render `tab-content` yourself in case your tab contents are complex. */ - public bool $renderTabContent = true; + public $renderTabContent = true; /** * @var array list of HTML attributes for the `tab-content` container. This will always contain the CSS class `tab-content`. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $tabContentOptions = []; + public $tabContentOptions = []; /** * @var string name of a class to use for rendering dropdowns withing this widget. Defaults to [[Dropdown]]. */ - public string $dropdownClass = Dropdown::class; + public $dropdownClass = Dropdown::class; /** * @var array Tab panes (contents) */ - protected array $panes = []; + protected $panes = []; /** @@ -145,12 +147,13 @@ class Tabs extends Widget /** * {@inheritdoc} * @throws InvalidConfigException - * @throws \Throwable + * @throws Throwable */ public function run(): string { $this->registerPlugin('tab'); $this->prepareItems($this->items); + return Nav::widget([ 'dropdownClass' => $this->dropdownClass, 'options' => ArrayHelper::merge(['role' => 'tablist'], $this->options), @@ -159,13 +162,24 @@ class Tabs extends Widget ]) . $this->renderPanes($this->panes); } + /** + * Renders tab panes. + * + * @param array $panes + * @return string the rendering result. + */ + public function renderPanes(array $panes): string + { + return $this->renderTabContent ? "\n" . Html::tag('div', implode("\n", $panes), $this->tabContentOptions) : ''; + } + /** * Renders tab items as specified on [[items]]. * * @param array $items * @param string $prefix * @throws InvalidConfigException - * @throws \Exception + * @throws Exception */ protected function prepareItems(array &$items, string $prefix = '') { @@ -219,6 +233,8 @@ class Tabs extends Widget } /** + * Check for active tab + * * @return bool if there's active tab defined */ protected function hasActiveTab(): bool @@ -237,7 +253,7 @@ class Tabs extends Widget * * This method activates the first tab that is visible and * not explicitly set to inactive (`'active' => false`). - * @throws \Exception + * @throws Exception */ protected function activateFirstVisibleTab() { @@ -247,19 +263,9 @@ class Tabs extends Widget $disabled = ArrayHelper::getValue($item, 'disabled', false); if ($visible && $active !== false && $disabled !== true) { $this->items[$i]['active'] = true; + return; } } } - - /** - * Renders tab panes. - * - * @param array $panes - * @return string the rendering result. - */ - public function renderPanes(array $panes): string - { - return $this->renderTabContent ? "\n" . Html::tag('div', implode("\n", $panes), $this->tabContentOptions) : ''; - } } diff --git a/src/Toast.php b/src/Toast.php index 03ee188..42ffad3 100644 --- a/src/Toast.php +++ b/src/Toast.php @@ -4,6 +4,9 @@ declare(strict_types=1); namespace yii\bootstrap5; +use DateInterval; +use DateTime; +use DateTimeInterface; use Yii; use yii\helpers\ArrayHelper; @@ -44,13 +47,13 @@ class Toast extends Widget * the [[begin()]] and [[end()]] calls of the Toast widget will also be treated * as the body content, and will be rendered before this. */ - public ?string $body = null; + public $body = null; /** * @var string|null The title content in the toast. */ - public ?string $title = null; + public $title = null; /** - * @var int|string|\DateTime|\DateTimeInterface|\DateInterval|false The date time the toast message references to. + * @var int|string|DateTime|DateTimeInterface|DateInterval|false The date time the toast message references to. * This will be formatted as relative time (via formatter component). It will be omitted if * set to `false` (default). */ @@ -68,7 +71,7 @@ class Toast extends Widget * Please refer to the [Toast documentation](https://getbootstrap.com/docs/5.0/components/toasts/) * for the supported HTML attributes. */ - public array $closeButton = []; + public $closeButton = []; /** * @var array additional title options * @@ -78,7 +81,7 @@ class Toast extends Widget * * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $titleOptions = []; + public $titleOptions = []; /** * @var array additional date time part options * @@ -88,17 +91,17 @@ class Toast extends Widget * * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $dateTimeOptions = []; + public $dateTimeOptions = []; /** * @var array additional header options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $headerOptions = []; + public $headerOptions = []; /** * @var array body options * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $bodyOptions = []; + public $bodyOptions = []; /** @@ -146,6 +149,7 @@ class Toast extends Widget $title .= "\n" . $button; Html::addCssClass($this->headerOptions, ['widget' => 'toast-header']); + return Html::tag('div', "\n" . $title . "\n", $this->headerOptions); } @@ -156,6 +160,7 @@ class Toast extends Widget protected function renderBodyBegin(): string { Html::addCssClass($this->bodyOptions, ['widget' => 'toast-body']); + return Html::beginTag('div', $this->bodyOptions); } diff --git a/src/ToggleButtonGroup.php b/src/ToggleButtonGroup.php index 6502141..14b86c7 100644 --- a/src/ToggleButtonGroup.php +++ b/src/ToggleButtonGroup.php @@ -32,33 +32,33 @@ class ToggleButtonGroup extends InputWidget /** * Checkbox type */ - public const TYPE_CHECKBOX = 'checkbox'; + const TYPE_CHECKBOX = 'checkbox'; /** * Radio type */ - public const TYPE_RADIO = 'radio'; + const TYPE_RADIO = 'radio'; /** * @var string input type, can be [[TYPE_CHECKBOX]] or [[TYPE_RADIO]] */ - public string $type; + public $type; /** * @var array the data item used to generate the checkboxes. * The array values are the labels, while the array keys are the corresponding checkbox or radio values. */ - public array $items = []; + public $items = []; /** * @var array, the HTML attributes for the label (button) tag. * @see Html::checkbox() * @see Html::radio() */ - public array $labelOptions = [ + public $labelOptions = [ 'class' => ['btn', 'btn-secondary'], ]; /** * @var bool whether the items labels should be HTML-encoded. */ - public bool $encodeLabels = true; + public $encodeLabels = true; /** @@ -124,6 +124,7 @@ class ToggleButtonGroup extends InputWidget if ($this->encodeLabels) { $label = Html::encode($label); } + return Html::$type($name, $checked, [ 'label' => $label, 'labelOptions' => $labelOptions, diff --git a/src/Widget.php b/src/Widget.php index b161099..2853cbc 100644 --- a/src/Widget.php +++ b/src/Widget.php @@ -15,5 +15,5 @@ class Widget extends \yii\base\Widget * @var array the HTML attributes for the widget container tag. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. */ - public array $options = []; + public $options = []; }