Module: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' then

local module = require(string.format("Module:Infobox road/color/%s", name))

return module.colors

else

error("Country not included", 0)

end

end

do -- Single-color countries

colors.ARG = Country:new{default = "background:#006A4D; color:#fff;"}

colors.BEL = Country:new{default = "background:#005b8c; color:#fff;"}

colors.BGD = Country:new{default = "background:#2C6700; color:#fff;"}

colors.BOL = Country:new{default = "background:#006A4D; color:#fff;"}

colors.CHL = Country:new{default = "background:#006A4D; color:#fff;"}

colors.CHN = Country:new{default = "background:#006A4D; color:#fff;"}

colors.CRI = Country:new{default = "background:#006A4D; color:#fff;"}

colors.ECU = Country:new{default = "background:#006A4D; color:#fff;"}

colors.EST = Country:new{default = "background:#0079C1; color:#fff;"}

colors.EUR = Country:new{default = "background:#08842C; color:#fff;"}

colors.IND = Country:new{default = "background:#128807; color:#fff;"}

colors.JOR = Country:new{default = "background:#0079C1; color:#fff;"}

colors.HKG = Country:new{default = "background:#006A4D; color:#fff;"}

colors.ISL = Country:new{default = "background:#FFD200; border:2px solid #000;"}

colors.MEX = Country:new{default = "background:#006A4D; color:#fff;"}

colors.NZL = Country:new{default = "background:#006A4D; color:#fff;"}

colors.SWE = Country:new{default = "background:#003F87; color:#fff;"}

colors.URY = Country:new{default = "background:#006A4D; color:#fff;"}

colors.VNM = Country:new{default = "background:#003399; color:#fff;"}

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 -- UAE

local ARE = Country:new{default = "background:#008033; color:#fff;"}

ARE:addTypesAsColor({"E"}, "background:#0044aa; color:#fff;")

colors.ARE = ARE

end -- UAE

do -- Asian Highway Network

local ASIA = Country:new{default = "background:#fff; border:2px solid #000;"}

ASIA:addTypesAsColor({"AH"}, "background:#1e2c76; color:#fff;")

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:2px 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:#fff;"}

BIH:addTypesAsColor({"M", "B"}, "background:#0066CC; color:#fff;")

BIH:addTypesAsColor({"R"}, "background:#FFCC33; border:2px solid #000;")

colors.BIH = BIH

end -- Bulgaria

do -- Bulgaria

local BGR = Country:new{default = "background:#003F87; color:#fff;"}

BGR:addTypesAsColor({"A"}, "background:#006A4D; color:#fff;")

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;")

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:#fff;"}

CZE:addTypesAsColor({"D", "R"}, "background:#006A4D; color:#fff;")

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:2px solid #af1e2d; color:#af1e2d;")

colors.DNK = DNK

end -- Denmark

do -- Finland

local FIN = Country:new{default = "background:#005eb8; color:#fff;"}

FIN:addTypesAsColor({"E"}, "background:#009775; color:#fff;")

colors.FIN = FIN

end -- Finland

do -- France

local FRA = Country:new{default = "background:#fff; border:2px 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;")

DEU:addTypesAsColor({"E"}, "background:#08842C; color:#fff;")

DEU:addTypesAsColor({"Scenic"}, "background:#633A34; 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:#0079C1; color:#fff;")

IRN:addTypesAsColor({"expressway", "road"}, "background:#00703C; color:#fff;")

IRN:addTypesAsColor({"boulevard", "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:2px solid #000;")

colors.IRL = IRL

end -- Republic of Ireland

do -- Isle of Man

local IMN = Country:new{default = "background:#fff; border:2px solid #000;"}

IMN:addTypesAsColor({"A", "Primary"}, "background:#00703C; color:#FFD200;")

colors.IMN = IMN

end -- Isle of Man

do -- Israel

local ISR = Country:new{default = "background:#007E00; color:#fff;"}

ISR:addTypesAsColor({"Fwy", "Freeway", "Dual"}, "background:#0000FE; color:#fff;")

colors.ISR = ISR

end -- Israel

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 -- Jamaica

local JAM = Country:new{default = "background:#00703C; color:#fff;"}

JAM:addTypesAsColor({"T"}, "background:#0079C1; color:#fff;")

colors.JAM = JAM

end -- Jamaica

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 -- Kosovo

do -- Nepal

local NPL = Country:new{default = "background:#fff; border:2px solid #000;"}

-- NPL:addTypesAsColor({"M", "Motorway", "AM", "MNamed"}, "background:#0079C1; color:#fff;")

NPL:addTypesAsColor({"H"}, "background:#00703C; color:#fff;")

colors.NPL = NPL

end -- Nepal

do -- Netherlands

local NLD = Country:new{default = "background:#0079C1; color:#fff;"}

NLD:addTypesAsColor({"E"}, "background:#08842C; color:#fff;")

colors.NLD = NLD

end -- Netherlands

do -- Norway

local NOR = Country:new{default = "background:#F2A900;"}

NOR:addTypesAsColor({"E"}, "background:#00965E; color:#fff;")

colors.NOR = NOR

end -- Norway

do -- Northern Ireland

local NIR = Country:new{default = "background:#fff; border:2px solid #000;"}

NIR:addTypesAsColor({"M", "Motorway", "AM", "MNamed"}, "background:#0079C1; color:#fff;")

NIR:addTypesAsColor({"A", "Primary"}, "background:#00703C; color:#FFD200;")

colors.NIR = NIR

end -- Northern Ireland

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:2px 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:#fff;"}

PHL:addTypesAsColor({"AH", "Asian Highway"}, "background:#1e2c76; color:#fff;")

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 -- Russia

local RUS = Country:new{default = "background:#0d69e1; color:#fff;"}

RUS:addTypesAsColor({"E"}, "background:#00a500; color:#fff;")

RUS:addTypesAsColor({"AH"}, "background:#00004e; color:#fff;")

colors.RUS = RUS

end --Russia

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({"E"}, "background:#13926C; color:#fff;")

ESP:addTypesAsColor({"A", "AP", "R", "Autovia", "Autovía", "Autopista", "autovia", "autovía", "autopista"}, "background:#19408B; color:#fff;")

ESP:addTypesAsColor({"N", "national", "nacional"}, "background:#bf0411; color:#fff;")

ESP:addTypesAsColor({"autonomica1", "autonómica1"}, "background:#E96310; color:#000;")

ESP:addTypesAsColor({"autonomica2", "autonómica2"}, "background:#5D3F0F; color:#fff;")

ESP:addTypesAsColor({"autonomica3", "autonómica3"}, "background:#F4B70D; color:#000;")

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 -- Thailand

local THA = Country:new{default = "background:#006A4D; color:#fff;"}

THA:addTypesAsColor({"AH", "T"}, "background:#003F87; color:#fff;")

colors.THA = THA

end -- Thailand

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 -- Ukraine

local UKR = Country:new{default = "background:#0000cc; color:#fff;"}

UKR:addTypesAsColor({"E"}, "background:#009900; color:#fff;")

colors.UKR = UKR

end -- Ukraine

do -- United Kingdom

local GBR = Country:new{default = "background:#fff; border:2px solid #000;"}

GBR:addTypesAsColor({"M", "Motorway", "AM", "MNamed"}, "background:#0079C1; color:#fff;")

GBR:addTypesAsColor({"A", "Primary"}, "background:#00703C; color:#FFD200;")

colors.GBR = GBR

end -- United Kingdom

do -- United States

local USA = Country:new{default = "background:#006A4D; color:#fff;"}

USA:addTypesAsColor({"FFH", "FR", "NER", "Rec", "RE", "Park", "Pkwy", "NSB", "NFSB", "FSB", "Scenic", "SB", "Post", "Postal"}, "background:#704214; color:#fff;")

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:#fff;"

colors["historical"] = "background:#704214; color:#fff;"

colors["hist"] = "background:#704214; color:#fff;"

colors["scenic"] = "background:#704214; color:#fff;"

colors["decommissioned"] = "background:#AAA;"

colors["former"] = "background:#AAA;"

colors["motorway"] = "background:#003DA5; color:#fff;" --for Norway 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 "Module: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