carbon-react
Version:
A library of reusable React components and an interface for easily building user interfaces based on Flux.
317 lines (287 loc) • 7.88 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* JavaScript Events
*
* A collection of functions to be used with events.
*
* E.g. The KeyPress event has different implementations accross browsers, so
* this class contains methods to polyfill this functionality to ensure a standardised
* implementation between browsers
*
* @object Events
*/
var Events = {
/**
* A method to determine if an event is of a particular type
*
* @method isEventType
* @param {Event} ev A JavaScript event
* @param {Type} type A JavaScript event type
* @returns {Boolean} true if event type matches passed type
**/
isEventType: function isEventType(ev, type) {
return ev.type == type;
},
/**
* A method to determine whether a key down event was an arrow key
*
* @method isNavigationKeyup
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if key up event and a navigation key
**/
isNavigationKeyup: function isNavigationKeyup(ev) {
if (!Events.isEventType(ev, "keyup")) {
return false;
}
return Events.isNavigationKey(ev);
},
/**
* A method to determine whether a key down event was an enter key
*
* @method isEnterKeyup
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if keyup event and enter key
**/
isEnterKeyup: function isEnterKeyup(ev) {
if (!Events.isEventType(ev, "keyup")) {
return false;
}
return Events.isEnterKey(ev);
},
/**
* A method to determine whether a key up event is allowed or not.
*
* @method isValidKeypress
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if keyup and valid
**/
isValidKeypress: function isValidKeypress(ev) {
if (!Events.isEventType(ev, "keyup")) {
return false;
}
if (Events.isNumberKey(ev) || Events.isAlphabetKey(ev) || Events.isNumpadKey(ev) || Events.isSymbolKey(ev) || Events.isSpaceKey(ev) || Events.isDeletingKey(ev) || Events.isBackspaceKey(ev)) {
return true;
}
return false;
},
/**
* Determines if a number key along the top of the keyboard or a number key on the
* keypad is pressed
*
* @method isNumberKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if valid number key
**/
isNumberKey: function isNumberKey(ev) {
return ev.which >= 48 && ev.which <= 57 || ev.which >= 96 && ev.which <= 105;
},
/**
* Determines if the key pressed is part of the numpad
* includes symbols
*
* @method isNumberKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if key is part of numpad
**/
isNumpadKey: function isNumpadKey(ev) {
return ev.which >= 96 && ev.which <= 111;
},
/**
* Determines if the key pressed is a alphabet key
* Case insensitive
*
* @method isAlphabetKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if alphabet key is pressed
**/
isAlphabetKey: function isAlphabetKey(ev) {
return ev.which >= 65 && ev.which <= 90;
},
/**
* Determines if the key pressed is a valid symbol
*
* @method isSymbolKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if any symbol key is pressed
**/
isSymbolKey: function isSymbolKey(ev) {
return ev.which >= 58 && ev.which <= 64 || // : to @
ev.which >= 106 && ev.which <= 107 || // numpad * and +
ev.which >= 186 && ev.which <= 192 || // , .
ev.which >= 219 && ev.which <= 222; // \ ]
},
/**
* Determines if the key pressed is a navigation key
*
* @method isNavigationKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if one of four arrow keys
**/
isNavigationKey: function isNavigationKey(ev) {
return ev.which >= 37 && ev.which <= 40;
},
/**
* Determines if the key pressed is a navigation left key
*
* @method isLeftKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if left arrow key
**/
isLeftKey: function isLeftKey(ev) {
return ev.which === 37;
},
/**
* Determines if the key pressed is a navigation up key
*
* @method isUpKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if up arrow key
**/
isUpKey: function isUpKey(ev) {
return ev.which === 38;
},
/**
* Determines if the key pressed is a navigation right key
*
* @method isRightKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if right arrow key
**/
isRightKey: function isRightKey(ev) {
return ev.which === 39;
},
/**
* Determines if the key pressed is a navigation down key
*
* @method isDownKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if down arrow key
**/
isDownKey: function isDownKey(ev) {
return ev.which === 40;
},
/**
* Determines if the key pressed is a meta key
*
* @method isMetaKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if any meta key is pressed
**/
isMetaKey: function isMetaKey(ev) {
return ev.metaKey;
},
/**
* Determines if the key pressed is the escape key
*
* @method isEscKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if esc key
**/
isEscKey: function isEscKey(ev) {
return ev.which === 27;
},
/**
* Determines if the key pressed is the enter key
*
* @method isEnterKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if enter key
**/
isEnterKey: function isEnterKey(ev) {
return ev.which === 13;
},
/**
* Determines if the key pressed is the tab key
*
* @method isTabKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if tab key
**/
isTabKey: function isTabKey(ev) {
return ev.which === 9;
},
/**
* Determines if the key pressed is the backspace key
*
* @method isBackspaceKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if backspace key
**/
isBackspaceKey: function isBackspaceKey(ev) {
return ev.which === 8;
},
/**
* Determines if the key pressed is the delete key
*
* @method isDeleteKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if delete key
**/
isDeleteKey: function isDeleteKey(ev) {
return ev.which === 46;
},
/**
* Determines if the key pressed is the backspace or delete key
*
* @method isDeletingKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if is delete key or backspace key
**/
isDeletingKey: function isDeletingKey(ev) {
return Events.isDeleteKey(ev) || Events.isBackspaceKey(ev);
},
/**
* Determines if the key pressed is the shift key
*
* @method isShiftKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if shift key
**/
isShiftKey: function isShiftKey(ev) {
return ev.shiftKey || ev.which === 16;
},
/**
* Determines if the key pressed is the space key
*
* @method isSpaceKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if space key
**/
isSpaceKey: function isSpaceKey(ev) {
return ev.which === 32;
},
/**
* Determines if the key pressed is the period key
*
* @method isPeriodKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if period key
**/
isPeriodKey: function isPeriodKey(ev) {
return ev.which === 190;
},
/**
* Determines if the key pressed is the comma key
*
* @method isCommaKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if comma key
**/
isCommaKey: function isCommaKey(ev) {
return ev.which === 188;
},
/**
* Determines if the key pressed is the minus key
*
* @method isMinusKey
* @param {Event} ev A JavaScript event
* @returns {Boolean} true if minus key
**/
isMinusKey: function isMinusKey(ev) {
return ev.which === 189;
}
};
exports.default = Events;