Difference between revisions of "Module:SNES button"

From ALttP Speedrunning Wiki
Jump to: navigation, search
Line 150: Line 150:
 
b = mw.text.trim(b:lower())
 
b = mw.text.trim(b:lower())
  
 +
local ret
 
if b:find('[<>^v]') then
 
if b:find('[<>^v]') then
return dpad(b)
+
ret = dpad(b)
 
else
 
else
return button(b)
+
ret = button(b)
 
end
 
end
 +
 +
return CSS .. ret
 
end
 
end
  
Line 218: Line 221:
 
end
 
end
  
return { CSS, p }
+
return p

Revision as of 18:58, 2 June 2018

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

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)
	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('[<>^v]') then
		ret = dpad(b)
	else
		ret = button(b)
	end

	return CSS .. 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-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 == 'c' or arg == 'd' 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