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,33 @@
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 getActiveElement
17
+ * @typechecks
18
+ */
19
+
20
+ /**
21
+ * Same as document.activeElement but wraps in a try-catch block. In IE it is
22
+ * not safe to call document.activeElement if there is nothing focused.
23
+ */
24
+ function getActiveElement() /*?DOMElement*/ {
25
+ try {
26
+ return document.activeElement;
27
+ } catch (e) {
28
+ return null;
29
+ }
30
+ }
31
+
32
+ module.exports = getActiveElement;
33
+
@@ -0,0 +1,36 @@
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 getEventTarget
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ /**
23
+ * Gets the target node from a native browser event by accounting for
24
+ * inconsistencies in browser DOM APIs.
25
+ *
26
+ * @param {object} nativeEvent Native browser event.
27
+ * @return {DOMEventTarget} Target node.
28
+ */
29
+ function getEventTarget(nativeEvent) {
30
+ var target = nativeEvent.target || nativeEvent.srcElement || window;
31
+ // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
32
+ // @see http://www.quirksmode.org/js/events_properties.html
33
+ return target.nodeType === 3 ? target.parentNode : target;
34
+ }
35
+
36
+ module.exports = getEventTarget;
@@ -0,0 +1,108 @@
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 getMarkupWrap
17
+ */
18
+
19
+ var ExecutionEnvironment = require("./ExecutionEnvironment");
20
+
21
+ var invariant = require("./invariant");
22
+
23
+ /**
24
+ * Dummy container used to detect which wraps are necessary.
25
+ */
26
+ var dummyNode =
27
+ ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
28
+
29
+ /**
30
+ * Some browsers cannot use `innerHTML` to render certain elements standalone,
31
+ * so we wrap them, render the wrapped nodes, then extract the desired node.
32
+ *
33
+ * In IE8, certain elements cannot render alone, so wrap all elements ('*').
34
+ */
35
+ var shouldWrap = {
36
+ // Force wrapping for SVG elements because if they get created inside a <div>,
37
+ // they will be initialized in the wrong namespace (and will not display).
38
+ 'circle': true,
39
+ 'g': true,
40
+ 'line': true,
41
+ 'path': true,
42
+ 'polyline': true,
43
+ 'rect': true,
44
+ 'text': true
45
+ };
46
+
47
+ var selectWrap = [1, '<select multiple="true">', '</select>'];
48
+ var tableWrap = [1, '<table>', '</table>'];
49
+ var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
50
+
51
+ var svgWrap = [1, '<svg>', '</svg>'];
52
+
53
+ var markupWrap = {
54
+ '*': [1, '?<div>', '</div>'],
55
+
56
+ 'area': [1, '<map>', '</map>'],
57
+ 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
58
+ 'legend': [1, '<fieldset>', '</fieldset>'],
59
+ 'param': [1, '<object>', '</object>'],
60
+ 'tr': [2, '<table><tbody>', '</tbody></table>'],
61
+
62
+ 'optgroup': selectWrap,
63
+ 'option': selectWrap,
64
+
65
+ 'caption': tableWrap,
66
+ 'colgroup': tableWrap,
67
+ 'tbody': tableWrap,
68
+ 'tfoot': tableWrap,
69
+ 'thead': tableWrap,
70
+
71
+ 'td': trWrap,
72
+ 'th': trWrap,
73
+
74
+ 'circle': svgWrap,
75
+ 'g': svgWrap,
76
+ 'line': svgWrap,
77
+ 'path': svgWrap,
78
+ 'polyline': svgWrap,
79
+ 'rect': svgWrap,
80
+ 'text': svgWrap
81
+ };
82
+
83
+ /**
84
+ * Gets the markup wrap configuration for the supplied `nodeName`.
85
+ *
86
+ * NOTE: This lazily detects which wraps are necessary for the current browser.
87
+ *
88
+ * @param {string} nodeName Lowercase `nodeName`.
89
+ * @return {?array} Markup wrap configuration, if applicable.
90
+ */
91
+ function getMarkupWrap(nodeName) {
92
+ ("production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'Markup wrapping node not initialized') : invariant(!!dummyNode));
93
+ if (!markupWrap.hasOwnProperty(nodeName)) {
94
+ nodeName = '*';
95
+ }
96
+ if (!shouldWrap.hasOwnProperty(nodeName)) {
97
+ if (nodeName === '*') {
98
+ dummyNode.innerHTML = '<link />';
99
+ } else {
100
+ dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
101
+ }
102
+ shouldWrap[nodeName] = !dummyNode.firstChild;
103
+ }
104
+ return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
105
+ }
106
+
107
+
108
+ module.exports = getMarkupWrap;
@@ -0,0 +1,80 @@
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 getNodeForCharacterOffset
17
+ */
18
+
19
+ "use strict";
20
+
21
+ /**
22
+ * Given any node return the first leaf node without children.
23
+ *
24
+ * @param {DOMElement|DOMTextNode} node
25
+ * @return {DOMElement|DOMTextNode}
26
+ */
27
+ function getLeafNode(node) {
28
+ while (node && node.firstChild) {
29
+ node = node.firstChild;
30
+ }
31
+ return node;
32
+ }
33
+
34
+ /**
35
+ * Get the next sibling within a container. This will walk up the
36
+ * DOM if a node's siblings have been exhausted.
37
+ *
38
+ * @param {DOMElement|DOMTextNode} node
39
+ * @return {?DOMElement|DOMTextNode}
40
+ */
41
+ function getSiblingNode(node) {
42
+ while (node) {
43
+ if (node.nextSibling) {
44
+ return node.nextSibling;
45
+ }
46
+ node = node.parentNode;
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Get object describing the nodes which contain characters at offset.
52
+ *
53
+ * @param {DOMElement|DOMTextNode} root
54
+ * @param {number} offset
55
+ * @return {?object}
56
+ */
57
+ function getNodeForCharacterOffset(root, offset) {
58
+ var node = getLeafNode(root);
59
+ var nodeStart = 0;
60
+ var nodeEnd = 0;
61
+
62
+ while (node) {
63
+ if (node.nodeType == 3) {
64
+ nodeEnd = nodeStart + node.textContent.length;
65
+
66
+ if (nodeStart <= offset && nodeEnd >= offset) {
67
+ return {
68
+ node: node,
69
+ offset: offset - nodeStart
70
+ };
71
+ }
72
+
73
+ nodeStart = nodeEnd;
74
+ }
75
+
76
+ node = getLeafNode(getSiblingNode(node));
77
+ }
78
+ }
79
+
80
+ module.exports = getNodeForCharacterOffset;
@@ -0,0 +1,40 @@
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 getReactRootElementInContainer
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var DOC_NODE_TYPE = 9;
22
+
23
+ /**
24
+ * @param {DOMElement|DOMDocument} container DOM element that may contain
25
+ * a React component
26
+ * @return {?*} DOM element that may have the reactRoot ID, or null.
27
+ */
28
+ function getReactRootElementInContainer(container) {
29
+ if (!container) {
30
+ return null;
31
+ }
32
+
33
+ if (container.nodeType === DOC_NODE_TYPE) {
34
+ return container.documentElement;
35
+ } else {
36
+ return container.firstChild;
37
+ }
38
+ }
39
+
40
+ module.exports = getReactRootElementInContainer;
@@ -0,0 +1,40 @@
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 getTextContentAccessor
17
+ */
18
+
19
+ "use strict";
20
+
21
+ var ExecutionEnvironment = require("./ExecutionEnvironment");
22
+
23
+ var contentKey = null;
24
+
25
+ /**
26
+ * Gets the key used to access text content on a DOM node.
27
+ *
28
+ * @return {?string} Key used to access text content.
29
+ * @internal
30
+ */
31
+ function getTextContentAccessor() {
32
+ if (!contentKey && ExecutionEnvironment.canUseDOM) {
33
+ contentKey = 'innerText' in document.createElement('div') ?
34
+ 'innerText' :
35
+ 'textContent';
36
+ }
37
+ return contentKey;
38
+ }
39
+
40
+ module.exports = getTextContentAccessor;
@@ -0,0 +1,45 @@
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 getUnboundedScrollPosition
17
+ * @typechecks
18
+ */
19
+
20
+ "use strict";
21
+
22
+ /**
23
+ * Gets the scroll position of the supplied element or window.
24
+ *
25
+ * The return values are unbounded, unlike `getScrollPosition`. This means they
26
+ * may be negative or exceed the element boundaries (which is possible using
27
+ * inertial scrolling).
28
+ *
29
+ * @param {DOMWindow|DOMElement} scrollable
30
+ * @return {object} Map with `x` and `y` keys.
31
+ */
32
+ function getUnboundedScrollPosition(scrollable) {
33
+ if (scrollable === window) {
34
+ return {
35
+ x: document.documentElement.scrollLeft || document.body.scrollLeft,
36
+ y: document.documentElement.scrollTop || document.body.scrollTop
37
+ };
38
+ }
39
+ return {
40
+ x: scrollable.scrollLeft,
41
+ y: scrollable.scrollTop
42
+ };
43
+ }
44
+
45
+ module.exports = getUnboundedScrollPosition;
@@ -0,0 +1,35 @@
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 hyphenate
17
+ * @typechecks
18
+ */
19
+
20
+ var _uppercasePattern = /([A-Z])/g;
21
+
22
+ /**
23
+ * Hyphenates a camelcased string, for example:
24
+ *
25
+ * > hyphenate('backgroundColor')
26
+ * < "background-color"
27
+ *
28
+ * @param {string} string
29
+ * @return {string}
30
+ */
31
+ function hyphenate(string) {
32
+ return string.replace(_uppercasePattern, '-$1').toLowerCase();
33
+ }
34
+
35
+ module.exports = hyphenate;
@@ -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 invariant
17
+ */
18
+
19
+ /**
20
+ * Use invariant() to assert state which your program assumes to be true.
21
+ *
22
+ * Provide sprintf style format and arguments to provide information about
23
+ * what broke and what you were expecting.
24
+ *
25
+ * The invariant message will be stripped in production, but the invariant
26
+ * will remain to ensure logic does not differ in production.
27
+ */
28
+
29
+ function invariant(condition) {
30
+ if (!condition) {
31
+ throw new Error('Invariant Violation');
32
+ }
33
+ }
34
+
35
+ module.exports = invariant;
36
+
37
+ if ("production" !== process.env.NODE_ENV) {
38
+ var invariantDev = function(condition, format, a, b, c, d, e, f) {
39
+ if (format === undefined) {
40
+ throw new Error('invariant requires an error message argument');
41
+ }
42
+
43
+ if (!condition) {
44
+ var args = [a, b, c, d, e, f];
45
+ var argIndex = 0;
46
+ throw new Error(
47
+ 'Invariant Violation: ' +
48
+ format.replace(/%s/g, function() { return args[argIndex++]; })
49
+ );
50
+ }
51
+ };
52
+
53
+ module.exports = invariantDev;
54
+ }