react 0.7.1 → 0.10.0-rc1

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 (223) hide show
  1. package/README.md +10 -231
  2. package/addons.js +1 -0
  3. package/lib/AutoFocusMixin.js +32 -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 +171 -0
  11. package/lib/DOMProperty.js +270 -0
  12. package/lib/DOMPropertyOperations.js +181 -0
  13. package/lib/Danger.js +187 -0
  14. package/lib/DefaultDOMPropertyConfig.js +196 -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 +295 -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 +160 -0
  26. package/lib/MobileSafariClickEventPlugin.js +63 -0
  27. package/lib/PooledClass.js +119 -0
  28. package/lib/React.js +97 -0
  29. package/lib/ReactBrowserComponentMixin.js +42 -0
  30. package/lib/ReactCSSTransitionGroup.js +65 -0
  31. package/lib/ReactCSSTransitionGroupChild.js +138 -0
  32. package/lib/ReactChildren.js +132 -0
  33. package/lib/ReactComponent.js +595 -0
  34. package/lib/ReactComponentBrowserEnvironment.js +124 -0
  35. package/lib/ReactCompositeComponent.js +1587 -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 +69 -0
  40. package/lib/ReactDOMComponent.js +416 -0
  41. package/lib/ReactDOMForm.js +62 -0
  42. package/lib/ReactDOMIDOperations.js +218 -0
  43. package/lib/ReactDOMImg.js +61 -0
  44. package/lib/ReactDOMInput.js +182 -0
  45. package/lib/ReactDOMOption.js +55 -0
  46. package/lib/ReactDOMSelect.js +180 -0
  47. package/lib/ReactDOMSelection.js +189 -0
  48. package/lib/ReactDOMTextarea.js +144 -0
  49. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  50. package/lib/ReactDefaultInjection.js +125 -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 +43 -0
  58. package/lib/ReactInputSelection.js +141 -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 +649 -0
  63. package/lib/ReactMountReady.js +95 -0
  64. package/lib/ReactMultiChild.js +432 -0
  65. package/lib/ReactMultiChildUpdateTypes.js +38 -0
  66. package/lib/ReactOwner.js +159 -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 +182 -0
  74. package/lib/ReactRootIndex.js +36 -0
  75. package/lib/ReactServerRendering.js +89 -0
  76. package/lib/ReactServerRenderingTransaction.js +116 -0
  77. package/lib/ReactStateSetters.js +111 -0
  78. package/lib/ReactTestUtils.js +394 -0
  79. package/lib/ReactTextComponent.js +121 -0
  80. package/lib/ReactTransitionChildMapping.js +106 -0
  81. package/lib/ReactTransitionEvents.js +97 -0
  82. package/lib/ReactTransitionGroup.js +187 -0
  83. package/lib/ReactUpdates.js +148 -0
  84. package/lib/ReactWithAddons.js +53 -0
  85. package/lib/SelectEventPlugin.js +200 -0
  86. package/lib/ServerReactRootIndex.js +36 -0
  87. package/lib/SimpleEventPlugin.js +413 -0
  88. package/lib/SyntheticClipboardEvent.js +51 -0
  89. package/lib/SyntheticCompositionEvent.js +51 -0
  90. package/lib/SyntheticDragEvent.js +44 -0
  91. package/lib/SyntheticEvent.js +164 -0
  92. package/lib/SyntheticFocusEvent.js +44 -0
  93. package/lib/SyntheticKeyboardEvent.js +58 -0
  94. package/lib/SyntheticMouseEvent.js +85 -0
  95. package/lib/SyntheticTouchEvent.js +50 -0
  96. package/lib/SyntheticUIEvent.js +45 -0
  97. package/lib/SyntheticWheelEvent.js +66 -0
  98. package/lib/Transaction.js +276 -0
  99. package/lib/ViewportMetrics.js +37 -0
  100. package/lib/accumulate.js +54 -0
  101. package/lib/adler32.js +39 -0
  102. package/lib/cloneWithProps.js +59 -0
  103. package/lib/containsNode.js +49 -0
  104. package/lib/copyProperties.js +54 -0
  105. package/lib/createArrayFrom.js +91 -0
  106. package/lib/createFullPageComponent.js +63 -0
  107. package/lib/createNodesFromMarkup.js +93 -0
  108. package/lib/createObjectFrom.js +61 -0
  109. package/lib/cx.js +44 -0
  110. package/lib/dangerousStyleValue.js +57 -0
  111. package/lib/emptyFunction.js +43 -0
  112. package/lib/emptyObject.js +27 -0
  113. package/lib/escapeTextForBrowser.js +47 -0
  114. package/lib/flattenChildren.js +57 -0
  115. package/lib/focusNode.js +33 -0
  116. package/lib/forEachAccumulated.js +36 -0
  117. package/lib/getActiveElement.js +34 -0
  118. package/lib/getEventKey.js +85 -0
  119. package/lib/getEventTarget.js +36 -0
  120. package/lib/getMarkupWrap.js +118 -0
  121. package/lib/getNodeForCharacterOffset.js +80 -0
  122. package/lib/getReactRootElementInContainer.js +40 -0
  123. package/lib/getTextContentAccessor.js +42 -0
  124. package/lib/getUnboundedScrollPosition.js +45 -0
  125. package/lib/hyphenate.js +35 -0
  126. package/lib/instantiateReactComponent.js +70 -0
  127. package/lib/invariant.js +62 -0
  128. package/lib/isEventSupported.js +70 -0
  129. package/lib/isNode.js +33 -0
  130. package/lib/isTextInputElement.js +49 -0
  131. package/lib/isTextNode.js +30 -0
  132. package/lib/joinClasses.js +44 -0
  133. package/lib/keyMirror.js +58 -0
  134. package/lib/keyOf.js +41 -0
  135. package/lib/memoizeStringOnly.js +39 -0
  136. package/lib/merge.js +37 -0
  137. package/lib/mergeHelpers.js +136 -0
  138. package/lib/mergeInto.js +45 -0
  139. package/lib/mixInto.js +34 -0
  140. package/lib/monitorCodeUse.js +37 -0
  141. package/lib/objMap.js +47 -0
  142. package/lib/objMapKeyVal.js +47 -0
  143. package/lib/onlyChild.js +43 -0
  144. package/lib/performanceNow.js +42 -0
  145. package/lib/shallowEqual.js +49 -0
  146. package/lib/shouldUpdateReactComponent.js +61 -0
  147. package/lib/toArray.js +75 -0
  148. package/lib/traverseAllChildren.js +190 -0
  149. package/lib/update.js +159 -0
  150. package/lib/warning.js +48 -0
  151. package/package.json +33 -31
  152. package/react.js +1 -0
  153. package/.npmignore +0 -7
  154. package/.travis.yml +0 -7
  155. package/Jakefile.js +0 -39
  156. package/LICENSE +0 -19
  157. package/browser-test/dist.html +0 -90
  158. package/browser-test/index.html +0 -86
  159. package/browser-test/min.html +0 -90
  160. package/dist/react.js +0 -3141
  161. package/dist/react.min.js +0 -22
  162. package/doc/advanced.md +0 -175
  163. package/doc/color-def.graffle +0 -938
  164. package/doc/color-def.png +0 -0
  165. package/doc/simple.dot +0 -25
  166. package/doc/simple.png +0 -0
  167. package/examples/longer-example.js +0 -41
  168. package/examples/simple.js +0 -45
  169. package/examples/using-ast-directly.js +0 -30
  170. package/examples/using-events1.js +0 -79
  171. package/examples/using-log-events.js +0 -43
  172. package/lib/base-task.js +0 -120
  173. package/lib/cb-task.js +0 -84
  174. package/lib/core.js +0 -138
  175. package/lib/dsl.js +0 -138
  176. package/lib/error.js +0 -55
  177. package/lib/event-collector.js +0 -81
  178. package/lib/event-manager.js +0 -89
  179. package/lib/eventemitter.js +0 -20
  180. package/lib/finalcb-first-task.js +0 -68
  181. package/lib/finalcb-task.js +0 -65
  182. package/lib/id.js +0 -22
  183. package/lib/input-parser.js +0 -56
  184. package/lib/log-events.js +0 -101
  185. package/lib/parse.js +0 -41
  186. package/lib/promise-resolve.js +0 -50
  187. package/lib/promise-task.js +0 -93
  188. package/lib/react.js +0 -59
  189. package/lib/ret-task.js +0 -71
  190. package/lib/sprintf.js +0 -18
  191. package/lib/status.js +0 -14
  192. package/lib/task.js +0 -251
  193. package/lib/track-tasks.js +0 -74
  194. package/lib/validate.js +0 -159
  195. package/lib/vcon.js +0 -113
  196. package/lib/when-task.js +0 -84
  197. package/src/dist.build.requirejs +0 -20
  198. package/test/ast.mocha.js +0 -136
  199. package/test/cb-task.mocha.js +0 -220
  200. package/test/core-deferred.mocha.js +0 -143
  201. package/test/core-when.mocha.js +0 -96
  202. package/test/core.mocha.js +0 -589
  203. package/test/dsl.mocha.js +0 -352
  204. package/test/event-manager.mocha.js +0 -119
  205. package/test/exec-options.mocha.js +0 -48
  206. package/test/finalcb-task.mocha.js +0 -58
  207. package/test/input-parser.mocha.js +0 -86
  208. package/test/log-events.mocha.js +0 -88
  209. package/test/mocha.opts +0 -2
  210. package/test/module-use.mocha.js +0 -164
  211. package/test/promise-auto-resolve.mocha.js +0 -68
  212. package/test/ret-task.mocha.js +0 -220
  213. package/test/task.mocha.js +0 -42
  214. package/test/validate-cb-task.mocha.js +0 -100
  215. package/test/validate-ret-task.mocha.js +0 -110
  216. package/test/validate.mocha.js +0 -324
  217. package/test/vcon.mocha.js +0 -193
  218. package/vendor/chai/chai.js +0 -4251
  219. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  220. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  221. package/vendor/node/util.js +0 -531
  222. package/vendor/requirejs/require.js +0 -2045
  223. package/vendor/requirejs/require.min.js +0 -36
@@ -0,0 +1,85 @@
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 getEventKey
17
+ * @typechecks static-only
18
+ */
19
+
20
+ "use strict";
21
+
22
+ /**
23
+ * Normalization of deprecated HTML5 "key" values
24
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
25
+ */
26
+ var normalizeKey = {
27
+ 'Esc': 'Escape',
28
+ 'Spacebar': ' ',
29
+ 'Left': 'ArrowLeft',
30
+ 'Up': 'ArrowUp',
31
+ 'Right': 'ArrowRight',
32
+ 'Down': 'ArrowDown',
33
+ 'Del': 'Delete',
34
+ 'Win': 'OS',
35
+ 'Menu': 'ContextMenu',
36
+ 'Apps': 'ContextMenu',
37
+ 'Scroll': 'ScrollLock',
38
+ 'MozPrintableKey': 'Unidentified'
39
+ };
40
+
41
+ /**
42
+ * Translation from legacy "which/keyCode" to HTML5 "key"
43
+ * Only special keys supported, all others depend on keyboard layout or browser
44
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
45
+ */
46
+ var translateToKey = {
47
+ 8: 'Backspace',
48
+ 9: 'Tab',
49
+ 12: 'Clear',
50
+ 13: 'Enter',
51
+ 16: 'Shift',
52
+ 17: 'Control',
53
+ 18: 'Alt',
54
+ 19: 'Pause',
55
+ 20: 'CapsLock',
56
+ 27: 'Escape',
57
+ 32: ' ',
58
+ 33: 'PageUp',
59
+ 34: 'PageDown',
60
+ 35: 'End',
61
+ 36: 'Home',
62
+ 37: 'ArrowLeft',
63
+ 38: 'ArrowUp',
64
+ 39: 'ArrowRight',
65
+ 40: 'ArrowDown',
66
+ 45: 'Insert',
67
+ 46: 'Delete',
68
+ 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
69
+ 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
70
+ 144: 'NumLock',
71
+ 145: 'ScrollLock',
72
+ 224: 'Meta'
73
+ };
74
+
75
+ /**
76
+ * @param {object} nativeEvent Native browser event.
77
+ * @return {string} Normalized `key` property.
78
+ */
79
+ function getEventKey(nativeEvent) {
80
+ return 'key' in nativeEvent ?
81
+ normalizeKey[nativeEvent.key] || nativeEvent.key :
82
+ translateToKey[nativeEvent.which || nativeEvent.keyCode] || 'Unidentified';
83
+ }
84
+
85
+ module.exports = getEventKey;
@@ -0,0 +1,36 @@
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 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,118 @@
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 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
+ 'defs': true,
40
+ 'g': true,
41
+ 'line': true,
42
+ 'linearGradient': true,
43
+ 'path': true,
44
+ 'polygon': true,
45
+ 'polyline': true,
46
+ 'radialGradient': true,
47
+ 'rect': true,
48
+ 'stop': true,
49
+ 'text': true
50
+ };
51
+
52
+ var selectWrap = [1, '<select multiple="true">', '</select>'];
53
+ var tableWrap = [1, '<table>', '</table>'];
54
+ var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
55
+
56
+ var svgWrap = [1, '<svg>', '</svg>'];
57
+
58
+ var markupWrap = {
59
+ '*': [1, '?<div>', '</div>'],
60
+
61
+ 'area': [1, '<map>', '</map>'],
62
+ 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
63
+ 'legend': [1, '<fieldset>', '</fieldset>'],
64
+ 'param': [1, '<object>', '</object>'],
65
+ 'tr': [2, '<table><tbody>', '</tbody></table>'],
66
+
67
+ 'optgroup': selectWrap,
68
+ 'option': selectWrap,
69
+
70
+ 'caption': tableWrap,
71
+ 'colgroup': tableWrap,
72
+ 'tbody': tableWrap,
73
+ 'tfoot': tableWrap,
74
+ 'thead': tableWrap,
75
+
76
+ 'td': trWrap,
77
+ 'th': trWrap,
78
+
79
+ 'circle': svgWrap,
80
+ 'defs': svgWrap,
81
+ 'g': svgWrap,
82
+ 'line': svgWrap,
83
+ 'linearGradient': svgWrap,
84
+ 'path': svgWrap,
85
+ 'polygon': svgWrap,
86
+ 'polyline': svgWrap,
87
+ 'radialGradient': svgWrap,
88
+ 'rect': svgWrap,
89
+ 'stop': svgWrap,
90
+ 'text': svgWrap
91
+ };
92
+
93
+ /**
94
+ * Gets the markup wrap configuration for the supplied `nodeName`.
95
+ *
96
+ * NOTE: This lazily detects which wraps are necessary for the current browser.
97
+ *
98
+ * @param {string} nodeName Lowercase `nodeName`.
99
+ * @return {?array} Markup wrap configuration, if applicable.
100
+ */
101
+ function getMarkupWrap(nodeName) {
102
+ ("production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'Markup wrapping node not initialized') : invariant(!!dummyNode));
103
+ if (!markupWrap.hasOwnProperty(nodeName)) {
104
+ nodeName = '*';
105
+ }
106
+ if (!shouldWrap.hasOwnProperty(nodeName)) {
107
+ if (nodeName === '*') {
108
+ dummyNode.innerHTML = '<link />';
109
+ } else {
110
+ dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
111
+ }
112
+ shouldWrap[nodeName] = !dummyNode.firstChild;
113
+ }
114
+ return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
115
+ }
116
+
117
+
118
+ module.exports = getMarkupWrap;
@@ -0,0 +1,80 @@
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 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-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 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,42 @@
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 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
+ // Prefer textContent to innerText because many browsers support both but
34
+ // SVG <text> elements don't support innerText even when <div> does.
35
+ contentKey = 'textContent' in document.createElement('div') ?
36
+ 'textContent' :
37
+ 'innerText';
38
+ }
39
+ return contentKey;
40
+ }
41
+
42
+ module.exports = getTextContentAccessor;
@@ -0,0 +1,45 @@
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 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: window.pageXOffset || document.documentElement.scrollLeft,
36
+ y: window.pageYOffset || document.documentElement.scrollTop
37
+ };
38
+ }
39
+ return {
40
+ x: scrollable.scrollLeft,
41
+ y: scrollable.scrollTop
42
+ };
43
+ }
44
+
45
+ module.exports = getUnboundedScrollPosition;