@berlinsms/country-picker
Version:
jquery-plugin to pick a country-code in a formular
341 lines (329 loc) • 17.7 kB
JavaScript
/**
* A jquery-plugin to pick a country-code in a formular
* - You need to import jquery
*
* @copyright Copyright (c) 2023, Energieweise Ingenieur GmbH, berlinsms
* @link https://www.berlinsms.de/
*
* Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehoerigen
* Dokumentationsdateien (die "Software") erwirbt, kostenlos die Erlaubnis erteilt,
* uneingeschraenkt mit der Software zu handeln, einschliesslich und ohne
* Einschraenkung der Rechte, Kopien der Software zu verwenden, zu kopieren, zu
* modifizieren, zusammenzufuehren, zu veroeffentlichen, zu vertreiben, zu
* unterlizenzieren und/oder zu verkaufen, und Personen, denen die Software zur
* Verfuegung gestellt wird, dies unter den folgenden Bedingungen zu gestatten:
*
* Dieser Copyright-Hinweis und dieser Genehmigungshinweis muessen in allen Kopien
* oder wesentlichen Teilen der Software enthalten sein.
*
* DIE SOFTWARE WIRD OHNE MAENGELGEWAEHR ZUR VERFUEGUNG GESTELLT, OHNE AUSDRUECKLICHE
* ODER STILLSCHWEIGENDE GEWAEHRLEISTUNG JEGLICHER ART, EINSCHLIESSLICH, ABER NICHT
* BESCHRAENKT AUF DIE GEWAEHRLEISTUNG DER MARKTGAENGIGKEIT, DER EIGNUNG FUER EINEN
* BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN. IN KEINEM FALL HAFTEN DIE
* AUTOREN ODER URHEBERRECHTSINHABER FUER JEGLICHE ANSPRUECHE, SCHAEDEN ODER SONSTIGE
* HAFTUNG, SEI ES DURCH VERTRAG, UNERLAUBTE HANDLUNGEN ODER ANDERWEITIG, DIE SICH
* AUS DER SOFTWARE ODER DER NUTZUNG DER SOFTWARE ODER DEM SONSTIGEN UMGANG MIT
* DER SOFTWARE ERGEBEN ODER DAMIT ZUSAMMENHAENGEN.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* This copyright notice and this permission notice must be included in all copies
* or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIMS, DAMAGES OR OTHER LIABILITY,
* WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING OUT OF OR RELATED TO THE SOFTWARE
* OR THE USE OF OR OTHER DEALINGS WITH THE SOFTWARE.
*
*/
(function($) {
$.fn.bsmsCountryPicker = function(options) {
this.allCountries = {
"AF": { name: "Afghanistan", code: "+93" },
"AL": { name: "Albania", code: "+355" },
"DZ": { name: "Algeria", code: "+213" },
"AS": { name: "American Samoa", code: "+1" },
"AD": { name: "Andorra", code: "+376" },
"AO": { name: "Angola", code: "+244" },
"AI": { name: "Anguilla", code: "+1" },
"AG": { name: "Antigua", code: "+1" },
"AR": { name: "Argentina", code: "+54" },
"AM": { name: "Armenia", code: "+374" },
"AW": { name: "Aruba", code: "+297" },
"AU": { name: "Australia", code: "+61" },
"AT": { name: "Austria", code: "+43" },
"AZ": { name: "Azerbaijan", code: "+994" },
"BH": { name: "Bahrain", code: "+973" },
"BD": { name: "Bangladesh", code: "+880" },
"BB": { name: "Barbados", code: "+1" },
"BY": { name: "Belarus", code: "+375" },
"BE": { name: "Belgium", code: "+32" },
"BZ": { name: "Belize", code: "+501" },
"BJ": { name: "Benin", code: "+229" },
"BM": { name: "Bermuda", code: "+1" },
"BT": { name: "Bhutan", code: "+975" },
"BO": { name: "Bolivia", code: "+591" },
"BA": { name: "Bosnia and Herzegovina", code: "+387" },
"BW": { name: "Botswana", code: "+267" },
"BR": { name: "Brazil", code: "+55" },
"IO": { name: "British Indian Ocean Territory", code: "+246" },
"VG": { name: "British Virgin Islands", code: "+1" },
"BN": { name: "Brunei", code: "+673" },
"BG": { name: "Bulgaria", code: "+359" },
"BF": { name: "Burkina Faso", code: "+226" },
"MM": { name: "Burma Myanmar", code: "+95" },
"BI": { name: "Burundi", code: "+257" },
"KH": { name: "Cambodia", code: "+855" },
"CM": { name: "Cameroon", code: "+237" },
"CA": { name: "Canada", code: "+1" },
"CV": { name: "Cape Verde", code: "+238" },
"KY": { name: "Cayman Islands", code: "+1" },
"CF": { name: "Central African Republic", code: "+236" },
"TD": { name: "Chad", code: "+235" },
"CL": { name: "Chile", code: "+56" },
"CN": { name: "China", code: "+86" },
"CO": { name: "Colombia", code: "+57" },
"KM": { name: "Comoros", code: "+269" },
"CK": { name: "Cook Islands", code: "+682" },
"CR": { name: "Costa Rica", code: "+506" },
"CI": { name: "C�te d'Ivoire", code: "+225" },
"HR": { name: "Croatia", code: "+385" },
"CU": { name: "Cuba", code: "+53" },
"CY": { name: "Cyprus", code: "+357" },
"CZ": { name: "Czech Republic", code: "+420" },
"CD": { name: "Democratic Republic of Congo", code: "+243" },
"DK": { name: "Denmark", code: "+45" },
"DJ": { name: "Djibouti", code: "+253" },
"DM": { name: "Dominica", code: "+1" },
"DO": { name: "Dominican Republic", code: "+1" },
"EC": { name: "Ecuador", code: "+593" },
"EG": { name: "Egypt", code: "+20" },
"SV": { name: "El Salvador", code: "+503" },
"GQ": { name: "Equatorial Guinea", code: "+240" },
"ER": { name: "Eritrea", code: "+291" },
"EE": { name: "Estonia", code: "+372" },
"ET": { name: "Ethiopia", code: "+251" },
"FK": { name: "Falkland Islands", code: "+500" },
"FO": { name: "Faroe Islands", code: "+298" },
"FM": { name: "Federated States of Micronesia", code: "+691" },
"FJ": { name: "Fiji", code: "+679" },
"FI": { name: "Finland", code: "+358" },
"FR": { name: "France", code: "+33" },
"GF": { name: "French Guiana", code: "+594" },
"PF": { name: "French Polynesia", code: "+689" },
"GA": { name: "Gabon", code: "+241" },
"GE": { name: "Georgia", code: "+995" },
"DE": { name: "Germany", code: "+49" },
"GH": { name: "Ghana", code: "+233" },
"GI": { name: "Gibraltar", code: "+350" },
"GR": { name: "Greece", code: "+30" },
"GL": { name: "Greenland", code: "+299" },
"GD": { name: "Grenada", code: "+1" },
"GP": { name: "Guadeloupe", code: "+590" },
"GU": { name: "Guam", code: "+1" },
"GT": { name: "Guatemala", code: "+502" },
"GN": { name: "Guinea", code: "+224" },
"GW": { name: "Guinea-Bissau", code: "+245" },
"GY": { name: "Guyana", code: "+592" },
"HT": { name: "Haiti", code: "+509" },
"HN": { name: "Honduras", code: "+504" },
"HK": { name: "Hong Kong", code: "+852" },
"HU": { name: "Hungary", code: "+36" },
"IS": { name: "Iceland", code: "+354" },
"IN": { name: "India", code: "+91" },
"ID": { name: "Indonesia", code: "+62" },
"IR": { name: "Iran", code: "+98" },
"IQ": { name: "Iraq", code: "+964" },
"IE": { name: "Ireland", code: "+353" },
"IL": { name: "Israel", code: "+972" },
"IT": { name: "Italy", code: "+39" },
"JM": { name: "Jamaica", code: "+1" },
"JP": { name: "Japan", code: "+81" },
"JO": { name: "Jordan", code: "+962" },
"KZ": { name: "Kazakhstan", code: "+7" },
"KE": { name: "Kenya", code: "+254" },
"KI": { name: "Kiribati", code: "+686" },
"XK": { name: "Kosovo", code: "+381" },
"KW": { name: "Kuwait", code: "+965" },
"KG": { name: "Kyrgyzstan", code: "+996" },
"LA": { name: "Laos", code: "+856" },
"LV": { name: "Latvia", code: "+371" },
"LB": { name: "Lebanon", code: "+961" },
"LS": { name: "Lesotho", code: "+266" },
"LR": { name: "Liberia", code: "+231" },
"LY": { name: "Libya", code: "+218" },
"LI": { name: "Liechtenstein", code: "+423" },
"LT": { name: "Lithuania", code: "+370" },
"LU": { name: "Luxembourg", code: "+352" },
"MO": { name: "Macau", code: "+853" },
"MK": { name: "Macedonia", code: "+389" },
"MG": { name: "Madagascar", code: "+261" },
"MW": { name: "Malawi", code: "+265" },
"MY": { name: "Malaysia", code: "+60" },
"MV": { name: "Maldives", code: "+960" },
"ML": { name: "Mali", code: "+223" },
"MT": { name: "Malta", code: "+356" },
"MH": { name: "Marshall Islands", code: "+692" },
"MQ": { name: "Martinique", code: "+596" },
"MR": { name: "Mauritania", code: "+222" },
"MU": { name: "Mauritius", code: "+230" },
"YT": { name: "Mayotte", code: "+262" },
"MX": { name: "Mexico", code: "+52" },
"MD": { name: "Moldova", code: "+373" },
"MC": { name: "Monaco", code: "+377" },
"MN": { name: "Mongolia", code: "+976" },
"ME": { name: "Montenegro", code: "+382" },
"MS": { name: "Montserrat", code: "+1" },
"MA": { name: "Morocco", code: "+212" },
"MZ": { name: "Mozambique", code: "+258" },
"NA": { name: "Namibia", code: "+264" },
"NR": { name: "Nauru", code: "+674" },
"NP": { name: "Nepal", code: "+977" },
"NL": { name: "Netherlands", code: "+31" },
"AN": { name: "Netherlands Antilles", code: "+599" },
"NC": { name: "New Caledonia", code: "+687" },
"NZ": { name: "New Zealand", code: "+64" },
"NI": { name: "Nicaragua", code: "+505" },
"NE": { name: "Niger", code: "+227" },
"NG": { name: "Nigeria", code: "+234" },
"NU": { name: "Niue", code: "+683" },
"NF": { name: "Norfolk Island", code: "+672" },
"KP": { name: "North Korea", code: "+850" },
"MP": { name: "Northern Mariana Islands", code: "+1" },
"NO": { name: "Norway", code: "+47" },
"OM": { name: "Oman", code: "+968" },
"PK": { name: "Pakistan", code: "+92" },
"PW": { name: "Palau", code: "+680" },
"PS": { name: "Palestine", code: "+970" },
"PA": { name: "Panama", code: "+507" },
"PG": { name: "Papua New Guinea", code: "+675" },
"PY": { name: "Paraguay", code: "+595" },
"PE": { name: "Peru", code: "+51" },
"PH": { name: "Philippines", code: "+63" },
"PL": { name: "Poland", code: "+48" },
"PT": { name: "Portugal", code: "+351" },
"PR": { name: "Puerto Rico", code: "+1" },
"QA": { name: "Qatar", code: "+974" },
"CG": { name: "Republic of the Congo", code: "+242" },
"RE": { name: "R�union", code: "+262" },
"RO": { name: "Romania", code: "+40" },
"RU": { name: "Russia", code: "+7" },
"RW": { name: "Rwanda", code: "+250" },
"BL": { name: "Saint Barth�lemy", code: "+590" },
"SH": { name: "Saint Helena", code: "+290" },
"KN": { name: "Saint Kitts and Nevis", code: "+1" },
"MF": { name: "Saint Martin", code: "+590" },
"PM": { name: "Saint Pierre and Miquelon", code: "+508" },
"VC": { name: "Saint Vincent and the Grenadines", code: "+1" },
"WS": { name: "Samoa", code: "+685" },
"SM": { name: "San Marino", code: "+378" },
"ST": { name: "S�o Tom� and Pr�ncipe", code: "+239" },
"SA": { name: "Saudi Arabia", code: "+966" },
"SN": { name: "Senegal", code: "+221" },
"RS": { name: "Serbia", code: "+381" },
"SC": { name: "Seychelles", code: "+248" },
"SL": { name: "Sierra Leone", code: "+232" },
"SG": { name: "Singapore", code: "+65" },
"SK": { name: "Slovakia", code: "+421" },
"SI": { name: "Slovenia", code: "+386" },
"SB": { name: "Solomon Islands", code: "+677" },
"SO": { name: "Somalia", code: "+252" },
"ZA": { name: "South Africa", code: "+27" },
"KR": { name: "South Korea", code: "+82" },
"ES": { name: "Spain", code: "+34" },
"LK": { name: "Sri Lanka", code: "+94" },
"LC": { name: "St. Lucia", code: "+1" },
"SD": { name: "Sudan", code: "+249" },
"SR": { name: "Suriname", code: "+597" },
"SZ": { name: "Swaziland", code: "+268" },
"SE": { name: "Sweden", code: "+46" },
"CH": { name: "Switzerland", code: "+41" },
"SY": { name: "Syria", code: "+963" },
"TW": { name: "Taiwan", code: "+886" },
"TJ": { name: "Tajikistan", code: "+992" },
"TZ": { name: "Tanzania", code: "+255" },
"TH": { name: "Thailand", code: "+66" },
"BS": { name: "The Bahamas", code: "+1" },
"GM": { name: "The Gambia", code: "+220" },
"TL": { name: "Timor-Leste", code: "+670" },
"TG": { name: "Togo", code: "+228" },
"TK": { name: "Tokelau", code: "+690" },
"TO": { name: "Tonga", code: "+676" },
"TT": { name: "Trinidad and Tobago", code: "+1" },
"TN": { name: "Tunisia", code: "+216" },
"TR": { name: "Turkey", code: "+90" },
"TM": { name: "Turkmenistan", code: "+993" },
"TC": { name: "Turks and Caicos Islands", code: "+1" },
"TV": { name: "Tuvalu", code: "+688" },
"UG": { name: "Uganda", code: "+256" },
"UA": { name: "Ukraine", code: "+380" },
"AE": { name: "United Arab Emirates", code: "+971" },
"GB": { name: "United Kingdom", code: "+44" },
"US": { name: "United States", code: "+1" },
"UY": { name: "Uruguay", code: "+598" },
"VI": { name: "US Virgin Islands", code: "+1" },
"UZ": { name: "Uzbekistan", code: "+998" },
"VU": { name: "Vanuatu", code: "+678" },
"VA": { name: "Vatican City", code: "+39" },
"VE": { name: "Venezuela", code: "+58" },
"VN": { name: "Vietnam", code: "+84" },
"WF": { name: "Wallis and Futuna", code: "+681" },
"YE": { name: "Yemen", code: "+967" },
"ZM": { name: "Zambia", code: "+260" },
"ZW": { name: "Zimbabwe", code: "+263" }
};
const defaultSettings = {
countries: this.allCountries,
defaultCountry: "DE",
inputName: 'bsms-country-code',
};
const settings = $.extend({}, defaultSettings, options);
return this.each(function() {
const $container = $(this);
const $dropdown = $(`<div class="bsms-country-code"></div>`).appendTo($container);
$.each(settings.countries, function(short, country) {
$dropdown.append(`
<div>
<input id="${short}" type="radio" name="${settings.inputName}" value="${country.code}"/>
<label for="${short}">
<div>${country.code}</div>
<span>${country.name}</span>
</label>
</div>`);
});
$dropdown.find(`input`).first()
.prop('checked', true);
$dropdown.find(`input#${settings.defaultCountry}`)
.prop('checked', true);
$container.append($dropdown);
$dropdown.hover(()=>{
const $checkedInput = $dropdown.find(`input:checked`).closest('div');
$dropdown.scrollTop( $dropdown.scrollTop() + $checkedInput.position().top );
});
$dropdown.click(event => {
$dropdown
.fadeOut(1)
.delay(1)
.fadeIn(1);
});
$dropdown.change(event => {
$container.val($(event.target).val());
});
//select and trigger default
var defaultInput = $dropdown.find(`input#${settings.defaultCountry}`);
if (!defaultInput.length) {
defaultInput = $dropdown.find(`input`).first();
}
defaultInput
.prop('checked', true)
.trigger('change');
});
};
})(jQuery);