Last active
July 18, 2019 10:36
-
-
Save ryanfitzer/c976475cbc1d04407433268a5c632c71 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Check for common keyboard actions. | |
* | |
* @example | |
* checkInputType( e, 'shift click', fn ); | |
* checkInputType( e, [ 'escape', 'enter' ], fn ); | |
* checkInputType( e, [ 'tab', 'shift tab' ], fn ); | |
* | |
* @param {Event} e - The event object. | |
* @param {String|Array} types - The name(s) of the inputs to check. | |
* @param {Function} [fn] - A function to call if 1 of the `types` match. | |
* | |
* @returns {boolean} | |
*/ | |
export default ( e, types, fn ) => { | |
types = Array.isArray( types ) ? types : [ types ]; | |
const input = { | |
// Event Types | |
click: e.type === 'click', | |
keydown: e.type === 'keydown', | |
keypress: e.type === 'keypress', | |
keyup: e.type === 'keyup', | |
// Modifier Keys | |
alt: e.altKey, | |
command: e.metaKey, | |
control: e.ctrlKey, | |
shift: e.shiftKey, | |
// Non-Modifier Keys | |
arrowleft: e.keyCode === 37, | |
arrowright: e.keyCode === 39, | |
arrowup: e.keyCode === 38, | |
arrowdown: e.keyCode === 40, | |
enter: e.keyCode === 13, | |
escape: e.keyCode === 27, | |
space: e.keyCode === 32, | |
tab: e.keyCode === 9 | |
}; | |
const check = ( inputs ) => inputs.split( ' ' ).every( ( action ) => input[ action ] ); | |
const result = types.some( ( type ) => check( type ) ); | |
if ( result && fn ) fn( e, result ); | |
return result; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment