Module:Infobox road/route
Documentation for this module may be created at Module:Infobox road/route/doc
local p = {} local format = mw.ustring.format require('strict') local getArgs = require('Module:Arguments').getArgs local parserModule = require 'Module:Road data/parser' local parser = parserModule.parser local function banner(args, style) if args.marker_image then return nil end local bannerSize if style == 'small' then bannerSize = "40px" else bannerSize = "72px" end local shield = parser(args, 'banner') local alt = parser(args, 'banner') if not shield or shield == '' then return nil else return string.format('[[File:%s|%s|alt=%s]]', shield, bannerSize, alt) end end local function shield(args, style) if args.marker_image then return args.marker_image end local horizontalSize local verticalSize if style == 'small' then horizontalSize = "90x40px" verticalSize = "40x90px" else horizontalSize = "154x72px" verticalSize = "72x154px" end local shield = parser(args, 'shieldmain') or parser(args, 'shield') or '' local label = parser(args, 'name') or parser(args, 'abbr') or '' local alt = label .. ' marker' local orientation = parser(args, 'orientation') local function simpleSize(args) if orientation and orientation == 'upright' then return verticalSize else return horizontalSize end end local function shield_size(image_name, orientation) local image = 'File:' .. image_name local title = mw.title.new(image) local width = title.file.width local height = title.file.height if (orientation and orientation == 'upright') or height > width then return verticalSize else return horizontalSize end end if not shield or shield == '' then return nil elseif type(shield) == 'table' then local res = {} local sizes = {} for i,v in ipairs(shield) do sizes[i] = v res[i] = string.format('[[File:%s|%s|alt=%s]]', v, shield_size(v), alt) end return table.concat(res, ' ') else return string.format('[[File:%s|%s|alt=%s]]', shield, simpleSize(args), alt) end end -- Links/abbreviations local function name(args) local name = args.name or parser(args, 'name') or parser(args, 'abbr') return name end function p._routeInfo(args) local style = args.style local banner = banner(args, style) local shield = shield(args, style) local name = name(args) if not args.type and not args.route and not args.name and not args.marker_image then local container = nil else local container = mw.html.create('div'):cssText('text-align:center;') if shield == nil or args.marker_image == 'none' or args.name and not args.marker_image and not args.type and not args.route then container:tag('p'):cssText('margin:0.1em;'):wikitext(name) elseif args.marker_image ~= '' and args.name == '' or args.name == nil and not args.type and not args.route then container:tag('p'):cssText('margin:0.1em;'):wikitext(shield) elseif args.country == 'AUS' then container:tag('p'):cssText('margin:0.1em;'):wikitext(name) container:tag('p'):cssText('margin:0.1em 0 0 0;'):wikitext(shield) else container:tag('p'):cssText('margin:0.1em 0 0 0;'):wikitext(banner) container:tag('p'):cssText('margin:0 0 0.1em;'):wikitext(shield) container:tag('p'):cssText('margin:0.1em;'):wikitext(name) end return tostring(container) end end function p.routeInfo(frame) local args = getArgs(frame) return p._routeInfo(args); end function p._shields(args) local style = args.style local banner = banner(args, style) local shield = shield(args, style) if not args.type and not args.route and not args.name and not args.marker_image then local container = nil else local container = mw.html.create('div'):cssText('text-align:center; display: inline-block; vertical-align: baseline; line-height: 0;') container:tag('p'):cssText('margin:0.1em 0 0 0;'):wikitext(banner) container:tag('p'):cssText('margin:0 0 0.1em;'):wikitext(shield) return tostring(container) end end function p.shields(frame) local args = getArgs(frame) return p._shields(args); end function p._names(args) local name = name(args) return name end function p.names(frame) local args = getArgs(frame) return p._names(args); end return p