Jump to content

Module:XfD old: Difference between revisions

From Wikipedia, the free encyclopedia
Implementing several feature requests by BrownHairedGirl on talk page
m Protected "Module:XfD old": High-risk Lua module: maintains statistics on XFD processes ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
(No difference)

Revision as of 02:46, 15 March 2019

local p = {}
local tableTools = require("Module:TableTools")
local ymd = require("Module:YMD to ISO")._main
local lang = mw.getContentLanguage()
local function getlog(name) 
	 return mw.ustring.match(name, "Log/(.*)")
end
function sortkey(name1, name2)
	local key1 = ymd(getlog(name1))
	local key2 = ymd(getlog(name2))
	return key1 > key2
end
function p._main(frame, makeoutput)
	local t = frame.args.title or frame:getParent():getTitle()
	local content = mw.title.new(t .. "/Old unclosed discussions"):getContent();
	local m = mw.ustring.gmatch(content, "* %[%[(" .. t .. "/Log/[^#]*)#%{%{anchorencode:([^}]*)")
	local seen = {}
	while true do
		local logpage, header = m()
		if not logpage then
			break
		end
		if seen[logpage] == nil then
			seen[logpage] = {}
		end
		seen[logpage][#seen[logpage]+1] = header
	end
	local out = ""
	for k, v in tableTools.sortedPairs(seen, sortkey) do
		out = out .. makeoutput(k, v)
	end
	return mw.text.trim(out)
end
function p.list(frame) 
	local function listoutput(k, v)  
		return "* [[" .. k .. "]] (" .. tostring(#v) .. " open) \n"
	end
	return p._main(frame, listoutput)
end
function p.bymonth(frame)
	local currentmonth = nil
	local currentcount = 0
	local function bymonthoutput(k, v)
		local monthname = lang:formatDate("F Y",ymd(getlog(k)))
		local out
		if currentmonthname == nil then
			currentmonthname = monthname
		elseif currentmonthname ~= monthname then
			local o = string.format("\n* %s (%i)", currentmonthname, currentcount)
			currentmonthname = monthname
			currentcount = #v
			return o
		end
		currentcount = currentcount + #v
		return ""
	end
	local out = p._main(frame, bymonthoutput)
	if currentcount > 0 then
		out = out .. string.format("\n* %s (%i)", currentmonthname, currentcount)
	end
	return out
end
function p.onemonth(frame) 
	local month = frame.args.month
	if not month then
		error("|month= is required")
	elseif month ~= lang:formatDate("F Y",month) then
		error("Illegal month format")
	end
	local count = 0
	local function bymonthoutput(k, v)
		if lang:formatDate("F Y",ymd(getlog(k))) == month then
			count = count + #v
		end
		return ""
	end
	p._main(frame, bymonthoutput)
	return count
end
function p.transclude(frame) 
	local function transoutput(k, v)
		local out = ""
		out = out .. "=== [[" .. k .. "|" .. getlog(k):sub(5) .. "]] ===\n"
		for _, discussion in pairs(v) do
			out = out .. "==== " .. discussion .. " ====\n"
			out = out .. frame:callParserFunction("#section-h", k, discussion)
			out = out .. "\n"
		end
		return out
	end
	return p._main(frame, transoutput)
end
return p