Module:Road data/browse/sandbox
Appearance
![]() | This is the module sandbox page for Module:Road data/browse (diff). See also the companion subpage for test cases. |
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This Lua module is used on approximately 18,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module is used by Template:Infobox road (via Module:Infobox road), but can be used outside of the infobox. Also see Module:Road data/browsetable which can serve as a container for the output produced by the module.
This module powers many of the templates in Category:Browse templates. The unified documentation Template:Browse template documentation exists for those templates.
local p = {}
-- Change the following to main module upon deployment.
local parserModuleName = "Module:Road data/parser/sandbox"
local shieldModuleName = "Module:Road data/shield"
local format = mw.ustring.format
local function shield(route)
local shieldModule = require(shieldModuleName)
return shieldModule.shield(route)
end
local function link(route)
if route.type == '' then return route.route end
local parserModule = require(parserModuleName)
local parser = parserModule.parser
local abbr = parser(route, 'abbr')
if not abbr then
route.typeerror = true
return format("<span class=\"error\">Invalid type: %s</span>", route.type)
end
if route.nolink then return abbr end
local link = parser(route, 'link') or ''
if link == '' then return abbr end
return format("[[%s|%s]]", link, abbr)
end
local function previousRoute(route)
local shieldText = shield(route)
local linkText = link(route)
local cell = mw.html.create('td'):css({
width = "45%",
["vertical-align"] = "middle",
padding = "0",
["text-align"] = "left"
})
local routeText = mw.html.create("span"):css({display = "inline-block"})
routeText:wikitext(shieldText .. ' ' .. linkText)
cell:wikitext("← " .. tostring(routeText))
return cell
end
local function nextRoute(route)
local shieldText = shield(route)
local linkText = link(route)
local cell = mw.html.create('td'):css({
width = "45%",
["vertical-align"] = "middle",
padding = "0",
["text-align"] = "right"
})
local routeText = mw.html.create("span"):css({display = "inline-block"})
routeText:wikitext(linkText .. ' ' .. shieldText)
cell:wikitext(tostring(routeText) .. " →")
return cell
end
function p._browse(route)
local country = route.country
local state = route.state or route.province
local county = route.county
local previousData = {
country = country, state = state, county = county,
type = route.previous_type, route = route.previous_route,
dab = route.previous_dab
}
local nextData = {
country = country, state = state, county = county,
type = route.next_type, route = route.next_route,
dab = route.next_dab
}
local previousRoute = previousRoute(previousData)
local nextRoute = nextRoute(nextData)
if previousData.typeerror or nextData.typeerror then
route.typeerror = true
end
local centerRoute = mw.html.create('td'):css({
["text-align"] = "center",
["white-space"] = "nowrap",
width = "10%",
["vertical-align"] = "middle",
padding = "0"
})
local route = route.browse_route
if route then
centerRoute:wikitext("'''" .. route .. "'''")
end
local browseRow = mw.html.create('tr')
browseRow:node(previousRoute):node(centerRoute):node(nextRoute)
return tostring(browseRow)
end
function p.browse(frame)
-- Import module function to work with passed arguments
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
args.browse_route = args.route
return p._browse(args)
end
return p