From e501238c1010f68fe9b57ac7453ca9fd9d2598d7 Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Tue, 3 Jun 2014 14:27:08 -0700 Subject: [PATCH] Fix getEventModifierState, no allocations Alternative to #1637 that doesn't allocate on every event. Test Plan: Crossed fingers. --- src/browser/ui/dom/getEventModifierState.js | 22 ++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/browser/ui/dom/getEventModifierState.js b/src/browser/ui/dom/getEventModifierState.js index 6877dc16d5..46e91a0fc5 100644 --- a/src/browser/ui/dom/getEventModifierState.js +++ b/src/browser/ui/dom/getEventModifierState.js @@ -31,14 +31,22 @@ var modifierKeyToProp = { 'shift': 'shiftKey' }; +// IE8 does not implement getModifierState so we simply map it to the only +// modifier keys exposed by the event itself, does not support Lock-keys. +// Currently, all major browsers except Chrome seems to support Lock-keys. +function modifierStateGetter(keyArg) { + /*jshint validthis:true */ + var syntheticEvent = this; + var nativeEvent = syntheticEvent.nativeEvent; + if (nativeEvent.getModifierState) { + return nativeEvent.getModifierState(keyArg); + } + var keyProp = modifierKeyToProp[keyArg.toLowerCase()]; + return keyProp && nativeEvent[keyProp]; +} + function getEventModifierState(nativeEvent) { - // IE8 does not implement getModifierState so we simply map it to the only - // modifier keys exposed by the event itself, does not support Lock-keys. - // Currently, all major browsers except Chrome seems to support Lock-keys. - return nativeEvent.getModifierState || function(keyArg) { - var keyProp = modifierKeyToProp[keyArg.toLowerCase()]; - return keyProp && nativeEvent[keyProp]; - }; + return modifierStateGetter; } module.exports = getEventModifierState;