Skip to content

Instantly share code, notes, and snippets.

@apokusin
Last active August 18, 2017 15:53
Show Gist options
  • Save apokusin/47614c5957c0ac6df6d1 to your computer and use it in GitHub Desktop.
Save apokusin/47614c5957c0ac6df6d1 to your computer and use it in GitHub Desktop.
An AngularJS directive for selecting a country code from a select dropdown
'use strict';
angular.module('webappApp')
.directive('countryCodeSelect', ['$parse', function($parse) {
return {
restrict: 'A',
template: '<select><option ng-repeat="(key, value) in countries" value="{{ value }}">{{ key }} ({{ value }})</option></select>',
replace: true,
link: function(scope, elem, attrs) {
var assignCountry;
scope.countries = {
'Afghanistan': '+93',
'Albania': '+355',
'Algeria': '+213',
'American Samoa': '+684',
'Andorra': '+376',
'Angola': '+244',
'Anguilla': '+264',
'Antarctica': '+672',
'Antigua and Barbuda': '+268',
'Argentina': '+54',
'Armenia': '+374',
'Aruba': '+297',
'Australia': '+61',
'Austria': '+43',
'Azerbaijan': '+994',
'Bahamas': '+242',
'Bahrain': '+973',
'Bangladesh': '+880',
'Barbados': '+246',
'Belarus': '+375',
'Belgium': '+32',
'Belize': '+501',
'Benin': '+229',
'Bermuda': '+441',
'Bhutan': '+975',
'Bolivia, Plurinational State of': '+591',
'Bonaire, Sint Eustatius and Saba': '+599',
'Bosnia and Herzegovina': '+387',
'Botswana': '+267',
'Bouvet Island': '+47',
'Brazil': '+55',
'British Indian Ocean Territory': '+246',
'Brunei Darussalam': '+673',
'Bulgaria': '+359',
'Burkina Faso': '+226',
'Burundi': '+257',
'Cambodia': '+855',
'Cameroon': '+237',
'Canada': '+1',
'Cape Verde': '+238',
'Cayman Islands': '+345',
'Central African Republic': '+236',
'Chad': '+235',
'Chile': '+56',
'China': '+86',
'Christmas Island': '+61',
'Cocos (Keeling) Islands': '+891',
'Colombia': '+57',
'Comoros': '+269',
'Congo': '+242',
'Congo, the Democratic Republic of the': '+243',
'Cook Islands': '+682',
'Costa Rica': '+506',
'Croatia': '+385',
'Cuba': '+53',
'Curaçao': '+599',
'Cyprus': '+357',
'Czech Republic': '+420',
'Côte d\'Ivoire': '+225',
'Denmark': '+45',
'Djibouti': '+253',
'Dominica': '+767',
'Dominican Republic': '+809',
'Ecuador': '+593',
'Egypt': '+20',
'El Salvador': '+503',
'Equatorial Guinea': '+240',
'Eritrea': '+291',
'Estonia': '+372',
'Ethiopia': '+251',
'Falkland Islands (Malvinas)': '+500',
'Faroe Islands': '+298',
'Fiji': '+679',
'Finland': '+358',
'France': '+33',
'French Guiana': '+594',
'French Polynesia': '+689',
'French Southern Territories': '+689',
'Gabon': '+241',
'Gambia': '+220',
'Georgia': '+995',
'Germany': '+49',
'Ghana': '+233',
'Gibraltar': '+350',
'Greece': '+30',
'Greenland': '+299',
'Grenada': '+473',
'Guadeloupe': '+590',
'Guam': '+671',
'Guatemala': '+502',
'Guernsey': '+1481',
'Guinea': '+225',
'Guinea-Bissau': '+245',
'Guyana': '+592',
'Haiti': '+509',
'Heard Island and McDonald Islands': '+61',
'Holy See (Vatican City State)': '+379',
'Honduras': '+504',
'Hong Kong': '+852',
'Hungary': '+36',
'Iceland': '+354',
'India': '+91',
'Indonesia': '+62',
'Iran, Islamic Republic of': '+98',
'Iraq': '+964',
'Ireland': '+353',
'Isle of Man': '+44',
'Israel': '+972',
'Italy': '+39',
'Jamaica': '+876',
'Japan': '+81',
'Jersey': '+44',
'Jordan': '+962',
'Kazakhstan': '+7',
'Kenya': '+254',
'Kiribati': '+686',
'Korea, Democratic People\'s Republic of': '+850',
'Korea, Republic of': '+82',
'Kuwait': '+965',
'Kyrgyzstan': '+996',
'Lao People\'s Democratic Republic': '+856',
'Latvia': '+371',
'Lebanon': '+961',
'Lesotho': '+266',
'Liberia': '+231',
'Libya': '+218',
'Liechtenstein': '+423',
'Lithuania': '+370',
'Luxembourg': '+352',
'Macao': '+853',
'Macedonia, The Former Yugoslav Republic of': '+389',
'Madagascar': '+261',
'Malawi': '+265',
'Malaysia': '+60',
'Maldives': '+960',
'Mali': '+223',
'Malta': '+356',
'Marshall Islands': '+692',
'Martinique': '+596',
'Mauritania': '+222',
'Mauritius': '+230',
'Mayotte': '+262',
'Mexico': '+52',
'Micronesia, Federated States of': '+691',
'Moldova, Republic of': '+373',
'Monaco': '+355',
'Mongolia': '+976',
'Montenegro': '+382',
'Montserrat': '+664',
'Morocco': '+212',
'Mozambique': '+258',
'Myanmar': '+95',
'Namibia': '+264',
'Nauru': '+674',
'Nepal': '+977',
'Netherlands': '+31',
'New Caledonia': '+687',
'New Zealand': '+64',
'Nicaragua': '+505',
'Niger': '+277',
'Nigeria': '+234',
'Niue': '+683',
'Norfolk Island': '+672',
'Northern Mariana Islands': '+670',
'Norway': '+47',
'Oman': '+968',
'Pakistan': '+92',
'Palau': '+680',
'Palestinian Territory, Occupied': '+970',
'Panama': '+507',
'Papua New Guinea': '+675',
'Paraguay': '+595',
'Peru': '+51',
'Philippines': '+63',
'Pitcairn': '+872',
'Poland': '+48',
'Portugal': '+351',
'Puerto Rico': '+787',
'Qatar': '+974',
'Romania': '+40',
'Russian Federation': '+7',
'Rwanda': '+250',
'Réunion': '+262',
'Saint Barthélemy': '+590',
'Saint Helena, Ascension and Tristan da Cunha': '+290',
'Saint Kitts and Nevis': '+869',
'Saint Lucia': '+758',
'Saint Martin (French part)': '+590',
'Saint Pierre and Miquelon': '+508',
'Saint Vincent and the Grenadines': '+784',
'Samoa': '+685',
'San Marino': '+378',
'Sao Tome and Principe': '+239',
'Saudi Arabia': '+966',
'Senegal': '+221',
'Serbia': '+381',
'Seychelles': '+248',
'Sierra Leone': '+232',
'Singapore': '+65',
'Sint Maarten (Dutch part)': '+599',
'Slovakia': '+421',
'Slovenia': '+386',
'Solomon Islands': '+677',
'Somalia': '+252',
'South Africa': '+27',
'South Georgia and the South Sandwich Islands': '+500',
'South Sudan': '+211',
'Spain': '+34',
'Sri Lanka': '+94',
'Sudan': '+249',
'Suriname': '+597',
'Svalbard and Jan Mayen': '+47',
'Swaziland': '+268',
'Sweden': '+46',
'Switzerland': '+41',
'Syrian Arab Republic': '+963',
'Taiwan, Province of China': '+886',
'Tajikistan': '+992',
'Tanzania, United Republic of': '+255',
'Thailand': '+66',
'Timor-Leste': '+670',
'Togo': '+228',
'Tokelau': '+690',
'Tonga': '+676',
'Trinidad and Tobago': '+868',
'Tunisia': '+216',
'Turkey': '+90',
'Turkmenistan': '+993',
'Turks and Caicos Islands': '+649',
'Tuvalu': '+688',
'Uganda': '+256',
'Ukraine': '+380',
'United Arab Emirates': '+971',
'United Kingdom': '+44',
'United States': '+1',
'United States Minor Outlying Islands': '+1',
'Uruguay': '+598',
'Uzbekistan': '+998',
'Vanuatu': '+678',
'Venezuela, Bolivarian Republic of': '+58',
'Viet Nam': '+84',
'Virgin Islands, British': '+284',
'Virgin Islands, U.S.': '+340',
'Wallis and Futuna': '+681',
'Western Sahara': '+212',
'Yemen': '+967',
'Zambia': '+260',
'Zimbabwe': '+263',
'Åland Islands': '+358',
};
if (!!attrs.ngModel) {
assignCountry = $parse(attrs.ngModel).assign;
elem.bind('change', function(e) {
return assignCountry(e.val());
});
return scope.$watch(attrs.ngModel, function(country) {
return elem.val(country);
});
}
}
};
}
]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment