模块:InfoBox
来自「荏苒之境」
此模块的文档可以在模块:InfoBox/doc创建
local html = mw.html
local csv = require("Module:Csv")
local infobox = {}
local function append_full_row(table_elem)
return table_elem:tag("tr"):tag("th")
:attr("colspan", "2")
end
local function append_header(frame, parent, text)
local title = append_full_row(parent):wikitext(text)
local args = frame.args
local title_color = args.title_color
local title_background = args.title_background
if title_color then
title:css("color", title_color)
elseif title_background then
title:css("background", title_background)
end
return title
end
local row_appenders = {
title = function(...)
append_header(...):addClass("infobox-title")
end,
section = function(...)
append_header(...):addClass("infobox-header")
end,
image = function(frame, parent, file)
append_full_row(parent)
:addClass("infobox-image")
:wikitext("[[File:{{{"..file.."}}}|300px]]")
end,
caption = function(frame, parent, text)
append_full_row(parent)
:addClass("infobox-caption")
:wikitext(text)
end,
text = function(frame, parent, header, data)
parent:tag("tr")
:tag("th"):wikitext(header):done()
:tag("td"):wikitext(data):done()
end
}
local function append_row(frame, parent, row_type, ...)
local appender = row_appenders[row_type]
if appender == nil then
return
end
return appender(frame, parent, ...)
end
infobox.show = function(frame)
local args = frame:getParent().args
local view = html.create("div"):addClass("infobox")
local table_elem = view:tag("table")
for k, v in ipairs(args) do
local parts = csv.parse_row(v)
view:tag("p"):wikitext(row_appenders[parts[1]] and "YES" or parts[1])
append_row(frame, table_elem, unpack(parts))
end
table_elem:done()
return view
end
return infobox