Module:SNES button
From ALttP Speedrunning Wiki
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()) if b:find('[<>^v]') then return dpad(b) else return button(b) end 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 { CSS, p }