UNPKG

2.02 kBJavaScriptView Raw
1/**
2 * Copyright (c) 2013-present, Facebook, Inc.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 */
8
9'use strict';
10
11var SyntheticUIEvent = require('./SyntheticUIEvent');
12var ViewportMetrics = require('./ViewportMetrics');
13
14var getEventModifierState = require('./getEventModifierState');
15
16/**
17 * @interface MouseEvent
18 * @see http://www.w3.org/TR/DOM-Level-3-Events/
19 */
20var MouseEventInterface = {
21 screenX: null,
22 screenY: null,
23 clientX: null,
24 clientY: null,
25 ctrlKey: null,
26 shiftKey: null,
27 altKey: null,
28 metaKey: null,
29 getModifierState: getEventModifierState,
30 button: function (event) {
31 // Webkit, Firefox, IE9+
32 // which: 1 2 3
33 // button: 0 1 2 (standard)
34 var button = event.button;
35 if ('which' in event) {
36 return button;
37 }
38 // IE<9
39 // which: undefined
40 // button: 0 0 0
41 // button: 1 4 2 (onmouseup)
42 return button === 2 ? 2 : button === 4 ? 1 : 0;
43 },
44 buttons: null,
45 relatedTarget: function (event) {
46 return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
47 },
48 // "Proprietary" Interface.
49 pageX: function (event) {
50 return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
51 },
52 pageY: function (event) {
53 return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
54 }
55};
56
57/**
58 * @param {object} dispatchConfig Configuration used to dispatch this event.
59 * @param {string} dispatchMarker Marker identifying the event target.
60 * @param {object} nativeEvent Native browser event.
61 * @extends {SyntheticUIEvent}
62 */
63function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
64 return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
65}
66
67SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
68
69module.exports = SyntheticMouseEvent;
\No newline at end of file