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,29 @@
|
|
|
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 ReactPropTypeLocations
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var keyMirror = require("./keyMirror");
|
|
22
|
+
|
|
23
|
+
var ReactPropTypeLocations = keyMirror({
|
|
24
|
+
prop: null,
|
|
25
|
+
context: null,
|
|
26
|
+
childContext: null
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
module.exports = ReactPropTypeLocations;
|
|
@@ -0,0 +1,359 @@
|
|
|
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 ReactPropTypes
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var ReactComponent = require("./ReactComponent");
|
|
22
|
+
var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");
|
|
23
|
+
|
|
24
|
+
var warning = require("./warning");
|
|
25
|
+
var createObjectFrom = require("./createObjectFrom");
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Collection of methods that allow declaration and validation of props that are
|
|
29
|
+
* supplied to React components. Example usage:
|
|
30
|
+
*
|
|
31
|
+
* var Props = require('ReactPropTypes');
|
|
32
|
+
* var MyArticle = React.createClass({
|
|
33
|
+
* propTypes: {
|
|
34
|
+
* // An optional string prop named "description".
|
|
35
|
+
* description: Props.string,
|
|
36
|
+
*
|
|
37
|
+
* // A required enum prop named "category".
|
|
38
|
+
* category: Props.oneOf(['News','Photos']).isRequired,
|
|
39
|
+
*
|
|
40
|
+
* // A prop named "dialog" that requires an instance of Dialog.
|
|
41
|
+
* dialog: Props.instanceOf(Dialog).isRequired
|
|
42
|
+
* },
|
|
43
|
+
* render: function() { ... }
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* A more formal specification of how these methods are used:
|
|
47
|
+
*
|
|
48
|
+
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
|
|
49
|
+
* decl := ReactPropTypes.{type}(.isRequired)?
|
|
50
|
+
*
|
|
51
|
+
* Each and every declaration produces a function with the same signature. This
|
|
52
|
+
* allows the creation of custom validation functions. For example:
|
|
53
|
+
*
|
|
54
|
+
* var Props = require('ReactPropTypes');
|
|
55
|
+
* var MyLink = React.createClass({
|
|
56
|
+
* propTypes: {
|
|
57
|
+
* // An optional string or URI prop named "href".
|
|
58
|
+
* href: function(props, propName, componentName) {
|
|
59
|
+
* var propValue = props[propName];
|
|
60
|
+
* warning(
|
|
61
|
+
* propValue == null ||
|
|
62
|
+
* typeof propValue === 'string' ||
|
|
63
|
+
* propValue instanceof URI,
|
|
64
|
+
* 'Invalid `%s` supplied to `%s`, expected string or URI.',
|
|
65
|
+
* propName,
|
|
66
|
+
* componentName
|
|
67
|
+
* );
|
|
68
|
+
* }
|
|
69
|
+
* },
|
|
70
|
+
* render: function() { ... }
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
var Props = {
|
|
76
|
+
|
|
77
|
+
array: createPrimitiveTypeChecker('array'),
|
|
78
|
+
bool: createPrimitiveTypeChecker('boolean'),
|
|
79
|
+
func: createPrimitiveTypeChecker('function'),
|
|
80
|
+
number: createPrimitiveTypeChecker('number'),
|
|
81
|
+
object: createPrimitiveTypeChecker('object'),
|
|
82
|
+
string: createPrimitiveTypeChecker('string'),
|
|
83
|
+
|
|
84
|
+
shape: createShapeTypeChecker,
|
|
85
|
+
oneOf: createEnumTypeChecker,
|
|
86
|
+
oneOfType: createUnionTypeChecker,
|
|
87
|
+
arrayOf: createArrayOfTypeChecker,
|
|
88
|
+
|
|
89
|
+
instanceOf: createInstanceTypeChecker,
|
|
90
|
+
|
|
91
|
+
renderable: createRenderableTypeChecker(),
|
|
92
|
+
|
|
93
|
+
component: createComponentTypeChecker(),
|
|
94
|
+
|
|
95
|
+
any: createAnyTypeChecker()
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
var ANONYMOUS = '<<anonymous>>';
|
|
99
|
+
|
|
100
|
+
function isRenderable(propValue) {
|
|
101
|
+
switch(typeof propValue) {
|
|
102
|
+
case 'number':
|
|
103
|
+
case 'string':
|
|
104
|
+
return true;
|
|
105
|
+
case 'object':
|
|
106
|
+
if (Array.isArray(propValue)) {
|
|
107
|
+
return propValue.every(isRenderable);
|
|
108
|
+
}
|
|
109
|
+
if (ReactComponent.isValidComponent(propValue)) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
for (var k in propValue) {
|
|
113
|
+
if (!isRenderable(propValue[k])) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
default:
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Equivalent of typeof but with special handling for arrays
|
|
124
|
+
function getPropType(propValue) {
|
|
125
|
+
var propType = typeof propValue;
|
|
126
|
+
if (propType === 'object' && Array.isArray(propValue)) {
|
|
127
|
+
return 'array';
|
|
128
|
+
}
|
|
129
|
+
return propType;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function createAnyTypeChecker() {
|
|
133
|
+
function validateAnyType(
|
|
134
|
+
shouldWarn, propValue, propName, componentName, location
|
|
135
|
+
) {
|
|
136
|
+
return true; // is always valid
|
|
137
|
+
}
|
|
138
|
+
return createChainableTypeChecker(validateAnyType);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function createPrimitiveTypeChecker(expectedType) {
|
|
142
|
+
function validatePrimitiveType(
|
|
143
|
+
shouldWarn, propValue, propName, componentName, location
|
|
144
|
+
) {
|
|
145
|
+
var propType = getPropType(propValue);
|
|
146
|
+
var isValid = propType === expectedType;
|
|
147
|
+
if (shouldWarn) {
|
|
148
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
149
|
+
isValid,
|
|
150
|
+
'Invalid %s `%s` of type `%s` supplied to `%s`, expected `%s`.',
|
|
151
|
+
ReactPropTypeLocationNames[location],
|
|
152
|
+
propName,
|
|
153
|
+
propType,
|
|
154
|
+
componentName,
|
|
155
|
+
expectedType
|
|
156
|
+
) : null);
|
|
157
|
+
}
|
|
158
|
+
return isValid;
|
|
159
|
+
}
|
|
160
|
+
return createChainableTypeChecker(validatePrimitiveType);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function createEnumTypeChecker(expectedValues) {
|
|
164
|
+
var expectedEnum = createObjectFrom(expectedValues);
|
|
165
|
+
function validateEnumType(
|
|
166
|
+
shouldWarn, propValue, propName, componentName, location
|
|
167
|
+
) {
|
|
168
|
+
var isValid = expectedEnum[propValue];
|
|
169
|
+
if (shouldWarn) {
|
|
170
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
171
|
+
isValid,
|
|
172
|
+
'Invalid %s `%s` supplied to `%s`, expected one of %s.',
|
|
173
|
+
ReactPropTypeLocationNames[location],
|
|
174
|
+
propName,
|
|
175
|
+
componentName,
|
|
176
|
+
JSON.stringify(Object.keys(expectedEnum))
|
|
177
|
+
) : null);
|
|
178
|
+
}
|
|
179
|
+
return isValid;
|
|
180
|
+
}
|
|
181
|
+
return createChainableTypeChecker(validateEnumType);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function createShapeTypeChecker(shapeTypes) {
|
|
185
|
+
function validateShapeType(
|
|
186
|
+
shouldWarn, propValue, propName, componentName, location
|
|
187
|
+
) {
|
|
188
|
+
var propType = getPropType(propValue);
|
|
189
|
+
var isValid = propType === 'object';
|
|
190
|
+
if (isValid) {
|
|
191
|
+
for (var key in shapeTypes) {
|
|
192
|
+
var checker = shapeTypes[key];
|
|
193
|
+
if (checker && !checker(propValue, key, componentName, location)) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (shouldWarn) {
|
|
199
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
200
|
+
isValid,
|
|
201
|
+
'Invalid %s `%s` of type `%s` supplied to `%s`, expected `object`.',
|
|
202
|
+
ReactPropTypeLocationNames[location],
|
|
203
|
+
propName,
|
|
204
|
+
propType,
|
|
205
|
+
componentName
|
|
206
|
+
) : null);
|
|
207
|
+
}
|
|
208
|
+
return isValid;
|
|
209
|
+
}
|
|
210
|
+
return createChainableTypeChecker(validateShapeType);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function createInstanceTypeChecker(expectedClass) {
|
|
214
|
+
function validateInstanceType(
|
|
215
|
+
shouldWarn, propValue, propName, componentName, location
|
|
216
|
+
) {
|
|
217
|
+
var isValid = propValue instanceof expectedClass;
|
|
218
|
+
if (shouldWarn) {
|
|
219
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
220
|
+
isValid,
|
|
221
|
+
'Invalid %s `%s` supplied to `%s`, expected instance of `%s`.',
|
|
222
|
+
ReactPropTypeLocationNames[location],
|
|
223
|
+
propName,
|
|
224
|
+
componentName,
|
|
225
|
+
expectedClass.name || ANONYMOUS
|
|
226
|
+
) : null);
|
|
227
|
+
}
|
|
228
|
+
return isValid;
|
|
229
|
+
}
|
|
230
|
+
return createChainableTypeChecker(validateInstanceType);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function createArrayOfTypeChecker(propTypeChecker) {
|
|
234
|
+
function validateArrayType(
|
|
235
|
+
shouldWarn, propValue, propName, componentName, location
|
|
236
|
+
) {
|
|
237
|
+
var isValid = Array.isArray(propValue);
|
|
238
|
+
if (isValid) {
|
|
239
|
+
for (var i = 0; i < propValue.length; i++) {
|
|
240
|
+
if (!propTypeChecker(propValue, i, componentName, location)) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (shouldWarn) {
|
|
246
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
247
|
+
isValid,
|
|
248
|
+
'Invalid %s `%s` supplied to `%s`, expected an array.',
|
|
249
|
+
ReactPropTypeLocationNames[location],
|
|
250
|
+
propName,
|
|
251
|
+
componentName
|
|
252
|
+
) : null);
|
|
253
|
+
}
|
|
254
|
+
return isValid;
|
|
255
|
+
}
|
|
256
|
+
return createChainableTypeChecker(validateArrayType);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function createRenderableTypeChecker() {
|
|
260
|
+
function validateRenderableType(
|
|
261
|
+
shouldWarn, propValue, propName, componentName, location
|
|
262
|
+
) {
|
|
263
|
+
var isValid = isRenderable(propValue);
|
|
264
|
+
if (shouldWarn) {
|
|
265
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
266
|
+
isValid,
|
|
267
|
+
'Invalid %s `%s` supplied to `%s`, expected a renderable prop.',
|
|
268
|
+
ReactPropTypeLocationNames[location],
|
|
269
|
+
propName,
|
|
270
|
+
componentName
|
|
271
|
+
) : null);
|
|
272
|
+
}
|
|
273
|
+
return isValid;
|
|
274
|
+
}
|
|
275
|
+
return createChainableTypeChecker(validateRenderableType);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function createComponentTypeChecker() {
|
|
279
|
+
function validateComponentType(
|
|
280
|
+
shouldWarn, propValue, propName, componentName, location
|
|
281
|
+
) {
|
|
282
|
+
var isValid = ReactComponent.isValidComponent(propValue);
|
|
283
|
+
if (shouldWarn) {
|
|
284
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
285
|
+
isValid,
|
|
286
|
+
'Invalid %s `%s` supplied to `%s`, expected a React component.',
|
|
287
|
+
ReactPropTypeLocationNames[location],
|
|
288
|
+
propName,
|
|
289
|
+
componentName
|
|
290
|
+
) : null);
|
|
291
|
+
}
|
|
292
|
+
return isValid;
|
|
293
|
+
}
|
|
294
|
+
return createChainableTypeChecker(validateComponentType);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function createUnionTypeChecker(arrayOfValidators) {
|
|
298
|
+
return function(props, propName, componentName, location) {
|
|
299
|
+
var isValid = false;
|
|
300
|
+
for (var ii = 0; ii < arrayOfValidators.length; ii++) {
|
|
301
|
+
var validate = arrayOfValidators[ii];
|
|
302
|
+
if (typeof validate.weak === 'function') {
|
|
303
|
+
validate = validate.weak;
|
|
304
|
+
}
|
|
305
|
+
if (validate(props, propName, componentName, location)) {
|
|
306
|
+
isValid = true;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
311
|
+
isValid,
|
|
312
|
+
'Invalid %s `%s` supplied to `%s`.',
|
|
313
|
+
ReactPropTypeLocationNames[location],
|
|
314
|
+
propName,
|
|
315
|
+
componentName || ANONYMOUS
|
|
316
|
+
) : null);
|
|
317
|
+
return isValid;
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function createChainableTypeChecker(validate) {
|
|
322
|
+
function checkType(
|
|
323
|
+
isRequired, shouldWarn, props, propName, componentName, location
|
|
324
|
+
) {
|
|
325
|
+
var propValue = props[propName];
|
|
326
|
+
if (propValue != null) {
|
|
327
|
+
// Only validate if there is a value to check.
|
|
328
|
+
return validate(
|
|
329
|
+
shouldWarn,
|
|
330
|
+
propValue,
|
|
331
|
+
propName,
|
|
332
|
+
componentName || ANONYMOUS,
|
|
333
|
+
location
|
|
334
|
+
);
|
|
335
|
+
} else {
|
|
336
|
+
var isValid = !isRequired;
|
|
337
|
+
if (shouldWarn) {
|
|
338
|
+
("production" !== process.env.NODE_ENV ? warning(
|
|
339
|
+
isValid,
|
|
340
|
+
'Required %s `%s` was not specified in `%s`.',
|
|
341
|
+
ReactPropTypeLocationNames[location],
|
|
342
|
+
propName,
|
|
343
|
+
componentName || ANONYMOUS
|
|
344
|
+
) : null);
|
|
345
|
+
}
|
|
346
|
+
return isValid;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
var checker = checkType.bind(null, false, true);
|
|
351
|
+
checker.weak = checkType.bind(null, false, false);
|
|
352
|
+
checker.isRequired = checkType.bind(null, true, true);
|
|
353
|
+
checker.weak.isRequired = checkType.bind(null, true, false);
|
|
354
|
+
checker.isRequired.weak = checker.weak.isRequired;
|
|
355
|
+
|
|
356
|
+
return checker;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
module.exports = Props;
|
|
@@ -0,0 +1,61 @@
|
|
|
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 ReactPutListenerQueue
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var PooledClass = require("./PooledClass");
|
|
22
|
+
var ReactEventEmitter = require("./ReactEventEmitter");
|
|
23
|
+
|
|
24
|
+
var mixInto = require("./mixInto");
|
|
25
|
+
|
|
26
|
+
function ReactPutListenerQueue() {
|
|
27
|
+
this.listenersToPut = [];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
mixInto(ReactPutListenerQueue, {
|
|
31
|
+
enqueuePutListener: function(rootNodeID, propKey, propValue) {
|
|
32
|
+
this.listenersToPut.push({
|
|
33
|
+
rootNodeID: rootNodeID,
|
|
34
|
+
propKey: propKey,
|
|
35
|
+
propValue: propValue
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
putListeners: function() {
|
|
40
|
+
for (var i = 0; i < this.listenersToPut.length; i++) {
|
|
41
|
+
var listenerToPut = this.listenersToPut[i];
|
|
42
|
+
ReactEventEmitter.putListener(
|
|
43
|
+
listenerToPut.rootNodeID,
|
|
44
|
+
listenerToPut.propKey,
|
|
45
|
+
listenerToPut.propValue
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
reset: function() {
|
|
51
|
+
this.listenersToPut.length = 0;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
destructor: function() {
|
|
55
|
+
this.reset();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
PooledClass.addPoolingTo(ReactPutListenerQueue);
|
|
60
|
+
|
|
61
|
+
module.exports = ReactPutListenerQueue;
|