Difference between revisions of "Module:Infobox road/locations/sandbox"

From blackwiki
Jump to navigation Jump to search
test>Chinissai
(Use Module:Infobox road/display for display filters.)
test>Chinissai
m (Added error indicator.)
Line 47: Line 47:
 
return labels[type] or "Primary<br>destinations:"
 
return labels[type] or "Primary<br>destinations:"
 
end
 
end
 +
 +
local hasError = false
  
 
local function filter(args, field, result)
 
local function filter(args, field, result)
Line 52: Line 54:
 
local display = parserModule.parser(args, field, args.country,
 
local display = parserModule.parser(args, field, args.country,
 
"Module:Infobox road/display")
 
"Module:Infobox road/display")
return display == "yes" and result or nil
+
if display == "yes" then return result end
 +
if result then hasError = true end
 +
return nil
 
end
 
end
  
Line 86: Line 90:
 
addIfExists(rows, lgaLabel, filter(args, "lga", args.lga), args.state)
 
addIfExists(rows, lgaLabel, filter(args, "lga", args.lga), args.state)
 
addIfExists(rows, locationsLabel, filter(args, "locations", args.locations), args.type)
 
addIfExists(rows, locationsLabel, filter(args, "locations", args.locations), args.type)
return rows
+
return rows, hasError
 
end
 
end
  

Revision as of 15:29, 5 May 2016

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

local p = {}

-- Change to live module upon deployment.
local parserModuleName = "Module:Road data/parser/sandbox"

local insert = table.insert

local function ruralMunisLabel(province)
	if province == "AB" then
		return "Specialized<br>and rural<br>municipalities:"
	else
		return "Rural<br>municipalities:"
	end
end

local function destinationsLabel(country)
	if country == "GBR" then
		return "[[Primary status|Primary<br>destinations]]:"
	else
		return "Primary<br>destinations:"
	end
end

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 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 hasError = false

local function filter(args, field, result)
	local parserModule = require(parserModuleName)
	local display = parserModule.parser(args, field, args.country,
		"Module:Infobox road/display")
	if display == "yes" then return result end
	if result then hasError = true 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(args, "countries", args.countries))
	addIfExists(rows, "Regions:", filter(args, "regions", args.regions))
	addIfExists(rows, "States:", filter(args, "states", args.states))
	addIfExists(rows, "Provinces:", filter(args, "provinces", 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:", filter(args, "districts", args.districts))
	addIfExists(rows, ruralMunisLabel,
		filter(args, "ruralmuni", args.rural_municipalities), args.province)
	addIfExists(rows, "Divisions:", filter(args, "divisions", args.divisions))
	addIfExists(rows, "Major cities:", filter(args, "cities", args.cities))
	addIfExists(rows, "Towns:", filter(args, "cities", args.towns))
	addIfExists(rows, "Villages:", filter(args, "cities", args.villages))
	addIfExists(rows, destinationsLabel, filter(args, "destinations", args.destinations), country)
	addIfExists(rows, lgaLabel, filter(args, "lga", args.lga), args.state)
	addIfExists(rows, locationsLabel, filter(args, "locations", args.locations), args.type)
	return rows, hasError
end

function p.locations(frame)
	-- Import module function to work with passed arguments
	local getArgs = require('Module:Arguments').getArgs
	local args = getArgs(frame)
	local state = args.state or args.province
	if not args.country then
		local countryMask = mw.loadData("Module:Road data/countrymask")
		args.country = countryMask[state]
	end
	return p._locations(args)
end

return p