Module:Infobox: Difference between revisions
Jump to navigation
Jump to search
imported>Kittymmeow (will be moved to mainspace after scribunto is installed) |
mNo edit summary |
||
(17 intermediate revisions by 3 users not shown) | |||
Line 8: | Line 8: | ||
if not imageArea and imageArea ~= 'none' then | if not imageArea and imageArea ~= 'none' then | ||
local images = {} | local images = {} | ||
local defaultImageSize = args.defaultimagesize or '160px' | |||
local defaultImageSize = args.defaultimagesize or ' | |||
args.image1 = args.image1 or args.image or 'title' | args.image1 = args.image1 or args.image or 'title' | ||
args.image1size = args.image1size or args.imagesize | args.image1size = args.image1size or args.imagesize | ||
local imgCount = {} | local imgCount = {} | ||
for k, v in pairs( args ) do | for k, v in pairs( args ) do | ||
if type( k ) == 'string' then | if type( k ) == 'string' then | ||
local image, num = k:match( '^(image)(%d+)$' ) | local image, num = k:match( '^(image)(%d+)$' ) | ||
if v:lower() ~= 'none' then | if v:lower() ~= 'none' then | ||
if image then | if image then | ||
table.insert( imgCount, tonumber( num ) ) | table.insert( imgCount, tonumber( num ) ) | ||
end | end | ||
end | end | ||
Line 58: | Line 52: | ||
images = table.concat( images, '\n' ) | images = table.concat( images, '\n' ) | ||
if images ~= '' then | |||
imageArea = images .. '\n' | |||
if images | |||
imageArea = images .. '\n' | |||
else | else | ||
imageArea = 'none' | imageArea = 'none' | ||
Line 108: | Line 68: | ||
footer = '| class="infobox-footer" colspan="2" | ' .. footer | footer = '| class="infobox-footer" colspan="2" | ' .. footer | ||
end | end | ||
local gameversion = args.gameversion | |||
if gameversion then | |||
local frame = mw.getCurrentFrame() | |||
frame:callParserFunction{ name = '#cargo_store', args = { '', | |||
_table = 'VersHistInfobox', Version = gameversion | |||
} } | |||
gameversion = '| class="infobox-gameversion-postfooter" colspan="2" | <div class="qud-infobox-version">Infobox data from game version <span class="qud-version-num">' .. gameversion .. '</span></div>' | |||
end | |||
local infoboxStartDiv = '<div class="moduleinfobox' | |||
local class = args.class | |||
if class then | |||
infoboxStartDiv = infoboxStartDiv .. ' ' .. class | |||
end | |||
infoboxStartDiv = infoboxStartDiv .. '"' | |||
local style = args.style | |||
if style then | |||
infoboxStartDiv = infoboxStartDiv .. ' style="' .. style .. '"' | |||
end | |||
infoboxStartDiv = infoboxStartDiv .. '>' | |||
local html = { | local html = { | ||
infoboxStartDiv, | |||
'<div class=" | '<div class="infobox-title">' .. title .. '</div>', | ||
imageArea, | imageArea, | ||
'{| class="infobox-rows" cellspacing="1" cellpadding="4"', | '{| class="infobox-rows" cellspacing="1" cellpadding="4"', | ||
Line 117: | Line 100: | ||
args.rows or '', | args.rows or '', | ||
footer or '', | footer or '', | ||
gameversion or '', | |||
'|}', | '|}', | ||
'</div>' | '</div>' |
Latest revision as of 19:28, 22 December 2021
Documentation
[purge]
This module implements {{infobox}}
. The module 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
.
Adapted from Minecraft Wiki.
Dependencies
- Module:Animate (when using animated images)
- Module:ProcessArgs
local p = {}
function p.infobox( f )
local args = require( 'Module:ProcessArgs' ).merge( true )
local titleObject = mw.title.getCurrentTitle()
local title = args.title or titleObject.baseText
local imageArea = args.imagearea
if not imageArea and imageArea ~= 'none' then
local images = {}
local defaultImageSize = args.defaultimagesize or '160px'
args.image1 = args.image1 or args.image or 'title'
args.image1size = args.image1size or args.imagesize
local imgCount = {}
for k, v in pairs( args ) do
if type( k ) == 'string' then
local image, num = k:match( '^(image)(%d+)$' )
if v:lower() ~= 'none' then
if image then
table.insert( imgCount, tonumber( num ) )
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( 'Media:' .. title .. '.png' )
if imageTitle and imageTitle.exists then
image = '[[File:' .. title .. '.png|' .. size .. ']]'
elseif titleObject.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 images ~= '' then
imageArea = images .. '\n'
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 gameversion = args.gameversion
if gameversion then
local frame = mw.getCurrentFrame()
frame:callParserFunction{ name = '#cargo_store', args = { '',
_table = 'VersHistInfobox', Version = gameversion
} }
gameversion = '| class="infobox-gameversion-postfooter" colspan="2" | <div class="qud-infobox-version">Infobox data from game version <span class="qud-version-num">' .. gameversion .. '</span></div>'
end
local infoboxStartDiv = '<div class="moduleinfobox'
local class = args.class
if class then
infoboxStartDiv = infoboxStartDiv .. ' ' .. class
end
infoboxStartDiv = infoboxStartDiv .. '"'
local style = args.style
if style then
infoboxStartDiv = infoboxStartDiv .. ' style="' .. style .. '"'
end
infoboxStartDiv = infoboxStartDiv .. '>'
local html = {
infoboxStartDiv,
'<div class="infobox-title">' .. title .. '</div>',
imageArea,
'{| class="infobox-rows" cellspacing="1" cellpadding="4"',
'|-',
args.rows or '',
footer or '',
gameversion or '',
'|}',
'</div>'
}
return table.concat( html, '\n' )
end
return p