Difference between revisions of "Module:Basic infobox"
Jump to navigation
Jump to search
m |
m (fix text alignment) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 22: | Line 22: | ||
oargs[idx][attr] = body | oargs[idx][attr] = body | ||
end | end | ||
+ | end | ||
+ | if args.above then | ||
+ | node:tag("tr"):tag("th"):attr("colspan", "2"):cssText("background:green"):cssText(args.abovestyle):wikitext(args.above) | ||
end | end | ||
for i = 1, table.maxn(oargs) do | for i = 1, table.maxn(oargs) do | ||
Line 28: | Line 31: | ||
local row = node:tag("tr") | local row = node:tag("tr") | ||
if rowargs.header then | if rowargs.header then | ||
− | row:tag("th"):attr("colspan", "2"):cssText(" | + | row:tag("th"):attr("colspan", "2"):cssText("background:green"):cssText(rowargs.headerstyle):wikitext(rowargs.header) |
elseif rowargs.label and rowargs.data then | elseif rowargs.label and rowargs.data then | ||
− | row:tag(" | + | row:tag("td"):cssText("font-weight:bold"):cssText(rowargs.labelstyle):wikitext(rowargs.label) |
row:tag("td"):cssText(rowargs.datastyle):wikitext(rowargs.data) | row:tag("td"):cssText(rowargs.datastyle):wikitext(rowargs.data) | ||
+ | elseif rowargs.data then | ||
+ | row:tag("td"):attr("colspan", "2"):cssText("text-align:center"):cssText(rowargs.datastyle):wikitext(rowargs.data) | ||
end | end | ||
end | end | ||
Line 44: | Line 49: | ||
style="width:fit-content", | style="width:fit-content", | ||
class="sample-class", | class="sample-class", | ||
+ | above="Title", | ||
header1="Header", | header1="Header", | ||
headerstyle1="background-color:green", | headerstyle1="background-color:green", | ||
Line 51: | Line 57: | ||
data10="No", | data10="No", | ||
datastyle10="color:red", | datastyle10="color:red", | ||
− | data11=" | + | data11="content-only", |
label12="label with no data", -- should not be shown | label12="label with no data", -- should not be shown | ||
}})) | }})) | ||
]] | ]] |
Latest revision as of 18:14, 23 June 2021
This is a simple module that generates infoboxes.
Usage
The above
field is the content of the header column at the top of the infobox.
Each row is indexed by a number and can have the following elements:
headern
: used for header rowslabeln
: optional label for data rowsdatan
: data for the row (ignored for header rows; hides row when absent or empty otherwise)
Row indices do not have to be continuous.
Styles can be defined with e.g. abovestyle
and labelstylen
.
Example
{{#invoke:basic infobox|main | above = [[Module:Basic infobox]]<br/>''Simple infobox generator'' | data1 = [[File:Placeholder.png|frameless|upright=1.0]] | header2 = | headerstyle2 = font-size:0.5em | label3 = Type | data3 = Module | label4 = Status | data4 = Testing | datastyle4 = background-color:orange | header10 = Discussion page | data11 = [[Module talk:Basic infobox]] }}
Generates:
Module:Basic infobox Simple infobox generator | |
---|---|
Type | Module |
Status | Testing |
Discussion page | |
Module talk:Basic infobox |
--[[
This module implements a basic infobox template.
This is designed to be at least partially compatitable with the one seen on Wikipedia, but is not a replacement of it.
]]
local function main(frame)
local args = frame.args or error("No argument supplied")
local style = args.style or ""
style = "float:right;" .. style
local tclass = args.class or ""
tclass = "wikitable "..tclass
local node = mw.html.create("table"):attr{class = tclass, style = style}
local i = 1
local oargs = {} -- organized argument list
for k, v in pairs(args) do
local attr, idx = string.match(k, "^(%D+)(%d+)$")
idx = tonumber(idx)
local body = v
if body == "" then body = nil end
if idx and body then
if not oargs[idx] then oargs[idx] = {} end
oargs[idx][attr] = body
end
end
if args.above then
node:tag("tr"):tag("th"):attr("colspan", "2"):cssText("background:green"):cssText(args.abovestyle):wikitext(args.above)
end
for i = 1, table.maxn(oargs) do
local rowargs = oargs[i]
if rowargs then
local row = node:tag("tr")
if rowargs.header then
row:tag("th"):attr("colspan", "2"):cssText("background:green"):cssText(rowargs.headerstyle):wikitext(rowargs.header)
elseif rowargs.label and rowargs.data then
row:tag("td"):cssText("font-weight:bold"):cssText(rowargs.labelstyle):wikitext(rowargs.label)
row:tag("td"):cssText(rowargs.datastyle):wikitext(rowargs.data)
elseif rowargs.data then
row:tag("td"):attr("colspan", "2"):cssText("text-align:center"):cssText(rowargs.datastyle):wikitext(rowargs.data)
end
end
end
return tostring(node)
end
return {main = main}
--[[ Testing code:
mw.log(p.main(mw.getCurrentFrame():newChild{args = {
style="width:fit-content",
class="sample-class",
above="Title",
header1="Header",
headerstyle1="background-color:green",
header2="", -- should not be shown
label10="Field",
labelstyle10="color:blue",
data10="No",
datastyle10="color:red",
data11="content-only",
label12="label with no data", -- should not be shown
}}))
]]