Module:Sprite: Difference between revisions

No edit summary
No edit summary
Line 12: Line 12:
local defaultPos = args.defaultpos or 1
local defaultPos = args.defaultpos or 1
local pos = math.abs( args.pos or defaultPos ) - 1
local pos = math.abs( args.pos or defaultPos ) - 1
local link = args.link or ''
local link = args.link
local align = args.align or 'text-top'
local align = args.align or 'text-top'
local tiles = sheetWidth / size
local tiles = sheetWidth / size
Line 19: Line 19:
local top = math.floor( pos / tiles ) * size
local top = math.floor( pos / tiles ) * size
local text = args.text or ''
local text = args.text or ''
local css = args.css or ''
local css = args.css
local styles = {}
local styles = {}
local imgClasses = {
local imgClasses = {
Line 45: Line 45:
table.insert( styles, 'vertical-align:' .. align )
table.insert( styles, 'vertical-align:' .. align )
end
end
if css ~= '' then
if css then
table.insert( styles, css )
table.insert( styles, css )
end
end
Line 58: Line 58:
if text ~= '' then
if text ~= '' then
text = '<span class="nowrap" style="padding-left:0.3em">' .. text .. '</span>'
text = '<span class="nowrap" style="padding-left:0.33em">' .. text .. '</span>'
end
end
if link ~= '' then
if link then
if link:find( '//' ) then
if link:find( '//' ) then
-- External link
-- External link
Line 85: Line 85:
else
else
local ids = mw.loadData( 'Module:Sprite/' .. args.name )
local ids = mw.loadData( 'Module:Sprite/' .. args.name )
local name = mw.text.trim( args[1] or '' )
local id = mw.text.trim( args[1] or '' )
local pos = ids[name] or ids[name:lower():gsub( '%s', '-' )]
local pos = ids[id] or ids[id:lower():gsub( '%s', '-' )]
if not pos then
if not pos then
category = '[[Category:Pages with missing sprites]]'
category = '[[Category:Pages with missing sprites]]'
Line 114: Line 114:
function p.doc( f )
function p.doc( f )
local args = f.args
local args = f.args
args.name = args.name or 'Block'
local idTable = mw.title.new( 'Module:Sprite/' .. args.name ):getContent()
local idTable = mw.title.new( 'Module:Sprite/' .. args.name ):getContent()
idTable = idTable:gsub( '(\n%s*%-%-%s*.-%s*%-%-%s*\n)', '%1,' ):gsub( '^return {', '' ):gsub( '}$', '' )
idTable = idTable:gsub( '(\n%s*%-%-%s*.-%s*%-%-%s*\n)', '%1,' ):gsub( '^return {', '' ):gsub( '}$', '' )
local html = {}
local html = {}
local names = {}
local ids = {}
local idKeys = {}
local posKeys = {}
local section = ''
local section = ''
for line in mw.text.gsplit( idTable, ',' ) do
for line in mw.text.gsplit( idTable, ',' ) do
line = mw.text.trim( line )
line = mw.text.trim( line )
name = line:match( '^%[[\'"](.+)[\'"]%]' ) or line:match( '^%w+' ) or ''
id = line:match( '^%[[\'"](.+)[\'"]%]' ) or line:match( '^%w+' ) or ''
id = line:match( '=%s*(%d+)%s*,?$' ) or ''
pos = line:match( '=%s*(%d+)%s*,?$' ) or ''
section = line:match( '^%-%-%s*(.+)%s*%-%-$' ) or section
section = line:match( '^%-%-%s*(.+)%s*%-%-$' ) or section
if name ~= '' and id ~= '' then
if id ~= '' and pos ~= '' then
if names[id] then
if ids[pos] then
if type( names[id].names ) == 'table' then
if type( ids[pos].id ) == 'table' then
table.insert( names[id].names, name )
table.insert( ids[pos].id, id )
else
else
names[id].names = { names[id].names, name }
ids[pos].id = { ids[pos].id, id }
end
end
else
else
names[id] = { names = name, section = section }
ids[pos] = { id = id, section = section }
table.insert( idKeys, id )
table.insert( posKeys, pos )
end
end
end
end
Line 146: Line 145:
local listFoot = '</ul>'
local listFoot = '</ul>'
local lastSection = ''
local lastSection = ''
for i, id in ipairs( idKeys ) do
for i, pos in ipairs( posKeys ) do
local name = names[id].names
local id = ids[pos].id
local newSection = mw.text.trim( names[id].section )
local newSection = mw.text.trim( ids[pos].section )
if newSection ~= lastSection or i == 1 then
if newSection ~= lastSection or i == 1 then
Line 161: Line 160:
table.insert( list, listHead )
table.insert( list, listHead )
end
end
table.insert( list, '<li><table><tr><td data-id="' .. id .. '">' )
table.insert( list, '<li><table><tr><td data-pos="' .. pos .. '">' )
if type( name ) == 'table' then
if type( id ) == 'table' then
for i, name2 in ipairs( name ) do
for i, id2 in ipairs( id ) do
if i == 1 then
if i == 1 then
args[1] = name2
args[1] = id2
table.insert( list, p.sprite( args ) .. '</td><td><div class="sprite-name"><code>' .. name2 .. '</code></div>' )
table.insert( list, p.sprite( args ) .. '</td><td><div class="sprite-id"><code>' .. id2 .. '</code></div>' )
else
else
table.insert( list, '<div class="sprite-name"><code>' .. name2 .. '</code></div>' )
table.insert( list, '<div class="sprite-id"><code>' .. id2 .. '</code></div>' )
end
end
end
end
else
else
args[1] = name
args[1] = id
table.insert( list, p.sprite( args ) .. '</td><td><div class="sprite-name"><code>' .. name .. '</code></div>' )
table.insert( list, p.sprite( args ) .. '</td><td><div class="sprite-id"><code>' .. id .. '</code></div>' )
end
end
table.insert( list, '</td></tr></table></li>' )
table.insert( list, '</td></tr></table></li>' )
if i == #idKeys then
if i == #posKeys then
table.insert( list, listFoot )
table.insert( list, listFoot )
end
end