Commit 54ea78d9 by Qiang Xue

Fixes #1562: Added `yii\bootstrap\Tabs::linkOptions`

parent 26cb7b2a
...@@ -8,6 +8,7 @@ Yii Framework 2 bootstrap extension Change Log ...@@ -8,6 +8,7 @@ Yii Framework 2 bootstrap extension Change Log
- Enh #1474: Added option to make NavBar 100% width (cebe) - Enh #1474: Added option to make NavBar 100% width (cebe)
- Enh #1552: It is now possible to use multiple bootstrap NavBar in a single page (Alex-Code) - Enh #1552: It is now possible to use multiple bootstrap NavBar in a single page (Alex-Code)
- Enh #1553: Only add navbar-default class to NavBar when no other class is specified (cebe) - Enh #1553: Only add navbar-default class to NavBar when no other class is specified (cebe)
- Enh #1562: Added `yii\bootstrap\Tabs::linkOptions` (kartik-v)
- Enh #1601: Added support for tagName and encodeLabel parameters in ButtonDropdown (omnilight) - Enh #1601: Added support for tagName and encodeLabel parameters in ButtonDropdown (omnilight)
- Chg #1459: Update Collapse to use bootstrap 3 classes (tonydspaniard) - Chg #1459: Update Collapse to use bootstrap 3 classes (tonydspaniard)
- Chg #1820: Update Progress to use bootstrap 3 markup (samdark) - Chg #1820: Update Progress to use bootstrap 3 markup (samdark)
......
...@@ -59,6 +59,7 @@ class Tabs extends Widget ...@@ -59,6 +59,7 @@ class Tabs extends Widget
* *
* - label: string, required, the tab header label. * - label: string, required, the tab header label.
* - headerOptions: array, optional, the HTML attributes of the tab header. * - headerOptions: array, optional, the HTML attributes of the tab header.
* - linkOptions: array, optional, the HTML attributes of the tab header link tags.
* - content: array, required if `items` is not set. The content (HTML) of the tab pane. * - content: array, required if `items` is not set. The content (HTML) of the tab pane.
* - options: array, optional, the HTML attributes of the tab pane container. * - options: array, optional, the HTML attributes of the tab pane container.
* - active: boolean, optional, whether the item tab header and pane should be visible or not. * - active: boolean, optional, whether the item tab header and pane should be visible or not.
...@@ -82,6 +83,11 @@ class Tabs extends Widget ...@@ -82,6 +83,11 @@ class Tabs extends Widget
*/ */
public $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]].
*/
public $linkOptions = [];
/**
* @var boolean whether the labels for header items should be HTML-encoded. * @var boolean whether the labels for header items should be HTML-encoded.
*/ */
public $encodeLabels = true; public $encodeLabels = true;
...@@ -124,6 +130,7 @@ class Tabs extends Widget ...@@ -124,6 +130,7 @@ class Tabs extends Widget
} }
$label = $this->encodeLabels ? Html::encode($item['label']) : $item['label']; $label = $this->encodeLabels ? Html::encode($item['label']) : $item['label'];
$headerOptions = array_merge($this->headerOptions, ArrayHelper::getValue($item, 'headerOptions', [])); $headerOptions = array_merge($this->headerOptions, ArrayHelper::getValue($item, 'headerOptions', []));
$linkOptions = array_merge($this->linkOptions, ArrayHelper::getValue($item, 'linkOptions', []));
if (isset($item['items'])) { if (isset($item['items'])) {
$label .= ' <b class="caret"></b>'; $label .= ' <b class="caret"></b>';
...@@ -133,7 +140,9 @@ class Tabs extends Widget ...@@ -133,7 +140,9 @@ class Tabs extends Widget
Html::addCssClass($headerOptions, 'active'); Html::addCssClass($headerOptions, 'active');
} }
$header = Html::a($label, "#", ['class' => 'dropdown-toggle', 'data-toggle' => 'dropdown']) . "\n" Html::addCssClass($linkOptions, 'dropdown-toggle');
$linkOptions['data-toggle'] = 'dropdown';
$header = Html::a($label, "#", $linkOptions) . "\n"
. Dropdown::widget(['items' => $item['items'], 'clientOptions' => false, 'view' => $this->getView()]); . Dropdown::widget(['items' => $item['items'], 'clientOptions' => false, 'view' => $this->getView()]);
} elseif (isset($item['content'])) { } elseif (isset($item['content'])) {
$options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', [])); $options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', []));
...@@ -144,7 +153,8 @@ class Tabs extends Widget ...@@ -144,7 +153,8 @@ class Tabs extends Widget
Html::addCssClass($options, 'active'); Html::addCssClass($options, 'active');
Html::addCssClass($headerOptions, 'active'); Html::addCssClass($headerOptions, 'active');
} }
$header = Html::a($label, '#' . $options['id'], ['data-toggle' => 'tab']); $linkOptions['data-toggle'] = 'tab';
$header = Html::a($label, '#' . $options['id'], $linkOptions);
$panes[] = Html::tag('div', $item['content'], $options); $panes[] = Html::tag('div', $item['content'], $options);
} else { } else {
throw new InvalidConfigException("Either the 'content' or 'items' option must be set."); throw new InvalidConfigException("Either the 'content' or 'items' option must be set.");
...@@ -154,7 +164,7 @@ class Tabs extends Widget ...@@ -154,7 +164,7 @@ class Tabs extends Widget
} }
return Html::tag('ul', implode("\n", $headers), $this->options) . "\n" return Html::tag('ul', implode("\n", $headers), $this->options) . "\n"
. Html::tag('div', implode("\n", $panes), ['class' => 'tab-content']); . Html::tag('div', implode("\n", $panes), ['class' => 'tab-content']);
} }
/** /**
......
...@@ -67,6 +67,7 @@ Yii Framework 2 Change Log ...@@ -67,6 +67,7 @@ Yii Framework 2 Change Log
- Enh #1476: Add yii\web\Session::handler property (nineinchnick) - Enh #1476: Add yii\web\Session::handler property (nineinchnick)
- Enh #1499: Added `ActionColumn::controller` property to support customizing the controller for handling GridView actions (qiangxue) - Enh #1499: Added `ActionColumn::controller` property to support customizing the controller for handling GridView actions (qiangxue)
- Enh #1523: Query conditions now allow to use the NOT operator (cebe) - Enh #1523: Query conditions now allow to use the NOT operator (cebe)
- Enh #1562: Added `yii\bootstrap\Tabs::linkOptions` (kartik-v)
- Enh #1572: Added `yii\web\Controller::createAbsoluteUrl()` (samdark) - Enh #1572: Added `yii\web\Controller::createAbsoluteUrl()` (samdark)
- Enh #1579: throw exception when the given AR relation name does not match in a case sensitive manner (qiangxue) - Enh #1579: throw exception when the given AR relation name does not match in a case sensitive manner (qiangxue)
- Enh #1581: Added `ActiveQuery::joinWith()` and `ActiveQuery::innerJoinWith()` to support joining with relations (qiangxue) - Enh #1581: Added `ActiveQuery::joinWith()` and `ActiveQuery::innerJoinWith()` to support joining with relations (qiangxue)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment