diff --git a/src/rating/docs/readme.md b/src/rating/docs/readme.md index 471e8df359..1b27d15206 100644 --- a/src/rating/docs/readme.md +++ b/src/rating/docs/readme.md @@ -38,6 +38,11 @@ Rating directive that will take care of visualising a star rating bar. _(Default: ['one', 'two', 'three', 'four', 'five']`)_ - An array of strings defining titles for all icons. +* `enable-reset` + $ + _(Default: `true`)_ - + Clicking the icon of the current rating will reset the rating to 0. + * `state-off` $ C diff --git a/src/rating/rating.js b/src/rating/rating.js index fe0c363ee9..d1b90b0335 100644 --- a/src/rating/rating.js +++ b/src/rating/rating.js @@ -4,6 +4,7 @@ angular.module('ui.bootstrap.rating', []) max: 5, stateOn: null, stateOff: null, + enableReset: true, titles : ['one', 'two', 'three', 'four', 'five'] }) @@ -25,7 +26,9 @@ angular.module('ui.bootstrap.rating', []) this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn; this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff; - var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles ; + this.enableReset = angular.isDefined($attrs.enableReset) ? + $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset; + var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles; this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ? tmpTitles : ratingConfig.titles; @@ -52,7 +55,8 @@ angular.module('ui.bootstrap.rating', []) $scope.rate = function(value) { if (!$scope.readonly && value >= 0 && value <= $scope.range.length) { - ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue === value ? 0 : value); + var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value; + ngModelCtrl.$setViewValue(newViewValue); ngModelCtrl.$render(); } }; diff --git a/src/rating/test/rating.spec.js b/src/rating/test/rating.spec.js index d435dccccb..ec1c139051 100644 --- a/src/rating/test/rating.spec.js +++ b/src/rating/test/rating.spec.js @@ -146,6 +146,31 @@ describe('rating directive', function() { expect(getState()).toEqual([true, true, true, true, true]); }); + it('handles enable-reset attribute', function() { + $rootScope.canReset = false; + element = $compile('')($rootScope); + $rootScope.$digest(); + + var star = { + states: [true, true, true, true, true], + rating: 5 + }; + + var selectStar = getStar(star.rating); + + selectStar.click(); + $rootScope.$digest(); + expect(getState()).toEqual(star.states); + expect($rootScope.rate).toBe(star.rating); + expect(element.attr('aria-valuenow')).toBe(star.rating.toString()); + + selectStar.click(); + $rootScope.$digest(); + expect(getState()).toEqual(star.states); + expect($rootScope.rate).toBe(star.rating); + expect(element.attr('aria-valuenow')).toBe(star.rating.toString()); + }); + it('should fire onHover', function() { $rootScope.hoveringOver = jasmine.createSpy('hoveringOver'); element = $compile('')($rootScope);