| @@ 289-328 (lines=40) @@ | ||
| 286 | this.toggleEvent = buttonConfig.toggleEvent || 'click'; |
|
| 287 | }]) |
|
| 288 | ||
| 289 | .directive('uibBtnRadio', ['$parse', function($parse) { |
|
| 290 | return { |
|
| 291 | require: ['uibBtnRadio', 'ngModel'], |
|
| 292 | controller: 'UibButtonsController', |
|
| 293 | controllerAs: 'buttons', |
|
| 294 | link: function(scope, element, attrs, ctrls) { |
|
| 295 | var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; |
|
| 296 | var uncheckableExpr = $parse(attrs.uibUncheckable); |
|
| 297 | ||
| 298 | element.find('input').css({display: 'none'}); |
|
| 299 | ||
| 300 | //model -> UI |
|
| 301 | ngModelCtrl.$render = function() { |
|
| 302 | element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio))); |
|
| 303 | }; |
|
| 304 | ||
| 305 | //ui->model |
|
| 306 | element.on(buttonsCtrl.toggleEvent, function() { |
|
| 307 | if (attrs.disabled) { |
|
| 308 | return; |
|
| 309 | } |
|
| 310 | ||
| 311 | var isActive = element.hasClass(buttonsCtrl.activeClass); |
|
| 312 | ||
| 313 | if (!isActive || angular.isDefined(attrs.uncheckable)) { |
|
| 314 | scope.$apply(function() { |
|
| 315 | ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio)); |
|
| 316 | ngModelCtrl.$render(); |
|
| 317 | }); |
|
| 318 | } |
|
| 319 | }); |
|
| 320 | ||
| 321 | if (attrs.uibUncheckable) { |
|
| 322 | scope.$watch(uncheckableExpr, function(uncheckable) { |
|
| 323 | attrs.$set('uncheckable', uncheckable ? '' : undefined); |
|
| 324 | }); |
|
| 325 | } |
|
| 326 | } |
|
| 327 | }; |
|
| 328 | }]) |
|
| 329 | ||
| 330 | .directive('uibBtnCheckbox', function() { |
|
| 331 | return { |
|
| @@ 288-327 (lines=40) @@ | ||
| 285 | this.toggleEvent = buttonConfig.toggleEvent || 'click'; |
|
| 286 | }]) |
|
| 287 | ||
| 288 | .directive('uibBtnRadio', ['$parse', function($parse) { |
|
| 289 | return { |
|
| 290 | require: ['uibBtnRadio', 'ngModel'], |
|
| 291 | controller: 'UibButtonsController', |
|
| 292 | controllerAs: 'buttons', |
|
| 293 | link: function(scope, element, attrs, ctrls) { |
|
| 294 | var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; |
|
| 295 | var uncheckableExpr = $parse(attrs.uibUncheckable); |
|
| 296 | ||
| 297 | element.find('input').css({display: 'none'}); |
|
| 298 | ||
| 299 | //model -> UI |
|
| 300 | ngModelCtrl.$render = function() { |
|
| 301 | element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio))); |
|
| 302 | }; |
|
| 303 | ||
| 304 | //ui->model |
|
| 305 | element.on(buttonsCtrl.toggleEvent, function() { |
|
| 306 | if (attrs.disabled) { |
|
| 307 | return; |
|
| 308 | } |
|
| 309 | ||
| 310 | var isActive = element.hasClass(buttonsCtrl.activeClass); |
|
| 311 | ||
| 312 | if (!isActive || angular.isDefined(attrs.uncheckable)) { |
|
| 313 | scope.$apply(function() { |
|
| 314 | ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio)); |
|
| 315 | ngModelCtrl.$render(); |
|
| 316 | }); |
|
| 317 | } |
|
| 318 | }); |
|
| 319 | ||
| 320 | if (attrs.uibUncheckable) { |
|
| 321 | scope.$watch(uncheckableExpr, function(uncheckable) { |
|
| 322 | attrs.$set('uncheckable', uncheckable ? '' : undefined); |
|
| 323 | }); |
|
| 324 | } |
|
| 325 | } |
|
| 326 | }; |
|
| 327 | }]) |
|
| 328 | ||
| 329 | .directive('uibBtnCheckbox', function() { |
|
| 330 | return { |
|