Module:SNES button

From ALttP Speedrunning Wiki
Jump to: navigation, search

Documentation for this module may be created at button/doc&action=edit&redlink=1 Module:SNES button/doc

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