react 0.6.2 → 0.8.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 (204) hide show
  1. package/README.md +15 -217
  2. package/ReactJSErrors.js +40 -0
  3. package/addons.js +4 -0
  4. package/lib/$.js +46 -0
  5. package/lib/CSSCore.js +114 -0
  6. package/lib/CSSProperty.js +90 -0
  7. package/lib/CSSPropertyOperations.js +97 -0
  8. package/lib/CallbackRegistry.js +91 -0
  9. package/lib/ChangeEventPlugin.js +365 -0
  10. package/lib/CompositionEventPlugin.js +212 -0
  11. package/lib/DOMChildrenOperations.js +135 -0
  12. package/lib/DOMProperty.js +266 -0
  13. package/lib/DOMPropertyOperations.js +168 -0
  14. package/lib/Danger.js +186 -0
  15. package/lib/DefaultDOMPropertyConfig.js +187 -0
  16. package/lib/DefaultEventPluginOrder.js +44 -0
  17. package/lib/EnterLeaveEventPlugin.js +112 -0
  18. package/lib/EventConstants.js +73 -0
  19. package/lib/EventListener.js +61 -0
  20. package/lib/EventPluginHub.js +190 -0
  21. package/lib/EventPluginRegistry.js +237 -0
  22. package/lib/EventPluginUtils.js +185 -0
  23. package/lib/EventPropagators.js +179 -0
  24. package/lib/ExecutionEnvironment.js +41 -0
  25. package/lib/LinkedStateMixin.js +46 -0
  26. package/lib/LinkedValueMixin.js +68 -0
  27. package/lib/MobileSafariClickEventPlugin.js +63 -0
  28. package/lib/PooledClass.js +113 -0
  29. package/lib/React.js +71 -0
  30. package/lib/ReactChildren.js +132 -0
  31. package/lib/ReactComponent.js +515 -0
  32. package/lib/ReactComponentBrowserEnvironment.js +140 -0
  33. package/lib/ReactComponentEnvironment.js +24 -0
  34. package/lib/ReactCompositeComponent.js +1020 -0
  35. package/lib/ReactCurrentOwner.js +39 -0
  36. package/lib/ReactDOM.js +194 -0
  37. package/lib/ReactDOMButton.js +64 -0
  38. package/lib/ReactDOMComponent.js +374 -0
  39. package/lib/ReactDOMForm.js +52 -0
  40. package/lib/ReactDOMIDOperations.js +173 -0
  41. package/lib/ReactDOMInput.js +169 -0
  42. package/lib/ReactDOMOption.js +50 -0
  43. package/lib/ReactDOMSelect.js +160 -0
  44. package/lib/ReactDOMSelection.js +189 -0
  45. package/lib/ReactDOMTextarea.js +136 -0
  46. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  47. package/lib/ReactDefaultInjection.js +91 -0
  48. package/lib/ReactDefaultPerf.js +407 -0
  49. package/lib/ReactErrorUtils.js +46 -0
  50. package/lib/ReactEventEmitter.js +341 -0
  51. package/lib/ReactEventEmitterMixin.js +89 -0
  52. package/lib/ReactEventTopLevelCallback.js +89 -0
  53. package/lib/ReactInputSelection.js +140 -0
  54. package/lib/ReactInstanceHandles.js +322 -0
  55. package/lib/ReactLink.js +54 -0
  56. package/lib/ReactMarkupChecksum.js +53 -0
  57. package/lib/ReactMount.js +617 -0
  58. package/lib/ReactMountReady.js +95 -0
  59. package/lib/ReactMultiChild.js +441 -0
  60. package/lib/ReactMultiChildUpdateTypes.js +36 -0
  61. package/lib/ReactOwner.js +146 -0
  62. package/lib/ReactPerf.js +88 -0
  63. package/lib/ReactPropTransferer.js +128 -0
  64. package/lib/ReactPropTypes.js +158 -0
  65. package/lib/ReactReconcileTransaction.js +161 -0
  66. package/lib/ReactServerRendering.js +62 -0
  67. package/lib/ReactStateSetters.js +111 -0
  68. package/lib/ReactTextComponent.js +94 -0
  69. package/lib/ReactTransitionEvents.js +97 -0
  70. package/lib/ReactTransitionGroup.js +112 -0
  71. package/lib/ReactTransitionKeySet.js +111 -0
  72. package/lib/ReactTransitionableChild.js +152 -0
  73. package/lib/ReactUpdates.js +145 -0
  74. package/lib/ReactWithAddons.js +41 -0
  75. package/lib/SelectEventPlugin.js +217 -0
  76. package/lib/SimpleEventPlugin.js +365 -0
  77. package/lib/SyntheticClipboardEvent.js +45 -0
  78. package/lib/SyntheticCompositionEvent.js +51 -0
  79. package/lib/SyntheticEvent.js +163 -0
  80. package/lib/SyntheticFocusEvent.js +44 -0
  81. package/lib/SyntheticKeyboardEvent.js +56 -0
  82. package/lib/SyntheticMouseEvent.js +85 -0
  83. package/lib/SyntheticTouchEvent.js +50 -0
  84. package/lib/SyntheticUIEvent.js +45 -0
  85. package/lib/SyntheticWheelEvent.js +63 -0
  86. package/lib/Transaction.js +251 -0
  87. package/lib/ViewportMetrics.js +37 -0
  88. package/lib/accumulate.js +54 -0
  89. package/lib/adler32.js +39 -0
  90. package/lib/containsNode.js +49 -0
  91. package/lib/copyProperties.js +54 -0
  92. package/lib/createArrayFrom.js +94 -0
  93. package/lib/createNodesFromMarkup.js +93 -0
  94. package/lib/createObjectFrom.js +61 -0
  95. package/lib/cx.js +44 -0
  96. package/lib/dangerousStyleValue.js +57 -0
  97. package/lib/emptyFunction.js +43 -0
  98. package/lib/escapeTextForBrowser.js +47 -0
  99. package/lib/ex.js +49 -0
  100. package/lib/filterAttributes.js +45 -0
  101. package/lib/flattenChildren.js +54 -0
  102. package/lib/forEachAccumulated.js +36 -0
  103. package/lib/ge.js +76 -0
  104. package/lib/getActiveElement.js +33 -0
  105. package/lib/getEventTarget.js +36 -0
  106. package/lib/getMarkupWrap.js +108 -0
  107. package/lib/getNodeForCharacterOffset.js +80 -0
  108. package/lib/getReactRootElementInContainer.js +40 -0
  109. package/lib/getTextContentAccessor.js +40 -0
  110. package/lib/getUnboundedScrollPosition.js +45 -0
  111. package/lib/hyphenate.js +35 -0
  112. package/lib/invariant.js +54 -0
  113. package/lib/isEventSupported.js +74 -0
  114. package/lib/isNode.js +33 -0
  115. package/lib/isTextInputElement.js +49 -0
  116. package/lib/isTextNode.js +30 -0
  117. package/lib/joinClasses.js +44 -0
  118. package/lib/keyMirror.js +58 -0
  119. package/lib/keyOf.js +41 -0
  120. package/lib/memoizeStringOnly.js +39 -0
  121. package/lib/merge.js +37 -0
  122. package/lib/mergeHelpers.js +137 -0
  123. package/lib/mergeInto.js +45 -0
  124. package/lib/mixInto.js +34 -0
  125. package/lib/mutateHTMLNodeWithMarkup.js +100 -0
  126. package/lib/objMap.js +47 -0
  127. package/lib/objMapKeyVal.js +47 -0
  128. package/lib/performanceNow.js +42 -0
  129. package/lib/shallowEqual.js +49 -0
  130. package/lib/traverseAllChildren.js +127 -0
  131. package/package.json +33 -21
  132. package/react.js +4 -0
  133. package/.npmignore +0 -7
  134. package/.travis.yml +0 -5
  135. package/Jakefile.js +0 -39
  136. package/LICENSE +0 -19
  137. package/browser-test/dist.html +0 -89
  138. package/browser-test/index.html +0 -85
  139. package/browser-test/min.html +0 -89
  140. package/dist/react.js +0 -3094
  141. package/dist/react.min.js +0 -22
  142. package/doc/advanced.md +0 -166
  143. package/doc/color-def.graffle +0 -938
  144. package/doc/color-def.png +0 -0
  145. package/doc/simple.dot +0 -25
  146. package/doc/simple.png +0 -0
  147. package/examples/longer-example.js +0 -41
  148. package/examples/simple.js +0 -45
  149. package/examples/using-ast-directly.js +0 -30
  150. package/examples/using-events1.js +0 -79
  151. package/examples/using-log-events.js +0 -43
  152. package/lib/base-task.js +0 -123
  153. package/lib/cb-task.js +0 -84
  154. package/lib/core.js +0 -138
  155. package/lib/dsl.js +0 -138
  156. package/lib/error.js +0 -55
  157. package/lib/event-collector.js +0 -81
  158. package/lib/event-manager.js +0 -85
  159. package/lib/eventemitter.js +0 -20
  160. package/lib/finalcb-first-task.js +0 -68
  161. package/lib/finalcb-task.js +0 -65
  162. package/lib/id.js +0 -22
  163. package/lib/input-parser.js +0 -56
  164. package/lib/log-events.js +0 -92
  165. package/lib/parse.js +0 -41
  166. package/lib/promise-resolve.js +0 -50
  167. package/lib/promise-task.js +0 -93
  168. package/lib/react.js +0 -59
  169. package/lib/ret-task.js +0 -71
  170. package/lib/sprintf.js +0 -18
  171. package/lib/status.js +0 -14
  172. package/lib/task.js +0 -251
  173. package/lib/track-tasks.js +0 -74
  174. package/lib/validate.js +0 -159
  175. package/lib/vcon.js +0 -90
  176. package/lib/when-task.js +0 -85
  177. package/src/dist.build.requirejs +0 -20
  178. package/test/ast.mocha.js +0 -136
  179. package/test/cb-task.mocha.js +0 -220
  180. package/test/core-deferred.mocha.js +0 -143
  181. package/test/core-when.mocha.js +0 -96
  182. package/test/core.mocha.js +0 -589
  183. package/test/dsl.mocha.js +0 -350
  184. package/test/event-manager.mocha.js +0 -119
  185. package/test/exec-options.mocha.js +0 -48
  186. package/test/finalcb-task.mocha.js +0 -58
  187. package/test/input-parser.mocha.js +0 -86
  188. package/test/mocha.opts +0 -2
  189. package/test/module-use.mocha.js +0 -147
  190. package/test/promise-auto-resolve.mocha.js +0 -68
  191. package/test/ret-task.mocha.js +0 -220
  192. package/test/task.mocha.js +0 -42
  193. package/test/validate-cb-task.mocha.js +0 -100
  194. package/test/validate-ret-task.mocha.js +0 -110
  195. package/test/validate.mocha.js +0 -324
  196. package/test/vcon.mocha.js +0 -193
  197. package/vendor/chai/chai.js +0 -2038
  198. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  199. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  200. package/vendor/mocha/mocha.css +0 -135
  201. package/vendor/mocha/mocha.js +0 -3589
  202. package/vendor/node/util.js +0 -531
  203. package/vendor/requirejs/require.js +0 -2053
  204. package/vendor/requirejs/require.min.js +0 -33
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Copyright 2013 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 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,49 @@
1
+ /**
2
+ * Copyright 2013 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 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,94 @@
1
+ /**
2
+ * Copyright 2013 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
+ /**
21
+ * NOTE: if you are a previous user of this function, it has been considered
22
+ * unsafe because it's inconsistent across browsers for some inputs.
23
+ * Instead use `Array.isArray()`.
24
+ *
25
+ * Perform a heuristic test to determine if an object is "array-like".
26
+ *
27
+ * A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
28
+ * Joshu replied: "Mu."
29
+ *
30
+ * This function determines if its argument has "array nature": it returns
31
+ * true if the argument is an actual array, an `arguments' object, or an
32
+ * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
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
+ * This is also good for converting certain pseudo-arrays, like `arguments` or
76
+ * HTMLCollections, into arrays.
77
+ *
78
+ * @param {*} obj
79
+ * @return {array}
80
+ */
81
+ function createArrayFrom(obj) {
82
+ if (!hasArrayNature(obj)) {
83
+ return [obj];
84
+ }
85
+ if (obj.item) {
86
+ // IE does not support Array#slice on HTMLCollections
87
+ var l = obj.length, ret = new Array(l);
88
+ while (l--) { ret[l] = obj[l]; }
89
+ return ret;
90
+ }
91
+ return Array.prototype.slice.call(obj);
92
+ }
93
+
94
+ module.exports = createArrayFrom;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Copyright 2013 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;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Copyright 2013 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 createObjectFrom
17
+ */
18
+
19
+ /**
20
+ * Construct an object from an array of keys
21
+ * and optionally specified value or list of values.
22
+ *
23
+ * >>> createObjectFrom(['a','b','c']);
24
+ * {a: true, b: true, c: true}
25
+ *
26
+ * >>> createObjectFrom(['a','b','c'], false);
27
+ * {a: false, b: false, c: false}
28
+ *
29
+ * >>> createObjectFrom(['a','b','c'], 'monkey');
30
+ * {c:'monkey', b:'monkey' c:'monkey'}
31
+ *
32
+ * >>> createObjectFrom(['a','b','c'], [1,2,3]);
33
+ * {a: 1, b: 2, c: 3}
34
+ *
35
+ * >>> createObjectFrom(['women', 'men'], [true, false]);
36
+ * {women: true, men: false}
37
+ *
38
+ * @param Array list of keys
39
+ * @param mixed optional value or value array. defaults true.
40
+ * @returns object
41
+ */
42
+ function createObjectFrom(keys, values /* = true */) {
43
+ if ("production" !== process.env.NODE_ENV) {
44
+ if (!Array.isArray(keys)) {
45
+ throw new TypeError('Must pass an array of keys.');
46
+ }
47
+ }
48
+
49
+ var object = {};
50
+ var isArray = Array.isArray(values);
51
+ if (typeof values == 'undefined') {
52
+ values = true;
53
+ }
54
+
55
+ for (var ii = keys.length; ii--;) {
56
+ object[keys[ii]] = isArray ? values[ii] : values;
57
+ }
58
+ return object;
59
+ }
60
+
61
+ module.exports = createObjectFrom;