(Remove 0th edit section. Despite the edit links already all over the page, this one in particular seems to be an idiot magnet. It also didn't work for the few infoboxes that weren't in the 0th section.) |
Tags: Rollback Mobile edit |
||
(16 intermediate revisions by 2 users not shown) | |||
Line 16: | Line 16: | ||
local imgCount = {} |
local imgCount = {} |
||
local invImgCount = {} |
local invImgCount = {} |
||
− | local grid |
||
for k, v in pairs( args ) do |
for k, v in pairs( args ) do |
||
if type( k ) == 'string' then |
if type( k ) == 'string' then |
||
Line 38: | Line 37: | ||
if image == 'title' then |
if image == 'title' then |
||
− | local imageTitle = mw.title.new( ' |
+ | local imageTitle = mw.title.new( 'Media:' .. title .. '.png' ) |
if imageTitle and imageTitle.exists then |
if imageTitle and imageTitle.exists then |
||
image = '[[File:' .. title .. '.png|' .. size .. ']]' |
image = '[[File:' .. title .. '.png|' .. size .. ']]' |
||
Line 61: | Line 60: | ||
if #invImgCount > 0 then |
if #invImgCount > 0 then |
||
table.sort( invImgCount ) |
table.sort( invImgCount ) |
||
− | local |
+ | local slot |
+ | local invIds = mw.loadData( 'Module:InvSprite' ).ids |
||
+ | local invAliases = mw.loadData( 'Module:Inventory slot/Aliases' ) |
||
for k, v in ipairs( invImgCount ) do |
for k, v in ipairs( invImgCount ) do |
||
local image = args['invimage' .. v] |
local image = args['invimage' .. v] |
||
if image == 'title' then |
if image == 'title' then |
||
− | + | if invIds[title] or invAliases[title] then |
|
− | if imageTitle and imageTitle.exists then |
||
image = title |
image = title |
||
else |
else |
||
Line 73: | Line 73: | ||
end |
end |
||
− | if image then |
+ | if image == '----' then |
+ | table.insert( invImages, '</div><div style="padding-top:.5em">' ) |
||
⚫ | |||
+ | elseif image then |
||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
− | table.insert( invImages, |
+ | table.insert( invImages, slot{ image, link = 'none' } ) |
end |
end |
||
end |
end |
||
− | if #invImages > 0 then |
+ | if slot and #invImages > 0 then |
− | invImages = '<div class="infobox-invimages">' .. table.concat( invImages, '' ) .. '</div>' |
+ | invImages = '<div class="infobox-invimages"><div>' .. table.concat( invImages, '' ) .. '</div></div>' |
else |
else |
||
invImages = '' |
invImages = '' |
||
Line 97: | Line 99: | ||
end |
end |
||
if imageArea and imageArea ~= 'none' then |
if imageArea and imageArea ~= 'none' then |
||
− | imageArea = '<div class="infobox-imagearea">' .. imageArea .. '</div>' |
+ | imageArea = '<div class="infobox-imagearea animated-container">' .. imageArea .. '</div>' |
else |
else |
||
imageArea = '' |
imageArea = '' |
Latest revision as of 00:28, 10 July 2019
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 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 = {}
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( '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 #invImgCount > 0 then
table.sort( invImgCount )
local slot
local invIds = mw.loadData( 'Module:InvSprite' ).ids
local invAliases = mw.loadData( 'Module:Inventory slot/Aliases' )
for k, v in ipairs( invImgCount ) do
local image = args['invimage' .. v]
if image == 'title' then
if invIds[title] or invAliases[title] then
image = title
else
image = false
end
end
if image == '----' then
table.insert( invImages, '</div><div style="padding-top:.5em">' )
elseif image then
if not slot then
slot = require( 'Module:Inventory slot' ).slot
end
table.insert( invImages, slot{ image, link = 'none' } )
end
end
if slot and #invImages > 0 then
invImages = '<div class="infobox-invimages"><div>' .. table.concat( invImages, '' ) .. '</div></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 animated-container">' .. 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="mcwiki-header infobox-title">' .. title .. '</div>',
imageArea,
'{| class="infobox-rows" cellspacing="1" cellpadding="4"',
'|-',
args.rows or '',
footer or '',
'|}',
'</div>'
}
return table.concat( html, '\n' )
end
return p