<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARoutelist_row%2Fsandbox</id>
	<title>Module:Routelist row/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARoutelist_row%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Routelist_row/sandbox&amp;action=history"/>
	<updated>2026-07-25T18:42:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Routelist_row/sandbox&amp;diff=144940&amp;oldid=prev</id>
		<title>imported&gt;Fredddie: test</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Routelist_row/sandbox&amp;diff=144940&amp;oldid=prev"/>
		<updated>2022-09-05T16:06:41Z</updated>

		<summary type="html">&lt;p&gt;test&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {} -- Package to be exported&lt;br /&gt;
&lt;br /&gt;
local lang = mw.getContentLanguage() -- Built-in locale for date formatting&lt;br /&gt;
local format = mw.ustring.format -- String formatting function&lt;br /&gt;
local insert = table.insert&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
local util = require(&amp;quot;Module:Road data/util&amp;quot;)&lt;br /&gt;
local frame = mw.getCurrentFrame()&lt;br /&gt;
local roadDataModule = require(&amp;quot;Module:Road data/routelist&amp;quot;)&lt;br /&gt;
local parserModule = require &amp;#039;Module:Road data/parser&amp;#039;&lt;br /&gt;
local parser = parserModule.parser&lt;br /&gt;
&lt;br /&gt;
local shieldScale = 1&lt;br /&gt;
&lt;br /&gt;
--[[-&lt;br /&gt;
@type status&lt;br /&gt;
@field #string row: The start of the row, for this particular type (color)&lt;br /&gt;
@field #string established: The string to be output in the &amp;quot;Formed&amp;quot; column.&lt;br /&gt;
	For future routes, &amp;quot;proposed&amp;quot; is displayed here.&lt;br /&gt;
	Otherwise, display the year passed in the established parameter.&lt;br /&gt;
@field #string removed: The string to be output in the &amp;quot;Removed&amp;quot; column.&lt;br /&gt;
	In the case of routeStates.former, the year that the route was&lt;br /&gt;
	decommissioned is output instead.&lt;br /&gt;
]]&lt;br /&gt;
--[[-&lt;br /&gt;
Route statuses.&lt;br /&gt;
@list &amp;lt;#status&amp;gt;&lt;br /&gt;
]]&lt;br /&gt;
local routeStatuses = {&lt;br /&gt;
	-- current routes&lt;br /&gt;
	current = {&lt;br /&gt;
		row = &amp;quot;|-&amp;quot;,&lt;br /&gt;
		removed = &amp;quot;current&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	-- future routes&lt;br /&gt;
	future = {&lt;br /&gt;
		row = &amp;#039;|- style=&amp;quot;background-color:#ffdead;&amp;quot; title=&amp;quot;Future route&amp;quot;&amp;#039;,&lt;br /&gt;
		established = &amp;quot;proposed&amp;quot;,&lt;br /&gt;
		removed = &amp;quot;—&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	-- former routes&lt;br /&gt;
	former = {&lt;br /&gt;
		row = &amp;#039;|- style=&amp;quot;background-color:#d3d3d3;&amp;quot; title=&amp;quot;Former route&amp;quot;&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	-- routes marked as former by override&lt;br /&gt;
	-- deprecated&lt;br /&gt;
	formeroverride = {&lt;br /&gt;
		row = &amp;#039;|- style=&amp;quot;background-color:#d3d3d3;&amp;quot; title=&amp;quot;Former route&amp;quot;&amp;#039;,&lt;br /&gt;
		removed = &amp;quot;—&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	-- route with unknown status&lt;br /&gt;
	unknown = {&lt;br /&gt;
		row = &amp;quot;|-&amp;quot;,&lt;br /&gt;
		removed = &amp;quot;—&amp;quot;&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[-&lt;br /&gt;
Return the route status.&lt;br /&gt;
@param #string established `established` argument passed to the module&lt;br /&gt;
@param #string decommissioned `decommissioned` argument passed to the module&lt;br /&gt;
@return #status the status of the route.&lt;br /&gt;
]]&lt;br /&gt;
local function getRouteStatus(established, decommissioned)&lt;br /&gt;
	if decommissioned == &amp;#039;yes&amp;#039; then&lt;br /&gt;
		-- a former route with no decommission information&lt;br /&gt;
		return routeStatuses.formeroverride&lt;br /&gt;
	elseif decommissioned then&lt;br /&gt;
		-- If the route is decommissioned, then it must be a former route.&lt;br /&gt;
		return routeStatuses.former&lt;br /&gt;
	elseif not established then&lt;br /&gt;
		-- Without the establishment date, there is not enough information&lt;br /&gt;
		-- to determine the status of the route.&lt;br /&gt;
		return routeStatuses.unknown&lt;br /&gt;
	elseif established == &amp;#039;proposed&amp;#039; then&lt;br /&gt;
		-- a future route&lt;br /&gt;
		return routeStatuses.future&lt;br /&gt;
	else&lt;br /&gt;
		-- a current route&lt;br /&gt;
		return routeStatuses.current&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[-&lt;br /&gt;
A limited replacement for {{dts}}.&lt;br /&gt;
Derive the sort key from a given date.&lt;br /&gt;
@param #string date&lt;br /&gt;
@param #string circa &amp;quot;yes&amp;quot; if `date` is tagged as circa&lt;br /&gt;
@return #string true the hidden sort key, along with the year of the original date&lt;br /&gt;
@return #boolean false if the sort key cannot be derived&lt;br /&gt;
]]&lt;br /&gt;
local function dtsYearCore(date)&lt;br /&gt;
	local year = lang:formatDate(&amp;#039;Y&amp;#039;, date) -- year for this date&lt;br /&gt;
	if year == date then -- If the provided date is just the year,&lt;br /&gt;
		-- tack on January 1 for the sort key to work right.&lt;br /&gt;
		date = date .. &amp;quot;-01-01&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local month = lang:formatDate(&amp;#039;m&amp;#039;, date) -- month for this date&lt;br /&gt;
	local day = lang:formatDate(&amp;#039;d&amp;#039;, date) -- day for this date&lt;br /&gt;
	-- Create and store the formatted hidden sort key.&lt;br /&gt;
	-- The year must be five digits, per convention.&lt;br /&gt;
	local dtsStr = format(&amp;quot;%05d-%02d-%02d&amp;quot;, year, month, day)&lt;br /&gt;
	-- Return the hidden sort key and the year for this date.&lt;br /&gt;
	return {dtsStr, year}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dtsYear(date, circa)&lt;br /&gt;
	local success, result = pcall(dtsYearCore, date)&lt;br /&gt;
	if not success then&lt;br /&gt;
		result = {&lt;br /&gt;
			&amp;quot;00001-01-01&amp;quot;,&lt;br /&gt;
			util.err(format(&amp;#039;Invalid date &amp;quot;%s&amp;quot;.&amp;#039;, date))&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the HTML code necessary for the hidden sort key.&lt;br /&gt;
	local dtsStyle = format(&amp;quot;style=\&amp;quot;white-space:nowrap;\&amp;quot; data-sort-value=\&amp;quot;%s\&amp;quot;&amp;quot;, result[1])&lt;br /&gt;
	local year = result[2]&lt;br /&gt;
	if circa == &amp;#039;yes&amp;#039; then -- If the date is tagged as circa,&lt;br /&gt;
		-- add the circa abbreviation to the display. Derived from {{circa}}.&lt;br /&gt;
		year = &amp;quot;&amp;lt;span style=\&amp;quot;white-space:nowrap;\&amp;quot;&amp;gt;&amp;lt;abbr title=\&amp;quot;circa\&amp;quot;&amp;gt;c.&amp;lt;/abbr&amp;gt;&amp;amp;thinsp;&amp;quot; .. year .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return dtsStyle, year&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Return formatting and output for a date column.&lt;br /&gt;
local function date(text, date, circa, ref)&lt;br /&gt;
	-- Returns the text if specified, or the dtsYear-formatted date, and an em-dash.&lt;br /&gt;
	local style, output&lt;br /&gt;
	if text then&lt;br /&gt;
		output = text&lt;br /&gt;
	elseif date then&lt;br /&gt;
		style, output = dtsYear(date, circa)&lt;br /&gt;
	else&lt;br /&gt;
		output = &amp;quot;—&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return format(&amp;quot;|align=center %s|%s%s&amp;quot;, style or &amp;quot;&amp;quot;, output, ref)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Return output for the date columns for a given route.&lt;br /&gt;
local function dates(established, decommissioned, routeStatus, args)&lt;br /&gt;
	local established_ref = args.established_ref or &amp;#039;&amp;#039; -- Reference for date established&lt;br /&gt;
	local decommissioned_ref = args.decommissioned_ref or &amp;#039;&amp;#039; -- Reference for date decommissioned&lt;br /&gt;
	return format(&amp;quot;%s\n%s&amp;quot;,&lt;br /&gt;
		date(routeStatus.established, established, args.circa_established, established_ref),&lt;br /&gt;
		date(routeStatus.removed, decommissioned, args.circa_decommissioned, decommissioned_ref))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Return output for the termini columns for a given route.&lt;br /&gt;
local function termini(args)&lt;br /&gt;
	local beltway = args[&amp;quot;beltway&amp;quot;]&lt;br /&gt;
	if beltway then&lt;br /&gt;
		-- The given route is a beltway. &lt;br /&gt;
		-- `beltway` text will span both termini columns.&lt;br /&gt;
		return &amp;quot;|colspan=2 align=center|&amp;quot; .. beltway&lt;br /&gt;
	else&lt;br /&gt;
		local terminus_a = args[&amp;quot;terminus_a&amp;quot;] or &amp;#039;—&amp;#039; -- Southern or western terminus&lt;br /&gt;
		local terminus_b = args[&amp;quot;terminus_b&amp;quot;] or &amp;#039;—&amp;#039; -- Northern or eastern terminus&lt;br /&gt;
		-- Fill in the termini columns&lt;br /&gt;
		return &amp;#039;|&amp;#039; .. terminus_a .. &amp;#039;||&amp;#039; .. terminus_b&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Return output for the length columns for a given route, with the appropriate conversions.&lt;br /&gt;
local function length(args)&lt;br /&gt;
	local km = args[&amp;quot;length_km&amp;quot;] or &amp;#039;&amp;#039; -- Length in kilometers&lt;br /&gt;
    local mi = args[&amp;quot;length_mi&amp;quot;] or &amp;#039;&amp;#039; -- Length in miles&lt;br /&gt;
    local ref = args[&amp;quot;length_ref&amp;quot; ] or &amp;#039;&amp;#039;&lt;br /&gt;
    local cvtmi = frame:expandTemplate{ title = &amp;#039;convert&amp;#039;, args = { mi, &amp;quot;mi&amp;quot;, &amp;quot;km&amp;quot;, disp = &amp;quot;table&amp;quot;}}&lt;br /&gt;
    local cvtkm = frame:expandTemplate{ title = &amp;#039;convert&amp;#039;, args = { km, &amp;quot;km&amp;quot;, &amp;quot;mi&amp;quot;, disp = &amp;quot;table&amp;quot;}}&lt;br /&gt;
    local dist = &amp;quot;65&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if mi == &amp;#039;&amp;#039; and km == &amp;#039;&amp;#039; then&lt;br /&gt;
        return format(&amp;quot;|align=right|—||align=right|—&amp;quot;)&lt;br /&gt;
	elseif mi ~= &amp;#039;0&amp;#039; and km == &amp;#039;&amp;#039; then&lt;br /&gt;
		return format(&amp;quot;|&amp;quot;) .. frame:expandTemplate{ title = &amp;#039;decimal-align&amp;#039;, args = { cvtmi, left = dist }}&lt;br /&gt;
	else&lt;br /&gt;
		return format(&amp;quot;|&amp;quot;) .. frame:expandTemplate{ title = &amp;#039;decimal-align&amp;#039;, args = { cvtkm, left = dist }}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Generate a &amp;quot;Local names&amp;quot; cell if necessary.&lt;br /&gt;
local function localname(args)&lt;br /&gt;
	local enabled = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	if enabled == &amp;quot;local&amp;quot; then&lt;br /&gt;
		local localName = args[&amp;quot;local&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		return &amp;quot;|&amp;quot; .. localName&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generate a &amp;quot;Notes&amp;quot; cell if necessary.&lt;br /&gt;
local function notes(notes)&lt;br /&gt;
	if notes == &amp;#039;none&amp;#039; then&lt;br /&gt;
		return &amp;#039;| &amp;#039; --create empty cell&lt;br /&gt;
	elseif notes then&lt;br /&gt;
		return &amp;#039;|&amp;#039; .. notes --display notes in cell&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039; --create no cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Derive the sort key from a given route.&lt;br /&gt;
local function sortkey(abbr)&lt;br /&gt;
	-- Split `abbr` into three possibly empty parts, with number in the middle.&lt;br /&gt;
	local prefix, num, suffix = mw.ustring.match(abbr, &amp;quot;([^0-9]*)(%d*)(.*)&amp;quot;)&lt;br /&gt;
	-- If `abbr` does not contain a number, the entry appears at the bottom.&lt;br /&gt;
	num = tonumber(num)&lt;br /&gt;
	num = type(num) == &amp;quot;number&amp;quot; and format(&amp;quot;%04d&amp;quot;, num) or &amp;quot;&amp;quot;&lt;br /&gt;
	-- The sort key is `abbr`, but with route number zero-padded to 4 digits&lt;br /&gt;
	-- and prefix moved to the end.&lt;br /&gt;
	return mw.text.trim(&lt;br /&gt;
		mw.ustring.gsub(format(&amp;quot;%s%s %s&amp;quot;, num, suffix, prefix), &amp;quot;&amp;amp;nbsp;&amp;quot;, &amp;quot; &amp;quot;),&lt;br /&gt;
		&amp;quot;- &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Return output for displaying the shield, banner, and link for a given route.&lt;br /&gt;
local function route(args, shieldSize)&lt;br /&gt;
	local link, abbr = roadDataModule.link(args)&lt;br /&gt;
	-- Use the sort key if already specified.&lt;br /&gt;
	local sortkey = args.sortkey or sortkey(abbr or &amp;quot;&amp;quot;)&lt;br /&gt;
	local shield = roadDataModule.shield(args)&lt;br /&gt;
	local container = mw.html.create(&amp;#039;span&amp;#039;):cssText(&amp;#039;display: inline-block; vertical-align: baseline; line-height: 0; text-align: center;&amp;#039;):wikitext(shield)&lt;br /&gt;
&lt;br /&gt;
	return format(&amp;#039;!scope=&amp;quot;row&amp;quot; class=&amp;quot;nowrap&amp;quot; data-sort-value=&amp;quot;%s&amp;quot;|%s %s&amp;#039;,&lt;br /&gt;
			sortkey, tostring(container), link)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Derive the anchor from a given route.&lt;br /&gt;
local function anchor(routeType, routeNo)&lt;br /&gt;
	-- Split `routeNo` into three possibly empty parts, with number in the middle.&lt;br /&gt;
	local prefix, num, suffix = mw.ustring.match(routeNo, &amp;quot;([^0-9]*)(%d*)(.*)&amp;quot;)&lt;br /&gt;
	-- Zero-pad route number to 4 digits if `routeNo` does contain a number.&lt;br /&gt;
	num = tonumber(num)&lt;br /&gt;
	num = type(num) == &amp;quot;number&amp;quot; and format(&amp;quot;%04d&amp;quot;, num) or &amp;quot;&amp;quot;&lt;br /&gt;
	-- The anchor is the concatenation of `type` and zero-padded `routeNo`.&lt;br /&gt;
	return format(&amp;quot;%s%s%s%s&amp;quot;, routeType, prefix, num, suffix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._row(args)&lt;br /&gt;
	local established = args.established&lt;br /&gt;
	local decommissioned = args.decommissioned&lt;br /&gt;
	local routeStatus = getRouteStatus(established, decommissioned)&lt;br /&gt;
	local anchor = args.anchor or anchor(args.type, args.route)&lt;br /&gt;
	local rowdef = format(&amp;#039;%s id=&amp;quot;%s&amp;quot;&amp;#039;, routeStatus.row, anchor)&lt;br /&gt;
	local route = route(args)&lt;br /&gt;
	local length = length(args)&lt;br /&gt;
	local termini = termini(args)&lt;br /&gt;
	local localname = localname(args)&lt;br /&gt;
	local dates = dates(established, decommissioned, routeStatus, args)&lt;br /&gt;
	local notes = notes(args.notes)&lt;br /&gt;
&lt;br /&gt;
	local row = {rowdef, route, length, termini, localname, dates, notes}&lt;br /&gt;
	return concat(row, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.row(frame)&lt;br /&gt;
	-- Import module function to work with passed arguments&lt;br /&gt;
	local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	local args = getArgs(frame) -- Gather passed arguments into easy-to-use table&lt;br /&gt;
	return p._row(args);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Fredddie</name></author>
	</entry>
</feed>