react 0.14.0-alpha2 → 0.14.0-beta3

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 (196) hide show
  1. package/README.md +5 -2
  2. package/addons.js +6 -3
  3. package/dist/JSXTransformer.js +634 -274
  4. package/dist/react-with-addons.js +5350 -4954
  5. package/dist/react-with-addons.min.js +6 -6
  6. package/dist/react.js +4777 -4408
  7. package/dist/react.min.js +6 -5
  8. package/lib/{AutoFocusMixin.js → AutoFocusUtils.js} +15 -5
  9. package/lib/BeforeInputEventPlugin.js +13 -13
  10. package/lib/CSSProperty.js +3 -0
  11. package/lib/CSSPropertyOperations.js +13 -13
  12. package/lib/CallbackQueue.js +4 -4
  13. package/lib/ChangeEventPlugin.js +16 -14
  14. package/lib/DOMChildrenOperations.js +10 -6
  15. package/lib/DOMProperty.js +82 -117
  16. package/lib/DOMPropertyOperations.js +78 -33
  17. package/lib/Danger.js +14 -14
  18. package/lib/DefaultEventPluginOrder.js +2 -2
  19. package/lib/EnterLeaveEventPlugin.js +8 -8
  20. package/lib/EventConstants.js +23 -1
  21. package/lib/EventPluginHub.js +13 -13
  22. package/lib/EventPluginRegistry.js +8 -8
  23. package/lib/EventPluginUtils.js +17 -17
  24. package/lib/EventPropagators.js +7 -7
  25. package/lib/FallbackCompositionState.js +3 -3
  26. package/lib/HTMLDOMPropertyConfig.js +13 -3
  27. package/lib/LinkedStateMixin.js +2 -2
  28. package/lib/LinkedValueUtils.js +50 -38
  29. package/lib/MetaMatchers.js +118 -0
  30. package/lib/OrderedMap.js +453 -0
  31. package/lib/PooledClass.js +14 -2
  32. package/lib/React.js +6 -6
  33. package/lib/ReactBrowserComponentMixin.js +4 -4
  34. package/lib/ReactBrowserEventEmitter.js +30 -7
  35. package/lib/ReactCSSTransitionGroup.js +16 -5
  36. package/lib/ReactCSSTransitionGroupChild.js +20 -11
  37. package/lib/ReactChildReconciler.js +25 -18
  38. package/lib/ReactChildren.js +9 -9
  39. package/lib/ReactClass.js +65 -83
  40. package/lib/ReactComponent.js +22 -17
  41. package/lib/ReactComponentBrowserEnvironment.js +2 -2
  42. package/lib/ReactComponentEnvironment.js +2 -2
  43. package/lib/ReactComponentWithPureRenderMixin.js +3 -3
  44. package/lib/ReactCompositeComponent.js +80 -111
  45. package/lib/ReactDOM.js +72 -158
  46. package/lib/ReactDOMButton.js +15 -26
  47. package/lib/ReactDOMComponent.js +378 -56
  48. package/lib/ReactDOMFactories.js +177 -0
  49. package/lib/ReactDOMIDOperations.js +23 -23
  50. package/lib/ReactDOMInput.js +83 -99
  51. package/lib/ReactDOMOption.js +25 -45
  52. package/lib/ReactDOMSelect.js +88 -98
  53. package/lib/ReactDOMSelection.js +3 -3
  54. package/lib/ReactDOMServer.js +2 -2
  55. package/lib/ReactDOMTextComponent.js +11 -11
  56. package/lib/ReactDOMTextarea.js +48 -61
  57. package/lib/ReactDefaultBatchingStrategy.js +4 -4
  58. package/lib/ReactDefaultInjection.js +24 -71
  59. package/lib/ReactDefaultPerf.js +7 -7
  60. package/lib/ReactDefaultPerfAnalysis.js +6 -9
  61. package/lib/ReactElement.js +22 -83
  62. package/lib/ReactElementValidator.js +48 -117
  63. package/lib/ReactEmptyComponent.js +4 -4
  64. package/lib/ReactErrorUtils.js +1 -1
  65. package/lib/ReactEventEmitterMixin.js +3 -4
  66. package/lib/ReactEventListener.js +57 -12
  67. package/lib/ReactFragment.js +22 -17
  68. package/lib/ReactInjection.js +11 -11
  69. package/lib/ReactInputSelection.js +8 -7
  70. package/lib/ReactInstanceHandles.js +12 -12
  71. package/lib/ReactIsomorphic.js +11 -11
  72. package/lib/ReactLink.js +1 -1
  73. package/lib/ReactMarkupChecksum.js +6 -2
  74. package/lib/ReactMount.js +88 -88
  75. package/lib/ReactMultiChild.js +83 -22
  76. package/lib/ReactMultiChildUpdateTypes.js +2 -1
  77. package/lib/ReactNativeComponent.js +3 -8
  78. package/lib/ReactNoopUpdateQueue.js +118 -0
  79. package/lib/ReactOwner.js +3 -3
  80. package/lib/ReactPerf.js +2 -2
  81. package/lib/ReactPropTransferer.js +3 -3
  82. package/lib/ReactPropTypeLocationNames.js +1 -1
  83. package/lib/ReactPropTypeLocations.js +1 -1
  84. package/lib/ReactPropTypes.js +49 -11
  85. package/lib/ReactReconcileTransaction.js +8 -8
  86. package/lib/ReactReconciler.js +18 -20
  87. package/lib/ReactRef.js +1 -1
  88. package/lib/ReactServerBatchingStrategy.js +23 -0
  89. package/lib/ReactServerRendering.js +22 -9
  90. package/lib/ReactServerRenderingTransaction.js +7 -7
  91. package/lib/ReactTestUtils.js +80 -58
  92. package/lib/ReactTransitionChildMapping.js +2 -2
  93. package/lib/ReactTransitionEvents.js +1 -1
  94. package/lib/ReactTransitionGroup.js +5 -6
  95. package/lib/ReactUpdateQueue.js +61 -36
  96. package/lib/ReactUpdates.js +14 -17
  97. package/lib/ReactWithAddons.js +14 -16
  98. package/lib/ResponderEventPlugin.js +514 -0
  99. package/lib/ResponderSyntheticEvent.js +40 -0
  100. package/lib/ResponderTouchHistoryStore.js +180 -0
  101. package/lib/SVGDOMPropertyConfig.js +1 -1
  102. package/lib/SelectEventPlugin.js +14 -15
  103. package/lib/SimpleEventPlugin.js +205 -29
  104. package/lib/SyntheticClipboardEvent.js +3 -3
  105. package/lib/SyntheticCompositionEvent.js +3 -3
  106. package/lib/SyntheticDragEvent.js +3 -3
  107. package/lib/SyntheticEvent.js +9 -8
  108. package/lib/SyntheticFocusEvent.js +3 -3
  109. package/lib/SyntheticInputEvent.js +3 -3
  110. package/lib/SyntheticKeyboardEvent.js +6 -6
  111. package/lib/SyntheticMouseEvent.js +5 -5
  112. package/lib/SyntheticTouchEvent.js +4 -4
  113. package/lib/SyntheticUIEvent.js +4 -4
  114. package/lib/SyntheticWheelEvent.js +3 -3
  115. package/lib/TapEventPlugin.js +119 -0
  116. package/lib/Transaction.js +16 -10
  117. package/lib/accumulate.js +44 -0
  118. package/lib/accumulateInto.js +2 -2
  119. package/lib/adler32.js +19 -7
  120. package/lib/cloneWithProps.js +12 -7
  121. package/lib/createHierarchyRenderer.js +85 -0
  122. package/lib/dangerousStyleValue.js +1 -1
  123. package/lib/deprecated.js +47 -0
  124. package/lib/findDOMNode.js +11 -12
  125. package/lib/flattenChildren.js +4 -4
  126. package/lib/forEachAccumulated.js +1 -1
  127. package/lib/getEventCharCode.js +1 -1
  128. package/lib/getEventKey.js +1 -1
  129. package/lib/getEventModifierState.js +0 -1
  130. package/lib/getTestDocument.js +28 -0
  131. package/lib/getTextContentAccessor.js +1 -1
  132. package/lib/instantiateReactComponent.js +24 -20
  133. package/lib/isEventSupported.js +1 -1
  134. package/lib/isTextInputElement.js +2 -1
  135. package/lib/joinClasses.js +1 -1
  136. package/lib/onlyChild.js +3 -3
  137. package/lib/quoteAttributeValueForBrowser.js +1 -1
  138. package/lib/reactComponentExpect.js +210 -0
  139. package/lib/renderSubtreeIntoContainer.js +1 -1
  140. package/lib/setInnerHTML.js +2 -2
  141. package/lib/setTextContent.js +3 -3
  142. package/lib/shallowCompare.js +1 -1
  143. package/lib/sliceChildren.js +51 -0
  144. package/lib/traverseAllChildren.js +15 -14
  145. package/lib/update.js +13 -13
  146. package/lib/validateDOMNesting.js +14 -6
  147. package/lib/webcomponents.js +6379 -0
  148. package/package.json +4 -6
  149. package/react.js +53 -1
  150. package/addons/CSSTransitionGroup.js +0 -1
  151. package/addons/LinkedStateMixin.js +0 -1
  152. package/addons/Perf.js +0 -1
  153. package/addons/PureRenderMixin.js +0 -1
  154. package/addons/TestUtils.js +0 -1
  155. package/addons/TransitionGroup.js +0 -1
  156. package/addons/batchedUpdates.js +0 -1
  157. package/addons/cloneWithProps.js +0 -1
  158. package/addons/createFragment.js +0 -1
  159. package/addons/renderSubtreeIntoContainer.js +0 -1
  160. package/addons/shallowCompare.js +0 -1
  161. package/addons/update.js +0 -1
  162. package/lib/CSSCore.js +0 -97
  163. package/lib/EventListener.js +0 -84
  164. package/lib/ExecutionEnvironment.js +0 -38
  165. package/lib/LocalEventTrapMixin.js +0 -46
  166. package/lib/ReactContext.js +0 -32
  167. package/lib/ReactDOMClient.js +0 -85
  168. package/lib/ReactDOMForm.js +0 -47
  169. package/lib/ReactDOMIframe.js +0 -43
  170. package/lib/ReactDOMImg.js +0 -44
  171. package/lib/ReactLifeCycle.js +0 -35
  172. package/lib/camelize.js +0 -32
  173. package/lib/camelizeStyleName.js +0 -40
  174. package/lib/containsNode.js +0 -55
  175. package/lib/createArrayFromMixed.js +0 -85
  176. package/lib/createFullPageComponent.js +0 -51
  177. package/lib/createNodesFromMarkup.js +0 -84
  178. package/lib/emptyFunction.js +0 -38
  179. package/lib/emptyObject.js +0 -20
  180. package/lib/focusNode.js +0 -26
  181. package/lib/getActiveElement.js +0 -29
  182. package/lib/getMarkupWrap.js +0 -115
  183. package/lib/getUnboundedScrollPosition.js +0 -38
  184. package/lib/hyphenate.js +0 -33
  185. package/lib/hyphenateStyleName.js +0 -39
  186. package/lib/invariant.js +0 -49
  187. package/lib/isNode.js +0 -23
  188. package/lib/isTextNode.js +0 -25
  189. package/lib/keyMirror.js +0 -48
  190. package/lib/keyOf.js +0 -35
  191. package/lib/mapObject.js +0 -51
  192. package/lib/performance.js +0 -23
  193. package/lib/performanceNow.js +0 -28
  194. package/lib/shallowEqual.js +0 -48
  195. package/lib/toArray.js +0 -57
  196. package/lib/warning.js +0 -61
@@ -12,7 +12,7 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticEvent = require("./SyntheticEvent");
15
+ var SyntheticEvent = require('./SyntheticEvent');
16
16
 
17
17
  /**
18
18
  * @interface Event
@@ -30,8 +30,8 @@ var ClipboardEventInterface = {
30
30
  * @param {object} nativeEvent Native browser event.
31
31
  * @extends {SyntheticUIEvent}
32
32
  */
33
- function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {
34
- SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
33
+ function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
34
+ SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
35
35
  }
36
36
 
37
37
  SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
@@ -12,7 +12,7 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticEvent = require("./SyntheticEvent");
15
+ var SyntheticEvent = require('./SyntheticEvent');
16
16
 
17
17
  /**
18
18
  * @interface Event
@@ -28,8 +28,8 @@ var CompositionEventInterface = {
28
28
  * @param {object} nativeEvent Native browser event.
29
29
  * @extends {SyntheticUIEvent}
30
30
  */
31
- function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent) {
32
- SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
31
+ function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
32
+ SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
33
33
  }
34
34
 
35
35
  SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
@@ -12,7 +12,7 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticMouseEvent = require("./SyntheticMouseEvent");
15
+ var SyntheticMouseEvent = require('./SyntheticMouseEvent');
16
16
 
17
17
  /**
18
18
  * @interface DragEvent
@@ -28,8 +28,8 @@ var DragEventInterface = {
28
28
  * @param {object} nativeEvent Native browser event.
29
29
  * @extends {SyntheticUIEvent}
30
30
  */
31
- function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {
32
- SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
31
+ function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
32
+ SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
33
33
  }
34
34
 
35
35
  SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
@@ -12,19 +12,18 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var PooledClass = require("./PooledClass");
15
+ var PooledClass = require('./PooledClass');
16
16
 
17
- var assign = require("./Object.assign");
18
- var emptyFunction = require("./emptyFunction");
19
- var getEventTarget = require("./getEventTarget");
17
+ var assign = require('./Object.assign');
18
+ var emptyFunction = require('fbjs/lib/emptyFunction');
20
19
 
21
20
  /**
22
21
  * @interface Event
23
22
  * @see http://www.w3.org/TR/DOM-Level-3-Events/
24
23
  */
25
24
  var EventInterface = {
25
+ path: null,
26
26
  type: null,
27
- target: getEventTarget,
28
27
  // currentTarget is set when dispatching; no use in copying it here
29
28
  currentTarget: emptyFunction.thatReturnsNull,
30
29
  eventPhase: null,
@@ -54,10 +53,12 @@ var EventInterface = {
54
53
  * @param {string} dispatchMarker Marker identifying the event target.
55
54
  * @param {object} nativeEvent Native browser event.
56
55
  */
57
- function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {
56
+ function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
58
57
  this.dispatchConfig = dispatchConfig;
59
58
  this.dispatchMarker = dispatchMarker;
60
59
  this.nativeEvent = nativeEvent;
60
+ this.target = nativeEventTarget;
61
+ this.currentTarget = nativeEventTarget;
61
62
 
62
63
  var Interface = this.constructor.Interface;
63
64
  for (var propName in Interface) {
@@ -154,9 +155,9 @@ SyntheticEvent.augmentClass = function (Class, Interface) {
154
155
  Class.Interface = assign({}, Super.Interface, Interface);
155
156
  Class.augmentClass = Super.augmentClass;
156
157
 
157
- PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);
158
+ PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);
158
159
  };
159
160
 
160
- PooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);
161
+ PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);
161
162
 
162
163
  module.exports = SyntheticEvent;
@@ -12,7 +12,7 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticUIEvent = require("./SyntheticUIEvent");
15
+ var SyntheticUIEvent = require('./SyntheticUIEvent');
16
16
 
17
17
  /**
18
18
  * @interface FocusEvent
@@ -28,8 +28,8 @@ var FocusEventInterface = {
28
28
  * @param {object} nativeEvent Native browser event.
29
29
  * @extends {SyntheticUIEvent}
30
30
  */
31
- function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {
32
- SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
31
+ function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
32
+ SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
33
33
  }
34
34
 
35
35
  SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
@@ -12,7 +12,7 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticEvent = require("./SyntheticEvent");
15
+ var SyntheticEvent = require('./SyntheticEvent');
16
16
 
17
17
  /**
18
18
  * @interface Event
@@ -29,8 +29,8 @@ var InputEventInterface = {
29
29
  * @param {object} nativeEvent Native browser event.
30
30
  * @extends {SyntheticUIEvent}
31
31
  */
32
- function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent) {
33
- SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
32
+ function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
33
+ SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
34
34
  }
35
35
 
36
36
  SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
@@ -12,11 +12,11 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticUIEvent = require("./SyntheticUIEvent");
15
+ var SyntheticUIEvent = require('./SyntheticUIEvent');
16
16
 
17
- var getEventCharCode = require("./getEventCharCode");
18
- var getEventKey = require("./getEventKey");
19
- var getEventModifierState = require("./getEventModifierState");
17
+ var getEventCharCode = require('./getEventCharCode');
18
+ var getEventKey = require('./getEventKey');
19
+ var getEventModifierState = require('./getEventModifierState');
20
20
 
21
21
  /**
22
22
  * @interface KeyboardEvent
@@ -76,8 +76,8 @@ var KeyboardEventInterface = {
76
76
  * @param {object} nativeEvent Native browser event.
77
77
  * @extends {SyntheticUIEvent}
78
78
  */
79
- function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {
80
- SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
79
+ function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
80
+ SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
81
81
  }
82
82
 
83
83
  SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
@@ -12,10 +12,10 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticUIEvent = require("./SyntheticUIEvent");
16
- var ViewportMetrics = require("./ViewportMetrics");
15
+ var SyntheticUIEvent = require('./SyntheticUIEvent');
16
+ var ViewportMetrics = require('./ViewportMetrics');
17
17
 
18
- var getEventModifierState = require("./getEventModifierState");
18
+ var getEventModifierState = require('./getEventModifierState');
19
19
 
20
20
  /**
21
21
  * @interface MouseEvent
@@ -64,8 +64,8 @@ var MouseEventInterface = {
64
64
  * @param {object} nativeEvent Native browser event.
65
65
  * @extends {SyntheticUIEvent}
66
66
  */
67
- function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {
68
- SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
67
+ function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
68
+ SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
69
69
  }
70
70
 
71
71
  SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
@@ -12,9 +12,9 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticUIEvent = require("./SyntheticUIEvent");
15
+ var SyntheticUIEvent = require('./SyntheticUIEvent');
16
16
 
17
- var getEventModifierState = require("./getEventModifierState");
17
+ var getEventModifierState = require('./getEventModifierState');
18
18
 
19
19
  /**
20
20
  * @interface TouchEvent
@@ -37,8 +37,8 @@ var TouchEventInterface = {
37
37
  * @param {object} nativeEvent Native browser event.
38
38
  * @extends {SyntheticUIEvent}
39
39
  */
40
- function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {
41
- SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
40
+ function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
41
+ SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
42
42
  }
43
43
 
44
44
  SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
@@ -12,9 +12,9 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticEvent = require("./SyntheticEvent");
15
+ var SyntheticEvent = require('./SyntheticEvent');
16
16
 
17
- var getEventTarget = require("./getEventTarget");
17
+ var getEventTarget = require('./getEventTarget');
18
18
 
19
19
  /**
20
20
  * @interface UIEvent
@@ -51,8 +51,8 @@ var UIEventInterface = {
51
51
  * @param {object} nativeEvent Native browser event.
52
52
  * @extends {SyntheticEvent}
53
53
  */
54
- function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {
55
- SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
54
+ function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
55
+ SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
56
56
  }
57
57
 
58
58
  SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
@@ -12,7 +12,7 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var SyntheticMouseEvent = require("./SyntheticMouseEvent");
15
+ var SyntheticMouseEvent = require('./SyntheticMouseEvent');
16
16
 
17
17
  /**
18
18
  * @interface WheelEvent
@@ -46,8 +46,8 @@ var WheelEventInterface = {
46
46
  * @param {object} nativeEvent Native browser event.
47
47
  * @extends {SyntheticMouseEvent}
48
48
  */
49
- function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {
50
- SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
49
+ function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
50
+ SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
51
51
  }
52
52
 
53
53
  SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Copyright 2013-2015, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ *
9
+ * @providesModule TapEventPlugin
10
+ * @typechecks static-only
11
+ */
12
+
13
+ 'use strict';
14
+
15
+ var EventConstants = require('./EventConstants');
16
+ var EventPluginUtils = require('./EventPluginUtils');
17
+ var EventPropagators = require('./EventPropagators');
18
+ var SyntheticUIEvent = require('./SyntheticUIEvent');
19
+ var TouchEventUtils = require('fbjs/lib/TouchEventUtils');
20
+ var ViewportMetrics = require('./ViewportMetrics');
21
+
22
+ var keyOf = require('fbjs/lib/keyOf');
23
+ var topLevelTypes = EventConstants.topLevelTypes;
24
+
25
+ var isStartish = EventPluginUtils.isStartish;
26
+ var isEndish = EventPluginUtils.isEndish;
27
+
28
+ /**
29
+ * Number of pixels that are tolerated in between a `touchStart` and `touchEnd`
30
+ * in order to still be considered a 'tap' event.
31
+ */
32
+ var tapMoveThreshold = 10;
33
+ var startCoords = { x: null, y: null };
34
+
35
+ var Axis = {
36
+ x: { page: 'pageX', client: 'clientX', envScroll: 'currentPageScrollLeft' },
37
+ y: { page: 'pageY', client: 'clientY', envScroll: 'currentPageScrollTop' }
38
+ };
39
+
40
+ function getAxisCoordOfEvent(axis, nativeEvent) {
41
+ var singleTouch = TouchEventUtils.extractSingleTouch(nativeEvent);
42
+ if (singleTouch) {
43
+ return singleTouch[axis.page];
44
+ }
45
+ return axis.page in nativeEvent ? nativeEvent[axis.page] : nativeEvent[axis.client] + ViewportMetrics[axis.envScroll];
46
+ }
47
+
48
+ function getDistance(coords, nativeEvent) {
49
+ var pageX = getAxisCoordOfEvent(Axis.x, nativeEvent);
50
+ var pageY = getAxisCoordOfEvent(Axis.y, nativeEvent);
51
+ return Math.pow(Math.pow(pageX - coords.x, 2) + Math.pow(pageY - coords.y, 2), 0.5);
52
+ }
53
+
54
+ var touchEvents = [topLevelTypes.topTouchStart, topLevelTypes.topTouchCancel, topLevelTypes.topTouchEnd, topLevelTypes.topTouchMove];
55
+
56
+ var dependencies = [topLevelTypes.topMouseDown, topLevelTypes.topMouseMove, topLevelTypes.topMouseUp].concat(touchEvents);
57
+
58
+ var eventTypes = {
59
+ touchTap: {
60
+ phasedRegistrationNames: {
61
+ bubbled: keyOf({ onTouchTap: null }),
62
+ captured: keyOf({ onTouchTapCapture: null })
63
+ },
64
+ dependencies: dependencies
65
+ }
66
+ };
67
+
68
+ var usedTouch = false;
69
+ var usedTouchTime = 0;
70
+ var TOUCH_DELAY = 1000;
71
+
72
+ var TapEventPlugin = {
73
+
74
+ tapMoveThreshold: tapMoveThreshold,
75
+
76
+ eventTypes: eventTypes,
77
+
78
+ /**
79
+ * @param {string} topLevelType Record from `EventConstants`.
80
+ * @param {DOMEventTarget} topLevelTarget The listening component root node.
81
+ * @param {string} topLevelTargetID ID of `topLevelTarget`.
82
+ * @param {object} nativeEvent Native browser event.
83
+ * @return {*} An accumulation of synthetic events.
84
+ * @see {EventPluginHub.extractEvents}
85
+ */
86
+ extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
87
+ if (!isStartish(topLevelType) && !isEndish(topLevelType)) {
88
+ return null;
89
+ }
90
+ // on ios, there is a delay after touch event and synthetic
91
+ // mouse events, so that user can perform double tap
92
+ // solution: ignore mouse events following touchevent within small timeframe
93
+ if (touchEvents.indexOf(topLevelType) !== -1) {
94
+ usedTouch = true;
95
+ usedTouchTime = Date.now();
96
+ } else {
97
+ if (usedTouch && Date.now() - usedTouchTime < TOUCH_DELAY) {
98
+ return null;
99
+ }
100
+ }
101
+ var event = null;
102
+ var distance = getDistance(startCoords, nativeEvent);
103
+ if (isEndish(topLevelType) && distance < tapMoveThreshold) {
104
+ event = SyntheticUIEvent.getPooled(eventTypes.touchTap, topLevelTargetID, nativeEvent, nativeEventTarget);
105
+ }
106
+ if (isStartish(topLevelType)) {
107
+ startCoords.x = getAxisCoordOfEvent(Axis.x, nativeEvent);
108
+ startCoords.y = getAxisCoordOfEvent(Axis.y, nativeEvent);
109
+ } else if (isEndish(topLevelType)) {
110
+ startCoords.x = 0;
111
+ startCoords.y = 0;
112
+ }
113
+ EventPropagators.accumulateTwoPhaseDispatches(event);
114
+ return event;
115
+ }
116
+
117
+ };
118
+
119
+ module.exports = TapEventPlugin;
@@ -11,7 +11,7 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- var invariant = require("./invariant");
14
+ var invariant = require('fbjs/lib/invariant');
15
15
 
16
16
  /**
17
17
  * `Transaction` creates a black box that is able to wrap any method such that
@@ -84,10 +84,10 @@ var Mixin = {
84
84
  */
85
85
  reinitializeTransaction: function () {
86
86
  this.transactionWrappers = this.getTransactionWrappers();
87
- if (!this.wrapperInitData) {
88
- this.wrapperInitData = [];
89
- } else {
87
+ if (this.wrapperInitData) {
90
88
  this.wrapperInitData.length = 0;
89
+ } else {
90
+ this.wrapperInitData = [];
91
91
  }
92
92
  this._isInTransaction = false;
93
93
  },
@@ -107,16 +107,22 @@ var Mixin = {
107
107
  /**
108
108
  * Executes the function within a safety window. Use this for the top level
109
109
  * methods that result in large amounts of computation/mutations that would
110
- * need to be safety checked.
110
+ * need to be safety checked. The optional arguments helps prevent the need
111
+ * to bind in many cases.
111
112
  *
112
113
  * @param {function} method Member of scope to call.
113
114
  * @param {Object} scope Scope to invoke from.
114
- * @param {Object?=} args... Arguments to pass to the method (optional).
115
- * Helps prevent need to bind in many cases.
116
- * @return Return value from `method`.
115
+ * @param {Object?=} a Argument to pass to the method.
116
+ * @param {Object?=} b Argument to pass to the method.
117
+ * @param {Object?=} c Argument to pass to the method.
118
+ * @param {Object?=} d Argument to pass to the method.
119
+ * @param {Object?=} e Argument to pass to the method.
120
+ * @param {Object?=} f Argument to pass to the method.
121
+ *
122
+ * @return {*} Return value from `method`.
117
123
  */
118
124
  perform: function (method, scope, a, b, c, d, e, f) {
119
- 'production' !== process.env.NODE_ENV ? invariant(!this.isInTransaction(), 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(!this.isInTransaction());
125
+ !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;
120
126
  var errorThrown;
121
127
  var ret;
122
128
  try {
@@ -180,7 +186,7 @@ var Mixin = {
180
186
  * invoked).
181
187
  */
182
188
  closeAll: function (startIndex) {
183
- 'production' !== process.env.NODE_ENV ? invariant(this.isInTransaction(), 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(this.isInTransaction());
189
+ !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;
184
190
  var transactionWrappers = this.transactionWrappers;
185
191
  for (var i = startIndex; i < transactionWrappers.length; i++) {
186
192
  var wrapper = transactionWrappers[i];