react 0.14.0-alpha1 → 0.14.0-beta2

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 (195) hide show
  1. package/README.md +5 -2
  2. package/addons.js +5 -2
  3. package/dist/JSXTransformer.js +634 -274
  4. package/dist/react-with-addons.js +5376 -4800
  5. package/dist/react-with-addons.min.js +6 -6
  6. package/dist/react.js +5175 -4626
  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 -119
  16. package/lib/DOMPropertyOperations.js +78 -33
  17. package/lib/Danger.js +14 -16
  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 +14 -5
  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 +9 -111
  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 +24 -22
  39. package/lib/ReactClass.js +68 -86
  40. package/lib/ReactComponent.js +22 -17
  41. package/lib/ReactComponentBrowserEnvironment.js +2 -4
  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 +384 -62
  48. package/lib/ReactDOMFactories.js +177 -0
  49. package/lib/ReactDOMIDOperations.js +23 -25
  50. package/lib/ReactDOMInput.js +83 -99
  51. package/lib/ReactDOMOption.js +38 -42
  52. package/lib/ReactDOMSelect.js +88 -98
  53. package/lib/ReactDOMSelection.js +3 -3
  54. package/lib/ReactDOMServer.js +24 -0
  55. package/lib/ReactDOMTextComponent.js +13 -13
  56. package/lib/ReactDOMTextarea.js +48 -61
  57. package/lib/ReactDefaultBatchingStrategy.js +4 -4
  58. package/lib/ReactDefaultInjection.js +34 -71
  59. package/lib/ReactDefaultPerf.js +7 -7
  60. package/lib/ReactDefaultPerfAnalysis.js +6 -9
  61. package/lib/ReactElement.js +35 -92
  62. package/lib/ReactElementValidator.js +53 -130
  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 +70 -0
  72. package/lib/ReactLink.js +1 -1
  73. package/lib/ReactMarkupChecksum.js +6 -2
  74. package/lib/ReactMount.js +90 -89
  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 +72 -33
  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 -3
  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 -9
  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 +24 -27
  145. package/lib/update.js +13 -13
  146. package/lib/validateDOMNesting.js +199 -100
  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/ReactDOMForm.js +0 -47
  168. package/lib/ReactDOMIframe.js +0 -43
  169. package/lib/ReactDOMImg.js +0 -44
  170. package/lib/ReactLifeCycle.js +0 -35
  171. package/lib/camelize.js +0 -32
  172. package/lib/camelizeStyleName.js +0 -40
  173. package/lib/containsNode.js +0 -55
  174. package/lib/createArrayFromMixed.js +0 -85
  175. package/lib/createFullPageComponent.js +0 -51
  176. package/lib/createNodesFromMarkup.js +0 -84
  177. package/lib/emptyFunction.js +0 -38
  178. package/lib/emptyObject.js +0 -20
  179. package/lib/focusNode.js +0 -26
  180. package/lib/getActiveElement.js +0 -29
  181. package/lib/getMarkupWrap.js +0 -115
  182. package/lib/getUnboundedScrollPosition.js +0 -38
  183. package/lib/hyphenate.js +0 -33
  184. package/lib/hyphenateStyleName.js +0 -39
  185. package/lib/invariant.js +0 -49
  186. package/lib/isNode.js +0 -23
  187. package/lib/isTextNode.js +0 -25
  188. package/lib/keyMirror.js +0 -48
  189. package/lib/keyOf.js +0 -35
  190. package/lib/mapObject.js +0 -51
  191. package/lib/performance.js +0 -23
  192. package/lib/performanceNow.js +0 -28
  193. package/lib/shallowEqual.js +0 -48
  194. package/lib/toArray.js +0 -57
  195. package/lib/warning.js +0 -61
@@ -11,26 +11,18 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- var AutoFocusMixin = require("./AutoFocusMixin");
15
- var DOMPropertyOperations = require("./DOMPropertyOperations");
16
- var LinkedValueUtils = require("./LinkedValueUtils");
17
- var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");
18
- var ReactClass = require("./ReactClass");
19
- var ReactElement = require("./ReactElement");
20
- var ReactUpdates = require("./ReactUpdates");
14
+ var LinkedValueUtils = require('./LinkedValueUtils');
15
+ var ReactDOMIDOperations = require('./ReactDOMIDOperations');
16
+ var ReactUpdates = require('./ReactUpdates');
21
17
 
22
- var assign = require("./Object.assign");
23
- var findDOMNode = require("./findDOMNode");
24
- var invariant = require("./invariant");
25
-
26
- var warning = require("./warning");
27
-
28
- var textarea = ReactElement.createFactory('textarea');
18
+ var assign = require('./Object.assign');
19
+ var invariant = require('fbjs/lib/invariant');
20
+ var warning = require('fbjs/lib/warning');
29
21
 
30
22
  function forceUpdateIfMounted() {
31
- /*jshint validthis:true */
32
- if (this.isMounted()) {
33
- this.forceUpdate();
23
+ if (this._rootNodeID) {
24
+ // DOM component is still mounted; update
25
+ ReactDOMTextarea.updateWrapper(this);
34
26
  }
35
27
  }
36
28
 
@@ -49,23 +41,35 @@ function forceUpdateIfMounted() {
49
41
  * The rendered element will be initialized with an empty value, the prop
50
42
  * `defaultValue` if specified, or the children content (deprecated).
51
43
  */
52
- var ReactDOMTextarea = ReactClass.createClass({
53
- displayName: 'ReactDOMTextarea',
54
- tagName: 'TEXTAREA',
44
+ var ReactDOMTextarea = {
45
+ getNativeProps: function (inst, props, context) {
46
+ !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;
55
47
 
56
- mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],
48
+ // Always set children to the same thing. In IE9, the selection range will
49
+ // get reset if `textContent` is mutated.
50
+ var nativeProps = assign({}, props, {
51
+ defaultValue: undefined,
52
+ value: undefined,
53
+ children: inst._wrapperState.initialValue,
54
+ onChange: inst._wrapperState.onChange
55
+ });
56
+
57
+ return nativeProps;
58
+ },
57
59
 
58
- getInitialState: function () {
59
- var defaultValue = this.props.defaultValue;
60
+ mountWrapper: function (inst, props) {
61
+ LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
62
+
63
+ var defaultValue = props.defaultValue;
60
64
  // TODO (yungsters): Remove support for children content in <textarea>.
61
- var children = this.props.children;
65
+ var children = props.children;
62
66
  if (children != null) {
63
- if ('production' !== process.env.NODE_ENV) {
64
- 'production' !== process.env.NODE_ENV ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : null;
67
+ if (process.env.NODE_ENV !== 'production') {
68
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;
65
69
  }
66
- 'production' !== process.env.NODE_ENV ? invariant(defaultValue == null, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(defaultValue == null);
70
+ !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;
67
71
  if (Array.isArray(children)) {
68
- 'production' !== process.env.NODE_ENV ? invariant(children.length <= 1, '<textarea> can only have at most one child.') : invariant(children.length <= 1);
72
+ !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;
69
73
  children = children[0];
70
74
  }
71
75
 
@@ -74,51 +78,34 @@ var ReactDOMTextarea = ReactClass.createClass({
74
78
  if (defaultValue == null) {
75
79
  defaultValue = '';
76
80
  }
77
- var value = LinkedValueUtils.getValue(this.props);
78
- return {
81
+ var value = LinkedValueUtils.getValue(props);
82
+
83
+ inst._wrapperState = {
79
84
  // We save the initial value so that `ReactDOMComponent` doesn't update
80
85
  // `textContent` (unnecessary since we update value).
81
86
  // The initial value can be a boolean or object so that's why it's
82
87
  // forced to be a string.
83
- initialValue: '' + (value != null ? value : defaultValue)
88
+ initialValue: '' + (value != null ? value : defaultValue),
89
+ onChange: _handleChange.bind(inst)
84
90
  };
85
91
  },
86
92
 
87
- render: function () {
88
- // Clone `this.props` so we don't mutate the input.
89
- var props = assign({}, this.props);
90
-
91
- 'production' !== process.env.NODE_ENV ? invariant(props.dangerouslySetInnerHTML == null, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(props.dangerouslySetInnerHTML == null);
92
-
93
- props.defaultValue = null;
94
- props.value = null;
95
- props.onChange = this._handleChange;
96
-
97
- // Always set children to the same thing. In IE9, the selection range will
98
- // get reset if `textContent` is mutated.
99
- return textarea(props, this.state.initialValue);
100
- },
101
-
102
- componentDidUpdate: function (prevProps, prevState, prevContext) {
103
- var value = LinkedValueUtils.getValue(this.props);
93
+ updateWrapper: function (inst) {
94
+ var props = inst._currentElement.props;
95
+ var value = LinkedValueUtils.getValue(props);
104
96
  if (value != null) {
105
- var rootNode = findDOMNode(this);
106
97
  // Cast `value` to a string to ensure the value is set correctly. While
107
98
  // browsers typically do this as necessary, jsdom doesn't.
108
- DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);
99
+ ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);
109
100
  }
110
- },
111
-
112
- _handleChange: function (event) {
113
- var returnValue;
114
- var onChange = LinkedValueUtils.getOnChange(this.props);
115
- if (onChange) {
116
- returnValue = onChange.call(this, event);
117
- }
118
- ReactUpdates.asap(forceUpdateIfMounted, this);
119
- return returnValue;
120
101
  }
102
+ };
121
103
 
122
- });
104
+ function _handleChange(event) {
105
+ var props = this._currentElement.props;
106
+ var returnValue = LinkedValueUtils.executeOnChange(props, event);
107
+ ReactUpdates.asap(forceUpdateIfMounted, this);
108
+ return returnValue;
109
+ }
123
110
 
124
111
  module.exports = ReactDOMTextarea;
@@ -11,11 +11,11 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- var ReactUpdates = require("./ReactUpdates");
15
- var Transaction = require("./Transaction");
14
+ var ReactUpdates = require('./ReactUpdates');
15
+ var Transaction = require('./Transaction');
16
16
 
17
- var assign = require("./Object.assign");
18
- var emptyFunction = require("./emptyFunction");
17
+ var assign = require('./Object.assign');
18
+ var emptyFunction = require('fbjs/lib/emptyFunction');
19
19
 
20
20
  var RESET_BATCHED_UPDATES = {
21
21
  initialize: emptyFunction,
@@ -11,58 +11,40 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- var BeforeInputEventPlugin = require("./BeforeInputEventPlugin");
15
- var ChangeEventPlugin = require("./ChangeEventPlugin");
16
- var ClientReactRootIndex = require("./ClientReactRootIndex");
17
- var DefaultEventPluginOrder = require("./DefaultEventPluginOrder");
18
- var EnterLeaveEventPlugin = require("./EnterLeaveEventPlugin");
19
- var ExecutionEnvironment = require("./ExecutionEnvironment");
20
- var HTMLDOMPropertyConfig = require("./HTMLDOMPropertyConfig");
21
- var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");
22
- var ReactClass = require("./ReactClass");
23
- var ReactComponentBrowserEnvironment = require("./ReactComponentBrowserEnvironment");
24
- var ReactDefaultBatchingStrategy = require("./ReactDefaultBatchingStrategy");
25
- var ReactDOMComponent = require("./ReactDOMComponent");
26
- var ReactDOMButton = require("./ReactDOMButton");
27
- var ReactDOMForm = require("./ReactDOMForm");
28
- var ReactDOMImg = require("./ReactDOMImg");
29
- var ReactDOMIDOperations = require("./ReactDOMIDOperations");
30
- var ReactDOMIframe = require("./ReactDOMIframe");
31
- var ReactDOMInput = require("./ReactDOMInput");
32
- var ReactDOMOption = require("./ReactDOMOption");
33
- var ReactDOMSelect = require("./ReactDOMSelect");
34
- var ReactDOMTextarea = require("./ReactDOMTextarea");
35
- var ReactDOMTextComponent = require("./ReactDOMTextComponent");
36
- var ReactElement = require("./ReactElement");
37
- var ReactEventListener = require("./ReactEventListener");
38
- var ReactInjection = require("./ReactInjection");
39
- var ReactInstanceHandles = require("./ReactInstanceHandles");
40
- var ReactInstanceMap = require("./ReactInstanceMap");
41
- var ReactMount = require("./ReactMount");
42
- var ReactReconcileTransaction = require("./ReactReconcileTransaction");
43
- var SelectEventPlugin = require("./SelectEventPlugin");
44
- var ServerReactRootIndex = require("./ServerReactRootIndex");
45
- var SimpleEventPlugin = require("./SimpleEventPlugin");
46
- var SVGDOMPropertyConfig = require("./SVGDOMPropertyConfig");
47
-
48
- var createFullPageComponent = require("./createFullPageComponent");
49
-
50
- function autoGenerateWrapperClass(type) {
51
- return ReactClass.createClass({
52
- tagName: type.toUpperCase(),
53
- render: function () {
54
- // Copy owner down for debugging info
55
- var internalInstance = ReactInstanceMap.get(this);
56
- return new ReactElement(type, null, // key
57
- null, // ref
58
- internalInstance._currentElement._owner, // owner
59
- null, // context
60
- this.props);
61
- }
62
- });
63
- }
14
+ var BeforeInputEventPlugin = require('./BeforeInputEventPlugin');
15
+ var ChangeEventPlugin = require('./ChangeEventPlugin');
16
+ var ClientReactRootIndex = require('./ClientReactRootIndex');
17
+ var DefaultEventPluginOrder = require('./DefaultEventPluginOrder');
18
+ var EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');
19
+ var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
20
+ var HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');
21
+ var ReactBrowserComponentMixin = require('./ReactBrowserComponentMixin');
22
+ var ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');
23
+ var ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');
24
+ var ReactDOMComponent = require('./ReactDOMComponent');
25
+ var ReactDOMIDOperations = require('./ReactDOMIDOperations');
26
+ var ReactDOMTextComponent = require('./ReactDOMTextComponent');
27
+ var ReactEventListener = require('./ReactEventListener');
28
+ var ReactInjection = require('./ReactInjection');
29
+ var ReactInstanceHandles = require('./ReactInstanceHandles');
30
+ var ReactMount = require('./ReactMount');
31
+ var ReactReconcileTransaction = require('./ReactReconcileTransaction');
32
+ var SelectEventPlugin = require('./SelectEventPlugin');
33
+ var ServerReactRootIndex = require('./ServerReactRootIndex');
34
+ var SimpleEventPlugin = require('./SimpleEventPlugin');
35
+ var SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');
36
+
37
+ var alreadyInjected = false;
64
38
 
65
39
  function inject() {
40
+ if (alreadyInjected) {
41
+ // TODO: This is currently true because these injections are shared between
42
+ // the client and the server package. They should be built independently
43
+ // and not share any injection state. Then this problem will be solved.
44
+ return;
45
+ }
46
+ alreadyInjected = true;
47
+
66
48
  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
67
49
 
68
50
  /**
@@ -88,27 +70,8 @@ function inject() {
88
70
 
89
71
  ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
90
72
 
91
- ReactInjection.NativeComponent.injectAutoWrapper(autoGenerateWrapperClass);
92
-
93
- // This needs to happen before createFullPageComponent() otherwise the mixin
94
- // won't be included.
95
73
  ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
96
74
 
97
- ReactInjection.NativeComponent.injectComponentClasses({
98
- 'button': ReactDOMButton,
99
- 'form': ReactDOMForm,
100
- 'iframe': ReactDOMIframe,
101
- 'img': ReactDOMImg,
102
- 'input': ReactDOMInput,
103
- 'option': ReactDOMOption,
104
- 'select': ReactDOMSelect,
105
- 'textarea': ReactDOMTextarea,
106
-
107
- 'html': createFullPageComponent('html'),
108
- 'head': createFullPageComponent('head'),
109
- 'body': createFullPageComponent('body')
110
- });
111
-
112
75
  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
113
76
  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
114
77
 
@@ -122,10 +85,10 @@ function inject() {
122
85
  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
123
86
  ReactInjection.DOMComponent.injectIDOperations(ReactDOMIDOperations);
124
87
 
125
- if ('production' !== process.env.NODE_ENV) {
88
+ if (process.env.NODE_ENV !== 'production') {
126
89
  var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
127
90
  if (/[?&]react_perf\b/.test(url)) {
128
- var ReactDefaultPerf = require("./ReactDefaultPerf");
91
+ var ReactDefaultPerf = require('./ReactDefaultPerf');
129
92
  ReactDefaultPerf.start();
130
93
  }
131
94
  }
@@ -12,12 +12,12 @@
12
12
 
13
13
  'use strict';
14
14
 
15
- var DOMProperty = require("./DOMProperty");
16
- var ReactDefaultPerfAnalysis = require("./ReactDefaultPerfAnalysis");
17
- var ReactMount = require("./ReactMount");
18
- var ReactPerf = require("./ReactPerf");
15
+ var DOMProperty = require('./DOMProperty');
16
+ var ReactDefaultPerfAnalysis = require('./ReactDefaultPerfAnalysis');
17
+ var ReactMount = require('./ReactMount');
18
+ var ReactPerf = require('./ReactPerf');
19
19
 
20
- var performanceNow = require("./performanceNow");
20
+ var performanceNow = require('fbjs/lib/performanceNow');
21
21
 
22
22
  function roundFloat(val) {
23
23
  return Math.floor(val * 100) / 100;
@@ -103,8 +103,8 @@ var ReactDefaultPerf = {
103
103
  console.table(summary.map(function (item) {
104
104
  var result = {};
105
105
  result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
106
- result['type'] = item.type;
107
- result['args'] = JSON.stringify(item.args);
106
+ result.type = item.type;
107
+ result.args = JSON.stringify(item.args);
108
108
  return result;
109
109
  }));
110
110
  console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
@@ -11,7 +11,7 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- var assign = require("./Object.assign");
14
+ var assign = require('./Object.assign');
15
15
 
16
16
  // Don't try to save users less than 1.2ms (a number I made up)
17
17
  var DONT_CARE_THRESHOLD = 1.2;
@@ -20,11 +20,11 @@ var DOM_OPERATION_TYPES = {
20
20
  INSERT_MARKUP: 'set innerHTML',
21
21
  MOVE_EXISTING: 'move',
22
22
  REMOVE_NODE: 'remove',
23
+ SET_MARKUP: 'set innerHTML',
23
24
  TEXT_CONTENT: 'set textContent',
24
25
  'updatePropertyByID': 'update attribute',
25
26
  'deletePropertyByID': 'delete attribute',
26
27
  'updateStylesByID': 'update styles',
27
- 'updateInnerHTMLByID': 'set innerHTML',
28
28
  'dangerouslyReplaceNodeWithMarkupByID': 'replace'
29
29
  };
30
30
 
@@ -43,11 +43,8 @@ function getTotalTime(measurements) {
43
43
 
44
44
  function getDOMSummary(measurements) {
45
45
  var items = [];
46
- for (var i = 0; i < measurements.length; i++) {
47
- var measurement = measurements[i];
48
- var id;
49
-
50
- for (id in measurement.writes) {
46
+ measurements.forEach(function (measurement) {
47
+ Object.keys(measurement.writes).forEach(function (id) {
51
48
  measurement.writes[id].forEach(function (write) {
52
49
  items.push({
53
50
  id: id,
@@ -55,8 +52,8 @@ function getDOMSummary(measurements) {
55
52
  args: write.args
56
53
  });
57
54
  });
58
- }
59
- }
55
+ });
56
+ });
60
57
  return items;
61
58
  }
62
59
 
@@ -11,79 +11,27 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- var ReactContext = require("./ReactContext");
15
- var ReactCurrentOwner = require("./ReactCurrentOwner");
14
+ var ReactCurrentOwner = require('./ReactCurrentOwner');
16
15
 
17
- var assign = require("./Object.assign");
18
- var warning = require("./warning");
16
+ var assign = require('./Object.assign');
19
17
 
20
18
  var RESERVED_PROPS = {
21
19
  key: true,
22
20
  ref: true
23
21
  };
24
22
 
25
- /**
26
- * Warn for mutations.
27
- *
28
- * @internal
29
- * @param {object} object
30
- * @param {string} key
31
- */
32
- function defineWarningProperty(object, key) {
33
- Object.defineProperty(object, key, {
34
-
35
- configurable: false,
36
- enumerable: true,
37
-
38
- get: function () {
39
- if (!this._store) {
40
- return null;
41
- }
42
- return this._store[key];
43
- },
44
-
45
- set: function (value) {
46
- 'production' !== process.env.NODE_ENV ? warning(false, 'Don\'t set the %s property of the React element. Instead, ' + 'specify the correct value when initially creating the element.', key) : null;
47
- this._store[key] = value;
48
- }
49
-
50
- });
51
- }
52
-
53
- /**
54
- * This is updated to true if the membrane is successfully created.
55
- */
56
- var useMutationMembrane = false;
57
-
58
- /**
59
- * Warn for mutations.
60
- *
61
- * @internal
62
- * @param {object} element
63
- */
64
- function defineMutationMembrane(prototype) {
65
- try {
66
- var pseudoFrozenProperties = {
67
- props: true
68
- };
69
- for (var key in pseudoFrozenProperties) {
70
- defineWarningProperty(prototype, key);
71
- }
72
- useMutationMembrane = true;
73
- } catch (x) {}
74
- }
75
-
76
23
  /**
77
24
  * Base constructor for all React elements. This is only used to make this
78
25
  * work with a dynamic instanceof check. Nothing should live on this prototype.
79
26
  *
80
27
  * @param {*} type
81
- * @param {string|object} ref
82
28
  * @param {*} key
29
+ * @param {string|object} ref
30
+ * @param {*} owner
83
31
  * @param {*} props
84
32
  * @internal
85
33
  */
86
- var ReactElement = function (type, key, ref, owner, context, props) {
34
+ var ReactElement = function (type, key, ref, owner, props) {
87
35
  // Built-in properties that belong on the element
88
36
  this.type = type;
89
37
  this.key = key;
@@ -92,23 +40,32 @@ var ReactElement = function (type, key, ref, owner, context, props) {
92
40
  // Record the component responsible for creating this element.
93
41
  this._owner = owner;
94
42
 
95
- if ('production' !== process.env.NODE_ENV) {
96
- // The validation flag and props are currently mutative. We put them on
43
+ this.props = props;
44
+
45
+ if (process.env.NODE_ENV !== 'production') {
46
+ // The validation flag is currently mutative. We put it on
97
47
  // an external backing store so that we can freeze the whole object.
98
48
  // This can be replaced with a WeakMap once they are implemented in
99
49
  // commonly used development environments.
100
- this._store = { props: props, originalProps: assign({}, props) };
50
+ this._store = {};
101
51
 
102
- // We're not allowed to set props directly on the object so we early
103
- // return and rely on the prototype membrane to forward to the backing
104
- // store.
105
- if (useMutationMembrane) {
106
- Object.freeze(this);
107
- return;
52
+ // To make comparing ReactElements easier for testing purposes, we make
53
+ // the validation flag non-enumerable (where possible, which should
54
+ // include every environment we run tests in), so the test framework
55
+ // ignores it.
56
+ try {
57
+ Object.defineProperty(this._store, 'validated', {
58
+ configurable: false,
59
+ enumerable: false,
60
+ writable: true,
61
+ value: false
62
+ });
63
+ } catch (x) {
64
+ this._store.validated = false;
108
65
  }
66
+ Object.freeze(this.props);
67
+ Object.freeze(this);
109
68
  }
110
-
111
- this.props = props;
112
69
  };
113
70
 
114
71
  // We intentionally don't expose the function on the constructor property.
@@ -117,10 +74,6 @@ ReactElement.prototype = {
117
74
  _isReactElement: true
118
75
  };
119
76
 
120
- if ('production' !== process.env.NODE_ENV) {
121
- defineMutationMembrane(ReactElement.prototype);
122
- }
123
-
124
77
  ReactElement.createElement = function (type, config, children) {
125
78
  var propName;
126
79
 
@@ -148,20 +101,6 @@ ReactElement.createElement = function (type, config, children) {
148
101
  props.children = children;
149
102
  } else if (childrenLength > 1) {
150
103
  var childArray = Array(childrenLength);
151
-
152
- // To make comparing ReactElements easier for testing purposes, we make
153
- // the validation flag non-enumerable (where possible, which should
154
- // include every environment we run tests in), so the test framework
155
- // ignores it.
156
- try {
157
- Object.defineProperty(childArray, '_reactChildKeysValidated', {
158
- configurable: false,
159
- enumerable: false,
160
- writable: true
161
- });
162
- } catch (x) {}
163
- childArray._reactChildKeysValidated = true;
164
-
165
104
  for (var i = 0; i < childrenLength; i++) {
166
105
  childArray[i] = arguments[i + 2];
167
106
  }
@@ -178,7 +117,7 @@ ReactElement.createElement = function (type, config, children) {
178
117
  }
179
118
  }
180
119
 
181
- return new ReactElement(type, key, ref, ReactCurrentOwner.current, ReactContext.current, props);
120
+ return new ReactElement(type, key, ref, ReactCurrentOwner.current, props);
182
121
  };
183
122
 
184
123
  ReactElement.createFactory = function (type) {
@@ -193,7 +132,13 @@ ReactElement.createFactory = function (type) {
193
132
  };
194
133
 
195
134
  ReactElement.cloneAndReplaceProps = function (oldElement, newProps) {
196
- var newElement = new ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._owner, oldElement._context, newProps);
135
+ var newElement = new ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._owner, newProps);
136
+
137
+ if (process.env.NODE_ENV !== 'production') {
138
+ // If the key on the original is valid, then the clone is valid
139
+ newElement._store.validated = oldElement._store.validated;
140
+ }
141
+
197
142
  return newElement;
198
143
  };
199
144
 
@@ -240,7 +185,7 @@ ReactElement.cloneElement = function (element, config, children) {
240
185
  props.children = childArray;
241
186
  }
242
187
 
243
- return new ReactElement(element.type, key, ref, owner, element._context, props);
188
+ return new ReactElement(element.type, key, ref, owner, props);
244
189
  };
245
190
 
246
191
  /**
@@ -262,6 +207,4 @@ ReactElement.isValidElement = function (object) {
262
207
  return isElement;
263
208
  };
264
209
 
265
- module.exports = ReactElement;
266
-
267
- // IE will fail on defineProperty
210
+ module.exports = ReactElement;