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

Commit 2db1ba5

Browse files
bekospkozlowski-opensource
authored andcommitted
refactor(buttons): remove some code duplication
1 parent dd8eac2 commit 2db1ba5

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

src/buttons/buttons.js

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,26 @@ angular.module('ui.bootstrap.buttons', [])
55
toggleEvent: 'click'
66
})
77

8-
.directive('btnRadio', ['buttonConfig', function (buttonConfig) {
9-
var activeClass = buttonConfig.activeClass || 'active';
10-
var toggleEvent = buttonConfig.toggleEvent || 'click';
8+
.controller('ButtonsController', ['buttonConfig', function(buttonConfig) {
9+
this.activeClass = buttonConfig.activeClass || 'active';
10+
this.toggleEvent = buttonConfig.toggleEvent || 'click';
11+
}])
1112

13+
.directive('btnRadio', function () {
1214
return {
13-
require: 'ngModel',
14-
link: function (scope, element, attrs, ngModelCtrl) {
15+
require: ['btnRadio', 'ngModel'],
16+
controller: 'ButtonsController',
17+
link: function (scope, element, attrs, ctrls) {
18+
var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
1519

1620
//model -> UI
1721
ngModelCtrl.$render = function () {
18-
element.toggleClass(activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
22+
element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
1923
};
2024

2125
//ui->model
22-
element.bind(toggleEvent, function () {
23-
if (!element.hasClass(activeClass)) {
26+
element.bind(buttonsCtrl.toggleEvent, function () {
27+
if (!element.hasClass(buttonsCtrl.activeClass)) {
2428
scope.$apply(function () {
2529
ngModelCtrl.$setViewValue(scope.$eval(attrs.btnRadio));
2630
ngModelCtrl.$render();
@@ -29,38 +33,40 @@ angular.module('ui.bootstrap.buttons', [])
2933
});
3034
}
3135
};
32-
}])
33-
34-
.directive('btnCheckbox', ['buttonConfig', function (buttonConfig) {
35-
var activeClass = buttonConfig.activeClass || 'active';
36-
var toggleEvent = buttonConfig.toggleEvent || 'click';
36+
})
3737

38+
.directive('btnCheckbox', function () {
3839
return {
39-
require: 'ngModel',
40-
link: function (scope, element, attrs, ngModelCtrl) {
40+
require: ['btnCheckbox', 'ngModel'],
41+
controller: 'ButtonsController',
42+
link: function (scope, element, attrs, ctrls) {
43+
var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
4144

4245
function getTrueValue() {
43-
var trueValue = scope.$eval(attrs.btnCheckboxTrue);
44-
return angular.isDefined(trueValue) ? trueValue : true;
46+
return getCheckboxValue(attrs.btnCheckboxTrue, true);
4547
}
4648

4749
function getFalseValue() {
48-
var falseValue = scope.$eval(attrs.btnCheckboxFalse);
49-
return angular.isDefined(falseValue) ? falseValue : false;
50+
return getCheckboxValue(attrs.btnCheckboxFalse, false);
51+
}
52+
53+
function getCheckboxValue(attributeValue, defaultValue) {
54+
var val = scope.$eval(attributeValue);
55+
return angular.isDefined(val) ? val : defaultValue;
5056
}
5157

5258
//model -> UI
5359
ngModelCtrl.$render = function () {
54-
element.toggleClass(activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
60+
element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
5561
};
5662

5763
//ui->model
58-
element.bind(toggleEvent, function () {
64+
element.bind(buttonsCtrl.toggleEvent, function () {
5965
scope.$apply(function () {
60-
ngModelCtrl.$setViewValue(element.hasClass(activeClass) ? getFalseValue() : getTrueValue());
66+
ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
6167
ngModelCtrl.$render();
6268
});
6369
});
6470
}
6571
};
66-
}]);
72+
});

0 commit comments

Comments
 (0)