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' or name == 'GBR' 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.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.MEX = Country:new{default = "background:#006A4D; color:white;"}
		colors.NZL = Country:new{default = "background:#006A4D; color:#fff;"}
		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 -- 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 -- 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 -- Russia
			local RUS = Country:new{default = "background:#0d69e1; color:#fff;"}
			RUS:addTypesAsColor({"E"}, "background:#00a500; color:#fff;")
			RUS:addTypesAsColor({"AH"}, "background:#00004e; color:white;")
			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({"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 -- 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 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 "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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.