You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.7 KiB
85 lines
2.7 KiB
/** |
|
* Copyright 2013-2015, Facebook, Inc. |
|
* All rights reserved. |
|
* |
|
* This source code is licensed under the BSD-style license found in the |
|
* LICENSE file in the root directory of this source tree. An additional grant |
|
* of patent rights can be found in the PATENTS file in the same directory. |
|
* |
|
* @providesModule SyntheticKeyboardEvent |
|
* @typechecks static-only |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var SyntheticUIEvent = require("./SyntheticUIEvent"); |
|
|
|
var getEventCharCode = require("./getEventCharCode"); |
|
var getEventKey = require("./getEventKey"); |
|
var getEventModifierState = require("./getEventModifierState"); |
|
|
|
/** |
|
* @interface KeyboardEvent |
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/ |
|
*/ |
|
var KeyboardEventInterface = { |
|
key: getEventKey, |
|
location: null, |
|
ctrlKey: null, |
|
shiftKey: null, |
|
altKey: null, |
|
metaKey: null, |
|
repeat: null, |
|
locale: null, |
|
getModifierState: getEventModifierState, |
|
// Legacy Interface |
|
charCode: function(event) { |
|
// `charCode` is the result of a KeyPress event and represents the value of |
|
// the actual printable character. |
|
|
|
// KeyPress is deprecated, but its replacement is not yet final and not |
|
// implemented in any major browser. Only KeyPress has charCode. |
|
if (event.type === 'keypress') { |
|
return getEventCharCode(event); |
|
} |
|
return 0; |
|
}, |
|
keyCode: function(event) { |
|
// `keyCode` is the result of a KeyDown/Up event and represents the value of |
|
// physical keyboard key. |
|
|
|
// The actual meaning of the value depends on the users' keyboard layout |
|
// which cannot be detected. Assuming that it is a US keyboard layout |
|
// provides a surprisingly accurate mapping for US and European users. |
|
// Due to this, it is left to the user to implement at this time. |
|
if (event.type === 'keydown' || event.type === 'keyup') { |
|
return event.keyCode; |
|
} |
|
return 0; |
|
}, |
|
which: function(event) { |
|
// `which` is an alias for either `keyCode` or `charCode` depending on the |
|
// type of the event. |
|
if (event.type === 'keypress') { |
|
return getEventCharCode(event); |
|
} |
|
if (event.type === 'keydown' || event.type === 'keyup') { |
|
return event.keyCode; |
|
} |
|
return 0; |
|
} |
|
}; |
|
|
|
/** |
|
* @param {object} dispatchConfig Configuration used to dispatch this event. |
|
* @param {string} dispatchMarker Marker identifying the event target. |
|
* @param {object} nativeEvent Native browser event. |
|
* @extends {SyntheticUIEvent} |
|
*/ |
|
function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) { |
|
SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent); |
|
} |
|
|
|
SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface); |
|
|
|
module.exports = SyntheticKeyboardEvent;
|
|
|