此模块的文档可以在模块:Infobox/doc创建
local p = {}
function p.main(frame)
local args = frame.args
local root = mw.html.create('div'):addClass('infobox')
-- 添加对齐方式
local align = args.align or 'left'
root:addClass('infobox-align-' .. align)
-- 图片处理
if args.image and mw.text.trim(args.image) ~= '' then
local tabber = root:tag('div'):addClass('tabber')
local tab = tabber:tag('div')
:addClass('tabbertab')
:attr('title', args['imagedescription'] or '')
local imageText = string.format('[[File:%s|frameless|600px', args.image)
if args['imagedescription'] then
imageText = imageText .. '|' .. args['imagedescription']
end
imageText = imageText .. ']]'
tab:tag('div')
:addClass('infobox-image')
:wikitext(imageText)
end
-- 图标+标题区
local titleBlock = root:tag('div'):addClass('infobox-header')
local titleStyle = args['title-style'] or 'left'
titleBlock:addClass('title-style-' .. titleStyle)
local logoSpacing = args['logo-spacing'] or '8px' -- 新增参数,默认间距为 8px
local titleSubtitleWrapper = titleBlock:tag('div'):addClass('infobox-title-and-subtitle')
if args.logo then
titleBlock:tag('div'):addClass('infobox-logo')
:wikitext(string.format('[[File:%s|32px|link=]]', args.logo))
end
-- 使用普通 div 替代 h2 作为标题
if args.title then
titleSubtitleWrapper:tag('div')
:addClass('infobox-title')
:wikitext(args.title)
end
if args.subtitle then
titleSubtitleWrapper:tag('div')
:addClass('infobox-subtitle')
:wikitext(args.subtitle)
end
-- 动态栏位生成器
local function buildColumns(colType, cols)
local max = 0
local validItems = {}
-- 自动检测最大条目数,并过滤掉 info 为空的项
for i = 1, 50 do -- 最大支持50个条目
local label = args[colType..'-label'..i]
local info = args[colType..'-info'..i]
if label and info and info ~= '' then
validItems[#validItems + 1] = {
label = label,
info = info
}
max = #validItems
end
end
-- 生成栏位
if max > 0 then
local row = root:tag('div')
:addClass('infobox-section')
:tag('div'):addClass('infobox-columns columns-'..cols)
for i = 1, max do
row:tag('div'):addClass('column')
:tag('div'):addClass('label'):wikitext(validItems[i].label):done()
:tag('div'):addClass('value'):wikitext(validItems[i].info)
end
end
end
-- 生成各类型栏位
buildColumns('col1', 1) -- 单栏
buildColumns('col2', 2) -- 双栏
buildColumns('col3', 3) -- 三栏
return tostring(root)
end
return p