havas79's picture
Upload helpers.js
3c80752
// Returns an array with the same elements but in random positions
// Taken from: https://medium.com/@nitinpatel_20236/how-to-shuffle-correctly-shuffle-an-array-in-javascript-15ea3f84bfb
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * i)
const temp = array[i]
array[i] = array[j]
array[j] = temp
}
return array
}
// Returns a flag (emoji) from a 2-character country code
// Taken from: https://dev.to/jorik/country-code-to-flag-emoji-a21
function getFlagEmoji(countryCode) {
const OFFSET = 127397;
const codePoints = countryCode.toUpperCase().split('').map(char => OFFSET + char.charCodeAt());
return String.fromCodePoint(...codePoints);
}
// All simple ISO 3166 country data
// including: 2-character, 3-character, full country name and numeric code.
// Sorted alphabetical by country name (special characters on bottom)
// Taken from https://gist.github.com/incredimike/1469814
// Kosovo (The Republic of Kosovo) was added by me.
// 2-character codes are important for the getFlagEmoji function
const countryObjects = [
{ "code": "AF", "code3": "AFG", "name": "Afghanistan", "number": "004" },
{ "code": "AL", "code3": "ALB", "name": "Albania", "number": "008" },
{ "code": "DZ", "code3": "DZA", "name": "Algeria", "number": "012" },
{ "code": "AS", "code3": "ASM", "name": "American Samoa", "number": "016" },
{ "code": "AD", "code3": "AND", "name": "Andorra", "number": "020" },
{ "code": "AO", "code3": "AGO", "name": "Angola", "number": "024" },
{ "code": "AI", "code3": "AIA", "name": "Anguilla", "number": "660" },
{ "code": "AQ", "code3": "ATA", "name": "Antarctica", "number": "010" },
{ "code": "AG", "code3": "ATG", "name": "Antigua and Barbuda", "number": "028" },
{ "code": "AR", "code3": "ARG", "name": "Argentina", "number": "032" },
{ "code": "AM", "code3": "ARM", "name": "Armenia", "number": "051" },
{ "code": "AW", "code3": "ABW", "name": "Aruba", "number": "533" },
{ "code": "AU", "code3": "AUS", "name": "Australia", "number": "036" },
{ "code": "AT", "code3": "AUT", "name": "Austria", "number": "040" },
{ "code": "AZ", "code3": "AZE", "name": "Azerbaijan", "number": "031" },
{ "code": "BS", "code3": "BHS", "name": "Bahamas (the)", "number": "044" },
{ "code": "BH", "code3": "BHR", "name": "Bahrain", "number": "048" },
{ "code": "BD", "code3": "BGD", "name": "Bangladesh", "number": "050" },
{ "code": "BB", "code3": "BRB", "name": "Barbados", "number": "052" },
{ "code": "BY", "code3": "BLR", "name": "Belarus", "number": "112" },
{ "code": "BE", "code3": "BEL", "name": "Belgium", "number": "056" },
{ "code": "BZ", "code3": "BLZ", "name": "Belize", "number": "084" },
{ "code": "BJ", "code3": "BEN", "name": "Benin", "number": "204" },
{ "code": "BM", "code3": "BMU", "name": "Bermuda", "number": "060" },
{ "code": "BT", "code3": "BTN", "name": "Bhutan", "number": "064" },
{ "code": "BO", "code3": "BOL", "name": "Bolivia (Plurinational State of)", "number": "068" },
{ "code": "BQ", "code3": "BES", "name": "Bonaire, Sint Eustatius and Saba", "number": "535" },
{ "code": "BA", "code3": "BIH", "name": "Bosnia and Herzegovina", "number": "070" },
{ "code": "BW", "code3": "BWA", "name": "Botswana", "number": "072" },
{ "code": "BV", "code3": "BVT", "name": "Bouvet Island", "number": "074" },
{ "code": "BR", "code3": "BRA", "name": "Brazil", "number": "076" },
{ "code": "IO", "code3": "IOT", "name": "British Indian Ocean Territory (the)", "number": "086" },
{ "code": "BN", "code3": "BRN", "name": "Brunei Darussalam", "number": "096" },
{ "code": "BG", "code3": "BGR", "name": "Bulgaria", "number": "100" },
{ "code": "BF", "code3": "BFA", "name": "Burkina Faso", "number": "854" },
{ "code": "BI", "code3": "BDI", "name": "Burundi", "number": "108" },
{ "code": "CV", "code3": "CPV", "name": "Cabo Verde", "number": "132" },
{ "code": "KH", "code3": "KHM", "name": "Cambodia", "number": "116" },
{ "code": "CM", "code3": "CMR", "name": "Cameroon", "number": "120" },
{ "code": "CA", "code3": "CAN", "name": "Canada", "number": "124" },
{ "code": "KY", "code3": "CYM", "name": "Cayman Islands (the)", "number": "136" },
{ "code": "CF", "code3": "CAF", "name": "Central African Republic (the)", "number": "140" },
{ "code": "TD", "code3": "TCD", "name": "Chad", "number": "148" },
{ "code": "CL", "code3": "CHL", "name": "Chile", "number": "152" },
{ "code": "CN", "code3": "CHN", "name": "China", "number": "156" },
{ "code": "CX", "code3": "CXR", "name": "Christmas Island", "number": "162" },
{ "code": "CC", "code3": "CCK", "name": "Cocos (Keeling) Islands (the)", "number": "166" },
{ "code": "CO", "code3": "COL", "name": "Colombia", "number": "170" },
{ "code": "KM", "code3": "COM", "name": "Comoros (the)", "number": "174" },
{ "code": "CD", "code3": "COD", "name": "Congo (the Democratic Republic of the)", "number": "180" },
{ "code": "CG", "code3": "COG", "name": "Congo (the)", "number": "178" },
{ "code": "CK", "code3": "COK", "name": "Cook Islands (the)", "number": "184" },
{ "code": "CR", "code3": "CRI", "name": "Costa Rica", "number": "188" },
{ "code": "HR", "code3": "HRV", "name": "Croatia", "number": "191" },
{ "code": "CU", "code3": "CUB", "name": "Cuba", "number": "192" },
{ "code": "CW", "code3": "CUW", "name": "Curaçao", "number": "531" },
{ "code": "CY", "code3": "CYP", "name": "Cyprus", "number": "196" },
{ "code": "CZ", "code3": "CZE", "name": "Czechia", "number": "203" },
{ "code": "CI", "code3": "CIV", "name": "Côte d'Ivoire", "number": "384" },
{ "code": "DK", "code3": "DNK", "name": "Denmark", "number": "208" },
{ "code": "DJ", "code3": "DJI", "name": "Djibouti", "number": "262" },
{ "code": "DM", "code3": "DMA", "name": "Dominica", "number": "212" },
{ "code": "DO", "code3": "DOM", "name": "Dominican Republic (the)", "number": "214" },
{ "code": "EC", "code3": "ECU", "name": "Ecuador", "number": "218" },
{ "code": "EG", "code3": "EGY", "name": "Egypt", "number": "818" },
{ "code": "SV", "code3": "SLV", "name": "El Salvador", "number": "222" },
{ "code": "GQ", "code3": "GNQ", "name": "Equatorial Guinea", "number": "226" },
{ "code": "ER", "code3": "ERI", "name": "Eritrea", "number": "232" },
{ "code": "EE", "code3": "EST", "name": "Estonia", "number": "233" },
{ "code": "SZ", "code3": "SWZ", "name": "Eswatini", "number": "748" },
{ "code": "ET", "code3": "ETH", "name": "Ethiopia", "number": "231" },
{ "code": "FK", "code3": "FLK", "name": "Falkland Islands (the) [Malvinas]", "number": "238" },
{ "code": "FO", "code3": "FRO", "name": "Faroe Islands (the)", "number": "234" },
{ "code": "FJ", "code3": "FJI", "name": "Fiji", "number": "242" },
{ "code": "FI", "code3": "FIN", "name": "Finland", "number": "246" },
{ "code": "FR", "code3": "FRA", "name": "France", "number": "250" },
{ "code": "GF", "code3": "GUF", "name": "French Guiana", "number": "254" },
{ "code": "PF", "code3": "PYF", "name": "French Polynesia", "number": "258" },
{ "code": "TF", "code3": "ATF", "name": "French Southern Territories (the)", "number": "260" },
{ "code": "GA", "code3": "GAB", "name": "Gabon", "number": "266" },
{ "code": "GM", "code3": "GMB", "name": "Gambia (the)", "number": "270" },
{ "code": "GE", "code3": "GEO", "name": "Georgia", "number": "268" },
{ "code": "DE", "code3": "DEU", "name": "Germany", "number": "276" },
{ "code": "GH", "code3": "GHA", "name": "Ghana", "number": "288" },
{ "code": "GI", "code3": "GIB", "name": "Gibraltar", "number": "292" },
{ "code": "GR", "code3": "GRC", "name": "Greece", "number": "300" },
{ "code": "GL", "code3": "GRL", "name": "Greenland", "number": "304" },
{ "code": "GD", "code3": "GRD", "name": "Grenada", "number": "308" },
{ "code": "GP", "code3": "GLP", "name": "Guadeloupe", "number": "312" },
{ "code": "GU", "code3": "GUM", "name": "Guam", "number": "316" },
{ "code": "GT", "code3": "GTM", "name": "Guatemala", "number": "320" },
{ "code": "GG", "code3": "GGY", "name": "Guernsey", "number": "831" },
{ "code": "GN", "code3": "GIN", "name": "Guinea", "number": "324" },
{ "code": "GW", "code3": "GNB", "name": "Guinea-Bissau", "number": "624" },
{ "code": "GY", "code3": "GUY", "name": "Guyana", "number": "328" },
{ "code": "HT", "code3": "HTI", "name": "Haiti", "number": "332" },
{ "code": "HM", "code3": "HMD", "name": "Heard Island and McDonald Islands", "number": "334" },
{ "code": "VA", "code3": "VAT", "name": "Holy See (the)", "number": "336" },
{ "code": "HN", "code3": "HND", "name": "Honduras", "number": "340" },
{ "code": "HK", "code3": "HKG", "name": "Hong Kong", "number": "344" },
{ "code": "HU", "code3": "HUN", "name": "Hungary", "number": "348" },
{ "code": "IS", "code3": "ISL", "name": "Iceland", "number": "352" },
{ "code": "IN", "code3": "IND", "name": "India", "number": "356" },
{ "code": "ID", "code3": "IDN", "name": "Indonesia", "number": "360" },
{ "code": "IR", "code3": "IRN", "name": "Iran (Islamic Republic of)", "number": "364" },
{ "code": "IQ", "code3": "IRQ", "name": "Iraq", "number": "368" },
{ "code": "IE", "code3": "IRL", "name": "Ireland", "number": "372" },
{ "code": "IM", "code3": "IMN", "name": "Isle of Man", "number": "833" },
{ "code": "IL", "code3": "ISR", "name": "Israel", "number": "376" },
{ "code": "IT", "code3": "ITA", "name": "Italy", "number": "380" },
{ "code": "JM", "code3": "JAM", "name": "Jamaica", "number": "388" },
{ "code": "JP", "code3": "JPN", "name": "Japan", "number": "392" },
{ "code": "JE", "code3": "JEY", "name": "Jersey", "number": "832" },
{ "code": "JO", "code3": "JOR", "name": "Jordan", "number": "400" },
{ "code": "KZ", "code3": "KAZ", "name": "Kazakhstan", "number": "398" },
{ "code": "KE", "code3": "KEN", "name": "Kenya", "number": "404" },
{ "code": "KI", "code3": "KIR", "name": "Kiribati", "number": "296" },
{ "code": "KP", "code3": "PRK", "name": "Korea (the Democratic People's Republic of)", "number": "408" },
{ "code": "KR", "code3": "KOR", "name": "Korea (the Republic of)", "number": "410" },
{ "code": "XK", "code3": "UNK", "name": "Kosovo (the Republic of)", "number": "383" },
{ "code": "KW", "code3": "KWT", "name": "Kuwait", "number": "414" },
{ "code": "KG", "code3": "KGZ", "name": "Kyrgyzstan", "number": "417" },
{ "code": "LA", "code3": "LAO", "name": "Lao People's Democratic Republic (the)", "number": "418" },
{ "code": "LV", "code3": "LVA", "name": "Latvia", "number": "428" },
{ "code": "LB", "code3": "LBN", "name": "Lebanon", "number": "422" },
{ "code": "LS", "code3": "LSO", "name": "Lesotho", "number": "426" },
{ "code": "LR", "code3": "LBR", "name": "Liberia", "number": "430" },
{ "code": "LY", "code3": "LBY", "name": "Libya", "number": "434" },
{ "code": "LI", "code3": "LIE", "name": "Liechtenstein", "number": "438" },
{ "code": "LT", "code3": "LTU", "name": "Lithuania", "number": "440" },
{ "code": "LU", "code3": "LUX", "name": "Luxembourg", "number": "442" },
{ "code": "MO", "code3": "MAC", "name": "Macao", "number": "446" },
{ "code": "MG", "code3": "MDG", "name": "Madagascar", "number": "450" },
{ "code": "MW", "code3": "MWI", "name": "Malawi", "number": "454" },
{ "code": "MY", "code3": "MYS", "name": "Malaysia", "number": "458" },
{ "code": "MV", "code3": "MDV", "name": "Maldives", "number": "462" },
{ "code": "ML", "code3": "MLI", "name": "Mali", "number": "466" },
{ "code": "MT", "code3": "MLT", "name": "Malta", "number": "470" },
{ "code": "MH", "code3": "MHL", "name": "Marshall Islands (the)", "number": "584" },
{ "code": "MQ", "code3": "MTQ", "name": "Martinique", "number": "474" },
{ "code": "MR", "code3": "MRT", "name": "Mauritania", "number": "478" },
{ "code": "MU", "code3": "MUS", "name": "Mauritius", "number": "480" },
{ "code": "YT", "code3": "MYT", "name": "Mayotte", "number": "175" },
{ "code": "MX", "code3": "MEX", "name": "Mexico", "number": "484" },
{ "code": "FM", "code3": "FSM", "name": "Micronesia (Federated States of)", "number": "583" },
{ "code": "MD", "code3": "MDA", "name": "Moldova (the Republic of)", "number": "498" },
{ "code": "MC", "code3": "MCO", "name": "Monaco", "number": "492" },
{ "code": "MN", "code3": "MNG", "name": "Mongolia", "number": "496" },
{ "code": "ME", "code3": "MNE", "name": "Montenegro", "number": "499" },
{ "code": "MS", "code3": "MSR", "name": "Montserrat", "number": "500" },
{ "code": "MA", "code3": "MAR", "name": "Morocco", "number": "504" },
{ "code": "MZ", "code3": "MOZ", "name": "Mozambique", "number": "508" },
{ "code": "MM", "code3": "MMR", "name": "Myanmar", "number": "104" },
{ "code": "NA", "code3": "NAM", "name": "Namibia", "number": "516" },
{ "code": "NR", "code3": "NRU", "name": "Nauru", "number": "520" },
{ "code": "NP", "code3": "NPL", "name": "Nepal", "number": "524" },
{ "code": "NL", "code3": "NLD", "name": "Netherlands (the)", "number": "528" },
{ "code": "NC", "code3": "NCL", "name": "New Caledonia", "number": "540" },
{ "code": "NZ", "code3": "NZL", "name": "New Zealand", "number": "554" },
{ "code": "NI", "code3": "NIC", "name": "Nicaragua", "number": "558" },
{ "code": "NE", "code3": "NER", "name": "Niger (the)", "number": "562" },
{ "code": "NG", "code3": "NGA", "name": "Nigeria", "number": "566" },
{ "code": "NU", "code3": "NIU", "name": "Niue", "number": "570" },
{ "code": "NF", "code3": "NFK", "name": "Norfolk Island", "number": "574" },
{ "code": "MP", "code3": "MNP", "name": "Northern Mariana Islands (the)", "number": "580" },
{ "code": "NO", "code3": "NOR", "name": "Norway", "number": "578" },
{ "code": "OM", "code3": "OMN", "name": "Oman", "number": "512" },
{ "code": "PK", "code3": "PAK", "name": "Pakistan", "number": "586" },
{ "code": "PW", "code3": "PLW", "name": "Palau", "number": "585" },
{ "code": "PS", "code3": "PSE", "name": "Palestine, State of", "number": "275" },
{ "code": "PA", "code3": "PAN", "name": "Panama", "number": "591" },
{ "code": "PG", "code3": "PNG", "name": "Papua New Guinea", "number": "598" },
{ "code": "PY", "code3": "PRY", "name": "Paraguay", "number": "600" },
{ "code": "PE", "code3": "PER", "name": "Peru", "number": "604" },
{ "code": "PH", "code3": "PHL", "name": "Philippines (the)", "number": "608" },
{ "code": "PN", "code3": "PCN", "name": "Pitcairn", "number": "612" },
{ "code": "PL", "code3": "POL", "name": "Poland", "number": "616" },
{ "code": "PT", "code3": "PRT", "name": "Portugal", "number": "620" },
{ "code": "PR", "code3": "PRI", "name": "Puerto Rico", "number": "630" },
{ "code": "QA", "code3": "QAT", "name": "Qatar", "number": "634" },
{ "code": "MK", "code3": "MKD", "name": "Republic of North Macedonia", "number": "807" },
{ "code": "RO", "code3": "ROU", "name": "Romania", "number": "642" },
{ "code": "RU", "code3": "RUS", "name": "Russian Federation (the)", "number": "643" },
{ "code": "RW", "code3": "RWA", "name": "Rwanda", "number": "646" },
{ "code": "RE", "code3": "REU", "name": "Réunion", "number": "638" },
{ "code": "BL", "code3": "BLM", "name": "Saint Barthélemy", "number": "652" },
{ "code": "SH", "code3": "SHN", "name": "Saint Helena, Ascension and Tristan da Cunha", "number": "654" },
{ "code": "KN", "code3": "KNA", "name": "Saint Kitts and Nevis", "number": "659" },
{ "code": "LC", "code3": "LCA", "name": "Saint Lucia", "number": "662" },
{ "code": "MF", "code3": "MAF", "name": "Saint Martin (French part)", "number": "663" },
{ "code": "PM", "code3": "SPM", "name": "Saint Pierre and Miquelon", "number": "666" },
{ "code": "VC", "code3": "VCT", "name": "Saint Vincent and the Grenadines", "number": "670" },
{ "code": "WS", "code3": "WSM", "name": "Samoa", "number": "882" },
{ "code": "SM", "code3": "SMR", "name": "San Marino", "number": "674" },
{ "code": "ST", "code3": "STP", "name": "Sao Tome and Principe", "number": "678" },
{ "code": "SA", "code3": "SAU", "name": "Saudi Arabia", "number": "682" },
{ "code": "SN", "code3": "SEN", "name": "Senegal", "number": "686" },
{ "code": "RS", "code3": "SRB", "name": "Serbia", "number": "688" },
{ "code": "SC", "code3": "SYC", "name": "Seychelles", "number": "690" },
{ "code": "SL", "code3": "SLE", "name": "Sierra Leone", "number": "694" },
{ "code": "SG", "code3": "SGP", "name": "Singapore", "number": "702" },
{ "code": "SX", "code3": "SXM", "name": "Sint Maarten (Dutch part)", "number": "534" },
{ "code": "SK", "code3": "SVK", "name": "Slovakia", "number": "703" },
{ "code": "SI", "code3": "SVN", "name": "Slovenia", "number": "705" },
{ "code": "SB", "code3": "SLB", "name": "Solomon Islands", "number": "090" },
{ "code": "SO", "code3": "SOM", "name": "Somalia", "number": "706" },
{ "code": "ZA", "code3": "ZAF", "name": "South Africa", "number": "710" },
{ "code": "GS", "code3": "SGS", "name": "South Georgia and the South Sandwich Islands", "number": "239" },
{ "code": "SS", "code3": "SSD", "name": "South Sudan", "number": "728" },
{ "code": "ES", "code3": "ESP", "name": "Spain", "number": "724" },
{ "code": "LK", "code3": "LKA", "name": "Sri Lanka", "number": "144" },
{ "code": "SD", "code3": "SDN", "name": "Sudan (the)", "number": "729" },
{ "code": "SR", "code3": "SUR", "name": "Suriname", "number": "740" },
{ "code": "SJ", "code3": "SJM", "name": "Svalbard and Jan Mayen", "number": "744" },
{ "code": "SE", "code3": "SWE", "name": "Sweden", "number": "752" },
{ "code": "CH", "code3": "CHE", "name": "Switzerland", "number": "756" },
{ "code": "SY", "code3": "SYR", "name": "Syrian Arab Republic", "number": "760" },
{ "code": "TW", "code3": "TWN", "name": "Taiwan", "number": "158" },
{ "code": "TJ", "code3": "TJK", "name": "Tajikistan", "number": "762" },
{ "code": "TZ", "code3": "TZA", "name": "Tanzania, United Republic of", "number": "834" },
{ "code": "TH", "code3": "THA", "name": "Thailand", "number": "764" },
{ "code": "TL", "code3": "TLS", "name": "Timor-Leste", "number": "626" },
{ "code": "TG", "code3": "TGO", "name": "Togo", "number": "768" },
{ "code": "TK", "code3": "TKL", "name": "Tokelau", "number": "772" },
{ "code": "TO", "code3": "TON", "name": "Tonga", "number": "776" },
{ "code": "TT", "code3": "TTO", "name": "Trinidad and Tobago", "number": "780" },
{ "code": "TN", "code3": "TUN", "name": "Tunisia", "number": "788" },
{ "code": "TR", "code3": "TUR", "name": "Turkey", "number": "792" },
{ "code": "TM", "code3": "TKM", "name": "Turkmenistan", "number": "795" },
{ "code": "TC", "code3": "TCA", "name": "Turks and Caicos Islands (the)", "number": "796" },
{ "code": "TV", "code3": "TUV", "name": "Tuvalu", "number": "798" },
{ "code": "UG", "code3": "UGA", "name": "Uganda", "number": "800" },
{ "code": "UA", "code3": "UKR", "name": "Ukraine", "number": "804" },
{ "code": "AE", "code3": "ARE", "name": "United Arab Emirates (the)", "number": "784" },
{ "code": "GB", "code3": "GBR", "name": "United Kingdom of Great Britain and Northern Ireland (the)", "number": "826" },
{ "code": "UM", "code3": "UMI", "name": "United States Minor Outlying Islands (the)", "number": "581" },
{ "code": "US", "code3": "USA", "name": "United States of America (the)", "number": "840" },
{ "code": "UY", "code3": "URY", "name": "Uruguay", "number": "858" },
{ "code": "UZ", "code3": "UZB", "name": "Uzbekistan", "number": "860" },
{ "code": "VU", "code3": "VUT", "name": "Vanuatu", "number": "548" },
{ "code": "VE", "code3": "VEN", "name": "Venezuela (Bolivarian Republic of)", "number": "862" },
{ "code": "VN", "code3": "VNM", "name": "Viet Nam", "number": "704" },
{ "code": "VG", "code3": "VGB", "name": "Virgin Islands (British)", "number": "092" },
{ "code": "VI", "code3": "VIR", "name": "Virgin Islands (U.S.)", "number": "850" },
{ "code": "WF", "code3": "WLF", "name": "Wallis and Futuna", "number": "876" },
{ "code": "EH", "code3": "ESH", "name": "Western Sahara", "number": "732" },
{ "code": "YE", "code3": "YEM", "name": "Yemen", "number": "887" },
{ "code": "ZM", "code3": "ZMB", "name": "Zambia", "number": "894" },
{ "code": "ZW", "code3": "ZWE", "name": "Zimbabwe", "number": "716" },
{ "code": "AX", "code3": "ALA", "name": "Åland Islands", "number": "248" }
];