@samitouri / QOS-React-2 / commits / 09c8ec51bf

Check for selection on keyup instead of deferring

This is essentially what we do for the change event in IE8 and IE9 already.

Ben Alpert committed Dec 31, 2013 at 17:42 UTC 09c8ec51bf28aab80b5b0dc23973fe32472f14d1
1 file changed +6 -36
src/eventPlugins/SelectEventPlugin.js
+6 -36
@@ -19,9 +19,7 @@
19 "use strict";
20
21 var EventConstants = require('EventConstants');
22 -var EventPluginHub = require('EventPluginHub');
22 var EventPropagators = require('EventPropagators');
24 -var ExecutionEnvironment = require('ExecutionEnvironment');
23 var ReactInputSelection = require('ReactInputSelection');
24 var SyntheticEvent = require('SyntheticEvent');
25
@@ -49,15 +47,8 @@ var eventTypes = {
47 }
48 };
49
52 -var useSelectionChange = false;
53 -
54 -if (ExecutionEnvironment.canUseDOM) {
55 - useSelectionChange = 'onselectionchange' in document;
56 -}
57 -
50 var activeElement = null;
51 var activeElementID = null;
60 -var activeNativeEvent = null;
52 var lastSelection = null;
53 var mouseDown = false;
54
@@ -129,24 +120,6 @@ function constructSelectEvent(nativeEvent) {
120 }
121 }
122
132 -/**
133 - * Handle deferred event. And manually dispatch synthetic events.
134 - */
135 -function dispatchDeferredSelectEvent() {
136 - if (!activeNativeEvent) {
137 - return;
138 - }
139 -
140 - var syntheticEvent = constructSelectEvent(activeNativeEvent);
141 - activeNativeEvent = null;
142 -
143 - // Enqueue and process the abstract event manually.
144 - if (syntheticEvent) {
145 - EventPluginHub.enqueueEvents(syntheticEvent);
146 - EventPluginHub.processEventQueue();
147 - }
148 -}
149 -
123 /**
124 * This plugin creates an `onSelect` event that normalizes select events
125 * across form elements.
@@ -207,17 +180,14 @@ var SelectEventPlugin = {
180
181 // Chrome and IE fire non-standard event when selection is changed (and
182 // sometimes when it hasn't).
210 - case topLevelTypes.topSelectionChange:
211 - return constructSelectEvent(nativeEvent);
212 -
183 // Firefox doesn't support selectionchange, so check selection status
214 - // after each key entry.
184 + // after each key entry. The selection changes after keydown and before
185 + // keyup, but we check on keydown as well in the case of holding down a
186 + // key, when multiple keydown events are fired but only one keyup is.
187 + case topLevelTypes.topSelectionChange:
188 case topLevelTypes.topKeyDown:
216 - if (!useSelectionChange) {
217 - activeNativeEvent = nativeEvent;
218 - setTimeout(dispatchDeferredSelectEvent, 0);
219 - }
220 - break;
189 + case topLevelTypes.topKeyUp:
190 + return constructSelectEvent(nativeEvent);
191 }
192 }
193 };