Module:Infobox road/locations

local p = {}

local function countries(args, country) local data = {AFRICA = "no", ARAB = "no", ASIA = "no", EUR = "no", default = "yes"} local yesOrNo = data[country] or data.default if yesOrNo == "no" then return args.countries else return nil end end

local function regions(args, country) local data = {USA = "yes", default = "no"} if args.communities then return "Autonomous communities", args.communities end local yesOrNo = data[country] or data.default if yesOrNo == "no" then return "Regions", args.regions else return "Regions", nil end end

local function states(args, country) local data = {AUS = "no", AUT = "no", BRA = "no", DEU = "no", IND = "no", MEX = "no", MYS = "no", USA = "no", default = "yes"} local yesOrNo = data[country] or data.default if yesOrNo == "no" then return args.states else return nil end end

local function provinces(args, country) local data = {CAN = "no", CRI = "no", ESP = "no", IRN = "no", NLD = "no", PHL = "no", SAU = "no", THA = "no", TUR = "no", default = "yes"} local yesOrNo = data[country] or data.default if yesOrNo == "no" then return args.provinces else return nil end end

local function counties(args, country) local counties = args.counties local districts = args.districts local municipalities = args.municipalities local parishes = args.parishes local boroughs = args.boroughs if counties then return "Counties", counties elseif districts then return "Districts", districts elseif municipalities then return "Municipalities", municipalities elseif parishes then return "Parishes", parishes elseif boroughs then return "Boroughs", boroughs else return '', nil end end

local function ruralMunis(args, country) local label local province = country or '' if province == "AB" then label = "Specialized and rural municipalities" elseif province == "ON" then label = "Municipalities" else label = "Rural municipalities" end local data = {AB = "no", BC = "no", MB = "no", NB = "no", NL = "no", ON = "no", PE = "no", QC = "no", SK = "no", default = "yes"} local yesOrNo = data[province] or data.default if yesOrNo == "no" then return label, args.rural_municipalities else return '', nil end end

local function divisions(args, country) local province = country or '' local data = {ON = "no", default = "yes"} local yesOrNo = data[province] or data.default if yesOrNo == "no" then return args.divisions else return nil end end

local function cities(args, country, parameter) local data = {USA = "yes", default = "no"} local yesOrNo = data[country] or data.default if yesOrNo == "no" then return args[parameter] else return nil end end

local function destinations(args, country) local label if country == "GBR" then label = "Primary destinations" else label = "Primary 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

local function lga(args, country) local labels = {SA = "LGA(s)", VIC = "LGA(s)", NSW = "LGA(s)", QLD = "LGA(s)", NT = "LGA(s)", WA = "LGA(s)", TAS = "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 "LGA(s)" return label, args.lga else return '', nil end end

local function locations(args, country) local labels = {highway = "Major settlements", ["rural road"] = "Major settlements", freeway = "Major suburbs", ["city highway"] = "Major suburbs", road = "Major suburbs", street = "Suburb"} local data = {AUS = "no", default = "yes"} local yesOrNo = data[country] or data.default if yesOrNo == "no" then local type = args.type or '' local label = labels[type] or "Primary destinations" return label, args.locations else return '', nil 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) local state = emptyParam(args.state) local province = emptyParam(args.province) if not(country) then local stateParam = args.state or args.province if not(stateParam) then country = '' else 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

return p