Skip to content

Commit 8a5c5cd

Browse files
richardaumassisrafael
authored andcommitted
feat(br-phone-number): allow numbers without DDD
* allow typing br-phone-number without DDD, rewriting tests * rewriting related test
1 parent 28b9337 commit 8a5c5cd

File tree

3 files changed

+179
-103
lines changed

3 files changed

+179
-103
lines changed

src/br/phone/br-phone.js

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,51 @@ var maskFactory = require('mask-factory');
77
* FIXME: all numbers will have 9 digits after 2016.
88
* see http://portal.embratel.com.br/embratel/9-digito/
99
*/
10-
var phoneMask8D = new StringMask('(00) 0000-0000'),
11-
phoneMask9D = new StringMask('(00) 00000-0000'),
12-
phoneMask0800 = new StringMask('0000-000-0000');
10+
var phoneMask8D = {
11+
areaCode: new StringMask('(00) 0000-0000'), // with area code
12+
simple: new StringMask('0000-0000') // without area code
13+
}, phoneMask9D = {
14+
areaCode: new StringMask('(00) 00000-0000'), // with area code
15+
simple: new StringMask('00000-0000') // without area code
16+
}, phoneMask0800 = {
17+
areaCode: null, // N/A
18+
simple: new StringMask('0000-000-0000') // N/A, so it's "simple"
19+
};
1320

1421
module.exports = maskFactory({
15-
clearValue: function(rawValue) {
22+
clearValue: function (rawValue) {
1623
return rawValue.toString().replace(/[^0-9]/g, '').slice(0, 11);
1724
},
18-
format: function(cleanValue) {
19-
var formatedValue;
25+
format: function (cleanValue) {
26+
var formattedValue;
27+
2028
if (cleanValue.indexOf('0800') === 0) {
21-
formatedValue = phoneMask0800.apply(cleanValue);
29+
formattedValue = phoneMask0800.simple.apply(cleanValue);
30+
} else if (cleanValue.length < 9) {
31+
formattedValue = phoneMask8D.simple.apply(cleanValue) || '';
32+
} else if (cleanValue.length < 10) {
33+
formattedValue = phoneMask9D.simple.apply(cleanValue);
2234
} else if (cleanValue.length < 11) {
23-
formatedValue = phoneMask8D.apply(cleanValue) || '';
35+
formattedValue = phoneMask8D.areaCode.apply(cleanValue);
2436
} else {
25-
formatedValue = phoneMask9D.apply(cleanValue);
37+
formattedValue = phoneMask9D.areaCode.apply(cleanValue);
2638
}
2739

28-
return formatedValue.trim().replace(/[^0-9]$/, '');
40+
return formattedValue.trim().replace(/[^0-9]$/, '');
2941
},
30-
getModelValue: function(formattedValue, originalModelType) {
42+
getModelValue: function (formattedValue, originalModelType) {
3143
var cleanValue = this.clearValue(formattedValue);
32-
3344
return originalModelType === 'number' ? parseInt(cleanValue) : cleanValue;
3445
},
3546
validations: {
36-
brPhoneNumber: function(value) {
47+
brPhoneNumber: function (value) {
3748
var valueLength = value && value.toString().length;
38-
return valueLength === 10 || valueLength === 11;
49+
50+
// 8- 8D without DD
51+
// 9- 9D without DD
52+
// 10- 9D with DD
53+
// 11- 8D with DD and 0800
54+
return valueLength >= 8 && valueLength <= 11;
3955
}
4056
}
4157
});

src/br/phone/br-phone.spec.js

Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,39 @@
11
'use strict';
22

3-
describe('ui.utils.masks.number', function() {
4-
it('should load the demo page', function() {
3+
describe('ui.utils.masks.number', function () {
4+
it('should load the demo page', function () {
55
browser.get('/src/br/phone/br-phone.html');
66
expect(browser.getTitle()).toEqual('BR Phone Number Spec');
77
});
88

9-
describe('ui-br-phone-number:', function() {
10-
it('should apply a 0800 phone number mask while the user is typping:', function() {
9+
describe('ui-br-phone-number:', function () {
10+
it('should apply a 0800 phone number mask while the user is typping:', function () {
1111
var BS = protractor.Key.BACK_SPACE;
1212

1313
var tests = [
14-
{key:'0', viewValue:'(0', modelValue:'0'},
15-
{key:'8', viewValue:'(08', modelValue:'08'},
16-
{key:'0', viewValue:'(08) 0', modelValue:'080'},
17-
{key:'0', viewValue:'0800', modelValue:'0800'},
18-
{key:'1', viewValue:'0800-1', modelValue:'08001'},
19-
{key:'2', viewValue:'0800-12', modelValue:'080012'},
20-
{key:'3', viewValue:'0800-123', modelValue:'0800123'},
21-
{key:'1', viewValue:'0800-123-1', modelValue:'08001231'},
22-
{key:'2', viewValue:'0800-123-12', modelValue:'080012312'},
23-
{key:'3', viewValue:'0800-123-123', modelValue:'0800123123'},
24-
{key:'4', viewValue:'0800-123-1234', modelValue:'08001231234'},
25-
{key:'5', viewValue:'0800-123-1234', modelValue:'08001231234'},
26-
{key:BS, viewValue:'0800-123-123', modelValue:'0800123123'},
27-
{key:BS, viewValue:'0800-123-12', modelValue:'080012312'},
28-
{key:BS, viewValue:'0800-123-1', modelValue:'08001231'},
29-
{key:BS, viewValue:'0800-123', modelValue:'0800123'},
30-
{key:BS, viewValue:'0800-12', modelValue:'080012'},
31-
{key:BS, viewValue:'0800-1', modelValue:'08001'},
32-
{key:BS, viewValue:'0800', modelValue:'0800'},
33-
{key:BS, viewValue:'(08) 0', modelValue:'080'},
34-
{key:BS, viewValue:'(08', modelValue:'08'},
35-
{key:BS, viewValue:'(0', modelValue:'0'},
36-
{key:BS, viewValue:'', modelValue:''},
14+
{key: '0', viewValue: '0', modelValue: '0'},
15+
{key: '8', viewValue: '08', modelValue: '08'},
16+
{key: '0', viewValue: '080', modelValue: '080'},
17+
{key: '0', viewValue: '0800', modelValue: '0800'},
18+
{key: '1', viewValue: '0800-1', modelValue: '08001'},
19+
{key: '2', viewValue: '0800-12', modelValue: '080012'},
20+
{key: '3', viewValue: '0800-123', modelValue: '0800123'},
21+
{key: '1', viewValue: '0800-123-1', modelValue: '08001231'},
22+
{key: '2', viewValue: '0800-123-12', modelValue: '080012312'},
23+
{key: '3', viewValue: '0800-123-123', modelValue: '0800123123'},
24+
{key: '4', viewValue: '0800-123-1234', modelValue: '08001231234'},
25+
{key: '5', viewValue: '0800-123-1234', modelValue: '08001231234'},
26+
{key: BS, viewValue: '0800-123-123', modelValue: '0800123123'},
27+
{key: BS, viewValue: '0800-123-12', modelValue: '080012312'},
28+
{key: BS, viewValue: '0800-123-1', modelValue: '08001231'},
29+
{key: BS, viewValue: '0800-123', modelValue: '0800123'},
30+
{key: BS, viewValue: '0800-12', modelValue: '080012'},
31+
{key: BS, viewValue: '0800-1', modelValue: '08001'},
32+
{key: BS, viewValue: '0800', modelValue: '0800'},
33+
{key: BS, viewValue: '080', modelValue: '080'},
34+
{key: BS, viewValue: '08', modelValue: '08'},
35+
{key: BS, viewValue: '0', modelValue: '0'},
36+
{key: BS, viewValue: '', modelValue: ''}
3737
];
3838

3939
var input = element(by.model('freeLinePhoneNumber')),
@@ -46,33 +46,33 @@ describe('ui.utils.masks.number', function() {
4646
}
4747
});
4848

49-
it('should apply a phone number mask while the user is typping:', function() {
49+
it('should apply a phone number mask while the user is typping:', function () {
5050
var BS = protractor.Key.BACK_SPACE;
5151

5252
var tests = [
53-
{key:'1', viewValue:'(1', modelValue:'1'},
54-
{key:'2', viewValue:'(12', modelValue:'12'},
55-
{key:'3', viewValue:'(12) 3', modelValue:'123'},
56-
{key:'4', viewValue:'(12) 34', modelValue:'1234'},
57-
{key:'5', viewValue:'(12) 345', modelValue:'12345'},
58-
{key:'6', viewValue:'(12) 3456', modelValue:'123456'},
59-
{key:'7', viewValue:'(12) 3456-7', modelValue:'1234567'},
60-
{key:'8', viewValue:'(12) 3456-78', modelValue:'12345678'},
61-
{key:'9', viewValue:'(12) 3456-789', modelValue:'123456789'},
62-
{key:'0', viewValue:'(12) 3456-7890', modelValue:'1234567890'},
63-
{key:'1', viewValue:'(12) 34567-8901', modelValue:'12345678901'},
64-
{key:'2', viewValue:'(12) 34567-8901', modelValue:'12345678901'},
65-
{key:BS, viewValue:'(12) 3456-7890', modelValue:'1234567890'},
66-
{key:BS, viewValue:'(12) 3456-789', modelValue:'123456789'},
67-
{key:BS, viewValue:'(12) 3456-78', modelValue:'12345678'},
68-
{key:BS, viewValue:'(12) 3456-7', modelValue:'1234567'},
69-
{key:BS, viewValue:'(12) 3456', modelValue:'123456'},
70-
{key:BS, viewValue:'(12) 345', modelValue:'12345'},
71-
{key:BS, viewValue:'(12) 34', modelValue:'1234'},
72-
{key:BS, viewValue:'(12) 3', modelValue:'123'},
73-
{key:BS, viewValue:'(12', modelValue:'12'},
74-
{key:BS, viewValue:'(1', modelValue:'1'},
75-
{key:BS, viewValue:'', modelValue:''},
53+
{key: '1', viewValue: '1', modelValue: '1'},
54+
{key: '2', viewValue: '12', modelValue: '12'},
55+
{key: '3', viewValue: '123', modelValue: '123'},
56+
{key: '4', viewValue: '1234', modelValue: '1234'},
57+
{key: '5', viewValue: '1234-5', modelValue: '12345'},
58+
{key: '6', viewValue: '1234-56', modelValue: '123456'},
59+
{key: '7', viewValue: '1234-567', modelValue: '1234567'},
60+
{key: '8', viewValue: '1234-5678', modelValue: '12345678'},
61+
{key: '9', viewValue: '12345-6789', modelValue: '123456789'},
62+
{key: '0', viewValue: '(12) 3456-7890', modelValue: '1234567890'},
63+
{key: '1', viewValue: '(12) 34567-8901', modelValue: '12345678901'},
64+
{key: '2', viewValue: '(12) 34567-8901', modelValue: '12345678901'},
65+
{key: BS, viewValue: '(12) 3456-7890', modelValue: '1234567890'},
66+
{key: BS, viewValue: '12345-6789', modelValue: '123456789'},
67+
{key: BS, viewValue: '1234-5678', modelValue: '12345678'},
68+
{key: BS, viewValue: '1234-567', modelValue: '1234567'},
69+
{key: BS, viewValue: '1234-56', modelValue: '123456'},
70+
{key: BS, viewValue: '1234-5', modelValue: '12345'},
71+
{key: BS, viewValue: '1234', modelValue: '1234'},
72+
{key: BS, viewValue: '123', modelValue: '123'},
73+
{key: BS, viewValue: '12', modelValue: '12'},
74+
{key: BS, viewValue: '1', modelValue: '1'},
75+
{key: BS, viewValue: '', modelValue: ''}
7676
];
7777

7878
var input = element(by.model('phoneNumber')),
@@ -85,24 +85,24 @@ describe('ui.utils.masks.number', function() {
8585
}
8686
});
8787

88-
it('should apply a phone number mask in a model with default value:', function() {
88+
it('should apply a phone number mask in a model with default value:', function () {
8989
var BS = protractor.Key.BACK_SPACE;
9090

9191
var tests = [
92-
{key:'1', viewValue:'(1', modelValue:'1'},
93-
{key:'2', viewValue:'(12', modelValue:'12'},
94-
{key:'3', viewValue:'(12) 3', modelValue:'123'},
95-
{key:'4', viewValue:'(12) 34', modelValue:'1234'},
96-
{key:'5', viewValue:'(12) 345', modelValue:'12345'},
97-
{key:'6', viewValue:'(12) 3456', modelValue:'123456'},
98-
{key:'7', viewValue:'(12) 3456-7', modelValue:'1234567'},
99-
{key:BS, viewValue:'(12) 3456', modelValue:'123456'},
100-
{key:BS, viewValue:'(12) 345', modelValue:'12345'},
101-
{key:BS, viewValue:'(12) 34', modelValue:'1234'},
102-
{key:BS, viewValue:'(12) 3', modelValue:'123'},
103-
{key:BS, viewValue:'(12', modelValue:'12'},
104-
{key:BS, viewValue:'(1', modelValue:'1'},
105-
{key:BS, viewValue:'', modelValue:''},
92+
{key: '1', viewValue: '1', modelValue: '1'},
93+
{key: '2', viewValue: '12', modelValue: '12'},
94+
{key: '3', viewValue: '123', modelValue: '123'},
95+
{key: '4', viewValue: '1234', modelValue: '1234'},
96+
{key: '5', viewValue: '1234-5', modelValue: '12345'},
97+
{key: '6', viewValue: '1234-56', modelValue: '123456'},
98+
{key: '7', viewValue: '1234-567', modelValue: '1234567'},
99+
{key: BS, viewValue: '1234-56', modelValue: '123456'},
100+
{key: BS, viewValue: '1234-5', modelValue: '12345'},
101+
{key: BS, viewValue: '1234', modelValue: '1234'},
102+
{key: BS, viewValue: '123', modelValue: '123'},
103+
{key: BS, viewValue: '12', modelValue: '12'},
104+
{key: BS, viewValue: '1', modelValue: '1'},
105+
{key: BS, viewValue: '', modelValue: ''}
106106
];
107107

108108
var input = element(by.model('initializedPhoneNumber')),

0 commit comments

Comments
 (0)