react 0.7.1 → 0.10.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 (223) hide show
  1. package/README.md +10 -231
  2. package/addons.js +1 -0
  3. package/lib/AutoFocusMixin.js +32 -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 +171 -0
  11. package/lib/DOMProperty.js +270 -0
  12. package/lib/DOMPropertyOperations.js +181 -0
  13. package/lib/Danger.js +187 -0
  14. package/lib/DefaultDOMPropertyConfig.js +196 -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 +295 -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 +160 -0
  26. package/lib/MobileSafariClickEventPlugin.js +63 -0
  27. package/lib/PooledClass.js +119 -0
  28. package/lib/React.js +97 -0
  29. package/lib/ReactBrowserComponentMixin.js +42 -0
  30. package/lib/ReactCSSTransitionGroup.js +65 -0
  31. package/lib/ReactCSSTransitionGroupChild.js +138 -0
  32. package/lib/ReactChildren.js +132 -0
  33. package/lib/ReactComponent.js +595 -0
  34. package/lib/ReactComponentBrowserEnvironment.js +124 -0
  35. package/lib/ReactCompositeComponent.js +1587 -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 +69 -0
  40. package/lib/ReactDOMComponent.js +416 -0
  41. package/lib/ReactDOMForm.js +62 -0
  42. package/lib/ReactDOMIDOperations.js +218 -0
  43. package/lib/ReactDOMImg.js +61 -0
  44. package/lib/ReactDOMInput.js +182 -0
  45. package/lib/ReactDOMOption.js +55 -0
  46. package/lib/ReactDOMSelect.js +180 -0
  47. package/lib/ReactDOMSelection.js +189 -0
  48. package/lib/ReactDOMTextarea.js +144 -0
  49. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  50. package/lib/ReactDefaultInjection.js +125 -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 +43 -0
  58. package/lib/ReactInputSelection.js +141 -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 +649 -0
  63. package/lib/ReactMountReady.js +95 -0
  64. package/lib/ReactMultiChild.js +432 -0
  65. package/lib/ReactMultiChildUpdateTypes.js +38 -0
  66. package/lib/ReactOwner.js +159 -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 +182 -0
  74. package/lib/ReactRootIndex.js +36 -0
  75. package/lib/ReactServerRendering.js +89 -0
  76. package/lib/ReactServerRenderingTransaction.js +116 -0
  77. package/lib/ReactStateSetters.js +111 -0
  78. package/lib/ReactTestUtils.js +394 -0
  79. package/lib/ReactTextComponent.js +121 -0
  80. package/lib/ReactTransitionChildMapping.js +106 -0
  81. package/lib/ReactTransitionEvents.js +97 -0
  82. package/lib/ReactTransitionGroup.js +187 -0
  83. package/lib/ReactUpdates.js +148 -0
  84. package/lib/ReactWithAddons.js +53 -0
  85. package/lib/SelectEventPlugin.js +200 -0
  86. package/lib/ServerReactRootIndex.js +36 -0
  87. package/lib/SimpleEventPlugin.js +413 -0
  88. package/lib/SyntheticClipboardEvent.js +51 -0
  89. package/lib/SyntheticCompositionEvent.js +51 -0
  90. package/lib/SyntheticDragEvent.js +44 -0
  91. package/lib/SyntheticEvent.js +164 -0
  92. package/lib/SyntheticFocusEvent.js +44 -0
  93. package/lib/SyntheticKeyboardEvent.js +58 -0
  94. package/lib/SyntheticMouseEvent.js +85 -0
  95. package/lib/SyntheticTouchEvent.js +50 -0
  96. package/lib/SyntheticUIEvent.js +45 -0
  97. package/lib/SyntheticWheelEvent.js +66 -0
  98. package/lib/Transaction.js +276 -0
  99. package/lib/ViewportMetrics.js +37 -0
  100. package/lib/accumulate.js +54 -0
  101. package/lib/adler32.js +39 -0
  102. package/lib/cloneWithProps.js +59 -0
  103. package/lib/containsNode.js +49 -0
  104. package/lib/copyProperties.js +54 -0
  105. package/lib/createArrayFrom.js +91 -0
  106. package/lib/createFullPageComponent.js +63 -0
  107. package/lib/createNodesFromMarkup.js +93 -0
  108. package/lib/createObjectFrom.js +61 -0
  109. package/lib/cx.js +44 -0
  110. package/lib/dangerousStyleValue.js +57 -0
  111. package/lib/emptyFunction.js +43 -0
  112. package/lib/emptyObject.js +27 -0
  113. package/lib/escapeTextForBrowser.js +47 -0
  114. package/lib/flattenChildren.js +57 -0
  115. package/lib/focusNode.js +33 -0
  116. package/lib/forEachAccumulated.js +36 -0
  117. package/lib/getActiveElement.js +34 -0
  118. package/lib/getEventKey.js +85 -0
  119. package/lib/getEventTarget.js +36 -0
  120. package/lib/getMarkupWrap.js +118 -0
  121. package/lib/getNodeForCharacterOffset.js +80 -0
  122. package/lib/getReactRootElementInContainer.js +40 -0
  123. package/lib/getTextContentAccessor.js +42 -0
  124. package/lib/getUnboundedScrollPosition.js +45 -0
  125. package/lib/hyphenate.js +35 -0
  126. package/lib/instantiateReactComponent.js +70 -0
  127. package/lib/invariant.js +62 -0
  128. package/lib/isEventSupported.js +70 -0
  129. package/lib/isNode.js +33 -0
  130. package/lib/isTextInputElement.js +49 -0
  131. package/lib/isTextNode.js +30 -0
  132. package/lib/joinClasses.js +44 -0
  133. package/lib/keyMirror.js +58 -0
  134. package/lib/keyOf.js +41 -0
  135. package/lib/memoizeStringOnly.js +39 -0
  136. package/lib/merge.js +37 -0
  137. package/lib/mergeHelpers.js +136 -0
  138. package/lib/mergeInto.js +45 -0
  139. package/lib/mixInto.js +34 -0
  140. package/lib/monitorCodeUse.js +37 -0
  141. package/lib/objMap.js +47 -0
  142. package/lib/objMapKeyVal.js +47 -0
  143. package/lib/onlyChild.js +43 -0
  144. package/lib/performanceNow.js +42 -0
  145. package/lib/shallowEqual.js +49 -0
  146. package/lib/shouldUpdateReactComponent.js +61 -0
  147. package/lib/toArray.js +75 -0
  148. package/lib/traverseAllChildren.js +190 -0
  149. package/lib/update.js +159 -0
  150. package/lib/warning.js +48 -0
  151. package/package.json +33 -31
  152. package/react.js +1 -0
  153. package/.npmignore +0 -7
  154. package/.travis.yml +0 -7
  155. package/Jakefile.js +0 -39
  156. package/LICENSE +0 -19
  157. package/browser-test/dist.html +0 -90
  158. package/browser-test/index.html +0 -86
  159. package/browser-test/min.html +0 -90
  160. package/dist/react.js +0 -3141
  161. package/dist/react.min.js +0 -22
  162. package/doc/advanced.md +0 -175
  163. package/doc/color-def.graffle +0 -938
  164. package/doc/color-def.png +0 -0
  165. package/doc/simple.dot +0 -25
  166. package/doc/simple.png +0 -0
  167. package/examples/longer-example.js +0 -41
  168. package/examples/simple.js +0 -45
  169. package/examples/using-ast-directly.js +0 -30
  170. package/examples/using-events1.js +0 -79
  171. package/examples/using-log-events.js +0 -43
  172. package/lib/base-task.js +0 -120
  173. package/lib/cb-task.js +0 -84
  174. package/lib/core.js +0 -138
  175. package/lib/dsl.js +0 -138
  176. package/lib/error.js +0 -55
  177. package/lib/event-collector.js +0 -81
  178. package/lib/event-manager.js +0 -89
  179. package/lib/eventemitter.js +0 -20
  180. package/lib/finalcb-first-task.js +0 -68
  181. package/lib/finalcb-task.js +0 -65
  182. package/lib/id.js +0 -22
  183. package/lib/input-parser.js +0 -56
  184. package/lib/log-events.js +0 -101
  185. package/lib/parse.js +0 -41
  186. package/lib/promise-resolve.js +0 -50
  187. package/lib/promise-task.js +0 -93
  188. package/lib/react.js +0 -59
  189. package/lib/ret-task.js +0 -71
  190. package/lib/sprintf.js +0 -18
  191. package/lib/status.js +0 -14
  192. package/lib/task.js +0 -251
  193. package/lib/track-tasks.js +0 -74
  194. package/lib/validate.js +0 -159
  195. package/lib/vcon.js +0 -113
  196. package/lib/when-task.js +0 -84
  197. package/src/dist.build.requirejs +0 -20
  198. package/test/ast.mocha.js +0 -136
  199. package/test/cb-task.mocha.js +0 -220
  200. package/test/core-deferred.mocha.js +0 -143
  201. package/test/core-when.mocha.js +0 -96
  202. package/test/core.mocha.js +0 -589
  203. package/test/dsl.mocha.js +0 -352
  204. package/test/event-manager.mocha.js +0 -119
  205. package/test/exec-options.mocha.js +0 -48
  206. package/test/finalcb-task.mocha.js +0 -58
  207. package/test/input-parser.mocha.js +0 -86
  208. package/test/log-events.mocha.js +0 -88
  209. package/test/mocha.opts +0 -2
  210. package/test/module-use.mocha.js +0 -164
  211. package/test/promise-auto-resolve.mocha.js +0 -68
  212. package/test/ret-task.mocha.js +0 -220
  213. package/test/task.mocha.js +0 -42
  214. package/test/validate-cb-task.mocha.js +0 -100
  215. package/test/validate-ret-task.mocha.js +0 -110
  216. package/test/validate.mocha.js +0 -324
  217. package/test/vcon.mocha.js +0 -193
  218. package/vendor/chai/chai.js +0 -4251
  219. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  220. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  221. package/vendor/node/util.js +0 -531
  222. package/vendor/requirejs/require.js +0 -2045
  223. 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,159 @@
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 emptyObject = require("./emptyObject");
22
+ var invariant = require("./invariant");
23
+
24
+ /**
25
+ * ReactOwners are capable of storing references to owned components.
26
+ *
27
+ * All components are capable of //being// referenced by owner components, but
28
+ * only ReactOwner components are capable of //referencing// owned components.
29
+ * The named reference is known as a "ref".
30
+ *
31
+ * Refs are available when mounted and updated during reconciliation.
32
+ *
33
+ * var MyComponent = React.createClass({
34
+ * render: function() {
35
+ * return (
36
+ * <div onClick={this.handleClick}>
37
+ * <CustomComponent ref="custom" />
38
+ * </div>
39
+ * );
40
+ * },
41
+ * handleClick: function() {
42
+ * this.refs.custom.handleClick();
43
+ * },
44
+ * componentDidMount: function() {
45
+ * this.refs.custom.initialize();
46
+ * }
47
+ * });
48
+ *
49
+ * Refs should rarely be used. When refs are used, they should only be done to
50
+ * control data that is not handled by React's data flow.
51
+ *
52
+ * @class ReactOwner
53
+ */
54
+ var ReactOwner = {
55
+
56
+ /**
57
+ * @param {?object} object
58
+ * @return {boolean} True if `object` is a valid owner.
59
+ * @final
60
+ */
61
+ isValidOwner: function(object) {
62
+ return !!(
63
+ object &&
64
+ typeof object.attachRef === 'function' &&
65
+ typeof object.detachRef === 'function'
66
+ );
67
+ },
68
+
69
+ /**
70
+ * Adds a component by ref to an owner component.
71
+ *
72
+ * @param {ReactComponent} component Component to reference.
73
+ * @param {string} ref Name by which to refer to the component.
74
+ * @param {ReactOwner} owner Component on which to record the ref.
75
+ * @final
76
+ * @internal
77
+ */
78
+ addComponentAsRefTo: function(component, ref, owner) {
79
+ ("production" !== process.env.NODE_ENV ? invariant(
80
+ ReactOwner.isValidOwner(owner),
81
+ 'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' +
82
+ 'usually means that you\'re trying to add a ref to a component that ' +
83
+ 'doesn\'t have an owner (that is, was not created inside of another ' +
84
+ 'component\'s `render` method). Try rendering this component inside of ' +
85
+ 'a new top-level component which will hold the ref.'
86
+ ) : invariant(ReactOwner.isValidOwner(owner)));
87
+ owner.attachRef(ref, component);
88
+ },
89
+
90
+ /**
91
+ * Removes a component by ref from an owner component.
92
+ *
93
+ * @param {ReactComponent} component Component to dereference.
94
+ * @param {string} ref Name of the ref to remove.
95
+ * @param {ReactOwner} owner Component on which the ref is recorded.
96
+ * @final
97
+ * @internal
98
+ */
99
+ removeComponentAsRefFrom: function(component, ref, owner) {
100
+ ("production" !== process.env.NODE_ENV ? invariant(
101
+ ReactOwner.isValidOwner(owner),
102
+ 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' +
103
+ 'usually means that you\'re trying to remove a ref to a component that ' +
104
+ 'doesn\'t have an owner (that is, was not created inside of another ' +
105
+ 'component\'s `render` method). Try rendering this component inside of ' +
106
+ 'a new top-level component which will hold the ref.'
107
+ ) : invariant(ReactOwner.isValidOwner(owner)));
108
+ // Check that `component` is still the current ref because we do not want to
109
+ // detach the ref if another component stole it.
110
+ if (owner.refs[ref] === component) {
111
+ owner.detachRef(ref);
112
+ }
113
+ },
114
+
115
+ /**
116
+ * A ReactComponent must mix this in to have refs.
117
+ *
118
+ * @lends {ReactOwner.prototype}
119
+ */
120
+ Mixin: {
121
+
122
+ construct: function() {
123
+ this.refs = emptyObject;
124
+ },
125
+
126
+ /**
127
+ * Lazily allocates the refs object and stores `component` as `ref`.
128
+ *
129
+ * @param {string} ref Reference name.
130
+ * @param {component} component Component to store as `ref`.
131
+ * @final
132
+ * @private
133
+ */
134
+ attachRef: function(ref, component) {
135
+ ("production" !== process.env.NODE_ENV ? invariant(
136
+ component.isOwnedBy(this),
137
+ 'attachRef(%s, ...): Only a component\'s owner can store a ref to it.',
138
+ ref
139
+ ) : invariant(component.isOwnedBy(this)));
140
+ var refs = this.refs === emptyObject ? (this.refs = {}) : this.refs;
141
+ refs[ref] = component;
142
+ },
143
+
144
+ /**
145
+ * Detaches a reference name.
146
+ *
147
+ * @param {string} ref Name to dereference.
148
+ * @final
149
+ * @private
150
+ */
151
+ detachRef: function(ref) {
152
+ delete this.refs[ref];
153
+ }
154
+
155
+ }
156
+
157
+ };
158
+
159
+ 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 && TransferStrategies.hasOwnProperty(thisKey)) {
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;