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.
- package/README.md +10 -231
- package/addons.js +1 -0
- package/lib/AutoFocusMixin.js +30 -0
- package/lib/CSSCore.js +115 -0
- package/lib/CSSProperty.js +121 -0
- package/lib/CSSPropertyOperations.js +97 -0
- package/lib/ChangeEventPlugin.js +387 -0
- package/lib/ClientReactRootIndex.js +30 -0
- package/lib/CompositionEventPlugin.js +260 -0
- package/lib/DOMChildrenOperations.js +165 -0
- package/lib/DOMProperty.js +268 -0
- package/lib/DOMPropertyOperations.js +181 -0
- package/lib/Danger.js +187 -0
- package/lib/DefaultDOMPropertyConfig.js +203 -0
- package/lib/DefaultEventPluginOrder.js +44 -0
- package/lib/EnterLeaveEventPlugin.js +145 -0
- package/lib/EventConstants.js +76 -0
- package/lib/EventListener.js +69 -0
- package/lib/EventPluginHub.js +293 -0
- package/lib/EventPluginRegistry.js +281 -0
- package/lib/EventPluginUtils.js +214 -0
- package/lib/EventPropagators.js +143 -0
- package/lib/ExecutionEnvironment.js +44 -0
- package/lib/LinkedStateMixin.js +46 -0
- package/lib/LinkedValueUtils.js +161 -0
- package/lib/MobileSafariClickEventPlugin.js +63 -0
- package/lib/PooledClass.js +119 -0
- package/lib/React.js +95 -0
- package/lib/ReactCSSTransitionGroup.js +65 -0
- package/lib/ReactCSSTransitionGroupChild.js +138 -0
- package/lib/ReactChildren.js +132 -0
- package/lib/ReactComponent.js +550 -0
- package/lib/ReactComponentBrowserEnvironment.js +158 -0
- package/lib/ReactComponentEnvironment.js +26 -0
- package/lib/ReactCompositeComponent.js +1455 -0
- package/lib/ReactContext.js +67 -0
- package/lib/ReactCurrentOwner.js +39 -0
- package/lib/ReactDOM.js +207 -0
- package/lib/ReactDOMButton.js +68 -0
- package/lib/ReactDOMComponent.js +399 -0
- package/lib/ReactDOMForm.js +59 -0
- package/lib/ReactDOMIDOperations.js +218 -0
- package/lib/ReactDOMImg.js +58 -0
- package/lib/ReactDOMInput.js +181 -0
- package/lib/ReactDOMOption.js +51 -0
- package/lib/ReactDOMSelect.js +179 -0
- package/lib/ReactDOMSelection.js +189 -0
- package/lib/ReactDOMTextarea.js +140 -0
- package/lib/ReactDefaultBatchingStrategy.js +75 -0
- package/lib/ReactDefaultInjection.js +115 -0
- package/lib/ReactDefaultPerf.js +244 -0
- package/lib/ReactDefaultPerfAnalysis.js +199 -0
- package/lib/ReactErrorUtils.js +37 -0
- package/lib/ReactEventEmitter.js +339 -0
- package/lib/ReactEventEmitterMixin.js +57 -0
- package/lib/ReactEventTopLevelCallback.js +149 -0
- package/lib/ReactInjection.js +39 -0
- package/lib/ReactInputSelection.js +140 -0
- package/lib/ReactInstanceHandles.js +338 -0
- package/lib/ReactLink.js +54 -0
- package/lib/ReactMarkupChecksum.js +53 -0
- package/lib/ReactMount.js +641 -0
- package/lib/ReactMountReady.js +95 -0
- package/lib/ReactMultiChild.js +425 -0
- package/lib/ReactMultiChildUpdateTypes.js +38 -0
- package/lib/ReactOwner.js +154 -0
- package/lib/ReactPerf.js +85 -0
- package/lib/ReactPropTransferer.js +147 -0
- package/lib/ReactPropTypeLocationNames.js +31 -0
- package/lib/ReactPropTypeLocations.js +29 -0
- package/lib/ReactPropTypes.js +359 -0
- package/lib/ReactPutListenerQueue.js +61 -0
- package/lib/ReactReconcileTransaction.js +181 -0
- package/lib/ReactRootIndex.js +36 -0
- package/lib/ReactServerRendering.js +59 -0
- package/lib/ReactStateSetters.js +111 -0
- package/lib/ReactTestUtils.js +394 -0
- package/lib/ReactTextComponent.js +99 -0
- package/lib/ReactTransitionChildMapping.js +106 -0
- package/lib/ReactTransitionEvents.js +97 -0
- package/lib/ReactTransitionGroup.js +187 -0
- package/lib/ReactUpdates.js +148 -0
- package/lib/ReactWithAddons.js +51 -0
- package/lib/SelectEventPlugin.js +200 -0
- package/lib/ServerReactRootIndex.js +36 -0
- package/lib/SimpleEventPlugin.js +413 -0
- package/lib/SyntheticClipboardEvent.js +51 -0
- package/lib/SyntheticCompositionEvent.js +51 -0
- package/lib/SyntheticDragEvent.js +44 -0
- package/lib/SyntheticEvent.js +164 -0
- package/lib/SyntheticFocusEvent.js +44 -0
- package/lib/SyntheticKeyboardEvent.js +58 -0
- package/lib/SyntheticMouseEvent.js +85 -0
- package/lib/SyntheticTouchEvent.js +50 -0
- package/lib/SyntheticUIEvent.js +45 -0
- package/lib/SyntheticWheelEvent.js +66 -0
- package/lib/Transaction.js +276 -0
- package/lib/ViewportMetrics.js +37 -0
- package/lib/accumulate.js +54 -0
- package/lib/adler32.js +39 -0
- package/lib/cloneWithProps.js +59 -0
- package/lib/containsNode.js +49 -0
- package/lib/copyProperties.js +54 -0
- package/lib/createArrayFrom.js +91 -0
- package/lib/createFullPageComponent.js +63 -0
- package/lib/createNodesFromMarkup.js +93 -0
- package/lib/createObjectFrom.js +61 -0
- package/lib/cx.js +44 -0
- package/lib/dangerousStyleValue.js +57 -0
- package/lib/emptyFunction.js +43 -0
- package/lib/escapeTextForBrowser.js +47 -0
- package/lib/flattenChildren.js +57 -0
- package/lib/forEachAccumulated.js +36 -0
- package/lib/getActiveElement.js +34 -0
- package/lib/getEventKey.js +85 -0
- package/lib/getEventTarget.js +36 -0
- package/lib/getMarkupWrap.js +118 -0
- package/lib/getNodeForCharacterOffset.js +80 -0
- package/lib/getReactRootElementInContainer.js +40 -0
- package/lib/getTextContentAccessor.js +42 -0
- package/lib/getUnboundedScrollPosition.js +45 -0
- package/lib/hyphenate.js +35 -0
- package/lib/invariant.js +62 -0
- package/lib/isEventSupported.js +70 -0
- package/lib/isNode.js +33 -0
- package/lib/isTextInputElement.js +49 -0
- package/lib/isTextNode.js +30 -0
- package/lib/joinClasses.js +44 -0
- package/lib/keyMirror.js +58 -0
- package/lib/keyOf.js +41 -0
- package/lib/memoizeStringOnly.js +39 -0
- package/lib/merge.js +37 -0
- package/lib/mergeHelpers.js +136 -0
- package/lib/mergeInto.js +45 -0
- package/lib/mixInto.js +34 -0
- package/lib/objMap.js +47 -0
- package/lib/objMapKeyVal.js +47 -0
- package/lib/onlyChild.js +43 -0
- package/lib/performanceNow.js +42 -0
- package/lib/shallowEqual.js +49 -0
- package/lib/shouldUpdateReactComponent.js +58 -0
- package/lib/toArray.js +75 -0
- package/lib/traverseAllChildren.js +189 -0
- package/lib/warning.js +48 -0
- package/package.json +33 -21
- package/react.js +1 -0
- package/.npmignore +0 -7
- package/.travis.yml +0 -7
- package/Jakefile.js +0 -39
- package/LICENSE +0 -19
- package/browser-test/dist.html +0 -90
- package/browser-test/index.html +0 -86
- package/browser-test/min.html +0 -90
- package/dist/react.js +0 -3141
- package/dist/react.min.js +0 -22
- package/doc/advanced.md +0 -174
- package/doc/color-def.graffle +0 -938
- package/doc/color-def.png +0 -0
- package/doc/simple.dot +0 -25
- package/doc/simple.png +0 -0
- package/examples/longer-example.js +0 -41
- package/examples/simple.js +0 -45
- package/examples/using-ast-directly.js +0 -30
- package/examples/using-events1.js +0 -79
- package/examples/using-log-events.js +0 -43
- package/lib/base-task.js +0 -120
- package/lib/cb-task.js +0 -84
- package/lib/core.js +0 -138
- package/lib/dsl.js +0 -138
- package/lib/error.js +0 -55
- package/lib/event-collector.js +0 -81
- package/lib/event-manager.js +0 -89
- package/lib/eventemitter.js +0 -20
- package/lib/finalcb-first-task.js +0 -68
- package/lib/finalcb-task.js +0 -65
- package/lib/id.js +0 -22
- package/lib/input-parser.js +0 -56
- package/lib/log-events.js +0 -101
- package/lib/parse.js +0 -41
- package/lib/promise-resolve.js +0 -50
- package/lib/promise-task.js +0 -93
- package/lib/react.js +0 -59
- package/lib/ret-task.js +0 -71
- package/lib/sprintf.js +0 -18
- package/lib/status.js +0 -14
- package/lib/task.js +0 -251
- package/lib/track-tasks.js +0 -74
- package/lib/validate.js +0 -159
- package/lib/vcon.js +0 -113
- package/lib/when-task.js +0 -84
- package/src/dist.build.requirejs +0 -20
- package/test/ast.mocha.js +0 -136
- package/test/cb-task.mocha.js +0 -220
- package/test/core-deferred.mocha.js +0 -143
- package/test/core-when.mocha.js +0 -96
- package/test/core.mocha.js +0 -589
- package/test/dsl.mocha.js +0 -352
- package/test/event-manager.mocha.js +0 -119
- package/test/exec-options.mocha.js +0 -48
- package/test/finalcb-task.mocha.js +0 -58
- package/test/input-parser.mocha.js +0 -86
- package/test/log-events.mocha.js +0 -88
- package/test/mocha.opts +0 -2
- package/test/module-use.mocha.js +0 -164
- package/test/promise-auto-resolve.mocha.js +0 -68
- package/test/ret-task.mocha.js +0 -220
- package/test/task.mocha.js +0 -42
- package/test/validate-cb-task.mocha.js +0 -100
- package/test/validate-ret-task.mocha.js +0 -110
- package/test/validate.mocha.js +0 -324
- package/test/vcon.mocha.js +0 -193
- package/vendor/chai/chai.js +0 -4251
- package/vendor/jquery/jquery-1.7.1.js +0 -9266
- package/vendor/jquery/jquery-1.7.1.min.js +0 -4
- package/vendor/node/util.js +0 -531
- package/vendor/requirejs/require.js +0 -2045
- 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;
|