react 0.14.0-alpha3 → 0.14.0-rc1
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 +8 -3
- package/dist/react-dom.js +42 -0
- package/dist/react-dom.min.js +12 -0
- package/dist/react-with-addons.js +6076 -5337
- package/dist/react-with-addons.min.js +6 -6
- package/dist/react.js +5445 -4839
- 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 +18 -3
- package/lib/CSSPropertyOperations.js +22 -14
- package/lib/CallbackQueue.js +4 -4
- package/lib/ChangeEventPlugin.js +18 -15
- package/lib/DOMChildrenOperations.js +17 -7
- package/lib/DOMProperty.js +82 -117
- package/lib/DOMPropertyOperations.js +84 -33
- package/lib/Danger.js +21 -16
- package/lib/DefaultEventPluginOrder.js +2 -2
- package/lib/EnterLeaveEventPlugin.js +21 -13
- package/lib/EventConstants.js +23 -1
- package/lib/EventPluginHub.js +17 -20
- package/lib/EventPluginRegistry.js +8 -8
- package/lib/EventPluginUtils.js +33 -42
- package/lib/EventPropagators.js +8 -8
- package/lib/FallbackCompositionState.js +9 -3
- package/lib/HTMLDOMPropertyConfig.js +19 -3
- 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 +15 -5
- package/lib/React.js +18 -7
- package/lib/ReactBrowserComponentMixin.js +4 -4
- package/lib/ReactBrowserEventEmitter.js +30 -7
- package/lib/ReactCSSTransitionGroup.js +35 -9
- package/lib/ReactCSSTransitionGroupChild.js +56 -30
- package/lib/ReactChildReconciler.js +24 -19
- package/lib/ReactChildren.js +75 -35
- package/lib/ReactClass.js +70 -87
- package/lib/ReactComponent.js +27 -20
- package/lib/ReactComponentBrowserEnvironment.js +2 -2
- package/lib/ReactComponentEnvironment.js +2 -2
- package/lib/ReactComponentWithPureRenderMixin.js +3 -3
- package/lib/ReactCompositeComponent.js +117 -106
- package/lib/ReactDOM.js +74 -158
- package/lib/ReactDOMButton.js +15 -26
- package/lib/ReactDOMComponent.js +441 -72
- package/lib/ReactDOMFactories.js +177 -0
- package/lib/{emptyObject.js → ReactDOMFeatureFlags.js} +6 -8
- package/lib/ReactDOMIDOperations.js +8 -66
- package/lib/ReactDOMInput.js +87 -99
- package/lib/ReactDOMOption.js +25 -44
- package/lib/ReactDOMSelect.js +88 -98
- package/lib/ReactDOMSelection.js +3 -3
- package/lib/ReactDOMServer.js +5 -3
- package/lib/ReactDOMTextComponent.js +33 -20
- package/lib/ReactDOMTextarea.js +48 -61
- package/lib/ReactDefaultBatchingStrategy.js +4 -4
- package/lib/ReactDefaultInjection.js +23 -72
- package/lib/ReactDefaultPerf.js +7 -7
- package/lib/ReactDefaultPerfAnalysis.js +6 -11
- package/lib/ReactElement.js +92 -107
- package/lib/ReactElementValidator.js +53 -173
- package/lib/ReactEmptyComponent.js +26 -62
- package/lib/ReactEmptyComponentRegistry.js +48 -0
- package/lib/ReactErrorUtils.js +45 -9
- package/lib/ReactEventEmitterMixin.js +3 -4
- package/lib/ReactEventListener.js +64 -12
- package/lib/ReactFragment.js +29 -115
- package/lib/ReactInjection.js +10 -12
- package/lib/ReactInputSelection.js +8 -7
- package/lib/ReactInstanceHandles.js +12 -12
- package/lib/ReactIsomorphic.js +15 -11
- package/lib/ReactLink.js +1 -1
- package/lib/ReactMarkupChecksum.js +6 -2
- package/lib/ReactMount.js +196 -122
- package/lib/ReactMultiChild.js +119 -25
- 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 +41 -12
- package/lib/ReactReconcileTransaction.js +12 -10
- package/lib/ReactReconciler.js +8 -11
- package/lib/ReactRef.js +15 -2
- package/lib/ReactServerBatchingStrategy.js +23 -0
- package/lib/ReactServerRendering.js +22 -9
- package/lib/ReactServerRenderingTransaction.js +8 -7
- package/lib/ReactTestUtils.js +89 -64
- package/lib/ReactTransitionChildMapping.js +3 -6
- package/lib/ReactTransitionEvents.js +1 -1
- package/lib/ReactTransitionGroup.js +5 -6
- package/lib/ReactUpdateQueue.js +60 -35
- package/lib/ReactUpdates.js +15 -18
- package/lib/{isTextNode.js → ReactVersion.js} +2 -13
- package/lib/ReactWithAddons.js +24 -17
- package/lib/ResponderEventPlugin.js +514 -0
- package/lib/ResponderSyntheticEvent.js +40 -0
- package/lib/ResponderTouchHistoryStore.js +180 -0
- package/lib/SVGDOMPropertyConfig.js +1 -1
- package/lib/SelectEventPlugin.js +25 -16
- package/lib/SimpleEventPlugin.js +200 -45
- package/lib/SyntheticClipboardEvent.js +3 -3
- package/lib/SyntheticCompositionEvent.js +3 -3
- package/lib/SyntheticDragEvent.js +3 -3
- package/lib/SyntheticEvent.js +24 -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 +17 -11
- package/lib/accumulate.js +44 -0
- package/lib/accumulateInto.js +2 -2
- package/lib/adler32.js +19 -7
- package/lib/cloneWithProps.js +12 -7
- package/lib/createHierarchyRenderer.js +85 -0
- package/lib/dangerousStyleValue.js +1 -1
- package/lib/deprecated.js +48 -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 +27 -25
- 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 +216 -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/shouldUpdateReactComponent.js +12 -8
- package/lib/sliceChildren.js +34 -0
- package/lib/traverseAllChildren.js +21 -19
- package/lib/update.js +13 -13
- package/lib/validateDOMNesting.js +6 -6
- package/lib/webcomponents.js +6379 -0
- package/package.json +4 -6
- package/react.js +2 -0
- 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/dist/JSXTransformer.js +0 -17589
- 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/ReactDOMClient.js +0 -85
- 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/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/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
|
-
!(defaultValue == null) ?
|
|
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
|
-
!(children.length <= 1) ?
|
|
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
|
-
!(props.dangerouslySetInnerHTML == null) ? 'production' !== process.env.NODE_ENV ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;
|
|
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,56 +11,27 @@
|
|
|
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 ReactDOMTextComponent = require("./ReactDOMTextComponent");
|
|
36
|
-
var ReactElement = require("./ReactElement");
|
|
37
|
-
var ReactEventListener = require("./ReactEventListener");
|
|
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 ReactDOMTextComponent = require('./ReactDOMTextComponent');
|
|
26
|
+
var ReactEventListener = require('./ReactEventListener');
|
|
27
|
+
var ReactInjection = require('./ReactInjection');
|
|
28
|
+
var ReactInstanceHandles = require('./ReactInstanceHandles');
|
|
29
|
+
var ReactMount = require('./ReactMount');
|
|
30
|
+
var ReactReconcileTransaction = require('./ReactReconcileTransaction');
|
|
31
|
+
var SelectEventPlugin = require('./SelectEventPlugin');
|
|
32
|
+
var ServerReactRootIndex = require('./ServerReactRootIndex');
|
|
33
|
+
var SimpleEventPlugin = require('./SimpleEventPlugin');
|
|
34
|
+
var SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');
|
|
64
35
|
|
|
65
36
|
var alreadyInjected = false;
|
|
66
37
|
|
|
@@ -98,27 +69,8 @@ function inject() {
|
|
|
98
69
|
|
|
99
70
|
ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
|
|
100
71
|
|
|
101
|
-
ReactInjection.NativeComponent.injectAutoWrapper(autoGenerateWrapperClass);
|
|
102
|
-
|
|
103
|
-
// This needs to happen before createFullPageComponent() otherwise the mixin
|
|
104
|
-
// won't be included.
|
|
105
72
|
ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
|
|
106
73
|
|
|
107
|
-
ReactInjection.NativeComponent.injectComponentClasses({
|
|
108
|
-
'button': ReactDOMButton,
|
|
109
|
-
'form': ReactDOMForm,
|
|
110
|
-
'iframe': ReactDOMIframe,
|
|
111
|
-
'img': ReactDOMImg,
|
|
112
|
-
'input': ReactDOMInput,
|
|
113
|
-
'option': ReactDOMOption,
|
|
114
|
-
'select': ReactDOMSelect,
|
|
115
|
-
'textarea': ReactDOMTextarea,
|
|
116
|
-
|
|
117
|
-
'html': createFullPageComponent('html'),
|
|
118
|
-
'head': createFullPageComponent('head'),
|
|
119
|
-
'body': createFullPageComponent('body')
|
|
120
|
-
});
|
|
121
|
-
|
|
122
74
|
ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
|
|
123
75
|
ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
|
|
124
76
|
|
|
@@ -130,12 +82,11 @@ function inject() {
|
|
|
130
82
|
ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);
|
|
131
83
|
|
|
132
84
|
ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
|
|
133
|
-
ReactInjection.DOMComponent.injectIDOperations(ReactDOMIDOperations);
|
|
134
85
|
|
|
135
|
-
if (
|
|
86
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
136
87
|
var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
|
|
137
88
|
if (/[?&]react_perf\b/.test(url)) {
|
|
138
|
-
var ReactDefaultPerf = require(
|
|
89
|
+
var ReactDefaultPerf = require('./ReactDefaultPerf');
|
|
139
90
|
ReactDefaultPerf.start();
|
|
140
91
|
}
|
|
141
92
|
}
|
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,9 @@ 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
|
-
'deletePropertyByID': 'delete attribute',
|
|
26
|
-
'updateStylesByID': 'update styles',
|
|
27
|
-
'updateInnerHTMLByID': 'set innerHTML',
|
|
28
26
|
'dangerouslyReplaceNodeWithMarkupByID': 'replace'
|
|
29
27
|
};
|
|
30
28
|
|
|
@@ -43,11 +41,8 @@ function getTotalTime(measurements) {
|
|
|
43
41
|
|
|
44
42
|
function getDOMSummary(measurements) {
|
|
45
43
|
var items = [];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var id;
|
|
49
|
-
|
|
50
|
-
for (id in measurement.writes) {
|
|
44
|
+
measurements.forEach(function (measurement) {
|
|
45
|
+
Object.keys(measurement.writes).forEach(function (id) {
|
|
51
46
|
measurement.writes[id].forEach(function (write) {
|
|
52
47
|
items.push({
|
|
53
48
|
id: id,
|
|
@@ -55,8 +50,8 @@ function getDOMSummary(measurements) {
|
|
|
55
50
|
args: write.args
|
|
56
51
|
});
|
|
57
52
|
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
60
55
|
return items;
|
|
61
56
|
}
|
|
62
57
|
|
package/lib/ReactElement.js
CHANGED
|
@@ -11,66 +11,29 @@
|
|
|
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
|
-
|
|
16
|
+
var assign = require('./Object.assign');
|
|
17
|
+
|
|
18
|
+
// The Symbol used to tag the ReactElement type. If there is no native Symbol
|
|
19
|
+
// nor polyfill, then a plain number is used for performance.
|
|
20
|
+
var TYPE_SYMBOL = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;
|
|
19
21
|
|
|
20
22
|
var RESERVED_PROPS = {
|
|
21
23
|
key: true,
|
|
22
|
-
ref: true
|
|
24
|
+
ref: true,
|
|
25
|
+
__self: true,
|
|
26
|
+
__source: true
|
|
23
27
|
};
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
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) : undefined;
|
|
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) {
|
|
29
|
+
var canDefineProperty = false;
|
|
30
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
65
31
|
try {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
useMutationMembrane = true;
|
|
73
|
-
} catch (x) {}
|
|
32
|
+
Object.defineProperty({}, 'x', {});
|
|
33
|
+
canDefineProperty = true;
|
|
34
|
+
} catch (x) {
|
|
35
|
+
// IE will fail on defineProperty
|
|
36
|
+
}
|
|
74
37
|
}
|
|
75
38
|
|
|
76
39
|
/**
|
|
@@ -78,62 +41,79 @@ function defineMutationMembrane(prototype) {
|
|
|
78
41
|
* work with a dynamic instanceof check. Nothing should live on this prototype.
|
|
79
42
|
*
|
|
80
43
|
* @param {*} type
|
|
81
|
-
* @param {string|object} ref
|
|
82
44
|
* @param {*} key
|
|
45
|
+
* @param {string|object} ref
|
|
46
|
+
* @param {*} self A *temporary* helper to detect places where `this` is
|
|
47
|
+
* different from the `owner` when React.createElement is called, so that we
|
|
48
|
+
* can warn. We want to get rid of owner and replace string `ref`s with arrow
|
|
49
|
+
* functions, and as long as `this` and owner are the same, there will be no
|
|
50
|
+
* change in behavior.
|
|
51
|
+
* @param {*} source An annotation object (added by a transpiler or otherwise)
|
|
52
|
+
* indicating filename, line number, and/or other information.
|
|
53
|
+
* @param {*} owner
|
|
83
54
|
* @param {*} props
|
|
84
55
|
* @internal
|
|
85
56
|
*/
|
|
86
|
-
var ReactElement = function (type, key, ref,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
57
|
+
var ReactElement = function (type, key, ref, self, source, owner, props) {
|
|
58
|
+
var element = {
|
|
59
|
+
// This tag allow us to uniquely identify this as a React Element
|
|
60
|
+
$$typeof: TYPE_SYMBOL,
|
|
61
|
+
|
|
62
|
+
// Built-in properties that belong on the element
|
|
63
|
+
type: type,
|
|
64
|
+
key: key,
|
|
65
|
+
ref: ref,
|
|
66
|
+
props: props,
|
|
67
|
+
|
|
68
|
+
// Record the component responsible for creating this element.
|
|
69
|
+
_owner: owner
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
73
|
+
// The validation flag is currently mutative. We put it on
|
|
97
74
|
// an external backing store so that we can freeze the whole object.
|
|
98
75
|
// This can be replaced with a WeakMap once they are implemented in
|
|
99
76
|
// commonly used development environments.
|
|
100
|
-
|
|
77
|
+
element._store = {};
|
|
101
78
|
|
|
102
79
|
// To make comparing ReactElements easier for testing purposes, we make
|
|
103
80
|
// the validation flag non-enumerable (where possible, which should
|
|
104
81
|
// include every environment we run tests in), so the test framework
|
|
105
82
|
// ignores it.
|
|
106
|
-
|
|
107
|
-
Object.defineProperty(
|
|
83
|
+
if (canDefineProperty) {
|
|
84
|
+
Object.defineProperty(element._store, 'validated', {
|
|
85
|
+
configurable: false,
|
|
86
|
+
enumerable: false,
|
|
87
|
+
writable: true,
|
|
88
|
+
value: false
|
|
89
|
+
});
|
|
90
|
+
// self and source are DEV only properties.
|
|
91
|
+
Object.defineProperty(element, '_self', {
|
|
92
|
+
configurable: false,
|
|
93
|
+
enumerable: false,
|
|
94
|
+
writable: false,
|
|
95
|
+
value: self
|
|
96
|
+
});
|
|
97
|
+
// Two elements created in two different places should be considered
|
|
98
|
+
// equal for testing purposes and therefore we hide it from enumeration.
|
|
99
|
+
Object.defineProperty(element, '_source', {
|
|
108
100
|
configurable: false,
|
|
109
101
|
enumerable: false,
|
|
110
|
-
writable:
|
|
102
|
+
writable: false,
|
|
103
|
+
value: source
|
|
111
104
|
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// return and rely on the prototype membrane to forward to the backing
|
|
117
|
-
// store.
|
|
118
|
-
if (useMutationMembrane) {
|
|
119
|
-
Object.freeze(this);
|
|
120
|
-
return;
|
|
105
|
+
} else {
|
|
106
|
+
element._store.validated = false;
|
|
107
|
+
element._self = self;
|
|
108
|
+
element._source = source;
|
|
121
109
|
}
|
|
110
|
+
Object.freeze(element.props);
|
|
111
|
+
Object.freeze(element);
|
|
122
112
|
}
|
|
123
113
|
|
|
124
|
-
|
|
114
|
+
return element;
|
|
125
115
|
};
|
|
126
116
|
|
|
127
|
-
// We intentionally don't expose the function on the constructor property.
|
|
128
|
-
// ReactElement should be indistinguishable from a plain object.
|
|
129
|
-
ReactElement.prototype = {
|
|
130
|
-
_isReactElement: true
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
if ('production' !== process.env.NODE_ENV) {
|
|
134
|
-
defineMutationMembrane(ReactElement.prototype);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
117
|
ReactElement.createElement = function (type, config, children) {
|
|
138
118
|
var propName;
|
|
139
119
|
|
|
@@ -142,10 +122,14 @@ ReactElement.createElement = function (type, config, children) {
|
|
|
142
122
|
|
|
143
123
|
var key = null;
|
|
144
124
|
var ref = null;
|
|
125
|
+
var self = null;
|
|
126
|
+
var source = null;
|
|
145
127
|
|
|
146
128
|
if (config != null) {
|
|
147
129
|
ref = config.ref === undefined ? null : config.ref;
|
|
148
130
|
key = config.key === undefined ? null : '' + config.key;
|
|
131
|
+
self = config.__self === undefined ? null : config.__self;
|
|
132
|
+
source = config.__source === undefined ? null : config.__source;
|
|
149
133
|
// Remaining properties are added to a new props object
|
|
150
134
|
for (propName in config) {
|
|
151
135
|
if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
|
|
@@ -177,7 +161,7 @@ ReactElement.createElement = function (type, config, children) {
|
|
|
177
161
|
}
|
|
178
162
|
}
|
|
179
163
|
|
|
180
|
-
return
|
|
164
|
+
return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
|
|
181
165
|
};
|
|
182
166
|
|
|
183
167
|
ReactElement.createFactory = function (type) {
|
|
@@ -191,13 +175,20 @@ ReactElement.createFactory = function (type) {
|
|
|
191
175
|
return factory;
|
|
192
176
|
};
|
|
193
177
|
|
|
178
|
+
ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
|
|
179
|
+
var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
|
|
180
|
+
|
|
181
|
+
return newElement;
|
|
182
|
+
};
|
|
183
|
+
|
|
194
184
|
ReactElement.cloneAndReplaceProps = function (oldElement, newProps) {
|
|
195
|
-
var newElement =
|
|
185
|
+
var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);
|
|
196
186
|
|
|
197
|
-
if (
|
|
187
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
198
188
|
// If the key on the original is valid, then the clone is valid
|
|
199
189
|
newElement._store.validated = oldElement._store.validated;
|
|
200
190
|
}
|
|
191
|
+
|
|
201
192
|
return newElement;
|
|
202
193
|
};
|
|
203
194
|
|
|
@@ -210,6 +201,12 @@ ReactElement.cloneElement = function (element, config, children) {
|
|
|
210
201
|
// Reserved names are extracted
|
|
211
202
|
var key = element.key;
|
|
212
203
|
var ref = element.ref;
|
|
204
|
+
// Self is preserved since the owner is preserved.
|
|
205
|
+
var self = element._self;
|
|
206
|
+
// Source is preserved since cloneElement is unlikely to be targeted by a
|
|
207
|
+
// transpiler, and the original source is probably a better indicator of the
|
|
208
|
+
// true owner.
|
|
209
|
+
var source = element._source;
|
|
213
210
|
|
|
214
211
|
// Owner will be preserved, unless ref is overridden
|
|
215
212
|
var owner = element._owner;
|
|
@@ -244,7 +241,7 @@ ReactElement.cloneElement = function (element, config, children) {
|
|
|
244
241
|
props.children = childArray;
|
|
245
242
|
}
|
|
246
243
|
|
|
247
|
-
return
|
|
244
|
+
return ReactElement(element.type, key, ref, self, source, owner, props);
|
|
248
245
|
};
|
|
249
246
|
|
|
250
247
|
/**
|
|
@@ -253,19 +250,7 @@ ReactElement.cloneElement = function (element, config, children) {
|
|
|
253
250
|
* @final
|
|
254
251
|
*/
|
|
255
252
|
ReactElement.isValidElement = function (object) {
|
|
256
|
-
|
|
257
|
-
// within it. This leads to two different instances of React on the same
|
|
258
|
-
// page. To identify a element from a different React instance we use
|
|
259
|
-
// a flag instead of an instanceof check.
|
|
260
|
-
var isElement = !!(object && object._isReactElement);
|
|
261
|
-
// if (isElement && !(object instanceof ReactElement)) {
|
|
262
|
-
// This is an indicator that you're using multiple versions of React at the
|
|
263
|
-
// same time. This will screw with ownership and stuff. Fix it, please.
|
|
264
|
-
// TODO: We could possibly warn here.
|
|
265
|
-
// }
|
|
266
|
-
return isElement;
|
|
253
|
+
return typeof object === 'object' && object !== null && object.$$typeof === TYPE_SYMBOL;
|
|
267
254
|
};
|
|
268
255
|
|
|
269
|
-
module.exports = ReactElement;
|
|
270
|
-
|
|
271
|
-
// IE will fail on defineProperty
|
|
256
|
+
module.exports = ReactElement;
|