diff --git a/bower.json b/bower.json index 7d7eb19..d646c7f 100644 --- a/bower.json +++ b/bower.json @@ -1,12 +1,12 @@ { "name": "international-phone-number", - "version": "0.0.1", + "version": "0.0.4", "main": "releases/international-phone-number.js", "description": "AngularJS directive for intl-tel-input jQuery plugin", "author": "Marek Pietrucha (http://enginearch.com)", "license": "MIT", "dependencies": { "angular": "~1.2.9", - "intl-tel-input": "~3.6.5" + "intl-tel-input": "~5.1.0" } -} \ No newline at end of file +} diff --git a/package.json b/package.json index b9903c8..78e4270 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "international-phone-number", - "version": "0.0.1", + "version": "0.0.2", "description": "AngularJS directive for intl-tel-input jQuery plugin", "keywords": [ "international", @@ -20,6 +20,6 @@ "author": "Marek Pietrucha (http://enginearch.com)", "repository": { "type": "git", - "url": "https://github.com/mareczek/international-phone-number.git" + "url": "https://github.com/yhourdel/international-phone-number.git" } -} \ No newline at end of file +} diff --git a/releases/international-phone-number.js b/releases/international-phone-number.js index 1f64f34..128e723 100644 --- a/releases/international-phone-number.js +++ b/releases/international-phone-number.js @@ -1,9 +1,7 @@ -// Author Marek Pietrucha -// https://github.com/mareczek/international-phone-number - +// Generated by CoffeeScript 1.7.1 (function() { "use strict"; - angular.module("internationalPhoneNumber", []).directive('internationalPhoneNumber', function() { + angular.module("internationalPhoneNumber", []).directive('internationalPhoneNumber', function($timeout) { return { restrict: 'A', require: '^ngModel', @@ -29,7 +27,8 @@ onlyCountries: void 0, preferredCountries: ['us', 'gb'], responsiveDropdown: false, - utilsScript: "" + utilsScript: "", + keepModelClean: false }; angular.forEach(options, function(value, key) { var option; @@ -46,7 +45,18 @@ } } }); - element.intlTelInput(options); + $timeout(function() { + var newNumber, selectedCountryData; + element.intlTelInput(options); + if (options.nationalMode) { + selectedCountryData = element.intlTelInput('getSelectedCountryData'); + if (!selectedCountryData) { + return true; + } + newNumber = element.val().replace(new RegExp("\\+" + selectedCountryData.dialCode), 0); + return element.intlTelInput('setNumber', newNumber); + } + }); if (!options.utilsScript) { element.intlTelInput('loadUtils', 'bower_components/intl-tel-input/lib/libphonenumber/build/utils.js'); } @@ -54,7 +64,11 @@ if (!value) { return value; } - return value.replace(/[^\d]/g, ''); + if (options.keepModelClean) { + return element.intlTelInput('getNumber'); + } else { + return value.replace(/[^\d]/g, ''); + } }); ctrl.$parsers.push(function(value) { if (value) { diff --git a/releases/international-phone-number.min.js b/releases/international-phone-number.min.js index bd6ad00..b977a85 100644 --- a/releases/international-phone-number.min.js +++ b/releases/international-phone-number.min.js @@ -1 +1 @@ -(function(){"use strict";angular.module("internationalPhoneNumber",[]).directive("internationalPhoneNumber",function(){return{restrict:"A",require:"^ngModel",scope:!0,link:function(scope,element,attrs,ctrl){var handleWhatsSupposedToBeAnArray,options,read;return read=function(){return ctrl.$setViewValue(element.val())},handleWhatsSupposedToBeAnArray=function(e){return"object"==typeof e?e:e.toString().replace(/[ ]/g,"").split(",")},options={autoFormat:!0,autoHideDialCode:!0,defaultCountry:"",nationalMode:!1,numberType:"",onlyCountries:void 0,preferredCountries:["us","gb"],responsiveDropdown:!1,utilsScript:""},angular.forEach(options,function(value,key){var option;return option=eval("attrs."+key),angular.isDefined(option)?"preferredCountries"===key?options.preferredCountries=handleWhatsSupposedToBeAnArray(option):"onlyCountries"===key?options.onlyCountries=handleWhatsSupposedToBeAnArray(option):options[key]="boolean"==typeof value?"true"===option:option:void 0}),element.intlTelInput(options),options.utilsScript||element.intlTelInput("loadUtils","bower_components/intl-tel-input/lib/libphonenumber/build/utils.js"),ctrl.$parsers.push(function(e){return e?e.replace(/[^\d]/g,""):e}),ctrl.$parsers.push(function(e){return e?ctrl.$setValidity("international-phone-number",element.intlTelInput("isValidNumber")):(e="",delete ctrl.$error["international-phone-number"]),e}),element.on("blur keyup change",function(){return scope.$apply(read)}),element.on("$destroy",function(){return element.off("blur keyup change")})}}})}).call(this); +(function(){"use strict";angular.module("internationalPhoneNumber",[]).directive("internationalPhoneNumber",function($timeout){return{restrict:"A",require:"^ngModel",scope:true,link:function(scope,element,attrs,ctrl){var handleWhatsSupposedToBeAnArray,options,read;read=function(){return ctrl.$setViewValue(element.val())};handleWhatsSupposedToBeAnArray=function(value){if(typeof value==="object"){return value}else{return value.toString().replace(/[ ]/g,"").split(",")}};options={autoFormat:true,autoHideDialCode:true,defaultCountry:"",nationalMode:false,numberType:"",onlyCountries:void 0,preferredCountries:["us","gb"],responsiveDropdown:false,utilsScript:"",keepModelClean:false};angular.forEach(options,function(value,key){var option;option=eval("attrs."+key);if(angular.isDefined(option)){if(key==="preferredCountries"){return options.preferredCountries=handleWhatsSupposedToBeAnArray(option)}else if(key==="onlyCountries"){return options.onlyCountries=handleWhatsSupposedToBeAnArray(option)}else if(typeof value==="boolean"){return options[key]=option==="true"}else{return options[key]=option}}});$timeout(function(){var newNumber,selectedCountryData;element.intlTelInput(options);if(options.nationalMode){selectedCountryData=element.intlTelInput("getSelectedCountryData");if(!selectedCountryData){return true}newNumber=element.val().replace(new RegExp("\\+"+selectedCountryData.dialCode),0);return element.intlTelInput("setNumber",newNumber)}});if(!options.utilsScript){element.intlTelInput("loadUtils","bower_components/intl-tel-input/lib/libphonenumber/build/utils.js")}ctrl.$parsers.push(function(value){if(!value){return value}if(options.keepModelClean){return element.intlTelInput("getNumber")}else{return value.replace(/[^\d]/g,"")}});ctrl.$parsers.push(function(value){if(value){ctrl.$setValidity("international-phone-number",element.intlTelInput("isValidNumber"))}else{value="";delete ctrl.$error["international-phone-number"]}return value});element.on("blur keyup change",function(event){return scope.$apply(read)});return element.on("$destroy",function(){return element.off("blur keyup change")})}}})}).call(this); diff --git a/src/international-phone-number.coffee b/src/international-phone-number.coffee index 1939571..09b1332 100644 --- a/src/international-phone-number.coffee +++ b/src/international-phone-number.coffee @@ -2,7 +2,7 @@ # https://github.com/mareczek/international-phone-number "use strict" -angular.module("internationalPhoneNumber", []).directive 'internationalPhoneNumber', () -> +angular.module("internationalPhoneNumber", []).directive 'internationalPhoneNumber', ($timeout) -> restrict: 'A' require: '^ngModel' @@ -29,6 +29,7 @@ angular.module("internationalPhoneNumber", []).directive 'internationalPhoneNumb preferredCountries: ['us', 'gb'] responsiveDropdown: false utilsScript: "" + keepModelClean: false angular.forEach options, (value, key) -> option = eval("attrs.#{key}") @@ -36,20 +37,30 @@ angular.module("internationalPhoneNumber", []).directive 'internationalPhoneNumb if key == 'preferredCountries' options.preferredCountries = handleWhatsSupposedToBeAnArray option else if key == 'onlyCountries' - options.onlyCountries = handleWhatsSupposedToBeAnArray option + options.onlyCountries = handleWhatsSupposedToBeAnArray option else if typeof(value) == "boolean" options[key] = (option == "true") else options[key] = option - element.intlTelInput(options) + # timeout so that the angular content has time to execute + $timeout -> + element.intlTelInput(options) + if options.nationalMode + selectedCountryData = element.intlTelInput('getSelectedCountryData') + return true unless selectedCountryData + newNumber = element.val().replace new RegExp("\\+#{selectedCountryData.dialCode}"), 0 + element.intlTelInput 'setNumber', newNumber unless options.utilsScript element.intlTelInput('loadUtils', 'bower_components/intl-tel-input/lib/libphonenumber/build/utils.js') ctrl.$parsers.push (value) -> return value if !value - value.replace(/[^\d]/g, '') + if options.keepModelClean + element.intlTelInput('getNumber') + else + value.replace(/[^\d]/g, '') ctrl.$parsers.push (value) -> if value