Module:Infobox
This module implements {{infobox}}. It should generally be invoked directly on template pages, rather than using the infobox template.
Parent arguments are automatically merged with directly passed arguments (the latter overwriting the former) and all arguments are normalised to trim whitespace and set empty arguments to nil
.
Dependencies
- Module:Animate (when using animated images)
- Module:Grid (when using invimages)
- Module:ProcessArgs
See also
- {{3rd Party Tool}}
- {{Block}}
- {{BlockTileEntity}}
- {{Entity}}
- {{Food}}
- {{Gamemode}}
- {{Item}}
- {{ItemEntity}}
- {{Mod}}
- {{Person}}
- {{Potion}}
- {{Profile}}
- {{Program}}
- {{Structure}}
- {{Technical Block}}
- {{Version nav}}
- Module:Infobox
The above documentation is transcluded from Module:Infobox/doc.
This module implements {{infobox}}. It should generally be invoked directly on template pages, rather than using the infobox template.
Parent arguments are automatically merged with directly passed arguments (the latter overwriting the former) and all arguments are normalised to trim whitespace and set empty arguments to nil
.
Dependencies
- Module:Animate (when using animated images)
- Module:Grid (when using invimages)
- Module:ProcessArgs
See also
- {{3rd Party Tool}}
- {{Block}}
- {{BlockTileEntity}}
- {{Entity}}
- {{Food}}
- {{Gamemode}}
- {{Item}}
- {{ItemEntity}}
- {{Mod}}
- {{Person}}
- {{Potion}}
- {{Profile}}
- {{Program}}
- {{Structure}}
- {{Technical Block}}
- {{Version nav}}
- Module:Infobox
local p = {}
function p.infobox( f )
local args = require( 'Module:ProcessArgs' ).merge( true )
local title = args.title or mw.title.getCurrentTitle().baseText
local imageArea = args.imagearea
if not imageArea and imageArea ~= 'none' then
local images = {}
local invImages = {}
local defaultImageSize = args.defaultimagesize or '150px'
args.image1 = args.image1 or args.image or 'title'
args.image1size = args.image1size or args.imagesize
args.invimage1 = args.invimage1 or args.invimage or 'title'
local imgCount = {}
local invImgCount = {}
local grid
for k, v in pairs( args ) do
if type( k ) == 'string' then
local image, num = k:match( '^(image)(%d+)$' )
local invImage, invNum = k:match( '^(invimage)(%d+)$' )
if v:lower() ~= 'none' then
if image then
table.insert( imgCount, tonumber( num ) )
elseif invImage then
table.insert( invImgCount, tonumber( invNum ) )
end
end
end
end
table.sort( imgCount )
local animate
for k, v in ipairs( imgCount ) do
local image = args['image' .. v]
local size = args['image' .. v .. 'size'] or defaultImageSize
if image == 'title' then
local imageTitle = mw.title.new( 'File:' .. title .. '.png' )
if imageTitle and imageTitle.exists then
image = '[[File:' .. title .. '.png|' .. size .. ']]'
elseif mw.title.getCurrentTitle().namespace == 0 then
image = '[[File:No image.svg|' .. size .. '|link=File:' .. title .. '.png|Upload ' .. title .. '.png]]'
else
image = '[[File:No image.svg|' .. size .. '|link=]]'
end
elseif image:match( ';' ) then
if not animate then
animate = require( 'Module:Animate' ).animate
end
image = animate{ image, size }
else
image = '[[File:' .. image .. '|' .. size .. ']]'
end
table.insert( images, '<div>' .. image .. '</div>' )
end
images = table.concat( images, '\n' )
if #invImgCount > 0 then
table.sort( invImgCount )
local grid
for k, v in ipairs( invImgCount ) do
local image = args['invimage' .. v]
if image == 'title' then
local imageTitle = mw.title.new( 'File:Grid ' .. title .. '.png' )
if imageTitle and imageTitle.exists then
image = title
else
image = false
end
end
if image then
if not grid then
grid = require( 'Module:Grid' ).cell
end
table.insert( invImages, grid{ image, link = 'none' } )
end
end
if #invImages > 0 then
invImages = '<div class="infobox-invimages">' .. table.concat( invImages, '' ) .. '</div>'
else
invImages = ''
end
else
invImages = ''
end
if images ~= '' or invImages ~= '' then
imageArea = images .. '\n' .. invImages
else
imageArea = 'none'
end
end
if imageArea and imageArea ~= 'none' then
imageArea = '<div class="infobox-imagearea">' .. imageArea .. '</div>'
else
imageArea = ''
end
local footer = args.footer
if footer then
footer = '| class="infobox-footer" colspan="2" | ' .. footer
end
local html = {
'<div class="notaninfobox">',
'<div class="infobox-title mcwiki-header">' .. title .. '</div>',
imageArea,
'{| class="infobox-rows" cellspacing="1" cellpadding="4"',
'|-',
args.rows or '',
footer or '',
'|}',
'</div>'
}
return table.concat( html, '\n' )
end
return p