UNPKG

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