Module:Top 25 report

local p = {} require("Module:No globals") local Date = require('Module:Date')._Date

local function range(date) local date2 = date + 6 if date2:text("%Y") ~= date:text("%Y") then return date:text("%B %-d, %Y") .. " to " .. date2:text("%B %-d, %Y") else if not (date2:text("%B") == date:text("%B")) then return date:text("%B %-d") .. " to " .. date2:text("%B %-d, %Y") else return date:text("%B %-d") .. " to " .. date2:text("%-d, %Y") end end end

local function line(date) local link = "[[Wikipedia:Top 25 Report/"	local range = range(date)

link = link .. range .. "|" .. range .. "]]"	return link end

local function userLink(username) return string.format("%s", username, username) end

p.list = function(frame) local text = "This article has been viewed enough times in a single week to appear in the Top 25 Report"

frame = frame:getParent local args = frame.args local list = {}

local date local isUntil = false local errors = {}

for parameter, dateStr in pairs(frame.args) do		dateStr = mw.text.trim(dateStr) if string.lower(dateStr) == "until" then isUntil = true elseif parameter == "collapse" then -- Ignore the collapse parameter else local index = string.find(dateStr,'(',1,true)			local place = ""			if index then				place = string.sub(dateStr,index+1,-2)				dateStr = string.sub(dateStr,0,index-1)			end			local newDate = Date(dateStr)			if newDate == nil then				table.insert(errors, dateStr)			else				if isUntil then					isUntil = false					date = date + 7					while date < newDate do						table.insert(list, line(date))						date = date + 7					end				end				date = newDate				local entry = line(date)				if place ~= "" then					entry = entry .. " (" .. place .. ")"				end				table.insert(list, entry)			end		end	end	local count = #list	list.style = "display:inline-block"	list = require("Module:List").makeList("horizontal", list)

if count == 0 then text = text .. "."		text = text .. list elseif count == 1 then list = " The week in which this happened: " .. list text = text .. "."		text = text .. list elseif (args["collapse"] == "yes" or (args["collapse"] == nil and count >= 10)) then text = text .. " '''" .. tostring(count) .. "''' times." text = ' ' .. text .. ' The weeks in which this happened: '.. list .. ' '	else list = " The weeks in which this happened: " .. list text = text .. " '''" .. tostring(count) .. "''' times." text = text .. list end

if mw.title.getCurrentTitle.namespace == 1 then text = text .. ""	end if #errors > 0 then text = text .. "\n\n The following dates couldn't be parsed: \n#" text = text .. table.concat(errors,"\n#") .. "\n" end return frame:expandTemplate{title = "tmbox", args = {text = text, image = "", textstyle = "text-align: left;"}}

end

p.header = function(frame) local text = frame:expandTemplate{title = "Wikipedia:Top 25 Report/Template:Header", args = {}} text = text .. "\n" if mw.title.getCurrentTitle.subpageText == "Report header" then return text end frame = frame:getParent local date = Date(frame.args[1]) text = text .. ' \n' text = text .. "== Most Popular Wikipedia Articles of the Week ("	text = text .. range(date) .. ") ==\n"

local count = 0 for index, nameStr in pairs(frame.args) do		if not (index == 1) then count = count + 1 end end

if count > 0 then text = text .. "''Prepared with commentary by "

if count == 1 then text = text .. userLink(frame.args[2]) elseif count == 2 then text = text .. userLink(frame.args[2]) .. " and " .. userLink(frame.args[3]) else local i = 2 while i <= count do text = text .. userLink(frame.args[i]) .. ", "				i = i + 1 end text = text .. " and " .. userLink(frame.args[count+1]) end end

local key = " "

text = text .. "''\n\n← December 2012 monthly report" else text = text .. range(date-7) .. "|Last week's report]]" end if mw.title.getCurrentTitle.subpageText ~= "Top 25 Report" then text = text .. " – Next week's report →" key = "Top 25 " .. date:text("%Y%m%d") end if mw.title.getCurrentTitle.namespace == 4 then text = text .. ""	end return text end

return p