Module:直播周表
来自久远澪Wiki
更多操作
此模块的文档可以在Module:直播周表/doc创建
-- 直播周表渲染模块:读取 久远澪:直播周表/Data 的 JSON 数据并渲染为表格。
--
-- 用法:{{#invoke:直播周表|render}}
--
-- /Data 页 JSON 结构:
-- {
-- "caption": "本周周表",
-- "rows": [
-- {"date": "24日", "weekday": "周一", "time": "18:30",
-- "content": "神厨小澪", "note": "做饭游戏"},
-- ...
-- ]
-- }
local p = {}
local DATA_PAGE = '久远澪:直播周表/Data'
local HEADER = '! 日期 !! 星期 !! 时间 !! 内容 !! 备注'
function p.render(frame)
local dataTitle = mw.title.new(DATA_PAGE)
if not dataTitle or not dataTitle.exists then
return '<span class="error">数据页 [[:' .. DATA_PAGE .. ']] 不存在</span>'
end
local content = dataTitle:getContent()
local ok, data = pcall(mw.text.jsonDecode, content)
if not ok or type(data) ~= 'table' then
return '<span class="error">数据页 [[:' .. DATA_PAGE
.. ']] JSON 解析失败,请检查格式</span>'
end
local rows = data.rows or {}
local lines = {}
table.insert(lines, '{| class="wikitable" style="text-align:center"')
if data.caption and data.caption ~= '' then
table.insert(lines, '|+ ' .. data.caption)
end
table.insert(lines, HEADER)
for _, row in ipairs(rows) do
table.insert(lines, '|-')
table.insert(lines,
'| ' .. (row.date or '')
.. ' || ' .. (row.weekday or '')
.. ' || ' .. (row.time or '')
.. ' || ' .. (row.content or '')
.. ' || ' .. (row.note or ''))
end
table.insert(lines, '|}')
return table.concat(lines, '\n')
end
return p