122 lines
2.9 KiB
Text
122 lines
2.9 KiB
Text
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 '' ) )
|
|
if not args.keepcase then
|
|
id = mw.ustring.lower( id ):gsub( '[%s%+]', '-' )
|
|
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
|
|
if name == 'InvSprite' then
|
|
name = 'Invicon'
|
|
end
|
|
local file = name .. ' ' .. id .. '.png'
|
|
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]
|
|
if args[1] and not args.id then
|
|
link = args[1]:match( '^(.-)%+' ) or args[1]
|
|
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
|