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

Commit 42e1af5

Browse files
committed
fix(buttons): respect disabled attribute
- Ensure disabled attribute is respected due to a change in Bootstrap 3.3.5 CSS Closes #4026 Fixes #4013
1 parent 1b04599 commit 42e1af5

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/buttons/buttons.js

+8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ angular.module('ui.bootstrap.buttons', [])
2424

2525
//ui->model
2626
element.bind(buttonsCtrl.toggleEvent, function () {
27+
if ('disabled' in attrs) {
28+
return;
29+
}
30+
2731
var isActive = element.hasClass(buttonsCtrl.activeClass);
2832

2933
if (!isActive || angular.isDefined(attrs.uncheckable)) {
@@ -64,6 +68,10 @@ angular.module('ui.bootstrap.buttons', [])
6468

6569
//ui->model
6670
element.bind(buttonsCtrl.toggleEvent, function () {
71+
if ('disabled' in attrs) {
72+
return;
73+
}
74+
6775
scope.$apply(function () {
6876
ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
6977
ngModelCtrl.$render();

src/buttons/test/buttons.spec.js

+35
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,23 @@ describe('buttons', function () {
8181
expect($scope.model).toEqual(2);
8282
});
8383

84+
it('should not toggle when disabled - issue 4013', function () {
85+
$scope.model = 1;
86+
$scope.falseVal = 0;
87+
var btn = compileButton('<button disabled ng-model="model" btn-checkbox btn-checkbox-true="falseVal">click</button>', $scope);
88+
89+
expect(btn).not.toHaveClass('active');
90+
expect($scope.model).toEqual(1);
91+
92+
btn.click();
93+
94+
expect(btn).not.toHaveClass('active');
95+
96+
$scope.$digest();
97+
98+
expect(btn).not.toHaveClass('active');
99+
});
100+
84101
describe('setting buttonConfig', function () {
85102
var originalActiveClass, originalToggleEvent;
86103

@@ -177,6 +194,24 @@ describe('buttons', function () {
177194
expect(btns.eq(1)).not.toHaveClass('active');
178195
});
179196

197+
it('should not toggle when disabled - issue 4013', function () {
198+
$scope.model = 1;
199+
var btns = compileButtons('<button ng-model="model" btn-radio="1">click1</button><button disabled ng-model="model" btn-radio="2">click2</button>', $scope);
200+
201+
expect(btns.eq(0)).toHaveClass('active');
202+
expect(btns.eq(1)).not.toHaveClass('active');
203+
204+
btns.eq(1).click();
205+
206+
expect(btns.eq(0)).toHaveClass('active');
207+
expect(btns.eq(1)).not.toHaveClass('active');
208+
209+
$scope.$digest();
210+
211+
expect(btns.eq(0)).toHaveClass('active');
212+
expect(btns.eq(1)).not.toHaveClass('active');
213+
});
214+
180215
describe('uncheckable', function () {
181216
//model -> UI
182217
it('should set active class based on model', function () {

0 commit comments

Comments
 (0)