react 0.14.0-beta3 → 0.14.2
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 +4 -4
- package/addons.js +2 -0
- package/dist/react-with-addons.js +1941 -1364
- package/dist/react-with-addons.min.js +6 -6
- package/dist/react.js +1704 -1242
- package/dist/react.min.js +6 -6
- package/lib/CSSProperty.js +15 -3
- package/lib/CSSPropertyOperations.js +15 -2
- package/lib/ChangeEventPlugin.js +5 -2
- package/lib/DOMChildrenOperations.js +12 -1
- package/lib/DOMPropertyOperations.js +14 -1
- package/lib/Danger.js +9 -4
- package/lib/EnterLeaveEventPlugin.js +13 -5
- package/lib/EventConstants.js +1 -1
- package/lib/EventPluginHub.js +18 -10
- package/lib/EventPluginUtils.js +23 -27
- package/lib/EventPropagators.js +1 -1
- package/lib/FallbackCompositionState.js +6 -0
- package/lib/HTMLDOMPropertyConfig.js +26 -2
- package/lib/PooledClass.js +1 -3
- package/lib/React.js +14 -3
- package/lib/ReactBrowserComponentMixin.js +1 -1
- package/lib/ReactBrowserEventEmitter.js +9 -3
- package/lib/ReactCSSTransitionGroup.js +33 -18
- package/lib/ReactCSSTransitionGroupChild.js +42 -25
- package/lib/ReactChildReconciler.js +3 -5
- package/lib/ReactChildren.js +70 -30
- package/lib/ReactClass.js +6 -6
- package/lib/ReactComponent.js +7 -6
- package/lib/ReactCompositeComponent.js +58 -7
- package/lib/ReactDOM.js +7 -5
- package/lib/ReactDOMComponent.js +146 -46
- package/lib/ReactDOMFeatureFlags.js +18 -0
- package/lib/ReactDOMIDOperations.js +1 -60
- package/lib/ReactDOMInput.js +10 -1
- package/lib/ReactDOMSelect.js +1 -1
- package/lib/ReactDOMSelection.js +16 -0
- package/lib/ReactDOMServer.js +3 -1
- package/lib/ReactDOMTextComponent.js +23 -10
- package/lib/ReactDOMTextarea.js +3 -1
- package/lib/ReactDefaultInjection.js +0 -2
- package/lib/ReactDefaultPerf.js +10 -4
- package/lib/ReactDefaultPerfAnalysis.js +7 -3
- package/lib/ReactElement.js +72 -35
- package/lib/ReactElementValidator.js +31 -75
- package/lib/ReactEmptyComponent.js +25 -61
- package/lib/ReactEmptyComponentRegistry.js +48 -0
- package/lib/ReactErrorUtils.js +56 -9
- package/lib/ReactEventEmitterMixin.js +1 -1
- package/lib/ReactEventListener.js +16 -9
- package/lib/ReactFragment.js +25 -116
- package/lib/ReactInjection.js +0 -2
- package/lib/ReactIsomorphic.js +4 -0
- package/lib/ReactLink.js +1 -1
- package/lib/ReactMount.js +127 -41
- package/lib/ReactMultiChild.js +37 -4
- package/lib/ReactOwner.js +2 -2
- package/lib/ReactPropTransferer.js +1 -1
- package/lib/ReactPropTypes.js +11 -8
- package/lib/ReactReconcileTransaction.js +4 -2
- package/lib/ReactReconciler.js +16 -17
- package/lib/ReactRef.js +13 -1
- package/lib/ReactServerRenderingTransaction.js +1 -0
- package/lib/ReactTestUtils.js +27 -15
- package/lib/ReactTransitionChildMapping.js +3 -6
- package/lib/ReactUpdateQueue.js +4 -4
- package/lib/ReactUpdates.js +1 -1
- package/lib/ReactVersion.js +14 -0
- package/lib/ReactWithAddons.js +10 -1
- package/lib/ResponderEventPlugin.js +1 -1
- package/lib/SelectEventPlugin.js +11 -1
- package/lib/SimpleEventPlugin.js +2 -23
- package/lib/SyntheticEvent.js +15 -1
- package/lib/Transaction.js +1 -1
- package/lib/canDefineProperty.js +24 -0
- package/lib/createHierarchyRenderer.js +1 -1
- package/lib/deprecated.js +3 -2
- package/lib/findDOMNode.js +1 -1
- package/lib/getTestDocument.js +4 -11
- package/lib/instantiateReactComponent.js +3 -5
- package/lib/reactComponentExpect.js +6 -0
- package/lib/shouldUpdateReactComponent.js +12 -8
- package/lib/sliceChildren.js +3 -20
- package/lib/traverseAllChildren.js +15 -9
- package/package.json +2 -2
- package/react.js +1 -51
- package/dist/JSXTransformer.js +0 -17949
- package/lib/joinClasses.js +0 -39
- package/lib/memoizeStringOnly.js +0 -31
package/lib/ReactUpdates.js
CHANGED
|
@@ -64,7 +64,7 @@ function ReactUpdatesFlushTransaction() {
|
|
|
64
64
|
this.reinitializeTransaction();
|
|
65
65
|
this.dirtyComponentsLength = null;
|
|
66
66
|
this.callbackQueue = CallbackQueue.getPooled();
|
|
67
|
-
this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled();
|
|
67
|
+
this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013-2015, Facebook, Inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree. An additional grant
|
|
7
|
+
* of patent rights can be found in the PATENTS file in the same directory.
|
|
8
|
+
*
|
|
9
|
+
* @providesModule ReactVersion
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
module.exports = '0.14.2';
|
package/lib/ReactWithAddons.js
CHANGED
|
@@ -29,6 +29,9 @@ var ReactUpdates = require('./ReactUpdates');
|
|
|
29
29
|
var cloneWithProps = require('./cloneWithProps');
|
|
30
30
|
var shallowCompare = require('./shallowCompare');
|
|
31
31
|
var update = require('./update');
|
|
32
|
+
var warning = require('fbjs/lib/warning');
|
|
33
|
+
|
|
34
|
+
var warnedAboutBatchedUpdates = false;
|
|
32
35
|
|
|
33
36
|
React.addons = {
|
|
34
37
|
CSSTransitionGroup: ReactCSSTransitionGroup,
|
|
@@ -36,7 +39,13 @@ React.addons = {
|
|
|
36
39
|
PureRenderMixin: ReactComponentWithPureRenderMixin,
|
|
37
40
|
TransitionGroup: ReactTransitionGroup,
|
|
38
41
|
|
|
39
|
-
batchedUpdates:
|
|
42
|
+
batchedUpdates: function () {
|
|
43
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
44
|
+
process.env.NODE_ENV !== 'production' ? warning(warnedAboutBatchedUpdates, 'React.addons.batchedUpdates is deprecated. Use ' + 'ReactDOM.unstable_batchedUpdates instead.') : undefined;
|
|
45
|
+
warnedAboutBatchedUpdates = true;
|
|
46
|
+
}
|
|
47
|
+
return ReactUpdates.batchedUpdates.apply(this, arguments);
|
|
48
|
+
},
|
|
40
49
|
cloneWithProps: cloneWithProps,
|
|
41
50
|
createFragment: ReactFragment.create,
|
|
42
51
|
shallowCompare: shallowCompare,
|
|
@@ -69,7 +69,7 @@ var eventTypes = {
|
|
|
69
69
|
/**
|
|
70
70
|
* On a `scroll`, is it desired that this element become the responder? This
|
|
71
71
|
* is usually not needed, but should be used to retroactively infer that a
|
|
72
|
-
* `touchStart` had
|
|
72
|
+
* `touchStart` had occurred during momentum scroll. During a momentum scroll,
|
|
73
73
|
* a touch start will be immediately followed by a scroll event if the view is
|
|
74
74
|
* currently scrolling.
|
|
75
75
|
*
|
package/lib/SelectEventPlugin.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
var EventConstants = require('./EventConstants');
|
|
15
15
|
var EventPropagators = require('./EventPropagators');
|
|
16
|
+
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
|
|
16
17
|
var ReactInputSelection = require('./ReactInputSelection');
|
|
17
18
|
var SyntheticEvent = require('./SyntheticEvent');
|
|
18
19
|
|
|
@@ -23,6 +24,8 @@ var shallowEqual = require('fbjs/lib/shallowEqual');
|
|
|
23
24
|
|
|
24
25
|
var topLevelTypes = EventConstants.topLevelTypes;
|
|
25
26
|
|
|
27
|
+
var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;
|
|
28
|
+
|
|
26
29
|
var eventTypes = {
|
|
27
30
|
select: {
|
|
28
31
|
phasedRegistrationNames: {
|
|
@@ -167,12 +170,19 @@ var SelectEventPlugin = {
|
|
|
167
170
|
return constructSelectEvent(nativeEvent, nativeEventTarget);
|
|
168
171
|
|
|
169
172
|
// Chrome and IE fire non-standard event when selection is changed (and
|
|
170
|
-
// sometimes when it hasn't).
|
|
173
|
+
// sometimes when it hasn't). IE's event fires out of order with respect
|
|
174
|
+
// to key and input events on deletion, so we discard it.
|
|
175
|
+
//
|
|
171
176
|
// Firefox doesn't support selectionchange, so check selection status
|
|
172
177
|
// after each key entry. The selection changes after keydown and before
|
|
173
178
|
// keyup, but we check on keydown as well in the case of holding down a
|
|
174
179
|
// key, when multiple keydown events are fired but only one keyup is.
|
|
180
|
+
// This is also our approach for IE handling, for the reason above.
|
|
175
181
|
case topLevelTypes.topSelectionChange:
|
|
182
|
+
if (skipSelectionChangeEvent) {
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
// falls through
|
|
176
186
|
case topLevelTypes.topKeyDown:
|
|
177
187
|
case topLevelTypes.topKeyUp:
|
|
178
188
|
return constructSelectEvent(nativeEvent, nativeEventTarget);
|
package/lib/SimpleEventPlugin.js
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
|
|
14
14
|
var EventConstants = require('./EventConstants');
|
|
15
15
|
var EventListener = require('fbjs/lib/EventListener');
|
|
16
|
-
var EventPluginUtils = require('./EventPluginUtils');
|
|
17
16
|
var EventPropagators = require('./EventPropagators');
|
|
18
17
|
var ReactMount = require('./ReactMount');
|
|
19
18
|
var SyntheticClipboardEvent = require('./SyntheticClipboardEvent');
|
|
@@ -30,7 +29,6 @@ var emptyFunction = require('fbjs/lib/emptyFunction');
|
|
|
30
29
|
var getEventCharCode = require('./getEventCharCode');
|
|
31
30
|
var invariant = require('fbjs/lib/invariant');
|
|
32
31
|
var keyOf = require('fbjs/lib/keyOf');
|
|
33
|
-
var warning = require('fbjs/lib/warning');
|
|
34
32
|
|
|
35
33
|
var topLevelTypes = EventConstants.topLevelTypes;
|
|
36
34
|
|
|
@@ -418,16 +416,16 @@ var topLevelEventsToDispatchConfig = {
|
|
|
418
416
|
topMouseOut: eventTypes.mouseOut,
|
|
419
417
|
topMouseOver: eventTypes.mouseOver,
|
|
420
418
|
topMouseUp: eventTypes.mouseUp,
|
|
421
|
-
topPause: eventTypes.pause,
|
|
422
419
|
topPaste: eventTypes.paste,
|
|
420
|
+
topPause: eventTypes.pause,
|
|
423
421
|
topPlay: eventTypes.play,
|
|
424
422
|
topPlaying: eventTypes.playing,
|
|
425
423
|
topProgress: eventTypes.progress,
|
|
426
424
|
topRateChange: eventTypes.rateChange,
|
|
427
425
|
topReset: eventTypes.reset,
|
|
426
|
+
topScroll: eventTypes.scroll,
|
|
428
427
|
topSeeked: eventTypes.seeked,
|
|
429
428
|
topSeeking: eventTypes.seeking,
|
|
430
|
-
topScroll: eventTypes.scroll,
|
|
431
429
|
topStalled: eventTypes.stalled,
|
|
432
430
|
topSubmit: eventTypes.submit,
|
|
433
431
|
topSuspend: eventTypes.suspend,
|
|
@@ -452,25 +450,6 @@ var SimpleEventPlugin = {
|
|
|
452
450
|
|
|
453
451
|
eventTypes: eventTypes,
|
|
454
452
|
|
|
455
|
-
/**
|
|
456
|
-
* Same as the default implementation, except cancels the event when return
|
|
457
|
-
* value is false. This behavior will be disabled in a future release.
|
|
458
|
-
*
|
|
459
|
-
* @param {object} event Event to be dispatched.
|
|
460
|
-
* @param {function} listener Application-level callback.
|
|
461
|
-
* @param {string} domID DOM ID to pass to the callback.
|
|
462
|
-
*/
|
|
463
|
-
executeDispatch: function (event, listener, domID) {
|
|
464
|
-
var returnValue = EventPluginUtils.executeDispatch(event, listener, domID);
|
|
465
|
-
|
|
466
|
-
process.env.NODE_ENV !== 'production' ? warning(typeof returnValue !== 'boolean', 'Returning `false` from an event handler is deprecated and will be ' + 'ignored in a future release. Instead, manually call ' + 'e.stopPropagation() or e.preventDefault(), as appropriate.') : undefined;
|
|
467
|
-
|
|
468
|
-
if (returnValue === false) {
|
|
469
|
-
event.stopPropagation();
|
|
470
|
-
event.preventDefault();
|
|
471
|
-
}
|
|
472
|
-
},
|
|
473
|
-
|
|
474
453
|
/**
|
|
475
454
|
* @param {string} topLevelType Record from `EventConstants`.
|
|
476
455
|
* @param {DOMEventTarget} topLevelTarget The listening component root node.
|
package/lib/SyntheticEvent.js
CHANGED
|
@@ -16,13 +16,13 @@ var PooledClass = require('./PooledClass');
|
|
|
16
16
|
|
|
17
17
|
var assign = require('./Object.assign');
|
|
18
18
|
var emptyFunction = require('fbjs/lib/emptyFunction');
|
|
19
|
+
var warning = require('fbjs/lib/warning');
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* @interface Event
|
|
22
23
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
23
24
|
*/
|
|
24
25
|
var EventInterface = {
|
|
25
|
-
path: null,
|
|
26
26
|
type: null,
|
|
27
27
|
// currentTarget is set when dispatching; no use in copying it here
|
|
28
28
|
currentTarget: emptyFunction.thatReturnsNull,
|
|
@@ -87,6 +87,13 @@ assign(SyntheticEvent.prototype, {
|
|
|
87
87
|
preventDefault: function () {
|
|
88
88
|
this.defaultPrevented = true;
|
|
89
89
|
var event = this.nativeEvent;
|
|
90
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
91
|
+
process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;
|
|
92
|
+
}
|
|
93
|
+
if (!event) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
90
97
|
if (event.preventDefault) {
|
|
91
98
|
event.preventDefault();
|
|
92
99
|
} else {
|
|
@@ -97,6 +104,13 @@ assign(SyntheticEvent.prototype, {
|
|
|
97
104
|
|
|
98
105
|
stopPropagation: function () {
|
|
99
106
|
var event = this.nativeEvent;
|
|
107
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
108
|
+
process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;
|
|
109
|
+
}
|
|
110
|
+
if (!event) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
100
114
|
if (event.stopPropagation) {
|
|
101
115
|
event.stopPropagation();
|
|
102
116
|
} else {
|
package/lib/Transaction.js
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013-2015, Facebook, Inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree. An additional grant
|
|
7
|
+
* of patent rights can be found in the PATENTS file in the same directory.
|
|
8
|
+
*
|
|
9
|
+
* @providesModule canDefineProperty
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var canDefineProperty = false;
|
|
15
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
16
|
+
try {
|
|
17
|
+
Object.defineProperty({}, 'x', { get: function () {} });
|
|
18
|
+
canDefineProperty = true;
|
|
19
|
+
} catch (x) {
|
|
20
|
+
// IE will fail on defineProperty
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = canDefineProperty;
|
|
@@ -33,7 +33,7 @@ var React = require('./React');
|
|
|
33
33
|
*
|
|
34
34
|
* var instances = renderHierarchy(
|
|
35
35
|
* function(ComponentA[, ComponentB, ComponentC]) {
|
|
36
|
-
*
|
|
36
|
+
* ReactDOM.render(<ComponentA />, ...);
|
|
37
37
|
* })
|
|
38
38
|
* );
|
|
39
39
|
* instances[0][0]; // First return value of first render method.
|
package/lib/deprecated.js
CHANGED
|
@@ -20,11 +20,12 @@ var warning = require('fbjs/lib/warning');
|
|
|
20
20
|
*
|
|
21
21
|
* @param {string} fnName The name of the function
|
|
22
22
|
* @param {string} newModule The module that fn will exist in
|
|
23
|
+
* @param {string} newPackage The module that fn will exist in
|
|
23
24
|
* @param {*} ctx The context this forwarded call should run in
|
|
24
25
|
* @param {function} fn The function to forward on to
|
|
25
26
|
* @return {function} The function that will warn once and then call fn
|
|
26
27
|
*/
|
|
27
|
-
function deprecated(fnName, newModule, ctx, fn) {
|
|
28
|
+
function deprecated(fnName, newModule, newPackage, ctx, fn) {
|
|
28
29
|
var warned = false;
|
|
29
30
|
if (process.env.NODE_ENV !== 'production') {
|
|
30
31
|
var newFn = function () {
|
|
@@ -32,7 +33,7 @@ function deprecated(fnName, newModule, ctx, fn) {
|
|
|
32
33
|
// Require examples in this string must be split to prevent React's
|
|
33
34
|
// build tools from mistaking them for real requires.
|
|
34
35
|
// Otherwise the build tools will attempt to build a '%s' module.
|
|
35
|
-
'
|
|
36
|
+
'React.%s is deprecated. Please use %s.%s from require' + '(\'%s\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;
|
|
36
37
|
warned = true;
|
|
37
38
|
return fn.apply(ctx, arguments);
|
|
38
39
|
};
|
package/lib/findDOMNode.js
CHANGED
|
@@ -42,7 +42,7 @@ function findDOMNode(componentOrElement) {
|
|
|
42
42
|
if (ReactInstanceMap.has(componentOrElement)) {
|
|
43
43
|
return ReactMount.getNodeFromInstance(componentOrElement);
|
|
44
44
|
}
|
|
45
|
-
!(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '
|
|
45
|
+
!(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;
|
|
46
46
|
!false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;
|
|
47
47
|
}
|
|
48
48
|
|
package/lib/getTestDocument.js
CHANGED
|
@@ -12,17 +12,10 @@
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
14
|
function getTestDocument(markup) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
document.
|
|
18
|
-
|
|
19
|
-
var testDocument = iframe.contentDocument || iframe.contentWindow.document;
|
|
20
|
-
testDocument.open();
|
|
21
|
-
testDocument.write(markup || '<!doctype html><html><meta charset=utf-8><title>test doc</title>');
|
|
22
|
-
testDocument.close();
|
|
23
|
-
|
|
24
|
-
iframe.parentNode.removeChild(iframe);
|
|
25
|
-
return testDocument;
|
|
15
|
+
document.open();
|
|
16
|
+
document.write(markup || '<!doctype html><html><meta charset=utf-8><title>test doc</title>');
|
|
17
|
+
document.close();
|
|
18
|
+
return document;
|
|
26
19
|
}
|
|
27
20
|
|
|
28
21
|
module.exports = getTestDocument;
|
|
@@ -58,10 +58,8 @@ function instantiateReactComponent(node) {
|
|
|
58
58
|
var instance;
|
|
59
59
|
|
|
60
60
|
if (node === null || node === false) {
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (typeof node === 'object') {
|
|
61
|
+
instance = new ReactEmptyComponent(instantiateReactComponent);
|
|
62
|
+
} else if (typeof node === 'object') {
|
|
65
63
|
var element = node;
|
|
66
64
|
!(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;
|
|
67
65
|
|
|
@@ -70,7 +68,7 @@ function instantiateReactComponent(node) {
|
|
|
70
68
|
instance = ReactNativeComponent.createInternalComponent(element);
|
|
71
69
|
} else if (isInternalComponentType(element.type)) {
|
|
72
70
|
// This is temporarily available for custom components that are not string
|
|
73
|
-
//
|
|
71
|
+
// representations. I.e. ART. Once those are updated to use the string
|
|
74
72
|
// representation, we can drop this code path.
|
|
75
73
|
instance = new element.type(element);
|
|
76
74
|
} else {
|
|
@@ -28,6 +28,7 @@ function reactComponentExpect(instance) {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
expect(instance).not.toBeNull();
|
|
31
|
+
expect(instance).not.toBeUndefined();
|
|
31
32
|
|
|
32
33
|
!ReactTestUtils.isCompositeComponent(instance) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'reactComponentExpect(...): instance must be a composite component') : invariant(false) : undefined;
|
|
33
34
|
var internalInstance = ReactInstanceMap.get(instance);
|
|
@@ -138,6 +139,11 @@ assign(reactComponentExpectInternal.prototype, {
|
|
|
138
139
|
return this;
|
|
139
140
|
},
|
|
140
141
|
|
|
142
|
+
toBeEmptyComponent: function () {
|
|
143
|
+
var element = this._instance._currentElement;
|
|
144
|
+
return element === null || element === false;
|
|
145
|
+
},
|
|
146
|
+
|
|
141
147
|
toBePresent: function () {
|
|
142
148
|
expect(this.instance()).toBeTruthy();
|
|
143
149
|
return this;
|
|
@@ -24,14 +24,18 @@
|
|
|
24
24
|
* @protected
|
|
25
25
|
*/
|
|
26
26
|
function shouldUpdateReactComponent(prevElement, nextElement) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
var prevEmpty = prevElement === null || prevElement === false;
|
|
28
|
+
var nextEmpty = nextElement === null || nextElement === false;
|
|
29
|
+
if (prevEmpty || nextEmpty) {
|
|
30
|
+
return prevEmpty === nextEmpty;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var prevType = typeof prevElement;
|
|
34
|
+
var nextType = typeof nextElement;
|
|
35
|
+
if (prevType === 'string' || prevType === 'number') {
|
|
36
|
+
return nextType === 'string' || nextType === 'number';
|
|
37
|
+
} else {
|
|
38
|
+
return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
|
|
35
39
|
}
|
|
36
40
|
return false;
|
|
37
41
|
}
|
package/lib/sliceChildren.js
CHANGED
|
@@ -11,9 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
var flattenChildren = require('./flattenChildren');
|
|
14
|
+
var ReactChildren = require('./ReactChildren');
|
|
17
15
|
|
|
18
16
|
/**
|
|
19
17
|
* Slice children that are typically specified as `props.children`. This version
|
|
@@ -29,23 +27,8 @@ function sliceChildren(children, start, end) {
|
|
|
29
27
|
return children;
|
|
30
28
|
}
|
|
31
29
|
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
var ii = 0;
|
|
35
|
-
for (var key in flattenedMap) {
|
|
36
|
-
if (!flattenedMap.hasOwnProperty(key)) {
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
var child = flattenedMap[key];
|
|
40
|
-
if (ii >= start) {
|
|
41
|
-
slicedChildren[key] = child;
|
|
42
|
-
}
|
|
43
|
-
ii++;
|
|
44
|
-
if (end != null && ii >= end) {
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return ReactFragment.create(slicedChildren);
|
|
30
|
+
var array = ReactChildren.toArray(children);
|
|
31
|
+
return array.slice(start, end);
|
|
49
32
|
}
|
|
50
33
|
|
|
51
34
|
module.exports = sliceChildren;
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
+
var ReactCurrentOwner = require('./ReactCurrentOwner');
|
|
14
15
|
var ReactElement = require('./ReactElement');
|
|
15
|
-
var ReactFragment = require('./ReactFragment');
|
|
16
16
|
var ReactInstanceHandles = require('./ReactInstanceHandles');
|
|
17
17
|
|
|
18
18
|
var getIteratorFn = require('./getIteratorFn');
|
|
@@ -105,7 +105,7 @@ function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext)
|
|
|
105
105
|
var child;
|
|
106
106
|
var nextName;
|
|
107
107
|
var subtreeCount = 0; // Count of children found in the current subtree.
|
|
108
|
-
var nextNamePrefix = nameSoFar
|
|
108
|
+
var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
|
|
109
109
|
|
|
110
110
|
if (Array.isArray(children)) {
|
|
111
111
|
for (var i = 0; i < children.length; i++) {
|
|
@@ -141,15 +141,21 @@ function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext)
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
} else if (type === 'object') {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
var addendum = '';
|
|
145
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
146
|
+
addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';
|
|
147
|
+
if (children._isReactElement) {
|
|
148
|
+
addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';
|
|
149
|
+
}
|
|
150
|
+
if (ReactCurrentOwner.current) {
|
|
151
|
+
var name = ReactCurrentOwner.current.getName();
|
|
152
|
+
if (name) {
|
|
153
|
+
addendum += ' Check the render method of `' + name + '`.';
|
|
154
|
+
}
|
|
151
155
|
}
|
|
152
156
|
}
|
|
157
|
+
var childrenString = String(children);
|
|
158
|
+
!false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;
|
|
153
159
|
}
|
|
154
160
|
}
|
|
155
161
|
|