Bước tới nội dung

Mô đun:Infobox road/color

Bách khoa toàn thư mở Wikipedia
local p = {}Country = {}function Country:new(obj)	obj = obj or {}	setmetatable(obj, self)	self.__index = self	return objendfunction Country:color(args)	local type = args.type	return self[type] or self.defaultendfunction Country:addTypesAsColor(types, color)	for i,type in pairs(types) do		self[type] = color	endendlocal 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 typesendfunction p._color(args)	return colors:color(args)endfunction 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}endreturn p