มอดูล:Infobox road

local p = {}
local getArgs = require('Module:Arguments').getArgs
local util = require("Module:Road data/util")
local yesno = require('Module:Yesno')
local langModule = require('Module:Lang')
local routeModule = require("Module:Infobox road/route")
local parserModule = require("Module:Road data/parser")
local parser = parserModule.parser
local format = mw.ustring.format
local frame = mw.getCurrentFrame()
local function country(args)
	local state = args.state or args.province
	local country
	local countryModule = mw.loadData("Module:Road data/countrymask")
	local country = args.country or countryModulestate
	
	return country
end
-- HEADER COLORS
function p.headerStyle(frame)
	local args = getArgs(frame)
	local header 
		if args.header_type == nil then
			header = args.header_type
		else
			header = string.lower(args.header_type)
		end
		
	local deleted = args.decommissioned or args.deleted or header == "former"
	local uc = header == "under construction" or header == "const" or header == "uc"
	local minor = header == "minor"
	local hist = header == "hist" or header == "historic" or header == "historical" or header == "scenic"
	local color = parser(args, 'color') or args'header_color'
	local freeway = header == "freeway"
	
	if freeway then
		return "header-MUTCDblue"
	elseif uc then
		return "header-uc"
	elseif minor then
		return "header-minor"
	elseif deleted and header == 'hist' or deleted and color == 'hist' then
		return "header-deleted-hist"
	elseif deleted then
		return "header-deleted"
	elseif hist then
		return "header-hist"
	elseif color then
		return "header-" .. color
	elseif args.state or args.province or args.country then
		local country = country(args)
		return "header-" .. country or "header-default"
	else
		return "header-default"
	end
end
-- SECOND IMAGE
local function photo(args)
	local country = country(args)
	local photo = args.photo or args.image
	local width = args.photo_wide or args.image_width or "290px"
	local alt = args.photo_alt or args.image_alt or photo
	
	if photo == nil then
		return nil
	elseif country == "USA" then
		return nil
		else return string.format('alt=%s', photo, width, alt)
	end
end
function p.photo(frame)
	local args = getArgs(frame)
	return photo(args)
end
-- TRANSLATION
local function translate(args, lang)
	local lang = parser(args, 'lang') or args.lang or 'none'
	local translation = args.translation or parser(args, 'translation') or 
	
	if country(args) == "PAK" and translation ~=  then
		local route = args.route
		
		if route ~= nil then
			local arabicModule = require( "Module:Convert to eastern arabic numerals" )
			local arabic = arabicModule._convert({route})
			local translated = string.gsub( translation, route, arabic)
		
			return frame:expandTemplate{title = 'Nastaliq', args = {translated}}
		else
			return frame:expandTemplate{title = 'Nastaliq', args = {translation}}
		end
	elseif translation ~=  and lang == 'none' then
		return translation
	elseif country(args) == "CHN" and args.type == "Expwy" then
		local trans = require( "Module:Road data/masks/CHN/Expwy translations" )
		local route = args.route
		
		return langModule._lang({lang, transroute})
	elseif country(args) == "HUN" then
		local nominal = require( "Module:Road data/masks/HUN" )
		local routeNum
		local leading
		
			if string.len(args.route) > 2 then
				routeNum = string.match(args.route, "%d%d$", 0)
				leading = string.match(args.route, "(%d*)%d%d$", 0)
			else
				routeNum = args.route
				leading = 
			end
		
		if args.type == "M" then
			return langModule._lang({"hu", "M" .. leading .. nominalrouteNum .. " autópálya"})
		elseif args.type == "Mb" then
			return langModule._lang({"hu", "M" .. leading .. nominalrouteNum .. " autóút"})
		elseif args.type == "MR" then
			return langModule._lang({"hu", leading .. nominalrouteNum .. " főút"})
		elseif args.type == "Mb" then
			return langModule._lang({"hu", leading .. nominalrouteNum .. " közút"})
		end
	elseif lang == "ar" and translation ~=  then
		local route = args.route
		local arabicModule = require( "Module:Convert to eastern arabic numerals" )
		local arabic = arabicModule._convert({route})
		local translated = string.gsub( translation, route, arabic)
		
		return langModule._lang({lang, translated})
	elseif translation ~=  and lang ~= 'none' then
		return langModule._lang({lang, translation})
	else
		return nil
	end
end
function p.translate(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 lang = config.lang
	return translate(args, lang)
end
-- MAINTAINED BY
local function maint(args)
	local maint = args.maint or parser(args, 'maint') or 
	if maint == "none" or maint ==  then
		return nil
	else
		return "บำรุงรักษาโดย " .. maint
	end
end
function p.maint(frame)
	local args = getArgs(frame)
	return maint(args)
end
-- DEFINED BY LAW
local function law(args)
	local law = parser(args, 'law') or 
	if args.section ==  then
		return nil
	else
		return "Defined by " .. law
	end
end
function p.law(frame)
	local args = getArgs(frame)
	return law(args)
end
-- EXISTED
function p._existed(args)
	local formed = args.established or args.formed or 
	local deleted = args.decommissioned or args.deleted or 
	
	if formed ==  then
		return nil
	elseif deleted ==  then
		return formed .. "–ปัจจุบัน"
	else
		return formed .. "–" .. deleted
	end
end
function p.existed(frame)
	local args = getArgs(frame)
	return p._existed(args)
end
-- TIME PERIOD
local function period(args)
	
	local infobox_args = {}
	
	infobox_args'bodystyle' = 'display:inline-table;'
	infobox_args'child' = 'yes'
	infobox_args'decat' = 'yes'
	infobox_args'label1' = "ช่วงเวลา"
	infobox_args'data1' = args.time_period
	
	if args.time_period then
		infobox_args'label2' = "Cultural significance"
		infobox_args'data2' = args.significance
		infobox_args'label3' = "Known for"
		infobox_args'data3' = args.known_for
		infobox_args'label4' = "เส้นทางที่เกี่ยวข้อง"
		infobox_args'data4' = args.related
	else
		infobox_args'label3' = "Known for"
		infobox_args'data3' = args.known_for
	end
	return frame:expandTemplate ({title='Infobox', args = infobox_args})
end
local function period_params(args)
	if args.time_period or args.known_for then
		return true
	else
		return false
	end
end
function p.period(frame)
	local args = getArgs(frame)
	
	if period_params(args) == false then
			return nil
		else
			return period(args)
		end
	end
-- ALLOCATION
local function allocation(args)
	local country = country(args)
	
	if country == "AUS" then
		return "ถนนที่เป็นส่วนประกอบ"
		else return "ทางหลวงที่เป็นส่วนประกอบ"
	end
end
function p.allocation(frame)
	local args = getArgs(frame)
	return allocation(args)
end
-- SPUR OF
local function spurOf(args)
	local state = args.state or args.province
	local country = args.country
	local county = args.county
	local parentType = args.spur_type
	local parentRoute = args.spur_of
	local aux = parser(args, 'aux') or "Auxiliary route" or nil
	local jct = frame:expandTemplate{
			title = 'jct', args = {
				state = state,
				country = country,
				county1 = county,
				parentType,
				parentRoute,
				noshield1 = "yes"
			}
		}
	if not parentType and not parentRoute then
		return nil
	elseif type(aux) == "table" then
		return "Auxiliary route of " .. jct
		else return tostring(aux) .. " of " .. jct
	end
end
function p.spurOf(frame)
	local args = getArgs(frame)
	return spurOf(args)
end
-- PART OF
local function partOf(args)
	
	if args"e-road" or args.ahn or args.tahn or args.mrn then
		local infobox_args = {}
		
		infobox_args'bodystyle' = 'display:inline-table;'
		infobox_args'child' = 'yes'
		infobox_args'decat' = 'yes'
		if args"e-road" then
			local eshield = args"e-road-shield" or 
			infobox_args'data1' = eshield .. " ส่วนหนึ่งของ " .. args"e-road"
		end
		if args.ahn then
			local ashield = args"ahn-shield" or 
			infobox_args'data2' = ashield .. " ส่วนหนึ่งของ " .. args.ahn
		end
		if args.tahn then
			local tshield = args"tahn-shield" or 
			infobox_args'data3' = tshield .. " ส่วนหนึ่งของ " .. args.tahn
		end
		if args.mrn then
			local mshield = args"mrn-shield" or 
			infobox_args'data4' = mshield .. " ส่วนหนึ่งของ " .. args.mrn
		end
		
		return frame:expandTemplate ({title='Infobox', args = infobox_args})
		
	else return nil
	end	
end
function p.partOf(frame)
	local args = getArgs(frame)
	return partOf(args)
end
--BROWSE LINKS
local function browse(args)
	if args.nobrowse then return nil end
	
	local previousRoute = args.previous_route
	local nextRoute = args.next_route
	if previousRoute or nextRoute then
		local box = mw.html.create('table'):cssText("width:100%; background:none; border-collapse:collapse; display:inline-table;")
		local boxModule = require "Module:Road data/browse"
		local primary = boxModule._browse(args)
		box:wikitext(primary)
		return tostring(box)
	end
end
function p.browse(frame)
	local args = getArgs(frame)
	return browse(args)
end
local function extended(args)
	local extended = args.browse
	if args.nobrowse or extended == nil then
		return nil 
	else
		local box = mw.html.create('table'):cssText("width:100%; background:none; border-collapse:collapse; display:inline-table;")
		box:wikitext(extended)
		return tostring(box)
	end
end
function p.extended(frame)
	local args = getArgs(frame)
	return extended(args)
end
-- HIGHWAY SYSTEM LINKS
local function system(args)
	if args.system1 then
		
	local infobox_args = {
		'child' = "yes",
		'decat' = "yes",
		'bodystyle' = "border-collapse:collapse;"
	}
		
		
	local i = 1
	while (1) do
		local systemClassn = "class" .. i
		local systemDatan = "data" .. i
		local systemArgn = args'system' .. i
		
		infobox_argssystemClassn = "hlist"
		infobox_argssystemDatan = systemArgn
		
			if i == 10 then
				break
			else
				i = i + 1
			end
		end
	
	return frame:expandTemplate ({title='Infobox', args = infobox_args})
	end
end
function p.system(frame)
	local args = getArgs(frame)
	return system(args)
end
-- ROUTE INFORMATION HEADER
local function info(args)
	local maint = maint(args)
	local law = law(args)
	local period = period_params(args)
	local existed = args.established or args.formed or nil
	local spur = args.spur_type or args.spur_of or nil
	local part = partOf(args)
	
	if period == true or spur ~= nil or part ~= nil or existed ~= nil or maint ~= nil or args.section or args.length_mi or args.length_km or args.allocation or args.history or args.restrictions or args.tourist or args.status or args.margary then
		return "ข้อมูลของเส้นทาง"
	else
		return nil
	end
end
function p.info(frame)
	local args = getArgs(frame)
	return info(args)
end
-- HIGHWAY SYSTEM HEADER
local function highwaySystem(args)
	if args.nobrowse then return nil end
	local country = country(args) or args.countries
	
	if country == nil then
		return nil
	elseif country == "GBR" or country == "ENG" or country == "NIR" or country == "SCT" or country == "WLS" or
		country == "GGY" or country == "IMN" or country == "JEY" or country == "AIA" or country == "BMU" or
		country == "IOT" or country == "VGB" or country == "CYM" or country == "FLK" or country == "GIB" or
		country == "MSR" or country == "PCN" or country == "SHN" or country == "SGS" or country == "TCA" then
		return "โครงข่ายถนน"
		else return "ระบบทางหลวง"
	end
end
function p.highwaySystem(frame)
	local args = getArgs(frame)
	return highwaySystem(args)
end
return p