Minecraft Wiki
(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.)
m (Revert consecutive edits by Nixinova (talk))
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( 'File:' .. title .. '.png' )
+
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 grid
+
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
local imageTitle = mw.title.new( 'File:Grid ' .. title .. '.png' )
+
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">' )
if not grid then
 
  +
elseif image then
grid = require( 'Module:Grid' ).cell
 
 
if not slot then
 
slot = require( 'Module:Inventory slot' ).slot
 
end
 
end
table.insert( invImages, grid{ image, link = 'none' } )
+
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

[create | history | purge]Documentation
This module has no documentation. If you know how to use this module, please create it.
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