forked from hodgepodgers/ng-intl-tel-input
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ng-intl-tel-input.directive.js
64 lines (64 loc) · 2.46 KB
/
ng-intl-tel-input.directive.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
angular.module('ngIntlTelInput')
.directive('ngIntlTelInput', ['ngIntlTelInput', '$log', '$window', '$parse',
function (ngIntlTelInput, $log, $window, $parse) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elm, attr, ctrl) {
// Warning for bad directive usage.
if ((!!attr.type && (attr.type !== 'text' && attr.type !== 'tel')) || elm[0].tagName !== 'INPUT') {
$log.warn('ng-intl-tel-input can only be applied to a *text* or *tel* input');
return;
}
// Override default country.
if (attr.initialCountry) {
ngIntlTelInput.set({initialCountry: attr.initialCountry});
}
// Initialize.
ngIntlTelInput.init(elm);
// Set Selected Country Data.
function setSelectedCountryData(model) {
var getter = $parse(model);
var setter = getter.assign;
setter(scope, elm.intlTelInput('getSelectedCountryData'));
}
// Handle Country Changes.
function handleCountryChange() {
setSelectedCountryData(attr.selectedCountry);
}
// Country Change cleanup.
function cleanUp() {
angular.element($window).off('countrychange', handleCountryChange);
}
// Selected Country Data.
if (attr.selectedCountry) {
setSelectedCountryData(attr.selectedCountry);
angular.element($window).on('countrychange', handleCountryChange);
scope.$on('$destroy', cleanUp);
}
// Validation.
ctrl.$validators.ngIntlTelInput = function (value) {
// if phone number is deleted / empty do not run phone number validation
if (value || elm[0].value.length > 0) {
return elm.intlTelInput('isValidNumber');
} else {
return true;
}
};
// Set model value to valid, formatted version.
ctrl.$parsers.push(function (value) {
return elm.intlTelInput('getNumber');
});
// Set input value to model value and trigger evaluation.
ctrl.$formatters.push(function (value) {
if (value) {
if(value.charAt(0) !== '+') {
value = '+' + value;
}
elm.intlTelInput('setNumber', value);
}
return value;
});
}
};
}]);