From 4812be500a2bb139385865323521a9ef31338609 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Sat, 15 Feb 2014 19:28:24 -0500 Subject: [PATCH] Fixes #1562: Added `yii\bootstrap\Tabs::linkOptions` --- CHANGELOG.md | 1 + Tabs.php | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b6c84d..579a72d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Yii Framework 2 bootstrap extension Change Log - 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 #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) - Chg #1459: Update Collapse to use bootstrap 3 classes (tonydspaniard) - Chg #1820: Update Progress to use bootstrap 3 markup (samdark) diff --git a/Tabs.php b/Tabs.php index 4f8f7ad..a001edd 100644 --- a/Tabs.php +++ b/Tabs.php @@ -59,6 +59,7 @@ class Tabs extends Widget * * - label: string, required, the tab header label. * - 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. * - 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. @@ -82,6 +83,11 @@ class Tabs extends Widget */ 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. */ public $encodeLabels = true; @@ -124,6 +130,7 @@ class Tabs extends Widget } $label = $this->encodeLabels ? Html::encode($item['label']) : $item['label']; $headerOptions = array_merge($this->headerOptions, ArrayHelper::getValue($item, 'headerOptions', [])); + $linkOptions = array_merge($this->linkOptions, ArrayHelper::getValue($item, 'linkOptions', [])); if (isset($item['items'])) { $label .= ' '; @@ -133,7 +140,9 @@ class Tabs extends Widget 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()]); } elseif (isset($item['content'])) { $options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', [])); @@ -144,7 +153,8 @@ class Tabs extends Widget Html::addCssClass($options, '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); } else { throw new InvalidConfigException("Either the 'content' or 'items' option must be set."); @@ -154,7 +164,7 @@ class Tabs extends Widget } 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']); } /**