Difference between revisions of "Module:Infobox road/locations/sandbox"
Jump to navigation
Jump to search
test>Chinissai (←Created page with 'local p = {} local insert = table.insert local function countries(args, country) local data = {EUR = "no", ASIA = "no", default = "yes"} local yesOrNo = data...') |
test>Chinissai m (More refactoring.) |
||
| Line 3: | Line 3: | ||
local insert = table.insert | local insert = table.insert | ||
| − | local function | + | local function flip(arr) |
| − | local | + | local mask = {} |
| − | + | for _,entry in ipairs(arr) do | |
| − | + | mask[entry] = true | |
| − | |||
| − | |||
| − | |||
end | end | ||
| + | return mask | ||
end | end | ||
| − | local | + | local showCountries = {"ASIA", "EUR"} |
| − | + | local countriesMask = flip(showCountries) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | + | local showRegions = { |
| − | + | "AUS", "AUT", "BIH", "CAN", "CYP", "CZE", "ESP", "EUR", "GRC", "HRV", | |
| − | + | "HUN", "ITA", "POL", "SGP", "SRC", "SVK", "SVN", "TUR", "UKR" | |
| − | + | } | |
| − | + | local regionsMask = flip(showRegions) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | + | local showStates = {"AUS", "AUT", "DEU", "IND", "MEX", "USA"} |
| − | + | local statesMask = flip(showStates) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | + | local showProvinces = {"ESP", "IRN", "NLD", "THA", "TUR"} |
| − | + | local provincesMask = flip(showProvinces) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local function | + | local function ruralMunisLabel(province) |
| − | |||
| − | |||
if province == "AB" then | if province == "AB" then | ||
| − | + | return "Specialized<br>and rural<br>municipalities:" | |
else | else | ||
| − | + | return "Rural<br>municipalities:" | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
end | end | ||
| − | local | + | local showRuralMunis = {"AB", "MB", "SK"} |
| − | + | local ruralMunisMask = flip(showRuralMunis) | |
| − | + | ||
| − | + | local showDivisions = {"ON"} | |
| − | + | local divisionsMask = flip(showDivisions) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | + | local noCities = {"USA"} |
| − | + | local noCitiesMask = flip(noCities) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local function | + | local function destinationsLabel(country) |
| − | |||
if country == "GBR" then | if country == "GBR" then | ||
| − | + | return "[[Primary status|Primary<br>destinations]]:" | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
else | else | ||
| − | return | + | return "Primary<br>destinations:" |
end | end | ||
end | end | ||
| − | local function | + | local showDestinations = {"AUS", "GBR", "IND", "IRL", "MYS", "NPL", "NZL"} |
| + | local destinationsMask = flip(showDestinations) | ||
| + | |||
| + | local function lgaLabel(state) | ||
local labels = { | local labels = { | ||
SA = "[[Local government areas of South Australia|LGA(s)]]", | SA = "[[Local government areas of South Australia|LGA(s)]]", | ||
| Line 130: | Line 65: | ||
ACT = "District(s)" | ACT = "District(s)" | ||
} | } | ||
| − | + | return labels[state] or "[[Local government in Australia|LGA(s)]]" | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | local function | + | local showLga = {"AUS"} |
| + | local lgaMask = flip(showLga) | ||
| + | |||
| + | local function locationsLabel(type) | ||
local labels = { | local labels = { | ||
highway = "Major settlements:", | highway = "Major settlements:", | ||
| Line 150: | Line 80: | ||
street = "Suburb:" | street = "Suburb:" | ||
} | } | ||
| − | local | + | return labels[type] or "Primary<br>destinations:" |
| − | + | end | |
| − | if | + | |
| − | + | local showLocations = {"AUS"} | |
| − | + | local locationsMask = flip(showLocations) | |
| − | + | ||
| − | + | local function filter(mask, key, result, pattern) | |
| − | + | if not pattern then pattern = true end | |
| − | + | if mask[key] == pattern then return result end | |
| + | return nil | ||
end | end | ||
| − | local function | + | local function addIfExists(rows, label, data, labelArgs) |
| − | if | + | if data then |
| − | + | if type(label) == "function" then | |
| − | + | label = label(labelArgs) | |
| − | + | end | |
| + | insert(rows, {label = label, data = data}) | ||
end | end | ||
end | end | ||
| − | function p. | + | function p._locations(args) |
| − | + | local rows = {} | |
| − | local | ||
| − | |||
| − | |||
| − | local country = | + | local country = args.country |
| − | + | addIfExists(rows, "Countries:", filter(countriesMask, country, args.countries)) | |
| − | + | addIfExists(rows, "Regions:", filter(regionsMask, country, args.regions)) | |
| − | + | addIfExists(rows, "States:", filter(statesMask, country, args.states)) | |
| − | + | addIfExists(rows, "Provinces:", filter(provincesMask, country, args.provinces)) | |
| − | + | addIfExists(rows, "Counties:", args.counties) | |
| − | + | addIfExists(rows, "Parishes:", args.parishes) | |
| − | + | addIfExists(rows, "Boroughs:", args.boroughs) | |
| − | + | addIfExists(rows, "Municipalities:", args.municipalities) | |
| − | + | addIfExists(rows, "Districts:", args.districts) | |
| − | + | local province = args.province | |
| − | + | if province then | |
| − | + | addIfExists(rows, ruralMunisLabel, | |
| − | + | filter(ruralMunisMask, province, args.rural_municipalities), province) | |
| − | + | addIfExists(rows, "Divisions:", filter(divisionsMask, province, args.divisions)) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| + | addIfExists(rows, "Major cities:", filter(noCitiesMask, country, args.cities, false)) | ||
| + | addIfExists(rows, "Towns:", filter(noCitiesMask, country, args.towns, false)) | ||
| + | addIfExists(rows, "Villages:", filter(noCitiesMask, country, args.villages, false)) | ||
| + | addIfExists(rows, destinationsLabel, filter(destinationsMask, country, args.destinations), country) | ||
| + | addIfExists(rows, lgaLabel, filter(lgaMask, country, args.lga), args.state) | ||
| + | addIfExists(rows, locationsLabel, filter(locationsMask, country, args.locations), args.type) | ||
| + | return rows | ||
| + | end | ||
| − | return | + | function p.locations(frame) |
| + | -- Import module function to work with passed arguments | ||
| + | local getArgs = require('Module:Arguments').getArgs | ||
| + | local args = getArgs(frame) | ||
| + | return p._locations(args) | ||
end | end | ||
return p | return p | ||
Revision as of 15:14, 1 May 2016
Documentation for this module may be created at Module:Infobox road/locations/sandbox/doc
local p = {}
local insert = table.insert
local function flip(arr)
local mask = {}
for _,entry in ipairs(arr) do
mask[entry] = true
end
return mask
end
local showCountries = {"ASIA", "EUR"}
local countriesMask = flip(showCountries)
local showRegions = {
"AUS", "AUT", "BIH", "CAN", "CYP", "CZE", "ESP", "EUR", "GRC", "HRV",
"HUN", "ITA", "POL", "SGP", "SRC", "SVK", "SVN", "TUR", "UKR"
}
local regionsMask = flip(showRegions)
local showStates = {"AUS", "AUT", "DEU", "IND", "MEX", "USA"}
local statesMask = flip(showStates)
local showProvinces = {"ESP", "IRN", "NLD", "THA", "TUR"}
local provincesMask = flip(showProvinces)
local function ruralMunisLabel(province)
if province == "AB" then
return "Specialized<br>and rural<br>municipalities:"
else
return "Rural<br>municipalities:"
end
end
local showRuralMunis = {"AB", "MB", "SK"}
local ruralMunisMask = flip(showRuralMunis)
local showDivisions = {"ON"}
local divisionsMask = flip(showDivisions)
local noCities = {"USA"}
local noCitiesMask = flip(noCities)
local function destinationsLabel(country)
if country == "GBR" then
return "[[Primary status|Primary<br>destinations]]:"
else
return "Primary<br>destinations:"
end
end
local showDestinations = {"AUS", "GBR", "IND", "IRL", "MYS", "NPL", "NZL"}
local destinationsMask = flip(showDestinations)
local function lgaLabel(state)
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)"
}
return labels[state] or "[[Local government in Australia|LGA(s)]]"
end
local showLga = {"AUS"}
local lgaMask = flip(showLga)
local function locationsLabel(type)
local labels = {
highway = "Major settlements:",
["rural road"] = "Major settlements:",
freeway = "Major suburbs:",
["city highway"] = "Major suburbs:",
road = "Major suburbs:",
street = "Suburb:"
}
return labels[type] or "Primary<br>destinations:"
end
local showLocations = {"AUS"}
local locationsMask = flip(showLocations)
local function filter(mask, key, result, pattern)
if not pattern then pattern = true end
if mask[key] == pattern then return result end
return nil
end
local function addIfExists(rows, label, data, labelArgs)
if data then
if type(label) == "function" then
label = label(labelArgs)
end
insert(rows, {label = label, data = data})
end
end
function p._locations(args)
local rows = {}
local country = args.country
addIfExists(rows, "Countries:", filter(countriesMask, country, args.countries))
addIfExists(rows, "Regions:", filter(regionsMask, country, args.regions))
addIfExists(rows, "States:", filter(statesMask, country, args.states))
addIfExists(rows, "Provinces:", filter(provincesMask, country, args.provinces))
addIfExists(rows, "Counties:", args.counties)
addIfExists(rows, "Parishes:", args.parishes)
addIfExists(rows, "Boroughs:", args.boroughs)
addIfExists(rows, "Municipalities:", args.municipalities)
addIfExists(rows, "Districts:", args.districts)
local province = args.province
if province then
addIfExists(rows, ruralMunisLabel,
filter(ruralMunisMask, province, args.rural_municipalities), province)
addIfExists(rows, "Divisions:", filter(divisionsMask, province, args.divisions))
end
addIfExists(rows, "Major cities:", filter(noCitiesMask, country, args.cities, false))
addIfExists(rows, "Towns:", filter(noCitiesMask, country, args.towns, false))
addIfExists(rows, "Villages:", filter(noCitiesMask, country, args.villages, false))
addIfExists(rows, destinationsLabel, filter(destinationsMask, country, args.destinations), country)
addIfExists(rows, lgaLabel, filter(lgaMask, country, args.lga), args.state)
addIfExists(rows, locationsLabel, filter(locationsMask, country, args.locations), args.type)
return rows
end
function p.locations(frame)
-- Import module function to work with passed arguments
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._locations(args)
end
return p