Module:Keys

From The Satanic Wiki
Jump to navigation Jump to search

This module implements {{keys}}.

The key symbols are kept at Module:Keys/Symbols.



local p = {}
p.keys = function( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = f:getParent().args
	end
	local keys = {}
	
	for _, key in ipairs( args ) do
		key = mw.text.trim( key )
		if key ~= '+' and key:find( '%+' ) then
			local comboKeys = {}
			for comboKey in mw.text.gsplit( key, '%s*%+%s*' ) do
				table.insert( comboKeys, p.key( comboKey ) )
			end
			table.insert( keys, table.concat( comboKeys, ' + ' ) )
		else
			table.insert( keys, p.key( key ) )
		end
	end
	
	return table.concat( keys )
end

p.key = function( key )
	if key == '' then
		return ''
	end
	
	local symbols = mw.title.new( 'Module:Keys/Symbols').exists and mw.loadData('Module:Keys/Symbols') or mw.loadData( 'Dev:Keys/Symbols' )
	return '<kbd class="key nowrap" style="' .. table.concat( {
		'background-color: #f8f9fa',
		'color: #222',
		'font-size: 80%',
		'font-family: inherit',
		'font-weight: bold',
		'border: 1px solid #c8ccd1',
		'border-radius: 2px',
		'box-shadow: 0 1px 0 rgba(0,0,0,0.2), 0 0 0 2px #fff inset',
		'padding: 0.1em 0.4em',
		'text-shadow: 0 1px 0 #fff',
		'text-align: center'
	}, ';' ) .. '">' .. ( symbols[key:lower()] or key ) .. '</kbd>'
end
return p