Mô đun:Infobox road/color

local p = {}

Country = {}

function Country:new(obj)
obj = obj or {}
setmetatable(obj, self)
self.__index = self
return obj
end

function Country:color(args)
local type = args.type
return self[type] or self.default
end

function Country:addTypesAsColor(types, color)
for i,type in pairs(types) do
self[type] = color
end
end

local colors = {}
do
function colors:color(args)
local headerType = args.headerType
local countryArg = args.country
local headerTypeColor = self[headerType]
if headerTypeColor then return headerTypeColor end
local success, country = pcall(self.country, self, countryArg)
if not(success) then
return 'background:cedff2;'
else
return country:color(args)
end
end
function colors:country(name)
local color = self[name]
if color then return color end
if name 'CAN' or name 'GBR' then
local module = require(string.format("Mô đun:Infobox road/color/%s", name))
return module.colors
else
error("Quốc gia không bao gồm", 0)
end
end

do -- Single-color countries
colors.BEL = Country:new{default = "background:0071B3; color:fff;"}
colors.BGD = Country:new{default = "background:2C6700; color:white;"}
colors.CHL = Country:new{default = "background:006A4D; color:fff;"}
colors.CHN = Country:new{default = "background:006A4D; color:white;"}
colors.ECU = Country:new{default = "background:006A4D; color:fff;"}
colors.EST = Country:new{default = "background:0079C1; color:white;"}
colors.EUR = Country:new{default = "background:08842C; color:fff;"}
colors.JOR = Country:new{default = "background:0079C1; color:white;"}
colors.HKG = Country:new{default = "background:006A4D; color:fff;"}
colors.ISL = Country:new{default = "background:FFD200; border:1px solid 000;"}
colors.KOR = Country:new{default = "background:006A4D; color:white;"}
colors.MEX = Country:new{default = "background:006A4D; color:white;"}
colors.NZL = Country:new{default = "background:006A4D; color:fff;"}
colors.UKR = Country:new{default = "background:003F87; color:white;"}
colors.URY = Country:new{default = "background:006A4D; color:white;"}
colors.VNM = Country:new{default = "background:003399; color:white;"}
end -- Single-color countries

do -- Multi-color countries
do -- Albania
local ALB = Country:new{default = "background:00408B; color:fff;"}
ALB:addTypesAsColor({"A"}, "background:08842C; color:fff;")
colors.ALB = ALB
end -- Albania
do -- Asian Highway Network
local ASIA = Country:new{default = "background:fff; border:1px solid 000;"}
ASIA:addTypesAsColor({"AH"}, "background:1e2c76; color:white;")
colors.ASIA = ASIA
end -- Asian Highway Network
do -- Australia
local AUS = Country:new{default = "background:3A7119; color:FFE133;"}
AUS:addTypesAsColor({"freeway"}, "background:D2E2F9;")
AUS:addTypesAsColor({"highway", "city highway"}, "background:E9F9D2;")
AUS:addTypesAsColor({"road", "rural road"}, "background:FFFFE0;")
AUS:addTypesAsColor({"street"}, "background:F9E2D2;")
AUS:addTypesAsColor({"track"}, "background:fee8ab;")
colors.AUS = AUS
end -- Australia
do -- Austria
local AUT = Country:new{default = "background:fff; border:1px solid 000;"}
AUT:addTypesAsColor({"A", "S", "B"}, "background:276FB7; color:fff;")
colors.AUT = AUT
end -- Austria
do -- Bosnia and Herzegovina
local BIH = Country:new{default = "background:0B8F4B; color:white;"}
BIH:addTypesAsColor({"M", "B"}, "background:0066CC; color:white;")
BIH:addTypesAsColor({"R"}, "background:FFCC33; border:1px solid 000;")
colors.BIH = BIH
end -- Bulgaria
do -- Bulgaria
local BGR = Country:new{default = "background:003F87; color:white;"}
BGR:addTypesAsColor({"A"}, "background:006A4D; color:white;")
colors.BGR = BGR
end -- Bulgaria
do -- Croatia
local HRV = Country:new{default = "background:cedff2;"}
HRV:addTypesAsColor({"E", "A"}, "background:08842C; color:fff;")
HRV:addTypesAsColor({"D"}, "background:0066CC; color:fff;")
HRV:addTypesAsColor({"Z"}, "background:FFCC33; color:black;")
colors.HRV = HRV
end -- Croatia
do -- Cyprus
local CYP = Country:new{default = "background:003F87; color:FFC000;"}
CYP:addTypesAsColor({"A"}, "background:005024; color:FFC000;")
colors.CYP = CYP
end -- Cyprus
do -- Czech Republic
local CZE = Country:new{default = "background:003F87; color:white;"}
CZE:addTypesAsColor({"D", "R"}, "background:006A4D; color:white;")
colors.CZE = CZE
end -- Czech Republic
do -- Denmark
local DNK = Country:new{default = "background:039; color:fff;"}
DNK:addTypesAsColor({"E", "M"}, "background:006A4D; color:fff;")
DNK:addTypesAsColor({"S"}, "background:fff; border:1px solid af1e2d; color:af1e2d;")
colors.DNK = DNK
end -- Denmark
do -- France
local FRA = Country:new{default = "background:fff; border:1px solid 000;"}
FRA:addTypesAsColor({"A"}, "background:0079C1; color:fff;")
FRA:addTypesAsColor({"N"}, "background:006A4D; color:fff;")
FRA:addTypesAsColor({"E"}, "background:28961e; color:fff;")
colors.FRA = FRA
colors.MTQ = FRA
colors.DZA = FRA
end -- France
do -- Georgia
local GEO = Country:new{default = "background:cedff2;"}
GEO:addTypesAsColor({"A", "International"}, "background:039; color:fff;")
colors.GEO = GEO
end -- Georgia
do -- Germany
local DEU = Country:new{default = "background:cedff2;"}
DEU:addTypesAsColor({"A", "Autobahn"}, "background:003ABD; color:fff;")
DEU:addTypesAsColor({"B", "Bundesstraße", "Bundesstrasse"}, "background:FC3; color:black")
DEU:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.DEU = DEU
end -- Germany
do -- Ghana
local GHA = Country:new{default = "background:006A4D; color:FFF;"}
GHA:addTypesAsColor({"N"}, "background:0079C1; color:FFF;")
colors.GHA = GHA
end -- Ghana
do -- Greece
local GRC = Country:new{default = "background:0079C1; color:FFF;"}
GRC:addTypesAsColor({"A"}, "background:006A4D; color:FFF;")
colors.GRC = GRC
end -- Greece
do -- Hungary
local HUN = Country:new{default = "background:006A4D; color:fff;"}
HUN:addTypesAsColor({"M"}, "background:0079C1; color:fff;")
colors.HUN = HUN
end -- Hungary
do -- Iran
local IRN = Country:new{default = "background:cedff2;"}
IRN:addTypesAsColor({"freeway"}, "background:06c; color:fff;")
IRN:addTypesAsColor({"expressway"}, "background:22B14C; color:fff;")
IRN:addTypesAsColor({"road"}, "background:22B14C; color:fff;")
IRN:addTypesAsColor({"boulevard"}, "background:fff; color:000;")
IRN:addTypesAsColor({"street"}, "background:fff; color:000;")
colors.IRN = IRN
end -- Iran
do -- Republic of Ireland
local IRL = Country:new{default = "background:cedff2;"}
IRL:addTypesAsColor({"M"}, "background:0079C1; color:fff;")
IRL:addTypesAsColor({"N"}, "background:00703C; color:FFD200;")
IRL:addTypesAsColor({"R"}, "background:fff; border:1px solid 000;")
colors.IRL = IRL
end -- Republic of Ireland
do -- Italy
local ITA = Country:new{default = "background:cedff2;"}
ITA:addTypesAsColor({"A"}, "background:08842C; color:fff;")
ITA:addTypesAsColor({"RA"}, "background:08842C; color:fff;")
ITA:addTypesAsColor({"SS"}, "background:003F87; color:fff;")
ITA:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.ITA = ITA
end -- Italy
do -- Kosovo
local KOS = Country:new{default = "background:0066cc; color:fff;"}
KOS:addTypesAsColor({"R"}, "background:009933; color:fff;")
KOS:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.KOS = KOS
end -- Netherlands
do -- Netherlands
local NLD = Country:new{default = "background:0079C1; color:fff;"}
NLD:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.NLD = NLD
end -- Netherlands
do -- Malaysia
local MYS = Country:new{default = "background:0079C1; color:fff;"}
MYS:addTypesAsColor({"E"}, "background:006A4D; color:fff;")
colors.MYS = MYS
end -- Malaysia
do -- Morocco
local MAR = Country:new{default = "background:fff; border:1px solid 000;"}
MAR:addTypesAsColor({"A"}, "background:0079C1; color:fff;")
MAR:addTypesAsColor({"Motorway"}, "background:0079C1; color:fff;")
colors.MAR = MAR
end -- Morocco
do -- Pakistan
local PAK = Country:new{default = "background:0066cc; color:fff;"}
PAK:addTypesAsColor({"M"}, "background:22B14C; color:fff;")
PAK:addTypesAsColor({"E"}, "background:F5C31D; color:000;")
colors.PAK = PAK
end -- Pakistan
do -- Philippines
local PHL = Country:new{default = "background:093; color:white;"}
PHL:addTypesAsColor({"AH", "Asian Highway"}, "background:704214; color:white;")
colors.PHL = PHL
end -- Philippines
do -- Poland
local POL = Country:new{default = "background:006A4D; color:fff;"}
POL:addTypesAsColor({"A", "S"}, "background:0079C1; color:fff;")
colors.POL = POL
end --Poland
do -- Slovakia
local SVK = Country:new{default = "background:0079C1; color:fff;"}
SVK:addTypesAsColor({"D", "R"}, "background:006A4D; color:fff;")
colors.SVK = SVK
end -- Slovakia
do -- South Africa
local ZAF = Country:new{default = "background:006A4D; color:FFF;"}
ZAF:addTypesAsColor({"M", "N"}, "background:0079C1; color:FFF;")
colors.ZAF = ZAF
end -- South Africa
do -- Spain
local ESP = Country:new{default = "background:E8E8E8;"}
ESP:addTypesAsColor({"A", "AP", "AS"}, "background:039; color:fff;")
ESP:addTypesAsColor({"N"}, "background:e41408; color:fff;")
ESP:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.ESP = ESP
end -- Spain
do -- Sri Lanka
local LKA = Country:new{default = "background:006A4D; color:fff;"}
LKA:addTypesAsColor({"E"}, "background:0079C1; color:fff;")
LKA:addTypesAsColor({"A"}, "background:006A4D; color:fff;")
colors.LKA = LKA
end -- Sri Lanka
do -- Switzerland
local CHE = Country:new{default = "background:cedff2;"}
CHE:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.CHE = CHE
end -- Switzerland
do -- Turkey
local TUR = Country:new{default = "background:006A4D; color:fff;"}
TUR:addTypesAsColor({"state", "D"}, "background:003F87; color:fff;")
TUR:addTypesAsColor({"E"}, "background:08842C; color:fff;")
colors.TUR = TUR
end -- Turkey
do -- United States
local USA = Country:new{default = "background:006A4D; color:white;"}
USA:addTypesAsColor({"FFH", "FR", "NER", "Rec", "RE", "Park"}, "background:704214; color:white;")
colors.USA = USA
end -- United States
end -- Multi-color countries

do -- Built-in header types
colors["under construction"] = "background:fc6;"
colors["const"] = "background:fc6;"
colors["uc"] = "background:fc6;"
colors["historic"] = "background:704214; color:white;"
colors["historical"] = "background:704214; color:white;"
colors["hist"] = "background:704214; color:white;"
colors["scenic"] = "background:704214; color:white;"
colors["decommissioned"] = "background:AAA;"
colors["former"] = "background:AAA;"
colors["minor"] = "background:fff; border:1px solid 000;" --for UK A roads only
end -- Built-in header types
end

function p._color(args)
return colors:color(args)
end

function p.color(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 function emptyParam(param)
local empty = {[] = true, ['¬'] = true}
if not(param) or empty[param] then
return nil
else
return param
end
end

local state = config.state or args.state
state = emptyParam(state)
local province = config.province or args.province
province = emptyParam(province)
local type = config.type or args.type
local subtype = config.subtype or args.subtype or nil

local headerType = args.header_type or config.header_type
headerType = emptyParam(headerType)
if headerType then
headerType = string.lower(headerType)
end

local countryArg = config.country or args.country
countryArg = emptyParam(countryArg)
local country = countryArg
if not(country) then
if colors[headerType] then
country =
else
local stateParam = state or province
if not(stateParam) then
country =
else
local countryMask = require "Mô đun:Infobox road/meta/mask/country"
country = countryMask._country(stateParam, countryArg)
end
end
end

return p._color{country=country, state=state, province=province, type=type, subtype=subtype, headerType=headerType}
end

return p