83 lines
2.6 KiB
JavaScript
83 lines
2.6 KiB
JavaScript
|
/**
|
||
|
* Copyright 2013-present, 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.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
'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, nativeEventTarget) {
|
||
|
return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
|
||
|
}
|
||
|
|
||
|
SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
|
||
|
|
||
|
module.exports = SyntheticKeyboardEvent;
|