Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit 8364e76

Browse files
amahfouzwesleycho
authored andcommitted
feat(tabs): support optional classes on tab
- Add support for optional classes on each tab Closes #5430
1 parent 8575155 commit 8364e76

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

src/tabs/docs/demo.html

+8
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@
4545

4646
<hr />
4747

48+
Tabbed pills with CSS classes
49+
<uib-tabset type="pills">
50+
<uib-tab heading="Default Size">Tab 1 content</uib-tab>
51+
<uib-tab heading="Small Button" classes="btn-sm">Tab 2 content</uib-tab>
52+
</uib-tabset>
53+
54+
<hr />
55+
4856
Tabs using nested forms:
4957
<form name="outerForm" class="tab-form-demo">
5058
<uib-tabset active="activeForm">

src/tabs/docs/readme.md

+10
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ AngularJS version of the tabs directive.
2727

2828
### uib-tab settings
2929

30+
* `active`
31+
<small class="badge">$</small>
32+
<i class="glyphicon glyphicon-eye-open"></i>
33+
_(Default: `false`)_ -
34+
Whether tab is currently selected.
35+
36+
* `classes`
37+
<small class="badge">$</small> -
38+
An optional string of space-separated CSS classes.
39+
3040
* `deselect()`
3141
<small class="badge">$</small> -
3242
An optional expression called when tab is deactivated.

src/tabs/tabs.js

+5
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ angular.module('ui.bootstrap.tabs', [])
119119
scope: {
120120
heading: '@',
121121
index: '=?',
122+
classes: '@?',
122123
onSelect: '&select', //This callback is called in contentHeadingTransclude
123124
//once it inserts the tab's content into the dom
124125
onDeselect: '&deselect'
@@ -143,6 +144,10 @@ angular.module('ui.bootstrap.tabs', [])
143144
}
144145
}
145146

147+
if (angular.isUndefined(attrs.classes)) {
148+
scope.classes = '';
149+
}
150+
146151
scope.select = function() {
147152
if (!scope.disabled) {
148153
var index;

src/tabs/test/tabs.spec.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,18 @@ describe('tabs', function() {
3434
scope.first = '1';
3535
scope.second = '2';
3636
scope.active = 1;
37+
scope.firstClass = 'first-class';
38+
scope.secondClass = 'second-class-1 second-class-2';
3739
scope.selectFirst = jasmine.createSpy();
3840
scope.selectSecond = jasmine.createSpy();
3941
scope.deselectFirst = jasmine.createSpy();
4042
scope.deselectSecond = jasmine.createSpy();
4143
elm = $compile([
4244
'<uib-tabset class="hello" data-pizza="pepperoni" active="active">',
43-
' <uib-tab index="1" heading="First Tab {{first}}" select="selectFirst()" deselect="deselectFirst()">',
45+
' <uib-tab index="1" heading="First Tab {{first}}" classes="{{firstClass}}" select="selectFirst()" deselect="deselectFirst()">',
4446
' first content is {{first}}',
4547
' </uib-tab>',
46-
' <uib-tab index="2" select="selectSecond()" deselect="deselectSecond()">',
48+
' <uib-tab index="2" classes="{{secondClass}}" select="selectSecond()" deselect="deselectSecond()">',
4749
' <uib-tab-heading><b>Second</b> Tab {{second}}</uib-tab-heading>',
4850
' second content is {{second}}',
4951
' </uib-tab>',
@@ -77,6 +79,15 @@ describe('tabs', function() {
7779
expect(scope.active).toBe(1);
7880
});
7981

82+
it('should set optional classes on each tab', function() {
83+
expect(titles().eq(0)).toHaveClass(scope.firstClass);
84+
85+
var secondClassArr = scope.secondClass.split(' ');
86+
secondClassArr.forEach(function(clazz) {
87+
expect(titles().eq(1)).toHaveClass(clazz);
88+
});
89+
});
90+
8091
it('should change active on click', function() {
8192
titles().eq(1).find('> a').click();
8293
expect(contents().eq(1)).toHaveClass('active');

template/tabs/tab.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<li ng-class="{active: active, disabled: disabled}" class="uib-tab nav-item">
1+
<li ng-class="[{active: active, disabled: disabled}, classes]" class="uib-tab nav-item">
22
<a href ng-click="select()" class="nav-link" uib-tab-heading-transclude>{{heading}}</a>
33
</li>

0 commit comments

Comments
 (0)