模組:Mostread

本页使用了标题或全文手工转换
维基百科,自由的百科全书
文档图示 模块文档[查看] [编辑] [历史] [清除缓存]

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