Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Key/sandbox

From Wikipedia, the free encyclopedia
local p = {}

local key_labels = {
	-- Control keys
	['backspace'] = '← Backspace',
	['caps lock'] = '⇪ Caps Lock',
	['cmd'] = '⌘ Cmd',
	['command'] = '⌘ Command',
	['enter'] = '↵ Enter',
	['hyper'] = '✦ Hyper',
	['menu'] = '≣ Menu',
	['meta'] = '◆ Meta',
	['opt'] = '⌥ Opt',
	['option'] = '⌥ Option',
	['shift'] = '⇧ Shift',
	['tab'] = 'Tab ↹',
	['super'] = '❖ Super',
	['win'] = '⊞ Win',

	['[[alt]]'] = '[[Alt key|Alt]]',
	['[[altgr]]'] = '[[AltGr key|AltGr]]',
	['[[backspace]]'] = '← [[Backspace]]',
	['[[caps lock]]'] = '⇪ [[Caps Lock]]',
	['[[cmd]]'] = '⌘ [[Command key|Cmd]]',
	['[[command]]'] = '⌘ [[Command key|Command]]',
	['[[delete]]'] = '[[Delete key|Delete]]',
	['[[end]]'] = '[[End key|End]]',
	['[[enter]]'] = '↵ [[Enter key|Enter]]',
	['[[esc]]'] = '[[Esc key|Escape]]',
	['[[escape]]'] = '[[Esc key|Esc]]',
	['[[fn]]'] = '[[Fn key|Fn]]',
	['[[home]]'] = '[[Home key|Home]]',
	['[[hyper]]'] = '✦ [[Hyper key|Hyper]]',
	['[[insert]]'] = '[[Insert key|Insert]]',
	['[[menu]]'] = '≣ [[Menu key|Menu]]',
	['[[meta]]'] = '◆ [[Meta key|Meta]]',
	['[[opt]]'] = '⌥ [[Option key|Opt]]',
	['[[option]]'] = '⌥ [[Option key|Option]]',
	['[[page down]]'] = '[[Page Up and Page Down keys|Page Down]]',
	['[[page up]]'] = '[[Page Up and Page Down keys|Page Up]]',
	['[[pgdn]]'] = '[[Page Up and Page Down keys|PgDn]]',
	['[[pgup]]'] = '[[Page Up and Page Down keys|PgUp]]',
	['[[print screen]]'] = '[[Print Screen]]',
	['[[prt sc]]'] = '[[Print Screen|Prt Sc]]',
	['[[return]]'] = '↵ [[Enter key|Return]]',
	['[[scrlk]]'] = '[[Scroll Lock|ScrLk]]',
	['[[scroll lock]]'] = '[[Scroll Lock]]',
	['[[shift]]'] = '⇧ [[Shift key|Shift]]',
	['[[super]]'] = '❖ [[Super key (keyboard button)|Super]]',
	['[[tab]]'] = '[[Tab key|Tab]] ↹',
	['[[win]]'] = '⊞ [[Windows key|Win]]',
	['[[windows]]'] = '⊞ [[Windows key|Windows]]',
	
	-- Arrow keys
	['up'] = '↑',
	['down'] = '↓',
	['left'] = '←',
	['right'] = '→',

	['[[up]]'] = '[[Arrow key|↑]]',
	['[[down]]'] = '[[Arrow key|↓]]',
	['[[left]]'] = '[[Arrow key|←]]',
	['[[right]]'] = '[[Arrow key|→]]',

	-- Characters
	['asterisk'] = '*',
	['hash'] = '#',
	['colon'] = ':',
	['pipe'] = '|',
	['semicolon'] = '&#59;',
	['equals'] = '=',

	-- Left & right analog sticks.
	['l up'] = 'L↑',
	['l down'] = 'L↓',
	['l left'] = 'L←',
	['l right'] = 'L→',
	['l ne'] = 'L↗',
	['l se'] = 'L↘',
	['l nw'] = 'L↖',
	['l sw'] = 'L↙',

	['r up'] = 'R↑',
	['r down'] = 'R↓',
	['r left'] = 'R←',
	['r right'] = 'R→',
	['r ne'] = 'R↗',
	['r se'] = 'R↘',
	['r nw'] = 'R↖',
	['r sw'] = 'R↙',

	-- PlayStation keys
	['ex'] = '×',
	['circle'] = '○',
	['square'] = '□',
	['triangle'] = '△',

	-- Nintendo 64 and GameCube keys
	['c up'] = 'C↑',
	['c down'] = 'C↓',
	['c left'] = 'C←',
	['c right'] = 'C→',
	['c ne'] = 'C↗',
	['c se'] = 'C↘',
	['c nw'] = 'C↖',
	['c sw'] = 'C↙',
}

local label_aliases = {
	['*'] = 'asterisk',
	['#'] = 'hash',
	[':'] = 'colon',
	[';'] = 'semicolon',
	
	['l-up'] = 'l up',
	['l-down'] = 'l down',
	['l-left'] = 'l left',
	['l-right'] = 'l right',
	['l-ne'] = 'l ne',
	['l-se'] = 'l se',
	['l-nw'] = 'l nw',
	['l-sw'] = 'l sw',
	['r-up'] = 'r up',
	['r-down'] = 'r down',
	['r-left'] = 'r left',
	['r-right'] = 'r right',
	['r-ne'] = 'r ne',
	['r-se'] = 'r se',
	['r-nw'] = 'r nw',
	['r-sw'] = 'r sw',
	
	['ps x'] = 'ex',
	['ps c'] = 'circle',
	['ps s'] = 'square',
	['ps t'] = 'triangle',
	
	['c-up'] = 'c up',
	['c-down'] = 'c down',
	['c-left'] = 'c left',
	['c-right'] = 'c right',
	['c-ne'] = 'c ne',
	['c-se'] = 'c se',
	['c-nw'] = 'c nw',
	['c-sw'] = 'c sw',
}

local function format_key_press(args)
	local result = {}
	local chain = args.chain or ' + '

	for i, id in ipairs(args) do
		local lc = id:lower()
		local text = key_labels[lc] or key_labels[label_aliases[lc]] or id

		local label = mw.html.create("kbd")
			:addClass("keyboard-key nowrap")
			:wikitext(text)
		
		table.insert(result, tostring(label))
	end
	
	return mw.getCurrentFrame():extensionTag{
		name = 'templatestyles',
		args = { src = 'Template:Key press/styles.css'} 
	} .. table.concat(result, chain)
end

function p.key_press(frame)
	return format_key_press(frame:getParent().args)
end

return p