Module:Sandbox/Od Mishehu/top25

local p = {};

p.list = function(frame) text = "This article has been viewed enough times in a single week to make it into the top 25 viewed articles of that week";

frame = frame:getParent;

args = frame.args Date = require('Module:Date')._Date

local int count=0; local list="";

local date; local isUntil = false; local errors = {}

for _, dateStr in pairs( frame.args ) do       dateStr = mw.text.trim(dateStr) if (string.lower(dateStr) == "until") then isUntil = true else local index = string.find(dateStr,'(',1,true)           local place=""            if not (index==nil) 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" .. line(date) .. ""                        count = count +1                        date = date + 7                    end                end                date = newDate                list = list .. ""

list = list .. line(date)

if not (place=="") then list = list .. " ("..place..")" end list = list .."" count=count+1 end end end list = list .. "\n"

if count>5 then list = frame:expandTemplate{title="Collapse top",args={"The weeks in which this happened",bg="#fff1d2"}} .. list .. frame:expandTemplate{title="Collapse bottom",args={}} else list = " The weeks in which this happened:" .. list end

if mw.title.getCurrentTitle.namespace==1 then text =text..""; end text = text .. list 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}}

end

function range(date) date2 = date + 6; if not (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

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

local range = range(date)

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

end

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

p.header = function(frame) 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 Date = require('Module:Date')._Date local date=Date(frame.args[1]) text = text .. ' \n' text = text .. "==Most Popular Wikipedia Articles of the Week ("   text = text .. range(date).. ")==\n"

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

key = " "

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

return p;