mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
116 lines
3.6 KiB
JavaScript
116 lines
3.6 KiB
JavaScript
/**
|
|
* Copyright 2013-2015, 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 ReactDOM
|
|
*/
|
|
|
|
/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
|
|
|
|
'use strict';
|
|
|
|
var ReactCurrentOwner = require('ReactCurrentOwner');
|
|
var ReactDOMTextComponent = require('ReactDOMTextComponent');
|
|
var ReactDefaultInjection = require('ReactDefaultInjection');
|
|
var ReactInstanceHandles = require('ReactInstanceHandles');
|
|
var ReactMount = require('ReactMount');
|
|
var ReactPerf = require('ReactPerf');
|
|
var ReactReconciler = require('ReactReconciler');
|
|
var ReactUpdates = require('ReactUpdates');
|
|
var ReactVersion = require('ReactVersion');
|
|
|
|
var findDOMNode = require('findDOMNode');
|
|
var renderSubtreeIntoContainer = require('renderSubtreeIntoContainer');
|
|
var warning = require('warning');
|
|
|
|
ReactDefaultInjection.inject();
|
|
|
|
var render = ReactPerf.measure('React', 'render', ReactMount.render);
|
|
|
|
var React = {
|
|
findDOMNode: findDOMNode,
|
|
render: render,
|
|
unmountComponentAtNode: ReactMount.unmountComponentAtNode,
|
|
version: ReactVersion,
|
|
|
|
/* eslint-disable camelcase */
|
|
unstable_batchedUpdates: ReactUpdates.batchedUpdates,
|
|
unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer,
|
|
/* eslint-enable camelcase */
|
|
};
|
|
|
|
// 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({
|
|
CurrentOwner: ReactCurrentOwner,
|
|
InstanceHandles: ReactInstanceHandles,
|
|
Mount: ReactMount,
|
|
Reconciler: ReactReconciler,
|
|
TextComponent: ReactDOMTextComponent,
|
|
});
|
|
}
|
|
|
|
if (__DEV__) {
|
|
var ExecutionEnvironment = require('ExecutionEnvironment');
|
|
if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
|
|
|
|
// First check if devtools is not installed
|
|
if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
|
|
// If we're in Chrome or Firefox, provide a download link if not installed.
|
|
if ((navigator.userAgent.indexOf('Chrome') > -1 &&
|
|
navigator.userAgent.indexOf('Edge') === -1) ||
|
|
navigator.userAgent.indexOf('Firefox') > -1) {
|
|
console.debug(
|
|
'Download the React DevTools for a better development experience: ' +
|
|
'https://fb.me/react-devtools'
|
|
);
|
|
}
|
|
}
|
|
|
|
// If we're in IE8, check to see if we are in compatibility mode and provide
|
|
// information on preventing compatibility mode
|
|
var ieCompatibilityMode =
|
|
document.documentMode && document.documentMode < 8;
|
|
|
|
warning(
|
|
!ieCompatibilityMode,
|
|
'Internet Explorer is running in compatibility mode; please add the ' +
|
|
'following tag to your HTML to prevent this from happening: ' +
|
|
'<meta http-equiv="X-UA-Compatible" content="IE=edge" />'
|
|
);
|
|
|
|
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,
|
|
];
|
|
|
|
for (var i = 0; i < expectedFeatures.length; i++) {
|
|
if (!expectedFeatures[i]) {
|
|
console.error(
|
|
'One or more ES5 shims expected by React are not available: ' +
|
|
'https://fb.me/react-warning-polyfills'
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = React;
|