<?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%3ACasenav</id>
	<title>Module:Casenav - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ACasenav"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Casenav&amp;action=history"/>
	<updated>2026-05-28T11:57:36Z</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:Casenav&amp;diff=135484&amp;oldid=prev</id>
		<title>imported&gt;Bradv: .</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Casenav&amp;diff=135484&amp;oldid=prev"/>
		<updated>2020-12-13T16:57:14Z</updated>

		<summary type="html">&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local Frame&lt;br /&gt;
&lt;br /&gt;
local casePath &lt;br /&gt;
local people, dates&lt;br /&gt;
&lt;br /&gt;
function p.main ( frame )&lt;br /&gt;
	Frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local base = mw.title.new(frame:callParserFunction(&amp;#039;#titleparts&amp;#039;, {title.fullText, 4, 1}))&lt;br /&gt;
	local casename = frame:callParserFunction(&amp;#039;#titleparts&amp;#039;, {title.fullText, 1, 4})&lt;br /&gt;
	if title.isTalkPage then&lt;br /&gt;
		casePath = base.subjectPageTitle.fullText&lt;br /&gt;
	else&lt;br /&gt;
		casePath = base.fullText&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local casenav = mw.title.new(casePath .. &amp;#039;/Casenav&amp;#039;)&lt;br /&gt;
	retrieveArgs(casenav, frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local output = {}&lt;br /&gt;
	table.insert(output, makeShortcut(casename))&lt;br /&gt;
	table.insert(output, makeCaseNav(casenav))&lt;br /&gt;
	table.insert(output, frame:expandTemplate{title = &amp;#039;ArbCom navigation&amp;#039;, args = {}})&lt;br /&gt;
	&lt;br /&gt;
	if title == casenav then&lt;br /&gt;
		table.insert(output, makeArbList())&lt;br /&gt;
		table.insert(output, listAllArbs())&lt;br /&gt;
		table.insert(output, frame:expandTemplate{&lt;br /&gt;
			title = &amp;#039;Documentation&amp;#039;,&lt;br /&gt;
			args = {&amp;#039;User:Bradv/sandbox/casenav/doc&amp;#039;}&lt;br /&gt;
		})&lt;br /&gt;
	elseif title.isTalkPage then&lt;br /&gt;
		--on all talk pages&lt;br /&gt;
		table.insert(output, makeTalk())&lt;br /&gt;
		&lt;br /&gt;
		--on PD talk&lt;br /&gt;
		if title.subpageText == &amp;#039;Proposed decision&amp;#039; then&lt;br /&gt;
			table.insert(output, makeArbList())&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--on PD page&lt;br /&gt;
		if title.subpageText == &amp;#039;Proposed decision&amp;#039; then&lt;br /&gt;
			table.insert(output, makePD())&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function retrieveArgs(casenav, frameArgs)&lt;br /&gt;
	--load local args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(frameArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--casenav args override local args&lt;br /&gt;
	if casenav.exists then&lt;br /&gt;
		local content = casenav:getContent()&lt;br /&gt;
		local temp = mw.ustring.match(content, &amp;#039;%{%{(.*)%}%}&amp;#039;)&lt;br /&gt;
		for str in mw.text.gsplit(temp, &amp;#039;|&amp;#039;) do&lt;br /&gt;
			local pair = mw.text.split(str, &amp;#039;=&amp;#039;)&lt;br /&gt;
			if #pair==2 then&lt;br /&gt;
				args[mw.text.trim(pair[1])] = mw.text.trim(pair[2])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--set module variables&lt;br /&gt;
	people = {}&lt;br /&gt;
	people.clerks = users(args[&amp;#039;clerks&amp;#039;])&lt;br /&gt;
	people.drafters = users(args[&amp;#039;drafters&amp;#039;])&lt;br /&gt;
	people.active = users(args[&amp;#039;active&amp;#039;])&lt;br /&gt;
	people.inactive = users(args[&amp;#039;inactive&amp;#039;])&lt;br /&gt;
	people.recused = users(args[&amp;#039;recused&amp;#039;])&lt;br /&gt;
	&lt;br /&gt;
	dates = {}&lt;br /&gt;
	dates.opened = args[&amp;#039;date-opened&amp;#039;]&lt;br /&gt;
	dates.evidence = args[&amp;#039;date-evidence&amp;#039;]&lt;br /&gt;
	dates.workshop = args[&amp;#039;date-workshop&amp;#039;]&lt;br /&gt;
	dates.pd = args[&amp;#039;date-pd&amp;#039;]&lt;br /&gt;
	dates.suspended = args[&amp;#039;date-suspended&amp;#039;]&lt;br /&gt;
	dates.closed = args[&amp;#039;date-closed&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
	--support legacy arguments&lt;br /&gt;
	if #people.clerks==0 then&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if mw.ustring.find(k, &amp;#039;clerk&amp;#039;)==1 and is_set(v) then&lt;br /&gt;
				table.insert(people.clerks, link(&amp;#039;User:&amp;#039; .. v, v))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #people.drafters==0 then&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if mw.ustring.find(k, &amp;#039;draft&amp;#039;)==1 and is_set(v) then&lt;br /&gt;
				table.insert(people.drafters, link(&amp;#039;User:&amp;#039; .. v, v))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeShortcut(casename)&lt;br /&gt;
	return Frame:preprocess(&amp;quot;{{#if:{{Casenav/shortcut|&amp;quot; .. casename &lt;br /&gt;
	.. &amp;quot;}}|&amp;lt;div style=&amp;#039;margin-right: 1em; float: middle;&amp;#039;&amp;gt;{{shortcut|{{Casenav/shortcut|&amp;quot; &lt;br /&gt;
	.. casename .. &amp;quot;}}}}&amp;lt;/div&amp;gt;}}&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeCaseNav(casenav)&lt;br /&gt;
	local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	div&lt;br /&gt;
		:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;background&amp;#039;, &amp;#039;ivory&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;border&amp;#039;, &amp;#039;1px solid #AAA&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;margin-bottom&amp;#039;, &amp;#039;1em&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;padding&amp;#039;, &amp;#039;1em 0&amp;#039;)&lt;br /&gt;
		:wikitext(caselinks())&lt;br /&gt;
		:wikitext(casedates())&lt;br /&gt;
		:wikitext(casepeople())&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;[&amp;#039; .. casenav:fullUrl(&amp;#039;action=edit&amp;amp;preload=User:Bradv/sandbox/casenav/preload&amp;#039;) .. &amp;#039; edit]&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
			:cssText(&amp;#039;float: right; font-variant: small-caps; font-size: .8em&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		:done()&lt;br /&gt;
	return tostring(div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makePD()&lt;br /&gt;
	return Frame:expandTemplate{title = &amp;#039;Casenav/PD&amp;#039;, args = {&lt;br /&gt;
		active = #people.active, &lt;br /&gt;
		inactive = #people.inactive,&lt;br /&gt;
		recused = #people.recused&lt;br /&gt;
	}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeTalk()&lt;br /&gt;
	return Frame:expandTemplate{title = &amp;#039;Casenav/Talk&amp;#039;}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeArbList()&lt;br /&gt;
	local output = {}&lt;br /&gt;
	table.insert(output, &amp;quot;\n==Arbitrators active on this case==\n&amp;quot;)&lt;br /&gt;
	table.insert(output, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Active:&amp;#039;&amp;#039;&amp;#039;\n&amp;quot;)&lt;br /&gt;
	for i = 1, #people.active do&lt;br /&gt;
		table.insert(output, &amp;#039;:#&amp;#039; .. people.active[i] .. &amp;#039;\n&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &amp;quot;\n&amp;#039;&amp;#039;&amp;#039;Inactive:&amp;#039;&amp;#039;&amp;#039;\n&amp;quot;)&lt;br /&gt;
	for i = 1, #people.inactive do&lt;br /&gt;
		table.insert(output, &amp;#039;:#&amp;#039; .. people.inactive[i] .. &amp;#039;\n&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &amp;quot;\n&amp;#039;&amp;#039;&amp;#039;Recused:&amp;#039;&amp;#039;&amp;#039;\n&amp;quot;)&lt;br /&gt;
	for i = 1, #people.recused do&lt;br /&gt;
		table.insert(output, &amp;#039;:#&amp;#039; .. people.recused[i] .. &amp;#039;\n&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
	return table.concat(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function listAllArbs()&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local acm = mw.title.new(&amp;#039;Wikipedia:Arbitration Committee/Members&amp;#039;)&lt;br /&gt;
	local content = acm:getContent()&lt;br /&gt;
	for str in mw.ustring.gmatch(content, &amp;#039;%{%{user|(.-)%}%}&amp;#039;) do&lt;br /&gt;
		table.insert(result, str)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(result)&lt;br /&gt;
	return Frame:expandTemplate{title=&amp;#039;collapse&amp;#039;, args={title=&amp;#039;List of all current arbitrators (from [[WP:AC/M]])&amp;#039;, content=&amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. table.concat(result, &amp;#039;\n&amp;#039;) .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function caselinks()&lt;br /&gt;
	local result = {}&lt;br /&gt;
	table.insert(result, link(casePath, &amp;#039;Main case page&amp;#039;))&lt;br /&gt;
	table.insert(result, link(casePath .. &amp;#039;/Evidence&amp;#039;, &amp;#039;Evidence&amp;#039;))&lt;br /&gt;
	table.insert(result, link(casePath .. &amp;#039;/Workshop&amp;#039;, &amp;#039;Workshop&amp;#039;))&lt;br /&gt;
	table.insert(result, link(casePath .. &amp;#039;/Proposed decision&amp;#039;, &amp;#039;Proposed decision&amp;#039;))&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
		:wikitext(table.concat(result, &amp;#039; — &amp;#039;))&lt;br /&gt;
	return tostring(div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function casedates (opened, evidence, workshop, pd, suspended, closed)&lt;br /&gt;
	local result&lt;br /&gt;
	if is_set(dates.closed) then&lt;br /&gt;
		result = &amp;quot;&amp;#039;&amp;#039;&amp;#039;Dates:&amp;#039;&amp;#039;&amp;#039; &amp;quot; ..&lt;br /&gt;
			&amp;#039;Opened &amp;#039; .. dates.opened ..&lt;br /&gt;
			&amp;#039; • &amp;#039; ..&lt;br /&gt;
			&amp;#039;Closed &amp;#039; .. dates.closed&lt;br /&gt;
	elseif is_set(dates.suspended) then&lt;br /&gt;
		result = &amp;quot;&amp;#039;&amp;#039;&amp;#039;Case suspended&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	elseif is_set(dates.opened) then&lt;br /&gt;
		local t = {}&lt;br /&gt;
		table.insert(t, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Target dates:&amp;#039;&amp;#039;&amp;#039; &amp;quot; .. &amp;#039;Opened &amp;#039; .. dates.opened)&lt;br /&gt;
		if is_set(dates.evidence) then&lt;br /&gt;
			table.insert(t, &amp;#039;Evidence due &amp;#039; .. dates.evidence)&lt;br /&gt;
		end&lt;br /&gt;
		if is_set(dates.workshop) then&lt;br /&gt;
			table.insert(t, &amp;#039;Workshop closes &amp;#039; .. dates.workshop)&lt;br /&gt;
		end&lt;br /&gt;
		if is_set(dates.pd) then&lt;br /&gt;
			table.insert(t, &amp;#039;Proposed decision expected &amp;#039; .. dates.pd)&lt;br /&gt;
		end&lt;br /&gt;
		result = table.concat(t, &amp;#039; • &amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
		:wikitext(result)&lt;br /&gt;
	return tostring(div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function casepeople ()&lt;br /&gt;
	local s = {}&lt;br /&gt;
	if #people.clerks==0 then&lt;br /&gt;
		table.insert(s, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Case clerk:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
	elseif #people.clerks==1 then&lt;br /&gt;
		table.insert(s, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Case clerk:&amp;#039;&amp;#039;&amp;#039; &amp;quot; ..	table.concat(people.clerks))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(s, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Case clerks:&amp;#039;&amp;#039;&amp;#039; &amp;quot; .. table.concat(people.clerks, &amp;#039; &amp;amp; &amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #people.drafters==0 then&lt;br /&gt;
		table.insert(s, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Drafting arbitrator:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
	elseif #people.drafters==1 then&lt;br /&gt;
		table.insert(s, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Drafting arbitrator:&amp;#039;&amp;#039;&amp;#039; &amp;quot; .. table.concat(people.drafters))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(s, &amp;quot;&amp;#039;&amp;#039;&amp;#039;Drafting arbitrators:&amp;#039;&amp;#039;&amp;#039; &amp;quot; .. table.concat(people.drafters, &amp;#039; &amp;amp; &amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
		:wikitext(table.concat(s, &amp;#039; — &amp;#039;))&lt;br /&gt;
	return tostring(div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function users ( list )&lt;br /&gt;
	local result = {}&lt;br /&gt;
	if list then&lt;br /&gt;
		local tbl = mw.text.split(list, &amp;#039;\n&amp;#039;)&lt;br /&gt;
		for i = 1, #tbl do&lt;br /&gt;
			local user = tbl[i]&lt;br /&gt;
			user = mw.text.trim(user)&lt;br /&gt;
			if is_set(user) then&lt;br /&gt;
				table.insert(result, link(&amp;#039;User:&amp;#039; .. user, user))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function link ( path, label )&lt;br /&gt;
	local title = mw.title.new(path)&lt;br /&gt;
	local small = mw.html.create(&amp;#039;small&amp;#039;)&lt;br /&gt;
	small&lt;br /&gt;
		:wikitext(&amp;#039; ([[&amp;#039; .. title.talkPageTitle.fullText .. &amp;#039;|Talk]])&amp;#039;)&lt;br /&gt;
	return &amp;#039;[[&amp;#039; .. title.fullText .. &amp;#039;|&amp;#039; .. label .. &amp;#039;]]&amp;#039; .. tostring(small)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function is_set( var )&lt;br /&gt;
	return not (var == nil or var == &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Bradv</name></author>
	</entry>
</feed>