模組:Infobox road/locations
模組解[開]
你可能想去為呢個Scribunto module開一個解版。 編者可以響呢個模組嘅沙盤 (開 | 鏡)同埋試例 (開)版度試驗佢。 請加個類到個/doc嘅細版度。 呢個模組嘅細版。 |
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 = {EUR = "no", AUS = "no", AUT = "no", BIH = "no", CAN = "no", CYP = "no", CZE = "no", ESP = "no", GRC = "no", HRV = "no",
HUN = "no", ITA = "no", POL = "no", SGP = "no", SRB = "no", SVK = "no", SVN = "no", TUR = "no", UKR = "no", default = "yes"}
if args.communities then
return "Autonomous<br>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
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<br>and rural<br>municipalities"
else
label = "Rural<br>municipalities"
end
local data = {AB = "no", MB = "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 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
local function lga(args, country)
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)
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<br>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 = "地點"}
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