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,214 @@
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 EventPluginUtils
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var EventConstants = require("./EventConstants");
22
+
23
+ var invariant = require("./invariant");
24
+
25
+ /**
26
+ * Injected dependencies:
27
+ */
28
+
29
+ /**
30
+ * - `Mount`: [required] Module that can convert between React dom IDs and
31
+ * actual node references.
32
+ */
33
+ var injection = {
34
+ Mount: null,
35
+ injectMount: function(InjectedMount) {
36
+ injection.Mount = InjectedMount;
37
+ if ("production" !== process.env.NODE_ENV) {
38
+ ("production" !== process.env.NODE_ENV ? invariant(
39
+ InjectedMount && InjectedMount.getNode,
40
+ 'EventPluginUtils.injection.injectMount(...): Injected Mount module ' +
41
+ 'is missing getNode.'
42
+ ) : invariant(InjectedMount && InjectedMount.getNode));
43
+ }
44
+ }
45
+ };
46
+
47
+ var topLevelTypes = EventConstants.topLevelTypes;
48
+
49
+ function isEndish(topLevelType) {
50
+ return topLevelType === topLevelTypes.topMouseUp ||
51
+ topLevelType === topLevelTypes.topTouchEnd ||
52
+ topLevelType === topLevelTypes.topTouchCancel;
53
+ }
54
+
55
+ function isMoveish(topLevelType) {
56
+ return topLevelType === topLevelTypes.topMouseMove ||
57
+ topLevelType === topLevelTypes.topTouchMove;
58
+ }
59
+ function isStartish(topLevelType) {
60
+ return topLevelType === topLevelTypes.topMouseDown ||
61
+ topLevelType === topLevelTypes.topTouchStart;
62
+ }
63
+
64
+
65
+ var validateEventDispatches;
66
+ if ("production" !== process.env.NODE_ENV) {
67
+ validateEventDispatches = function(event) {
68
+ var dispatchListeners = event._dispatchListeners;
69
+ var dispatchIDs = event._dispatchIDs;
70
+
71
+ var listenersIsArr = Array.isArray(dispatchListeners);
72
+ var idsIsArr = Array.isArray(dispatchIDs);
73
+ var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;
74
+ var listenersLen = listenersIsArr ?
75
+ dispatchListeners.length :
76
+ dispatchListeners ? 1 : 0;
77
+
78
+ ("production" !== process.env.NODE_ENV ? invariant(
79
+ idsIsArr === listenersIsArr && IDsLen === listenersLen,
80
+ 'EventPluginUtils: Invalid `event`.'
81
+ ) : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen));
82
+ };
83
+ }
84
+
85
+ /**
86
+ * Invokes `cb(event, listener, id)`. Avoids using call if no scope is
87
+ * provided. The `(listener,id)` pair effectively forms the "dispatch" but are
88
+ * kept separate to conserve memory.
89
+ */
90
+ function forEachEventDispatch(event, cb) {
91
+ var dispatchListeners = event._dispatchListeners;
92
+ var dispatchIDs = event._dispatchIDs;
93
+ if ("production" !== process.env.NODE_ENV) {
94
+ validateEventDispatches(event);
95
+ }
96
+ if (Array.isArray(dispatchListeners)) {
97
+ for (var i = 0; i < dispatchListeners.length; i++) {
98
+ if (event.isPropagationStopped()) {
99
+ break;
100
+ }
101
+ // Listeners and IDs are two parallel arrays that are always in sync.
102
+ cb(event, dispatchListeners[i], dispatchIDs[i]);
103
+ }
104
+ } else if (dispatchListeners) {
105
+ cb(event, dispatchListeners, dispatchIDs);
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Default implementation of PluginModule.executeDispatch().
111
+ * @param {SyntheticEvent} SyntheticEvent to handle
112
+ * @param {function} Application-level callback
113
+ * @param {string} domID DOM id to pass to the callback.
114
+ */
115
+ function executeDispatch(event, listener, domID) {
116
+ event.currentTarget = injection.Mount.getNode(domID);
117
+ var returnValue = listener(event, domID);
118
+ event.currentTarget = null;
119
+ return returnValue;
120
+ }
121
+
122
+ /**
123
+ * Standard/simple iteration through an event's collected dispatches.
124
+ */
125
+ function executeDispatchesInOrder(event, executeDispatch) {
126
+ forEachEventDispatch(event, executeDispatch);
127
+ event._dispatchListeners = null;
128
+ event._dispatchIDs = null;
129
+ }
130
+
131
+ /**
132
+ * Standard/simple iteration through an event's collected dispatches, but stops
133
+ * at the first dispatch execution returning true, and returns that id.
134
+ *
135
+ * @return id of the first dispatch execution who's listener returns true, or
136
+ * null if no listener returned true.
137
+ */
138
+ function executeDispatchesInOrderStopAtTrue(event) {
139
+ var dispatchListeners = event._dispatchListeners;
140
+ var dispatchIDs = event._dispatchIDs;
141
+ if ("production" !== process.env.NODE_ENV) {
142
+ validateEventDispatches(event);
143
+ }
144
+ if (Array.isArray(dispatchListeners)) {
145
+ for (var i = 0; i < dispatchListeners.length; i++) {
146
+ if (event.isPropagationStopped()) {
147
+ break;
148
+ }
149
+ // Listeners and IDs are two parallel arrays that are always in sync.
150
+ if (dispatchListeners[i](event, dispatchIDs[i])) {
151
+ return dispatchIDs[i];
152
+ }
153
+ }
154
+ } else if (dispatchListeners) {
155
+ if (dispatchListeners(event, dispatchIDs)) {
156
+ return dispatchIDs;
157
+ }
158
+ }
159
+ return null;
160
+ }
161
+
162
+ /**
163
+ * Execution of a "direct" dispatch - there must be at most one dispatch
164
+ * accumulated on the event or it is considered an error. It doesn't really make
165
+ * sense for an event with multiple dispatches (bubbled) to keep track of the
166
+ * return values at each dispatch execution, but it does tend to make sense when
167
+ * dealing with "direct" dispatches.
168
+ *
169
+ * @return The return value of executing the single dispatch.
170
+ */
171
+ function executeDirectDispatch(event) {
172
+ if ("production" !== process.env.NODE_ENV) {
173
+ validateEventDispatches(event);
174
+ }
175
+ var dispatchListener = event._dispatchListeners;
176
+ var dispatchID = event._dispatchIDs;
177
+ ("production" !== process.env.NODE_ENV ? invariant(
178
+ !Array.isArray(dispatchListener),
179
+ 'executeDirectDispatch(...): Invalid `event`.'
180
+ ) : invariant(!Array.isArray(dispatchListener)));
181
+ var res = dispatchListener ?
182
+ dispatchListener(event, dispatchID) :
183
+ null;
184
+ event._dispatchListeners = null;
185
+ event._dispatchIDs = null;
186
+ return res;
187
+ }
188
+
189
+ /**
190
+ * @param {SyntheticEvent} event
191
+ * @return {bool} True iff number of dispatches accumulated is greater than 0.
192
+ */
193
+ function hasDispatches(event) {
194
+ return !!event._dispatchListeners;
195
+ }
196
+
197
+ /**
198
+ * General utilities that are useful in creating custom Event Plugins.
199
+ */
200
+ var EventPluginUtils = {
201
+ isEndish: isEndish,
202
+ isMoveish: isMoveish,
203
+ isStartish: isStartish,
204
+
205
+ executeDirectDispatch: executeDirectDispatch,
206
+ executeDispatch: executeDispatch,
207
+ executeDispatchesInOrder: executeDispatchesInOrder,
208
+ executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
209
+ hasDispatches: hasDispatches,
210
+ injection: injection,
211
+ useTouchEvents: false
212
+ };
213
+
214
+ module.exports = EventPluginUtils;
@@ -0,0 +1,143 @@
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 EventPropagators
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var EventConstants = require("./EventConstants");
22
+ var EventPluginHub = require("./EventPluginHub");
23
+
24
+ var accumulate = require("./accumulate");
25
+ var forEachAccumulated = require("./forEachAccumulated");
26
+
27
+ var PropagationPhases = EventConstants.PropagationPhases;
28
+ var getListener = EventPluginHub.getListener;
29
+
30
+ /**
31
+ * Some event types have a notion of different registration names for different
32
+ * "phases" of propagation. This finds listeners by a given phase.
33
+ */
34
+ function listenerAtPhase(id, event, propagationPhase) {
35
+ var registrationName =
36
+ event.dispatchConfig.phasedRegistrationNames[propagationPhase];
37
+ return getListener(id, registrationName);
38
+ }
39
+
40
+ /**
41
+ * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
42
+ * here, allows us to not have to bind or create functions for each event.
43
+ * Mutating the event's members allows us to not have to create a wrapping
44
+ * "dispatch" object that pairs the event with the listener.
45
+ */
46
+ function accumulateDirectionalDispatches(domID, upwards, event) {
47
+ if ("production" !== process.env.NODE_ENV) {
48
+ if (!domID) {
49
+ throw new Error('Dispatching id must not be null');
50
+ }
51
+ }
52
+ var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
53
+ var listener = listenerAtPhase(domID, event, phase);
54
+ if (listener) {
55
+ event._dispatchListeners = accumulate(event._dispatchListeners, listener);
56
+ event._dispatchIDs = accumulate(event._dispatchIDs, domID);
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Collect dispatches (must be entirely collected before dispatching - see unit
62
+ * tests). Lazily allocate the array to conserve memory. We must loop through
63
+ * each event and perform the traversal for each one. We can not perform a
64
+ * single traversal for the entire collection of events because each event may
65
+ * have a different target.
66
+ */
67
+ function accumulateTwoPhaseDispatchesSingle(event) {
68
+ if (event && event.dispatchConfig.phasedRegistrationNames) {
69
+ EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(
70
+ event.dispatchMarker,
71
+ accumulateDirectionalDispatches,
72
+ event
73
+ );
74
+ }
75
+ }
76
+
77
+
78
+ /**
79
+ * Accumulates without regard to direction, does not look for phased
80
+ * registration names. Same as `accumulateDirectDispatchesSingle` but without
81
+ * requiring that the `dispatchMarker` be the same as the dispatched ID.
82
+ */
83
+ function accumulateDispatches(id, ignoredDirection, event) {
84
+ if (event && event.dispatchConfig.registrationName) {
85
+ var registrationName = event.dispatchConfig.registrationName;
86
+ var listener = getListener(id, registrationName);
87
+ if (listener) {
88
+ event._dispatchListeners = accumulate(event._dispatchListeners, listener);
89
+ event._dispatchIDs = accumulate(event._dispatchIDs, id);
90
+ }
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Accumulates dispatches on an `SyntheticEvent`, but only for the
96
+ * `dispatchMarker`.
97
+ * @param {SyntheticEvent} event
98
+ */
99
+ function accumulateDirectDispatchesSingle(event) {
100
+ if (event && event.dispatchConfig.registrationName) {
101
+ accumulateDispatches(event.dispatchMarker, null, event);
102
+ }
103
+ }
104
+
105
+ function accumulateTwoPhaseDispatches(events) {
106
+ forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
107
+ }
108
+
109
+ function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {
110
+ EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(
111
+ fromID,
112
+ toID,
113
+ accumulateDispatches,
114
+ leave,
115
+ enter
116
+ );
117
+ }
118
+
119
+
120
+ function accumulateDirectDispatches(events) {
121
+ forEachAccumulated(events, accumulateDirectDispatchesSingle);
122
+ }
123
+
124
+
125
+
126
+ /**
127
+ * A small set of propagation patterns, each of which will accept a small amount
128
+ * of information, and generate a set of "dispatch ready event objects" - which
129
+ * are sets of events that have already been annotated with a set of dispatched
130
+ * listener functions/ids. The API is designed this way to discourage these
131
+ * propagation strategies from actually executing the dispatches, since we
132
+ * always want to collect the entire set of dispatches before executing event a
133
+ * single one.
134
+ *
135
+ * @constructor EventPropagators
136
+ */
137
+ var EventPropagators = {
138
+ accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
139
+ accumulateDirectDispatches: accumulateDirectDispatches,
140
+ accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
141
+ };
142
+
143
+ module.exports = EventPropagators;
@@ -0,0 +1,44 @@
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 ExecutionEnvironment
17
+ */
18
+
19
+ /*jslint evil: true */
20
+
21
+ "use strict";
22
+
23
+ var canUseDOM = typeof window !== 'undefined';
24
+
25
+ /**
26
+ * Simple, lightweight module assisting with the detection and context of
27
+ * Worker. Helps avoid circular dependencies and allows code to reason about
28
+ * whether or not they are in a Worker, even if they never include the main
29
+ * `ReactWorker` dependency.
30
+ */
31
+ var ExecutionEnvironment = {
32
+
33
+ canUseDOM: canUseDOM,
34
+
35
+ canUseWorkers: typeof Worker !== 'undefined',
36
+
37
+ canUseEventListeners:
38
+ canUseDOM && (window.addEventListener || window.attachEvent),
39
+
40
+ isInWorker: !canUseDOM // For now, this is true - might change in the future.
41
+
42
+ };
43
+
44
+ module.exports = ExecutionEnvironment;
@@ -0,0 +1,46 @@
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 LinkedStateMixin
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ var ReactLink = require("./ReactLink");
23
+ var ReactStateSetters = require("./ReactStateSetters");
24
+
25
+ /**
26
+ * A simple mixin around ReactLink.forState().
27
+ */
28
+ var LinkedStateMixin = {
29
+ /**
30
+ * Create a ReactLink that's linked to part of this component's state. The
31
+ * ReactLink will have the current value of this.state[key] and will call
32
+ * setState() when a change is requested.
33
+ *
34
+ * @param {string} key state key to update. Note: you may want to use keyOf()
35
+ * if you're using Google Closure Compiler advanced mode.
36
+ * @return {ReactLink} ReactLink instance linking to the state.
37
+ */
38
+ linkState: function(key) {
39
+ return new ReactLink(
40
+ this.state[key],
41
+ ReactStateSetters.createStateKeySetter(this, key)
42
+ );
43
+ }
44
+ };
45
+
46
+ module.exports = LinkedStateMixin;