Module:Infobox Custom
Module documentation
This documentation is transcluded from Template:No documentation/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Infobox Custom/doc. [edit]
Module:Infobox Custom's function main is invoked by Template:Infobox Custom.
local p = {}
function p._main(args)
local tbl = mw.html.create('table'):addClass('infobox')
local header = tbl:tag('tr')
header:tag('th'):wikitext(args['name'] or mw.title.getCurrentTitle().fullText):addClass('infobox-header'):attr('colspan', '2')
function toboolean(v)
return v ~= nil and v ~= false
end
function get_entry(i)
if args['key'..i] then
return { key = args['key'..i], value = args['value'..i] or '' }
elseif args['subheader'..i] then
return { subheader = args['subheader'..i] }
elseif args['image'..i] then
return { image = args['image'..i] }
elseif args['map'..i] then
return { map = args['map'..i] }
end
return nil
end
local i = 0
local cur_row = {}
repeat
if cur_row.key or cur_row.value then
local row = tbl:tag('tr')
row:tag('th'):wikitext(cur_row.key)
row:tag('td'):wikitext(cur_row.value)
elseif cur_row.subheader then
tbl:tag('tr'):tag('th'):wikitext(cur_row.subheader):addClass('infobox-subheader'):attr('colspan', '2')
elseif cur_row.image then
tbl:tag('tr'):tag('td'):wikitext(cur_row.image):addClass('infobox-image infobox-full-width-content'):attr('colspan', '2')
elseif cur_row.map then
tbl:tag('tr'):tag('td'):wikitext(cur_row.map):addClass('infobox-full-width-content'):attr('colspan', '2')
end
-- padding row should only be added around the outside of images, and
-- around the outside of contiguous sections of keyvals
local next_row = get_entry(i + 1)
local cur_is_image = toboolean(cur_row.image)
local next_is_image = toboolean(next_row and next_row.image)
local cur_is_keyval = toboolean(cur_row.key)
local next_is_keyval = toboolean(next_row and next_row.key)
-- sequential images should have padding (so we use or)
-- sequential keyvals should NOT have padding (so we use xor, which here is ~=)
local should_add_padding = (cur_is_image or next_is_image) or (cur_is_keyval ~= next_is_keyval)
if should_add_padding then
tbl:tag('tr'):tag('td'):addClass('infobox-padding'):attr('colspan', '2')
end
i = i + 1
cur_row = next_row
until cur_row == nil
return tbl
end
function p.main(frame)
local args = frame:getParent().args
return p._main(args)
end
return p