diff --git a/src/renderers/dom/client/ReactBrowserEventEmitter.js b/src/renderers/dom/client/ReactBrowserEventEmitter.js index 6e498ec28a..3d71766bd2 100644 --- a/src/renderers/dom/client/ReactBrowserEventEmitter.js +++ b/src/renderers/dom/client/ReactBrowserEventEmitter.js @@ -13,10 +13,8 @@ 'use strict'; var EventConstants = require('EventConstants'); -var EventPluginHub = require('EventPluginHub'); var EventPluginRegistry = require('EventPluginRegistry'); var ReactEventEmitterMixin = require('ReactEventEmitterMixin'); -var ReactPerf = require('ReactPerf'); var ViewportMetrics = require('ViewportMetrics'); var assign = require('Object.assign'); @@ -166,7 +164,7 @@ function getListeningForDocument(mountAt) { * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For * example: * - * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction); + * EventPluginHub.putListener('myID', 'onClick', myFunction); * * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'. * @@ -360,23 +358,6 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, { } }, - eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs, - - registrationNameModules: EventPluginHub.registrationNameModules, - - putListener: EventPluginHub.putListener, - - getListener: EventPluginHub.getListener, - - deleteListener: EventPluginHub.deleteListener, - - deleteAllListeners: EventPluginHub.deleteAllListeners, - -}); - -ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', { - putListener: 'putListener', - deleteListener: 'deleteListener', }); module.exports = ReactBrowserEventEmitter; diff --git a/src/renderers/dom/client/__tests__/ReactBrowserEventEmitter-test.js b/src/renderers/dom/client/__tests__/ReactBrowserEventEmitter-test.js index 3063754c20..09796a81a3 100644 --- a/src/renderers/dom/client/__tests__/ReactBrowserEventEmitter-test.js +++ b/src/renderers/dom/client/__tests__/ReactBrowserEventEmitter-test.js @@ -25,6 +25,7 @@ var oldGetNode; var oldGetFirstReactDOM; var EventPluginHub; +var EventPluginRegistry; var ReactBrowserEventEmitter; var ReactTestUtils; var TapEventPlugin; @@ -66,11 +67,10 @@ setID(PARENT, '.0.0.0'); setID(GRANDPARENT, '.0.0'); function registerSimpleTestHandler() { - ReactBrowserEventEmitter.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER); - var listener = - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY); + EventPluginHub.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER); + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY); expect(listener).toEqual(LISTENER); - return ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY); + return EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY); } @@ -79,6 +79,7 @@ describe('ReactBrowserEventEmitter', function() { require('mock-modules').dumpCache(); LISTENER.mockClear(); EventPluginHub = require('EventPluginHub'); + EventPluginRegistry = require('EventPluginRegistry'); TapEventPlugin = require('TapEventPlugin'); ReactMount = require('ReactMount'); EventListener = require('EventListener'); @@ -108,23 +109,20 @@ describe('ReactBrowserEventEmitter', function() { it('should store a listener correctly', function() { registerSimpleTestHandler(); - var listener = - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY); + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY); expect(listener).toBe(LISTENER); }); it('should retrieve a listener correctly', function() { registerSimpleTestHandler(); - var listener = - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY); + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY); expect(listener).toEqual(LISTENER); }); it('should clear all handlers when asked to', function() { registerSimpleTestHandler(); - ReactBrowserEventEmitter.deleteAllListeners(getID(CHILD)); - var listener = - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY); + EventPluginHub.deleteAllListeners(getID(CHILD)); + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY); expect(listener).toBe(undefined); }); @@ -148,17 +146,17 @@ describe('ReactBrowserEventEmitter', function() { ); it('should bubble simply', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, recordID.bind(null, getID(CHILD)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, recordID.bind(null, getID(PARENT)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_CLICK_KEY, recordID.bind(null, getID(GRANDPARENT)) @@ -171,12 +169,12 @@ describe('ReactBrowserEventEmitter', function() { }); it('should continue bubbling if an error is thrown', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, recordID.bind(null, getID(CHILD)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, function() { @@ -184,7 +182,7 @@ describe('ReactBrowserEventEmitter', function() { throw new Error('Handler interrupted'); } ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_CLICK_KEY, recordID.bind(null, getID(GRANDPARENT)) @@ -199,7 +197,7 @@ describe('ReactBrowserEventEmitter', function() { }); it('should set currentTarget', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, function(event) { @@ -207,7 +205,7 @@ describe('ReactBrowserEventEmitter', function() { expect(event.currentTarget).toBe(CHILD); } ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, function(event) { @@ -215,7 +213,7 @@ describe('ReactBrowserEventEmitter', function() { expect(event.currentTarget).toBe(PARENT); } ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_CLICK_KEY, function(event) { @@ -231,17 +229,17 @@ describe('ReactBrowserEventEmitter', function() { }); it('should support stopPropagation()', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, recordID.bind(null, getID(CHILD)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, recordIDAndStopPropagation.bind(null, getID(PARENT)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_CLICK_KEY, recordID.bind(null, getID(GRANDPARENT)) @@ -253,17 +251,17 @@ describe('ReactBrowserEventEmitter', function() { }); it('should stop after first dispatch if stopPropagation', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, recordIDAndStopPropagation.bind(null, getID(CHILD)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, recordID.bind(null, getID(PARENT)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_CLICK_KEY, recordID.bind(null, getID(GRANDPARENT)) @@ -274,17 +272,17 @@ describe('ReactBrowserEventEmitter', function() { }); it('should not stopPropagation if false is returned', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, recordIDAndReturnFalse.bind(null, getID(CHILD)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, recordID.bind(null, getID(PARENT)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_CLICK_KEY, recordID.bind(null, getID(GRANDPARENT)) @@ -310,14 +308,14 @@ describe('ReactBrowserEventEmitter', function() { it('should invoke handlers that were removed while bubbling', function() { var handleParentClick = mocks.getMockFunction(); var handleChildClick = function(event) { - ReactBrowserEventEmitter.deleteAllListeners(getID(PARENT)); + EventPluginHub.deleteAllListeners(getID(PARENT)); }; - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, handleChildClick ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, handleParentClick @@ -329,13 +327,13 @@ describe('ReactBrowserEventEmitter', function() { it('should not invoke newly inserted handlers while bubbling', function() { var handleParentClick = mocks.getMockFunction(); var handleChildClick = function(event) { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_CLICK_KEY, handleParentClick ); }; - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_CLICK_KEY, handleChildClick @@ -345,7 +343,7 @@ describe('ReactBrowserEventEmitter', function() { }); it('should have mouse enter simulated by test utils', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_MOUSE_ENTER_KEY, recordID.bind(null, getID(CHILD)) @@ -356,7 +354,7 @@ describe('ReactBrowserEventEmitter', function() { }); it('should infer onTouchTap from a touchStart/End', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_TOUCH_TAP_KEY, recordID.bind(null, getID(CHILD)) @@ -374,7 +372,7 @@ describe('ReactBrowserEventEmitter', function() { }); it('should infer onTouchTap from when dragging below threshold', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_TOUCH_TAP_KEY, recordID.bind(null, getID(CHILD)) @@ -392,7 +390,7 @@ describe('ReactBrowserEventEmitter', function() { }); it('should not onTouchTap from when dragging beyond threshold', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_TOUCH_TAP_KEY, recordID.bind(null, getID(CHILD)) @@ -439,8 +437,7 @@ describe('ReactBrowserEventEmitter', function() { setEventListeners.push(captureCalls[i][1]); } - var module = - ReactBrowserEventEmitter.registrationNameModules[ON_CHANGE_KEY]; + var module = EventPluginRegistry.registrationNameModules[ON_CHANGE_KEY]; var dependencies = module.eventTypes.change.dependencies; expect(setEventListeners.length).toEqual(dependencies.length); @@ -450,17 +447,17 @@ describe('ReactBrowserEventEmitter', function() { }); it('should bubble onTouchTap', function() { - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(CHILD), ON_TOUCH_TAP_KEY, recordID.bind(null, getID(CHILD)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(PARENT), ON_TOUCH_TAP_KEY, recordID.bind(null, getID(PARENT)) ); - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( getID(GRANDPARENT), ON_TOUCH_TAP_KEY, recordID.bind(null, getID(GRANDPARENT)) diff --git a/src/renderers/dom/shared/ReactDOMComponent.js b/src/renderers/dom/shared/ReactDOMComponent.js index c7a3ae1f19..71dccbabbe 100644 --- a/src/renderers/dom/shared/ReactDOMComponent.js +++ b/src/renderers/dom/shared/ReactDOMComponent.js @@ -20,6 +20,8 @@ var DOMNamespaces = require('DOMNamespaces'); var DOMProperty = require('DOMProperty'); var DOMPropertyOperations = require('DOMPropertyOperations'); var EventConstants = require('EventConstants'); +var EventPluginHub = require('EventPluginHub'); +var EventPluginRegistry = require('EventPluginRegistry'); var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter'); var ReactComponentBrowserEnvironment = require('ReactComponentBrowserEnvironment'); @@ -45,9 +47,9 @@ var shallowEqual = require('shallowEqual'); var validateDOMNesting = require('validateDOMNesting'); var warning = require('warning'); -var deleteListener = ReactBrowserEventEmitter.deleteListener; +var deleteListener = EventPluginHub.deleteListener; var listenTo = ReactBrowserEventEmitter.listenTo; -var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules; +var registrationNameModules = EventPluginRegistry.registrationNameModules; // For quickly matching children type, to test if can be treated as content. var CONTENT_TYPES = {'string': true, 'number': true}; @@ -312,7 +314,7 @@ function enqueuePutListener(id, registrationName, listener, transaction) { function putListener() { var listenerToPut = this; - ReactBrowserEventEmitter.putListener( + EventPluginHub.putListener( listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener @@ -1146,7 +1148,7 @@ ReactDOMComponent.Mixin = { this._nativeNode = null; this.unmountChildren(); - ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID); + EventPluginHub.deleteAllListeners(this._rootNodeID); ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID); this._rootNodeID = null; this._wrapperState = null; diff --git a/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js b/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js index 6604bda726..881a185d47 100644 --- a/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js +++ b/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js @@ -819,7 +819,7 @@ describe('ReactDOMComponent', function() { describe('unmountComponent', function() { it('should clean up listeners', function() { - var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter'); + var EventPluginHub = require('EventPluginHub'); var ReactMount = require('ReactMount'); var container = document.createElement('div'); @@ -832,14 +832,14 @@ describe('ReactDOMComponent', function() { var rootNode = ReactDOM.findDOMNode(instance); var rootNodeID = ReactMount.getID(rootNode); expect( - ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick') + EventPluginHub.getListener(rootNodeID, 'onClick') ).toBe(callback); expect(rootNode).toBe(ReactDOM.findDOMNode(instance)); ReactDOM.unmountComponentAtNode(container); expect( - ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick') + EventPluginHub.getListener(rootNodeID, 'onClick') ).toBe(undefined); }); }); diff --git a/src/renderers/shared/event/EventPluginHub.js b/src/renderers/shared/event/EventPluginHub.js index 41b77dd948..c456683c23 100644 --- a/src/renderers/shared/event/EventPluginHub.js +++ b/src/renderers/shared/event/EventPluginHub.js @@ -14,6 +14,7 @@ var EventPluginRegistry = require('EventPluginRegistry'); var EventPluginUtils = require('EventPluginUtils'); var ReactErrorUtils = require('ReactErrorUtils'); +var ReactPerf = require('ReactPerf'); var accumulateInto = require('accumulateInto'); var forEachAccumulated = require('forEachAccumulated'); @@ -137,10 +138,6 @@ var EventPluginHub = { }, - eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs, - - registrationNameModules: EventPluginRegistry.registrationNameModules, - /** * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent. * @@ -311,4 +308,9 @@ var EventPluginHub = { }; +ReactPerf.measureMethods(EventPluginHub, 'EventPluginHub', { + putListener: 'putListener', + deleteListener: 'deleteListener', +}); + module.exports = EventPluginHub; diff --git a/src/test/ReactDefaultPerf.js b/src/test/ReactDefaultPerf.js index 22b613a11d..c854d2e427 100644 --- a/src/test/ReactDefaultPerf.js +++ b/src/test/ReactDefaultPerf.js @@ -165,7 +165,7 @@ var ReactDefaultPerf = { ].totalTime = performanceNow() - start; return rv; } else if (fnName === '_mountImageIntoNode' || - moduleName === 'ReactBrowserEventEmitter' || + moduleName === 'EventPluginHub' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || diff --git a/src/test/ReactTestUtils.js b/src/test/ReactTestUtils.js index 8ee27c7b5e..64b39fe5e3 100644 --- a/src/test/ReactTestUtils.js +++ b/src/test/ReactTestUtils.js @@ -14,6 +14,7 @@ var ClientReactRootIndex = require('ClientReactRootIndex'); var EventConstants = require('EventConstants'); var EventPluginHub = require('EventPluginHub'); +var EventPluginRegistry = require('EventPluginRegistry'); var EventPropagators = require('EventPropagators'); var React = require('React'); var ReactDOM = require('ReactDOM'); @@ -476,7 +477,7 @@ function makeSimulator(eventType) { } var dispatchConfig = - ReactBrowserEventEmitter.eventNameDispatchConfigs[eventType]; + EventPluginRegistry.eventNameDispatchConfigs[eventType]; var fakeNativeEvent = new Event(); fakeNativeEvent.target = node; @@ -507,7 +508,7 @@ function buildSimulators() { ReactTestUtils.Simulate = {}; var eventType; - for (eventType in ReactBrowserEventEmitter.eventNameDispatchConfigs) { + for (eventType in EventPluginRegistry.eventNameDispatchConfigs) { /** * @param {!Element|ReactDOMComponent} domComponentOrNode * @param {?object} eventData Fake event data to use in SyntheticEvent.