react 0.8.0 → 0.10.0

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.
Files changed (160) hide show
  1. package/README.md +0 -8
  2. package/addons.js +0 -3
  3. package/lib/AutoFocusMixin.js +32 -0
  4. package/lib/CSSCore.js +23 -22
  5. package/lib/CSSProperty.js +32 -1
  6. package/lib/CSSPropertyOperations.js +1 -1
  7. package/lib/ChangeEventPlugin.js +27 -5
  8. package/lib/ClientReactRootIndex.js +30 -0
  9. package/lib/CompositionEventPlugin.js +58 -10
  10. package/lib/DOMChildrenOperations.js +39 -3
  11. package/lib/DOMProperty.js +9 -5
  12. package/lib/DOMPropertyOperations.js +21 -8
  13. package/lib/Danger.js +9 -8
  14. package/lib/DefaultDOMPropertyConfig.js +23 -14
  15. package/lib/DefaultEventPluginOrder.js +1 -1
  16. package/lib/EnterLeaveEventPlugin.js +38 -5
  17. package/lib/EventConstants.js +4 -1
  18. package/lib/EventListener.js +42 -34
  19. package/lib/EventPluginHub.js +118 -13
  20. package/lib/EventPluginRegistry.js +62 -18
  21. package/lib/EventPluginUtils.js +33 -4
  22. package/lib/EventPropagators.js +7 -43
  23. package/lib/ExecutionEnvironment.js +4 -1
  24. package/lib/LinkedStateMixin.js +1 -1
  25. package/lib/LinkedValueUtils.js +160 -0
  26. package/lib/MobileSafariClickEventPlugin.js +1 -1
  27. package/lib/PooledClass.js +7 -1
  28. package/lib/React.js +30 -4
  29. package/lib/ReactBrowserComponentMixin.js +42 -0
  30. package/lib/ReactCSSTransitionGroup.js +65 -0
  31. package/lib/{ReactTransitionableChild.js → ReactCSSTransitionGroupChild.js} +22 -36
  32. package/lib/ReactChildren.js +4 -4
  33. package/lib/ReactComponent.js +163 -83
  34. package/lib/ReactComponentBrowserEnvironment.js +55 -71
  35. package/lib/ReactCompositeComponent.js +686 -119
  36. package/lib/ReactContext.js +67 -0
  37. package/lib/ReactCurrentOwner.js +1 -1
  38. package/lib/ReactDOM.js +19 -6
  39. package/lib/ReactDOMButton.js +6 -1
  40. package/lib/ReactDOMComponent.js +66 -24
  41. package/lib/ReactDOMForm.js +13 -3
  42. package/lib/ReactDOMIDOperations.js +106 -61
  43. package/lib/ReactDOMImg.js +61 -0
  44. package/lib/ReactDOMInput.js +28 -15
  45. package/lib/ReactDOMOption.js +13 -8
  46. package/lib/ReactDOMSelect.js +38 -18
  47. package/lib/ReactDOMSelection.js +1 -1
  48. package/lib/ReactDOMTextarea.js +19 -11
  49. package/lib/ReactDefaultBatchingStrategy.js +1 -1
  50. package/lib/ReactDefaultInjection.js +60 -26
  51. package/lib/ReactDefaultPerf.js +208 -371
  52. package/lib/ReactDefaultPerfAnalysis.js +199 -0
  53. package/lib/ReactErrorUtils.js +6 -15
  54. package/lib/ReactEventEmitter.js +144 -146
  55. package/lib/ReactEventEmitterMixin.js +1 -33
  56. package/lib/ReactEventTopLevelCallback.js +75 -15
  57. package/lib/ReactInjection.js +43 -0
  58. package/lib/ReactInputSelection.js +3 -2
  59. package/lib/ReactInstanceHandles.js +36 -20
  60. package/lib/ReactLink.js +2 -2
  61. package/lib/ReactMarkupChecksum.js +1 -1
  62. package/lib/ReactMount.js +136 -104
  63. package/lib/ReactMountReady.js +2 -2
  64. package/lib/ReactMultiChild.js +40 -49
  65. package/lib/ReactMultiChildUpdateTypes.js +3 -1
  66. package/lib/ReactOwner.js +17 -4
  67. package/lib/ReactPerf.js +6 -9
  68. package/lib/ReactPropTransferer.js +41 -22
  69. package/lib/ReactPropTypeLocationNames.js +31 -0
  70. package/lib/{ReactComponentEnvironment.js → ReactPropTypeLocations.js} +11 -6
  71. package/lib/ReactPropTypes.js +249 -48
  72. package/lib/ReactPutListenerQueue.js +61 -0
  73. package/lib/ReactReconcileTransaction.js +28 -7
  74. package/lib/ReactRootIndex.js +36 -0
  75. package/lib/ReactServerRendering.js +46 -19
  76. package/lib/ReactServerRenderingTransaction.js +116 -0
  77. package/lib/ReactStateSetters.js +1 -1
  78. package/lib/ReactTestUtils.js +394 -0
  79. package/lib/ReactTextComponent.js +33 -6
  80. package/lib/{ReactTransitionKeySet.js → ReactTransitionChildMapping.js} +43 -48
  81. package/lib/ReactTransitionEvents.js +1 -1
  82. package/lib/ReactTransitionGroup.js +133 -58
  83. package/lib/ReactUpdates.js +15 -12
  84. package/lib/ReactWithAddons.js +15 -3
  85. package/lib/SelectEventPlugin.js +23 -40
  86. package/lib/ServerReactRootIndex.js +36 -0
  87. package/lib/SimpleEventPlugin.js +55 -7
  88. package/lib/SyntheticClipboardEvent.js +8 -2
  89. package/lib/SyntheticCompositionEvent.js +1 -1
  90. package/lib/SyntheticDragEvent.js +44 -0
  91. package/lib/SyntheticEvent.js +3 -2
  92. package/lib/SyntheticFocusEvent.js +1 -1
  93. package/lib/SyntheticKeyboardEvent.js +5 -3
  94. package/lib/SyntheticMouseEvent.js +1 -1
  95. package/lib/SyntheticTouchEvent.js +1 -1
  96. package/lib/SyntheticUIEvent.js +1 -1
  97. package/lib/SyntheticWheelEvent.js +11 -8
  98. package/lib/Transaction.js +62 -37
  99. package/lib/ViewportMetrics.js +1 -1
  100. package/lib/accumulate.js +1 -1
  101. package/lib/adler32.js +1 -1
  102. package/lib/cloneWithProps.js +59 -0
  103. package/lib/containsNode.js +1 -1
  104. package/lib/copyProperties.js +1 -1
  105. package/lib/createArrayFrom.js +11 -14
  106. package/lib/createFullPageComponent.js +63 -0
  107. package/lib/createNodesFromMarkup.js +1 -1
  108. package/lib/createObjectFrom.js +1 -1
  109. package/lib/cx.js +3 -3
  110. package/lib/dangerousStyleValue.js +1 -1
  111. package/lib/emptyFunction.js +1 -1
  112. package/lib/emptyObject.js +27 -0
  113. package/lib/escapeTextForBrowser.js +1 -1
  114. package/lib/flattenChildren.js +6 -3
  115. package/lib/focusNode.js +33 -0
  116. package/lib/forEachAccumulated.js +1 -1
  117. package/lib/getActiveElement.js +5 -4
  118. package/lib/getEventKey.js +85 -0
  119. package/lib/getEventTarget.js +1 -1
  120. package/lib/getMarkupWrap.js +11 -1
  121. package/lib/getNodeForCharacterOffset.js +1 -1
  122. package/lib/getReactRootElementInContainer.js +1 -1
  123. package/lib/getTextContentAccessor.js +6 -4
  124. package/lib/getUnboundedScrollPosition.js +3 -3
  125. package/lib/hyphenate.js +1 -1
  126. package/lib/instantiateReactComponent.js +70 -0
  127. package/lib/invariant.js +20 -12
  128. package/lib/isEventSupported.js +8 -12
  129. package/lib/isNode.js +2 -2
  130. package/lib/isTextInputElement.js +1 -1
  131. package/lib/isTextNode.js +1 -1
  132. package/lib/joinClasses.js +1 -1
  133. package/lib/keyMirror.js +1 -1
  134. package/lib/keyOf.js +1 -1
  135. package/lib/memoizeStringOnly.js +1 -1
  136. package/lib/merge.js +1 -1
  137. package/lib/mergeHelpers.js +6 -7
  138. package/lib/mergeInto.js +1 -1
  139. package/lib/mixInto.js +1 -1
  140. package/lib/monitorCodeUse.js +37 -0
  141. package/lib/objMap.js +1 -1
  142. package/lib/objMapKeyVal.js +1 -1
  143. package/lib/onlyChild.js +43 -0
  144. package/lib/performanceNow.js +1 -1
  145. package/lib/shallowEqual.js +1 -1
  146. package/lib/shouldUpdateReactComponent.js +61 -0
  147. package/lib/toArray.js +75 -0
  148. package/lib/traverseAllChildren.js +72 -9
  149. package/lib/update.js +159 -0
  150. package/lib/warning.js +48 -0
  151. package/package.json +3 -3
  152. package/react.js +0 -3
  153. package/ReactJSErrors.js +0 -40
  154. package/lib/$.js +0 -46
  155. package/lib/CallbackRegistry.js +0 -91
  156. package/lib/LinkedValueMixin.js +0 -68
  157. package/lib/ex.js +0 -49
  158. package/lib/filterAttributes.js +0 -45
  159. package/lib/ge.js +0 -76
  160. package/lib/mutateHTMLNodeWithMarkup.js +0 -100
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright 2013 Facebook, Inc.
2
+ * Copyright 2013-2014 Facebook, Inc.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -13,12 +13,17 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  *
16
- * @providesModule ReactComponentEnvironment
16
+ * @providesModule ReactPropTypeLocations
17
17
  */
18
18
 
19
- var ReactComponentBrowserEnvironment =
20
- require("./ReactComponentBrowserEnvironment");
19
+ "use strict";
21
20
 
22
- var ReactComponentEnvironment = ReactComponentBrowserEnvironment;
21
+ var keyMirror = require("./keyMirror");
23
22
 
24
- module.exports = ReactComponentEnvironment;
23
+ var ReactPropTypeLocations = keyMirror({
24
+ prop: null,
25
+ context: null,
26
+ childContext: null
27
+ });
28
+
29
+ module.exports = ReactPropTypeLocations;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright 2013 Facebook, Inc.
2
+ * Copyright 2013-2014 Facebook, Inc.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -18,8 +18,11 @@
18
18
 
19
19
  "use strict";
20
20
 
21
+ var ReactComponent = require("./ReactComponent");
22
+ var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");
23
+
24
+ var warning = require("./warning");
21
25
  var createObjectFrom = require("./createObjectFrom");
22
- var invariant = require("./invariant");
23
26
 
24
27
  /**
25
28
  * Collection of methods that allow declaration and validation of props that are
@@ -54,7 +57,7 @@ var invariant = require("./invariant");
54
57
  * // An optional string or URI prop named "href".
55
58
  * href: function(props, propName, componentName) {
56
59
  * var propValue = props[propName];
57
- * invariant(
60
+ * warning(
58
61
  * propValue == null ||
59
62
  * typeof propValue === 'string' ||
60
63
  * propValue instanceof URI,
@@ -78,81 +81,279 @@ var Props = {
78
81
  object: createPrimitiveTypeChecker('object'),
79
82
  string: createPrimitiveTypeChecker('string'),
80
83
 
84
+ shape: createShapeTypeChecker,
81
85
  oneOf: createEnumTypeChecker,
86
+ oneOfType: createUnionTypeChecker,
87
+ arrayOf: createArrayOfTypeChecker,
88
+
89
+ instanceOf: createInstanceTypeChecker,
82
90
 
83
- instanceOf: createInstanceTypeChecker
91
+ renderable: createRenderableTypeChecker(),
84
92
 
93
+ component: createComponentTypeChecker(),
94
+
95
+ any: createAnyTypeChecker()
85
96
  };
86
97
 
87
98
  var ANONYMOUS = '<<anonymous>>';
88
99
 
100
+ function isRenderable(propValue) {
101
+ switch(typeof propValue) {
102
+ case 'number':
103
+ case 'string':
104
+ return true;
105
+ case 'object':
106
+ if (Array.isArray(propValue)) {
107
+ return propValue.every(isRenderable);
108
+ }
109
+ if (ReactComponent.isValidComponent(propValue)) {
110
+ return true;
111
+ }
112
+ for (var k in propValue) {
113
+ if (!isRenderable(propValue[k])) {
114
+ return false;
115
+ }
116
+ }
117
+ return true;
118
+ default:
119
+ return false;
120
+ }
121
+ }
122
+
123
+ // Equivalent of typeof but with special handling for arrays
124
+ function getPropType(propValue) {
125
+ var propType = typeof propValue;
126
+ if (propType === 'object' && Array.isArray(propValue)) {
127
+ return 'array';
128
+ }
129
+ return propType;
130
+ }
131
+
132
+ function createAnyTypeChecker() {
133
+ function validateAnyType(
134
+ shouldWarn, propValue, propName, componentName, location
135
+ ) {
136
+ return true; // is always valid
137
+ }
138
+ return createChainableTypeChecker(validateAnyType);
139
+ }
140
+
89
141
  function createPrimitiveTypeChecker(expectedType) {
90
- function validatePrimitiveType(propValue, propName, componentName) {
91
- var propType = typeof propValue;
92
- if (propType === 'object' && Array.isArray(propValue)) {
93
- propType = 'array';
142
+ function validatePrimitiveType(
143
+ shouldWarn, propValue, propName, componentName, location
144
+ ) {
145
+ var propType = getPropType(propValue);
146
+ var isValid = propType === expectedType;
147
+ if (shouldWarn) {
148
+ ("production" !== process.env.NODE_ENV ? warning(
149
+ isValid,
150
+ 'Invalid %s `%s` of type `%s` supplied to `%s`, expected `%s`.',
151
+ ReactPropTypeLocationNames[location],
152
+ propName,
153
+ propType,
154
+ componentName,
155
+ expectedType
156
+ ) : null);
94
157
  }
95
- ("production" !== process.env.NODE_ENV ? invariant(
96
- propType === expectedType,
97
- 'Invalid prop `%s` of type `%s` supplied to `%s`, expected `%s`.',
98
- propName,
99
- propType,
100
- componentName,
101
- expectedType
102
- ) : invariant(propType === expectedType));
158
+ return isValid;
103
159
  }
104
160
  return createChainableTypeChecker(validatePrimitiveType);
105
161
  }
106
162
 
107
163
  function createEnumTypeChecker(expectedValues) {
108
164
  var expectedEnum = createObjectFrom(expectedValues);
109
- function validateEnumType(propValue, propName, componentName) {
110
- ("production" !== process.env.NODE_ENV ? invariant(
111
- expectedEnum[propValue],
112
- 'Invalid prop `%s` supplied to `%s`, expected one of %s.',
113
- propName,
114
- componentName,
115
- JSON.stringify(Object.keys(expectedEnum))
116
- ) : invariant(expectedEnum[propValue]));
165
+ function validateEnumType(
166
+ shouldWarn, propValue, propName, componentName, location
167
+ ) {
168
+ var isValid = expectedEnum[propValue];
169
+ if (shouldWarn) {
170
+ ("production" !== process.env.NODE_ENV ? warning(
171
+ isValid,
172
+ 'Invalid %s `%s` supplied to `%s`, expected one of %s.',
173
+ ReactPropTypeLocationNames[location],
174
+ propName,
175
+ componentName,
176
+ JSON.stringify(Object.keys(expectedEnum))
177
+ ) : null);
178
+ }
179
+ return isValid;
117
180
  }
118
181
  return createChainableTypeChecker(validateEnumType);
119
182
  }
120
183
 
184
+ function createShapeTypeChecker(shapeTypes) {
185
+ function validateShapeType(
186
+ shouldWarn, propValue, propName, componentName, location
187
+ ) {
188
+ var propType = getPropType(propValue);
189
+ var isValid = propType === 'object';
190
+ if (isValid) {
191
+ for (var key in shapeTypes) {
192
+ var checker = shapeTypes[key];
193
+ if (checker && !checker(propValue, key, componentName, location)) {
194
+ return false;
195
+ }
196
+ }
197
+ }
198
+ if (shouldWarn) {
199
+ ("production" !== process.env.NODE_ENV ? warning(
200
+ isValid,
201
+ 'Invalid %s `%s` of type `%s` supplied to `%s`, expected `object`.',
202
+ ReactPropTypeLocationNames[location],
203
+ propName,
204
+ propType,
205
+ componentName
206
+ ) : null);
207
+ }
208
+ return isValid;
209
+ }
210
+ return createChainableTypeChecker(validateShapeType);
211
+ }
212
+
121
213
  function createInstanceTypeChecker(expectedClass) {
122
- function validateInstanceType(propValue, propName, componentName) {
123
- ("production" !== process.env.NODE_ENV ? invariant(
124
- propValue instanceof expectedClass,
125
- 'Invalid prop `%s` supplied to `%s`, expected instance of `%s`.',
126
- propName,
127
- componentName,
128
- expectedClass.name || ANONYMOUS
129
- ) : invariant(propValue instanceof expectedClass));
214
+ function validateInstanceType(
215
+ shouldWarn, propValue, propName, componentName, location
216
+ ) {
217
+ var isValid = propValue instanceof expectedClass;
218
+ if (shouldWarn) {
219
+ ("production" !== process.env.NODE_ENV ? warning(
220
+ isValid,
221
+ 'Invalid %s `%s` supplied to `%s`, expected instance of `%s`.',
222
+ ReactPropTypeLocationNames[location],
223
+ propName,
224
+ componentName,
225
+ expectedClass.name || ANONYMOUS
226
+ ) : null);
227
+ }
228
+ return isValid;
130
229
  }
131
230
  return createChainableTypeChecker(validateInstanceType);
132
231
  }
133
232
 
233
+ function createArrayOfTypeChecker(propTypeChecker) {
234
+ function validateArrayType(
235
+ shouldWarn, propValue, propName, componentName, location
236
+ ) {
237
+ var isValid = Array.isArray(propValue);
238
+ if (isValid) {
239
+ for (var i = 0; i < propValue.length; i++) {
240
+ if (!propTypeChecker(propValue, i, componentName, location)) {
241
+ return false;
242
+ }
243
+ }
244
+ }
245
+ if (shouldWarn) {
246
+ ("production" !== process.env.NODE_ENV ? warning(
247
+ isValid,
248
+ 'Invalid %s `%s` supplied to `%s`, expected an array.',
249
+ ReactPropTypeLocationNames[location],
250
+ propName,
251
+ componentName
252
+ ) : null);
253
+ }
254
+ return isValid;
255
+ }
256
+ return createChainableTypeChecker(validateArrayType);
257
+ }
258
+
259
+ function createRenderableTypeChecker() {
260
+ function validateRenderableType(
261
+ shouldWarn, propValue, propName, componentName, location
262
+ ) {
263
+ var isValid = isRenderable(propValue);
264
+ if (shouldWarn) {
265
+ ("production" !== process.env.NODE_ENV ? warning(
266
+ isValid,
267
+ 'Invalid %s `%s` supplied to `%s`, expected a renderable prop.',
268
+ ReactPropTypeLocationNames[location],
269
+ propName,
270
+ componentName
271
+ ) : null);
272
+ }
273
+ return isValid;
274
+ }
275
+ return createChainableTypeChecker(validateRenderableType);
276
+ }
277
+
278
+ function createComponentTypeChecker() {
279
+ function validateComponentType(
280
+ shouldWarn, propValue, propName, componentName, location
281
+ ) {
282
+ var isValid = ReactComponent.isValidComponent(propValue);
283
+ if (shouldWarn) {
284
+ ("production" !== process.env.NODE_ENV ? warning(
285
+ isValid,
286
+ 'Invalid %s `%s` supplied to `%s`, expected a React component.',
287
+ ReactPropTypeLocationNames[location],
288
+ propName,
289
+ componentName
290
+ ) : null);
291
+ }
292
+ return isValid;
293
+ }
294
+ return createChainableTypeChecker(validateComponentType);
295
+ }
296
+
297
+ function createUnionTypeChecker(arrayOfValidators) {
298
+ return function(props, propName, componentName, location) {
299
+ var isValid = false;
300
+ for (var ii = 0; ii < arrayOfValidators.length; ii++) {
301
+ var validate = arrayOfValidators[ii];
302
+ if (typeof validate.weak === 'function') {
303
+ validate = validate.weak;
304
+ }
305
+ if (validate(props, propName, componentName, location)) {
306
+ isValid = true;
307
+ break;
308
+ }
309
+ }
310
+ ("production" !== process.env.NODE_ENV ? warning(
311
+ isValid,
312
+ 'Invalid %s `%s` supplied to `%s`.',
313
+ ReactPropTypeLocationNames[location],
314
+ propName,
315
+ componentName || ANONYMOUS
316
+ ) : null);
317
+ return isValid;
318
+ };
319
+ }
320
+
134
321
  function createChainableTypeChecker(validate) {
135
- function createTypeChecker(isRequired) {
136
- function checkType(props, propName, componentName) {
137
- var propValue = props[propName];
138
- if (propValue != null) {
139
- // Only validate if there is a value to check.
140
- validate(propValue, propName, componentName || ANONYMOUS);
141
- } else {
142
- ("production" !== process.env.NODE_ENV ? invariant(
143
- !isRequired,
144
- 'Required prop `%s` was not specified in `%s`.',
322
+ function checkType(
323
+ isRequired, shouldWarn, props, propName, componentName, location
324
+ ) {
325
+ var propValue = props[propName];
326
+ if (propValue != null) {
327
+ // Only validate if there is a value to check.
328
+ return validate(
329
+ shouldWarn,
330
+ propValue,
331
+ propName,
332
+ componentName || ANONYMOUS,
333
+ location
334
+ );
335
+ } else {
336
+ var isValid = !isRequired;
337
+ if (shouldWarn) {
338
+ ("production" !== process.env.NODE_ENV ? warning(
339
+ isValid,
340
+ 'Required %s `%s` was not specified in `%s`.',
341
+ ReactPropTypeLocationNames[location],
145
342
  propName,
146
343
  componentName || ANONYMOUS
147
- ) : invariant(!isRequired));
344
+ ) : null);
148
345
  }
346
+ return isValid;
149
347
  }
150
- if (!isRequired) {
151
- checkType.isRequired = createTypeChecker(true);
152
- }
153
- return checkType;
154
348
  }
155
- return createTypeChecker(false);
349
+
350
+ var checker = checkType.bind(null, false, true);
351
+ checker.weak = checkType.bind(null, false, false);
352
+ checker.isRequired = checkType.bind(null, true, true);
353
+ checker.weak.isRequired = checkType.bind(null, true, false);
354
+ checker.isRequired.weak = checker.weak.isRequired;
355
+
356
+ return checker;
156
357
  }
157
358
 
158
359
  module.exports = Props;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Copyright 2013-2014 Facebook, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ * @providesModule ReactPutListenerQueue
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var PooledClass = require("./PooledClass");
22
+ var ReactEventEmitter = require("./ReactEventEmitter");
23
+
24
+ var mixInto = require("./mixInto");
25
+
26
+ function ReactPutListenerQueue() {
27
+ this.listenersToPut = [];
28
+ }
29
+
30
+ mixInto(ReactPutListenerQueue, {
31
+ enqueuePutListener: function(rootNodeID, propKey, propValue) {
32
+ this.listenersToPut.push({
33
+ rootNodeID: rootNodeID,
34
+ propKey: propKey,
35
+ propValue: propValue
36
+ });
37
+ },
38
+
39
+ putListeners: function() {
40
+ for (var i = 0; i < this.listenersToPut.length; i++) {
41
+ var listenerToPut = this.listenersToPut[i];
42
+ ReactEventEmitter.putListener(
43
+ listenerToPut.rootNodeID,
44
+ listenerToPut.propKey,
45
+ listenerToPut.propValue
46
+ );
47
+ }
48
+ },
49
+
50
+ reset: function() {
51
+ this.listenersToPut.length = 0;
52
+ },
53
+
54
+ destructor: function() {
55
+ this.reset();
56
+ }
57
+ });
58
+
59
+ PooledClass.addPoolingTo(ReactPutListenerQueue);
60
+
61
+ module.exports = ReactPutListenerQueue;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright 2013 Facebook, Inc.
2
+ * Copyright 2013-2014 Facebook, Inc.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -19,11 +19,11 @@
19
19
 
20
20
  "use strict";
21
21
 
22
- var ExecutionEnvironment = require("./ExecutionEnvironment");
23
22
  var PooledClass = require("./PooledClass");
24
23
  var ReactEventEmitter = require("./ReactEventEmitter");
25
24
  var ReactInputSelection = require("./ReactInputSelection");
26
25
  var ReactMountReady = require("./ReactMountReady");
26
+ var ReactPutListenerQueue = require("./ReactPutListenerQueue");
27
27
  var Transaction = require("./Transaction");
28
28
 
29
29
  var mixInto = require("./mixInto");
@@ -88,12 +88,23 @@ var ON_DOM_READY_QUEUEING = {
88
88
  }
89
89
  };
90
90
 
91
+ var PUT_LISTENER_QUEUEING = {
92
+ initialize: function() {
93
+ this.putListenerQueue.reset();
94
+ },
95
+
96
+ close: function() {
97
+ this.putListenerQueue.putListeners();
98
+ }
99
+ };
100
+
91
101
  /**
92
102
  * Executed within the scope of the `Transaction` instance. Consider these as
93
103
  * being member methods, but with an implied ordering while being isolated from
94
104
  * each other.
95
105
  */
96
106
  var TRANSACTION_WRAPPERS = [
107
+ PUT_LISTENER_QUEUEING,
97
108
  SELECTION_RESTORATION,
98
109
  EVENT_SUPPRESSION,
99
110
  ON_DOM_READY_QUEUEING
@@ -115,7 +126,14 @@ var TRANSACTION_WRAPPERS = [
115
126
  */
116
127
  function ReactReconcileTransaction() {
117
128
  this.reinitializeTransaction();
129
+ // Only server-side rendering really needs this option (see
130
+ // `ReactServerRendering`), but server-side uses
131
+ // `ReactServerRenderingTransaction` instead. This option is here so that it's
132
+ // accessible and defaults to false when `ReactDOMComponent` and
133
+ // `ReactTextComponent` checks it in `mountComponent`.`
134
+ this.renderToStaticMarkup = false;
118
135
  this.reactMountReady = ReactMountReady.getPooled(null);
136
+ this.putListenerQueue = ReactPutListenerQueue.getPooled();
119
137
  }
120
138
 
121
139
  var Mixin = {
@@ -127,11 +145,7 @@ var Mixin = {
127
145
  * TODO: convert to array<TransactionWrapper>
128
146
  */
129
147
  getTransactionWrappers: function() {
130
- if (ExecutionEnvironment.canUseDOM) {
131
- return TRANSACTION_WRAPPERS;
132
- } else {
133
- return [];
134
- }
148
+ return TRANSACTION_WRAPPERS;
135
149
  },
136
150
 
137
151
  /**
@@ -142,6 +156,10 @@ var Mixin = {
142
156
  return this.reactMountReady;
143
157
  },
144
158
 
159
+ getPutListenerQueue: function() {
160
+ return this.putListenerQueue;
161
+ },
162
+
145
163
  /**
146
164
  * `PooledClass` looks for this, and will invoke this before allowing this
147
165
  * instance to be resused.
@@ -149,6 +167,9 @@ var Mixin = {
149
167
  destructor: function() {
150
168
  ReactMountReady.release(this.reactMountReady);
151
169
  this.reactMountReady = null;
170
+
171
+ ReactPutListenerQueue.release(this.putListenerQueue);
172
+ this.putListenerQueue = null;
152
173
  }
153
174
  };
154
175