react 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +10 -231
  2. package/addons.js +1 -0
  3. package/lib/AutoFocusMixin.js +30 -0
  4. package/lib/CSSCore.js +115 -0
  5. package/lib/CSSProperty.js +121 -0
  6. package/lib/CSSPropertyOperations.js +97 -0
  7. package/lib/ChangeEventPlugin.js +387 -0
  8. package/lib/ClientReactRootIndex.js +30 -0
  9. package/lib/CompositionEventPlugin.js +260 -0
  10. package/lib/DOMChildrenOperations.js +165 -0
  11. package/lib/DOMProperty.js +268 -0
  12. package/lib/DOMPropertyOperations.js +181 -0
  13. package/lib/Danger.js +187 -0
  14. package/lib/DefaultDOMPropertyConfig.js +203 -0
  15. package/lib/DefaultEventPluginOrder.js +44 -0
  16. package/lib/EnterLeaveEventPlugin.js +145 -0
  17. package/lib/EventConstants.js +76 -0
  18. package/lib/EventListener.js +69 -0
  19. package/lib/EventPluginHub.js +293 -0
  20. package/lib/EventPluginRegistry.js +281 -0
  21. package/lib/EventPluginUtils.js +214 -0
  22. package/lib/EventPropagators.js +143 -0
  23. package/lib/ExecutionEnvironment.js +44 -0
  24. package/lib/LinkedStateMixin.js +46 -0
  25. package/lib/LinkedValueUtils.js +161 -0
  26. package/lib/MobileSafariClickEventPlugin.js +63 -0
  27. package/lib/PooledClass.js +119 -0
  28. package/lib/React.js +95 -0
  29. package/lib/ReactCSSTransitionGroup.js +65 -0
  30. package/lib/ReactCSSTransitionGroupChild.js +138 -0
  31. package/lib/ReactChildren.js +132 -0
  32. package/lib/ReactComponent.js +550 -0
  33. package/lib/ReactComponentBrowserEnvironment.js +158 -0
  34. package/lib/ReactComponentEnvironment.js +26 -0
  35. package/lib/ReactCompositeComponent.js +1455 -0
  36. package/lib/ReactContext.js +67 -0
  37. package/lib/ReactCurrentOwner.js +39 -0
  38. package/lib/ReactDOM.js +207 -0
  39. package/lib/ReactDOMButton.js +68 -0
  40. package/lib/ReactDOMComponent.js +399 -0
  41. package/lib/ReactDOMForm.js +59 -0
  42. package/lib/ReactDOMIDOperations.js +218 -0
  43. package/lib/ReactDOMImg.js +58 -0
  44. package/lib/ReactDOMInput.js +181 -0
  45. package/lib/ReactDOMOption.js +51 -0
  46. package/lib/ReactDOMSelect.js +179 -0
  47. package/lib/ReactDOMSelection.js +189 -0
  48. package/lib/ReactDOMTextarea.js +140 -0
  49. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  50. package/lib/ReactDefaultInjection.js +115 -0
  51. package/lib/ReactDefaultPerf.js +244 -0
  52. package/lib/ReactDefaultPerfAnalysis.js +199 -0
  53. package/lib/ReactErrorUtils.js +37 -0
  54. package/lib/ReactEventEmitter.js +339 -0
  55. package/lib/ReactEventEmitterMixin.js +57 -0
  56. package/lib/ReactEventTopLevelCallback.js +149 -0
  57. package/lib/ReactInjection.js +39 -0
  58. package/lib/ReactInputSelection.js +140 -0
  59. package/lib/ReactInstanceHandles.js +338 -0
  60. package/lib/ReactLink.js +54 -0
  61. package/lib/ReactMarkupChecksum.js +53 -0
  62. package/lib/ReactMount.js +641 -0
  63. package/lib/ReactMountReady.js +95 -0
  64. package/lib/ReactMultiChild.js +425 -0
  65. package/lib/ReactMultiChildUpdateTypes.js +38 -0
  66. package/lib/ReactOwner.js +154 -0
  67. package/lib/ReactPerf.js +85 -0
  68. package/lib/ReactPropTransferer.js +147 -0
  69. package/lib/ReactPropTypeLocationNames.js +31 -0
  70. package/lib/ReactPropTypeLocations.js +29 -0
  71. package/lib/ReactPropTypes.js +359 -0
  72. package/lib/ReactPutListenerQueue.js +61 -0
  73. package/lib/ReactReconcileTransaction.js +181 -0
  74. package/lib/ReactRootIndex.js +36 -0
  75. package/lib/ReactServerRendering.js +59 -0
  76. package/lib/ReactStateSetters.js +111 -0
  77. package/lib/ReactTestUtils.js +394 -0
  78. package/lib/ReactTextComponent.js +99 -0
  79. package/lib/ReactTransitionChildMapping.js +106 -0
  80. package/lib/ReactTransitionEvents.js +97 -0
  81. package/lib/ReactTransitionGroup.js +187 -0
  82. package/lib/ReactUpdates.js +148 -0
  83. package/lib/ReactWithAddons.js +51 -0
  84. package/lib/SelectEventPlugin.js +200 -0
  85. package/lib/ServerReactRootIndex.js +36 -0
  86. package/lib/SimpleEventPlugin.js +413 -0
  87. package/lib/SyntheticClipboardEvent.js +51 -0
  88. package/lib/SyntheticCompositionEvent.js +51 -0
  89. package/lib/SyntheticDragEvent.js +44 -0
  90. package/lib/SyntheticEvent.js +164 -0
  91. package/lib/SyntheticFocusEvent.js +44 -0
  92. package/lib/SyntheticKeyboardEvent.js +58 -0
  93. package/lib/SyntheticMouseEvent.js +85 -0
  94. package/lib/SyntheticTouchEvent.js +50 -0
  95. package/lib/SyntheticUIEvent.js +45 -0
  96. package/lib/SyntheticWheelEvent.js +66 -0
  97. package/lib/Transaction.js +276 -0
  98. package/lib/ViewportMetrics.js +37 -0
  99. package/lib/accumulate.js +54 -0
  100. package/lib/adler32.js +39 -0
  101. package/lib/cloneWithProps.js +59 -0
  102. package/lib/containsNode.js +49 -0
  103. package/lib/copyProperties.js +54 -0
  104. package/lib/createArrayFrom.js +91 -0
  105. package/lib/createFullPageComponent.js +63 -0
  106. package/lib/createNodesFromMarkup.js +93 -0
  107. package/lib/createObjectFrom.js +61 -0
  108. package/lib/cx.js +44 -0
  109. package/lib/dangerousStyleValue.js +57 -0
  110. package/lib/emptyFunction.js +43 -0
  111. package/lib/escapeTextForBrowser.js +47 -0
  112. package/lib/flattenChildren.js +57 -0
  113. package/lib/forEachAccumulated.js +36 -0
  114. package/lib/getActiveElement.js +34 -0
  115. package/lib/getEventKey.js +85 -0
  116. package/lib/getEventTarget.js +36 -0
  117. package/lib/getMarkupWrap.js +118 -0
  118. package/lib/getNodeForCharacterOffset.js +80 -0
  119. package/lib/getReactRootElementInContainer.js +40 -0
  120. package/lib/getTextContentAccessor.js +42 -0
  121. package/lib/getUnboundedScrollPosition.js +45 -0
  122. package/lib/hyphenate.js +35 -0
  123. package/lib/invariant.js +62 -0
  124. package/lib/isEventSupported.js +70 -0
  125. package/lib/isNode.js +33 -0
  126. package/lib/isTextInputElement.js +49 -0
  127. package/lib/isTextNode.js +30 -0
  128. package/lib/joinClasses.js +44 -0
  129. package/lib/keyMirror.js +58 -0
  130. package/lib/keyOf.js +41 -0
  131. package/lib/memoizeStringOnly.js +39 -0
  132. package/lib/merge.js +37 -0
  133. package/lib/mergeHelpers.js +136 -0
  134. package/lib/mergeInto.js +45 -0
  135. package/lib/mixInto.js +34 -0
  136. package/lib/objMap.js +47 -0
  137. package/lib/objMapKeyVal.js +47 -0
  138. package/lib/onlyChild.js +43 -0
  139. package/lib/performanceNow.js +42 -0
  140. package/lib/shallowEqual.js +49 -0
  141. package/lib/shouldUpdateReactComponent.js +58 -0
  142. package/lib/toArray.js +75 -0
  143. package/lib/traverseAllChildren.js +189 -0
  144. package/lib/warning.js +48 -0
  145. package/package.json +33 -21
  146. package/react.js +1 -0
  147. package/.npmignore +0 -7
  148. package/.travis.yml +0 -7
  149. package/Jakefile.js +0 -39
  150. package/LICENSE +0 -19
  151. package/browser-test/dist.html +0 -90
  152. package/browser-test/index.html +0 -86
  153. package/browser-test/min.html +0 -90
  154. package/dist/react.js +0 -3141
  155. package/dist/react.min.js +0 -22
  156. package/doc/advanced.md +0 -174
  157. package/doc/color-def.graffle +0 -938
  158. package/doc/color-def.png +0 -0
  159. package/doc/simple.dot +0 -25
  160. package/doc/simple.png +0 -0
  161. package/examples/longer-example.js +0 -41
  162. package/examples/simple.js +0 -45
  163. package/examples/using-ast-directly.js +0 -30
  164. package/examples/using-events1.js +0 -79
  165. package/examples/using-log-events.js +0 -43
  166. package/lib/base-task.js +0 -120
  167. package/lib/cb-task.js +0 -84
  168. package/lib/core.js +0 -138
  169. package/lib/dsl.js +0 -138
  170. package/lib/error.js +0 -55
  171. package/lib/event-collector.js +0 -81
  172. package/lib/event-manager.js +0 -89
  173. package/lib/eventemitter.js +0 -20
  174. package/lib/finalcb-first-task.js +0 -68
  175. package/lib/finalcb-task.js +0 -65
  176. package/lib/id.js +0 -22
  177. package/lib/input-parser.js +0 -56
  178. package/lib/log-events.js +0 -101
  179. package/lib/parse.js +0 -41
  180. package/lib/promise-resolve.js +0 -50
  181. package/lib/promise-task.js +0 -93
  182. package/lib/react.js +0 -59
  183. package/lib/ret-task.js +0 -71
  184. package/lib/sprintf.js +0 -18
  185. package/lib/status.js +0 -14
  186. package/lib/task.js +0 -251
  187. package/lib/track-tasks.js +0 -74
  188. package/lib/validate.js +0 -159
  189. package/lib/vcon.js +0 -113
  190. package/lib/when-task.js +0 -84
  191. package/src/dist.build.requirejs +0 -20
  192. package/test/ast.mocha.js +0 -136
  193. package/test/cb-task.mocha.js +0 -220
  194. package/test/core-deferred.mocha.js +0 -143
  195. package/test/core-when.mocha.js +0 -96
  196. package/test/core.mocha.js +0 -589
  197. package/test/dsl.mocha.js +0 -352
  198. package/test/event-manager.mocha.js +0 -119
  199. package/test/exec-options.mocha.js +0 -48
  200. package/test/finalcb-task.mocha.js +0 -58
  201. package/test/input-parser.mocha.js +0 -86
  202. package/test/log-events.mocha.js +0 -88
  203. package/test/mocha.opts +0 -2
  204. package/test/module-use.mocha.js +0 -164
  205. package/test/promise-auto-resolve.mocha.js +0 -68
  206. package/test/ret-task.mocha.js +0 -220
  207. package/test/task.mocha.js +0 -42
  208. package/test/validate-cb-task.mocha.js +0 -100
  209. package/test/validate-ret-task.mocha.js +0 -110
  210. package/test/validate.mocha.js +0 -324
  211. package/test/vcon.mocha.js +0 -193
  212. package/vendor/chai/chai.js +0 -4251
  213. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  214. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  215. package/vendor/node/util.js +0 -531
  216. package/vendor/requirejs/require.js +0 -2045
  217. package/vendor/requirejs/require.min.js +0 -36
@@ -0,0 +1,54 @@
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 accumulate
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var invariant = require("./invariant");
22
+
23
+ /**
24
+ * Accumulates items that must not be null or undefined.
25
+ *
26
+ * This is used to conserve memory by avoiding array allocations.
27
+ *
28
+ * @return {*|array<*>} An accumulation of items.
29
+ */
30
+ function accumulate(current, next) {
31
+ ("production" !== process.env.NODE_ENV ? invariant(
32
+ next != null,
33
+ 'accumulate(...): Accumulated items must be not be null or undefined.'
34
+ ) : invariant(next != null));
35
+ if (current == null) {
36
+ return next;
37
+ } else {
38
+ // Both are not empty. Warning: Never call x.concat(y) when you are not
39
+ // certain that x is an Array (x could be a string with concat method).
40
+ var currentIsArray = Array.isArray(current);
41
+ var nextIsArray = Array.isArray(next);
42
+ if (currentIsArray) {
43
+ return current.concat(next);
44
+ } else {
45
+ if (nextIsArray) {
46
+ return [current].concat(next);
47
+ } else {
48
+ return [current, next];
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ module.exports = accumulate;
package/lib/adler32.js ADDED
@@ -0,0 +1,39 @@
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 adler32
17
+ */
18
+
19
+ /* jslint bitwise:true */
20
+
21
+ "use strict";
22
+
23
+ var MOD = 65521;
24
+
25
+ // This is a clean-room implementation of adler32 designed for detecting
26
+ // if markup is not what we expect it to be. It does not need to be
27
+ // cryptographically strong, only reasonable good at detecting if markup
28
+ // generated on the server is different than that on the client.
29
+ function adler32(data) {
30
+ var a = 1;
31
+ var b = 0;
32
+ for (var i = 0; i < data.length; i++) {
33
+ a = (a + data.charCodeAt(i)) % MOD;
34
+ b = (b + a) % MOD;
35
+ }
36
+ return a | (b << 16);
37
+ }
38
+
39
+ module.exports = adler32;
@@ -0,0 +1,59 @@
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
+ * @typechecks
17
+ * @providesModule cloneWithProps
18
+ */
19
+
20
+ "use strict";
21
+
22
+ var ReactPropTransferer = require("./ReactPropTransferer");
23
+
24
+ var keyOf = require("./keyOf");
25
+
26
+ var CHILDREN_PROP = keyOf({children: null});
27
+
28
+ /**
29
+ * Sometimes you want to change the props of a child passed to you. Usually
30
+ * this is to add a CSS class.
31
+ *
32
+ * @param {object} child child component you'd like to clone
33
+ * @param {object} props props you'd like to modify. They will be merged
34
+ * as if you used `transferPropsTo()`.
35
+ * @return {object} a clone of child with props merged in.
36
+ */
37
+ function cloneWithProps(child, props) {
38
+ if ("production" !== process.env.NODE_ENV) {
39
+ if (child.props.ref) {
40
+ console.warn(
41
+ 'You are calling cloneWithProps() on a child with a ref. This is ' +
42
+ 'dangerous because you\'re creating a new child which will not be ' +
43
+ 'added as a ref to its parent.'
44
+ );
45
+ }
46
+ }
47
+
48
+ var newProps = ReactPropTransferer.mergeProps(props, child.props);
49
+
50
+ // Use `child.props.children` if it is provided.
51
+ if (!newProps.hasOwnProperty(CHILDREN_PROP) &&
52
+ child.props.hasOwnProperty(CHILDREN_PROP)) {
53
+ newProps.children = child.props.children;
54
+ }
55
+
56
+ return child.constructor.ConvenienceConstructor(newProps);
57
+ }
58
+
59
+ module.exports = cloneWithProps;
@@ -0,0 +1,49 @@
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 containsNode
17
+ * @typechecks
18
+ */
19
+
20
+ var isTextNode = require("./isTextNode");
21
+
22
+ /*jslint bitwise:true */
23
+
24
+ /**
25
+ * Checks if a given DOM node contains or is another DOM node.
26
+ *
27
+ * @param {?DOMNode} outerNode Outer DOM node.
28
+ * @param {?DOMNode} innerNode Inner DOM node.
29
+ * @return {boolean} True if `outerNode` contains or is `innerNode`.
30
+ */
31
+ function containsNode(outerNode, innerNode) {
32
+ if (!outerNode || !innerNode) {
33
+ return false;
34
+ } else if (outerNode === innerNode) {
35
+ return true;
36
+ } else if (isTextNode(outerNode)) {
37
+ return false;
38
+ } else if (isTextNode(innerNode)) {
39
+ return containsNode(outerNode, innerNode.parentNode);
40
+ } else if (outerNode.contains) {
41
+ return outerNode.contains(innerNode);
42
+ } else if (outerNode.compareDocumentPosition) {
43
+ return !!(outerNode.compareDocumentPosition(innerNode) & 16);
44
+ } else {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ module.exports = containsNode;
@@ -0,0 +1,54 @@
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 copyProperties
17
+ */
18
+
19
+ /**
20
+ * Copy properties from one or more objects (up to 5) into the first object.
21
+ * This is a shallow copy. It mutates the first object and also returns it.
22
+ *
23
+ * NOTE: `arguments` has a very significant performance penalty, which is why
24
+ * we don't support unlimited arguments.
25
+ */
26
+ function copyProperties(obj, a, b, c, d, e, f) {
27
+ obj = obj || {};
28
+
29
+ if ("production" !== process.env.NODE_ENV) {
30
+ if (f) {
31
+ throw new Error('Too many arguments passed to copyProperties');
32
+ }
33
+ }
34
+
35
+ var args = [a, b, c, d, e];
36
+ var ii = 0, v;
37
+ while (args[ii]) {
38
+ v = args[ii++];
39
+ for (var k in v) {
40
+ obj[k] = v[k];
41
+ }
42
+
43
+ // IE ignores toString in object iteration.. See:
44
+ // webreflection.blogspot.com/2007/07/quick-fix-internet-explorer-and.html
45
+ if (v.hasOwnProperty && v.hasOwnProperty('toString') &&
46
+ (typeof v.toString != 'undefined') && (obj.toString !== v.toString)) {
47
+ obj.toString = v.toString;
48
+ }
49
+ }
50
+
51
+ return obj;
52
+ }
53
+
54
+ module.exports = copyProperties;
@@ -0,0 +1,91 @@
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 createArrayFrom
17
+ * @typechecks
18
+ */
19
+
20
+ var toArray = require("./toArray");
21
+
22
+ /**
23
+ * Perform a heuristic test to determine if an object is "array-like".
24
+ *
25
+ * A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
26
+ * Joshu replied: "Mu."
27
+ *
28
+ * This function determines if its argument has "array nature": it returns
29
+ * true if the argument is an actual array, an `arguments' object, or an
30
+ * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
31
+ *
32
+ * It will return false for other array-like objects like Filelist.
33
+ *
34
+ * @param {*} obj
35
+ * @return {boolean}
36
+ */
37
+ function hasArrayNature(obj) {
38
+ return (
39
+ // not null/false
40
+ !!obj &&
41
+ // arrays are objects, NodeLists are functions in Safari
42
+ (typeof obj == 'object' || typeof obj == 'function') &&
43
+ // quacks like an array
44
+ ('length' in obj) &&
45
+ // not window
46
+ !('setInterval' in obj) &&
47
+ // no DOM node should be considered an array-like
48
+ // a 'select' element has 'length' and 'item' properties on IE8
49
+ (typeof obj.nodeType != 'number') &&
50
+ (
51
+ // a real array
52
+ (// HTMLCollection/NodeList
53
+ (Array.isArray(obj) ||
54
+ // arguments
55
+ ('callee' in obj) || 'item' in obj))
56
+ )
57
+ );
58
+ }
59
+
60
+ /**
61
+ * Ensure that the argument is an array by wrapping it in an array if it is not.
62
+ * Creates a copy of the argument if it is already an array.
63
+ *
64
+ * This is mostly useful idiomatically:
65
+ *
66
+ * var createArrayFrom = require('createArrayFrom');
67
+ *
68
+ * function takesOneOrMoreThings(things) {
69
+ * things = createArrayFrom(things);
70
+ * ...
71
+ * }
72
+ *
73
+ * This allows you to treat `things' as an array, but accept scalars in the API.
74
+ *
75
+ * If you need to convert an array-like object, like `arguments`, into an array
76
+ * use toArray instead.
77
+ *
78
+ * @param {*} obj
79
+ * @return {array}
80
+ */
81
+ function createArrayFrom(obj) {
82
+ if (!hasArrayNature(obj)) {
83
+ return [obj];
84
+ } else if (Array.isArray(obj)) {
85
+ return obj.slice();
86
+ } else {
87
+ return toArray(obj);
88
+ }
89
+ }
90
+
91
+ module.exports = createArrayFrom;
@@ -0,0 +1,63 @@
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 createFullPageComponent
17
+ * @typechecks
18
+ */
19
+
20
+ "use strict";
21
+
22
+ // Defeat circular references by requiring this directly.
23
+ var ReactCompositeComponent = require("./ReactCompositeComponent");
24
+
25
+ var invariant = require("./invariant");
26
+
27
+ /**
28
+ * Create a component that will throw an exception when unmounted.
29
+ *
30
+ * Components like <html> <head> and <body> can't be removed or added
31
+ * easily in a cross-browser way, however it's valuable to be able to
32
+ * take advantage of React's reconciliation for styling and <title>
33
+ * management. So we just document it and throw in dangerous cases.
34
+ *
35
+ * @param {function} componentClass convenience constructor to wrap
36
+ * @return {function} convenience constructor of new component
37
+ */
38
+ function createFullPageComponent(componentClass) {
39
+ var FullPageComponent = ReactCompositeComponent.createClass({
40
+ displayName: 'ReactFullPageComponent' + (
41
+ componentClass.componentConstructor.displayName || ''
42
+ ),
43
+
44
+ componentWillUnmount: function() {
45
+ ("production" !== process.env.NODE_ENV ? invariant(
46
+ false,
47
+ '%s tried to unmount. Because of cross-browser quirks it is ' +
48
+ 'impossible to unmount some top-level components (eg <html>, <head>, ' +
49
+ 'and <body>) reliably and efficiently. To fix this, have a single ' +
50
+ 'top-level component that never unmounts render these elements.',
51
+ this.constructor.displayName
52
+ ) : invariant(false));
53
+ },
54
+
55
+ render: function() {
56
+ return this.transferPropsTo(componentClass(null, this.props.children));
57
+ }
58
+ });
59
+
60
+ return FullPageComponent;
61
+ }
62
+
63
+ module.exports = createFullPageComponent;
@@ -0,0 +1,93 @@
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 createNodesFromMarkup
17
+ * @typechecks
18
+ */
19
+
20
+ /*jslint evil: true, sub: true */
21
+
22
+ var ExecutionEnvironment = require("./ExecutionEnvironment");
23
+
24
+ var createArrayFrom = require("./createArrayFrom");
25
+ var getMarkupWrap = require("./getMarkupWrap");
26
+ var invariant = require("./invariant");
27
+
28
+ /**
29
+ * Dummy container used to render all markup.
30
+ */
31
+ var dummyNode =
32
+ ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
33
+
34
+ /**
35
+ * Pattern used by `getNodeName`.
36
+ */
37
+ var nodeNamePattern = /^\s*<(\w+)/;
38
+
39
+ /**
40
+ * Extracts the `nodeName` of the first element in a string of markup.
41
+ *
42
+ * @param {string} markup String of markup.
43
+ * @return {?string} Node name of the supplied markup.
44
+ */
45
+ function getNodeName(markup) {
46
+ var nodeNameMatch = markup.match(nodeNamePattern);
47
+ return nodeNameMatch && nodeNameMatch[1].toLowerCase();
48
+ }
49
+
50
+ /**
51
+ * Creates an array containing the nodes rendered from the supplied markup. The
52
+ * optionally supplied `handleScript` function will be invoked once for each
53
+ * <script> element that is rendered. If no `handleScript` function is supplied,
54
+ * an exception is thrown if any <script> elements are rendered.
55
+ *
56
+ * @param {string} markup A string of valid HTML markup.
57
+ * @param {?function} handleScript Invoked once for each rendered <script>.
58
+ * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
59
+ */
60
+ function createNodesFromMarkup(markup, handleScript) {
61
+ var node = dummyNode;
62
+ ("production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'createNodesFromMarkup dummy not initialized') : invariant(!!dummyNode));
63
+ var nodeName = getNodeName(markup);
64
+
65
+ var wrap = nodeName && getMarkupWrap(nodeName);
66
+ if (wrap) {
67
+ node.innerHTML = wrap[1] + markup + wrap[2];
68
+
69
+ var wrapDepth = wrap[0];
70
+ while (wrapDepth--) {
71
+ node = node.lastChild;
72
+ }
73
+ } else {
74
+ node.innerHTML = markup;
75
+ }
76
+
77
+ var scripts = node.getElementsByTagName('script');
78
+ if (scripts.length) {
79
+ ("production" !== process.env.NODE_ENV ? invariant(
80
+ handleScript,
81
+ 'createNodesFromMarkup(...): Unexpected <script> element rendered.'
82
+ ) : invariant(handleScript));
83
+ createArrayFrom(scripts).forEach(handleScript);
84
+ }
85
+
86
+ var nodes = createArrayFrom(node.childNodes);
87
+ while (node.lastChild) {
88
+ node.removeChild(node.lastChild);
89
+ }
90
+ return nodes;
91
+ }
92
+
93
+ module.exports = createNodesFromMarkup;