@samitouri / QOS-React / commits / bd2802523c

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

* Remove viewport metrics event.pageX and event.pageY are in every browser React supports. * Rerecord tests

Nathan Hunzaker committed Mar 30, 2017 at 21:20 UTC bd2802523c3b1587a79d6ac06cb0e9351b3e68d8
7 files changed +3 -98
scripts/fiber/tests-passing.txt
-1
@@ -868,7 +868,6 @@ src/renderers/dom/shared/__tests__/ReactBrowserEventEmitter-test.js
868 * should work with event plugins without dependencies
869 * should work with event plugins with dependencies
870 * should bubble onTouchTap
871 -* should not crash ensureScrollValueMonitoring when createEvent returns null
871
872 src/renderers/dom/shared/__tests__/ReactDOM-test.js
873 * allows a DOM element to be used with a string
src/renderers/dom/shared/ReactBrowserEventEmitter.js
-38
@@ -13,7 +13,6 @@
13
14 var EventPluginRegistry = require('EventPluginRegistry');
15 var ReactEventEmitterMixin = require('ReactEventEmitterMixin');
16 -var ViewportMetrics = require('ViewportMetrics');
16
17 var getVendorPrefixedEventName = require('getVendorPrefixedEventName');
18 var isEventSupported = require('isEventSupported');
@@ -73,9 +72,7 @@ var isEventSupported = require('isEventSupported');
72 * React Core . General Purpose Event Plugin System
73 */
74
76 -var hasEventPageXY;
75 var alreadyListeningTo = {};
78 -var isMonitoringScrollValue = false;
76 var reactTopListenersCounter = 0;
77
78 // For events like 'submit' which don't consistently bubble (which we trap at a
@@ -344,41 +341,6 @@ var ReactBrowserEventEmitter = Object.assign({}, ReactEventEmitterMixin, {
341 handle,
342 );
343 },
347 -
348 - /**
349 - * Protect against document.createEvent() returning null
350 - * Some popup blocker extensions appear to do this:
351 - * https://github.com/facebook/react/issues/6887
352 - */
353 - supportsEventPageXY: function() {
354 - if (!document.createEvent) {
355 - return false;
356 - }
357 - var ev = document.createEvent('MouseEvent');
358 - return ev != null && 'pageX' in ev;
359 - },
360 -
361 - /**
362 - * Listens to window scroll and resize events. We cache scroll values so that
363 - * application code can access them without triggering reflows.
364 - *
365 - * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when
366 - * pageX/pageY isn't supported (legacy browsers).
367 - *
368 - * NOTE: Scroll events do not bubble.
369 - *
370 - * @see http://www.quirksmode.org/dom/events/scroll.html
371 - */
372 - ensureScrollValueMonitoring: function() {
373 - if (hasEventPageXY === undefined) {
374 - hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();
375 - }
376 - if (!hasEventPageXY && !isMonitoringScrollValue) {
377 - var refresh = ViewportMetrics.refreshScrollValues;
378 - ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
379 - isMonitoringScrollValue = true;
380 - }
381 - },
344 });
345
346 module.exports = ReactBrowserEventEmitter;
src/renderers/dom/shared/__tests__/ReactBrowserEventEmitter-test.js
-16
@@ -435,20 +435,4 @@ describe('ReactBrowserEventEmitter', () => {
435 expect(idCallOrder[1] === PARENT).toBe(true);
436 expect(idCallOrder[2] === GRANDPARENT).toBe(true);
437 });
438 -
439 - it('should not crash ensureScrollValueMonitoring when createEvent returns null', () => {
440 - var originalCreateEvent = document.createEvent;
441 - document.createEvent = function() {
442 - return null;
443 - };
444 - spyOn(document, 'createEvent');
445 -
446 - try {
447 - var hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();
448 - expect(document.createEvent.calls.count()).toBe(1);
449 - expect(hasEventPageXY).toBe(false);
450 - } finally {
451 - document.createEvent = originalCreateEvent;
452 - }
453 - });
438 });
src/renderers/dom/shared/eventPlugins/TapEventPlugin.js
+1 -4
@@ -16,7 +16,6 @@ var EventPluginUtils = require('EventPluginUtils');
16 var EventPropagators = require('EventPropagators');
17 var SyntheticUIEvent = require('SyntheticUIEvent');
18 var TouchEventUtils = require('fbjs/lib/TouchEventUtils');
19 -var ViewportMetrics = require('ViewportMetrics');
19
20 var isStartish = EventPluginUtils.isStartish;
21 var isEndish = EventPluginUtils.isEndish;
@@ -74,9 +73,7 @@ function getAxisCoordOfEvent(
73 if (singleTouch) {
74 return singleTouch[axis.page];
75 }
77 - return axis.page in nativeEvent
78 - ? nativeEvent[axis.page]
79 - : nativeEvent[axis.client] + ViewportMetrics[axis.envScroll];
76 + return nativeEvent[axis.page];
77 }
78
79 function getDistance(coords: CoordinatesType, nativeEvent: _Touch): number {
src/renderers/dom/shared/syntheticEvents/SyntheticMouseEvent.js
+2 -12
@@ -12,7 +12,6 @@
12 'use strict';
13
14 var SyntheticUIEvent = require('SyntheticUIEvent');
15 -var ViewportMetrics = require('ViewportMetrics');
15
16 var getEventModifierState = require('getEventModifierState');
17
@@ -25,6 +24,8 @@ var MouseEventInterface = {
24 screenY: null,
25 clientX: null,
26 clientY: null,
27 + pageX: null,
28 + pageY: null,
29 ctrlKey: null,
30 shiftKey: null,
31 altKey: null,
@@ -51,17 +52,6 @@ var MouseEventInterface = {
52 ? event.toElement
53 : event.fromElement);
54 },
54 - // "Proprietary" Interface.
55 - pageX: function(event) {
56 - return 'pageX' in event
57 - ? event.pageX
58 - : event.clientX + ViewportMetrics.currentScrollLeft;
59 - },
60 - pageY: function(event) {
61 - return 'pageY' in event
62 - ? event.pageY
63 - : event.clientY + ViewportMetrics.currentScrollTop;
64 - },
55 };
56
57 /**
src/renderers/dom/shared/utils/ViewportMetrics.js deleted
-25
@@ -1,25 +0,0 @@
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 - * @providesModule ViewportMetrics
10 - */
11 -
12 -'use strict';
13 -
14 -var ViewportMetrics = {
15 - currentScrollLeft: 0,
16 -
17 - currentScrollTop: 0,
18 -
19 - refreshScrollValues: function(scrollPosition) {
20 - ViewportMetrics.currentScrollLeft = scrollPosition.x;
21 - ViewportMetrics.currentScrollTop = scrollPosition.y;
22 - },
23 -};
24 -
25 -module.exports = ViewportMetrics;
src/renderers/dom/stack/client/ReactMount.js
-2
@@ -14,7 +14,6 @@
14 var DOMLazyTree = require('DOMLazyTree');
15 var DOMProperty = require('DOMProperty');
16 var React = require('react');
17 -var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
17 var ReactCurrentOwner = require('react/lib/ReactCurrentOwner');
18 var ReactDOMComponentTree = require('ReactDOMComponentTree');
19 var ReactDOMContainerInfo = require('ReactDOMContainerInfo');
@@ -382,7 +381,6 @@ var ReactMount = {
381 '_registerComponent(...): Target container is not a DOM element.',
382 );
383
385 - ReactBrowserEventEmitter.ensureScrollValueMonitoring();
384 var componentInstance = instantiateReactComponent(nextElement, false);
385
386 if (callback) {