Module: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 countryModule[state]
	
	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('[[File:%s|%s|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, trans[route]})
	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 .. nominal[routeNum] .. " autópálya"})
		elseif args.type == "Mb" then
			return langModule._lang({"hu", "M" .. leading .. nominal[routeNum] .. " autóút"})
		elseif args.type == "MR" then
			return langModule._lang({"hu", leading .. nominal[routeNum] .. " főút"})
		elseif args.type == "Mb" then
			return langModule._lang({"hu", leading .. nominal[routeNum] .. " 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 "Maintained by " .. 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 .. "–present"
	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'] = "Time period"
	infobox_args['data1'] = args.time_period
	
	if args.time_period then
		infobox_args['label2'] = "Cultural signeeficance"
		infobox_args['data2'] = args.significance
		infobox_args['label3'] = "Kent fur"
		infobox_args['data3'] = args.known_for
		infobox_args['label4'] = "Relatit routes"
		infobox_args['data4'] = args.related
	else
		infobox_args['label3'] = "Kent fur"
		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 "[[Route number#Australia|Allocation]]"
		else return "Component<br>highways"
	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 .. " Part of " .. args["e-road"]
		end
		if args.ahn then
			local ashield = args["ahn-shield"] or ''
			infobox_args['data2'] = ashield .. " Part of " .. args.ahn
		end
		if args.tahn then
			local tshield = args["tahn-shield"] or ''
			infobox_args['data3'] = tshield .. " Part of " .. args.tahn
		end
		if args.mrn then
			local mshield = args["mrn-shield"] or ''
			infobox_args['data4'] = mshield .. " Part of " .. 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_args[systemClassn] = "hlist"
		infobox_args[systemDatan] = 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 "Route information"
	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 "Road network"
		else return "Highway system"
	end
end

function p.highwaySystem(frame)
	local args = getArgs(frame)
	return highwaySystem(args)
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.