react 0.6.3 → 0.9.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.
Files changed (218) hide show
  1. package/README.md +10 -222
  2. package/addons.js +1 -0
  3. package/lib/AutoFocusMixin.js +30 -0
  4. package/lib/CSSCore.js +115 -0
  5. package/lib/CSSProperty.js +121 -0
  6. package/lib/CSSPropertyOperations.js +97 -0
  7. package/lib/ChangeEventPlugin.js +387 -0
  8. package/lib/ClientReactRootIndex.js +30 -0
  9. package/lib/CompositionEventPlugin.js +260 -0
  10. package/lib/DOMChildrenOperations.js +165 -0
  11. package/lib/DOMProperty.js +268 -0
  12. package/lib/DOMPropertyOperations.js +181 -0
  13. package/lib/Danger.js +187 -0
  14. package/lib/DefaultDOMPropertyConfig.js +197 -0
  15. package/lib/DefaultEventPluginOrder.js +44 -0
  16. package/lib/EnterLeaveEventPlugin.js +145 -0
  17. package/lib/EventConstants.js +76 -0
  18. package/lib/EventListener.js +69 -0
  19. package/lib/EventPluginHub.js +291 -0
  20. package/lib/EventPluginRegistry.js +260 -0
  21. package/lib/EventPluginUtils.js +214 -0
  22. package/lib/EventPropagators.js +143 -0
  23. package/lib/ExecutionEnvironment.js +44 -0
  24. package/lib/LinkedStateMixin.js +46 -0
  25. package/lib/LinkedValueUtils.js +161 -0
  26. package/lib/MobileSafariClickEventPlugin.js +63 -0
  27. package/lib/PooledClass.js +119 -0
  28. package/lib/React.js +95 -0
  29. package/lib/ReactCSSTransitionGroup.js +65 -0
  30. package/lib/ReactCSSTransitionGroupChild.js +138 -0
  31. package/lib/ReactChildren.js +132 -0
  32. package/lib/ReactComponent.js +550 -0
  33. package/lib/ReactComponentBrowserEnvironment.js +158 -0
  34. package/lib/ReactComponentEnvironment.js +26 -0
  35. package/lib/ReactCompositeComponent.js +1455 -0
  36. package/lib/ReactContext.js +67 -0
  37. package/lib/ReactCurrentOwner.js +39 -0
  38. package/lib/ReactDOM.js +207 -0
  39. package/lib/ReactDOMButton.js +68 -0
  40. package/lib/ReactDOMComponent.js +399 -0
  41. package/lib/ReactDOMForm.js +59 -0
  42. package/lib/ReactDOMIDOperations.js +218 -0
  43. package/lib/ReactDOMImg.js +58 -0
  44. package/lib/ReactDOMInput.js +181 -0
  45. package/lib/ReactDOMOption.js +51 -0
  46. package/lib/ReactDOMSelect.js +179 -0
  47. package/lib/ReactDOMSelection.js +189 -0
  48. package/lib/ReactDOMTextarea.js +140 -0
  49. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  50. package/lib/ReactDefaultInjection.js +115 -0
  51. package/lib/ReactDefaultPerf.js +244 -0
  52. package/lib/ReactDefaultPerfAnalysis.js +199 -0
  53. package/lib/ReactErrorUtils.js +37 -0
  54. package/lib/ReactEventEmitter.js +337 -0
  55. package/lib/ReactEventEmitterMixin.js +57 -0
  56. package/lib/ReactEventTopLevelCallback.js +109 -0
  57. package/lib/ReactInjection.js +39 -0
  58. package/lib/ReactInputSelection.js +140 -0
  59. package/lib/ReactInstanceHandles.js +338 -0
  60. package/lib/ReactLink.js +54 -0
  61. package/lib/ReactMarkupChecksum.js +53 -0
  62. package/lib/ReactMount.js +641 -0
  63. package/lib/ReactMountReady.js +95 -0
  64. package/lib/ReactMultiChild.js +425 -0
  65. package/lib/ReactMultiChildUpdateTypes.js +38 -0
  66. package/lib/ReactOwner.js +154 -0
  67. package/lib/ReactPerf.js +85 -0
  68. package/lib/ReactPropTransferer.js +147 -0
  69. package/lib/ReactPropTypeLocationNames.js +31 -0
  70. package/lib/ReactPropTypeLocations.js +29 -0
  71. package/lib/ReactPropTypes.js +359 -0
  72. package/lib/ReactPutListenerQueue.js +61 -0
  73. package/lib/ReactReconcileTransaction.js +181 -0
  74. package/lib/ReactRootIndex.js +36 -0
  75. package/lib/ReactServerRendering.js +59 -0
  76. package/lib/ReactStateSetters.js +111 -0
  77. package/lib/ReactTextComponent.js +99 -0
  78. package/lib/ReactTransitionChildMapping.js +106 -0
  79. package/lib/ReactTransitionEvents.js +97 -0
  80. package/lib/ReactTransitionGroup.js +187 -0
  81. package/lib/ReactUpdates.js +148 -0
  82. package/lib/ReactWithAddons.js +46 -0
  83. package/lib/SelectEventPlugin.js +200 -0
  84. package/lib/ServerReactRootIndex.js +36 -0
  85. package/lib/SimpleEventPlugin.js +413 -0
  86. package/lib/SyntheticClipboardEvent.js +51 -0
  87. package/lib/SyntheticCompositionEvent.js +51 -0
  88. package/lib/SyntheticDragEvent.js +44 -0
  89. package/lib/SyntheticEvent.js +164 -0
  90. package/lib/SyntheticFocusEvent.js +44 -0
  91. package/lib/SyntheticKeyboardEvent.js +58 -0
  92. package/lib/SyntheticMouseEvent.js +85 -0
  93. package/lib/SyntheticTouchEvent.js +50 -0
  94. package/lib/SyntheticUIEvent.js +45 -0
  95. package/lib/SyntheticWheelEvent.js +66 -0
  96. package/lib/Transaction.js +276 -0
  97. package/lib/ViewportMetrics.js +37 -0
  98. package/lib/accumulate.js +54 -0
  99. package/lib/adler32.js +39 -0
  100. package/lib/cloneWithProps.js +59 -0
  101. package/lib/containsNode.js +49 -0
  102. package/lib/copyProperties.js +54 -0
  103. package/lib/createArrayFrom.js +91 -0
  104. package/lib/createFullPageComponent.js +63 -0
  105. package/lib/createNodesFromMarkup.js +93 -0
  106. package/lib/createObjectFrom.js +61 -0
  107. package/lib/cx.js +44 -0
  108. package/lib/dangerousStyleValue.js +57 -0
  109. package/lib/emptyFunction.js +43 -0
  110. package/lib/escapeTextForBrowser.js +47 -0
  111. package/lib/flattenChildren.js +57 -0
  112. package/lib/forEachAccumulated.js +36 -0
  113. package/lib/getActiveElement.js +34 -0
  114. package/lib/getEventKey.js +85 -0
  115. package/lib/getEventTarget.js +36 -0
  116. package/lib/getMarkupWrap.js +118 -0
  117. package/lib/getNodeForCharacterOffset.js +80 -0
  118. package/lib/getReactRootElementInContainer.js +40 -0
  119. package/lib/getTextContentAccessor.js +42 -0
  120. package/lib/getUnboundedScrollPosition.js +45 -0
  121. package/lib/hyphenate.js +35 -0
  122. package/lib/invariant.js +62 -0
  123. package/lib/isEventSupported.js +70 -0
  124. package/lib/isNode.js +33 -0
  125. package/lib/isTextInputElement.js +49 -0
  126. package/lib/isTextNode.js +30 -0
  127. package/lib/joinClasses.js +44 -0
  128. package/lib/keyMirror.js +58 -0
  129. package/lib/keyOf.js +41 -0
  130. package/lib/memoizeStringOnly.js +39 -0
  131. package/lib/merge.js +37 -0
  132. package/lib/mergeHelpers.js +136 -0
  133. package/lib/mergeInto.js +45 -0
  134. package/lib/mixInto.js +34 -0
  135. package/lib/objMap.js +47 -0
  136. package/lib/objMapKeyVal.js +47 -0
  137. package/lib/onlyChild.js +43 -0
  138. package/lib/performanceNow.js +42 -0
  139. package/lib/shallowEqual.js +49 -0
  140. package/lib/shouldUpdateReactComponent.js +58 -0
  141. package/lib/toArray.js +75 -0
  142. package/lib/traverseAllChildren.js +189 -0
  143. package/lib/warning.js +40 -0
  144. package/package.json +32 -21
  145. package/react.js +1 -0
  146. package/.npmignore +0 -7
  147. package/.travis.yml +0 -5
  148. package/Jakefile.js +0 -39
  149. package/LICENSE +0 -19
  150. package/browser-test/dist.html +0 -90
  151. package/browser-test/index.html +0 -86
  152. package/browser-test/min.html +0 -90
  153. package/dist/react.js +0 -3107
  154. package/dist/react.min.js +0 -22
  155. package/doc/advanced.md +0 -174
  156. package/doc/color-def.graffle +0 -938
  157. package/doc/color-def.png +0 -0
  158. package/doc/simple.dot +0 -25
  159. package/doc/simple.png +0 -0
  160. package/examples/longer-example.js +0 -41
  161. package/examples/simple.js +0 -45
  162. package/examples/using-ast-directly.js +0 -30
  163. package/examples/using-events1.js +0 -79
  164. package/examples/using-log-events.js +0 -43
  165. package/lib/base-task.js +0 -123
  166. package/lib/cb-task.js +0 -84
  167. package/lib/core.js +0 -138
  168. package/lib/dsl.js +0 -138
  169. package/lib/error.js +0 -55
  170. package/lib/event-collector.js +0 -81
  171. package/lib/event-manager.js +0 -89
  172. package/lib/eventemitter.js +0 -20
  173. package/lib/finalcb-first-task.js +0 -68
  174. package/lib/finalcb-task.js +0 -65
  175. package/lib/id.js +0 -22
  176. package/lib/input-parser.js +0 -56
  177. package/lib/log-events.js +0 -101
  178. package/lib/parse.js +0 -41
  179. package/lib/promise-resolve.js +0 -50
  180. package/lib/promise-task.js +0 -93
  181. package/lib/react.js +0 -59
  182. package/lib/ret-task.js +0 -71
  183. package/lib/sprintf.js +0 -18
  184. package/lib/status.js +0 -14
  185. package/lib/task.js +0 -251
  186. package/lib/track-tasks.js +0 -74
  187. package/lib/validate.js +0 -159
  188. package/lib/vcon.js +0 -90
  189. package/lib/when-task.js +0 -85
  190. package/src/dist.build.requirejs +0 -20
  191. package/test/ast.mocha.js +0 -136
  192. package/test/cb-task.mocha.js +0 -220
  193. package/test/core-deferred.mocha.js +0 -143
  194. package/test/core-when.mocha.js +0 -96
  195. package/test/core.mocha.js +0 -589
  196. package/test/dsl.mocha.js +0 -350
  197. package/test/event-manager.mocha.js +0 -119
  198. package/test/exec-options.mocha.js +0 -48
  199. package/test/finalcb-task.mocha.js +0 -58
  200. package/test/input-parser.mocha.js +0 -86
  201. package/test/log-events.mocha.js +0 -88
  202. package/test/mocha.opts +0 -2
  203. package/test/module-use.mocha.js +0 -147
  204. package/test/promise-auto-resolve.mocha.js +0 -68
  205. package/test/ret-task.mocha.js +0 -220
  206. package/test/task.mocha.js +0 -42
  207. package/test/validate-cb-task.mocha.js +0 -100
  208. package/test/validate-ret-task.mocha.js +0 -110
  209. package/test/validate.mocha.js +0 -324
  210. package/test/vcon.mocha.js +0 -193
  211. package/vendor/chai/chai.js +0 -2038
  212. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  213. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  214. package/vendor/mocha/mocha.css +0 -135
  215. package/vendor/mocha/mocha.js +0 -3589
  216. package/vendor/node/util.js +0 -531
  217. package/vendor/requirejs/require.js +0 -2053
  218. package/vendor/requirejs/require.min.js +0 -33
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Copyright 2013 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 mergeInto
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ var mergeHelpers = require("./mergeHelpers");
23
+
24
+ var checkMergeObjectArg = mergeHelpers.checkMergeObjectArg;
25
+
26
+ /**
27
+ * Shallow merges two structures by mutating the first parameter.
28
+ *
29
+ * @param {object} one Object to be merged into.
30
+ * @param {?object} two Optional object with properties to merge from.
31
+ */
32
+ function mergeInto(one, two) {
33
+ checkMergeObjectArg(one);
34
+ if (two != null) {
35
+ checkMergeObjectArg(two);
36
+ for (var key in two) {
37
+ if (!two.hasOwnProperty(key)) {
38
+ continue;
39
+ }
40
+ one[key] = two[key];
41
+ }
42
+ }
43
+ }
44
+
45
+ module.exports = mergeInto;
package/lib/mixInto.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Copyright 2013 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 mixInto
17
+ */
18
+
19
+ "use strict";
20
+
21
+ /**
22
+ * Simply copies properties to the prototype.
23
+ */
24
+ var mixInto = function(constructor, methodBag) {
25
+ var methodName;
26
+ for (methodName in methodBag) {
27
+ if (!methodBag.hasOwnProperty(methodName)) {
28
+ continue;
29
+ }
30
+ constructor.prototype[methodName] = methodBag[methodName];
31
+ }
32
+ };
33
+
34
+ module.exports = mixInto;
package/lib/objMap.js ADDED
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Copyright 2013 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 objMap
17
+ */
18
+
19
+ "use strict";
20
+
21
+ /**
22
+ * For each key/value pair, invokes callback func and constructs a resulting
23
+ * object which contains, for every key in obj, values that are the result of
24
+ * of invoking the function:
25
+ *
26
+ * func(value, key, iteration)
27
+ *
28
+ * @param {?object} obj Object to map keys over
29
+ * @param {function} func Invoked for each key/val pair.
30
+ * @param {?*} context
31
+ * @return {?object} Result of mapping or null if obj is falsey
32
+ */
33
+ function objMap(obj, func, context) {
34
+ if (!obj) {
35
+ return null;
36
+ }
37
+ var i = 0;
38
+ var ret = {};
39
+ for (var key in obj) {
40
+ if (obj.hasOwnProperty(key)) {
41
+ ret[key] = func.call(context, obj[key], key, i++);
42
+ }
43
+ }
44
+ return ret;
45
+ }
46
+
47
+ module.exports = objMap;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Copyright 2013 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 objMapKeyVal
17
+ */
18
+
19
+ "use strict";
20
+
21
+ /**
22
+ * Behaves the same as `objMap` but invokes func with the key first, and value
23
+ * second. Use `objMap` unless you need this special case.
24
+ * Invokes func as:
25
+ *
26
+ * func(key, value, iteration)
27
+ *
28
+ * @param {?object} obj Object to map keys over
29
+ * @param {!function} func Invoked for each key/val pair.
30
+ * @param {?*} context
31
+ * @return {?object} Result of mapping or null if obj is falsey
32
+ */
33
+ function objMapKeyVal(obj, func, context) {
34
+ if (!obj) {
35
+ return null;
36
+ }
37
+ var i = 0;
38
+ var ret = {};
39
+ for (var key in obj) {
40
+ if (obj.hasOwnProperty(key)) {
41
+ ret[key] = func.call(context, key, obj[key], i++);
42
+ }
43
+ }
44
+ return ret;
45
+ }
46
+
47
+ module.exports = objMapKeyVal;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Copyright 2013 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 onlyChild
17
+ */
18
+ "use strict";
19
+
20
+ var ReactComponent = require("./ReactComponent");
21
+
22
+ var invariant = require("./invariant");
23
+
24
+ /**
25
+ * Returns the first child in a collection of children and verifies that there
26
+ * is only one child in the collection. The current implementation of this
27
+ * function assumes that a single child gets passed without a wrapper, but the
28
+ * purpose of this helper function is to abstract away the particular structure
29
+ * of children.
30
+ *
31
+ * @param {?object} children Child collection structure.
32
+ * @return {ReactComponent} The first and only `ReactComponent` contained in the
33
+ * structure.
34
+ */
35
+ function onlyChild(children) {
36
+ ("production" !== process.env.NODE_ENV ? invariant(
37
+ ReactComponent.isValidComponent(children),
38
+ 'onlyChild must be passed a children with exactly one child.'
39
+ ) : invariant(ReactComponent.isValidComponent(children)));
40
+ return children;
41
+ }
42
+
43
+ module.exports = onlyChild;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Copyright 2013 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 performanceNow
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ var ExecutionEnvironment = require("./ExecutionEnvironment");
23
+
24
+ /**
25
+ * Detect if we can use window.performance.now() and gracefully
26
+ * fallback to Date.now() if it doesn't exist.
27
+ * We need to support Firefox < 15 for now due to Facebook's webdriver
28
+ * infrastructure.
29
+ */
30
+ var performance = null;
31
+
32
+ if (ExecutionEnvironment.canUseDOM) {
33
+ performance = window.performance || window.webkitPerformance;
34
+ }
35
+
36
+ if (!performance || !performance.now) {
37
+ performance = Date;
38
+ }
39
+
40
+ var performanceNow = performance.now.bind(performance);
41
+
42
+ module.exports = performanceNow;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Copyright 2013 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 shallowEqual
17
+ */
18
+
19
+ "use strict";
20
+
21
+ /**
22
+ * Performs equality by iterating through keys on an object and returning
23
+ * false when any key has values which are not strictly equal between
24
+ * objA and objB. Returns true when the values of all keys are strictly equal.
25
+ *
26
+ * @return {boolean}
27
+ */
28
+ function shallowEqual(objA, objB) {
29
+ if (objA === objB) {
30
+ return true;
31
+ }
32
+ var key;
33
+ // Test for A's keys different from B.
34
+ for (key in objA) {
35
+ if (objA.hasOwnProperty(key) &&
36
+ (!objB.hasOwnProperty(key) || objA[key] !== objB[key])) {
37
+ return false;
38
+ }
39
+ }
40
+ // Test for B'a keys missing from A.
41
+ for (key in objB) {
42
+ if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {
43
+ return false;
44
+ }
45
+ }
46
+ return true;
47
+ }
48
+
49
+ module.exports = shallowEqual;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Copyright 2013 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 shouldUpdateReactComponent
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ /**
23
+ * Given a `prevComponent` and `nextComponent`, determines if `prevComponent`
24
+ * should be updated as opposed to being destroyed or replaced.
25
+ *
26
+ * @param {?object} prevComponent
27
+ * @param {?object} nextComponent
28
+ * @return {boolean} True if `prevComponent` should be updated.
29
+ * @protected
30
+ */
31
+ function shouldUpdateReactComponent(prevComponent, nextComponent) {
32
+ // TODO: Remove warning after a release.
33
+ if (prevComponent && nextComponent &&
34
+ prevComponent.constructor === nextComponent.constructor && (
35
+ (prevComponent.props && prevComponent.props.key) ===
36
+ (nextComponent.props && nextComponent.props.key)
37
+ )) {
38
+ if (prevComponent._owner === nextComponent._owner) {
39
+ return true;
40
+ } else {
41
+ if ("production" !== process.env.NODE_ENV) {
42
+ if (prevComponent.state) {
43
+ console.warn(
44
+ 'A recent change to React has been found to impact your code. ' +
45
+ 'A mounted component will now be unmounted and replaced by a ' +
46
+ 'component (of the same class) if their owners are different. ' +
47
+ 'Previously, ownership was not considered when updating.',
48
+ prevComponent,
49
+ nextComponent
50
+ );
51
+ }
52
+ }
53
+ }
54
+ }
55
+ return false;
56
+ }
57
+
58
+ module.exports = shouldUpdateReactComponent;
package/lib/toArray.js ADDED
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Copyright 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 toArray
17
+ * @typechecks
18
+ */
19
+
20
+ var invariant = require("./invariant");
21
+
22
+ /**
23
+ * Convert array-like objects to arrays.
24
+ *
25
+ * This API assumes the caller knows the contents of the data type. For less
26
+ * well defined inputs use createArrayFrom.
27
+ *
28
+ * @param {object|function} obj
29
+ * @return {array}
30
+ */
31
+ function toArray(obj) {
32
+ var length = obj.length;
33
+
34
+ // Some browse builtin objects can report typeof 'function' (e.g. NodeList in
35
+ // old versions of Safari).
36
+ ("production" !== process.env.NODE_ENV ? invariant(
37
+ !Array.isArray(obj) &&
38
+ (typeof obj === 'object' || typeof obj === 'function'),
39
+ 'toArray: Array-like object expected'
40
+ ) : invariant(!Array.isArray(obj) &&
41
+ (typeof obj === 'object' || typeof obj === 'function')));
42
+
43
+ ("production" !== process.env.NODE_ENV ? invariant(
44
+ typeof length === 'number',
45
+ 'toArray: Object needs a length property'
46
+ ) : invariant(typeof length === 'number'));
47
+
48
+ ("production" !== process.env.NODE_ENV ? invariant(
49
+ length === 0 ||
50
+ (length - 1) in obj,
51
+ 'toArray: Object should have keys for indices'
52
+ ) : invariant(length === 0 ||
53
+ (length - 1) in obj));
54
+
55
+ // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
56
+ // without method will throw during the slice call and skip straight to the
57
+ // fallback.
58
+ if (obj.hasOwnProperty) {
59
+ try {
60
+ return Array.prototype.slice.call(obj);
61
+ } catch (e) {
62
+ // IE < 9 does not support Array#slice on collections objects
63
+ }
64
+ }
65
+
66
+ // Fall back to copying key by key. This assumes all keys have a value,
67
+ // so will not preserve sparsely populated inputs.
68
+ var ret = Array(length);
69
+ for (var ii = 0; ii < length; ii++) {
70
+ ret[ii] = obj[ii];
71
+ }
72
+ return ret;
73
+ }
74
+
75
+ module.exports = toArray;