Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .directive('phoneInput', function($filter, $browser) {
- return {
- require: 'ngModel',
- link: function($scope, $element, $attrs, ngModelCtrl) {
- var listener = function() {
- var value = $element.val().replace(/^\+/, '0').replace(/[^0-9]/g, '');
- $element.val($filter('tel')(value, false));
- };
- // This runs when we update the text field
- ngModelCtrl.$parsers.push(function(viewValue) {
- return viewValue.replace(/^\+/, '0').replace(/[^0-9]/g, '').slice(0,12);
- });
- // This runs when the model gets updated on the scope directly and keeps our view in sync
- ngModelCtrl.$render = function() {
- $element.val($filter('tel')(ngModelCtrl.$viewValue, false));
- };
- $element.bind('change', listener);
- $element.bind('keydown', function(event) {
- var key = event.keyCode;
- // If the keys include the CTRL, SHIFT, ALT, or META keys, or the arrow keys, do nothing.
- // This lets us support copy and paste too
- if (key == 91 || (15 < key && key < 19) || (37 <= key && key <= 40)){
- return;
- }
- $browser.defer(listener); // Have to do this or changes don't get picked up properly
- });
- $element.bind('paste cut', function() {
- $browser.defer(listener);
- });
- }
- };
- })
- .filter('tel', function () {
- return function (tel) {
- if (!tel) { return '+1'; }
- var value = tel.toString().trim().replace(/^\+/, '0');
- if (value.match(/[^0-9]/)) {
- return tel;
- }
- var code, country, city, number;
- code = '1';
- value = value.slice(2);
- switch (value.length) {
- case 1:
- case 2:
- case 3:
- city = value;
- break;
- default:
- city = value.slice(0, 3);
- number = value.slice(3);
- }
- if(number){
- if(number.length>5){
- number = number.slice(0, 3) + '-' + number.slice(3,5)+ '-' + number.slice(5,7);
- }
- else if (number.length>3){
- number = number.slice(0, 3) + '-' + number.slice(3,7);
- }
- else{
- number = number;
- }
- return ( "+"+code+"(" + city + ") " + number).trim();
- }
- else{
- return "+"+code+"(" + city;
- }
- };
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement