Jump to content

Module:Top 25 report: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Image size should be consistent. Use the same as All time pageviews, Top 50 report and the other version of Top 25 report
Please see bot RfA for User:CapsuleBot. If the bot does not get approved soon, feel free to revert this edit.
 
Line 45: Line 45:
elseif parameter == "collapse" then
elseif parameter == "collapse" then
-- Ignore the collapse parameter
-- Ignore the collapse parameter
elseif parameter == "ranks" then
-- Ignore the parameter ranks used by capsulebot.
else
else
local index = string.find(dateStr,'(',1,true)
local index = string.find(dateStr,'(',1,true)

Latest revision as of 22:57, 5 January 2024

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