forked from jamieholst/selectToAutocomplete
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nodejs.countryList.js
56 lines (41 loc) · 1.74 KB
/
nodejs.countryList.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var allLocales = {};
exports.countryList = function(selectedElementName,locale){
if( typeof locale !== "string" )
locale = "en-US";
/* A note on error checking for this require(): if the locale really exists, it will be found.
If it's not found an exception will be thrown by node:
Error: Cannot find module './country-list/country/icu/BOGUS-LOCALE/country.json'
So I don't check for error return.
*/
var raw = require("./country-list/country/icu/"+locale.replace('-','_')+"/country.json");
var json = [];
for (var key in raw) {
/* In this loop we convert from the internal data format needed by
the country-list package to the internal data format needed by
the select-to-autocomplete package
*/
if (key === 'length' || !raw.hasOwnProperty(key)) continue;
var value = raw[key];
json.push({name:value,"data-alternative-spellings":key});
}
var html = "";
// Provide a "Select Country" leader element, but only if there is no pre-selected item.
// This is to prevent users who have previously selected a country from setting an empty country.
if( !selectedElementName || selectedElementName.length < 1)
html = '<option value="" selected="selected">Select Country</option>\n';
json.forEach(function(element, index, array){
var str = '<option value="' + element.name+'"';
if( element.name == selectedElementName )
str += " selected ";
var helper=function(field){
if( typeof element[field] != "string" ) return("");
if( element[field].length == 0 ) return("");
return(" "+field+'="'+element[field]+'" ');
}
str += helper("data-alternative-spellings");
str += helper("data-relevancy-booster");
str += ">"+element.name+"</option>\n";
html += str;
})
return(html);
}