Remove viewport metrics, other pageX/pageY behaviors (#9290)

* Remove viewport metrics

event.pageX and event.pageY are in every browser React supports.

* Rerecord tests
This commit is contained in:
Nathan Hunzaker
2017-03-31 02:20:57 +01:00
committed by Dan Abramov
parent 9beac3e3e3
commit 37e5df253c
7 changed files with 3 additions and 98 deletions
-1
View File
@@ -868,7 +868,6 @@ src/renderers/dom/shared/__tests__/ReactBrowserEventEmitter-test.js
* should work with event plugins without dependencies
* should work with event plugins with dependencies
* should bubble onTouchTap
* should not crash ensureScrollValueMonitoring when createEvent returns null
src/renderers/dom/shared/__tests__/ReactDOM-test.js
* allows a DOM element to be used with a string
@@ -13,7 +13,6 @@
var EventPluginRegistry = require('EventPluginRegistry');
var ReactEventEmitterMixin = require('ReactEventEmitterMixin');
var ViewportMetrics = require('ViewportMetrics');
var getVendorPrefixedEventName = require('getVendorPrefixedEventName');
var isEventSupported = require('isEventSupported');
@@ -73,9 +72,7 @@ var isEventSupported = require('isEventSupported');
* React Core . General Purpose Event Plugin System
*/
var hasEventPageXY;
var alreadyListeningTo = {};
var isMonitoringScrollValue = false;
var reactTopListenersCounter = 0;
// For events like 'submit' which don't consistently bubble (which we trap at a
@@ -344,41 +341,6 @@ var ReactBrowserEventEmitter = Object.assign({}, ReactEventEmitterMixin, {
handle,
);
},
/**
* Protect against document.createEvent() returning null
* Some popup blocker extensions appear to do this:
* https://github.com/facebook/react/issues/6887
*/
supportsEventPageXY: function() {
if (!document.createEvent) {
return false;
}
var ev = document.createEvent('MouseEvent');
return ev != null && 'pageX' in ev;
},
/**
* Listens to window scroll and resize events. We cache scroll values so that
* application code can access them without triggering reflows.
*
* ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when
* pageX/pageY isn't supported (legacy browsers).
*
* NOTE: Scroll events do not bubble.
*
* @see http://www.quirksmode.org/dom/events/scroll.html
*/
ensureScrollValueMonitoring: function() {
if (hasEventPageXY === undefined) {
hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();
}
if (!hasEventPageXY && !isMonitoringScrollValue) {
var refresh = ViewportMetrics.refreshScrollValues;
ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
isMonitoringScrollValue = true;
}
},
});
module.exports = ReactBrowserEventEmitter;
@@ -435,20 +435,4 @@ describe('ReactBrowserEventEmitter', () => {
expect(idCallOrder[1] === PARENT).toBe(true);
expect(idCallOrder[2] === GRANDPARENT).toBe(true);
});
it('should not crash ensureScrollValueMonitoring when createEvent returns null', () => {
var originalCreateEvent = document.createEvent;
document.createEvent = function() {
return null;
};
spyOn(document, 'createEvent');
try {
var hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();
expect(document.createEvent.calls.count()).toBe(1);
expect(hasEventPageXY).toBe(false);
} finally {
document.createEvent = originalCreateEvent;
}
});
});
@@ -16,7 +16,6 @@ var EventPluginUtils = require('EventPluginUtils');
var EventPropagators = require('EventPropagators');
var SyntheticUIEvent = require('SyntheticUIEvent');
var TouchEventUtils = require('fbjs/lib/TouchEventUtils');
var ViewportMetrics = require('ViewportMetrics');
var isStartish = EventPluginUtils.isStartish;
var isEndish = EventPluginUtils.isEndish;
@@ -74,9 +73,7 @@ function getAxisCoordOfEvent(
if (singleTouch) {
return singleTouch[axis.page];
}
return axis.page in nativeEvent
? nativeEvent[axis.page]
: nativeEvent[axis.client] + ViewportMetrics[axis.envScroll];
return nativeEvent[axis.page];
}
function getDistance(coords: CoordinatesType, nativeEvent: _Touch): number {
@@ -12,7 +12,6 @@
'use strict';
var SyntheticUIEvent = require('SyntheticUIEvent');
var ViewportMetrics = require('ViewportMetrics');
var getEventModifierState = require('getEventModifierState');
@@ -25,6 +24,8 @@ var MouseEventInterface = {
screenY: null,
clientX: null,
clientY: null,
pageX: null,
pageY: null,
ctrlKey: null,
shiftKey: null,
altKey: null,
@@ -51,17 +52,6 @@ var MouseEventInterface = {
? 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;
},
};
/**
@@ -1,25 +0,0 @@
/**
* 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.
*
* @providesModule ViewportMetrics
*/
'use strict';
var ViewportMetrics = {
currentScrollLeft: 0,
currentScrollTop: 0,
refreshScrollValues: function(scrollPosition) {
ViewportMetrics.currentScrollLeft = scrollPosition.x;
ViewportMetrics.currentScrollTop = scrollPosition.y;
},
};
module.exports = ViewportMetrics;
@@ -14,7 +14,6 @@
var DOMLazyTree = require('DOMLazyTree');
var DOMProperty = require('DOMProperty');
var React = require('react');
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
var ReactCurrentOwner = require('react/lib/ReactCurrentOwner');
var ReactDOMComponentTree = require('ReactDOMComponentTree');
var ReactDOMContainerInfo = require('ReactDOMContainerInfo');
@@ -382,7 +381,6 @@ var ReactMount = {
'_registerComponent(...): Target container is not a DOM element.',
);
ReactBrowserEventEmitter.ensureScrollValueMonitoring();
var componentInstance = instantiateReactComponent(nextElement, false);
if (callback) {