<?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%3APTV_route</id>
	<title>Module:PTV route - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3APTV_route"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:PTV_route&amp;action=history"/>
	<updated>2026-05-25T06:29:35Z</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:PTV_route&amp;diff=144222&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:PTV_route&amp;diff=144222&amp;oldid=prev"/>
		<updated>2022-10-21T21:57:43Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local data = mw.loadData(&amp;#039;Module:PTV route/data&amp;#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local INVALID_ROUTE_CATEGORY = &amp;#039;PTV route templates with invalid routes&amp;#039;&lt;br /&gt;
local DEPRECATED_PARAMETER_CATEGORY = &amp;#039;PTV route templates with deprecated parameters&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local function makeExternalLink(url, display)&lt;br /&gt;
	-- Make an external link, given a URL and an optional display string.&lt;br /&gt;
	if display then&lt;br /&gt;
		return string.format(&amp;#039;[%s %s]&amp;#039;, url, display)&lt;br /&gt;
	else&lt;br /&gt;
		return string.format(&amp;#039;[%s]&amp;#039;, url)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makePtvUrl(routeData)&lt;br /&gt;
	-- Generate the URL for a PTV route page.&lt;br /&gt;
	return &amp;#039;https://www.ptv.vic.gov.au/route/&amp;#039; .. routeData.page&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeDisplayText(args, routeData)&lt;br /&gt;
	-- Make the display text for a link to a PTV route page.&lt;br /&gt;
	if args.display == &amp;#039;num&amp;#039; or args.display == &amp;#039;number&amp;#039; or args.numtext then&lt;br /&gt;
		return args.route&lt;br /&gt;
	elseif args.display == &amp;#039;desc&amp;#039; or args.display == &amp;#039;description&amp;#039; or args.deftext then&lt;br /&gt;
		return routeData.text&lt;br /&gt;
	else&lt;br /&gt;
		return args.text&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRouteData(mode, route)&lt;br /&gt;
	-- Get the route data for a route from the data module.&lt;br /&gt;
	if not route then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	mode = mode or &amp;#039;bus&amp;#039;&lt;br /&gt;
	local modeData = data[mode]&lt;br /&gt;
	if not modeData then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return modeData[route]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makePtvLink(args, routeData)&lt;br /&gt;
	-- Make a link to a PTV route page.&lt;br /&gt;
	local url = makePtvUrl(routeData)&lt;br /&gt;
	local display = makeDisplayText(args, routeData)&lt;br /&gt;
	return makeExternalLink(url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makePtvCitation(args, routeData)&lt;br /&gt;
	-- Make a citation for a PTV route page.&lt;br /&gt;
	local title&lt;br /&gt;
	if args.route == routeData.text then&lt;br /&gt;
		title = routeData.text&lt;br /&gt;
	else&lt;br /&gt;
		title = string.format(&amp;#039;%s %s&amp;#039;, args.route, routeData.text)&lt;br /&gt;
	end&lt;br /&gt;
	local citeArgs = {&lt;br /&gt;
		title = title,&lt;br /&gt;
		url = makePtvUrl(routeData),&lt;br /&gt;
		publisher = &amp;#039;Public Transport Victoria&amp;#039;,&lt;br /&gt;
		df = &amp;#039;dmy-all&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	for _, field in ipairs{&lt;br /&gt;
		&amp;#039;access-date&amp;#039;,&lt;br /&gt;
		&amp;#039;accessdate&amp;#039;,&lt;br /&gt;
		&amp;#039;archive-date&amp;#039;,&lt;br /&gt;
		&amp;#039;archivedate&amp;#039;,&lt;br /&gt;
		&amp;#039;archive-url&amp;#039;,&lt;br /&gt;
		&amp;#039;archiveurl&amp;#039;,&lt;br /&gt;
		&amp;#039;dead-url&amp;#039;,&lt;br /&gt;
		&amp;#039;deadurl&amp;#039;,&lt;br /&gt;
	} do&lt;br /&gt;
		citeArgs[field] = args[field]&lt;br /&gt;
	end&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
		title = &amp;#039;Cite web&amp;#039;,&lt;br /&gt;
		args = citeArgs,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function normalizeArguments(args)&lt;br /&gt;
	-- Normalize the arguments that we received.&lt;br /&gt;
	-- First, make a copy of the table so we don&amp;#039;t alter our caller&amp;#039;s data.&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for key, value in pairs(args) do&lt;br /&gt;
		ret[key] = value&lt;br /&gt;
	end&lt;br /&gt;
	-- Set aliases&lt;br /&gt;
	ret.route = ret.route or ret[1]&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasDeprecatedParameters(args)&lt;br /&gt;
	-- Whether the argument table contains deprecated parameters.&lt;br /&gt;
	return args.numtext or args.deftext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(category)&lt;br /&gt;
	-- Make a category wikilink.&lt;br /&gt;
	return string.format(&amp;#039;[[Category:%s]]&amp;#039;, category)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategory(category)&lt;br /&gt;
	-- Render a tracking category, if the current page is in mainspace.&lt;br /&gt;
	if mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
		return makeCategoryLink(category)&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;
local function renderPtvTemplate(args, renderFunc)&lt;br /&gt;
	-- Render the output of a PTV template, given a table of arguments and a&lt;br /&gt;
	-- function to render the template from the arguments and route data.&lt;br /&gt;
	args = normalizeArguments(args)&lt;br /&gt;
	local routeData = getRouteData(args.mode, args.route)&lt;br /&gt;
	if not routeData then&lt;br /&gt;
		return renderTrackingCategory(INVALID_ROUTE_CATEGORY)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
	ret = ret .. renderFunc(args, routeData)&lt;br /&gt;
	if hasDeprecatedParameters(args) then&lt;br /&gt;
		ret = ret .. renderTrackingCategory(DEPRECATED_PARAMETER_CATEGORY)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Generate a link to a Public Transport Victoria route.&lt;br /&gt;
	return renderPtvTemplate(args, makePtvLink)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._cite(args)&lt;br /&gt;
	-- Generate a citation for a Public Transport Victoria route.&lt;br /&gt;
	return renderPtvTemplate(args, makePtvCitation)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeInvokableFunction(func, wrappers)&lt;br /&gt;
	-- Make a function that can be accessed with #invoke.&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
			wrappers = wrappers,&lt;br /&gt;
		})&lt;br /&gt;
		return func(args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.main = makeInvokableFunction(p._main, &amp;#039;Template:PTV route&amp;#039;)&lt;br /&gt;
p.cite = makeInvokableFunction(p._cite, &amp;#039;Template:Cite PTV route&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>