Module:XfD old/AfD and MfD

-- 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