Skip to content

Commit 510584e

Browse files
author
Micha Reiser
committed
fix: return null for empty number and percent fields
Return null if the input of an ui-number-mask or ui-percentage-mask field is empty instead of returning undefined or an empty string. This has the advantage, that no additional check is required for null values inside of calculations (e.g. 5 + null === 5). null is also a valid number, where as an empty string is not. This is the same behavior as angular uses for input[number].
1 parent a93cf5a commit 510584e

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

src/global/number/number.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function NumberMaskDirective($locale, $parse, PreFormatters, NumberMasks) {
2222

2323
function parser(value) {
2424
if(ctrl.$isEmpty(value)) {
25-
return value;
25+
return null;
2626
}
2727

2828
var valueToFormat = PreFormatters.clearDelimitersAndLeadingZeros(value) || '0';

src/global/number/number.test.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ describe('ui-number-mask', function() {
4949
expect(model.$viewValue).toBe('3456.79');
5050
});
5151

52+
it('should return null if field is empty', function () {
53+
var input = TestUtil.compile('<input ng-model="model" ui-number-mask>', {
54+
model: 1000
55+
});
56+
57+
var model = input.controller('ngModel');
58+
input.val('').triggerHandler('input');
59+
60+
expect(model.$viewValue).toBe('');
61+
expect(model.$modelValue).toBeNull();
62+
expect(model.$valid).toBe(true);
63+
64+
});
65+
5266
it('should validate minimum value', function() {
5367
var input = TestUtil.compile('<input ng-model="model" ui-number-mask min="50">', {
5468
model: '3456.79'
@@ -101,7 +115,7 @@ describe('ui-number-mask', function() {
101115
{modelValue: '', viewValue: ''},
102116
{modelValue: '0', viewValue: '0.00'},
103117
{modelValue: '0.0', viewValue: '0.00'},
104-
{modelValue: 0, viewValue: '0.00'},
118+
{modelValue: 0, viewValue: '0.00'}
105119
];
106120

107121
tests.forEach(function(test) {

src/global/percentage/percentage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ function PercentageMaskDirective($locale, $parse, PreFormatters, NumberMasks) {
4646

4747
function parse(value) {
4848
if (ctrl.$isEmpty(value)) {
49-
return value;
49+
return null;
5050
}
5151

5252
var valueToFormat = PreFormatters.clearDelimitersAndLeadingZeros(value) || '0';

src/global/percentage/percentage.test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,20 @@ describe('ui-percentage-mask', function() {
2929
expect(model.$viewValue).toBe('1,234.50 %');
3030
});
3131

32+
it('should return null if field is empty', function () {
33+
var input = TestUtil.compile('<input ng-model="model" ui-percentage-mask>', {
34+
model: 12.3
35+
});
36+
37+
var model = input.controller('ngModel');
38+
input.val('').triggerHandler('input');
39+
40+
expect(model.$viewValue).toBe('');
41+
expect(model.$modelValue).toBeNull();
42+
expect(model.$valid).toBe(true);
43+
44+
});
45+
3246
it('should hide thousands delimiter when ui-hide-group-sep is present', function() {
3347
var input = TestUtil.compile('<input ng-model="model" ui-percentage-mask ui-hide-group-sep>', {
3448
model: '12.345'

0 commit comments

Comments
 (0)