mirror of
https://github.com/react/react.git
synced 2026-10-07 04:10:28 +08:00
Polyfill 'onSelect' behavior for React. Use non-standard 'selectionchange' event rather than 'select' event. This allows us to fire the event when user moves the cursor via arrow keys, and not just when they select multiple chars. Add methods to ReactDOMSelection to make getting current selection easier, so we can do a fast check for change without having to calculate char offsets for selection start and end.
92 lines
3.1 KiB
JavaScript
92 lines
3.1 KiB
JavaScript
/**
|
|
* Copyright 2013 Facebook, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* @providesModule ReactDefaultInjection
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var ReactDOM = require('ReactDOM');
|
|
var ReactDOMButton = require('ReactDOMButton');
|
|
var ReactDOMForm = require('ReactDOMForm');
|
|
var ReactDOMInput = require('ReactDOMInput');
|
|
var ReactDOMOption = require('ReactDOMOption');
|
|
var ReactDOMSelect = require('ReactDOMSelect');
|
|
var ReactDOMTextarea = require('ReactDOMTextarea');
|
|
var ReactEventEmitter = require('ReactEventEmitter');
|
|
var ReactEventTopLevelCallback = require('ReactEventTopLevelCallback');
|
|
var ReactPerf = require('ReactPerf');
|
|
|
|
var DefaultDOMPropertyConfig = require('DefaultDOMPropertyConfig');
|
|
var DOMProperty = require('DOMProperty');
|
|
|
|
var ChangeEventPlugin = require('ChangeEventPlugin');
|
|
var CompositionEventPlugin = require('CompositionEventPlugin');
|
|
var DefaultEventPluginOrder = require('DefaultEventPluginOrder');
|
|
var EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');
|
|
var EventPluginHub = require('EventPluginHub');
|
|
var MobileSafariClickEventPlugin = require('MobileSafariClickEventPlugin');
|
|
var ReactInstanceHandles = require('ReactInstanceHandles');
|
|
var SelectEventPlugin = require('SelectEventPlugin');
|
|
var SimpleEventPlugin = require('SimpleEventPlugin');
|
|
|
|
var ReactDefaultBatchingStrategy = require('ReactDefaultBatchingStrategy');
|
|
var ReactUpdates = require('ReactUpdates');
|
|
|
|
function inject() {
|
|
ReactEventEmitter.TopLevelCallbackCreator = ReactEventTopLevelCallback;
|
|
/**
|
|
* Inject module for resolving DOM hierarchy and plugin ordering.
|
|
*/
|
|
EventPluginHub.injection.injectEventPluginOrder(DefaultEventPluginOrder);
|
|
EventPluginHub.injection.injectInstanceHandle(ReactInstanceHandles);
|
|
|
|
/**
|
|
* Some important event plugins included by default (without having to require
|
|
* them).
|
|
*/
|
|
EventPluginHub.injection.injectEventPluginsByName({
|
|
'SimpleEventPlugin': SimpleEventPlugin,
|
|
'EnterLeaveEventPlugin': EnterLeaveEventPlugin,
|
|
'ChangeEventPlugin': ChangeEventPlugin,
|
|
'CompositionEventPlugin': CompositionEventPlugin,
|
|
'MobileSafariClickEventPlugin': MobileSafariClickEventPlugin,
|
|
'SelectEventPlugin': SelectEventPlugin
|
|
});
|
|
|
|
ReactDOM.injection.injectComponentClasses({
|
|
button: ReactDOMButton,
|
|
form: ReactDOMForm,
|
|
input: ReactDOMInput,
|
|
option: ReactDOMOption,
|
|
select: ReactDOMSelect,
|
|
textarea: ReactDOMTextarea
|
|
});
|
|
|
|
DOMProperty.injection.injectDOMPropertyConfig(DefaultDOMPropertyConfig);
|
|
|
|
if (__DEV__) {
|
|
ReactPerf.injection.injectMeasure(require('ReactDefaultPerf').measure);
|
|
}
|
|
|
|
ReactUpdates.injection.injectBatchingStrategy(
|
|
ReactDefaultBatchingStrategy
|
|
);
|
|
}
|
|
|
|
module.exports = {
|
|
inject: inject
|
|
};
|