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 local module = require(string.format("Module:Infobox road/color/%s", name)) return module.colors end do -- Single-color countries colors.BEL = Country:new{default = "background:#0071B3; color:#fff;"} colors.BGD = Country:new{default = "background:#2C6700; color:white;"} colors.CHN = Country:new{default = "background:#006A4D; color:white;"} colors.EUR = Country:new{default = "background:#08842C; color:#fff;"} colors.HKG = Country:new{default = "background:#006A4D; color:#fff;"} colors.ISL = Country:new{default = "background:#FFD200; border:1px solid #000;"} colors.NLD = Country:new{default = "background:#0079C1; color:#fff;"} 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 -- Australia local AUS = Country:new{default = "background:#ccc;"} AUS:addTypesAsColor({"Metroad", "M", "freeway"}, "background:#D2E2F9;") AUS:addTypesAsColor({"A", "B", "national", "highway"}, "background:#E9F9D2;") AUS:addTypesAsColor({"C", "road"}, "background:#FFFFE0;") AUS:addTypesAsColor({"street"}, "background:#F9E2D2;") AUS:addTypesAsColor({"NH"}, "background:#3A7119; color:#FFE133;") 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 -- 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 -- 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;") colors.FRA = FRA colors.MTQ = 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:#039; color:#fff;") DEU:addTypesAsColor({"B", "Bundesstraße", "Bundesstrasse"}, "background:#FC3; color:black") colors.DEU = DEU end -- Germany 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 -- 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({"SS"}, "background:#003F87; color:#fff;") colors.ITA = ITA end -- Italy do -- Malaysia local MYS = Country:new{default = "background:#0079C1; color:#fff;"} MYS:addTypesAsColor({"E"}, "background:#006A4D; color:#fff;") colors.MYS = MYS end -- Malaysia 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"}, "background:#039; color:#fff;") ESP:addTypesAsColor({"N"}, "background:#f00; color:#fff;") colors.ESP = ESP end -- Spain do -- Turkey local TUR = Country:new{default = "background:#006A4D; color:#fff;"} TUR:addTypesAsColor({"state", "D"}, "background:#003F87; 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;" end -- Built-in header types end

p.colors = colors

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