Difference between revisions of "Module:SNES button"

From ALttP Speedrunning Wiki
Jump to: navigation, search
(ill care about getting css to load from module later)
Line 1: Line 1:
 
local p = {}
 
local p = {}
 
local CSS = [===[
 
 
{{#css:
 
.snes-button,
 
.snes-button-face,
 
.snes-button-mid,
 
.snes-button-bumper {
 
display: inline-block;
 
text-align: center;
 
color: white;
 
border: 2px solid;
 
border-left: none;
 
border-top: none;
 
border-radius: 20px;
 
text-transform: capitalize;
 
}
 
 
.snes-button-face,
 
.snes-button-A,
 
.snes-button-B,
 
.snes-button-X,
 
.snes-button-Y {
 
width: 22px;
 
height: 22px;
 
font-weight: bold;
 
}
 
 
.snes-button-A {
 
background: #DA3948;
 
border-color: #610102;
 
}
 
 
.snes-button-B {
 
background: #FEBB52;
 
border-color: #3E0A00;
 
}
 
 
.snes-button-X {
 
background: #00489F;
 
border-color: #000A35;
 
}
 
 
.snes-button-Y {
 
background: #00916A;
 
border-color: #00331B;
 
}
 
 
.snes-button-bumper {
 
width: 40px;
 
height: 16px;
 
padding-bottom: 2px;
 
font-weight: bold;
 
border-color: #8D8D8D;
 
background: #B8B8A8;
 
}
 
 
.snes-button-L {
 
border-radius: 15px 0 0 0;
 
}
 
 
.snes-button-R {
 
border-radius: 0 15px 0 0;
 
}
 
 
.snes-button-mid,
 
.snes-button-Start,
 
.snes-button-Select {
 
width: 60px;
 
height: 12px;
 
padding-bottom: 8px;
 
background: #4B545B;
 
border-color: #050704;
 
font-variant: small-caps;
 
}
 
 
 
.snes-button-dpad {
 
display: inline-block;
 
width: 42px;
 
height: 42px;
 
}
 
 
.snes-button-dpad-vert,
 
.snes-button-dpad-horz {
 
position: relative;
 
display: block;
 
background: #595E62;
 
border-radius: 3px;
 
border-style: solid;
 
border-width: 0;
 
border-color: #FF8080;
 
}
 
 
.snes-button-dpad-vert {
 
left: 14px;
 
width: 14px;
 
height: 42px;
 
min-height: 28px;
 
max-height: 42px;
 
}
 
 
.snes-button-dpad-up .snes-button-dpad-vert {
 
height: 28px;
 
border-top-width: 14px;
 
}
 
 
.snes-button-dpad-down .snes-button-dpad-vert {
 
height: 28px;
 
border-bottom-width: 14px;
 
}
 
 
.snes-button-dpad-up.snes-button-dpad-down .snes-button-dpad-vert {
 
height: 14px;
 
border-top-width: 14px;
 
}
 
 
.snes-button-dpad-horz {
 
bottom: 28px;
 
height: 14px;
 
min-width: 14px;
 
max-width: 42px;
 
}
 
 
.snes-button-dpad-left .snes-button-dpad-horz {
 
border-left-width: 14px;
 
}
 
 
.snes-button-dpad-right .snes-button-dpad-horz {
 
border-right-width: 14px;
 
}
 
 
.snes-button-dpad .snes-button-dpad-templatearg {
 
display: none;
 
}
 
 
}}
 
]===]
 
  
 
function p.main(frame)
 
function p.main(frame)

Revision as of 20:37, 2 June 2018

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

	local b = args[1] or 'A'

	return p._main(b)
end

function p._main(b)
	b = mw.text.trim(b:lower())

	local ret

	if b:find('[<>^vd]') then
		ret = dpad(b)
	else
		ret = button(b)
	end

	return tostring(ret)
end

function dpad(arg)
	local ret = mw.html.create('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

	return ret
end

function button(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 = mw.html.create('span')

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

	return ret
end

return p