This module depends on the following other modules: |
Implements {{Top 25 report}}
local p = {}
require('strict')
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("[[User:%s|%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 [[Wikipedia:Top 25 Report|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
elseif parameter == "ranks" then
-- Ignore the parameter ranks used by capsulebot.
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 = '<div class="mw-collapsible mw-collapsed"><div>' .. text .. ' The weeks in which this happened:</div><div class="mw-collapsible-content">'.. list .. '</div></div>'
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 .. "[[Category:Pages in the Wikipedia Top 25 Report]]"
end
if #errors > 0 then
text = text .. "\n\n<big><span style=\"color:red\">'''The following dates couldn't be parsed:'''</span></big>\n#"
text = text .. table.concat(errors,"\n#") .. "\n"
end
return require('Module:Message box').main( 'tmbox', {
text = text,
image = "[[File:Article blue.svg|22px|link=|alt=]]"
})
end
p.header = function(frame)
local text = frame:expandTemplate{title = "Wikipedia:Top 25 Report/Template:Header", args = {}}
text = text .. "__NOTOC__\n"
if mw.title.getCurrentTitle().subpageText == "Report header" then
return text
end
frame = frame:getParent()
local date = Date(frame.args[1])
text = text .. '<div style="height:10px;clear:both;"></div>\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← [[Wikipedia:Top 25 Report/"
if frame.args[1] == "January 6, 2013" then
text = text .. "December 2012|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 .. " – [[Wikipedia:Top 25 Report/" .. range(date+7) .. "|Next week's report]] →"
key = "Top 25 " .. date:text("%Y%m%d")
end
if mw.title.getCurrentTitle().namespace == 4 then
text = text .. "[[Category:Wikipedia Top 25 Report|" .. key .. "]]"
end
return text
end
return p