Module:Top 25 report
MyWikiBiz, Author Your Legacy — Friday November 29, 2024
Jump to navigationJump to searchImplements {{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("[[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 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 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 frame:expandTemplate{title = "tmbox", args = {text = text, image = "[[File:Article blue.svg|35px|link = ]]", textstyle = "text-align: left;"}} 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