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/PooledClass.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var invariant = require(
|
|
14
|
+
var invariant = require('fbjs/lib/invariant');
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Static poolers. Several custom versions for each potential number of
|
|
@@ -53,6 +53,17 @@ var threeArgumentPooler = function (a1, a2, a3) {
|
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
+
var fourArgumentPooler = function (a1, a2, a3, a4) {
|
|
57
|
+
var Klass = this;
|
|
58
|
+
if (Klass.instancePool.length) {
|
|
59
|
+
var instance = Klass.instancePool.pop();
|
|
60
|
+
Klass.call(instance, a1, a2, a3, a4);
|
|
61
|
+
return instance;
|
|
62
|
+
} else {
|
|
63
|
+
return new Klass(a1, a2, a3, a4);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
56
67
|
var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
|
|
57
68
|
var Klass = this;
|
|
58
69
|
if (Klass.instancePool.length) {
|
|
@@ -66,10 +77,8 @@ var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
|
|
|
66
77
|
|
|
67
78
|
var standardReleaser = function (instance) {
|
|
68
79
|
var Klass = this;
|
|
69
|
-
!(instance instanceof Klass) ?
|
|
70
|
-
|
|
71
|
-
instance.destructor();
|
|
72
|
-
}
|
|
80
|
+
!(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;
|
|
81
|
+
instance.destructor();
|
|
73
82
|
if (Klass.instancePool.length < Klass.poolSize) {
|
|
74
83
|
Klass.instancePool.push(instance);
|
|
75
84
|
}
|
|
@@ -103,6 +112,7 @@ var PooledClass = {
|
|
|
103
112
|
oneArgumentPooler: oneArgumentPooler,
|
|
104
113
|
twoArgumentPooler: twoArgumentPooler,
|
|
105
114
|
threeArgumentPooler: threeArgumentPooler,
|
|
115
|
+
fourArgumentPooler: fourArgumentPooler,
|
|
106
116
|
fiveArgumentPooler: fiveArgumentPooler
|
|
107
117
|
};
|
|
108
118
|
|
package/lib/React.js
CHANGED
|
@@ -11,18 +11,29 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
var ReactDOMServer = require(
|
|
16
|
-
var ReactIsomorphic = require(
|
|
14
|
+
var ReactDOM = require('./ReactDOM');
|
|
15
|
+
var ReactDOMServer = require('./ReactDOMServer');
|
|
16
|
+
var ReactIsomorphic = require('./ReactIsomorphic');
|
|
17
17
|
|
|
18
|
-
var assign = require(
|
|
18
|
+
var assign = require('./Object.assign');
|
|
19
|
+
var deprecated = require('./deprecated');
|
|
19
20
|
|
|
21
|
+
// `version` will be added here by ReactIsomorphic.
|
|
20
22
|
var React = {};
|
|
21
23
|
|
|
22
24
|
assign(React, ReactIsomorphic);
|
|
23
|
-
assign(React, ReactDOMClient);
|
|
24
|
-
assign(React, ReactDOMServer);
|
|
25
25
|
|
|
26
|
-
React
|
|
26
|
+
assign(React, {
|
|
27
|
+
// ReactDOM
|
|
28
|
+
findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),
|
|
29
|
+
render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),
|
|
30
|
+
unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),
|
|
31
|
+
|
|
32
|
+
// ReactDOMServer
|
|
33
|
+
renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),
|
|
34
|
+
renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;
|
|
27
38
|
|
|
28
39
|
module.exports = React;
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
var ReactInstanceMap = require(
|
|
14
|
+
var ReactInstanceMap = require('./ReactInstanceMap');
|
|
15
15
|
|
|
16
|
-
var findDOMNode = require(
|
|
17
|
-
var warning = require(
|
|
16
|
+
var findDOMNode = require('./findDOMNode');
|
|
17
|
+
var warning = require('fbjs/lib/warning');
|
|
18
18
|
|
|
19
19
|
var didWarnKey = '_getDOMNodeDidWarn';
|
|
20
20
|
|
|
@@ -27,7 +27,7 @@ var ReactBrowserComponentMixin = {
|
|
|
27
27
|
* @protected
|
|
28
28
|
*/
|
|
29
29
|
getDOMNode: function () {
|
|
30
|
-
|
|
30
|
+
process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;
|
|
31
31
|
this.constructor[didWarnKey] = true;
|
|
32
32
|
return findDOMNode(this);
|
|
33
33
|
}
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
|
-
var EventConstants = require(
|
|
16
|
-
var EventPluginHub = require(
|
|
17
|
-
var EventPluginRegistry = require(
|
|
18
|
-
var ReactEventEmitterMixin = require(
|
|
19
|
-
var ViewportMetrics = require(
|
|
15
|
+
var EventConstants = require('./EventConstants');
|
|
16
|
+
var EventPluginHub = require('./EventPluginHub');
|
|
17
|
+
var EventPluginRegistry = require('./EventPluginRegistry');
|
|
18
|
+
var ReactEventEmitterMixin = require('./ReactEventEmitterMixin');
|
|
19
|
+
var ViewportMetrics = require('./ViewportMetrics');
|
|
20
20
|
|
|
21
|
-
var assign = require(
|
|
22
|
-
var isEventSupported = require(
|
|
21
|
+
var assign = require('./Object.assign');
|
|
22
|
+
var isEventSupported = require('./isEventSupported');
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Summary of `ReactBrowserEventEmitter` event handling:
|
|
@@ -84,7 +84,10 @@ var reactTopListenersCounter = 0;
|
|
|
84
84
|
// lower node than `document`), binding at `document` would cause duplicate
|
|
85
85
|
// events so we don't include them here
|
|
86
86
|
var topEventMapping = {
|
|
87
|
+
topAbort: 'abort',
|
|
87
88
|
topBlur: 'blur',
|
|
89
|
+
topCanPlay: 'canplay',
|
|
90
|
+
topCanPlayThrough: 'canplaythrough',
|
|
88
91
|
topChange: 'change',
|
|
89
92
|
topClick: 'click',
|
|
90
93
|
topCompositionEnd: 'compositionend',
|
|
@@ -102,24 +105,44 @@ var topEventMapping = {
|
|
|
102
105
|
topDragOver: 'dragover',
|
|
103
106
|
topDragStart: 'dragstart',
|
|
104
107
|
topDrop: 'drop',
|
|
108
|
+
topDurationChange: 'durationchange',
|
|
109
|
+
topEmptied: 'emptied',
|
|
110
|
+
topEncrypted: 'encrypted',
|
|
111
|
+
topEnded: 'ended',
|
|
112
|
+
topError: 'error',
|
|
105
113
|
topFocus: 'focus',
|
|
106
114
|
topInput: 'input',
|
|
107
115
|
topKeyDown: 'keydown',
|
|
108
116
|
topKeyPress: 'keypress',
|
|
109
117
|
topKeyUp: 'keyup',
|
|
118
|
+
topLoadedData: 'loadeddata',
|
|
119
|
+
topLoadedMetadata: 'loadedmetadata',
|
|
120
|
+
topLoadStart: 'loadstart',
|
|
110
121
|
topMouseDown: 'mousedown',
|
|
111
122
|
topMouseMove: 'mousemove',
|
|
112
123
|
topMouseOut: 'mouseout',
|
|
113
124
|
topMouseOver: 'mouseover',
|
|
114
125
|
topMouseUp: 'mouseup',
|
|
115
126
|
topPaste: 'paste',
|
|
127
|
+
topPause: 'pause',
|
|
128
|
+
topPlay: 'play',
|
|
129
|
+
topPlaying: 'playing',
|
|
130
|
+
topProgress: 'progress',
|
|
131
|
+
topRateChange: 'ratechange',
|
|
116
132
|
topScroll: 'scroll',
|
|
133
|
+
topSeeked: 'seeked',
|
|
134
|
+
topSeeking: 'seeking',
|
|
117
135
|
topSelectionChange: 'selectionchange',
|
|
136
|
+
topStalled: 'stalled',
|
|
137
|
+
topSuspend: 'suspend',
|
|
118
138
|
topTextInput: 'textInput',
|
|
139
|
+
topTimeUpdate: 'timeupdate',
|
|
119
140
|
topTouchCancel: 'touchcancel',
|
|
120
141
|
topTouchEnd: 'touchend',
|
|
121
142
|
topTouchMove: 'touchmove',
|
|
122
143
|
topTouchStart: 'touchstart',
|
|
144
|
+
topVolumeChange: 'volumechange',
|
|
145
|
+
topWaiting: 'waiting',
|
|
123
146
|
topWheel: 'wheel'
|
|
124
147
|
};
|
|
125
148
|
|
|
@@ -12,21 +12,44 @@
|
|
|
12
12
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
|
-
var React = require(
|
|
15
|
+
var React = require('./React');
|
|
16
16
|
|
|
17
|
-
var assign = require(
|
|
17
|
+
var assign = require('./Object.assign');
|
|
18
18
|
|
|
19
|
-
var ReactTransitionGroup =
|
|
20
|
-
var ReactCSSTransitionGroupChild =
|
|
19
|
+
var ReactTransitionGroup = require('./ReactTransitionGroup');
|
|
20
|
+
var ReactCSSTransitionGroupChild = require('./ReactCSSTransitionGroupChild');
|
|
21
|
+
|
|
22
|
+
function createTransitionTimeoutPropValidator(transitionType) {
|
|
23
|
+
var timeoutPropName = 'transition' + transitionType + 'Timeout';
|
|
24
|
+
var enabledPropName = 'transition' + transitionType;
|
|
25
|
+
|
|
26
|
+
return function (props) {
|
|
27
|
+
// If the transition is enabled
|
|
28
|
+
if (props[enabledPropName]) {
|
|
29
|
+
// If no timeout duration is provided
|
|
30
|
+
if (!props[timeoutPropName]) {
|
|
31
|
+
return new Error(timeoutPropName + ' wasn\'t supplied to ReactCSSTransitionGroup: ' + 'this can cause unreliable animations and won\'t be supported in ' + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.');
|
|
32
|
+
|
|
33
|
+
// If the duration isn't a number
|
|
34
|
+
} else if (typeof props[timeoutPropName] !== 'number') {
|
|
35
|
+
return new Error(timeoutPropName + ' must be a number (in milliseconds)');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
21
40
|
|
|
22
41
|
var ReactCSSTransitionGroup = React.createClass({
|
|
23
42
|
displayName: 'ReactCSSTransitionGroup',
|
|
24
43
|
|
|
25
44
|
propTypes: {
|
|
26
|
-
transitionName:
|
|
45
|
+
transitionName: ReactCSSTransitionGroupChild.propTypes.name,
|
|
46
|
+
|
|
27
47
|
transitionAppear: React.PropTypes.bool,
|
|
28
48
|
transitionEnter: React.PropTypes.bool,
|
|
29
|
-
transitionLeave: React.PropTypes.bool
|
|
49
|
+
transitionLeave: React.PropTypes.bool,
|
|
50
|
+
transitionAppearTimeout: createTransitionTimeoutPropValidator('Appear'),
|
|
51
|
+
transitionEnterTimeout: createTransitionTimeoutPropValidator('Enter'),
|
|
52
|
+
transitionLeaveTimeout: createTransitionTimeoutPropValidator('Leave')
|
|
30
53
|
},
|
|
31
54
|
|
|
32
55
|
getDefaultProps: function () {
|
|
@@ -41,16 +64,19 @@ var ReactCSSTransitionGroup = React.createClass({
|
|
|
41
64
|
// We need to provide this childFactory so that
|
|
42
65
|
// ReactCSSTransitionGroupChild can receive updates to name, enter, and
|
|
43
66
|
// leave while it is leaving.
|
|
44
|
-
return ReactCSSTransitionGroupChild
|
|
67
|
+
return React.createElement(ReactCSSTransitionGroupChild, {
|
|
45
68
|
name: this.props.transitionName,
|
|
46
69
|
appear: this.props.transitionAppear,
|
|
47
70
|
enter: this.props.transitionEnter,
|
|
48
|
-
leave: this.props.transitionLeave
|
|
71
|
+
leave: this.props.transitionLeave,
|
|
72
|
+
appearTimeout: this.props.transitionAppearTimeout,
|
|
73
|
+
enterTimeout: this.props.transitionEnterTimeout,
|
|
74
|
+
leaveTimeout: this.props.transitionLeaveTimeout
|
|
49
75
|
}, child);
|
|
50
76
|
},
|
|
51
77
|
|
|
52
78
|
render: function () {
|
|
53
|
-
return ReactTransitionGroup
|
|
79
|
+
return React.createElement(ReactTransitionGroup, assign({}, this.props, { childFactory: this._wrapChild }));
|
|
54
80
|
}
|
|
55
81
|
});
|
|
56
82
|
|
|
@@ -12,45 +12,68 @@
|
|
|
12
12
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
|
-
var React = require(
|
|
15
|
+
var React = require('./React');
|
|
16
|
+
var ReactDOM = require('./ReactDOM');
|
|
16
17
|
|
|
17
|
-
var CSSCore = require(
|
|
18
|
-
var ReactTransitionEvents = require(
|
|
18
|
+
var CSSCore = require('fbjs/lib/CSSCore');
|
|
19
|
+
var ReactTransitionEvents = require('./ReactTransitionEvents');
|
|
19
20
|
|
|
20
|
-
var onlyChild = require(
|
|
21
|
-
var warning = require("./warning");
|
|
21
|
+
var onlyChild = require('./onlyChild');
|
|
22
22
|
|
|
23
23
|
// We don't remove the element from the DOM until we receive an animationend or
|
|
24
24
|
// transitionend event. If the user screws up and forgets to add an animation
|
|
25
25
|
// their node will be stuck in the DOM forever, so we detect if an animation
|
|
26
26
|
// does not start and if it doesn't, we just call the end listener immediately.
|
|
27
27
|
var TICK = 17;
|
|
28
|
-
var NO_EVENT_TIMEOUT = 5000;
|
|
29
|
-
|
|
30
|
-
var noEventListener = null;
|
|
31
|
-
|
|
32
|
-
if ('production' !== process.env.NODE_ENV) {
|
|
33
|
-
noEventListener = function () {
|
|
34
|
-
'production' !== process.env.NODE_ENV ? warning(false, 'transition(): tried to perform an animation without ' + 'an animationend or transitionend event after timeout (' + '%sms). You should either disable this ' + 'transition in JS or add a CSS animation/transition.', NO_EVENT_TIMEOUT) : undefined;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
28
|
|
|
38
29
|
var ReactCSSTransitionGroupChild = React.createClass({
|
|
39
30
|
displayName: 'ReactCSSTransitionGroupChild',
|
|
40
31
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
propTypes: {
|
|
33
|
+
name: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.shape({
|
|
34
|
+
enter: React.PropTypes.string,
|
|
35
|
+
leave: React.PropTypes.string,
|
|
36
|
+
active: React.PropTypes.string
|
|
37
|
+
}), React.PropTypes.shape({
|
|
38
|
+
enter: React.PropTypes.string,
|
|
39
|
+
enterActive: React.PropTypes.string,
|
|
40
|
+
leave: React.PropTypes.string,
|
|
41
|
+
leaveActive: React.PropTypes.string,
|
|
42
|
+
appear: React.PropTypes.string,
|
|
43
|
+
appearActive: React.PropTypes.string
|
|
44
|
+
})]).isRequired,
|
|
45
|
+
|
|
46
|
+
// Once we require timeouts to be specified, we can remove the
|
|
47
|
+
// boolean flags (appear etc.) and just accept a number
|
|
48
|
+
// or a bool for the timeout flags (appearTimeout etc.)
|
|
49
|
+
appear: React.PropTypes.bool,
|
|
50
|
+
enter: React.PropTypes.bool,
|
|
51
|
+
leave: React.PropTypes.bool,
|
|
52
|
+
appearTimeout: React.PropTypes.number,
|
|
53
|
+
enterTimeout: React.PropTypes.number,
|
|
54
|
+
leaveTimeout: React.PropTypes.number
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
transition: function (animationType, finishCallback, userSpecifiedDelay) {
|
|
58
|
+
var node = ReactDOM.findDOMNode(this);
|
|
59
|
+
|
|
60
|
+
if (!node) {
|
|
61
|
+
if (finishCallback) {
|
|
62
|
+
finishCallback();
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
var className = this.props.name[animationType] || this.props.name + '-' + animationType;
|
|
68
|
+
var activeClassName = this.props.name[animationType + 'Active'] || className + '-active';
|
|
69
|
+
var timeout = null;
|
|
46
70
|
|
|
47
71
|
var endListener = function (e) {
|
|
48
72
|
if (e && e.target !== node) {
|
|
49
73
|
return;
|
|
50
74
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
75
|
+
|
|
76
|
+
clearTimeout(timeout);
|
|
54
77
|
|
|
55
78
|
CSSCore.removeClass(node, className);
|
|
56
79
|
CSSCore.removeClass(node, activeClassName);
|
|
@@ -64,15 +87,18 @@ var ReactCSSTransitionGroupChild = React.createClass({
|
|
|
64
87
|
}
|
|
65
88
|
};
|
|
66
89
|
|
|
67
|
-
ReactTransitionEvents.addEndEventListener(node, endListener);
|
|
68
|
-
|
|
69
90
|
CSSCore.addClass(node, className);
|
|
70
91
|
|
|
71
92
|
// Need to do this to actually trigger a transition.
|
|
72
93
|
this.queueClass(activeClassName);
|
|
73
94
|
|
|
74
|
-
|
|
75
|
-
|
|
95
|
+
// If the user specified a timeout delay.
|
|
96
|
+
if (userSpecifiedDelay) {
|
|
97
|
+
// Clean-up the animation after the specified delay
|
|
98
|
+
timeout = setTimeout(endListener, userSpecifiedDelay);
|
|
99
|
+
} else {
|
|
100
|
+
// DEPRECATED: this listener will be removed in a future version of react
|
|
101
|
+
ReactTransitionEvents.addEndEventListener(node, endListener);
|
|
76
102
|
}
|
|
77
103
|
},
|
|
78
104
|
|
|
@@ -86,7 +112,7 @@ var ReactCSSTransitionGroupChild = React.createClass({
|
|
|
86
112
|
|
|
87
113
|
flushClassNameQueue: function () {
|
|
88
114
|
if (this.isMounted()) {
|
|
89
|
-
this.classNameQueue.forEach(CSSCore.addClass.bind(CSSCore,
|
|
115
|
+
this.classNameQueue.forEach(CSSCore.addClass.bind(CSSCore, ReactDOM.findDOMNode(this)));
|
|
90
116
|
}
|
|
91
117
|
this.classNameQueue.length = 0;
|
|
92
118
|
this.timeout = null;
|
|
@@ -104,7 +130,7 @@ var ReactCSSTransitionGroupChild = React.createClass({
|
|
|
104
130
|
|
|
105
131
|
componentWillAppear: function (done) {
|
|
106
132
|
if (this.props.appear) {
|
|
107
|
-
this.transition('appear', done);
|
|
133
|
+
this.transition('appear', done, this.props.appearTimeout);
|
|
108
134
|
} else {
|
|
109
135
|
done();
|
|
110
136
|
}
|
|
@@ -112,7 +138,7 @@ var ReactCSSTransitionGroupChild = React.createClass({
|
|
|
112
138
|
|
|
113
139
|
componentWillEnter: function (done) {
|
|
114
140
|
if (this.props.enter) {
|
|
115
|
-
this.transition('enter', done);
|
|
141
|
+
this.transition('enter', done, this.props.enterTimeout);
|
|
116
142
|
} else {
|
|
117
143
|
done();
|
|
118
144
|
}
|
|
@@ -120,7 +146,7 @@ var ReactCSSTransitionGroupChild = React.createClass({
|
|
|
120
146
|
|
|
121
147
|
componentWillLeave: function (done) {
|
|
122
148
|
if (this.props.leave) {
|
|
123
|
-
this.transition('leave', done);
|
|
149
|
+
this.transition('leave', done, this.props.leaveTimeout);
|
|
124
150
|
} else {
|
|
125
151
|
done();
|
|
126
152
|
}
|
|
@@ -12,11 +12,23 @@
|
|
|
12
12
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
|
-
var ReactReconciler = require(
|
|
15
|
+
var ReactReconciler = require('./ReactReconciler');
|
|
16
16
|
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
17
|
+
var instantiateReactComponent = require('./instantiateReactComponent');
|
|
18
|
+
var shouldUpdateReactComponent = require('./shouldUpdateReactComponent');
|
|
19
|
+
var traverseAllChildren = require('./traverseAllChildren');
|
|
20
|
+
var warning = require('fbjs/lib/warning');
|
|
21
|
+
|
|
22
|
+
function instantiateChild(childInstances, child, name) {
|
|
23
|
+
// We found a component instance.
|
|
24
|
+
var keyUnique = childInstances[name] === undefined;
|
|
25
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
26
|
+
process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;
|
|
27
|
+
}
|
|
28
|
+
if (child != null && keyUnique) {
|
|
29
|
+
childInstances[name] = instantiateReactComponent(child, null);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
20
32
|
|
|
21
33
|
/**
|
|
22
34
|
* ReactChildReconciler provides helpers for initializing or updating a set of
|
|
@@ -24,7 +36,6 @@ var shouldUpdateReactComponent = require("./shouldUpdateReactComponent");
|
|
|
24
36
|
* does diffed reordering and insertion.
|
|
25
37
|
*/
|
|
26
38
|
var ReactChildReconciler = {
|
|
27
|
-
|
|
28
39
|
/**
|
|
29
40
|
* Generates a "mount image" for each of the supplied children. In the case
|
|
30
41
|
* of `ReactDOMComponent`, a mount image is a string of markup.
|
|
@@ -34,36 +45,30 @@ var ReactChildReconciler = {
|
|
|
34
45
|
* @internal
|
|
35
46
|
*/
|
|
36
47
|
instantiateChildren: function (nestedChildNodes, transaction, context) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (children.hasOwnProperty(name)) {
|
|
40
|
-
var child = children[name];
|
|
41
|
-
// The rendered children must be turned into instances as they're
|
|
42
|
-
// mounted.
|
|
43
|
-
var childInstance = instantiateReactComponent(child, null);
|
|
44
|
-
children[name] = childInstance;
|
|
45
|
-
}
|
|
48
|
+
if (nestedChildNodes == null) {
|
|
49
|
+
return null;
|
|
46
50
|
}
|
|
47
|
-
|
|
51
|
+
var childInstances = {};
|
|
52
|
+
traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
|
|
53
|
+
return childInstances;
|
|
48
54
|
},
|
|
49
55
|
|
|
50
56
|
/**
|
|
51
57
|
* Updates the rendered children and returns a new set of children.
|
|
52
58
|
*
|
|
53
59
|
* @param {?object} prevChildren Previously initialized set of children.
|
|
54
|
-
* @param {?object}
|
|
60
|
+
* @param {?object} nextChildren Flat child element maps.
|
|
55
61
|
* @param {ReactReconcileTransaction} transaction
|
|
56
62
|
* @param {object} context
|
|
57
63
|
* @return {?object} A new set of child instances.
|
|
58
64
|
* @internal
|
|
59
65
|
*/
|
|
60
|
-
updateChildren: function (prevChildren,
|
|
66
|
+
updateChildren: function (prevChildren, nextChildren, transaction, context) {
|
|
61
67
|
// We currently don't have a way to track moves here but if we use iterators
|
|
62
68
|
// instead of for..in we can zip the iterators and check if an item has
|
|
63
69
|
// moved.
|
|
64
70
|
// TODO: If nothing has changed, return the prevChildren object so that we
|
|
65
71
|
// can quickly bailout if nothing has changed.
|
|
66
|
-
var nextChildren = flattenChildren(nextNestedChildNodes);
|
|
67
72
|
if (!nextChildren && !prevChildren) {
|
|
68
73
|
return null;
|
|
69
74
|
}
|
|
@@ -75,7 +80,7 @@ var ReactChildReconciler = {
|
|
|
75
80
|
var prevChild = prevChildren && prevChildren[name];
|
|
76
81
|
var prevElement = prevChild && prevChild._currentElement;
|
|
77
82
|
var nextElement = nextChildren[name];
|
|
78
|
-
if (shouldUpdateReactComponent(prevElement, nextElement)) {
|
|
83
|
+
if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {
|
|
79
84
|
ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);
|
|
80
85
|
nextChildren[name] = prevChild;
|
|
81
86
|
} else {
|