mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
185 lines
5.5 KiB
JavaScript
185 lines
5.5 KiB
JavaScript
/**
|
|
* Copyright 2013-2014, 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 React
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var DOMPropertyOperations = require('DOMPropertyOperations');
|
|
var EventPluginUtils = require('EventPluginUtils');
|
|
var ReactChildren = require('ReactChildren');
|
|
var ReactComponent = require('ReactComponent');
|
|
var ReactCompositeComponent = require('ReactCompositeComponent');
|
|
var ReactContext = require('ReactContext');
|
|
var ReactCurrentOwner = require('ReactCurrentOwner');
|
|
var ReactElement = require('ReactElement');
|
|
var ReactElementValidator = require('ReactElementValidator');
|
|
var ReactDOM = require('ReactDOM');
|
|
var ReactDOMComponent = require('ReactDOMComponent');
|
|
var ReactDefaultInjection = require('ReactDefaultInjection');
|
|
var ReactInstanceHandles = require('ReactInstanceHandles');
|
|
var ReactLegacyElement = require('ReactLegacyElement');
|
|
var ReactMount = require('ReactMount');
|
|
var ReactMultiChild = require('ReactMultiChild');
|
|
var ReactPerf = require('ReactPerf');
|
|
var ReactPropTypes = require('ReactPropTypes');
|
|
var ReactServerRendering = require('ReactServerRendering');
|
|
var ReactTextComponent = require('ReactTextComponent');
|
|
|
|
var assign = require('Object.assign');
|
|
var deprecated = require('deprecated');
|
|
var onlyChild = require('onlyChild');
|
|
|
|
ReactDefaultInjection.inject();
|
|
|
|
var createElement = ReactElement.createElement;
|
|
var createFactory = ReactElement.createFactory;
|
|
|
|
if (__DEV__) {
|
|
createElement = ReactElementValidator.createElement;
|
|
createFactory = ReactElementValidator.createFactory;
|
|
}
|
|
|
|
// TODO: Drop legacy elements once classes no longer export these factories
|
|
createElement = ReactLegacyElement.wrapCreateElement(
|
|
createElement
|
|
);
|
|
createFactory = ReactLegacyElement.wrapCreateFactory(
|
|
createFactory
|
|
);
|
|
|
|
var render = ReactPerf.measure('React', 'render', ReactMount.render);
|
|
|
|
var React = {
|
|
Children: {
|
|
map: ReactChildren.map,
|
|
forEach: ReactChildren.forEach,
|
|
count: ReactChildren.count,
|
|
only: onlyChild
|
|
},
|
|
DOM: ReactDOM,
|
|
PropTypes: ReactPropTypes,
|
|
initializeTouchEvents: function(shouldUseTouch) {
|
|
EventPluginUtils.useTouchEvents = shouldUseTouch;
|
|
},
|
|
createClass: ReactCompositeComponent.createClass,
|
|
createElement: createElement,
|
|
createFactory: createFactory,
|
|
constructAndRenderComponent: ReactMount.constructAndRenderComponent,
|
|
constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,
|
|
render: render,
|
|
renderToString: ReactServerRendering.renderToString,
|
|
renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
|
|
unmountComponentAtNode: ReactMount.unmountComponentAtNode,
|
|
isValidClass: ReactLegacyElement.isValidClass,
|
|
isValidElement: ReactElement.isValidElement,
|
|
withContext: ReactContext.withContext,
|
|
|
|
// Hook for JSX spread, don't use this for anything else.
|
|
__spread: assign,
|
|
|
|
// Deprecations (remove for 0.13)
|
|
renderComponent: deprecated(
|
|
'React',
|
|
'renderComponent',
|
|
'render',
|
|
this,
|
|
render
|
|
),
|
|
renderComponentToString: deprecated(
|
|
'React',
|
|
'renderComponentToString',
|
|
'renderToString',
|
|
this,
|
|
ReactServerRendering.renderToString
|
|
),
|
|
renderComponentToStaticMarkup: deprecated(
|
|
'React',
|
|
'renderComponentToStaticMarkup',
|
|
'renderToStaticMarkup',
|
|
this,
|
|
ReactServerRendering.renderToStaticMarkup
|
|
),
|
|
isValidComponent: deprecated(
|
|
'React',
|
|
'isValidComponent',
|
|
'isValidElement',
|
|
this,
|
|
ReactElement.isValidElement
|
|
)
|
|
};
|
|
|
|
// Inject the runtime into a devtools global hook regardless of browser.
|
|
// Allows for debugging when the hook is injected on the page.
|
|
if (
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
|
|
Component: ReactComponent,
|
|
CurrentOwner: ReactCurrentOwner,
|
|
DOMComponent: ReactDOMComponent,
|
|
DOMPropertyOperations: DOMPropertyOperations,
|
|
InstanceHandles: ReactInstanceHandles,
|
|
Mount: ReactMount,
|
|
MultiChild: ReactMultiChild,
|
|
TextComponent: ReactTextComponent
|
|
});
|
|
}
|
|
|
|
if (__DEV__) {
|
|
var ExecutionEnvironment = require('ExecutionEnvironment');
|
|
if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
|
|
|
|
// If we're in Chrome, look for the devtools marker and provide a download
|
|
// link if not installed.
|
|
if (navigator.userAgent.indexOf('Chrome') > -1) {
|
|
if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
|
|
console.debug(
|
|
'Download the React DevTools for a better development experience: ' +
|
|
'http://fb.me/react-devtools'
|
|
);
|
|
}
|
|
}
|
|
|
|
var expectedFeatures = [
|
|
// shims
|
|
Array.isArray,
|
|
Array.prototype.every,
|
|
Array.prototype.forEach,
|
|
Array.prototype.indexOf,
|
|
Array.prototype.map,
|
|
Date.now,
|
|
Function.prototype.bind,
|
|
Object.keys,
|
|
String.prototype.split,
|
|
String.prototype.trim,
|
|
|
|
// shams
|
|
Object.create,
|
|
Object.freeze
|
|
];
|
|
|
|
for (var i = 0; i < expectedFeatures.length; i++) {
|
|
if (!expectedFeatures[i]) {
|
|
console.error(
|
|
'One or more ES5 shim/shams expected by React are not available: ' +
|
|
'http://fb.me/react-warning-polyfills'
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Version exists only in the open-source version of React, not in Facebook's
|
|
// internal version.
|
|
React.version = '0.12.2';
|
|
|
|
module.exports = React;
|