Module:Image area

来自互联网一战博物馆

此模块的文档可以在Module:Image area/doc创建

local p = {}

local function imageLink( name, size, class )
	local rows = {
		'File:'..name
	}
	if size then
		table.insert(rows, ''..size)
	end
	if class then
		table.insert(rows, 'class='..class)
	end
	if name == 'No image.svg' then
		table.insert(rows, 'link=')
	end
	return '[['..table.concat(rows, '|')..']]'
end

function p.imageArea( f )
	local args = require( 'Module:ProcessArgs' ).merge( true )
	return p.main( args )
end

function p.main( args )
	local titleObject = mw.title.getCurrentTitle()
	local title = args.title or titleObject.baseText
	local rlinkTriggered = false
	local titleImageLoaded = false
	
	local imageArea
	
	local images = {}
	local invImages = {}
	local defaultImageSize = args.defaultimagesize or '150px'
	local defaultImageClass = args.defaultimageclass
	args.image1 = args.image1 or args.image or 'No image.svg'
	args.image1size = args.image1size or args.imagesize
	args.image1class = args.image1class or args.imageclass
	args.invimage1 = args.invimage1 or args.invimage
	
	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
		local class = args['image' .. v .. 'class'] or defaultImageClass
		
		if image:match( ';' ) then
			if not animate then
				animate = require( 'Module:Animate' ).animate
			end
			image = animate{ image, size, nil, class }
		elseif image:match( '\\' ) then
			local trimages = {}
			for v in mw.text.gsplit(string.gsub( image, ' ', '_' ), '\\' ) do
				local current_image = imageLink( v, size, class )
				if v:match( '_Simplified%.[^.]+$' ) then
					trimages[1] = current_image
				elseif v:match ( '_Traditional%.[^.]+$' ) then
					trimages[2] = current_image
				elseif v:match ( '_Traditional_HK%.[^.]+$' ) then
					trimages[3] = current_image
				end
			end
			image = require( 'Module:STConversion' ).call(trimages)
		else
			image = imageLink( image, size, class )
		end
		
		table.insert( images, '<div>' .. image .. '</div>' )
	end
	images = table.concat( images, '\n' )
	
	if #invImgCount > 0 then
		table.sort( invImgCount )
		local slot
		local invAliases = mw.loadData( 'Module:Inventory slot/Aliases' )
		for k, v in ipairs( invImgCount ) do
			local image = args['invimage' .. v]
			
			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
	
	if imageArea and imageArea ~= 'none' then
		imageArea = '<div class="infobox-imagearea">' .. imageArea .. '</div>'
	else
		imageArea = ''
	end
	
	return imageArea
end

return p