react 0.7.1 → 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.
- package/README.md +15 -228
- package/ReactJSErrors.js +40 -0
- package/addons.js +4 -0
- package/lib/$.js +46 -0
- package/lib/CSSCore.js +114 -0
- package/lib/CSSProperty.js +90 -0
- package/lib/CSSPropertyOperations.js +97 -0
- package/lib/CallbackRegistry.js +91 -0
- package/lib/ChangeEventPlugin.js +365 -0
- package/lib/CompositionEventPlugin.js +212 -0
- package/lib/DOMChildrenOperations.js +135 -0
- package/lib/DOMProperty.js +266 -0
- package/lib/DOMPropertyOperations.js +168 -0
- package/lib/Danger.js +186 -0
- package/lib/DefaultDOMPropertyConfig.js +187 -0
- package/lib/DefaultEventPluginOrder.js +44 -0
- package/lib/EnterLeaveEventPlugin.js +112 -0
- package/lib/EventConstants.js +73 -0
- package/lib/EventListener.js +61 -0
- package/lib/EventPluginHub.js +190 -0
- package/lib/EventPluginRegistry.js +237 -0
- package/lib/EventPluginUtils.js +185 -0
- package/lib/EventPropagators.js +179 -0
- package/lib/ExecutionEnvironment.js +41 -0
- package/lib/LinkedStateMixin.js +46 -0
- package/lib/LinkedValueMixin.js +68 -0
- package/lib/MobileSafariClickEventPlugin.js +63 -0
- package/lib/PooledClass.js +113 -0
- package/lib/React.js +71 -0
- package/lib/ReactChildren.js +132 -0
- package/lib/ReactComponent.js +515 -0
- package/lib/ReactComponentBrowserEnvironment.js +140 -0
- package/lib/ReactComponentEnvironment.js +24 -0
- package/lib/ReactCompositeComponent.js +1020 -0
- package/lib/ReactCurrentOwner.js +39 -0
- package/lib/ReactDOM.js +194 -0
- package/lib/ReactDOMButton.js +64 -0
- package/lib/ReactDOMComponent.js +374 -0
- package/lib/ReactDOMForm.js +52 -0
- package/lib/ReactDOMIDOperations.js +173 -0
- package/lib/ReactDOMInput.js +169 -0
- package/lib/ReactDOMOption.js +50 -0
- package/lib/ReactDOMSelect.js +160 -0
- package/lib/ReactDOMSelection.js +189 -0
- package/lib/ReactDOMTextarea.js +136 -0
- package/lib/ReactDefaultBatchingStrategy.js +75 -0
- package/lib/ReactDefaultInjection.js +91 -0
- package/lib/ReactDefaultPerf.js +407 -0
- package/lib/ReactErrorUtils.js +46 -0
- package/lib/ReactEventEmitter.js +341 -0
- package/lib/ReactEventEmitterMixin.js +89 -0
- package/lib/ReactEventTopLevelCallback.js +89 -0
- package/lib/ReactInputSelection.js +140 -0
- package/lib/ReactInstanceHandles.js +322 -0
- package/lib/ReactLink.js +54 -0
- package/lib/ReactMarkupChecksum.js +53 -0
- package/lib/ReactMount.js +617 -0
- package/lib/ReactMountReady.js +95 -0
- package/lib/ReactMultiChild.js +441 -0
- package/lib/ReactMultiChildUpdateTypes.js +36 -0
- package/lib/ReactOwner.js +146 -0
- package/lib/ReactPerf.js +88 -0
- package/lib/ReactPropTransferer.js +128 -0
- package/lib/ReactPropTypes.js +158 -0
- package/lib/ReactReconcileTransaction.js +161 -0
- package/lib/ReactServerRendering.js +62 -0
- package/lib/ReactStateSetters.js +111 -0
- package/lib/ReactTextComponent.js +94 -0
- package/lib/ReactTransitionEvents.js +97 -0
- package/lib/ReactTransitionGroup.js +112 -0
- package/lib/ReactTransitionKeySet.js +111 -0
- package/lib/ReactTransitionableChild.js +152 -0
- package/lib/ReactUpdates.js +145 -0
- package/lib/ReactWithAddons.js +41 -0
- package/lib/SelectEventPlugin.js +217 -0
- package/lib/SimpleEventPlugin.js +365 -0
- package/lib/SyntheticClipboardEvent.js +45 -0
- package/lib/SyntheticCompositionEvent.js +51 -0
- package/lib/SyntheticEvent.js +163 -0
- package/lib/SyntheticFocusEvent.js +44 -0
- package/lib/SyntheticKeyboardEvent.js +56 -0
- package/lib/SyntheticMouseEvent.js +85 -0
- package/lib/SyntheticTouchEvent.js +50 -0
- package/lib/SyntheticUIEvent.js +45 -0
- package/lib/SyntheticWheelEvent.js +63 -0
- package/lib/Transaction.js +251 -0
- package/lib/ViewportMetrics.js +37 -0
- package/lib/accumulate.js +54 -0
- package/lib/adler32.js +39 -0
- package/lib/containsNode.js +49 -0
- package/lib/copyProperties.js +54 -0
- package/lib/createArrayFrom.js +94 -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/ex.js +49 -0
- package/lib/filterAttributes.js +45 -0
- package/lib/flattenChildren.js +54 -0
- package/lib/forEachAccumulated.js +36 -0
- package/lib/ge.js +76 -0
- package/lib/getActiveElement.js +33 -0
- package/lib/getEventTarget.js +36 -0
- package/lib/getMarkupWrap.js +108 -0
- package/lib/getNodeForCharacterOffset.js +80 -0
- package/lib/getReactRootElementInContainer.js +40 -0
- package/lib/getTextContentAccessor.js +40 -0
- package/lib/getUnboundedScrollPosition.js +45 -0
- package/lib/hyphenate.js +35 -0
- package/lib/invariant.js +54 -0
- package/lib/isEventSupported.js +74 -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 +137 -0
- package/lib/mergeInto.js +45 -0
- package/lib/mixInto.js +34 -0
- package/lib/mutateHTMLNodeWithMarkup.js +100 -0
- package/lib/objMap.js +47 -0
- package/lib/objMapKeyVal.js +47 -0
- package/lib/performanceNow.js +42 -0
- package/lib/shallowEqual.js +49 -0
- package/lib/traverseAllChildren.js +127 -0
- package/package.json +33 -31
- package/react.js +4 -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 -175
- 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
package/lib/mergeInto.js
ADDED
|
@@ -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 mergeInto
|
|
17
|
+
* @typechecks static-only
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
var mergeHelpers = require("./mergeHelpers");
|
|
23
|
+
|
|
24
|
+
var checkMergeObjectArg = mergeHelpers.checkMergeObjectArg;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Shallow merges two structures by mutating the first parameter.
|
|
28
|
+
*
|
|
29
|
+
* @param {object} one Object to be merged into.
|
|
30
|
+
* @param {?object} two Optional object with properties to merge from.
|
|
31
|
+
*/
|
|
32
|
+
function mergeInto(one, two) {
|
|
33
|
+
checkMergeObjectArg(one);
|
|
34
|
+
if (two != null) {
|
|
35
|
+
checkMergeObjectArg(two);
|
|
36
|
+
for (var key in two) {
|
|
37
|
+
if (!two.hasOwnProperty(key)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
one[key] = two[key];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
module.exports = mergeInto;
|
package/lib/mixInto.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
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 mixInto
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Simply copies properties to the prototype.
|
|
23
|
+
*/
|
|
24
|
+
var mixInto = function(constructor, methodBag) {
|
|
25
|
+
var methodName;
|
|
26
|
+
for (methodName in methodBag) {
|
|
27
|
+
if (!methodBag.hasOwnProperty(methodName)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
constructor.prototype[methodName] = methodBag[methodName];
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
module.exports = mixInto;
|
|
@@ -0,0 +1,100 @@
|
|
|
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 mutateHTMLNodeWithMarkup
|
|
17
|
+
* @typechecks static-only
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/*jslint evil: true */
|
|
21
|
+
|
|
22
|
+
'use strict';
|
|
23
|
+
|
|
24
|
+
var createNodesFromMarkup = require("./createNodesFromMarkup");
|
|
25
|
+
var filterAttributes = require("./filterAttributes");
|
|
26
|
+
var invariant = require("./invariant");
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* You can't set the innerHTML of a document. Unless you have
|
|
30
|
+
* this function.
|
|
31
|
+
*
|
|
32
|
+
* @param {DOMElement} node with tagName == 'html'
|
|
33
|
+
* @param {string} markup markup string including <html>.
|
|
34
|
+
*/
|
|
35
|
+
function mutateHTMLNodeWithMarkup(node, markup) {
|
|
36
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
37
|
+
node.tagName.toLowerCase() === 'html',
|
|
38
|
+
'mutateHTMLNodeWithMarkup(): node must have tagName of "html", got %s',
|
|
39
|
+
node.tagName
|
|
40
|
+
) : invariant(node.tagName.toLowerCase() === 'html'));
|
|
41
|
+
|
|
42
|
+
markup = markup.trim();
|
|
43
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
44
|
+
markup.toLowerCase().indexOf('<html') === 0,
|
|
45
|
+
'mutateHTMLNodeWithMarkup(): markup must start with <html'
|
|
46
|
+
) : invariant(markup.toLowerCase().indexOf('<html') === 0));
|
|
47
|
+
|
|
48
|
+
// First let's extract the various pieces of markup.
|
|
49
|
+
var htmlOpenTagEnd = markup.indexOf('>') + 1;
|
|
50
|
+
var htmlCloseTagStart = markup.lastIndexOf('<');
|
|
51
|
+
var htmlOpenTag = markup.substring(0, htmlOpenTagEnd);
|
|
52
|
+
var innerHTML = markup.substring(htmlOpenTagEnd, htmlCloseTagStart);
|
|
53
|
+
|
|
54
|
+
// Now for the fun stuff. Pass through both sets of attributes and
|
|
55
|
+
// bring them up-to-date. We get the new set by creating a markup
|
|
56
|
+
// fragment.
|
|
57
|
+
var shouldExtractAttributes = htmlOpenTag.indexOf(' ') > -1;
|
|
58
|
+
var attributeHolder = null;
|
|
59
|
+
|
|
60
|
+
if (shouldExtractAttributes) {
|
|
61
|
+
// We extract the attributes by creating a <span> and evaluating
|
|
62
|
+
// the node.
|
|
63
|
+
attributeHolder = createNodesFromMarkup(
|
|
64
|
+
htmlOpenTag.replace('html ', 'span ') + '</span>'
|
|
65
|
+
)[0];
|
|
66
|
+
|
|
67
|
+
// Add all attributes present in attributeHolder
|
|
68
|
+
var attributesToSet = filterAttributes(
|
|
69
|
+
attributeHolder,
|
|
70
|
+
function(attr) {
|
|
71
|
+
return node.getAttributeNS(attr.namespaceURI, attr.name) !== attr.value;
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
attributesToSet.forEach(function(attr) {
|
|
75
|
+
node.setAttributeNS(attr.namespaceURI, attr.name, attr.value);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Remove all attributes not present in attributeHolder
|
|
80
|
+
var attributesToRemove = filterAttributes(
|
|
81
|
+
node,
|
|
82
|
+
function(attr) {
|
|
83
|
+
// Remove all attributes if attributeHolder is null or if it does not have
|
|
84
|
+
// the desired attribute.
|
|
85
|
+
return !(
|
|
86
|
+
attributeHolder &&
|
|
87
|
+
attributeHolder.hasAttributeNS(attr.namespaceURI, attr.name)
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
attributesToRemove.forEach(function(attr) {
|
|
92
|
+
node.removeAttributeNS(attr.namespaceURI, attr.name);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// Finally, set the inner HTML. No tricks needed. Do this last to
|
|
96
|
+
// minimize likelihood of triggering reflows.
|
|
97
|
+
node.innerHTML = innerHTML;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
module.exports = mutateHTMLNodeWithMarkup;
|
package/lib/objMap.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
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 objMap
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* For each key/value pair, invokes callback func and constructs a resulting
|
|
23
|
+
* object which contains, for every key in obj, values that are the result of
|
|
24
|
+
* of invoking the function:
|
|
25
|
+
*
|
|
26
|
+
* func(value, key, iteration)
|
|
27
|
+
*
|
|
28
|
+
* @param {?object} obj Object to map keys over
|
|
29
|
+
* @param {function} func Invoked for each key/val pair.
|
|
30
|
+
* @param {?*} context
|
|
31
|
+
* @return {?object} Result of mapping or null if obj is falsey
|
|
32
|
+
*/
|
|
33
|
+
function objMap(obj, func, context) {
|
|
34
|
+
if (!obj) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
var i = 0;
|
|
38
|
+
var ret = {};
|
|
39
|
+
for (var key in obj) {
|
|
40
|
+
if (obj.hasOwnProperty(key)) {
|
|
41
|
+
ret[key] = func.call(context, obj[key], key, i++);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return ret;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = objMap;
|
|
@@ -0,0 +1,47 @@
|
|
|
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 objMapKeyVal
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Behaves the same as `objMap` but invokes func with the key first, and value
|
|
23
|
+
* second. Use `objMap` unless you need this special case.
|
|
24
|
+
* Invokes func as:
|
|
25
|
+
*
|
|
26
|
+
* func(key, value, iteration)
|
|
27
|
+
*
|
|
28
|
+
* @param {?object} obj Object to map keys over
|
|
29
|
+
* @param {!function} func Invoked for each key/val pair.
|
|
30
|
+
* @param {?*} context
|
|
31
|
+
* @return {?object} Result of mapping or null if obj is falsey
|
|
32
|
+
*/
|
|
33
|
+
function objMapKeyVal(obj, func, context) {
|
|
34
|
+
if (!obj) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
var i = 0;
|
|
38
|
+
var ret = {};
|
|
39
|
+
for (var key in obj) {
|
|
40
|
+
if (obj.hasOwnProperty(key)) {
|
|
41
|
+
ret[key] = func.call(context, key, obj[key], i++);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return ret;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = objMapKeyVal;
|
|
@@ -0,0 +1,42 @@
|
|
|
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 performanceNow
|
|
17
|
+
* @typechecks static-only
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Detect if we can use window.performance.now() and gracefully
|
|
26
|
+
* fallback to Date.now() if it doesn't exist.
|
|
27
|
+
* We need to support Firefox < 15 for now due to Facebook's webdriver
|
|
28
|
+
* infrastructure.
|
|
29
|
+
*/
|
|
30
|
+
var performance = null;
|
|
31
|
+
|
|
32
|
+
if (ExecutionEnvironment.canUseDOM) {
|
|
33
|
+
performance = window.performance || window.webkitPerformance;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!performance || !performance.now) {
|
|
37
|
+
performance = Date;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var performanceNow = performance.now.bind(performance);
|
|
41
|
+
|
|
42
|
+
module.exports = performanceNow;
|
|
@@ -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 shallowEqual
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Performs equality by iterating through keys on an object and returning
|
|
23
|
+
* false when any key has values which are not strictly equal between
|
|
24
|
+
* objA and objB. Returns true when the values of all keys are strictly equal.
|
|
25
|
+
*
|
|
26
|
+
* @return {boolean}
|
|
27
|
+
*/
|
|
28
|
+
function shallowEqual(objA, objB) {
|
|
29
|
+
if (objA === objB) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
var key;
|
|
33
|
+
// Test for A's keys different from B.
|
|
34
|
+
for (key in objA) {
|
|
35
|
+
if (objA.hasOwnProperty(key) &&
|
|
36
|
+
(!objB.hasOwnProperty(key) || objA[key] !== objB[key])) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Test for B'a keys missing from A.
|
|
41
|
+
for (key in objB) {
|
|
42
|
+
if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
module.exports = shallowEqual;
|
|
@@ -0,0 +1,127 @@
|
|
|
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 traverseAllChildren
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var ReactComponent = require("./ReactComponent");
|
|
22
|
+
var ReactTextComponent = require("./ReactTextComponent");
|
|
23
|
+
|
|
24
|
+
var invariant = require("./invariant");
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* TODO: Test that:
|
|
28
|
+
* 1. `mapChildren` transforms strings and numbers into `ReactTextComponent`.
|
|
29
|
+
* 2. it('should fail when supplied duplicate key', function() {
|
|
30
|
+
* 3. That a single child and an array with one item have the same key pattern.
|
|
31
|
+
* });
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @param {?*} children Children tree container.
|
|
36
|
+
* @param {!string} nameSoFar Name of the key path so far.
|
|
37
|
+
* @param {!number} indexSoFar Number of children encountered until this point.
|
|
38
|
+
* @param {!function} callback Callback to invoke with each child found.
|
|
39
|
+
* @param {?*} traverseContext Used to pass information throughout the traversal
|
|
40
|
+
* process.
|
|
41
|
+
* @return {!number} The number of children in this subtree.
|
|
42
|
+
*/
|
|
43
|
+
var traverseAllChildrenImpl =
|
|
44
|
+
function(children, nameSoFar, indexSoFar, callback, traverseContext) {
|
|
45
|
+
var subtreeCount = 0; // Count of children found in the current subtree.
|
|
46
|
+
if (Array.isArray(children)) {
|
|
47
|
+
for (var i = 0; i < children.length; i++) {
|
|
48
|
+
var child = children[i];
|
|
49
|
+
var nextName = nameSoFar + ReactComponent.getKey(child, i);
|
|
50
|
+
var nextIndex = indexSoFar + subtreeCount;
|
|
51
|
+
subtreeCount += traverseAllChildrenImpl(
|
|
52
|
+
child,
|
|
53
|
+
nextName,
|
|
54
|
+
nextIndex,
|
|
55
|
+
callback,
|
|
56
|
+
traverseContext
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
var type = typeof children;
|
|
61
|
+
var isOnlyChild = nameSoFar === '';
|
|
62
|
+
// If it's the only child, treat the name as if it was wrapped in an array
|
|
63
|
+
// so that it's consistent if the number of children grows
|
|
64
|
+
var storageName = isOnlyChild ?
|
|
65
|
+
ReactComponent.getKey(children, 0):
|
|
66
|
+
nameSoFar;
|
|
67
|
+
if (children === null || children === undefined || type === 'boolean') {
|
|
68
|
+
// All of the above are perceived as null.
|
|
69
|
+
callback(traverseContext, null, storageName, indexSoFar);
|
|
70
|
+
subtreeCount = 1;
|
|
71
|
+
} else if (children.mountComponentIntoNode) {
|
|
72
|
+
callback(traverseContext, children, storageName, indexSoFar);
|
|
73
|
+
subtreeCount = 1;
|
|
74
|
+
} else {
|
|
75
|
+
if (type === 'object') {
|
|
76
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
77
|
+
!children || children.nodeType !== 1,
|
|
78
|
+
'traverseAllChildren(...): Encountered an invalid child; DOM ' +
|
|
79
|
+
'elements are not valid children of React components.'
|
|
80
|
+
) : invariant(!children || children.nodeType !== 1));
|
|
81
|
+
for (var key in children) {
|
|
82
|
+
if (children.hasOwnProperty(key)) {
|
|
83
|
+
subtreeCount += traverseAllChildrenImpl(
|
|
84
|
+
children[key],
|
|
85
|
+
nameSoFar + '{' + key + '}',
|
|
86
|
+
indexSoFar + subtreeCount,
|
|
87
|
+
callback,
|
|
88
|
+
traverseContext
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} else if (type === 'string') {
|
|
93
|
+
var normalizedText = new ReactTextComponent(children);
|
|
94
|
+
callback(traverseContext, normalizedText, storageName, indexSoFar);
|
|
95
|
+
subtreeCount += 1;
|
|
96
|
+
} else if (type === 'number') {
|
|
97
|
+
var normalizedNumber = new ReactTextComponent('' + children);
|
|
98
|
+
callback(traverseContext, normalizedNumber, storageName, indexSoFar);
|
|
99
|
+
subtreeCount += 1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return subtreeCount;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Traverses children that are typically specified as `props.children`, but
|
|
108
|
+
* might also be specified through attributes:
|
|
109
|
+
*
|
|
110
|
+
* - `traverseAllChildren(this.props.children, ...)`
|
|
111
|
+
* - `traverseAllChildren(this.props.leftPanelChildren, ...)`
|
|
112
|
+
*
|
|
113
|
+
* The `traverseContext` is an optional argument that is passed through the
|
|
114
|
+
* entire traversal. It can be used to store accumulations or anything else that
|
|
115
|
+
* the callback might find relevant.
|
|
116
|
+
*
|
|
117
|
+
* @param {?*} children Children tree object.
|
|
118
|
+
* @param {!function} callback To invoke upon traversing each child.
|
|
119
|
+
* @param {?*} traverseContext Context for traversal.
|
|
120
|
+
*/
|
|
121
|
+
function traverseAllChildren(children, callback, traverseContext) {
|
|
122
|
+
if (children !== null && children !== undefined) {
|
|
123
|
+
traverseAllChildrenImpl(children, '', 0, callback, traverseContext);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
module.exports = traverseAllChildren;
|