Module:Arbitration motion implementation notes/Motion/Automatic
(Redirected from Module:ARCAImplNotes/Motion/Automatic)
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.main( frame )
local args = getArgs(frame)
local page = args["page"] or ""
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 escape = mw.ustring.gsub( section, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
for _, p in ipairs({
"Wikipedia:Arbitration/Requests/Clarification and Amendment",
"Wikipedia:Arbitration/Requests/Case",
"Wikipedia:Arbitration/Requests/Motions"
}) do
if page == "" then
local text = mw.title.new(p):getContent()
local _, sections = mw.ustring.gsub(text, ".*%=%= *"..escape, "")
if sections ~= 0 then
page = p
end
end
end
if page == "ARM" then
page = "Wikipedia:Arbitration/Requests/Motions"
elseif page == "ARC" then
page = "Wikipedia:Arbitration/Requests/Case"
elseif page == "ARCA" or page == "" then
page = "Wikipedia:Arbitration/Requests/Clarification and Amendment"
end
local text = mw.title.new(page):getContent()
local sectionText, matches = mw.ustring.gsub(text, ".*%=%= *"..escape.." *%=%=", "")
sectionText = mw.ustring.gsub(sectionText, "[;']'?'?Arbitrator discussion.*", "")
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, "")
local supportToOppose = tonumber(args["support-to-oppose"] or 0)
support = support - supportToOppose
oppose = oppose + supportToOppose
if matches ~= 1 then
support = '?</td>'
..'<td>?</td>'
..'<td>?</td>'
..'<td style="background-color: #ededfd">[[File:Symbol question.svg|20px|link=]]</td>'
..'<td>?</td>'
..'<td style="background-color: #ededfd"><span class="error">Error: Found '
..tostring(matches)
..' sections on [['
..tostring(page)
..']] with heading<br><code>'
..tostring(section)
..'</code>'
..frame:expandTemplate{title="If preview", args={"<br>If previewing a section edit, outside sections are not detected."}}
..'</span></td></tr><tr style="display:none">'
end
local autoNotes = ""
local activeArbsString
if args["autonotes"] then
activeArbsString = mw.title.new("Wikipedia:Arbitration/Requests/Motions/Implementation notes"):getContent()
activeArbsString = string.gsub(activeArbsString, ".*" .. args["autonotes"] .. ".*Active arbitrators(.*)\n==.*", "%1")
local activeArbs = {}
for capture in mw.ustring.gmatch(activeArbsString, "%|.-%}" ) do
activeArbs[#activeArbs+1] = mw.ustring.gsub(capture, "[%|%}]", "")
end
local abbreviations = require('Module:Arbitrator abbreviations')
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: 35px; 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: 35px; 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: 35px; 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: 35px; 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
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
elseif ret == "call" then
local template = "Arbitration motion implementation notes/Motion"
local params = {}
params["anchor"] = args["anchor"] or args["name"] or "{{{name}}}"
params["name"] = args["name"] or "{{{name}}}"
params["support"] = support
params["oppose"] = oppose
params["abstain"] = abstain
params["notes"] = (args["notes"] or "") .. autoNotes
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}
else
return ""
end
end
return p