Module:MonsterPreview
Documentation for this module may be created at Module:MonsterPreview/doc
local p = {}
function p.render(frame)
local name = frame.args[1]
local size = frame.args[2] or frame.args.size or '128'
local mode = frame.args.mode or 'auto' -- auto, image, video
local file = frame.args.file -- custom file override
if not name and not file then return '' end
-- Custom file specified
if file then
return p.renderFile(file, size, name or file)
end
-- Check for webm first (unless image-only mode)
if mode ~= 'image' then
local webm = mw.title.new('File:' .. name .. '.webm')
if webm and webm.exists then
return string.format(
'<span class="monster-preview">[[File:%s.webm|%spx|loop|autoplay|muted]]</span>',
name, size
)
end
end
-- Fall back to png (or check for numbered variants like sprites)
local suffix = p.getHighestStack(name)
local filename = name .. suffix .. '.png'
return string.format(
'<span class="monster-preview pixel-sprite">[[File:%s|%spx|link=|alt=%s]]</span>',
filename, size, name
)
end
function p.getHighestStack(name)
for i = 20, 1, -1 do
local file = mw.title.new('File:' .. name .. i .. '.png')
if file and file.exists then
return tostring(i)
end
end
return ''
end
function p.renderFile(file, size, alt)
local ext = file:match('%.([^%.]+)$') or ''
if ext == 'webm' or ext == 'mp4' or ext == 'gif' then
return string.format(
'<span class="monster-preview">[[File:%s|%spx|loop|autoplay|muted]]</span>',
file, size
)
else
return string.format(
'<span class="monster-preview pixel-sprite">[[File:%s|%spx|link=|alt=%s]]</span>',
file, size, alt
)
end
end
return p