Module:SNES button

From ALttPR Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

local p = {}

function p.main(frame) local args = frame:getParent().args

args[1] = args[1] or 'A'

return p._main(args) end

function p._main(args) local ret = mw.html.create('span') :addClass('snes-button-wrapper')

for _, v in ipairs(args) do local b = mw.text.trim(v:lower())

if b:find('[+;,()/]') then symbol(ret, b) elseif b:find('[<>^vd]') then dpad(ret, b) else button(ret, b) end end

ret:done()

return tostring(ret) end

function symbol(parent, arg) local arg2 = mw.text.split(arg, ) local ret = parent:tag('span') ret:addClass('snes-button-delimiter') :wikitext(arg2[1]) :done() end

function dpad(parent, arg) local ret = parent:tag('span')

ret:addClass('snes-button-dpad')

:tag('span') :addClass('snes-button-dpad-vert') :done() :tag('span') :addClass('snes-button-dpad-horz') :done() :tag('span') :addClass('snes-button-dpad-mid') :done() :tag('span') :addClass('snes-button-dpad-templatearg') :wikitext(arg) :done() :done()

if arg:find('%^') then ret:addClass('snes-button-dpad-up') end

if arg:find('>') then ret:addClass('snes-button-dpad-right') end

if arg:find('v') then ret:addClass('snes-button-dpad-down') end

if arg:find('<') then ret:addClass('snes-button-dpad-left') end

end

function button(parent, arg) local buttonClass

local arg2 = mw.text.split(arg, ) arg2[1] = arg2[1]:upper() arg2 = table.concat(arg2)

local exactClass = 'snes-button-' .. arg2

if arg == 'a' or arg == 'b' or arg == 'x' or arg == 'y' then buttonClass = 'snes-button-face' elseif arg == 'l' or arg == 'r' then buttonClass = 'snes-button-bumper' elseif arg == 'start' or arg == 'select' then buttonClass = 'snes-button-mid' end

local ret = parent:tag('span')

ret:addClass(buttonClass) :addClass(exactClass) :wikitext(arg2) :done()

end

return p