Module:SpriteFile: Difference between revisions
Jump to navigation
Jump to search
m Protected "Module:SpriteFile" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) |
m 10 revisions imported |
||
(6 intermediate revisions by one other user not shown) | |||
Line 24: | Line 24: | ||
if mw.ustring.lower( link ) == 'none' then | if mw.ustring.lower( link ) == 'none' then | ||
link = '' | link = '' | ||
elseif link ~= '' then | |||
local linkPrefix = ( not link:find( '//' ) and args.linkprefix ) or '' | local linkPrefix = ( not link:find( '//' ) and args.linkprefix ) or '' | ||
link = linkPrefix .. link | link = linkPrefix .. link | ||
Line 42: | Line 42: | ||
end | end | ||
local | 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' | 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 | |||
if id == '' then | |||
file = 'Grid Unknown.png' | |||
altText = 'Unknown sprite image' | |||
end | end | ||
local sprite = mw.html.create( 'span' ):addClass( 'sprite-file' ) | local sprite = mw.html.create( 'span' ):addClass( 'sprite-file' ) | ||
Line 53: | Line 61: | ||
local align = args.align or default.align | local align = args.align or default.align | ||
if align ~= default.align then | if align ~= default.align then | ||
styles[#styles + 1] = 'vertical-align:' .. align | styles[#styles + 1] = '--vertical-align:' .. align | ||
end | end | ||
styles[#styles + 1] = args.css | styles[#styles + 1] = args.css |
Latest revision as of 11:33, 4 July 2024
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 '' ) )
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