模組:Mostread
外观
-- 仅用于[[template:mostread]]
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- wrapper function
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame)
return p[funcName](args)
end
end
local mTableTools = require('Module:TableTools')
-- 内部函数,生成一个子表形式为{'date':'20220203','revid':'454343'}的表
p.DateAndRevid = makeInvokeFunc('_DateAndRevid')
function p._DateAndRevid(args)
local dr = {}
--local data = mTableTools.numData(args)
--mw.logObject(args)
--mw.logObject(mTableTools.numKeys(args))
for i,param in ipairs(mTableTools.compressSparseArray(args)) do
local s = mw.text.split( param, ':' )
--mw.logObject(param)
local item = {date=s[1],revid=s[2]}
--mw.logObject(item)
table.insert(dr, item)
end
--mw.logObject(dr)
-- return a date table
return dr
end
function p.intable(value,t)
for k,v in pairs(t) do
if v == value then
return true
end
end
return false
end
-- 分类文本
p.category = makeInvokeFunc('_category')
function p._category(args)
local data = p.DateAndRevid(args)
local catlist ={}
for i,item in ipairs(data) do
local y = mw.ustring.sub( item['date'],1, 4 )
if not p.intable(y,catlist) then
table.insert(catlist, y)
end
end
--mw.logObject(catlist)
local cattext = ''
for k,v in ipairs(catlist) do
cattext = cattext .. '[[Category:'..v .. '年单日浏览量最高的条目]]\n'
end
return cattext
end
--日期计数
p.total = makeInvokeFunc('_total')
function p._total(args)
return #p.DateAndRevid(args)
end
--第一个日期
p.date1 = makeInvokeFunc('_date1')
function p._date1(args)
--mw.logObject(p.total(args))
--mw.logObject(p.DateAndRevid(args)[1]["date"])
if p.total(args) == 0 then
--mw.log('yes')
return ''
else
return p.DateAndRevid(args)[1]["date"]--索引从1开始
end
--mw.logObject(dl)
--return d1
end
--最后一个日期
p.datelast = makeInvokeFunc('_datelast')
function p._datelast(args)
if p.total(args) == 0 then
return ''
else
return p.DateAndRevid(args)[p.total(args)]["date"]
end
end
function p.dateformat(date) --date = '20220304'
local y = mw.ustring.sub( date,1, 4 ) --'2022'
local m = mw.ustring.sub( date,5, 6 ) --'03'
local d = mw.ustring.sub( date,7, 8 ) --'04'
local Date = require('Module:Date')._Date
return Date(y,m,d):text('ymd') -- result is '2022-03-04'
end
--模板文本
p.list = makeInvokeFunc('_list')
function p._list(args)
--mw.log(p._date1(args))
local data = p.DateAndRevid(args)
local drlist ={}
--local textdrlist = require("Module:List").makeList("horizontal", drlist)
for i,item in ipairs(data) do
if item['revid'] then
itemtext = '[[Special:PermaLink/'..item['revid']..'|'..p.dateformat(item['date'])..']]'
else
itemtext = p.dateformat(item['date'])
end
table.insert(drlist, itemtext)
end
local drlist = require("Module:List").makeList("horizontal", drlist)
local count = p.total(args)
local text = "本条目曾有'''" .. tostring(count).. "'''次成为中文维基百科[[Wikipedia:动态热门|单日浏览量最高]]的条目。"
local datetext = '单日浏览量最高的日期是:'
if count == 0 then
text = text .. drlist
elseif count >= 10 then
text = '<div class="mw-collapsible mw-collapsed"><div>' .. text .. datetext ..'</div><div class="mw-collapsible-content">'.. drlist .. '</div></div>'
else
text = text .. datetext .. drlist
end
local cat = p._category(args)
if cat and mw.title.getCurrentTitle().namespace == 1 then
text = text .. cat
end
return text
end
return p