Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 7c9244b

Browse files
committed
fix(ngPluralize): cap value - offset to 0
BREAKING CHANGE: ngPluralize won't produce messages with signed (negative) values anymore.
1 parent 301e7aa commit 7c9244b

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/ng/directive/ngPluralize.js

+20-2
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,15 @@
172172
person2.sendKeys('Vojta');
173173
expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
174174
});
175+
it('should reset count to 0 if count - offset is negative', function() {
176+
var withOffset = element.all(by.css('ng-pluralize')).get(1);
177+
var personCount = element(by.model('personCount'));
178+
personCount.clear();
179+
personCount.sendKeys('4');
180+
expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
181+
personCount.clear();
182+
expect(withOffset.getText()).toEqual('Nobody is viewing.');
183+
});
175184
</file>
176185
</example>
177186
*/
@@ -189,10 +198,19 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
189198
whensExpFns = {},
190199
startSymbol = $interpolate.startSymbol(),
191200
endSymbol = $interpolate.endSymbol(),
192-
braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
193201
watchRemover = angular.noop,
194202
lastCount;
195203

204+
var oneTimeCount = /^\s*::/.test(numberExp) || '';
205+
if (oneTimeCount) {
206+
numberExp = numberExp.replace(/^\s*::/, '');
207+
oneTimeCount = '::';
208+
}
209+
var braceReplacement = [
210+
startSymbol, oneTimeCount, '((', numberExp, '-', offset,
211+
') < 0 ?', 0, ':', numberExp, '-', offset, ')', endSymbol
212+
].join('');
213+
196214
forEach(attr, function(expression, attributeName) {
197215
var tmpMatch = IS_WHEN.exec(attributeName);
198216
if (tmpMatch) {
@@ -205,7 +223,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
205223

206224
});
207225

208-
scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
226+
scope.$watch(oneTimeCount + numberExp, function ngPluralizeWatchAction(newVal) {
209227
var count = parseFloat(newVal);
210228
var countIsNaN = isNaN(count);
211229

test/ng/directive/ngPluralizeSpec.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,18 @@ describe('ngPluralize', function() {
6363

6464
$rootScope.email = -0.1;
6565
$rootScope.$digest();
66-
expect(element.text()).toBe('You have -0.1 new emails');
67-
expect(elementAlt.text()).toBe('You have -0.1 new emails');
66+
expect(element.text()).toBe('You have 0 new emails');
67+
expect(elementAlt.text()).toBe('You have 0 new emails');
6868

6969
$rootScope.email = '-0.01';
7070
$rootScope.$digest();
71-
expect(element.text()).toBe('You have -0.01 new emails');
72-
expect(elementAlt.text()).toBe('You have -0.01 new emails');
71+
expect(element.text()).toBe('You have 0 new emails');
72+
expect(elementAlt.text()).toBe('You have 0 new emails');
7373

7474
$rootScope.email = -2;
7575
$rootScope.$digest();
76-
expect(element.text()).toBe('You have -2 new emails');
77-
expect(elementAlt.text()).toBe('You have -2 new emails');
76+
expect(element.text()).toBe('You have 0 new emails');
77+
expect(elementAlt.text()).toBe('You have 0 new emails');
7878

7979
$rootScope.email = -1;
8080
$rootScope.$digest();
@@ -111,8 +111,8 @@ describe('ngPluralize', function() {
111111

112112
$rootScope.email = '-011';
113113
$rootScope.$digest();
114-
expect(element.text()).toBe('You have -11 new emails');
115-
expect(elementAlt.text()).toBe('You have -11 new emails');
114+
expect(element.text()).toBe('You have 0 new emails');
115+
expect(elementAlt.text()).toBe('You have 0 new emails');
116116

117117
$rootScope.email = '1fff';
118118
$rootScope.$digest();

0 commit comments

Comments
 (0)