diff --git a/index.html b/index.html
index 050b2e4c..c8b8ff0f 100644
--- a/index.html
+++ b/index.html
@@ -129,6 +129,7 @@
+
diff --git a/js/helpers.js b/js/helpers.js
index 4fad4191..49d61209 100644
--- a/js/helpers.js
+++ b/js/helpers.js
@@ -213,49 +213,6 @@ window.textsecure.protos = function() {
// Number formatting utils
window.textsecure.utils = function() {
var self = {};
-
-
- /****************************************
- *** Number conversion/checking stuff ***
- ****************************************/
- self.getAllRegionCodes = function() {
- return {"AD":"Andorra","AE":"United Arab Emirates","AF":"Afghanistan","AG":"Antigua and Barbuda","AI":"Anguilla","AL":"Albania","AM":"Armenia","AO":"Angola","AR":"Argentina","AS":"AmericanSamoa","AT":"Austria","AU":"Australia","AW":"Aruba","AX":"Åland Islands","AZ":"Azerbaijan","BA":"Bosnia and Herzegovina","BB":"Barbados","BD":"Bangladesh","BE":"Belgium","BF":"Burkina Faso","BG":"Bulgaria","BH":"Bahrain","BI":"Burundi","BJ":"Benin","BL":"Saint Barthélemy","BM":"Bermuda","BN":"Brunei Darussalam","BO":"Bolivia, Plurinational State of","BR":"Brazil","BS":"Bahamas","BT":"Bhutan","BW":"Botswana","BY":"Belarus","BZ":"Belize","CA":"Canada","CC":"Cocos (Keeling) Islands","CD":"Congo, The Democratic Republic of the","CF":"Central African Republic","CG":"Congo","CH":"Switzerland","CI":"Cote d'Ivoire","CK":"Cook Islands","CL":"Chile","CM":"Cameroon","CN":"China","CO":"Colombia","CR":"Costa Rica","CU":"Cuba","CV":"Cape Verde","CX":"Christmas Island","CY":"Cyprus","CZ":"Czech Republic","DE":"Germany","DJ":"Djibouti","DK":"Denmark","DM":"Dominica","DO":"Dominican Republic","DZ":"Algeria","EC":"Ecuador","EE":"Estonia","EG":"Egypt","ER":"Eritrea","ES":"Spain","ET":"Ethiopia","FI":"Finland","FJ":"Fiji","FK":"Falkland Islands (Malvinas)","FM":"Micronesia, Federated States of","FO":"Faroe Islands","FR":"France","GA":"Gabon","GB":"United Kingdom","GD":"Grenada","GE":"Georgia","GF":"French Guiana","GG":"Guernsey","GH":"Ghana","GI":"Gibraltar","GL":"Greenland","GM":"Gambia","GN":"Guinea","GP":"Guadeloupe","GQ":"Equatorial Guinea","GR":"Ελλάδα","GT":"Guatemala","GU":"Guam","GW":"Guinea-Bissau","GY":"Guyana","HK":"Hong Kong","HN":"Honduras","HR":"Croatia","HT":"Haiti","HU":"Magyarország","ID":"Indonesia","IE":"Ireland","IL":"Israel","IM":"Isle of Man","IN":"India","IO":"British Indian Ocean Territory","IQ":"Iraq","IR":"Iran, Islamic Republic of","IS":"Iceland","IT":"Italy","JE":"Jersey","JM":"Jamaica","JO":"Jordan","JP":"Japan","KE":"Kenya","KG":"Kyrgyzstan","KH":"Cambodia","KI":"Kiribati","KM":"Comoros","KN":"Saint Kitts and Nevis","KP":"Korea, Democratic People's Republic of","KR":"Korea, Republic of","KW":"Kuwait","KY":"Cayman Islands","KZ":"Kazakhstan","LA":"Lao People's Democratic Republic","LB":"Lebanon","LC":"Saint Lucia","LI":"Liechtenstein","LK":"Sri Lanka","LR":"Liberia","LS":"Lesotho","LT":"Lithuania","LU":"Luxembourg","LV":"Latvia","LY":"Libyan Arab Jamahiriya","MA":"Morocco","MC":"Monaco","MD":"Moldova, Republic of","ME":"Црна Гора","MF":"Saint Martin","MG":"Madagascar","MH":"Marshall Islands","MK":"Macedonia, The Former Yugoslav Republic of","ML":"Mali","MM":"Myanmar","MN":"Mongolia","MO":"Macao","MP":"Northern Mariana Islands","MQ":"Martinique","MR":"Mauritania","MS":"Montserrat","MT":"Malta","MU":"Mauritius","MV":"Maldives","MW":"Malawi","MX":"Mexico","MY":"Malaysia","MZ":"Mozambique","NA":"Namibia","NC":"New Caledonia","NE":"Niger","NF":"Norfolk Island","NG":"Nigeria","NI":"Nicaragua","NL":"Netherlands","NO":"Norway","NP":"Nepal","NR":"Nauru","NU":"Niue","NZ":"New Zealand","OM":"Oman","PA":"Panama","PE":"Peru","PF":"French Polynesia","PG":"Papua New Guinea","PH":"Philippines","PK":"Pakistan","PL":"Polska","PM":"Saint Pierre and Miquelon","PR":"Puerto Rico","PS":"Palestinian Territory, Occupied","PT":"Portugal","PW":"Palau","PY":"Paraguay","QA":"Qatar","RE":"Réunion","RO":"Romania","RS":"Србија","RU":"Russia","RW":"Rwanda","SA":"Saudi Arabia","SB":"Solomon Islands","SC":"Seychelles","SD":"Sudan","SE":"Sweden","SG":"Singapore","SH":"Saint Helena, Ascension and Tristan Da Cunha","SI":"Slovenia","SJ":"Svalbard and Jan Mayen","SK":"Slovakia","SL":"Sierra Leone","SM":"San Marino","SN":"Senegal","SO":"Somalia","SR":"Suriname","ST":"Sao Tome and Principe","SV":"El Salvador","SY":"Syrian Arab Republic","SZ":"Swaziland","TC":"Turks and Caicos Islands","TD":"Chad","TG":"Togo","TH":"Thailand","TJ":"Tajikistan","TK":"Tokelau","TL":"Timor-Leste","TM":"Turkmenistan","TN":"Tunisia","TO":"Tonga","TR":"Turkey","TT":"Trinidad and Tobago","TV":"Tuvalu","TW":"Taiwan, Province of China","TZ":"Tanzania, United Republic of","UA":"Ukraine","UG":"Uganda","US":"United States","UY":"Uruguay","UZ":"Uzbekistan","VA":"Holy See (Vatican City State)","VC":"Saint Vincent and the Grenadines","VE":"Venezuela","VG":"Virgin Islands, British","VI":"Virgin Islands, U.S.","VN":"Viet Nam","VU":"Vanuatu","WF":"Wallis and Futuna","WS":"Samoa","YE":"Yemen","YT":"Mayotte","ZA":"South Africa","ZM":"Zambia","ZW":"Zimbabwe"};
- };
-
- self.getRegionCodeForCountryCode = function(countryCode) {
- return libphonenumber.getRegionCodeForCountryCode(countryCode);
- };
-
- self.getRegionCodeForNumber = function(number) {
- try {
- var parsedNumber = libphonenumber.parse(number);
- return libphonenumber.getRegionCodeForNumber(parsedNumber);
- } catch(e) {
- return "ZZ";
- }
- };
-
- self.getCountryCodeForRegion = function(regionCode) {
- var cc = libphonenumber.getCountryCodeForRegion(regionCode);
- return (cc != 0) ? cc : "";
- };
-
- self.verifyNumber = function(number, regionCode) {
- var parsedNumber = libphonenumber.parse(number, regionCode);
-
- if(!regionCode || regionCode == 'ZZ')
- regionCode = libphonenumber.getRegionCodeForNumber(parsedNumber);
-
- var isValidNumber = libphonenumber.isValidNumber(parsedNumber);
- var isValidNumberForRegion = libphonenumber.isValidNumberForRegion(parsedNumber, regionCode);
-
- if (isValidNumber && isValidNumberForRegion) {
- return libphonenumber.format(parsedNumber, libphonenumber.PhoneNumberFormat.E164);
- } else {
- throw new Error("The number seems not to be valid.");
- }
- };
-
self.unencodeNumber = function(number) {
return number.split(".");
};
@@ -471,7 +428,7 @@ window.textsecure.storage = function() {
var haveMe = false;
var finalNumbers = [];
for (var i in numbers) {
- var number = textsecure.utils.verifyNumber(numbers[i]);
+ var number = libphonenumber.util.verifyNumber(numbers[i]);
if (number == me)
haveMe = true;
if (finalNumbers.indexOf(number) < 0) {
@@ -502,7 +459,7 @@ window.textsecure.storage = function() {
return undefined;
try {
- number = textsecure.utils.verifyNumber(number);
+ number = libphonenumber.util.verifyNumber(number);
} catch (e) {
return group.numbers;
}
@@ -527,7 +484,7 @@ window.textsecure.storage = function() {
return undefined;
for (var i in numbers) {
- var number = textsecure.utils.verifyNumber(numbers[i]);
+ var number = libphonenumber.util.verifyNumber(numbers[i]);
if (group.numbers.indexOf(number) < 0) {
group.numbers.push(number);
addGroupToNumber(groupId, number);
@@ -768,7 +725,7 @@ window.textsecure.registerSingleDevice = function(number, verificationCode, step
return textsecure.api.confirmCode(number, verificationCode, password, signalingKey, registrationId, true).then(function() {
var numberId = number + ".1";
textsecure.storage.putUnencrypted("number_id", numberId);
- textsecure.storage.putUnencrypted("regionCode", textsecure.utils.getRegionCodeForNumber(number));
+ textsecure.storage.putUnencrypted("regionCode", libphonenumber.util.getRegionCodeForNumber(number));
stepDone(1);
return textsecure.crypto.generateKeys().then(function(keys) {
@@ -803,7 +760,7 @@ window.textsecure.registerSecondDevice = function(encodedDeviceInit, cryptoInfo,
return textsecure.api.confirmCode(number, identityKey.provisioningCode, password, signalingKey, registrationId, false).then(function(result) {
var numberId = number + "." + result;
textsecure.storage.putUnencrypted("number_id", numberId);
- textsecure.storage.putUnencrypted("regionCode", textsecure.utils.getRegionCodeForNumber(number));
+ textsecure.storage.putUnencrypted("regionCode", libphonenumber.util.getRegion(number));
stepDone(2);
return textsecure.crypto.generateKeys().then(function(keys) {
diff --git a/js/libphonenumber-util.js b/js/libphonenumber-util.js
new file mode 100644
index 00000000..eed8d357
--- /dev/null
+++ b/js/libphonenumber-util.js
@@ -0,0 +1,284 @@
+/*
+ * This file extends the libphonenumber object with a set of phonenumbery
+ * utility functions. libphonenumber must be included before you call these
+ * functions, but the order of the files/script-tags doesn't matter.
+ */
+;(function() {
+ "use strict";
+
+ window.libphonenumber = window.libphonenumber || {};
+ window.libphonenumber.util = {
+ getRegionCodeForNumber: function(number) {
+ try {
+ var parsedNumber = libphonenumber.parse(number);
+ return libphonenumber.getRegionCodeForNumber(parsedNumber);
+ } catch(e) {
+ return "ZZ";
+ }
+ },
+
+ getCountryCode: function(regionCode) {
+ var cc = libphonenumber.getCountryCodeForRegion(regionCode);
+ return (cc != 0) ? cc : "";
+ },
+
+ verifyNumber: function(number, regionCode) {
+ var parsedNumber = libphonenumber.parse(number, regionCode);
+
+ if(!regionCode || regionCode == 'ZZ') {
+ regionCode = libphonenumber.getRegionCodeForNumber(parsedNumber);
+ }
+
+ var isValidNumber = libphonenumber.isValidNumber(parsedNumber);
+ var isValidNumberForRegion = libphonenumber.isValidNumberForRegion(parsedNumber, regionCode);
+
+ if (isValidNumber && isValidNumberForRegion) {
+ return libphonenumber.format(parsedNumber, libphonenumber.PhoneNumberFormat.E164);
+ } else {
+ throw new Error("The number seems not to be valid.");
+ }
+ },
+
+ getAllRegionCodes: function() {
+ return {
+ "AD":"Andorra",
+ "AE":"United Arab Emirates",
+ "AF":"Afghanistan",
+ "AG":"Antigua and Barbuda",
+ "AI":"Anguilla",
+ "AL":"Albania",
+ "AM":"Armenia",
+ "AO":"Angola",
+ "AR":"Argentina",
+ "AS":"AmericanSamoa",
+ "AT":"Austria",
+ "AU":"Australia",
+ "AW":"Aruba",
+ "AX":"Åland Islands",
+ "AZ":"Azerbaijan",
+ "BA":"Bosnia and Herzegovina",
+ "BB":"Barbados",
+ "BD":"Bangladesh",
+ "BE":"Belgium",
+ "BF":"Burkina Faso",
+ "BG":"Bulgaria",
+ "BH":"Bahrain",
+ "BI":"Burundi",
+ "BJ":"Benin",
+ "BL":"Saint Barthélemy",
+ "BM":"Bermuda",
+ "BN":"Brunei Darussalam",
+ "BO":"Bolivia, Plurinational State of",
+ "BR":"Brazil",
+ "BS":"Bahamas",
+ "BT":"Bhutan",
+ "BW":"Botswana",
+ "BY":"Belarus",
+ "BZ":"Belize",
+ "CA":"Canada",
+ "CC":"Cocos (Keeling) Islands",
+ "CD":"Congo, The Democratic Republic of the",
+ "CF":"Central African Republic",
+ "CG":"Congo",
+ "CH":"Switzerland",
+ "CI":"Cote d'Ivoire",
+ "CK":"Cook Islands",
+ "CL":"Chile",
+ "CM":"Cameroon",
+ "CN":"China",
+ "CO":"Colombia",
+ "CR":"Costa Rica",
+ "CU":"Cuba",
+ "CV":"Cape Verde",
+ "CX":"Christmas Island",
+ "CY":"Cyprus",
+ "CZ":"Czech Republic",
+ "DE":"Germany",
+ "DJ":"Djibouti",
+ "DK":"Denmark",
+ "DM":"Dominica",
+ "DO":"Dominican Republic",
+ "DZ":"Algeria",
+ "EC":"Ecuador",
+ "EE":"Estonia",
+ "EG":"Egypt",
+ "ER":"Eritrea",
+ "ES":"Spain",
+ "ET":"Ethiopia",
+ "FI":"Finland",
+ "FJ":"Fiji",
+ "FK":"Falkland Islands (Malvinas)",
+ "FM":"Micronesia, Federated States of",
+ "FO":"Faroe Islands",
+ "FR":"France",
+ "GA":"Gabon",
+ "GB":"United Kingdom",
+ "GD":"Grenada",
+ "GE":"Georgia",
+ "GF":"French Guiana",
+ "GG":"Guernsey",
+ "GH":"Ghana",
+ "GI":"Gibraltar",
+ "GL":"Greenland",
+ "GM":"Gambia",
+ "GN":"Guinea",
+ "GP":"Guadeloupe",
+ "GQ":"Equatorial Guinea",
+ "GR":"Ελλάδα",
+ "GT":"Guatemala",
+ "GU":"Guam",
+ "GW":"Guinea-Bissau",
+ "GY":"Guyana",
+ "HK":"Hong Kong",
+ "HN":"Honduras",
+ "HR":"Croatia",
+ "HT":"Haiti",
+ "HU":"Magyarország",
+ "ID":"Indonesia",
+ "IE":"Ireland",
+ "IL":"Israel",
+ "IM":"Isle of Man",
+ "IN":"India",
+ "IO":"British Indian Ocean Territory",
+ "IQ":"Iraq",
+ "IR":"Iran, Islamic Republic of",
+ "IS":"Iceland",
+ "IT":"Italy",
+ "JE":"Jersey",
+ "JM":"Jamaica",
+ "JO":"Jordan",
+ "JP":"Japan",
+ "KE":"Kenya",
+ "KG":"Kyrgyzstan",
+ "KH":"Cambodia",
+ "KI":"Kiribati",
+ "KM":"Comoros",
+ "KN":"Saint Kitts and Nevis",
+ "KP":"Korea, Democratic People's Republic of",
+ "KR":"Korea, Republic of",
+ "KW":"Kuwait",
+ "KY":"Cayman Islands",
+ "KZ":"Kazakhstan",
+ "LA":"Lao People's Democratic Republic",
+ "LB":"Lebanon",
+ "LC":"Saint Lucia",
+ "LI":"Liechtenstein",
+ "LK":"Sri Lanka",
+ "LR":"Liberia",
+ "LS":"Lesotho",
+ "LT":"Lithuania",
+ "LU":"Luxembourg",
+ "LV":"Latvia",
+ "LY":"Libyan Arab Jamahiriya",
+ "MA":"Morocco",
+ "MC":"Monaco",
+ "MD":"Moldova, Republic of",
+ "ME":"Црна Гора",
+ "MF":"Saint Martin",
+ "MG":"Madagascar",
+ "MH":"Marshall Islands",
+ "MK":"Macedonia, The Former Yugoslav Republic of",
+ "ML":"Mali",
+ "MM":"Myanmar",
+ "MN":"Mongolia",
+ "MO":"Macao",
+ "MP":"Northern Mariana Islands",
+ "MQ":"Martinique",
+ "MR":"Mauritania",
+ "MS":"Montserrat",
+ "MT":"Malta",
+ "MU":"Mauritius",
+ "MV":"Maldives",
+ "MW":"Malawi",
+ "MX":"Mexico",
+ "MY":"Malaysia",
+ "MZ":"Mozambique",
+ "NA":"Namibia",
+ "NC":"New Caledonia",
+ "NE":"Niger",
+ "NF":"Norfolk Island",
+ "NG":"Nigeria",
+ "NI":"Nicaragua",
+ "NL":"Netherlands",
+ "NO":"Norway",
+ "NP":"Nepal",
+ "NR":"Nauru",
+ "NU":"Niue",
+ "NZ":"New Zealand",
+ "OM":"Oman",
+ "PA":"Panama",
+ "PE":"Peru",
+ "PF":"French Polynesia",
+ "PG":"Papua New Guinea",
+ "PH":"Philippines",
+ "PK":"Pakistan",
+ "PL":"Polska",
+ "PM":"Saint Pierre and Miquelon",
+ "PR":"Puerto Rico",
+ "PS":"Palestinian Territory, Occupied",
+ "PT":"Portugal",
+ "PW":"Palau",
+ "PY":"Paraguay",
+ "QA":"Qatar",
+ "RE":"Réunion",
+ "RO":"Romania",
+ "RS":"Србија",
+ "RU":"Russia",
+ "RW":"Rwanda",
+ "SA":"Saudi Arabia",
+ "SB":"Solomon Islands",
+ "SC":"Seychelles",
+ "SD":"Sudan",
+ "SE":"Sweden",
+ "SG":"Singapore",
+ "SH":"Saint Helena, Ascension and Tristan Da Cunha",
+ "SI":"Slovenia",
+ "SJ":"Svalbard and Jan Mayen",
+ "SK":"Slovakia",
+ "SL":"Sierra Leone",
+ "SM":"San Marino",
+ "SN":"Senegal",
+ "SO":"Somalia",
+ "SR":"Suriname",
+ "ST":"Sao Tome and Principe",
+ "SV":"El Salvador",
+ "SY":"Syrian Arab Republic",
+ "SZ":"Swaziland",
+ "TC":"Turks and Caicos Islands",
+ "TD":"Chad",
+ "TG":"Togo",
+ "TH":"Thailand",
+ "TJ":"Tajikistan",
+ "TK":"Tokelau",
+ "TL":"Timor-Leste",
+ "TM":"Turkmenistan",
+ "TN":"Tunisia",
+ "TO":"Tonga",
+ "TR":"Turkey",
+ "TT":"Trinidad and Tobago",
+ "TV":"Tuvalu",
+ "TW":"Taiwan, Province of China",
+ "TZ":"Tanzania, United Republic of",
+ "UA":"Ukraine",
+ "UG":"Uganda",
+ "US":"United States",
+ "UY":"Uruguay",
+ "UZ":"Uzbekistan",
+ "VA":"Holy See (Vatican City State)",
+ "VC":"Saint Vincent and the Grenadines",
+ "VE":"Venezuela",
+ "VG":"Virgin Islands, British",
+ "VI":"Virgin Islands, U.S.",
+ "VN":"Viet Nam",
+ "VU":"Vanuatu",
+ "WF":"Wallis and Futuna",
+ "WS":"Samoa",
+ "YE":"Yemen",
+ "YT":"Mayotte",
+ "ZA":"South Africa",
+ "ZM":"Zambia",
+ "ZW":"Zimbabwe"
+ };
+ } // getAllRegionCodes
+ }; // libphonenumber.util
+})();
diff --git a/js/options.js b/js/options.js
index 33ad3681..e82582f1 100644
--- a/js/options.js
+++ b/js/options.js
@@ -18,7 +18,7 @@
function updateNumberColors() {
try {
if($('#number').val() != "" && $('#regionCode').val() != "")
- textsecure.utils.verifyNumber($('#number').val(), $('#regionCode').val());
+ libphonenumber.util.verifyNumber($('#number').val(), $('#regionCode').val());
$('#countrycode').removeClass('invalid');
$('#number').removeClass('invalid');
} catch (numberInvalidError) {
@@ -44,7 +44,7 @@
$('#init-go-single-client').click(function() {
try {
- var parsedNumber = textsecure.utils.verifyNumber($('#number').val(), $('#regionCode').val());
+ var parsedNumber = libphonenumber.util.verifyNumber($('#number').val(), $('#regionCode').val());
} catch(e) {
alert("Please enter a valid phone number first.");
return false;
@@ -68,7 +68,7 @@
});
$('#init-go').click(function() {
- var parsedNumber = textsecure.utils.verifyNumber($('#number').val(), $('#regionCode').val());
+ var parsedNumber = libphonenumber.util.verifyNumber($('#number').val(), $('#regionCode').val());
if (!isCodeValid()) {
updateCodeColor();
return;
@@ -110,7 +110,7 @@
if (!isRegistrationDone()) {
$('#init-setup').show();
- var countrys = textsecure.utils.getAllRegionCodes();
+ var countrys = libphonenumber.util.getAllRegionCodes();
$.each(countrys, function (regionCode, countryName) {
$('#regionCode').append($('