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:XfD old/AfD and MfD

Permanently protected module
From Wikipedia, the free encyclopedia
-- Various hacky solutions to allow AfD and MfD to show up on [[Template:XFD Backlog]]
-- AfD is easy, as [[User:Mathbot]] already summarizes the total on each day
local p = {}
local lang = mw.getContentLanguage()
function p.afd(frame) 
	local month = frame.args.month
	local pat
	if month == "total" then
		pat = "%(([0-9]+) open"
	else
		month = lang:formatDate("Y F", month)
		pat = "%[%[Wikipedia:Articles for deletion/Log/" .. month .. "[^%]]*%]%] %(([0-9]+) open /"
	end
	local content = mw.title.new("Wikipedia:Articles for deletion/Old"):getContent()
	local count = 0
	for daycount in content:gmatch(pat) do
		count = count + daycount
	end
	return count
end
-- MfD is much harder, because the only list of all active MfDs is the main
-- [[Wikipedia:Miscellany for deletion]] page itself
function p.mfd(frame)
	local month = frame.args.month
	local content = mw.title.new("Wikipedia:Miscellany for deletion"):getContent()
	local rightmonth = true
	local pat;
	if month ~= "total" then
		pat = lang:formatDate("^=== ?F [0-9]*, Y ?===$", month)
		rightmonth = false
	end
	local _, endindex = content:find("==Old business==")
	local count = 0
	for line in mw.text.gsplit(content:sub(endindex,#content), "\n") do
		if line:find("{{Wikipedia:Miscellany for deletion/") and rightmonth then
			count = count + 1
		elseif month == "total" then
			-- don't worry about month section headers
		elseif line:find(pat) then
			rightmonth = true
		elseif line:find("=== ?.* ?===") then
			-- A section header for the wrong month
			if rightmonth then
				-- We're now looking at MfDs before the month in question
				break
			end
			-- We still haven't reached the month in question yet
		end
	end
	return count
end
-- RfD is even worse, since I have to manually parse all log pages
-- and "Old" discussions aren't displayed separately from "Current" ones
function p.rfd(frame)
	local month = frame.args.month
	local content = mw.title.new("Wikipedia:Redirects for discussion"):getContent()
	-- First find the daily pages
	local ymd = require("Module:YMD to ISO")._main
	local lang = mw.getContentLanguage()
	local threshold = os.date("%F",os.time() - (86400*7))
	local total = 0
	for line in content:gmatch("{{Wikipedia:Redirects for discussion/Log/.-}}") do
		local datestamp = ymd(line:match("{{Wikipedia:Redirects for discussion/Log/(.-)}}"))
		if datestamp >= threshold then
			-- These dicussions aren't seven days old yet
		elseif month == "total" or month == lang:formatDate("F Y", datestamp) then
			local dayContent = mw.title.new(line:match("{{(.*)}}")):getContent()
			-- unreliable but performance is important
			local _, sectionHeads = dayContent:gsub("==== ?[^\n]- ?====", "")
			local _, closeBoxes = dayContent:gsub("boilerplate rfd vfd xfd%-closed", "")
			local _, relisted = dayContent:gsub("%[%[File:Symbol move vote.svg|16px|link=|alt=%]%] '''Relisted'''", "")
			total = total + (sectionHeads - closeBoxes - relisted)
		-- else discussion is wrong month
		end
	end
	return total
end
return p