Created page with "local p = {} local function countries(args, country) local data = {AFRICA = "no", ARAB = "no", ASIA = "no", EUR = "no", default = "yes"} local yesOrNo = data[country]..."
 
Update
 
Line 1: Line 1:
local p = {}
local p = {}


local function countries(args, country)
local format = mw.ustring.format
    local data = {AFRICA = "no", ARAB = "no", ASIA = "no", EUR = "no", default = "yes"}
local frame = mw.getCurrentFrame()
    local yesOrNo = data[country] or data.default
local getArgs = require('Module:Arguments').getArgs
    if yesOrNo == "no" then
 
        return args.countries
local function country(args)
    else
local state = args.state or args.province
        return nil
local country
    end
local countryModule = mw.loadData("Module:Road data/countrymask")
local country = args.country or countryModule[state]
return country
end
end


local function regions(args, country)
local function state(args)
local data = {EUR = "no", AUS = "no", AUT = "no", BIH = "no", CAN = "no", CYP = "no", CZE = "no", ESP = "no", GRC = "no", HRV = "no",
local state = args.state or args.province
              HUN = "no", ITA = "no", POL = "no", SGP = "no", SRB = "no", SVK = "no", SVN = "no", TUR = "no", UKR = "no", default = "yes"}
local country = country(args)
if args.communities then
return "Autonomous<br>communities", args.communities
return frame:expandTemplate ({title='Country name', args = { country .. "-" .. state}})
end
local yesOrNo = data[country] or data.default
if yesOrNo == "no" then
return "Regions", args.regions
else
return "Regions", nil
end
end
end


local function states(args, country)
local function state2(args)
    local data = {AUS = "no", AUT = "no", BRA = "no", DEU = "no", IND = "no", MEX = "no", MYS = "no", USA = "no", default = "yes"}
local state = args.state2 or args.province2
    local yesOrNo = data[country] or data.default
local country = country(args)
    if yesOrNo == "no" then
        return args.states
return frame:expandTemplate ({title='Country name', args = { country .. "-" .. state}})
    else
        return nil
    end
end
end


local function provinces(args, country)
local function spain(args)
    local data = {CAN = "no", CRI = "no", ESP = "no", IRN = "no", NLD = "no", PHL = "no", SAU = "no", THA = "no", TUR = "no", default = "yes"}
local province = args.province or args.community
    local yesOrNo = data[country] or data.default
     if yesOrNo == "no" then
local communities = {
        return args.provinces
["AL"] = "AN",
     else
["CA"] = "AN",
        return nil
["CO"] = "AN",
["GR"] = "AN",
["H"] = "AN",
["J"] = "AN",
["MA"] = "AN",
["SE"] = "AN",
["HU"] = "AR",
["TE"] = "AR",
["Z"] = "AR",
["O"] = "AS",
["S"] = "CB",
["AV"] = "CL",
["BU"] = "CL",
["LE"] = "CL",
["P"] = "CL",
["SA"] = "CL",
["SG"] = "CL",
["SO"] = "CL",
["VA"] = "CL",
["ZA"] = "CL",
["AB"] = "CM",
["CR"] = "CM",
["CU"] = "CM",
["GU"] = "CM",
["TO"] = "CM",
["GC"] = "CN",
["TF"] = "CN",
["B"] = "CT",
["GI"] = "CT",
["L"] = "CT",
["T"] = "CT",
["BA"] = "EX",
["CC"] = "EX",
["C"] = "GA",
["LU"] = "GA",
["OR"] = "GA",
["PO"] = "GA",
["PM"] = "IB",
["MU"] = "MC",
["M"] = "MD",
["NA"] = "NC",
["VI"] = "PV",
["BI"] = "PV",
["SS"] = "PV",
["LO"] = "RI",
["A"] = "VC",
["CS"] = "VC",
["V"] = "VC",
}
local comm = communities[province]
     local data = frame:expandTemplate ({title='Flagg', args = { "xx", frame:expandTemplate ({title='Country name', args = { "ESP-" .. comm}}) } })
     return data
   
     end
     end
local function constituent(args)
local loc = country(args)
if loc == "GBR" then
return nil
else
    local labels = {
    ["ENG"] = "Constituent country",
    ["NIR"] = "Constituent country",
    ["SCT"] = "Constituent country",
    ["WLS"] = "Constituent country",
    ["NLD"] = "Constituent country",
    ["ABW"] = "Constituent country",
    ["CUW"] = "Constituent country",
    ["SXM"] = "Constituent country",
    ["GGY"] = "Crown dependency",
    ["IMN"] = "Crown dependency",
    ["JEY"] = "Crown dependency",
    ["AIA"] = "Overseas territory",
    ["BMU"] = "Overseas territory",
    ["IOT"] = "Overseas territory",
    ["VGB"] = "Overseas territory",
    ["CYM"] = "Overseas territory",
    ["FLK"] = "Overseas territory",
    ["GIB"] = "Overseas territory",
    ["MSR"] = "Overseas territory",
    ["PCN"] = "Overseas territory",
    ["SHN"] = "Overseas territory",
    ["SGS"] = "Overseas territory",
    ["TCA"] = "Overseas territory",
    }
    local label = labels[loc]
    local countryname = frame:expandTemplate ({title='Country name', args = { country(args)}})
    local data = frame:expandTemplate ({title='Flagg', args = { "xx", countryname, nodata = 1 }})
    return label, data
end
end
end


local function counties(args, country)
local function location(args)
    local counties = args.counties
    local districts = args.districts
local infobox_args = {}
    local municipalities = args.municipalities
    local parishes = args.parishes
infobox_args['title'] = 'Location'
    local boroughs = args.boroughs
infobox_args['bodystyle'] = 'display:inline-table;'
    if counties then
infobox_args['child'] = 'yes'
        return "Counties", counties
infobox_args['decat'] = 'yes'
    elseif districts then
 
        return "Districts", districts
------------- EUROPE & ASIA --------------
    elseif municipalities then
if country(args) == "EUR" or country(args) == "ASIA" then
        return "Municipalities", municipalities
infobox_args['label1'] = 'Countries'
    elseif parishes then
infobox_args['data1'] = args.countries
        return "Parishes", parishes
    elseif boroughs then
------------- ÅLAND --------------
        return "Boroughs", boroughs
elseif country(args) == "ALA" then
    else
infobox_args['label1'] = 'Country'
        return '', nil
infobox_args['data1'] = "[[Finland]]"
    end
infobox_args['label2'] = 'Autonomous region'
end
infobox_args['data2'] = "[[Åland]]"
 
------------- AUSTRALIA --------------
elseif country(args) == "AUS" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Australia]]"
local function lga(args)
local labels = {
SA = "[[Local government areas of South Australia|LGA(s)]]",
VIC = "[[Local government in Victoria|LGA(s)]]",
NSW = "[[Local government areas of New South Wales|LGA(s)]]",
QLD = "[[Local government areas of Queensland|LGA(s)]]",
NT = "[[Local government areas of the Northern Territory|LGA(s)]]",
WA = "[[Local government areas of Western Australia|LGA(s)]]",
TAS = "[[Local government areas of Tasmania|LGA(s)]]",
ACT = "District(s)"
}
    local state = args.state or ''
    local label = labels[state] or "[[Local government in Australia|LGA(s)]]"
    return label, args.lga
end
local function locations(args)
    local labels = {
    highway = "Major settlements",
    ["rural road"] = "Major settlements",
    freeway = "Major suburbs",
    ["city highway"] = "Major suburbs",
    road = "Major suburbs",
    street = "Suburb"
    }
    local type = args.type or ''
    local label = labels[type] or "Primary<br>destinations"
    return label, args.locations
end
if args.state then
if args.state == "NT" or args.state == "ACT" or args.state == "JBT" then
infobox_args['label2'] = 'Territory'
else
infobox_args['label2'] = 'State'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
end
infobox_args['label3'], infobox_args['data3'] = lga(args)
infobox_args['label4'], infobox_args['data4'] = locations(args)
------------- BRAZIL --------------
elseif country(args) == "BRA" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Brazil]]"
if args.state then
if args.state == "DF" then
infobox_args['label2'] = 'Federal district'
else
infobox_args['label2'] = 'State'
end
 
            local function disambiguated_state(code)
                local state_map = {
                    ["AC"] = '[[Acre (state)|Acre]]',
                    ["AM"] = '[[Amazonas (Brazilian state)|Amazonas]]',
                    ["DF"] = '[[Distrito Federal (Brazil)|Distrito Federal]]',
                    ["PR"] = '[[Paraná (state)|Paraná]]',
                    ["RJ"] = '[[Rio de Janeiro (state)|Rio de Janeiro]]',
                    ["SC"] = '[[Santa Catarina (state)|Santa Catarina]]',
                    ["SP"] = '[[São Paulo (state)|São Paulo]]',
                }
                return state_map[code]
            end
            infobox_args['data2'] = disambiguated_state(args.state)
                or frame:expandTemplate({
                    title = 'Flagg',
                    args = { "xx", state(args), nodata = 1 }
                })
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
end
------------- CANADA --------------
elseif country(args) == "CAN" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Canada]]"
if args.province then
if args.province == "YK" or args.province == "NT" or args.province == "NU" then
infobox_args['label2'] = 'Territory'
else
infobox_args['label2'] = 'Province'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'Provinces'
infobox_args['data2'] = args.provinces
end
if args.province == 'AB' then
infobox_args['label3'] = "Specialized and rural municipalities"
infobox_args['data3'] = args.rural_municipalities
infobox_args['label4'] = "Special areas"
infobox_args['data4'] = args.areas
infobox_args['label5'] = "Improvement districts"
infobox_args['data5'] = args.districts
elseif args.province == 'BC' then
infobox_args['label3'] = "Regional districts"
infobox_args['data3'] = args.districts or args.rural_municipalities
elseif args.province == 'MB' or args.province == 'SK' then
infobox_args['label3'] = "Rural municipalities"
infobox_args['data3'] = args.rural_municipalities
elseif args.province == 'NB' or args.province == 'PE' then
infobox_args['label3'] = "Counties"
infobox_args['data3'] = args.counties
infobox_args['label4'] = "Parishes"
infobox_args['data4'] = args.parishes
infobox_args['label5'] = "Communities"
infobox_args['data5'] = args.communities
elseif args.province == 'NS' then
infobox_args['label3'] = "Counties"
infobox_args['data3'] = args.counties
elseif args.province == 'ON' then
infobox_args['label3'] = "Municipalities"
infobox_args['data3'] = args.rural_municipalities
infobox_args['label4'] = "Counties"
infobox_args['data4'] = args.counties
infobox_args['label5'] = "Regions"
infobox_args['data5'] = args.regions
infobox_args['label6'] = "Districts"
infobox_args['data6'] = args.districts
infobox_args['label7'] = "Divisions"
infobox_args['data7'] = args.divisions
elseif args.province == 'QC' then
infobox_args['label3'] = "Regional county municipalities"
infobox_args['data3'] = args.rural_municipalities
infobox_args['label4'] = "Equivalent territories"
infobox_args['data4'] = args.territories
elseif args.province == 'NT' or args.province == 'NU' then
infobox_args['label3'] = "Regions"
infobox_args['data3'] = args.regions
end
 
------------- CHINA --------------
elseif country(args) == "CHN" or country(args) == "HKG" or country(args) == "MAC" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[China]]"
if country(args) == "HKG" then
infobox_args['label2'] = 'Special administrative region'
infobox_args['data2'] = "[[Hong Kong]]"
infobox_args['label3'] = 'Districts'
infobox_args['data3'] = args.districts
elseif country(args) == "MAC" then
infobox_args['label2'] = 'Special administrative region'
infobox_args['data2'] = "[[Macau]]"
else
if args.province then
infobox_args['label2'] = 'Province'
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
infobox_args['label3'] = 'Counties'
infobox_args['data3'] = args.counties
else
infobox_args['label2'] = 'Provinces'
infobox_args['data2'] = args.provinces
infobox_args['label3'] = 'Autonomous regions'
infobox_args['data3'] = args.regions
end
end
------------- FRANCE --------------
elseif country(args) == "FRA" or country(args) == "GUF" or country(args) == "GLP" or country(args) == "MTQ" or country(args) == "MYT" or country(args) == "REU" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[France]]"
if country(args) == "GUF" then
infobox_args['label2'] = 'Overseas region'
infobox_args['data2'] = "[[French Guiana]]"
infobox_args['label3'] = 'Department'
infobox_args['data3'] = "[[Guyane]]"
elseif country(args) == "GLP" then
infobox_args['label2'] = 'Overseas region and department'
infobox_args['data2'] = "[[Guadeloupe]]"
elseif country(args) == "MTQ" then
infobox_args['label2'] = 'Overseas region and department'
infobox_args['data2'] = "[[Martinique]]"
elseif country(args) == "MYT" then
infobox_args['label2'] = 'Overseas region and department'
infobox_args['data2'] = "[[Mayotte]]"
elseif country(args) == "REU" then
infobox_args['label2'] = 'Overseas region'
infobox_args['data2'] = "[[Réunion]]"
infobox_args['label3'] = 'Department'
infobox_args['data3'] = "[[La Réunion]]"
else
infobox_args['label2'] = 'Regions'
infobox_args['data2'] = args.regions
infobox_args['label3'] = 'Departments'
infobox_args['data3'] = args.departments
end
------------ GEORGIA -------------
elseif country(args) == "GEO" then
infobox_args['data1'] = "[[Georgia (country)|Georgia]]"
------------- INDIA --------------
elseif country(args) == "IND" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[India]]"
infobox_args['label4'] = 'Districts'
infobox_args['data4'] = args.districts
if args.state then
if args.state == "AN" or args.state == 'CH' or args.state == 'DH' or args.state == 'DL' or args.state == 'JK' or args.state == 'LA' or args.state == 'LD' or args.state == 'PY' then
infobox_args['label2'] = 'Union territory'
else
infobox_args['label2'] = 'State'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
infobox_args['label3'] = 'Union territories'
infobox_args['data3'] = args.territories
end
------------- MEXICO --------------
elseif country(args) == "MEX" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Mexico]]"
if args.state then
if args.state == "CMX" then
infobox_args['label2'] = 'Autonomous city'
else
infobox_args['label2'] = 'State'
end
if args.state == "CHH" then
infobox_args['data2'] = '[[Chihuahua (state)|Chihuahua]]'
elseif args.state == "HID" then
infobox_args['data2'] = '[[Hidalgo (state)|Hidalgo]]'
elseif args.state == "MEX" then
infobox_args['data2'] = '[[State of Mexico|México]]'
else
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
end
infobox_args['label3'] = 'Municipalities'
infobox_args['data3'] = args.counties or args.municipalities
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
infobox_args['label3'] = 'Municipalities'
infobox_args['data3'] = args.counties or args.municipalities
end
 
------------- NETHERLANDS --------------
elseif country(args) == "NLD" or country(args) == "ABW" or country(args) == "CUW" or country(args) == "SXM"then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Kingdom of the Netherlands]]"
infobox_args['label2'], infobox_args['data2'] = constituent(args)
if country(args) == "NLD" then
infobox_args['label3'] = 'Provinces'
infobox_args['data3'] = args.provinces
end
------------- RUSSIA --------------
elseif country(args) == "RUS" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Russia]]"
infobox_args['label2'] = 'Oblasts'
infobox_args['data2'] = args.oblasts
infobox_args['label3'] = 'Republics'
infobox_args['data3'] = args.republics
infobox_args['label4'] = 'Autonomous okrugs'
infobox_args['data4'] = args.okrugs
infobox_args['label5'] = 'Krais'
infobox_args['data5'] = args.krais
infobox_args['label6'] = 'Federal cities'
infobox_args['data6'] = args.federal_cities
------------- SPAIN --------------
elseif country(args) == "ESP" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Spain]]"
local province = args.province
if province and province ~= '' then
infobox_args['label2'] = 'Autonomous<br>community'
infobox_args['data2'] = spain(args)
if province == "O" or province == "S" or province == "PM" or province == "LO" or province == "M" or province == "MU" or province == "NA" then
return nil
else
infobox_args['label3'] = 'Province'
infobox_args['data3'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
end
elseif args.community then
infobox_args['label2'] = 'Autonomous<br>community'
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , frame:expandTemplate ({title='country name', args = {"ESP-" .. args.community} }) } })
infobox_args['label3'] = 'Provinces'
infobox_args['data3'] = args.provinces
else
infobox_args['label2'] = 'Autonomous<br>communities'
infobox_args['data2'] = args.communities
infobox_args['label3'] = 'Provinces'
infobox_args['data3'] = args.provinces
end
 
------------- UNITED KINGDOM --------------
elseif country(args) == "GBR" or country(args) == "ENG" or country(args) == "NIR" or country(args) == "SCT" or country(args) == "WLS" or
country(args) == "GGY" or country(args) == "IMN" or country(args) == "JEY" or country(args) == "AIA" or country(args) == "BMU" or
country(args) == "IOT" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "FLK" or country(args) == "GIB" or
country(args) == "MSR" or country(args) == "PCN" or country(args) == "SHN" or country(args) == "SGS" or country(args) == "TCA" then
 
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[United Kingdom]]"
infobox_args['label2'], infobox_args['data2'] = constituent(args)
if country(args) ~= "ENG" then
infobox_args['label5'] = 'Counties'
infobox_args['data5'] = args.counties
end


local function ruralMunis(args, country)
if country(args) == "ENG" then
    local label
infobox_args['label3'] = 'Administrative areas'
    local province = country or ''
infobox_args['data3'] = args.areas
    if province == "AB" then
infobox_args['label4'] = 'Counties'
        label = "Specialized<br>and rural<br>municipalities"
infobox_args['data4'] = args.counties
    elseif province == "ON" then
infobox_args['label5'] = 'Boroughs'
    label = "Municipalities"
infobox_args['data5'] = args.boroughs
    else
elseif country(args) == "NIR" then
        label = "Rural<br>municipalities"
infobox_args['label3'] = 'Districts'
    end
infobox_args['data3'] = args.districts
    local data = {AB = "no", BC = "no", MB = "no", NB = "no", NL = "no", ON = "no", PE = "no", QC = "no", SK = "no", default = "yes"}
elseif country(args) == "SCT" then
    local yesOrNo = data[province] or data.default
infobox_args['label3'] = 'Council areas'
    if yesOrNo == "no" then
infobox_args['data3'] = args.areas
        return label, args.rural_municipalities
elseif country(args) == "WLS" then
    else
infobox_args['label3'] = 'Counties'
        return '', nil
infobox_args['data3'] = args.counties
    end
infobox_args['label4'] = 'County boroughs'
end
infobox_args['data4'] = args.boroughs
elseif country(args) == "GGY" or country(args) == "JEY" or country(args) == "BMU" or country(args) == "MSR" then
infobox_args['label3'] = 'Parishes'
infobox_args['data3'] = args.parishes
elseif country(args) == "IMN" then
infobox_args['label3'] = 'Sheadings'
infobox_args['data3'] = args.sheadings
elseif country(args) == "AIA" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "TCA" then
infobox_args['label3'] = 'Districts'
infobox_args['data3'] = args.districts
elseif country(args) == "SHN" then
infobox_args['label3'] = 'Island'
infobox_args['data3'] = args.island
end


local function divisions(args, country)
------------- UNITED STATES --------------
    local province = country or ''
elseif country(args) == "USA" then
    local data = {ON = "no", default = "yes"}
infobox_args['label1'] = 'Country'
    local yesOrNo = data[province] or data.default
infobox_args['data1'] = "[[United States]]"
    if yesOrNo == "no" then
        return args.divisions
local function county(args)
    else
local state = args.state
        return nil
local stateName = frame:expandTemplate ({title='Country name', args = { "USA-" .. state}})
    end
local country = country(args)
end
local countyName = args.county or args.parish or args.borough or args.municipality
local county
if state == 'LA' then
county = 'Parish'
elseif state == 'AK' then
county = 'Borough'
elseif state == 'PR' then
county = 'Municipality'
else
county = 'County'
end
return string.format("[[%s %s, %s|%s]]", countyName, county, stateName, countyName)
end


local function cities(args, country, parameter)
if args.state2 then
    local data = {USA = "yes", default = "no"}
infobox_args['label2'] = 'States'
    local yesOrNo = data[country] or data.default
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args) }}) .. ", " .. frame:expandTemplate ({title='Flagg', args = {"xx" , state2(args) }})
    if yesOrNo == "no" then
elseif args.state then
        return args[parameter]
if args.state == "AS" or args.state == "GU" or args.state == "MP" or args.state == "PR" or args.state == "VI" then
    else
infobox_args['label2'] = 'Territory'
        return nil
elseif args.state == "DC" then
    end
infobox_args['label2'] = 'Federal district'
end
else
infobox_args['label2'] = 'State'
end
if args.state == "GA" then
infobox_args['data2'] = '[[Georgia (U.S. state)|Georgia]]'
elseif args.state == "WA" then
infobox_args['data2'] = '[[Washington (state)|Washington]]'
elseif args.state == "NY" then
infobox_args['data2'] = '[[New York (state)|New York]]'
else
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
end
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
end
if args.county then
infobox_args['label3'] = 'County'
infobox_args['data3'] = county(args)
else
infobox_args['label3'] = 'Counties'
infobox_args['data3'] = args.counties
end
if args.parish then
infobox_args['label4'] = 'Parish'
infobox_args['data4'] = county(args)
else
infobox_args['label4'] = 'Parishes'
infobox_args['data4'] = args.parishes
end
if args.borough then
infobox_args['label5'] = 'Borough'
infobox_args['data5'] = county(args)
else
infobox_args['label5'] = 'Boroughs'
infobox_args['data5'] = args.boroughs
end
if args.municipality then
infobox_args['label6'] = 'Municipality'
infobox_args['data6'] = county(args)
else
infobox_args['label6'] = 'Municipalities'
infobox_args['data6'] = args.municipalities
end
if args.indep_city then
infobox_args['label6'] = 'Independent city'
infobox_args['data6'] = args.indep_city
else
infobox_args['label7'] = 'Independent cities'
infobox_args['data7'] = args.indep_cities
end
else
------------- ALL OTHER COUNTRIES --------------
if country(args) ~= nil then
local countryname = frame:expandTemplate ({title='Country name', args = { country(args)}})
infobox_args['label1'] = 'Country'
infobox_args['data1'] = frame:expandTemplate ({title='Flagg', args = { "xx", countryname, nodata = 1 }})
else
infobox_args['label1'] = 'Countries'
infobox_args['data1'] = args.countries
end
infobox_args['label2'] = 'Island'
infobox_args['data2'] = args.island
infobox_args['label3'] = 'Communities'
infobox_args['data3'] = args.communities
infobox_args['label4'] = 'Regions'
infobox_args['data4'] = args.regions
infobox_args['label5'] = 'Provinces'
infobox_args['data5'] = args.provinces
infobox_args['label6'] = 'States'
infobox_args['data6'] = args.states
infobox_args['label7'] = 'Governorates'
infobox_args['data7'] = args.governorates
infobox_args['label8'] = 'Counties'
infobox_args['data8'] = args.counties
infobox_args['label9'] = 'Departments'
infobox_args['data9'] = args.departments
infobox_args['label10'] = 'Cantons'
infobox_args['data10'] = args.cantons
infobox_args['label11'] = 'Prefectures'
infobox_args['data11'] = args.prefectures
infobox_args['label12'] = 'Divisions'
infobox_args['data12'] = args.divisions
infobox_args['label13'] = 'Oblasts'
infobox_args['data13'] = args.oblasts
infobox_args['label14'] = 'Districts'
infobox_args['data14'] = args.districts
infobox_args['label15'] = 'Parishes'
infobox_args['data15'] = args.parishes
infobox_args['label16'] = 'Communes'
infobox_args['data16'] = args.communes
infobox_args['label17'] = 'Territories'
infobox_args['data17'] = args.territories
infobox_args['label18'] = args.label1
infobox_args['data18'] = args.location1
infobox_args['label19'] = args.label2
infobox_args['data19'] = args.location2
infobox_args['label20'] = args.label3
infobox_args['data20'] = args.location3
infobox_args['label21'] = args.label4
infobox_args['data21'] = args.location4
infobox_args['label22'] = args.label5
infobox_args['data22'] = args.location5
infobox_args['label23'] = 'Subregions'
infobox_args['data23'] = args.subregions
infobox_args['label24'] = 'Subcounties'
infobox_args['data24'] = args.subcounties
infobox_args['label25'] = 'Subprefectures'
infobox_args['data25'] = args.subprefectures
end
if country(args) ~= "USA" then
infobox_args['label26'] = 'Municipalities'
infobox_args['data26'] = args.municipalities
infobox_args['label27'] = 'Major cities'
infobox_args['data27'] = args.cities
infobox_args['label28'] = 'Towns'
infobox_args['data28'] = args.towns
infobox_args['label29'] = 'Villages'
infobox_args['data29'] = args.villages
if country(args) == "GBR" or country(args) == "ENG" or country(args) == "NIR" or country(args) == "SCT" or country(args) == "WLS" or
country(args) == "GGY" or country(args) == "IMN" or country(args) == "JEY" or country(args) == "AIA" or country(args) == "BMU" or
country(args) == "IOT" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "FLK" or country(args) == "GIB" or
country(args) == "MSR" or country(args) == "PCN" or country(args) == "SHN" or country(args) == "SGS" or country(args) == "TCA" then
infobox_args['label30'] = '[[Primary status|Primary<br>destinations]]'
infobox_args['data30'] = args.destinations
else
infobox_args['label30'] = 'Primary<br>destinations'
infobox_args['data30'] = args.destinations
end
end


local function destinations(args, country)
return frame:expandTemplate ({title='Infobox', args = infobox_args})
    local label
    if country == "GBR" then
        label = "[[Primary status|Primary<br>destinations]]"
    else
        label = "Primary<br>destinations"
    end
    local data = {AUS = "no", GBR = "no", IMN = "no", IND = "no", IRL = "no", MYS = "no", NIR = "no", NPL = "no", NZL = "no", default = "yes"}
    local yesOrNo = data[country] or data.default
    if yesOrNo == "no" then
        return label, args.destinations
    else
        return '', nil
    end
end
end


local function lga(args, country)
local function params(args)
    local labels = {SA = "[[Local government areas of South Australia|LGA(s)]]", VIC = "[[Local government in Victoria|LGA(s)]]", NSW = "[[Local government areas of New South Wales|LGA(s)]]",
                    QLD = "[[Local government areas of Queensland|LGA(s)]]", NT = "[[Local government areas of the Northern Territory|LGA(s)]]",
                    WA = "[[Local government areas of Western Australia|LGA(s)]]", TAS = "[[Local government areas of Tasmania|LGA(s)]]", ACT = "District(s)"}
    local data = {AUS = "no", default = "yes"}
    local yesOrNo = data[country] or data.default
    if yesOrNo == "no" then
        local state = args.state or ''
        local label = labels[state] or "[[Local government in Australia|LGA(s)]]"
        return label, args.lga
    else
        return '', nil
    end
end


local function locations(args, country)
if country(args) or args.areas or args.borough or args.boroughs or args.cantons or args.cities or args.communes or args.communities or args.counties or
    local labels = {highway = "Major settlements", ["rural road"] = "Major settlements", freeway = "Major suburbs", ["city highway"] = "Major suburbs", road = "Major suburbs", street = "Suburb"}
args.countries or args.county or args.departments or args.destinations or args.districts or args.divisions or args.federal_cities or args.governorates or
    local data = {AUS = "no", default = "yes"}
args.indep_city or args.indep_cities or args.island or args.krais or args.label1 or args.label2 or args.label3 or args.label4 or args.label5 or args.lga or
    local yesOrNo = data[country] or data.default
args.location1 or args.location2 or args.location3 or args.location4 or args.location5 or args.locations or args.municipalities or args.municipality or
    if yesOrNo == "no" then
args.oblasts or args.okrugs or args.parish or args.parishes or args.prefectures or args.provinces or args.regions or args.republics or args.rural_municipalities or
        local type = args.type or ''
args.sheadings or args.states or args.subcounties or args.subprefectures or args.subregions or args.territories or args.towns or args.villages then
        local label = labels[type] or "Primary<br>destinations"
return true
        return label, args.locations
else
    else
return false
        return '', nil
end
    end
end
end


function p.locations(frame)
    local pframe = frame:getParent()
    local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
    local args = pframe.args -- the arguments passed TO the template, in the wikitext that transcludes the template
   
    local parameters = {label1 = "Countries", label3 = "States", label4 = "Provinces", label7 = "Divisions", label8 = "Major cities",
                        label9 = "Towns", label10 = "Villages", child = "yes", decat = "yes", labelstyle = "text-align:right", title = "Location"}
    local data = {}
   
    local function emptyParam(param)
        if param == '' then
            return nil
        else
            return param
        end
    end


    local country = emptyParam(args.country)
function p.location(frame)
    local state = emptyParam(args.state)
local args = getArgs(frame)
    local province = emptyParam(args.province)
    if not(country) then
if params(args) == false then
        local stateParam = args.state or args.province
return nil
        if not(stateParam) then
else
            country = ''
return location(args)
        else
end
            local countryMask = require "Module:Infobox road/meta/mask/country"
            country = countryMask._country(stateParam, country)
        end
    end
    data[1] = countries(args, country)
    parameters.label2, data[2] = regions(args, country)
    data[3] = states(args, country)
    data[4] = provinces(args, country)
    parameters.label5, data[5] = counties(args, country)
    parameters.label6, data[6] = ruralMunis(args, province)
    data[7] = divisions(args, province)
    data[8] = cities(args, country, 'cities')
    data[9] = cities(args, country, 'towns')
    data[10] = cities(args, country, 'villages')
    parameters.label11, data[11] = destinations(args, country)
    parameters.label12, data[12] = lga(args, country)
    parameters.label13, data[13] = locations(args, country)
   
    local hasData = false
    for k,v in pairs(data) do
        if v ~= '' then
            hasData = true
            break
        end
    end
    if not(hasData) then
        return ''
    end
   
    for k,v in pairs(data) do
        parameters["data" .. k] = v
    end
   
    local infoboxModule = require 'Module:Infobox'
    return infoboxModule.infobox(parameters)
end
end


return p
return p

Latest revision as of 21:25, 6 September 2026

Documentation for this module may be created at Module:Infobox road/locations/doc

local p = {}

local format = mw.ustring.format
local frame = mw.getCurrentFrame()
local getArgs = require('Module:Arguments').getArgs

local function country(args)
	local state = args.state or args.province
	local country
	local countryModule = mw.loadData("Module:Road data/countrymask")
	local country = args.country or countryModule[state]
	
	return country
end

local function state(args)
	local state = args.state or args.province
	local country = country(args)
	
	return frame:expandTemplate ({title='Country name', args = { country .. "-" .. state}})
end

local function state2(args)
	local state = args.state2 or args.province2
	local country = country(args)
	
	return frame:expandTemplate ({title='Country name', args = { country .. "-" .. state}})
end

local function spain(args)
	local province = args.province or args.community
	
	local communities = {
		["AL"] = "AN",
		["CA"] = "AN",
		["CO"] = "AN",
		["GR"] = "AN",
		["H"] = "AN",
		["J"] = "AN",
		["MA"] = "AN",
		["SE"] = "AN",
		["HU"] = "AR",
		["TE"] = "AR",
		["Z"] = "AR",
		["O"] = "AS",
		["S"] = "CB",
		["AV"] = "CL",
		["BU"] = "CL",
		["LE"] = "CL",
		["P"] = "CL",
		["SA"] = "CL",
		["SG"] = "CL",
		["SO"] = "CL",
		["VA"] = "CL",
		["ZA"] = "CL",
		["AB"] = "CM",
		["CR"] = "CM",
		["CU"] = "CM",
		["GU"] = "CM",
		["TO"] = "CM",
		["GC"] = "CN",
		["TF"] = "CN",
		["B"] = "CT",
		["GI"] = "CT",
		["L"] = "CT",
		["T"] = "CT",
		["BA"] = "EX",
		["CC"] = "EX",
		["C"] = "GA",
		["LU"] = "GA",
		["OR"] = "GA",
		["PO"] = "GA",
		["PM"] = "IB",
		["MU"] = "MC",
		["M"] = "MD",
		["NA"] = "NC",
		["VI"] = "PV",
		["BI"] = "PV",
		["SS"] = "PV",
		["LO"] = "RI",
		["A"] = "VC",
		["CS"] = "VC",
		["V"] = "VC",
	}
	
	local comm = communities[province]
    local data = frame:expandTemplate ({title='Flagg', args = { "xx", frame:expandTemplate ({title='Country name', args = { "ESP-" .. comm}}) } })
    return data
    
    end

local function constituent(args)
	local loc = country(args)
	
	if loc == "GBR" then
		return nil
	else
	    local labels = {
	    	["ENG"] = "Constituent country",
	    	["NIR"] = "Constituent country",
	    	["SCT"] = "Constituent country",
	    	["WLS"] = "Constituent country",
	    	["NLD"] = "Constituent country",
	    	["ABW"] = "Constituent country",
	    	["CUW"] = "Constituent country",
	    	["SXM"] = "Constituent country",
	    	["GGY"] = "Crown dependency",
	    	["IMN"] = "Crown dependency",
	    	["JEY"] = "Crown dependency",
	    	["AIA"] = "Overseas territory",
	    	["BMU"] = "Overseas territory",
	    	["IOT"] = "Overseas territory",
	    	["VGB"] = "Overseas territory",
	    	["CYM"] = "Overseas territory",
	    	["FLK"] = "Overseas territory",
	    	["GIB"] = "Overseas territory",
	    	["MSR"] = "Overseas territory",
	    	["PCN"] = "Overseas territory",
	    	["SHN"] = "Overseas territory",
	    	["SGS"] = "Overseas territory",
	    	["TCA"] = "Overseas territory",
	    }
	    local label = labels[loc]
	    local countryname = frame:expandTemplate ({title='Country name', args = { country(args)}})
	    local data = frame:expandTemplate ({title='Flagg', args = { "xx", countryname, nodata = 1 }})
	    return label, data
	end
end

local function location(args)
	
	local infobox_args = {}
	
	infobox_args['title'] = 'Location'
	infobox_args['bodystyle'] = 'display:inline-table;'
	infobox_args['child'] = 'yes'
	infobox_args['decat'] = 'yes'

	------------- EUROPE & ASIA --------------
	if country(args) == "EUR" or country(args) == "ASIA" then
		infobox_args['label1'] = 'Countries'
		infobox_args['data1'] = args.countries
		
	------------- ÅLAND --------------	
	elseif country(args) == "ALA" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Finland]]"
		infobox_args['label2'] = 'Autonomous region'
		infobox_args['data2'] = "[[Åland]]"

	------------- AUSTRALIA --------------
	elseif country(args) == "AUS" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Australia]]"
	
	local function lga(args)
		local labels = {
			SA = "[[Local government areas of South Australia|LGA(s)]]",
			VIC = "[[Local government in Victoria|LGA(s)]]",
			NSW = "[[Local government areas of New South Wales|LGA(s)]]",
			QLD = "[[Local government areas of Queensland|LGA(s)]]",
			NT = "[[Local government areas of the Northern Territory|LGA(s)]]",
			WA = "[[Local government areas of Western Australia|LGA(s)]]",
			TAS = "[[Local government areas of Tasmania|LGA(s)]]", 
			ACT = "District(s)"
		}
	    local state = args.state or ''
	    local label = labels[state] or "[[Local government in Australia|LGA(s)]]"
	    return label, args.lga
	end
	
	local function locations(args)
	    local labels = {
	    	highway = "Major settlements",
	    	["rural road"] = "Major settlements",
	    	freeway = "Major suburbs",
	    	["city highway"] = "Major suburbs",
	    	road = "Major suburbs",
	    	street = "Suburb"
	    }
	    local type = args.type or ''
	    local label = labels[type] or "Primary<br>destinations"
	    return label, args.locations
	end
			
		if args.state then
			if args.state == "NT" or args.state == "ACT" or args.state == "JBT" then
				infobox_args['label2'] = 'Territory'
			else
				infobox_args['label2'] = 'State'
			end
				infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
		else
			infobox_args['label2'] = 'States'
			infobox_args['data2'] = args.states
		end
		
		infobox_args['label3'], infobox_args['data3'] = lga(args)
		infobox_args['label4'], infobox_args['data4'] = locations(args)
			
	------------- BRAZIL --------------
	elseif country(args) == "BRA" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Brazil]]"
		
		if args.state then
			if args.state == "DF" then
				infobox_args['label2'] = 'Federal district'
			else
				infobox_args['label2'] = 'State'
			end

            local function disambiguated_state(code)
                local state_map = {
                    ["AC"] = '[[Acre (state)|Acre]]',
                    ["AM"] = '[[Amazonas (Brazilian state)|Amazonas]]',
                    ["DF"] = '[[Distrito Federal (Brazil)|Distrito Federal]]',
                    ["PR"] = '[[Paraná (state)|Paraná]]',
                    ["RJ"] = '[[Rio de Janeiro (state)|Rio de Janeiro]]',
                    ["SC"] = '[[Santa Catarina (state)|Santa Catarina]]',
                    ["SP"] = '[[São Paulo (state)|São Paulo]]',
                }
                return state_map[code]
            end
            infobox_args['data2'] = disambiguated_state(args.state)
                or frame:expandTemplate({
                    title = 'Flagg',
                    args = { "xx", state(args), nodata = 1 }
                })
		else
			infobox_args['label2'] = 'States'
			infobox_args['data2'] = args.states
		end
		
	------------- CANADA --------------	
	elseif country(args) == "CAN" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Canada]]"
		
		if args.province then
			if args.province == "YK" or args.province == "NT" or args.province == "NU" then
				infobox_args['label2'] = 'Territory'
			else
				infobox_args['label2'] = 'Province'
			end
				infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
		else
			infobox_args['label2'] = 'Provinces'
			infobox_args['data2'] = args.provinces
		end
		
			if args.province == 'AB' then
				infobox_args['label3'] = "Specialized and rural municipalities"
				infobox_args['data3'] = args.rural_municipalities
				infobox_args['label4'] = "Special areas"
				infobox_args['data4'] = args.areas
				infobox_args['label5'] = "Improvement districts"
				infobox_args['data5'] = args.districts
			elseif args.province == 'BC' then
				infobox_args['label3'] = "Regional districts"
				infobox_args['data3'] = args.districts or args.rural_municipalities
			elseif args.province == 'MB' or args.province == 'SK' then
				infobox_args['label3'] = "Rural municipalities"
				infobox_args['data3'] = args.rural_municipalities
			elseif args.province == 'NB' or args.province == 'PE' then
				infobox_args['label3'] = "Counties"
				infobox_args['data3'] = args.counties
				infobox_args['label4'] = "Parishes"
				infobox_args['data4'] = args.parishes
				infobox_args['label5'] = "Communities"
				infobox_args['data5'] = args.communities
			elseif args.province == 'NS' then
				infobox_args['label3'] = "Counties"
				infobox_args['data3'] = args.counties
			elseif args.province == 'ON' then
				infobox_args['label3'] = "Municipalities"
				infobox_args['data3'] = args.rural_municipalities
				infobox_args['label4'] = "Counties"
				infobox_args['data4'] = args.counties
				infobox_args['label5'] = "Regions"
				infobox_args['data5'] = args.regions
				infobox_args['label6'] = "Districts"
				infobox_args['data6'] = args.districts
				infobox_args['label7'] = "Divisions"
				infobox_args['data7'] = args.divisions
			elseif args.province == 'QC' then
				infobox_args['label3'] = "Regional county municipalities"
				infobox_args['data3'] = args.rural_municipalities
				infobox_args['label4'] = "Equivalent territories"
				infobox_args['data4'] = args.territories
			elseif args.province == 'NT' or args.province == 'NU' then
				infobox_args['label3'] = "Regions"
				infobox_args['data3'] = args.regions
			end

	------------- CHINA --------------	
	elseif country(args) == "CHN" or country(args) == "HKG" or country(args) == "MAC" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[China]]"
		
		if country(args) == "HKG" then
			infobox_args['label2'] = 'Special administrative region'
			infobox_args['data2'] = "[[Hong Kong]]"
			infobox_args['label3'] = 'Districts'
			infobox_args['data3'] = args.districts
		elseif country(args) == "MAC" then
			infobox_args['label2'] = 'Special administrative region'
			infobox_args['data2'] = "[[Macau]]"
		else
			if args.province then
				infobox_args['label2'] = 'Province'
				infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
				infobox_args['label3'] = 'Counties'
				infobox_args['data3'] = args.counties
			else
				infobox_args['label2'] = 'Provinces'
				infobox_args['data2'] = args.provinces
				infobox_args['label3'] = 'Autonomous regions'
				infobox_args['data3'] = args.regions
			end
		end
		
	------------- FRANCE --------------
	elseif country(args) == "FRA" or country(args) == "GUF" or country(args) == "GLP" or country(args) == "MTQ" or country(args) == "MYT" or country(args) == "REU" then
			
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[France]]"
		
		if country(args) == "GUF" then
			infobox_args['label2'] = 'Overseas region'
			infobox_args['data2'] = "[[French Guiana]]"
			infobox_args['label3'] = 'Department'
			infobox_args['data3'] = "[[Guyane]]"
		elseif country(args) == "GLP" then
			infobox_args['label2'] = 'Overseas region and department'
			infobox_args['data2'] = "[[Guadeloupe]]"
		elseif country(args) == "MTQ" then
			infobox_args['label2'] = 'Overseas region and department'
			infobox_args['data2'] = "[[Martinique]]"
		elseif country(args) == "MYT" then
			infobox_args['label2'] = 'Overseas region and department'
			infobox_args['data2'] = "[[Mayotte]]"
		elseif country(args) == "REU" then
			infobox_args['label2'] = 'Overseas region'
			infobox_args['data2'] = "[[Réunion]]"
			infobox_args['label3'] = 'Department'
			infobox_args['data3'] = "[[La Réunion]]"
		else
			infobox_args['label2'] = 'Regions'
			infobox_args['data2'] = args.regions
			infobox_args['label3'] = 'Departments'
			infobox_args['data3'] = args.departments
		end
	
	------------ GEORGIA -------------
	elseif country(args) == "GEO" then
		infobox_args['data1'] = "[[Georgia (country)|Georgia]]"
		
	------------- INDIA --------------
	elseif country(args) == "IND" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[India]]"
		infobox_args['label4'] = 'Districts'
		infobox_args['data4'] = args.districts
		
		if args.state then
			if args.state == "AN" or args.state == 'CH' or args.state == 'DH' or args.state == 'DL' or args.state == 'JK' or args.state == 'LA' or args.state == 'LD' or args.state == 'PY' then
				infobox_args['label2'] = 'Union territory'
			else
				infobox_args['label2'] = 'State'
			end
				infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
		else
			infobox_args['label2'] = 'States'
			infobox_args['data2'] = args.states
			infobox_args['label3'] = 'Union territories'
			infobox_args['data3'] = args.territories
		end
		
			
	------------- MEXICO --------------
	elseif country(args) == "MEX" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Mexico]]"
		
		if args.state then
			if args.state == "CMX" then
				infobox_args['label2'] = 'Autonomous city'
			else
				infobox_args['label2'] = 'State'
			end
			if args.state == "CHH" then
				infobox_args['data2'] = '[[Chihuahua (state)|Chihuahua]]'
			elseif args.state == "HID" then
				infobox_args['data2'] = '[[Hidalgo (state)|Hidalgo]]'
			elseif args.state == "MEX" then
				infobox_args['data2'] = '[[State of Mexico|México]]'
			else
				infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
			end
			infobox_args['label3'] = 'Municipalities'
			infobox_args['data3'] = args.counties or args.municipalities
		else
			infobox_args['label2'] = 'States'
			infobox_args['data2'] = args.states
			infobox_args['label3'] = 'Municipalities'
			infobox_args['data3'] = args.counties or args.municipalities
		end

	------------- NETHERLANDS --------------
	elseif country(args) == "NLD" or country(args) == "ABW" or country(args) == "CUW" or country(args) == "SXM"then
			
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Kingdom of the Netherlands]]"
		infobox_args['label2'], infobox_args['data2'] = constituent(args)	
		
		if country(args) == "NLD" then
			infobox_args['label3'] = 'Provinces'
			infobox_args['data3'] = args.provinces
		end
		
	------------- RUSSIA --------------
	elseif country(args) == "RUS" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Russia]]"
		infobox_args['label2'] = 'Oblasts'
		infobox_args['data2'] = args.oblasts
		infobox_args['label3'] = 'Republics'
		infobox_args['data3'] = args.republics
		infobox_args['label4'] = 'Autonomous okrugs'
		infobox_args['data4'] = args.okrugs
		infobox_args['label5'] = 'Krais'
		infobox_args['data5'] = args.krais
		infobox_args['label6'] = 'Federal cities'
		infobox_args['data6'] = args.federal_cities
		
	------------- SPAIN --------------
	elseif country(args) == "ESP" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[Spain]]"
		
		local province = args.province
		
		if province and province ~= '' then
			infobox_args['label2'] = 'Autonomous<br>community'
			infobox_args['data2'] = spain(args)
			if province == "O" or province == "S" or province == "PM" or province == "LO" or province == "M" or province == "MU" or province == "NA" then
				return nil
			else
				infobox_args['label3'] = 'Province'
				infobox_args['data3'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
			end
		elseif args.community then
			infobox_args['label2'] = 'Autonomous<br>community'
			infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , frame:expandTemplate ({title='country name', args = {"ESP-" .. args.community} }) } })
			infobox_args['label3'] = 'Provinces'
			infobox_args['data3'] = args.provinces
		else
			infobox_args['label2'] = 'Autonomous<br>communities'
			infobox_args['data2'] = args.communities
			infobox_args['label3'] = 'Provinces'
			infobox_args['data3'] = args.provinces
			
		end
		
			

	------------- UNITED KINGDOM --------------
	elseif country(args) == "GBR" or country(args) == "ENG" or country(args) == "NIR" or country(args) == "SCT" or country(args) == "WLS" or
		country(args) == "GGY" or country(args) == "IMN" or country(args) == "JEY" or country(args) == "AIA" or country(args) == "BMU" or
		country(args) == "IOT" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "FLK" or country(args) == "GIB" or
		country(args) == "MSR" or country(args) == "PCN" or country(args) == "SHN" or country(args) == "SGS" or country(args) == "TCA" then

		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[United Kingdom]]"
		infobox_args['label2'], infobox_args['data2'] = constituent(args)
		
		if country(args) ~= "ENG" then
			infobox_args['label5'] = 'Counties'
			infobox_args['data5'] = args.counties
		end

		if country(args) == "ENG" then
			infobox_args['label3'] = 'Administrative areas'
			infobox_args['data3'] = args.areas
			infobox_args['label4'] = 'Counties'
			infobox_args['data4'] = args.counties
			infobox_args['label5'] = 'Boroughs'
			infobox_args['data5'] = args.boroughs
		elseif country(args) == "NIR" then
			infobox_args['label3'] = 'Districts'
			infobox_args['data3'] = args.districts
		elseif country(args) == "SCT" then
			infobox_args['label3'] = 'Council areas'
			infobox_args['data3'] = args.areas
		elseif country(args) == "WLS" then
			infobox_args['label3'] = 'Counties'
			infobox_args['data3'] = args.counties
			infobox_args['label4'] = 'County boroughs'
			infobox_args['data4'] = args.boroughs
		elseif country(args) == "GGY" or country(args) == "JEY" or country(args) == "BMU" or country(args) == "MSR" then
			infobox_args['label3'] = 'Parishes'
			infobox_args['data3'] = args.parishes
		elseif country(args) == "IMN" then
			infobox_args['label3'] = 'Sheadings'
			infobox_args['data3'] = args.sheadings
		elseif country(args) == "AIA" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "TCA" then
			infobox_args['label3'] = 'Districts'
			infobox_args['data3'] = args.districts
		elseif country(args) == "SHN" then
			infobox_args['label3'] = 'Island'
			infobox_args['data3'] = args.island
		end

	------------- UNITED STATES --------------
	elseif country(args) == "USA" then
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = "[[United States]]"
		
		local function county(args)
			local state = args.state
			local stateName = frame:expandTemplate ({title='Country name', args = { "USA-" .. state}})
			local country = country(args)
			local countyName = args.county or args.parish or args.borough or args.municipality
			
			local county
			if state == 'LA' then
				county = 'Parish'
			elseif state == 'AK' then
				county = 'Borough'
			elseif state == 'PR' then
				county = 'Municipality'
			else
				county = 'County'
			end
			
			return string.format("[[%s %s, %s|%s]]", countyName, county, stateName, countyName)
		end

		if args.state2 then
			infobox_args['label2'] = 'States'
			infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args) }}) .. ", " .. frame:expandTemplate ({title='Flagg', args = {"xx" , state2(args) }})
		elseif args.state then
			if args.state == "AS" or args.state == "GU" or args.state == "MP" or args.state == "PR" or args.state == "VI" then
				infobox_args['label2'] = 'Territory'
			elseif args.state == "DC" then
				infobox_args['label2'] = 'Federal district'
			else
				infobox_args['label2'] = 'State'
			end
			if args.state == "GA" then
				infobox_args['data2'] = '[[Georgia (U.S. state)|Georgia]]'
			elseif args.state == "WA" then
				infobox_args['data2'] = '[[Washington (state)|Washington]]'
			elseif args.state == "NY" then
				infobox_args['data2'] = '[[New York (state)|New York]]'
			else
				infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
			end
		else
			infobox_args['label2'] = 'States'
			infobox_args['data2'] = args.states
		end
		
		if args.county then
			infobox_args['label3'] = 'County'
			infobox_args['data3'] = county(args)
		else
			infobox_args['label3'] = 'Counties'
			infobox_args['data3'] = args.counties
		end
		
		if args.parish then
			infobox_args['label4'] = 'Parish'
			infobox_args['data4'] = county(args)
		else
			infobox_args['label4'] = 'Parishes'
			infobox_args['data4'] = args.parishes
		end
		
		if args.borough then
			infobox_args['label5'] = 'Borough'
			infobox_args['data5'] = county(args)
		else
			infobox_args['label5'] = 'Boroughs'
			infobox_args['data5'] = args.boroughs
		end
		
		if args.municipality then
			infobox_args['label6'] = 'Municipality'
			infobox_args['data6'] = county(args)
		else
			infobox_args['label6'] = 'Municipalities'
			infobox_args['data6'] = args.municipalities
		end
		
		if args.indep_city then
			infobox_args['label6'] = 'Independent city'
			infobox_args['data6'] = args.indep_city
		else
			infobox_args['label7'] = 'Independent cities'
			infobox_args['data7'] = args.indep_cities
		end
		
	else
		
	------------- ALL OTHER COUNTRIES --------------
	if country(args) ~= nil then
		local countryname = frame:expandTemplate ({title='Country name', args = { country(args)}})
		infobox_args['label1'] = 'Country'
		infobox_args['data1'] = frame:expandTemplate ({title='Flagg', args = { "xx", countryname, nodata = 1 }})
	else
		infobox_args['label1'] = 'Countries'
		infobox_args['data1'] = args.countries
	end
	
	infobox_args['label2'] = 'Island'
	infobox_args['data2'] = args.island
	infobox_args['label3'] = 'Communities'
	infobox_args['data3'] = args.communities
	infobox_args['label4'] = 'Regions'
	infobox_args['data4'] = args.regions
	infobox_args['label5'] = 'Provinces'
	infobox_args['data5'] = args.provinces
	infobox_args['label6'] = 'States'
	infobox_args['data6'] = args.states
	infobox_args['label7'] = 'Governorates'
	infobox_args['data7'] = args.governorates
	infobox_args['label8'] = 'Counties'
	infobox_args['data8'] = args.counties
	infobox_args['label9'] = 'Departments'
	infobox_args['data9'] = args.departments
	infobox_args['label10'] = 'Cantons'
	infobox_args['data10'] = args.cantons
	infobox_args['label11'] = 'Prefectures'
	infobox_args['data11'] = args.prefectures
	infobox_args['label12'] = 'Divisions'
	infobox_args['data12'] = args.divisions
	infobox_args['label13'] = 'Oblasts'
	infobox_args['data13'] = args.oblasts
	infobox_args['label14'] = 'Districts'
	infobox_args['data14'] = args.districts
	infobox_args['label15'] = 'Parishes'
	infobox_args['data15'] = args.parishes
	infobox_args['label16'] = 'Communes'
	infobox_args['data16'] = args.communes
	infobox_args['label17'] = 'Territories'
	infobox_args['data17'] = args.territories
	infobox_args['label18'] = args.label1
	infobox_args['data18'] = args.location1
	infobox_args['label19'] = args.label2
	infobox_args['data19'] = args.location2
	infobox_args['label20'] = args.label3
	infobox_args['data20'] = args.location3
	infobox_args['label21'] = args.label4
	infobox_args['data21'] = args.location4
	infobox_args['label22'] = args.label5
	infobox_args['data22'] = args.location5
	infobox_args['label23'] = 'Subregions'
	infobox_args['data23'] = args.subregions
	infobox_args['label24'] = 'Subcounties'
	infobox_args['data24'] = args.subcounties
	infobox_args['label25'] = 'Subprefectures'
	infobox_args['data25'] = args.subprefectures
	end
	
	if country(args) ~= "USA" then
		infobox_args['label26'] = 'Municipalities'
		infobox_args['data26'] = args.municipalities
		infobox_args['label27'] = 'Major cities'
		infobox_args['data27'] = args.cities
		infobox_args['label28'] = 'Towns'
		infobox_args['data28'] = args.towns
		infobox_args['label29'] = 'Villages'
		infobox_args['data29'] = args.villages
		
		if country(args) == "GBR" or country(args) == "ENG" or country(args) == "NIR" or country(args) == "SCT" or country(args) == "WLS" or
			country(args) == "GGY" or country(args) == "IMN" or country(args) == "JEY" or country(args) == "AIA" or country(args) == "BMU" or
			country(args) == "IOT" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "FLK" or country(args) == "GIB" or
			country(args) == "MSR" or country(args) == "PCN" or country(args) == "SHN" or country(args) == "SGS" or country(args) == "TCA" then
				
			infobox_args['label30'] = '[[Primary status|Primary<br>destinations]]'
			infobox_args['data30'] = args.destinations
		else
			infobox_args['label30'] = 'Primary<br>destinations'
			infobox_args['data30'] = args.destinations
		end
	
	end

	return frame:expandTemplate ({title='Infobox', args = infobox_args})
	
end

local function params(args)

	if country(args) or args.areas or args.borough or args.boroughs or args.cantons or args.cities or args.communes or args.communities or args.counties or
	args.countries or args.county or args.departments or args.destinations or args.districts or args.divisions or args.federal_cities or args.governorates or
	args.indep_city or args.indep_cities or args.island or args.krais or args.label1 or args.label2 or args.label3 or args.label4 or args.label5 or args.lga or 
	args.location1 or args.location2 or args.location3 or args.location4 or args.location5 or args.locations or args.municipalities or args.municipality or
	args.oblasts or args.okrugs or args.parish or args.parishes or args.prefectures or args.provinces or args.regions or args.republics or args.rural_municipalities or
	args.sheadings or args.states or args.subcounties or args.subprefectures or args.subregions or args.territories or args.towns or args.villages then
		return true
	else
		return false
	end
end


function p.location(frame)
	local args = getArgs(frame)
	
	if params(args) == false then
		return nil
	else
		return location(args)
	end
end

return p