<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/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://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ACasenav"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Casenav&amp;action=history"/>
	<updated>2026-06-29T04:24:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Casenav&amp;diff=471187&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Casenav&amp;diff=471187&amp;oldid=prev"/>
		<updated>2021-07-15T20:54:25Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&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('#titleparts', {title.fullText, 4, 1}))&lt;br /&gt;
	local casename = frame:callParserFunction('#titleparts', {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 .. '/Casenav')&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 = 'ArbCom navigation', 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 = 'Documentation',&lt;br /&gt;
			args = {'User:Bradv/sandbox/casenav/doc'}&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 == 'Proposed decision' 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 == 'Proposed decision' 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, '%{%{(.*)%}%}')&lt;br /&gt;
		for str in mw.text.gsplit(temp, '|') do&lt;br /&gt;
			local pair = mw.text.split(str, '=')&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['clerks'])&lt;br /&gt;
	people.drafters = users(args['drafters'])&lt;br /&gt;
	people.active = users(args['active'])&lt;br /&gt;
	people.inactive = users(args['inactive'])&lt;br /&gt;
	people.recused = users(args['recused'])&lt;br /&gt;
	&lt;br /&gt;
	dates = {}&lt;br /&gt;
	dates.opened = args['date-opened']&lt;br /&gt;
	dates.evidence = args['date-evidence']&lt;br /&gt;
	dates.workshop = args['date-workshop']&lt;br /&gt;
	dates.pd = args['date-pd']&lt;br /&gt;
	dates.suspended = args['date-suspended']&lt;br /&gt;
	dates.closed = args['date-closed']&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, 'clerk')==1 and is_set(v) then&lt;br /&gt;
				table.insert(people.clerks, link('User:' .. 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, 'draft')==1 and is_set(v) then&lt;br /&gt;
				table.insert(people.drafters, link('User:' .. 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='margin-right: 1em; float: middle;'&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('div')&lt;br /&gt;
	div&lt;br /&gt;
		:css('width', '100%')&lt;br /&gt;
		:css('background', 'ivory')&lt;br /&gt;
		:css('border', '1px solid #AAA')&lt;br /&gt;
		:css('margin-bottom', '1em')&lt;br /&gt;
		:css('padding', '1em 0')&lt;br /&gt;
		:wikitext(caselinks())&lt;br /&gt;
		:wikitext(casedates())&lt;br /&gt;
		:wikitext(casepeople())&lt;br /&gt;
		:tag('span')&lt;br /&gt;
			:wikitext('[' .. casenav:fullUrl('action=edit&amp;amp;preload=User:Bradv/sandbox/casenav/preload') .. ' edit]')&lt;br /&gt;
			:addClass('plainlinks')&lt;br /&gt;
			:cssText('float: right; font-variant: small-caps; font-size: .8em')&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 = 'Casenav/PD', 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 = 'Casenav/Talk'}&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;'''Active:'''\n&amp;quot;)&lt;br /&gt;
	for i = 1, #people.active do&lt;br /&gt;
		table.insert(output, ':#' .. people.active[i] .. '\n')&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &amp;quot;\n'''Inactive:'''\n&amp;quot;)&lt;br /&gt;
	for i = 1, #people.inactive do&lt;br /&gt;
		table.insert(output, ':#' .. people.inactive[i] .. '\n')&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &amp;quot;\n'''Recused:'''\n&amp;quot;)&lt;br /&gt;
	for i = 1, #people.recused do&lt;br /&gt;
		table.insert(output, ':#' .. people.recused[i] .. '\n')&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('Wikipedia:Arbitration Committee/Members')&lt;br /&gt;
	local content = acm:getContent()&lt;br /&gt;
	for str in mw.ustring.gmatch(content, '%{%{user|(.-)%}%}') 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='collapse', args={title='List of all current arbitrators (from [[WP:AC/M]])', content='&amp;lt;pre&amp;gt;' .. table.concat(result, '\n') .. '&amp;lt;/pre&amp;gt;'}}&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, 'Main case page'))&lt;br /&gt;
	table.insert(result, link(casePath .. '/Evidence', 'Evidence'))&lt;br /&gt;
	table.insert(result, link(casePath .. '/Workshop', 'Workshop'))&lt;br /&gt;
	table.insert(result, link(casePath .. '/Proposed decision', 'Proposed decision'))&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create('div')&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:wikitext(table.concat(result, ' — '))&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;'''Dates:''' &amp;quot; ..&lt;br /&gt;
			'Opened ' .. dates.opened ..&lt;br /&gt;
			' • ' ..&lt;br /&gt;
			'Closed ' .. dates.closed&lt;br /&gt;
	elseif is_set(dates.suspended) then&lt;br /&gt;
		result = &amp;quot;'''Case suspended'''&amp;quot;&lt;br /&gt;
	elseif is_set(dates.opened) then&lt;br /&gt;
		local t = {}&lt;br /&gt;
		table.insert(t, &amp;quot;'''Target dates:''' &amp;quot; .. 'Opened ' .. dates.opened)&lt;br /&gt;
		if is_set(dates.evidence) then&lt;br /&gt;
			table.insert(t, 'Evidence due ' .. dates.evidence)&lt;br /&gt;
		end&lt;br /&gt;
		if is_set(dates.workshop) then&lt;br /&gt;
			table.insert(t, 'Workshop closes ' .. dates.workshop)&lt;br /&gt;
		end&lt;br /&gt;
		if is_set(dates.pd) then&lt;br /&gt;
			table.insert(t, 'Proposed decision expected ' .. dates.pd)&lt;br /&gt;
		end&lt;br /&gt;
		result = table.concat(t, ' • ')&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('div')&lt;br /&gt;
		:css('text-align', 'center')&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;'''Case clerk:''' ''none''&amp;quot;)&lt;br /&gt;
	elseif #people.clerks==1 then&lt;br /&gt;
		table.insert(s, &amp;quot;'''Case clerk:''' &amp;quot; ..	table.concat(people.clerks))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(s, &amp;quot;'''Case clerks:''' &amp;quot; .. table.concat(people.clerks, ' &amp;amp; '))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #people.drafters==0 then&lt;br /&gt;
		table.insert(s, &amp;quot;'''Drafting arbitrator:''' ''none''&amp;quot;)&lt;br /&gt;
	elseif #people.drafters==1 then&lt;br /&gt;
		table.insert(s, &amp;quot;'''Drafting arbitrator:''' &amp;quot; .. table.concat(people.drafters))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(s, &amp;quot;'''Drafting arbitrators:''' &amp;quot; .. table.concat(people.drafters, ' &amp;amp; '))&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	local div = mw.html.create('div')&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:wikitext(table.concat(s, ' — '))&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, '\n')&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('User:' .. 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('small')&lt;br /&gt;
	small&lt;br /&gt;
		:wikitext(' ([[' .. title.talkPageTitle.fullText .. '|Talk]])')&lt;br /&gt;
	return '[[' .. title.fullText .. '|' .. label .. ']]' .. 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 == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>