Created page with "local p = {} local getArgs = require('Module:Arguments').getArgs function p.headerStyle(frame) local args = getArgs(frame) local deleted = args.decommissioned or args.delet..." |
Updte |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local getArgs = require('Module:Arguments').getArgs | 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) | function p.headerStyle(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local deleted = args.decommissioned or args.deleted | local header | ||
if deleted then | if args.header_type == nil then | ||
return " | 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 significance" | |||
infobox_args['data2'] = args.significance | |||
infobox_args['label3'] = "Known for" | |||
infobox_args['data3'] = args.known_for | |||
infobox_args['label4'] = "Related routes" | |||
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 "[[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 | ||
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) | local function browse(args) | ||
if args.nobrowse then return nil end | |||
local previousRoute = args.previous_route | local previousRoute = args.previous_route | ||
local nextRoute = args.next_route | local nextRoute = args.next_route | ||
if previousRoute or nextRoute then | |||
local boxModule = require "Module:Road data/browse" | |||
local primary = boxModule._browse(args) | |||
local tblModule = require "Module:Road data/browsetable" | |||
return tblModule._browsetable(primary) | |||
end | |||
end | |||
function p.browse(frame) | |||
local args = getArgs(frame) | |||
return browse(args) | |||
end | |||
local function extended(args) | |||
local extended = args.browse | local extended = args.browse | ||
local | if args.nobrowse or extended == nil then | ||
return nil | |||
else | |||
local tblModule = require "Module:Road data/browsetable" | |||
-- Negative margin to counteract infobox border-spacing | |||
return tblModule._browsetable(extended, 'margin-top:-3px') | |||
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 | end | ||
if | |||
return frame:expandTemplate ({title='Infobox', args = infobox_args}) | |||
end | |||
return | 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 | end | ||
function p. | function p.highwaySystem(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
return | return highwaySystem(args) | ||
end | end | ||
return p | return p | ||
Latest revision as of 21:24, 6 September 2026
Documentation for this module may be created at Module:Infobox road/doc
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 significance"
infobox_args['data2'] = args.significance
infobox_args['label3'] = "Known for"
infobox_args['data3'] = args.known_for
infobox_args['label4'] = "Related routes"
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 "[[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 boxModule = require "Module:Road data/browse"
local primary = boxModule._browse(args)
local tblModule = require "Module:Road data/browsetable"
return tblModule._browsetable(primary)
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 tblModule = require "Module:Road data/browsetable"
-- Negative margin to counteract infobox border-spacing
return tblModule._browsetable(extended, 'margin-top:-3px')
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