react 0.7.0 → 0.9.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 (217) hide show
  1. package/README.md +10 -231
  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 +203 -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 +293 -0
  20. package/lib/EventPluginRegistry.js +281 -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 +339 -0
  55. package/lib/ReactEventEmitterMixin.js +57 -0
  56. package/lib/ReactEventTopLevelCallback.js +149 -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/ReactTestUtils.js +394 -0
  78. package/lib/ReactTextComponent.js +99 -0
  79. package/lib/ReactTransitionChildMapping.js +106 -0
  80. package/lib/ReactTransitionEvents.js +97 -0
  81. package/lib/ReactTransitionGroup.js +187 -0
  82. package/lib/ReactUpdates.js +148 -0
  83. package/lib/ReactWithAddons.js +51 -0
  84. package/lib/SelectEventPlugin.js +200 -0
  85. package/lib/ServerReactRootIndex.js +36 -0
  86. package/lib/SimpleEventPlugin.js +413 -0
  87. package/lib/SyntheticClipboardEvent.js +51 -0
  88. package/lib/SyntheticCompositionEvent.js +51 -0
  89. package/lib/SyntheticDragEvent.js +44 -0
  90. package/lib/SyntheticEvent.js +164 -0
  91. package/lib/SyntheticFocusEvent.js +44 -0
  92. package/lib/SyntheticKeyboardEvent.js +58 -0
  93. package/lib/SyntheticMouseEvent.js +85 -0
  94. package/lib/SyntheticTouchEvent.js +50 -0
  95. package/lib/SyntheticUIEvent.js +45 -0
  96. package/lib/SyntheticWheelEvent.js +66 -0
  97. package/lib/Transaction.js +276 -0
  98. package/lib/ViewportMetrics.js +37 -0
  99. package/lib/accumulate.js +54 -0
  100. package/lib/adler32.js +39 -0
  101. package/lib/cloneWithProps.js +59 -0
  102. package/lib/containsNode.js +49 -0
  103. package/lib/copyProperties.js +54 -0
  104. package/lib/createArrayFrom.js +91 -0
  105. package/lib/createFullPageComponent.js +63 -0
  106. package/lib/createNodesFromMarkup.js +93 -0
  107. package/lib/createObjectFrom.js +61 -0
  108. package/lib/cx.js +44 -0
  109. package/lib/dangerousStyleValue.js +57 -0
  110. package/lib/emptyFunction.js +43 -0
  111. package/lib/escapeTextForBrowser.js +47 -0
  112. package/lib/flattenChildren.js +57 -0
  113. package/lib/forEachAccumulated.js +36 -0
  114. package/lib/getActiveElement.js +34 -0
  115. package/lib/getEventKey.js +85 -0
  116. package/lib/getEventTarget.js +36 -0
  117. package/lib/getMarkupWrap.js +118 -0
  118. package/lib/getNodeForCharacterOffset.js +80 -0
  119. package/lib/getReactRootElementInContainer.js +40 -0
  120. package/lib/getTextContentAccessor.js +42 -0
  121. package/lib/getUnboundedScrollPosition.js +45 -0
  122. package/lib/hyphenate.js +35 -0
  123. package/lib/invariant.js +62 -0
  124. package/lib/isEventSupported.js +70 -0
  125. package/lib/isNode.js +33 -0
  126. package/lib/isTextInputElement.js +49 -0
  127. package/lib/isTextNode.js +30 -0
  128. package/lib/joinClasses.js +44 -0
  129. package/lib/keyMirror.js +58 -0
  130. package/lib/keyOf.js +41 -0
  131. package/lib/memoizeStringOnly.js +39 -0
  132. package/lib/merge.js +37 -0
  133. package/lib/mergeHelpers.js +136 -0
  134. package/lib/mergeInto.js +45 -0
  135. package/lib/mixInto.js +34 -0
  136. package/lib/objMap.js +47 -0
  137. package/lib/objMapKeyVal.js +47 -0
  138. package/lib/onlyChild.js +43 -0
  139. package/lib/performanceNow.js +42 -0
  140. package/lib/shallowEqual.js +49 -0
  141. package/lib/shouldUpdateReactComponent.js +58 -0
  142. package/lib/toArray.js +75 -0
  143. package/lib/traverseAllChildren.js +189 -0
  144. package/lib/warning.js +48 -0
  145. package/package.json +33 -21
  146. package/react.js +1 -0
  147. package/.npmignore +0 -7
  148. package/.travis.yml +0 -7
  149. package/Jakefile.js +0 -39
  150. package/LICENSE +0 -19
  151. package/browser-test/dist.html +0 -90
  152. package/browser-test/index.html +0 -86
  153. package/browser-test/min.html +0 -90
  154. package/dist/react.js +0 -3141
  155. package/dist/react.min.js +0 -22
  156. package/doc/advanced.md +0 -174
  157. package/doc/color-def.graffle +0 -938
  158. package/doc/color-def.png +0 -0
  159. package/doc/simple.dot +0 -25
  160. package/doc/simple.png +0 -0
  161. package/examples/longer-example.js +0 -41
  162. package/examples/simple.js +0 -45
  163. package/examples/using-ast-directly.js +0 -30
  164. package/examples/using-events1.js +0 -79
  165. package/examples/using-log-events.js +0 -43
  166. package/lib/base-task.js +0 -120
  167. package/lib/cb-task.js +0 -84
  168. package/lib/core.js +0 -138
  169. package/lib/dsl.js +0 -138
  170. package/lib/error.js +0 -55
  171. package/lib/event-collector.js +0 -81
  172. package/lib/event-manager.js +0 -89
  173. package/lib/eventemitter.js +0 -20
  174. package/lib/finalcb-first-task.js +0 -68
  175. package/lib/finalcb-task.js +0 -65
  176. package/lib/id.js +0 -22
  177. package/lib/input-parser.js +0 -56
  178. package/lib/log-events.js +0 -101
  179. package/lib/parse.js +0 -41
  180. package/lib/promise-resolve.js +0 -50
  181. package/lib/promise-task.js +0 -93
  182. package/lib/react.js +0 -59
  183. package/lib/ret-task.js +0 -71
  184. package/lib/sprintf.js +0 -18
  185. package/lib/status.js +0 -14
  186. package/lib/task.js +0 -251
  187. package/lib/track-tasks.js +0 -74
  188. package/lib/validate.js +0 -159
  189. package/lib/vcon.js +0 -113
  190. package/lib/when-task.js +0 -84
  191. package/src/dist.build.requirejs +0 -20
  192. package/test/ast.mocha.js +0 -136
  193. package/test/cb-task.mocha.js +0 -220
  194. package/test/core-deferred.mocha.js +0 -143
  195. package/test/core-when.mocha.js +0 -96
  196. package/test/core.mocha.js +0 -589
  197. package/test/dsl.mocha.js +0 -352
  198. package/test/event-manager.mocha.js +0 -119
  199. package/test/exec-options.mocha.js +0 -48
  200. package/test/finalcb-task.mocha.js +0 -58
  201. package/test/input-parser.mocha.js +0 -86
  202. package/test/log-events.mocha.js +0 -88
  203. package/test/mocha.opts +0 -2
  204. package/test/module-use.mocha.js +0 -164
  205. package/test/promise-auto-resolve.mocha.js +0 -68
  206. package/test/ret-task.mocha.js +0 -220
  207. package/test/task.mocha.js +0 -42
  208. package/test/validate-cb-task.mocha.js +0 -100
  209. package/test/validate-ret-task.mocha.js +0 -110
  210. package/test/validate.mocha.js +0 -324
  211. package/test/vcon.mocha.js +0 -193
  212. package/vendor/chai/chai.js +0 -4251
  213. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  214. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  215. package/vendor/node/util.js +0 -531
  216. package/vendor/requirejs/require.js +0 -2045
  217. package/vendor/requirejs/require.min.js +0 -36
@@ -0,0 +1,38 @@
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 ReactMultiChildUpdateTypes
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var keyMirror = require("./keyMirror");
22
+
23
+ /**
24
+ * When a component's children are updated, a series of update configuration
25
+ * objects are created in order to batch and serialize the required changes.
26
+ *
27
+ * Enumerates all the possible types of update configurations.
28
+ *
29
+ * @internal
30
+ */
31
+ var ReactMultiChildUpdateTypes = keyMirror({
32
+ INSERT_MARKUP: null,
33
+ MOVE_EXISTING: null,
34
+ REMOVE_NODE: null,
35
+ TEXT_CONTENT: null
36
+ });
37
+
38
+ module.exports = ReactMultiChildUpdateTypes;
@@ -0,0 +1,154 @@
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 ReactOwner
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var invariant = require("./invariant");
22
+
23
+ /**
24
+ * ReactOwners are capable of storing references to owned components.
25
+ *
26
+ * All components are capable of //being// referenced by owner components, but
27
+ * only ReactOwner components are capable of //referencing// owned components.
28
+ * The named reference is known as a "ref".
29
+ *
30
+ * Refs are available when mounted and updated during reconciliation.
31
+ *
32
+ * var MyComponent = React.createClass({
33
+ * render: function() {
34
+ * return (
35
+ * <div onClick={this.handleClick}>
36
+ * <CustomComponent ref="custom" />
37
+ * </div>
38
+ * );
39
+ * },
40
+ * handleClick: function() {
41
+ * this.refs.custom.handleClick();
42
+ * },
43
+ * componentDidMount: function() {
44
+ * this.refs.custom.initialize();
45
+ * }
46
+ * });
47
+ *
48
+ * Refs should rarely be used. When refs are used, they should only be done to
49
+ * control data that is not handled by React's data flow.
50
+ *
51
+ * @class ReactOwner
52
+ */
53
+ var ReactOwner = {
54
+
55
+ /**
56
+ * @param {?object} object
57
+ * @return {boolean} True if `object` is a valid owner.
58
+ * @final
59
+ */
60
+ isValidOwner: function(object) {
61
+ return !!(
62
+ object &&
63
+ typeof object.attachRef === 'function' &&
64
+ typeof object.detachRef === 'function'
65
+ );
66
+ },
67
+
68
+ /**
69
+ * Adds a component by ref to an owner component.
70
+ *
71
+ * @param {ReactComponent} component Component to reference.
72
+ * @param {string} ref Name by which to refer to the component.
73
+ * @param {ReactOwner} owner Component on which to record the ref.
74
+ * @final
75
+ * @internal
76
+ */
77
+ addComponentAsRefTo: function(component, ref, owner) {
78
+ ("production" !== process.env.NODE_ENV ? invariant(
79
+ ReactOwner.isValidOwner(owner),
80
+ 'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' +
81
+ 'usually means that you\'re trying to add a ref to a component that ' +
82
+ 'doesn\'t have an owner (that is, was not created inside of another ' +
83
+ 'component\'s `render` method). Try rendering this component inside of ' +
84
+ 'a new top-level component which will hold the ref.'
85
+ ) : invariant(ReactOwner.isValidOwner(owner)));
86
+ owner.attachRef(ref, component);
87
+ },
88
+
89
+ /**
90
+ * Removes a component by ref from an owner component.
91
+ *
92
+ * @param {ReactComponent} component Component to dereference.
93
+ * @param {string} ref Name of the ref to remove.
94
+ * @param {ReactOwner} owner Component on which the ref is recorded.
95
+ * @final
96
+ * @internal
97
+ */
98
+ removeComponentAsRefFrom: function(component, ref, owner) {
99
+ ("production" !== process.env.NODE_ENV ? invariant(
100
+ ReactOwner.isValidOwner(owner),
101
+ 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' +
102
+ 'usually means that you\'re trying to remove a ref to a component that ' +
103
+ 'doesn\'t have an owner (that is, was not created inside of another ' +
104
+ 'component\'s `render` method). Try rendering this component inside of ' +
105
+ 'a new top-level component which will hold the ref.'
106
+ ) : invariant(ReactOwner.isValidOwner(owner)));
107
+ // Check that `component` is still the current ref because we do not want to
108
+ // detach the ref if another component stole it.
109
+ if (owner.refs[ref] === component) {
110
+ owner.detachRef(ref);
111
+ }
112
+ },
113
+
114
+ /**
115
+ * A ReactComponent must mix this in to have refs.
116
+ *
117
+ * @lends {ReactOwner.prototype}
118
+ */
119
+ Mixin: {
120
+
121
+ /**
122
+ * Lazily allocates the refs object and stores `component` as `ref`.
123
+ *
124
+ * @param {string} ref Reference name.
125
+ * @param {component} component Component to store as `ref`.
126
+ * @final
127
+ * @private
128
+ */
129
+ attachRef: function(ref, component) {
130
+ ("production" !== process.env.NODE_ENV ? invariant(
131
+ component.isOwnedBy(this),
132
+ 'attachRef(%s, ...): Only a component\'s owner can store a ref to it.',
133
+ ref
134
+ ) : invariant(component.isOwnedBy(this)));
135
+ var refs = this.refs || (this.refs = {});
136
+ refs[ref] = component;
137
+ },
138
+
139
+ /**
140
+ * Detaches a reference name.
141
+ *
142
+ * @param {string} ref Name to dereference.
143
+ * @final
144
+ * @private
145
+ */
146
+ detachRef: function(ref) {
147
+ delete this.refs[ref];
148
+ }
149
+
150
+ }
151
+
152
+ };
153
+
154
+ module.exports = ReactOwner;
@@ -0,0 +1,85 @@
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 ReactPerf
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ /**
23
+ * ReactPerf is a general AOP system designed to measure performance. This
24
+ * module only has the hooks: see ReactDefaultPerf for the analysis tool.
25
+ */
26
+ var ReactPerf = {
27
+ /**
28
+ * Boolean to enable/disable measurement. Set to false by default to prevent
29
+ * accidental logging and perf loss.
30
+ */
31
+ enableMeasure: false,
32
+
33
+ /**
34
+ * Holds onto the measure function in use. By default, don't measure
35
+ * anything, but we'll override this if we inject a measure function.
36
+ */
37
+ storedMeasure: _noMeasure,
38
+
39
+ /**
40
+ * Use this to wrap methods you want to measure. Zero overhead in production.
41
+ *
42
+ * @param {string} objName
43
+ * @param {string} fnName
44
+ * @param {function} func
45
+ * @return {function}
46
+ */
47
+ measure: function(objName, fnName, func) {
48
+ if ("production" !== process.env.NODE_ENV) {
49
+ var measuredFunc = null;
50
+ return function() {
51
+ if (ReactPerf.enableMeasure) {
52
+ if (!measuredFunc) {
53
+ measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
54
+ }
55
+ return measuredFunc.apply(this, arguments);
56
+ }
57
+ return func.apply(this, arguments);
58
+ };
59
+ }
60
+ return func;
61
+ },
62
+
63
+ injection: {
64
+ /**
65
+ * @param {function} measure
66
+ */
67
+ injectMeasure: function(measure) {
68
+ ReactPerf.storedMeasure = measure;
69
+ }
70
+ }
71
+ };
72
+
73
+ /**
74
+ * Simply passes through the measured function, without measuring it.
75
+ *
76
+ * @param {string} objName
77
+ * @param {string} fnName
78
+ * @param {function} func
79
+ * @return {function}
80
+ */
81
+ function _noMeasure(objName, fnName, func) {
82
+ return func;
83
+ }
84
+
85
+ module.exports = ReactPerf;
@@ -0,0 +1,147 @@
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 ReactPropTransferer
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var emptyFunction = require("./emptyFunction");
22
+ var invariant = require("./invariant");
23
+ var joinClasses = require("./joinClasses");
24
+ var merge = require("./merge");
25
+
26
+ /**
27
+ * Creates a transfer strategy that will merge prop values using the supplied
28
+ * `mergeStrategy`. If a prop was previously unset, this just sets it.
29
+ *
30
+ * @param {function} mergeStrategy
31
+ * @return {function}
32
+ */
33
+ function createTransferStrategy(mergeStrategy) {
34
+ return function(props, key, value) {
35
+ if (!props.hasOwnProperty(key)) {
36
+ props[key] = value;
37
+ } else {
38
+ props[key] = mergeStrategy(props[key], value);
39
+ }
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Transfer strategies dictate how props are transferred by `transferPropsTo`.
45
+ * NOTE: if you add any more exceptions to this list you should be sure to
46
+ * update `cloneWithProps()` accordingly.
47
+ */
48
+ var TransferStrategies = {
49
+ /**
50
+ * Never transfer `children`.
51
+ */
52
+ children: emptyFunction,
53
+ /**
54
+ * Transfer the `className` prop by merging them.
55
+ */
56
+ className: createTransferStrategy(joinClasses),
57
+ /**
58
+ * Never transfer the `key` prop.
59
+ */
60
+ key: emptyFunction,
61
+ /**
62
+ * Never transfer the `ref` prop.
63
+ */
64
+ ref: emptyFunction,
65
+ /**
66
+ * Transfer the `style` prop (which is an object) by merging them.
67
+ */
68
+ style: createTransferStrategy(merge)
69
+ };
70
+
71
+ /**
72
+ * ReactPropTransferer are capable of transferring props to another component
73
+ * using a `transferPropsTo` method.
74
+ *
75
+ * @class ReactPropTransferer
76
+ */
77
+ var ReactPropTransferer = {
78
+
79
+ TransferStrategies: TransferStrategies,
80
+
81
+ /**
82
+ * Merge two props objects using TransferStrategies.
83
+ *
84
+ * @param {object} oldProps original props (they take precedence)
85
+ * @param {object} newProps new props to merge in
86
+ * @return {object} a new object containing both sets of props merged.
87
+ */
88
+ mergeProps: function(oldProps, newProps) {
89
+ var props = merge(oldProps);
90
+
91
+ for (var thisKey in newProps) {
92
+ if (!newProps.hasOwnProperty(thisKey)) {
93
+ continue;
94
+ }
95
+
96
+ var transferStrategy = TransferStrategies[thisKey];
97
+
98
+ if (transferStrategy) {
99
+ transferStrategy(props, thisKey, newProps[thisKey]);
100
+ } else if (!props.hasOwnProperty(thisKey)) {
101
+ props[thisKey] = newProps[thisKey];
102
+ }
103
+ }
104
+
105
+ return props;
106
+ },
107
+
108
+ /**
109
+ * @lends {ReactPropTransferer.prototype}
110
+ */
111
+ Mixin: {
112
+
113
+ /**
114
+ * Transfer props from this component to a target component.
115
+ *
116
+ * Props that do not have an explicit transfer strategy will be transferred
117
+ * only if the target component does not already have the prop set.
118
+ *
119
+ * This is usually used to pass down props to a returned root component.
120
+ *
121
+ * @param {ReactComponent} component Component receiving the properties.
122
+ * @return {ReactComponent} The supplied `component`.
123
+ * @final
124
+ * @protected
125
+ */
126
+ transferPropsTo: function(component) {
127
+ ("production" !== process.env.NODE_ENV ? invariant(
128
+ component._owner === this,
129
+ '%s: You can\'t call transferPropsTo() on a component that you ' +
130
+ 'don\'t own, %s. This usually means you are calling ' +
131
+ 'transferPropsTo() on a component passed in as props or children.',
132
+ this.constructor.displayName,
133
+ component.constructor.displayName
134
+ ) : invariant(component._owner === this));
135
+
136
+ component.props = ReactPropTransferer.mergeProps(
137
+ component.props,
138
+ this.props
139
+ );
140
+
141
+ return component;
142
+ }
143
+
144
+ }
145
+ };
146
+
147
+ module.exports = ReactPropTransferer;
@@ -0,0 +1,31 @@
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 ReactPropTypeLocationNames
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var ReactPropTypeLocationNames = {};
22
+
23
+ if ("production" !== process.env.NODE_ENV) {
24
+ ReactPropTypeLocationNames = {
25
+ prop: 'prop',
26
+ context: 'context',
27
+ childContext: 'child context'
28
+ };
29
+ }
30
+
31
+ module.exports = ReactPropTypeLocationNames;