react 0.8.0 → 0.10.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 +0 -8
- package/addons.js +0 -3
- package/lib/AutoFocusMixin.js +32 -0
- package/lib/CSSCore.js +23 -22
- package/lib/CSSProperty.js +32 -1
- package/lib/CSSPropertyOperations.js +1 -1
- package/lib/ChangeEventPlugin.js +27 -5
- package/lib/ClientReactRootIndex.js +30 -0
- package/lib/CompositionEventPlugin.js +58 -10
- package/lib/DOMChildrenOperations.js +39 -3
- package/lib/DOMProperty.js +9 -5
- package/lib/DOMPropertyOperations.js +21 -8
- package/lib/Danger.js +9 -8
- package/lib/DefaultDOMPropertyConfig.js +23 -14
- package/lib/DefaultEventPluginOrder.js +1 -1
- package/lib/EnterLeaveEventPlugin.js +38 -5
- package/lib/EventConstants.js +4 -1
- package/lib/EventListener.js +42 -34
- package/lib/EventPluginHub.js +118 -13
- package/lib/EventPluginRegistry.js +62 -18
- package/lib/EventPluginUtils.js +33 -4
- package/lib/EventPropagators.js +7 -43
- package/lib/ExecutionEnvironment.js +4 -1
- package/lib/LinkedStateMixin.js +1 -1
- package/lib/LinkedValueUtils.js +160 -0
- package/lib/MobileSafariClickEventPlugin.js +1 -1
- package/lib/PooledClass.js +7 -1
- package/lib/React.js +30 -4
- package/lib/ReactBrowserComponentMixin.js +42 -0
- package/lib/ReactCSSTransitionGroup.js +65 -0
- package/lib/{ReactTransitionableChild.js → ReactCSSTransitionGroupChild.js} +22 -36
- package/lib/ReactChildren.js +4 -4
- package/lib/ReactComponent.js +163 -83
- package/lib/ReactComponentBrowserEnvironment.js +55 -71
- package/lib/ReactCompositeComponent.js +686 -119
- package/lib/ReactContext.js +67 -0
- package/lib/ReactCurrentOwner.js +1 -1
- package/lib/ReactDOM.js +19 -6
- package/lib/ReactDOMButton.js +6 -1
- package/lib/ReactDOMComponent.js +66 -24
- package/lib/ReactDOMForm.js +13 -3
- package/lib/ReactDOMIDOperations.js +106 -61
- package/lib/ReactDOMImg.js +61 -0
- package/lib/ReactDOMInput.js +28 -15
- package/lib/ReactDOMOption.js +13 -8
- package/lib/ReactDOMSelect.js +38 -18
- package/lib/ReactDOMSelection.js +1 -1
- package/lib/ReactDOMTextarea.js +19 -11
- package/lib/ReactDefaultBatchingStrategy.js +1 -1
- package/lib/ReactDefaultInjection.js +60 -26
- package/lib/ReactDefaultPerf.js +208 -371
- package/lib/ReactDefaultPerfAnalysis.js +199 -0
- package/lib/ReactErrorUtils.js +6 -15
- package/lib/ReactEventEmitter.js +144 -146
- package/lib/ReactEventEmitterMixin.js +1 -33
- package/lib/ReactEventTopLevelCallback.js +75 -15
- package/lib/ReactInjection.js +43 -0
- package/lib/ReactInputSelection.js +3 -2
- package/lib/ReactInstanceHandles.js +36 -20
- package/lib/ReactLink.js +2 -2
- package/lib/ReactMarkupChecksum.js +1 -1
- package/lib/ReactMount.js +136 -104
- package/lib/ReactMountReady.js +2 -2
- package/lib/ReactMultiChild.js +40 -49
- package/lib/ReactMultiChildUpdateTypes.js +3 -1
- package/lib/ReactOwner.js +17 -4
- package/lib/ReactPerf.js +6 -9
- package/lib/ReactPropTransferer.js +41 -22
- package/lib/ReactPropTypeLocationNames.js +31 -0
- package/lib/{ReactComponentEnvironment.js → ReactPropTypeLocations.js} +11 -6
- package/lib/ReactPropTypes.js +249 -48
- package/lib/ReactPutListenerQueue.js +61 -0
- package/lib/ReactReconcileTransaction.js +28 -7
- package/lib/ReactRootIndex.js +36 -0
- package/lib/ReactServerRendering.js +46 -19
- package/lib/ReactServerRenderingTransaction.js +116 -0
- package/lib/ReactStateSetters.js +1 -1
- package/lib/ReactTestUtils.js +394 -0
- package/lib/ReactTextComponent.js +33 -6
- package/lib/{ReactTransitionKeySet.js → ReactTransitionChildMapping.js} +43 -48
- package/lib/ReactTransitionEvents.js +1 -1
- package/lib/ReactTransitionGroup.js +133 -58
- package/lib/ReactUpdates.js +15 -12
- package/lib/ReactWithAddons.js +15 -3
- package/lib/SelectEventPlugin.js +23 -40
- package/lib/ServerReactRootIndex.js +36 -0
- package/lib/SimpleEventPlugin.js +55 -7
- package/lib/SyntheticClipboardEvent.js +8 -2
- package/lib/SyntheticCompositionEvent.js +1 -1
- package/lib/SyntheticDragEvent.js +44 -0
- package/lib/SyntheticEvent.js +3 -2
- package/lib/SyntheticFocusEvent.js +1 -1
- package/lib/SyntheticKeyboardEvent.js +5 -3
- package/lib/SyntheticMouseEvent.js +1 -1
- package/lib/SyntheticTouchEvent.js +1 -1
- package/lib/SyntheticUIEvent.js +1 -1
- package/lib/SyntheticWheelEvent.js +11 -8
- package/lib/Transaction.js +62 -37
- package/lib/ViewportMetrics.js +1 -1
- package/lib/accumulate.js +1 -1
- package/lib/adler32.js +1 -1
- package/lib/cloneWithProps.js +59 -0
- package/lib/containsNode.js +1 -1
- package/lib/copyProperties.js +1 -1
- package/lib/createArrayFrom.js +11 -14
- package/lib/createFullPageComponent.js +63 -0
- package/lib/createNodesFromMarkup.js +1 -1
- package/lib/createObjectFrom.js +1 -1
- package/lib/cx.js +3 -3
- package/lib/dangerousStyleValue.js +1 -1
- package/lib/emptyFunction.js +1 -1
- package/lib/emptyObject.js +27 -0
- package/lib/escapeTextForBrowser.js +1 -1
- package/lib/flattenChildren.js +6 -3
- package/lib/focusNode.js +33 -0
- package/lib/forEachAccumulated.js +1 -1
- package/lib/getActiveElement.js +5 -4
- package/lib/getEventKey.js +85 -0
- package/lib/getEventTarget.js +1 -1
- package/lib/getMarkupWrap.js +11 -1
- package/lib/getNodeForCharacterOffset.js +1 -1
- package/lib/getReactRootElementInContainer.js +1 -1
- package/lib/getTextContentAccessor.js +6 -4
- package/lib/getUnboundedScrollPosition.js +3 -3
- package/lib/hyphenate.js +1 -1
- package/lib/instantiateReactComponent.js +70 -0
- package/lib/invariant.js +20 -12
- package/lib/isEventSupported.js +8 -12
- package/lib/isNode.js +2 -2
- package/lib/isTextInputElement.js +1 -1
- package/lib/isTextNode.js +1 -1
- package/lib/joinClasses.js +1 -1
- package/lib/keyMirror.js +1 -1
- package/lib/keyOf.js +1 -1
- package/lib/memoizeStringOnly.js +1 -1
- package/lib/merge.js +1 -1
- package/lib/mergeHelpers.js +6 -7
- package/lib/mergeInto.js +1 -1
- package/lib/mixInto.js +1 -1
- package/lib/monitorCodeUse.js +37 -0
- package/lib/objMap.js +1 -1
- package/lib/objMapKeyVal.js +1 -1
- package/lib/onlyChild.js +43 -0
- package/lib/performanceNow.js +1 -1
- package/lib/shallowEqual.js +1 -1
- package/lib/shouldUpdateReactComponent.js +61 -0
- package/lib/toArray.js +75 -0
- package/lib/traverseAllChildren.js +72 -9
- package/lib/update.js +159 -0
- package/lib/warning.js +48 -0
- package/package.json +3 -3
- package/react.js +0 -3
- package/ReactJSErrors.js +0 -40
- package/lib/$.js +0 -46
- package/lib/CallbackRegistry.js +0 -91
- package/lib/LinkedValueMixin.js +0 -68
- package/lib/ex.js +0 -49
- package/lib/filterAttributes.js +0 -45
- package/lib/ge.js +0 -76
- package/lib/mutateHTMLNodeWithMarkup.js +0 -100
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright 2013 Facebook, Inc.
|
|
2
|
+
* Copyright 2013-2014 Facebook, Inc.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -13,12 +13,17 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*
|
|
16
|
-
* @providesModule
|
|
16
|
+
* @providesModule ReactPropTypeLocations
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
require("./ReactComponentBrowserEnvironment");
|
|
19
|
+
"use strict";
|
|
21
20
|
|
|
22
|
-
var
|
|
21
|
+
var keyMirror = require("./keyMirror");
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
var ReactPropTypeLocations = keyMirror({
|
|
24
|
+
prop: null,
|
|
25
|
+
context: null,
|
|
26
|
+
childContext: null
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
module.exports = ReactPropTypeLocations;
|
package/lib/ReactPropTypes.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright 2013 Facebook, Inc.
|
|
2
|
+
* Copyright 2013-2014 Facebook, Inc.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -18,8 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
"use strict";
|
|
20
20
|
|
|
21
|
+
var ReactComponent = require("./ReactComponent");
|
|
22
|
+
var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");
|
|
23
|
+
|
|
24
|
+
var warning = require("./warning");
|
|
21
25
|
var createObjectFrom = require("./createObjectFrom");
|
|
22
|
-
var invariant = require("./invariant");
|
|
23
26
|
|
|
24
27
|
/**
|
|
25
28
|
* Collection of methods that allow declaration and validation of props that are
|
|
@@ -54,7 +57,7 @@ var invariant = require("./invariant");
|
|
|
54
57
|
* // An optional string or URI prop named "href".
|
|
55
58
|
* href: function(props, propName, componentName) {
|
|
56
59
|
* var propValue = props[propName];
|
|
57
|
-
*
|
|
60
|
+
* warning(
|
|
58
61
|
* propValue == null ||
|
|
59
62
|
* typeof propValue === 'string' ||
|
|
60
63
|
* propValue instanceof URI,
|
|
@@ -78,81 +81,279 @@ var Props = {
|
|
|
78
81
|
object: createPrimitiveTypeChecker('object'),
|
|
79
82
|
string: createPrimitiveTypeChecker('string'),
|
|
80
83
|
|
|
84
|
+
shape: createShapeTypeChecker,
|
|
81
85
|
oneOf: createEnumTypeChecker,
|
|
86
|
+
oneOfType: createUnionTypeChecker,
|
|
87
|
+
arrayOf: createArrayOfTypeChecker,
|
|
88
|
+
|
|
89
|
+
instanceOf: createInstanceTypeChecker,
|
|
82
90
|
|
|
83
|
-
|
|
91
|
+
renderable: createRenderableTypeChecker(),
|
|
84
92
|
|
|
93
|
+
component: createComponentTypeChecker(),
|
|
94
|
+
|
|
95
|
+
any: createAnyTypeChecker()
|
|
85
96
|
};
|
|
86
97
|
|
|
87
98
|
var ANONYMOUS = '<<anonymous>>';
|
|
88
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
|
+
|
|
89
141
|
function createPrimitiveTypeChecker(expectedType) {
|
|
90
|
-
function validatePrimitiveType(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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);
|
|
94
157
|
}
|
|
95
|
-
|
|
96
|
-
propType === expectedType,
|
|
97
|
-
'Invalid prop `%s` of type `%s` supplied to `%s`, expected `%s`.',
|
|
98
|
-
propName,
|
|
99
|
-
propType,
|
|
100
|
-
componentName,
|
|
101
|
-
expectedType
|
|
102
|
-
) : invariant(propType === expectedType));
|
|
158
|
+
return isValid;
|
|
103
159
|
}
|
|
104
160
|
return createChainableTypeChecker(validatePrimitiveType);
|
|
105
161
|
}
|
|
106
162
|
|
|
107
163
|
function createEnumTypeChecker(expectedValues) {
|
|
108
164
|
var expectedEnum = createObjectFrom(expectedValues);
|
|
109
|
-
function validateEnumType(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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;
|
|
117
180
|
}
|
|
118
181
|
return createChainableTypeChecker(validateEnumType);
|
|
119
182
|
}
|
|
120
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
|
+
|
|
121
213
|
function createInstanceTypeChecker(expectedClass) {
|
|
122
|
-
function validateInstanceType(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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;
|
|
130
229
|
}
|
|
131
230
|
return createChainableTypeChecker(validateInstanceType);
|
|
132
231
|
}
|
|
133
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
|
+
|
|
134
321
|
function createChainableTypeChecker(validate) {
|
|
135
|
-
function
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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],
|
|
145
342
|
propName,
|
|
146
343
|
componentName || ANONYMOUS
|
|
147
|
-
) :
|
|
344
|
+
) : null);
|
|
148
345
|
}
|
|
346
|
+
return isValid;
|
|
149
347
|
}
|
|
150
|
-
if (!isRequired) {
|
|
151
|
-
checkType.isRequired = createTypeChecker(true);
|
|
152
|
-
}
|
|
153
|
-
return checkType;
|
|
154
348
|
}
|
|
155
|
-
|
|
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;
|
|
156
357
|
}
|
|
157
358
|
|
|
158
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;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright 2013 Facebook, Inc.
|
|
2
|
+
* Copyright 2013-2014 Facebook, Inc.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
"use strict";
|
|
21
21
|
|
|
22
|
-
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
|
23
22
|
var PooledClass = require("./PooledClass");
|
|
24
23
|
var ReactEventEmitter = require("./ReactEventEmitter");
|
|
25
24
|
var ReactInputSelection = require("./ReactInputSelection");
|
|
26
25
|
var ReactMountReady = require("./ReactMountReady");
|
|
26
|
+
var ReactPutListenerQueue = require("./ReactPutListenerQueue");
|
|
27
27
|
var Transaction = require("./Transaction");
|
|
28
28
|
|
|
29
29
|
var mixInto = require("./mixInto");
|
|
@@ -88,12 +88,23 @@ var ON_DOM_READY_QUEUEING = {
|
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
+
var PUT_LISTENER_QUEUEING = {
|
|
92
|
+
initialize: function() {
|
|
93
|
+
this.putListenerQueue.reset();
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
close: function() {
|
|
97
|
+
this.putListenerQueue.putListeners();
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
91
101
|
/**
|
|
92
102
|
* Executed within the scope of the `Transaction` instance. Consider these as
|
|
93
103
|
* being member methods, but with an implied ordering while being isolated from
|
|
94
104
|
* each other.
|
|
95
105
|
*/
|
|
96
106
|
var TRANSACTION_WRAPPERS = [
|
|
107
|
+
PUT_LISTENER_QUEUEING,
|
|
97
108
|
SELECTION_RESTORATION,
|
|
98
109
|
EVENT_SUPPRESSION,
|
|
99
110
|
ON_DOM_READY_QUEUEING
|
|
@@ -115,7 +126,14 @@ var TRANSACTION_WRAPPERS = [
|
|
|
115
126
|
*/
|
|
116
127
|
function ReactReconcileTransaction() {
|
|
117
128
|
this.reinitializeTransaction();
|
|
129
|
+
// Only server-side rendering really needs this option (see
|
|
130
|
+
// `ReactServerRendering`), but server-side uses
|
|
131
|
+
// `ReactServerRenderingTransaction` instead. This option is here so that it's
|
|
132
|
+
// accessible and defaults to false when `ReactDOMComponent` and
|
|
133
|
+
// `ReactTextComponent` checks it in `mountComponent`.`
|
|
134
|
+
this.renderToStaticMarkup = false;
|
|
118
135
|
this.reactMountReady = ReactMountReady.getPooled(null);
|
|
136
|
+
this.putListenerQueue = ReactPutListenerQueue.getPooled();
|
|
119
137
|
}
|
|
120
138
|
|
|
121
139
|
var Mixin = {
|
|
@@ -127,11 +145,7 @@ var Mixin = {
|
|
|
127
145
|
* TODO: convert to array<TransactionWrapper>
|
|
128
146
|
*/
|
|
129
147
|
getTransactionWrappers: function() {
|
|
130
|
-
|
|
131
|
-
return TRANSACTION_WRAPPERS;
|
|
132
|
-
} else {
|
|
133
|
-
return [];
|
|
134
|
-
}
|
|
148
|
+
return TRANSACTION_WRAPPERS;
|
|
135
149
|
},
|
|
136
150
|
|
|
137
151
|
/**
|
|
@@ -142,6 +156,10 @@ var Mixin = {
|
|
|
142
156
|
return this.reactMountReady;
|
|
143
157
|
},
|
|
144
158
|
|
|
159
|
+
getPutListenerQueue: function() {
|
|
160
|
+
return this.putListenerQueue;
|
|
161
|
+
},
|
|
162
|
+
|
|
145
163
|
/**
|
|
146
164
|
* `PooledClass` looks for this, and will invoke this before allowing this
|
|
147
165
|
* instance to be resused.
|
|
@@ -149,6 +167,9 @@ var Mixin = {
|
|
|
149
167
|
destructor: function() {
|
|
150
168
|
ReactMountReady.release(this.reactMountReady);
|
|
151
169
|
this.reactMountReady = null;
|
|
170
|
+
|
|
171
|
+
ReactPutListenerQueue.release(this.putListenerQueue);
|
|
172
|
+
this.putListenerQueue = null;
|
|
152
173
|
}
|
|
153
174
|
};
|
|
154
175
|
|