|
|
Line 1: |
Line 1: |
− | 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.EST = Country:new{default = "background:#0079C1; 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:#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 -- 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 -- Germany
| |
− | 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 -- 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({"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 -- 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"}, "background:#039; color:#fff;")
| |
− | ESP:addTypesAsColor({"N"}, "background:#f00; color:#fff;")
| |
− | colors.ESP = ESP
| |
− | end -- Spain
| |
− | do -- Sri Lanka
| |
− | local LKA = Country:new{default = "background:#006A4D; color:#fff;"}
| |
− | LKA:addTypesAsColor({"E"}, "background:#0000CD; color:#fff;")
| |
− | LKA:addTypesAsColor({"A"}, "background:#006A4D; color:#fff;")
| |
− | colors.LKA = LKA
| |
− | end -- Sri Lanka
| |
− | 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
| |
− |
| |
− | 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
| |