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 = [];
}