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.
79 lines
2.1 KiB
79 lines
2.1 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 SyntheticMouseEvent |
|
* @typechecks static-only |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var SyntheticUIEvent = require("./SyntheticUIEvent"); |
|
var ViewportMetrics = require("./ViewportMetrics"); |
|
|
|
var getEventModifierState = require("./getEventModifierState"); |
|
|
|
/** |
|
* @interface MouseEvent |
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/ |
|
*/ |
|
var MouseEventInterface = { |
|
screenX: null, |
|
screenY: null, |
|
clientX: null, |
|
clientY: null, |
|
ctrlKey: null, |
|
shiftKey: null, |
|
altKey: null, |
|
metaKey: null, |
|
getModifierState: getEventModifierState, |
|
button: function(event) { |
|
// Webkit, Firefox, IE9+ |
|
// which: 1 2 3 |
|
// button: 0 1 2 (standard) |
|
var button = event.button; |
|
if ('which' in event) { |
|
return button; |
|
} |
|
// IE<9 |
|
// which: undefined |
|
// button: 0 0 0 |
|
// button: 1 4 2 (onmouseup) |
|
return button === 2 ? 2 : button === 4 ? 1 : 0; |
|
}, |
|
buttons: null, |
|
relatedTarget: function(event) { |
|
return event.relatedTarget || ( |
|
((event.fromElement === event.srcElement ? event.toElement : event.fromElement)) |
|
); |
|
}, |
|
// "Proprietary" Interface. |
|
pageX: function(event) { |
|
return 'pageX' in event ? |
|
event.pageX : |
|
event.clientX + ViewportMetrics.currentScrollLeft; |
|
}, |
|
pageY: function(event) { |
|
return 'pageY' in event ? |
|
event.pageY : |
|
event.clientY + ViewportMetrics.currentScrollTop; |
|
} |
|
}; |
|
|
|
/** |
|
* @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 SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) { |
|
SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent); |
|
} |
|
|
|
SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface); |
|
|
|
module.exports = SyntheticMouseEvent;
|
|
|