Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Arbitration case implementation notes/Proposal/Automatic/sandbox

From Wikipedia, the free encyclopedia
local getArgs = require('Module:Arguments').getArgs

local p = {}

function p.main( frame )
	local args = getArgs(frame)
	local section = args["section"] or args["anchor"] or args["name"] or "{{{name}}}"
	local pattern = args["pattern"] or "%c:?#[^:#%*].-UTC"
	local ret = args["ret"] or ""
	local text = mw.title.getCurrentTitle():getContent()
	local escape = mw.ustring.gsub( section, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
	local sectionText, matches = mw.ustring.gsub(text, ".-%=%=%= *"..escape.." *%=%=%=", "")
	sectionText = mw.ustring.gsub(sectionText, ":Comments.*", "")
	
	local caseTitle = tostring(mw.title.getCurrentTitle())
	caseTitle = mw.ustring.gsub(caseTitle, "%/Proposed decision", "")
	caseTitle = mw.ustring.gsub(caseTitle, ".*%/", "")
	
	local supportText = mw.ustring.gsub(sectionText, ".*:Support", "Support")
	supportText = mw.ustring.gsub(supportText, ":Oppose.*", "")
	local _, support = mw.ustring.gsub(supportText, pattern, "")
	
	local opposeText = mw.ustring.gsub(sectionText, ".*:Oppose", "Oppose")
	opposeText = mw.ustring.gsub(opposeText, ":Abstain.*", "")
	local _, oppose = mw.ustring.gsub(opposeText, pattern, "")
	
	local abstainText = mw.ustring.gsub(sectionText, ".*:Abstain", "Abstain")
	local _, abstain = mw.ustring.gsub(abstainText, pattern, "")
	
	----------------------------------------------------------------------------
	--						Individual votes in notes						  --
	----------------------------------------------------------------------------
	
	local autoNotes = ""
	local casenavData = mw.title.new("Template:Arbitration case navigation/data"):getContent()
	local listed -- check if at Template:casenav/data
	casenavData, listed = mw.ustring.gsub(casenavData, ".*" .. caseTitle .. "%-list", "")
	if listed == 0 or args["skipautonotes"] then 
		casenavData = "" 
	else
		casenavData = mw.ustring.gsub(casenavData, ".*'''Active:'''", "")
		casenavData = mw.ustring.gsub(casenavData, "'''.*", "")
		
		local activeArbs = {}
		for capture in mw.ustring.gmatch(casenavData, "%|.-%}" ) do
	    	 activeArbs[#activeArbs+1] = mw.ustring.gsub(capture, "[%|%}]", "")
		end
		
		local abbreviations = {}
		abbreviations["Aoidh"] = "Aoi"
		abbreviations["Cabayi"] = "Cab"
		abbreviations["CaptainEek"] = "Cap"
		abbreviations["Daniel"] = "Dan"
		abbreviations["Elli"] = "Elli"
		abbreviations["HJ Mitchell"] = "HJM"
		abbreviations["KrakatoaKatie"] = "KK"
		abbreviations["Liz"] = "Liz"
		abbreviations["Primefac"] = "Pf"
		abbreviations["ScottishFinnishRadish"] = "SFR"
		abbreviations["Sdrqaz"] = "Sdr"
		abbreviations["Theleekycauldron"] = "leek"
		abbreviations["ToBeFree"] = "TBF"
		abbreviations["Worm That Turned"] = "WTT"
		abbreviations["Z1720"] = "Z"
		
		autoNotes = "<table class='wikitable' style='margin: 0'><tr>"
		for arb = 1, #activeArbs do
			local abbr = abbreviations[activeArbs[arb]] or activeArbs[arb]
			local found = false
			for capt in mw.ustring.gmatch(supportText, pattern) do
				capt = mw.ustring.gsub(capt, ".*ser%:", "")
				capt = mw.ustring.gsub(capt, "%|.*", "")
				if string.lower(activeArbs[arb]) == string.lower(capt) then
					autoNotes = autoNotes .. "<td style='width: fit-content; min-width: 30px; color:var(--color-base, #202122); background:var(--background-color-success-subtle, #dff2eb)' title='"..activeArbs[arb].." supported'>S<sup>"..abbr.."</sup></td>"
					found = true
				end
			end
			for capt in mw.ustring.gmatch(opposeText, pattern) do
				capt = mw.ustring.gsub(capt, ".*ser%:", "")
				capt = mw.ustring.gsub(capt, "%|.*", "")
				if string.lower(activeArbs[arb]) == string.lower(capt) then
					autoNotes = autoNotes .. "<td style='width: fit-content; min-width: 30px; color:var(--color-base, #202122); background:var(--background-color-error-subtle, #ffe9e5)' title='"..activeArbs[arb].." opposed'>O<sup>"..abbr.."</sup></td>"
					found = true
				end
			end
			for capt in mw.ustring.gmatch(abstainText, pattern) do
				capt = mw.ustring.gsub(capt, ".*ser%:", "")
				capt = mw.ustring.gsub(capt, "%|.*", "")
				if string.lower(activeArbs[arb]) == string.lower(capt) then
					autoNotes = autoNotes .. "<td style='width: fit-content; min-width: 30px; color:var(--color-base, #202122); background:var(--background-color-neutral, #eaecf0)' title='"..activeArbs[arb].." abstained'>A<sup>"..abbr.."</sup></td>"
					found = true
				end
			end
			if not found then
				autoNotes = autoNotes .. "<td style='width: fit-content; min-width: 30px; color:var(--color-base, #202122); background:var(--background-color-neutral-subtle, #f8f9fa)' title='"..activeArbs[arb].." has not voted'>_<sup>"..abbr.."</sup></td>"
			end
		end
		autoNotes = autoNotes .. "</tr></table>"
	end
	
	----------------------------------------------------------------------------
	--			Error when found 0 or multiple sections						  --
	----------------------------------------------------------------------------
	
	if matches ~= 1 then
		support = '?</td>'
		..'<td style="background-color: #fdeded">?</td>'
		..'<td style="background-color: #fdeded">?</td>'
		..'<td style="background-color: #ededfd">[[File:Symbol question.svg|20px|link=|alt=]]</td>'
		..'<td style="background-color: #fdeded">?</td>'
		..'<td style="background-color: #ededfd"><span class="error">Error: Found '
		..tostring(matches)
		..' sections with heading<br><code>==='
		..tostring(section)
		..'===</code></span></td></tr><tr style="display:none">'
	end
	
	----------------------------------------------------------------------------
	--					Output options for debugging						  --
	----------------------------------------------------------------------------
	
	if ret == "support" then
		return support
	elseif ret == "oppose" then
		return oppose
	elseif ret == "abstain" then
		return abstain
	elseif ret == "text" then
		return text
	elseif ret == "sectionText" then
		return sectionText
	elseif ret == "supportText" then
		return supportText
	elseif ret == "opposeText" then
		return opposeText
	elseif ret == "abstainText" then
		return abstainText
	else
		local template = "Arbitration Committee implementation notes/Proposal"
		local params = {}
		params["anchor"] = args["anchor"] or args["name"] or "{{{name}}}"
		params["name"] = args["name"] or "{{{name}}}"
		params["number"] = args["number"] or "{{{number}}}"
		params["support"] = support
		params["oppose"] = oppose
		params["abstain"] = abstain
		params["notes"] = autoNotes .. (args["notes"] or "")
		if args["pass"] then
			params["pass"] = args["pass"]
		end
		if args["active"] then
			params["active"] = args["active"]
		end
		return frame:expandTemplate{title=template, args=params}
	end
end

return p