Module:SpriteFile: Difference between revisions

From Modded Wiki
Jump to navigation Jump to search
m 10 revisions imported
added ability to use .gif files for Item Sprites
Line 17: Line 17:
local id = mw.text.trim( tostring( args[1] or '' ) )
local id = mw.text.trim( tostring( args[1] or '' ) )
if not args.keepcase then
id = mw.ustring.lower( id ):gsub( '[%s%+]', '-' )
local useGif = id:match("\\gif$")
    if useGif then
    id = id:gsub("\\gif$", "")
end
end
Line 43: Line 45:
local name = args.name
local name = args.name
if name == 'InvSprite' then
name = 'Invicon'
local fileExtension = useGif and '.gif' or '.png'
end
    local file = name .. ' ' .. id .. fileExtension
local file = name .. ' ' .. id .. '.png'
    local altText = file .. ': Sprite image for ' .. id .. ' in Minecraft'
local altText = file .. ': Sprite image for ' .. id .. ' in Minecraft'
    if link ~= '' then
if link ~= '' then
        altText = altText .. ' linking to ' .. link
altText = altText .. ' linking to ' .. link
    end
end
    if id == '' then
if id == '' then
        file = 'Grid Unknown.png'
file = 'Grid Unknown.png'
        altText = 'Unknown sprite image'
altText = 'Unknown sprite image'
    end
end
local sprite = mw.html.create( 'span' ):addClass( 'sprite-file' )
local sprite = mw.html.create( 'span' ):addClass( 'sprite-file' )
local img = '[[File:' .. file .. '|' .. size .. '|link=' .. link .. '|alt=' .. altText .. '|class=pixel-image|' .. ( args.title or '' ) .. ']]'
local img = '[[File:' .. file .. '|' .. size .. '|link=' .. link .. '|alt=' .. altText .. '|class=pixel-image|' .. ( args.title or '' ) .. ']]'
Line 105: Line 106:
local link = args[1]
local link = args[1]
link = link and link:gsub("\\gif$", "")
if args[1] and not args.id then
if args[1] and not args.id then
link = args[1]:match( '^(.-)%+' ) or args[1]
        link = link:match('^(.-)%+') or link
end
    end
local text
 
if not args.notext then
    local text
text = args.text or args[2] or link
    if not args.notext then
end
        text = args.text or args[2] or link
    end
args[1] = args.id or args[1]
args[1] = args.id or args[1]
args.link = args.link or link
    args.link = args.link or link
args.text = text
    args.text = text
 
return p.sprite( args )
    return p.sprite(args)
end
end


return p
return p

Revision as of 10:50, 30 April 2025

Documentation for this module may be created at Module:SpriteFile/doc

local p = {}

function p.sprite( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( 'Module:ProcessArgs' ).merge( true )
	else
		f = mw.getCurrentFrame()
	end
	
	-- Default settings
	local default = {
		scale = 1,
		size = 16,
		align = 'text-top'
	}
	
	local id = mw.text.trim( tostring( args[1] or '' ) )
	
	local useGif = id:match("\\gif$")
    if useGif then
    	id = id:gsub("\\gif$", "")
	end
	
	local link = ( args.link or '' )
	if mw.ustring.lower( link ) == 'none' then
		link = ''
	elseif link ~= '' then
		local linkPrefix = ( not link:find( '//' ) and args.linkprefix ) or ''
		link = linkPrefix .. link
	end
	
	local scale = args.scale or default.scale
	local height = ( args.height or args.size or default.size ) * scale
	local width = ( args.width or args.size or default.size ) * scale
	local size = width .. 'x' .. height .. 'px'
	
	local styles = {}
	if height ~= default.size then
		styles[#styles + 1] = 'height:' .. height .. 'px'
	end
	if width ~= default.size then
		styles[#styles + 1] = 'width:' .. width .. 'px'
	end
	
	local name = args.name
	
	local fileExtension = useGif and '.gif' or '.png'
    local file = name .. ' ' .. id .. fileExtension
    local altText = file .. ': Sprite image for ' .. id .. ' in Minecraft'
    if link ~= '' then
        altText = altText .. ' linking to ' .. link
    end
    if id == '' then
        file = 'Grid Unknown.png'
        altText = 'Unknown sprite image'
    end
	local sprite = mw.html.create( 'span' ):addClass( 'sprite-file' )
	local img = '[[File:' .. file .. '|' .. size .. '|link=' .. link .. '|alt=' .. altText .. '|class=pixel-image|' .. ( args.title or '' ) .. ']]'
	sprite:node( img )
	
	local align = args.align or default.align
	if align ~= default.align then
		styles[#styles + 1] = '--vertical-align:' .. align
	end
	styles[#styles + 1] = args.css
	
	sprite:cssText( table.concat( styles, ';' ) )
	
	local root
	local spriteText
	if args.text then
		if not args['wrap'] then
			root = mw.html.create( 'span' ):addClass( 'nowrap' )
		end
		spriteText = mw.html.create( 'span' ):addClass( 'sprite-text' ):wikitext( args.text )
		if args.title then
			spriteText:attr( 'title', args.title )
		end
		if link ~= '' then
			-- External link
			if link:find( '//' ) then
				spriteText = '[' .. link .. ' ' .. tostring( spriteText ) .. ']'
			else
				spriteText = '[[' .. link .. '|' .. tostring( spriteText ) .. ']]'
			end
		end
	end
	
	if not root then
		root = mw.html.create( '' )
	end
	root:node( sprite )
	if spriteText then
		root:node( spriteText )
	end
	
	return tostring( root )
end

function p.link( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( 'Module:ProcessArgs' ).merge( true )
	end
	
	local link = args[1]
	
	link = link and link:gsub("\\gif$", "")
	
	if args[1] and not args.id then
        link = link:match('^(.-)%+') or link
    end

    local text
    if not args.notext then
        text = args.text or args[2] or link
    end
	
	args[1] = args.id or args[1]
    args.link = args.link or link
    args.text = text

    return p.sprite(args)
end

return p