react 0.14.0-alpha1 → 0.14.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/addons.js +5 -2
- package/dist/JSXTransformer.js +634 -274
- package/dist/react-with-addons.js +5376 -4800
- package/dist/react-with-addons.min.js +6 -6
- package/dist/react.js +5175 -4626
- package/dist/react.min.js +6 -5
- package/lib/{AutoFocusMixin.js → AutoFocusUtils.js} +15 -5
- package/lib/BeforeInputEventPlugin.js +13 -13
- package/lib/CSSProperty.js +3 -0
- package/lib/CSSPropertyOperations.js +13 -13
- package/lib/CallbackQueue.js +4 -4
- package/lib/ChangeEventPlugin.js +16 -14
- package/lib/DOMChildrenOperations.js +10 -6
- package/lib/DOMProperty.js +82 -119
- package/lib/DOMPropertyOperations.js +78 -33
- package/lib/Danger.js +14 -16
- package/lib/DefaultEventPluginOrder.js +2 -2
- package/lib/EnterLeaveEventPlugin.js +8 -8
- package/lib/EventConstants.js +23 -1
- package/lib/EventPluginHub.js +13 -13
- package/lib/EventPluginRegistry.js +8 -8
- package/lib/EventPluginUtils.js +17 -17
- package/lib/EventPropagators.js +7 -7
- package/lib/FallbackCompositionState.js +3 -3
- package/lib/HTMLDOMPropertyConfig.js +14 -5
- package/lib/LinkedStateMixin.js +2 -2
- package/lib/LinkedValueUtils.js +50 -38
- package/lib/MetaMatchers.js +118 -0
- package/lib/OrderedMap.js +453 -0
- package/lib/PooledClass.js +14 -2
- package/lib/React.js +9 -111
- package/lib/ReactBrowserComponentMixin.js +4 -4
- package/lib/ReactBrowserEventEmitter.js +30 -7
- package/lib/ReactCSSTransitionGroup.js +16 -5
- package/lib/ReactCSSTransitionGroupChild.js +20 -11
- package/lib/ReactChildReconciler.js +25 -18
- package/lib/ReactChildren.js +24 -22
- package/lib/ReactClass.js +68 -86
- package/lib/ReactComponent.js +22 -17
- package/lib/ReactComponentBrowserEnvironment.js +2 -4
- package/lib/ReactComponentEnvironment.js +2 -2
- package/lib/ReactComponentWithPureRenderMixin.js +3 -3
- package/lib/ReactCompositeComponent.js +80 -111
- package/lib/ReactDOM.js +72 -158
- package/lib/ReactDOMButton.js +15 -26
- package/lib/ReactDOMComponent.js +384 -62
- package/lib/ReactDOMFactories.js +177 -0
- package/lib/ReactDOMIDOperations.js +23 -25
- package/lib/ReactDOMInput.js +83 -99
- package/lib/ReactDOMOption.js +38 -42
- package/lib/ReactDOMSelect.js +88 -98
- package/lib/ReactDOMSelection.js +3 -3
- package/lib/ReactDOMServer.js +24 -0
- package/lib/ReactDOMTextComponent.js +13 -13
- package/lib/ReactDOMTextarea.js +48 -61
- package/lib/ReactDefaultBatchingStrategy.js +4 -4
- package/lib/ReactDefaultInjection.js +34 -71
- package/lib/ReactDefaultPerf.js +7 -7
- package/lib/ReactDefaultPerfAnalysis.js +6 -9
- package/lib/ReactElement.js +35 -92
- package/lib/ReactElementValidator.js +53 -130
- package/lib/ReactEmptyComponent.js +4 -4
- package/lib/ReactErrorUtils.js +1 -1
- package/lib/ReactEventEmitterMixin.js +3 -4
- package/lib/ReactEventListener.js +57 -12
- package/lib/ReactFragment.js +22 -17
- package/lib/ReactInjection.js +11 -11
- package/lib/ReactInputSelection.js +8 -7
- package/lib/ReactInstanceHandles.js +12 -12
- package/lib/ReactIsomorphic.js +70 -0
- package/lib/ReactLink.js +1 -1
- package/lib/ReactMarkupChecksum.js +6 -2
- package/lib/ReactMount.js +90 -89
- package/lib/ReactMultiChild.js +83 -22
- package/lib/ReactMultiChildUpdateTypes.js +2 -1
- package/lib/ReactNativeComponent.js +3 -8
- package/lib/ReactNoopUpdateQueue.js +118 -0
- package/lib/ReactOwner.js +3 -3
- package/lib/ReactPerf.js +2 -2
- package/lib/ReactPropTransferer.js +3 -3
- package/lib/ReactPropTypeLocationNames.js +1 -1
- package/lib/ReactPropTypeLocations.js +1 -1
- package/lib/ReactPropTypes.js +72 -33
- package/lib/ReactReconcileTransaction.js +8 -8
- package/lib/ReactReconciler.js +18 -20
- package/lib/ReactRef.js +1 -1
- package/lib/ReactServerBatchingStrategy.js +23 -0
- package/lib/ReactServerRendering.js +22 -9
- package/lib/ReactServerRenderingTransaction.js +7 -7
- package/lib/ReactTestUtils.js +80 -58
- package/lib/ReactTransitionChildMapping.js +2 -2
- package/lib/ReactTransitionEvents.js +1 -1
- package/lib/ReactTransitionGroup.js +5 -6
- package/lib/ReactUpdateQueue.js +61 -36
- package/lib/ReactUpdates.js +14 -17
- package/lib/ReactWithAddons.js +14 -16
- package/lib/ResponderEventPlugin.js +514 -0
- package/lib/ResponderSyntheticEvent.js +40 -0
- package/lib/ResponderTouchHistoryStore.js +180 -0
- package/lib/SVGDOMPropertyConfig.js +1 -3
- package/lib/SelectEventPlugin.js +14 -15
- package/lib/SimpleEventPlugin.js +205 -29
- package/lib/SyntheticClipboardEvent.js +3 -3
- package/lib/SyntheticCompositionEvent.js +3 -3
- package/lib/SyntheticDragEvent.js +3 -3
- package/lib/SyntheticEvent.js +9 -8
- package/lib/SyntheticFocusEvent.js +3 -3
- package/lib/SyntheticInputEvent.js +3 -3
- package/lib/SyntheticKeyboardEvent.js +6 -6
- package/lib/SyntheticMouseEvent.js +5 -5
- package/lib/SyntheticTouchEvent.js +4 -4
- package/lib/SyntheticUIEvent.js +4 -4
- package/lib/SyntheticWheelEvent.js +3 -3
- package/lib/TapEventPlugin.js +119 -0
- package/lib/Transaction.js +16 -10
- package/lib/accumulate.js +44 -0
- package/lib/accumulateInto.js +2 -2
- package/lib/adler32.js +19 -9
- package/lib/cloneWithProps.js +12 -7
- package/lib/createHierarchyRenderer.js +85 -0
- package/lib/dangerousStyleValue.js +1 -1
- package/lib/deprecated.js +47 -0
- package/lib/findDOMNode.js +11 -12
- package/lib/flattenChildren.js +4 -4
- package/lib/forEachAccumulated.js +1 -1
- package/lib/getEventCharCode.js +1 -1
- package/lib/getEventKey.js +1 -1
- package/lib/getEventModifierState.js +0 -1
- package/lib/getTestDocument.js +28 -0
- package/lib/getTextContentAccessor.js +1 -1
- package/lib/instantiateReactComponent.js +24 -20
- package/lib/isEventSupported.js +1 -1
- package/lib/isTextInputElement.js +2 -1
- package/lib/joinClasses.js +1 -1
- package/lib/onlyChild.js +3 -3
- package/lib/quoteAttributeValueForBrowser.js +1 -1
- package/lib/reactComponentExpect.js +210 -0
- package/lib/renderSubtreeIntoContainer.js +1 -1
- package/lib/setInnerHTML.js +2 -2
- package/lib/setTextContent.js +3 -3
- package/lib/shallowCompare.js +1 -1
- package/lib/sliceChildren.js +51 -0
- package/lib/traverseAllChildren.js +24 -27
- package/lib/update.js +13 -13
- package/lib/validateDOMNesting.js +199 -100
- package/lib/webcomponents.js +6379 -0
- package/package.json +4 -6
- package/react.js +53 -1
- package/addons/CSSTransitionGroup.js +0 -1
- package/addons/LinkedStateMixin.js +0 -1
- package/addons/Perf.js +0 -1
- package/addons/PureRenderMixin.js +0 -1
- package/addons/TestUtils.js +0 -1
- package/addons/TransitionGroup.js +0 -1
- package/addons/batchedUpdates.js +0 -1
- package/addons/cloneWithProps.js +0 -1
- package/addons/createFragment.js +0 -1
- package/addons/renderSubtreeIntoContainer.js +0 -1
- package/addons/shallowCompare.js +0 -1
- package/addons/update.js +0 -1
- package/lib/CSSCore.js +0 -97
- package/lib/EventListener.js +0 -84
- package/lib/ExecutionEnvironment.js +0 -38
- package/lib/LocalEventTrapMixin.js +0 -46
- package/lib/ReactContext.js +0 -32
- package/lib/ReactDOMForm.js +0 -47
- package/lib/ReactDOMIframe.js +0 -43
- package/lib/ReactDOMImg.js +0 -44
- package/lib/ReactLifeCycle.js +0 -35
- package/lib/camelize.js +0 -32
- package/lib/camelizeStyleName.js +0 -40
- package/lib/containsNode.js +0 -55
- package/lib/createArrayFromMixed.js +0 -85
- package/lib/createFullPageComponent.js +0 -51
- package/lib/createNodesFromMarkup.js +0 -84
- package/lib/emptyFunction.js +0 -38
- package/lib/emptyObject.js +0 -20
- package/lib/focusNode.js +0 -26
- package/lib/getActiveElement.js +0 -29
- package/lib/getMarkupWrap.js +0 -115
- package/lib/getUnboundedScrollPosition.js +0 -38
- package/lib/hyphenate.js +0 -33
- package/lib/hyphenateStyleName.js +0 -39
- package/lib/invariant.js +0 -49
- package/lib/isNode.js +0 -23
- package/lib/isTextNode.js +0 -25
- package/lib/keyMirror.js +0 -48
- package/lib/keyOf.js +0 -35
- package/lib/mapObject.js +0 -51
- package/lib/performance.js +0 -23
- package/lib/performanceNow.js +0 -28
- package/lib/shallowEqual.js +0 -48
- package/lib/toArray.js +0 -57
- package/lib/warning.js +0 -61
package/lib/ReactDOMTextarea.js
CHANGED
|
@@ -11,26 +11,18 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");
|
|
18
|
-
var ReactClass = require("./ReactClass");
|
|
19
|
-
var ReactElement = require("./ReactElement");
|
|
20
|
-
var ReactUpdates = require("./ReactUpdates");
|
|
14
|
+
var LinkedValueUtils = require('./LinkedValueUtils');
|
|
15
|
+
var ReactDOMIDOperations = require('./ReactDOMIDOperations');
|
|
16
|
+
var ReactUpdates = require('./ReactUpdates');
|
|
21
17
|
|
|
22
|
-
var assign = require(
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var warning = require("./warning");
|
|
27
|
-
|
|
28
|
-
var textarea = ReactElement.createFactory('textarea');
|
|
18
|
+
var assign = require('./Object.assign');
|
|
19
|
+
var invariant = require('fbjs/lib/invariant');
|
|
20
|
+
var warning = require('fbjs/lib/warning');
|
|
29
21
|
|
|
30
22
|
function forceUpdateIfMounted() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
23
|
+
if (this._rootNodeID) {
|
|
24
|
+
// DOM component is still mounted; update
|
|
25
|
+
ReactDOMTextarea.updateWrapper(this);
|
|
34
26
|
}
|
|
35
27
|
}
|
|
36
28
|
|
|
@@ -49,23 +41,35 @@ function forceUpdateIfMounted() {
|
|
|
49
41
|
* The rendered element will be initialized with an empty value, the prop
|
|
50
42
|
* `defaultValue` if specified, or the children content (deprecated).
|
|
51
43
|
*/
|
|
52
|
-
var ReactDOMTextarea =
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
var ReactDOMTextarea = {
|
|
45
|
+
getNativeProps: function (inst, props, context) {
|
|
46
|
+
!(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
// Always set children to the same thing. In IE9, the selection range will
|
|
49
|
+
// get reset if `textContent` is mutated.
|
|
50
|
+
var nativeProps = assign({}, props, {
|
|
51
|
+
defaultValue: undefined,
|
|
52
|
+
value: undefined,
|
|
53
|
+
children: inst._wrapperState.initialValue,
|
|
54
|
+
onChange: inst._wrapperState.onChange
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
return nativeProps;
|
|
58
|
+
},
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
mountWrapper: function (inst, props) {
|
|
61
|
+
LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
|
|
62
|
+
|
|
63
|
+
var defaultValue = props.defaultValue;
|
|
60
64
|
// TODO (yungsters): Remove support for children content in <textarea>.
|
|
61
|
-
var children =
|
|
65
|
+
var children = props.children;
|
|
62
66
|
if (children != null) {
|
|
63
|
-
if (
|
|
64
|
-
|
|
67
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
68
|
+
process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;
|
|
65
69
|
}
|
|
66
|
-
|
|
70
|
+
!(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;
|
|
67
71
|
if (Array.isArray(children)) {
|
|
68
|
-
|
|
72
|
+
!(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;
|
|
69
73
|
children = children[0];
|
|
70
74
|
}
|
|
71
75
|
|
|
@@ -74,51 +78,34 @@ var ReactDOMTextarea = ReactClass.createClass({
|
|
|
74
78
|
if (defaultValue == null) {
|
|
75
79
|
defaultValue = '';
|
|
76
80
|
}
|
|
77
|
-
var value = LinkedValueUtils.getValue(
|
|
78
|
-
|
|
81
|
+
var value = LinkedValueUtils.getValue(props);
|
|
82
|
+
|
|
83
|
+
inst._wrapperState = {
|
|
79
84
|
// We save the initial value so that `ReactDOMComponent` doesn't update
|
|
80
85
|
// `textContent` (unnecessary since we update value).
|
|
81
86
|
// The initial value can be a boolean or object so that's why it's
|
|
82
87
|
// forced to be a string.
|
|
83
|
-
initialValue: '' + (value != null ? value : defaultValue)
|
|
88
|
+
initialValue: '' + (value != null ? value : defaultValue),
|
|
89
|
+
onChange: _handleChange.bind(inst)
|
|
84
90
|
};
|
|
85
91
|
},
|
|
86
92
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var
|
|
90
|
-
|
|
91
|
-
'production' !== process.env.NODE_ENV ? invariant(props.dangerouslySetInnerHTML == null, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(props.dangerouslySetInnerHTML == null);
|
|
92
|
-
|
|
93
|
-
props.defaultValue = null;
|
|
94
|
-
props.value = null;
|
|
95
|
-
props.onChange = this._handleChange;
|
|
96
|
-
|
|
97
|
-
// Always set children to the same thing. In IE9, the selection range will
|
|
98
|
-
// get reset if `textContent` is mutated.
|
|
99
|
-
return textarea(props, this.state.initialValue);
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
componentDidUpdate: function (prevProps, prevState, prevContext) {
|
|
103
|
-
var value = LinkedValueUtils.getValue(this.props);
|
|
93
|
+
updateWrapper: function (inst) {
|
|
94
|
+
var props = inst._currentElement.props;
|
|
95
|
+
var value = LinkedValueUtils.getValue(props);
|
|
104
96
|
if (value != null) {
|
|
105
|
-
var rootNode = findDOMNode(this);
|
|
106
97
|
// Cast `value` to a string to ensure the value is set correctly. While
|
|
107
98
|
// browsers typically do this as necessary, jsdom doesn't.
|
|
108
|
-
|
|
99
|
+
ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);
|
|
109
100
|
}
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
_handleChange: function (event) {
|
|
113
|
-
var returnValue;
|
|
114
|
-
var onChange = LinkedValueUtils.getOnChange(this.props);
|
|
115
|
-
if (onChange) {
|
|
116
|
-
returnValue = onChange.call(this, event);
|
|
117
|
-
}
|
|
118
|
-
ReactUpdates.asap(forceUpdateIfMounted, this);
|
|
119
|
-
return returnValue;
|
|
120
101
|
}
|
|
102
|
+
};
|
|
121
103
|
|
|
122
|
-
|
|
104
|
+
function _handleChange(event) {
|
|
105
|
+
var props = this._currentElement.props;
|
|
106
|
+
var returnValue = LinkedValueUtils.executeOnChange(props, event);
|
|
107
|
+
ReactUpdates.asap(forceUpdateIfMounted, this);
|
|
108
|
+
return returnValue;
|
|
109
|
+
}
|
|
123
110
|
|
|
124
111
|
module.exports = ReactDOMTextarea;
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var ReactUpdates = require(
|
|
15
|
-
var Transaction = require(
|
|
14
|
+
var ReactUpdates = require('./ReactUpdates');
|
|
15
|
+
var Transaction = require('./Transaction');
|
|
16
16
|
|
|
17
|
-
var assign = require(
|
|
18
|
-
var emptyFunction = require(
|
|
17
|
+
var assign = require('./Object.assign');
|
|
18
|
+
var emptyFunction = require('fbjs/lib/emptyFunction');
|
|
19
19
|
|
|
20
20
|
var RESET_BATCHED_UPDATES = {
|
|
21
21
|
initialize: emptyFunction,
|
|
@@ -11,58 +11,40 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var BeforeInputEventPlugin = require(
|
|
15
|
-
var ChangeEventPlugin = require(
|
|
16
|
-
var ClientReactRootIndex = require(
|
|
17
|
-
var DefaultEventPluginOrder = require(
|
|
18
|
-
var EnterLeaveEventPlugin = require(
|
|
19
|
-
var ExecutionEnvironment = require(
|
|
20
|
-
var HTMLDOMPropertyConfig = require(
|
|
21
|
-
var ReactBrowserComponentMixin = require(
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
var
|
|
38
|
-
var ReactInjection = require("./ReactInjection");
|
|
39
|
-
var ReactInstanceHandles = require("./ReactInstanceHandles");
|
|
40
|
-
var ReactInstanceMap = require("./ReactInstanceMap");
|
|
41
|
-
var ReactMount = require("./ReactMount");
|
|
42
|
-
var ReactReconcileTransaction = require("./ReactReconcileTransaction");
|
|
43
|
-
var SelectEventPlugin = require("./SelectEventPlugin");
|
|
44
|
-
var ServerReactRootIndex = require("./ServerReactRootIndex");
|
|
45
|
-
var SimpleEventPlugin = require("./SimpleEventPlugin");
|
|
46
|
-
var SVGDOMPropertyConfig = require("./SVGDOMPropertyConfig");
|
|
47
|
-
|
|
48
|
-
var createFullPageComponent = require("./createFullPageComponent");
|
|
49
|
-
|
|
50
|
-
function autoGenerateWrapperClass(type) {
|
|
51
|
-
return ReactClass.createClass({
|
|
52
|
-
tagName: type.toUpperCase(),
|
|
53
|
-
render: function () {
|
|
54
|
-
// Copy owner down for debugging info
|
|
55
|
-
var internalInstance = ReactInstanceMap.get(this);
|
|
56
|
-
return new ReactElement(type, null, // key
|
|
57
|
-
null, // ref
|
|
58
|
-
internalInstance._currentElement._owner, // owner
|
|
59
|
-
null, // context
|
|
60
|
-
this.props);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
14
|
+
var BeforeInputEventPlugin = require('./BeforeInputEventPlugin');
|
|
15
|
+
var ChangeEventPlugin = require('./ChangeEventPlugin');
|
|
16
|
+
var ClientReactRootIndex = require('./ClientReactRootIndex');
|
|
17
|
+
var DefaultEventPluginOrder = require('./DefaultEventPluginOrder');
|
|
18
|
+
var EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');
|
|
19
|
+
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
|
|
20
|
+
var HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');
|
|
21
|
+
var ReactBrowserComponentMixin = require('./ReactBrowserComponentMixin');
|
|
22
|
+
var ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');
|
|
23
|
+
var ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');
|
|
24
|
+
var ReactDOMComponent = require('./ReactDOMComponent');
|
|
25
|
+
var ReactDOMIDOperations = require('./ReactDOMIDOperations');
|
|
26
|
+
var ReactDOMTextComponent = require('./ReactDOMTextComponent');
|
|
27
|
+
var ReactEventListener = require('./ReactEventListener');
|
|
28
|
+
var ReactInjection = require('./ReactInjection');
|
|
29
|
+
var ReactInstanceHandles = require('./ReactInstanceHandles');
|
|
30
|
+
var ReactMount = require('./ReactMount');
|
|
31
|
+
var ReactReconcileTransaction = require('./ReactReconcileTransaction');
|
|
32
|
+
var SelectEventPlugin = require('./SelectEventPlugin');
|
|
33
|
+
var ServerReactRootIndex = require('./ServerReactRootIndex');
|
|
34
|
+
var SimpleEventPlugin = require('./SimpleEventPlugin');
|
|
35
|
+
var SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');
|
|
36
|
+
|
|
37
|
+
var alreadyInjected = false;
|
|
64
38
|
|
|
65
39
|
function inject() {
|
|
40
|
+
if (alreadyInjected) {
|
|
41
|
+
// TODO: This is currently true because these injections are shared between
|
|
42
|
+
// the client and the server package. They should be built independently
|
|
43
|
+
// and not share any injection state. Then this problem will be solved.
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
alreadyInjected = true;
|
|
47
|
+
|
|
66
48
|
ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
|
|
67
49
|
|
|
68
50
|
/**
|
|
@@ -88,27 +70,8 @@ function inject() {
|
|
|
88
70
|
|
|
89
71
|
ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
|
|
90
72
|
|
|
91
|
-
ReactInjection.NativeComponent.injectAutoWrapper(autoGenerateWrapperClass);
|
|
92
|
-
|
|
93
|
-
// This needs to happen before createFullPageComponent() otherwise the mixin
|
|
94
|
-
// won't be included.
|
|
95
73
|
ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
|
|
96
74
|
|
|
97
|
-
ReactInjection.NativeComponent.injectComponentClasses({
|
|
98
|
-
'button': ReactDOMButton,
|
|
99
|
-
'form': ReactDOMForm,
|
|
100
|
-
'iframe': ReactDOMIframe,
|
|
101
|
-
'img': ReactDOMImg,
|
|
102
|
-
'input': ReactDOMInput,
|
|
103
|
-
'option': ReactDOMOption,
|
|
104
|
-
'select': ReactDOMSelect,
|
|
105
|
-
'textarea': ReactDOMTextarea,
|
|
106
|
-
|
|
107
|
-
'html': createFullPageComponent('html'),
|
|
108
|
-
'head': createFullPageComponent('head'),
|
|
109
|
-
'body': createFullPageComponent('body')
|
|
110
|
-
});
|
|
111
|
-
|
|
112
75
|
ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
|
|
113
76
|
ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
|
|
114
77
|
|
|
@@ -122,10 +85,10 @@ function inject() {
|
|
|
122
85
|
ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
|
|
123
86
|
ReactInjection.DOMComponent.injectIDOperations(ReactDOMIDOperations);
|
|
124
87
|
|
|
125
|
-
if (
|
|
88
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
126
89
|
var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
|
|
127
90
|
if (/[?&]react_perf\b/.test(url)) {
|
|
128
|
-
var ReactDefaultPerf = require(
|
|
91
|
+
var ReactDefaultPerf = require('./ReactDefaultPerf');
|
|
129
92
|
ReactDefaultPerf.start();
|
|
130
93
|
}
|
|
131
94
|
}
|
package/lib/ReactDefaultPerf.js
CHANGED
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
|
-
var DOMProperty = require(
|
|
16
|
-
var ReactDefaultPerfAnalysis = require(
|
|
17
|
-
var ReactMount = require(
|
|
18
|
-
var ReactPerf = require(
|
|
15
|
+
var DOMProperty = require('./DOMProperty');
|
|
16
|
+
var ReactDefaultPerfAnalysis = require('./ReactDefaultPerfAnalysis');
|
|
17
|
+
var ReactMount = require('./ReactMount');
|
|
18
|
+
var ReactPerf = require('./ReactPerf');
|
|
19
19
|
|
|
20
|
-
var performanceNow = require(
|
|
20
|
+
var performanceNow = require('fbjs/lib/performanceNow');
|
|
21
21
|
|
|
22
22
|
function roundFloat(val) {
|
|
23
23
|
return Math.floor(val * 100) / 100;
|
|
@@ -103,8 +103,8 @@ var ReactDefaultPerf = {
|
|
|
103
103
|
console.table(summary.map(function (item) {
|
|
104
104
|
var result = {};
|
|
105
105
|
result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
|
|
106
|
-
result
|
|
107
|
-
result
|
|
106
|
+
result.type = item.type;
|
|
107
|
+
result.args = JSON.stringify(item.args);
|
|
108
108
|
return result;
|
|
109
109
|
}));
|
|
110
110
|
console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var assign = require(
|
|
14
|
+
var assign = require('./Object.assign');
|
|
15
15
|
|
|
16
16
|
// Don't try to save users less than 1.2ms (a number I made up)
|
|
17
17
|
var DONT_CARE_THRESHOLD = 1.2;
|
|
@@ -20,11 +20,11 @@ var DOM_OPERATION_TYPES = {
|
|
|
20
20
|
INSERT_MARKUP: 'set innerHTML',
|
|
21
21
|
MOVE_EXISTING: 'move',
|
|
22
22
|
REMOVE_NODE: 'remove',
|
|
23
|
+
SET_MARKUP: 'set innerHTML',
|
|
23
24
|
TEXT_CONTENT: 'set textContent',
|
|
24
25
|
'updatePropertyByID': 'update attribute',
|
|
25
26
|
'deletePropertyByID': 'delete attribute',
|
|
26
27
|
'updateStylesByID': 'update styles',
|
|
27
|
-
'updateInnerHTMLByID': 'set innerHTML',
|
|
28
28
|
'dangerouslyReplaceNodeWithMarkupByID': 'replace'
|
|
29
29
|
};
|
|
30
30
|
|
|
@@ -43,11 +43,8 @@ function getTotalTime(measurements) {
|
|
|
43
43
|
|
|
44
44
|
function getDOMSummary(measurements) {
|
|
45
45
|
var items = [];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var id;
|
|
49
|
-
|
|
50
|
-
for (id in measurement.writes) {
|
|
46
|
+
measurements.forEach(function (measurement) {
|
|
47
|
+
Object.keys(measurement.writes).forEach(function (id) {
|
|
51
48
|
measurement.writes[id].forEach(function (write) {
|
|
52
49
|
items.push({
|
|
53
50
|
id: id,
|
|
@@ -55,8 +52,8 @@ function getDOMSummary(measurements) {
|
|
|
55
52
|
args: write.args
|
|
56
53
|
});
|
|
57
54
|
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
60
57
|
return items;
|
|
61
58
|
}
|
|
62
59
|
|
package/lib/ReactElement.js
CHANGED
|
@@ -11,79 +11,27 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
var ReactCurrentOwner = require("./ReactCurrentOwner");
|
|
14
|
+
var ReactCurrentOwner = require('./ReactCurrentOwner');
|
|
16
15
|
|
|
17
|
-
var assign = require(
|
|
18
|
-
var warning = require("./warning");
|
|
16
|
+
var assign = require('./Object.assign');
|
|
19
17
|
|
|
20
18
|
var RESERVED_PROPS = {
|
|
21
19
|
key: true,
|
|
22
20
|
ref: true
|
|
23
21
|
};
|
|
24
22
|
|
|
25
|
-
/**
|
|
26
|
-
* Warn for mutations.
|
|
27
|
-
*
|
|
28
|
-
* @internal
|
|
29
|
-
* @param {object} object
|
|
30
|
-
* @param {string} key
|
|
31
|
-
*/
|
|
32
|
-
function defineWarningProperty(object, key) {
|
|
33
|
-
Object.defineProperty(object, key, {
|
|
34
|
-
|
|
35
|
-
configurable: false,
|
|
36
|
-
enumerable: true,
|
|
37
|
-
|
|
38
|
-
get: function () {
|
|
39
|
-
if (!this._store) {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
return this._store[key];
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
set: function (value) {
|
|
46
|
-
'production' !== process.env.NODE_ENV ? warning(false, 'Don\'t set the %s property of the React element. Instead, ' + 'specify the correct value when initially creating the element.', key) : null;
|
|
47
|
-
this._store[key] = value;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* This is updated to true if the membrane is successfully created.
|
|
55
|
-
*/
|
|
56
|
-
var useMutationMembrane = false;
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Warn for mutations.
|
|
60
|
-
*
|
|
61
|
-
* @internal
|
|
62
|
-
* @param {object} element
|
|
63
|
-
*/
|
|
64
|
-
function defineMutationMembrane(prototype) {
|
|
65
|
-
try {
|
|
66
|
-
var pseudoFrozenProperties = {
|
|
67
|
-
props: true
|
|
68
|
-
};
|
|
69
|
-
for (var key in pseudoFrozenProperties) {
|
|
70
|
-
defineWarningProperty(prototype, key);
|
|
71
|
-
}
|
|
72
|
-
useMutationMembrane = true;
|
|
73
|
-
} catch (x) {}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
23
|
/**
|
|
77
24
|
* Base constructor for all React elements. This is only used to make this
|
|
78
25
|
* work with a dynamic instanceof check. Nothing should live on this prototype.
|
|
79
26
|
*
|
|
80
27
|
* @param {*} type
|
|
81
|
-
* @param {string|object} ref
|
|
82
28
|
* @param {*} key
|
|
29
|
+
* @param {string|object} ref
|
|
30
|
+
* @param {*} owner
|
|
83
31
|
* @param {*} props
|
|
84
32
|
* @internal
|
|
85
33
|
*/
|
|
86
|
-
var ReactElement = function (type, key, ref, owner,
|
|
34
|
+
var ReactElement = function (type, key, ref, owner, props) {
|
|
87
35
|
// Built-in properties that belong on the element
|
|
88
36
|
this.type = type;
|
|
89
37
|
this.key = key;
|
|
@@ -92,23 +40,32 @@ var ReactElement = function (type, key, ref, owner, context, props) {
|
|
|
92
40
|
// Record the component responsible for creating this element.
|
|
93
41
|
this._owner = owner;
|
|
94
42
|
|
|
95
|
-
|
|
96
|
-
|
|
43
|
+
this.props = props;
|
|
44
|
+
|
|
45
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
46
|
+
// The validation flag is currently mutative. We put it on
|
|
97
47
|
// an external backing store so that we can freeze the whole object.
|
|
98
48
|
// This can be replaced with a WeakMap once they are implemented in
|
|
99
49
|
// commonly used development environments.
|
|
100
|
-
this._store = {
|
|
50
|
+
this._store = {};
|
|
101
51
|
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
52
|
+
// To make comparing ReactElements easier for testing purposes, we make
|
|
53
|
+
// the validation flag non-enumerable (where possible, which should
|
|
54
|
+
// include every environment we run tests in), so the test framework
|
|
55
|
+
// ignores it.
|
|
56
|
+
try {
|
|
57
|
+
Object.defineProperty(this._store, 'validated', {
|
|
58
|
+
configurable: false,
|
|
59
|
+
enumerable: false,
|
|
60
|
+
writable: true,
|
|
61
|
+
value: false
|
|
62
|
+
});
|
|
63
|
+
} catch (x) {
|
|
64
|
+
this._store.validated = false;
|
|
108
65
|
}
|
|
66
|
+
Object.freeze(this.props);
|
|
67
|
+
Object.freeze(this);
|
|
109
68
|
}
|
|
110
|
-
|
|
111
|
-
this.props = props;
|
|
112
69
|
};
|
|
113
70
|
|
|
114
71
|
// We intentionally don't expose the function on the constructor property.
|
|
@@ -117,10 +74,6 @@ ReactElement.prototype = {
|
|
|
117
74
|
_isReactElement: true
|
|
118
75
|
};
|
|
119
76
|
|
|
120
|
-
if ('production' !== process.env.NODE_ENV) {
|
|
121
|
-
defineMutationMembrane(ReactElement.prototype);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
77
|
ReactElement.createElement = function (type, config, children) {
|
|
125
78
|
var propName;
|
|
126
79
|
|
|
@@ -148,20 +101,6 @@ ReactElement.createElement = function (type, config, children) {
|
|
|
148
101
|
props.children = children;
|
|
149
102
|
} else if (childrenLength > 1) {
|
|
150
103
|
var childArray = Array(childrenLength);
|
|
151
|
-
|
|
152
|
-
// To make comparing ReactElements easier for testing purposes, we make
|
|
153
|
-
// the validation flag non-enumerable (where possible, which should
|
|
154
|
-
// include every environment we run tests in), so the test framework
|
|
155
|
-
// ignores it.
|
|
156
|
-
try {
|
|
157
|
-
Object.defineProperty(childArray, '_reactChildKeysValidated', {
|
|
158
|
-
configurable: false,
|
|
159
|
-
enumerable: false,
|
|
160
|
-
writable: true
|
|
161
|
-
});
|
|
162
|
-
} catch (x) {}
|
|
163
|
-
childArray._reactChildKeysValidated = true;
|
|
164
|
-
|
|
165
104
|
for (var i = 0; i < childrenLength; i++) {
|
|
166
105
|
childArray[i] = arguments[i + 2];
|
|
167
106
|
}
|
|
@@ -178,7 +117,7 @@ ReactElement.createElement = function (type, config, children) {
|
|
|
178
117
|
}
|
|
179
118
|
}
|
|
180
119
|
|
|
181
|
-
return new ReactElement(type, key, ref, ReactCurrentOwner.current,
|
|
120
|
+
return new ReactElement(type, key, ref, ReactCurrentOwner.current, props);
|
|
182
121
|
};
|
|
183
122
|
|
|
184
123
|
ReactElement.createFactory = function (type) {
|
|
@@ -193,7 +132,13 @@ ReactElement.createFactory = function (type) {
|
|
|
193
132
|
};
|
|
194
133
|
|
|
195
134
|
ReactElement.cloneAndReplaceProps = function (oldElement, newProps) {
|
|
196
|
-
var newElement = new ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._owner,
|
|
135
|
+
var newElement = new ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._owner, newProps);
|
|
136
|
+
|
|
137
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
138
|
+
// If the key on the original is valid, then the clone is valid
|
|
139
|
+
newElement._store.validated = oldElement._store.validated;
|
|
140
|
+
}
|
|
141
|
+
|
|
197
142
|
return newElement;
|
|
198
143
|
};
|
|
199
144
|
|
|
@@ -240,7 +185,7 @@ ReactElement.cloneElement = function (element, config, children) {
|
|
|
240
185
|
props.children = childArray;
|
|
241
186
|
}
|
|
242
187
|
|
|
243
|
-
return new ReactElement(element.type, key, ref, owner,
|
|
188
|
+
return new ReactElement(element.type, key, ref, owner, props);
|
|
244
189
|
};
|
|
245
190
|
|
|
246
191
|
/**
|
|
@@ -262,6 +207,4 @@ ReactElement.isValidElement = function (object) {
|
|
|
262
207
|
return isElement;
|
|
263
208
|
};
|
|
264
209
|
|
|
265
|
-
module.exports = ReactElement;
|
|
266
|
-
|
|
267
|
-
// IE will fail on defineProperty
|
|
210
|
+
module.exports = ReactElement;
|