local
p
=
{}
local
country_names_data
=
mw
.
loadJsonData
(
'Module:Country links/data.json'
)
p
.
regions
=
{
{
name
=
"Africa"
,
name_code
=
"r002"
,
countries
=
{
"DZ"
,
"AO"
,
"BI"
,
"TD"
,
"EG"
,
"GH"
,
"KE"
,
"LR"
,
"MA"
,
"NE"
,
"NG"
,
"ZA"
,
"UG"
}
},
{
name
=
"Asia"
,
name_code
=
"r142"
,
countries
=
{
"AZ"
,
"BH"
,
"BD"
,
"BT"
,
"BN"
,
"KH"
,
"CN"
,
"TL"
,
"HK"
,
"IN"
,
"IL"
,
"JP"
,
"JO"
,
"KZ"
,
"KW"
,
"MO"
,
"MY"
,
"MV"
,
"MN"
,
"NP"
,
"OM"
,
"PK"
,
"PH"
,
"QA"
,
"SG"
,
"LK"
,
"TW"
,
"TJ"
,
"TH"
,
"VN"
}
},
{
name
=
"Europe"
,
name_code
=
"r150"
,
countries
=
{
"AL"
,
"AD"
,
"AT"
,
"BE"
,
"BA"
,
"BG"
,
"HR"
,
"CY"
,
"CZ"
,
"DK"
,
"EE"
,
"FR"
,
"GE"
,
"DE"
,
"GR"
,
"HU"
,
"IS"
,
"IT"
,
"LV"
,
"LI"
,
"LT"
,
"LU"
,
"MT"
,
"MC"
,
"ME"
,
"NL"
,
"NO"
,
"PL"
,
"PT"
,
"IE"
,
"RO"
,
"RS"
,
"SK"
,
"SI"
,
"ES"
,
"SE"
,
"CH"
,
"GB"
,
"VA"
}
},
{
name
=
"North America"
,
name_code
=
"r003"
,
countries
=
{
"US"
,
"AW"
,
"BS"
,
"BB"
,
"BZ"
,
"BM"
,
"CA"
,
"CR"
,
"DM"
,
"GD"
,
"GP"
,
"HT"
,
"HN"
,
"JM"
,
"MQ"
,
"MX"
,
"NI"
,
"PA"
,
"PR"
,
"KN"
,
"LC"
,
"PM"
,
"VC"
,
"TT"
,
"TC"
}
},
{
name
=
"South America"
,
name_code
=
"r005"
,
countries
=
{
"AR"
,
"BO"
,
"BR"
,
"CL"
,
"CO"
,
"EC"
,
"FK"
,
"GF"
,
"GY"
,
"PE"
,
"SR"
,
"UY"
,
"VE"
}
},
{
name
=
"Oceania"
,
name_code
=
"r009"
,
countries
=
{
"AS"
,
"AU"
,
"CK"
,
"FJ"
,
"PF"
,
"GU"
,
"KI"
,
"MH"
,
"FM"
,
"NR"
,
"NZ"
,
"PW"
}
}
}
function
p
.
get_country_name
(
language_code
,
country_code
)
local
name
if
country_names_data
[
language_code
]
==
nil
then
language_code
=
'en'
end
if
country_names_data
[
language_code
][
country_code
]
==
nil
then
name
=
country_names_data
[
'en'
][
country_code
]
else
name
=
country_names_data
[
language_code
][
country_code
]
end
return
name
end
function
p
.
get_donate_url
(
language_code
,
country_code
)
local
url
=
'https://donate.wikimedia.org/wiki/Special:FundraiserLandingPage'
url
=
url
..
'?wmf_medium=Waystogive&wmf_source=Waystogive&wmf_campaign=C11_Waystogive'
url
=
url
..
'&uselang='
..
language_code
url
=
url
..
'&country='
..
country_code
return
url
end
function
p
.
make_donate_links
(
language_code
,
country_list
)
local
wikitext
=
''
local
t
=
{}
for
key
,
value
in
ipairs
(
country_list
)
do
table.insert
(
t
,
{
value
,
p
.
get_country_name
(
language_code
,
value
)})
end
-- sort by country name
table.sort
(
t
,
function
(
k1
,
k2
)
return
k1
[
2
]
<
k2
[
2
]
end
)
for
key
,
value
in
ipairs
(
t
)
do
local
url
=
p
.
get_donate_url
(
language_code
,
value
[
1
]
)
local
link_text
=
value
[
2
]
wikitext
=
wikitext
..
'* ['
..
url
..
' '
..
link_text
..
']
\n
'
end
return
wikitext
end
function
p
.
build_all_regions
(
language_code
)
local
out
=
''
for
i
,
v
in
ipairs
(
p
.
regions
)
do
local
region_name
=
p
.
get_country_name
(
language_code
,
v
.
name_code
)
out
=
out
..
'<div class="mw-collapsible mw-collapsed">
\n
'
out
=
out
..
'<div class="mw-collapsible-toggle continent-header">'
..
region_name
..
'</div>
\n
'
out
=
out
..
'<div class="mw-collapsible-content country-list">
\n
'
out
=
out
..
p
.
make_donate_links
(
language_code
,
v
.
countries
)
out
=
out
..
'</div>
\n
'
out
=
out
..
'</div>
\n
'
end
return
out
end
function
p
.
main
(
frame
)
local
language_code
=
p
.
page_language
(
frame
)
return
p
.
build_all_regions
(
language_code
)
end
function
p
.
page_language
(
frame
)
local
full_title
=
mw
.
title
.
getCurrentTitle
().
prefixedText
local
t
=
mw
.
text
.
split
(
full_title
,
'/'
)
local
lang
=
t
[
#
t
]
if
mw
.
language
.
isKnownLanguageTag
(
lang
)
then
return
lang
else
return
'en'
end
end
-- version we can #invoke with parameters
function
p
.
get_country_name_wrapper
(
frame
)
return
p
.
get_country_name
(
frame
.
args
[
1
],
frame
.
args
[
2
]
)
end
return
p