Update website for 15.2.0
(cherry picked from commit 3a6584b2eebfa27b416ccc2b4a3c3fc8be1ff3ae)
Paul O’Shannessy committed
Jul 1, 2016 at 11:41 UTC
f40e6dbc76fe22228b1df7a7e5ec23775c402d71
4 files changed
+1865
-1255
docs/_config.yml
+8
-8
@@ -38,11 +38,11 @@ gems:
38
- jekyll-redirect-from
39
react_version: 15.1.0
40
react_hashes:
41
- dev: I9uU7ZWS2zpxPvpUfutJ7LD6Mmzk3pvvBCbfC7/imYVdtuPR9hRiLIJrVIZilwht
42
- prod: 3aKuzevuBSs0FfxObUZ42KUGqneCk7kh9g7/aZ+Yzf5MhucA9KvfUSH5jcma9kdZ
43
- addons_dev: 5jJyZhvy/Kkt6uTW3AY3U6bZ+0yDAS7NQDHExu76Zmoa6ABy5g42MoGj9pgeELqf
44
- addons_prod: JkeMnC7xa++rlt5smrQVlrrBdYEy0WJbF78QOIpdQeg7UCUjWF3/gyNC/IVh5s4l
45
- dom_dev: MWQ0uDsZsWizHa2PvAdb45Y1JXy+oLZPc0fabiueWS4rOZuKXDzqf12jjKMF8u3t
46
- dom_prod: tEAvCNm5NozfOX3D8eOmg6E7CUNRQEaLq9xPqVr9ii9BW1cVXiuHKqrXUh3W7wg5
47
- dom_server_dev: WTaEVUVSSkUY+GTjvLO65ZjnLMR2BBa+WkXF1F4rVIxqoMnxFcjugmyoxYwXMmF6
48
- dom_server_prod: rFqq5Djim9lOAYssAJTvdJhtcGdz328JIjbcDq/5/r5DLwYyl8esZ1C0+CKeSXxo
41
+ dev: vck4RVcD/d8oCyYODNkyY5bF8we4hBqLNCQzIsK1n4eN+WTWkSMaXH8Bl0ByIaMd
42
+ prod: SA/uTNKFAqs8tVn1gROCqtn9Y/waa33EiLYKD7iALN+MDxP1DWBEWPCPmSkYzdsa
43
+ addons_dev: Bhsz0xzA1wDnGOSV7KbIL0pKaNOZ5KdPxqVOZTwVyU5NfUGDgN56LTVPVrGi3cMy
44
+ addons_prod: Gi+revrP36Zmqp/aqipOToEggqK5NWoKz1B1SUgiA1/OwV+pR8FqnU/VdfzizfUf
45
+ dom_dev: 0D/X+kBzzy9hGstygpjpkksS9+WWyG0B/ZfKROdwJ4h6BbJLCnL8lodLYYXxEunS
46
+ dom_prod: eZbWlQZOpUJXnnogcw4IRZvbGDRjAOpZvOEe932rEg0fhFmXXnaN9bLP/x1RbB6D
47
+ dom_server_dev: oo6/aLeY4xKtb+MetozfT9WlfPcJq6wnqeIT6suwaeA/qPaSG7B1wWvM8WLATV7Z
48
+ dom_server_prod: m3fk/O7t/S25hafVhhsrQ7YwjLJdqNNZwgYsAXft24YSrPXysowaoqpQokZO1lsI
docs/downloads/react-15.2.0.zip
Binary files /dev/null and b/docs/downloads/react-15.2.0.zip differ
docs/js/react-dom.js
+1
-1
@@ -1,5 +1,5 @@
1
/**
2
- * ReactDOM v15.1.0
2
+ * ReactDOM v15.2.0
3
*
4
* Copyright 2013-present, Facebook, Inc.
5
* All rights reserved.
docs/js/react.js
+1856
-1246
@@ -1,5 +1,5 @@
1
/**
2
- * React v15.1.0
2
+ * React v15.2.0
3
*/
4
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.React = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
5
/**
@@ -17,7 +17,7 @@
17
18
var ReactDOMComponentTree = _dereq_(41);
19
20
-var focusNode = _dereq_(151);
20
+var focusNode = _dereq_(153);
21
22
var AutoFocusUtils = {
23
focusDOMComponent: function () {
@@ -26,7 +26,7 @@ var AutoFocusUtils = {
26
};
27
28
module.exports = AutoFocusUtils;
29
-},{"151":151,"41":41}],2:[function(_dereq_,module,exports){
29
+},{"153":153,"41":41}],2:[function(_dereq_,module,exports){
30
/**
31
* Copyright 2013-present Facebook, Inc.
32
* All rights reserved.
@@ -42,12 +42,12 @@ module.exports = AutoFocusUtils;
42
43
var EventConstants = _dereq_(16);
44
var EventPropagators = _dereq_(20);
45
-var ExecutionEnvironment = _dereq_(143);
45
+var ExecutionEnvironment = _dereq_(145);
46
var FallbackCompositionState = _dereq_(21);
47
var SyntheticCompositionEvent = _dereq_(100);
48
var SyntheticInputEvent = _dereq_(104);
49
50
-var keyOf = _dereq_(161);
50
+var keyOf = _dereq_(163);
51
52
var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
53
var START_KEYCODE = 229;
@@ -415,7 +415,7 @@ var BeforeInputEventPlugin = {
415
};
416
417
module.exports = BeforeInputEventPlugin;
418
-},{"100":100,"104":104,"143":143,"16":16,"161":161,"20":20,"21":21}],3:[function(_dereq_,module,exports){
418
+},{"100":100,"104":104,"145":145,"16":16,"163":163,"20":20,"21":21}],3:[function(_dereq_,module,exports){
419
/**
420
* Copyright 2013-present, Facebook, Inc.
421
* All rights reserved.
@@ -579,14 +579,14 @@ module.exports = CSSProperty;
579
'use strict';
580
581
var CSSProperty = _dereq_(3);
582
-var ExecutionEnvironment = _dereq_(143);
583
-var ReactInstrumentation = _dereq_(71);
582
+var ExecutionEnvironment = _dereq_(145);
583
+var ReactInstrumentation = _dereq_(73);
584
585
-var camelizeStyleName = _dereq_(145);
586
-var dangerousStyleValue = _dereq_(117);
587
-var hyphenateStyleName = _dereq_(156);
588
-var memoizeStringOnly = _dereq_(163);
589
-var warning = _dereq_(167);
585
+var camelizeStyleName = _dereq_(147);
586
+var dangerousStyleValue = _dereq_(118);
587
+var hyphenateStyleName = _dereq_(158);
588
+var memoizeStringOnly = _dereq_(165);
589
+var warning = _dereq_(169);
590
591
var processStyleName = memoizeStringOnly(function (styleName) {
592
return hyphenateStyleName(styleName);
@@ -735,7 +735,7 @@ var CSSPropertyOperations = {
735
*/
736
setValueForStyles: function (node, styles, component) {
737
if ("development" !== 'production') {
738
- ReactInstrumentation.debugTool.onNativeOperation(component._debugID, 'update styles', styles);
738
+ ReactInstrumentation.debugTool.onHostOperation(component._debugID, 'update styles', styles);
739
}
740
741
var style = node.style;
@@ -770,7 +770,7 @@ var CSSPropertyOperations = {
770
};
771
772
module.exports = CSSPropertyOperations;
773
-},{"117":117,"143":143,"145":145,"156":156,"163":163,"167":167,"3":3,"71":71}],5:[function(_dereq_,module,exports){
773
+},{"118":118,"145":145,"147":147,"158":158,"165":165,"169":169,"3":3,"73":73}],5:[function(_dereq_,module,exports){
774
/**
775
* Copyright 2013-present, Facebook, Inc.
776
* All rights reserved.
@@ -784,11 +784,12 @@ module.exports = CSSPropertyOperations;
784
785
'use strict';
786
787
-var _assign = _dereq_(168);
787
+var _prodInvariant = _dereq_(137),
788
+ _assign = _dereq_(170);
789
790
var PooledClass = _dereq_(25);
791
791
-var invariant = _dereq_(157);
792
+var invariant = _dereq_(159);
793
794
/**
795
* A specialized pseudo-event module to help keep track of components waiting to
@@ -832,7 +833,7 @@ _assign(CallbackQueue.prototype, {
833
var callbacks = this._callbacks;
834
var contexts = this._contexts;
835
if (callbacks) {
835
- !(callbacks.length === contexts.length) ? "development" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : void 0;
836
+ !(callbacks.length === contexts.length) ? "development" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;
837
this._callbacks = null;
838
this._contexts = null;
839
for (var i = 0; i < callbacks.length; i++) {
@@ -876,7 +877,7 @@ _assign(CallbackQueue.prototype, {
877
PooledClass.addPoolingTo(CallbackQueue);
878
879
module.exports = CallbackQueue;
879
-},{"157":157,"168":168,"25":25}],6:[function(_dereq_,module,exports){
880
+},{"137":137,"159":159,"170":170,"25":25}],6:[function(_dereq_,module,exports){
881
/**
882
* Copyright 2013-present, Facebook, Inc.
883
* All rights reserved.
@@ -893,15 +894,15 @@ module.exports = CallbackQueue;
894
var EventConstants = _dereq_(16);
895
var EventPluginHub = _dereq_(17);
896
var EventPropagators = _dereq_(20);
896
-var ExecutionEnvironment = _dereq_(143);
897
+var ExecutionEnvironment = _dereq_(145);
898
var ReactDOMComponentTree = _dereq_(41);
899
var ReactUpdates = _dereq_(93);
900
var SyntheticEvent = _dereq_(102);
901
901
-var getEventTarget = _dereq_(125);
902
-var isEventSupported = _dereq_(132);
903
-var isTextInputElement = _dereq_(133);
904
-var keyOf = _dereq_(161);
902
+var getEventTarget = _dereq_(126);
903
+var isEventSupported = _dereq_(133);
904
+var isTextInputElement = _dereq_(134);
905
+var keyOf = _dereq_(163);
906
907
var topLevelTypes = EventConstants.topLevelTypes;
908
@@ -1202,7 +1203,7 @@ var ChangeEventPlugin = {
1203
};
1204
1205
module.exports = ChangeEventPlugin;
1205
-},{"102":102,"125":125,"132":132,"133":133,"143":143,"16":16,"161":161,"17":17,"20":20,"41":41,"93":93}],7:[function(_dereq_,module,exports){
1206
+},{"102":102,"126":126,"133":133,"134":134,"145":145,"16":16,"163":163,"17":17,"20":20,"41":41,"93":93}],7:[function(_dereq_,module,exports){
1207
/**
1208
* Copyright 2013-present, Facebook, Inc.
1209
* All rights reserved.
@@ -1218,17 +1219,17 @@ module.exports = ChangeEventPlugin;
1219
1220
var DOMLazyTree = _dereq_(8);
1221
var Danger = _dereq_(12);
1221
-var ReactMultiChildUpdateTypes = _dereq_(76);
1222
+var ReactMultiChildUpdateTypes = _dereq_(78);
1223
var ReactDOMComponentTree = _dereq_(41);
1223
-var ReactInstrumentation = _dereq_(71);
1224
+var ReactInstrumentation = _dereq_(73);
1225
1225
-var createMicrosoftUnsafeLocalFunction = _dereq_(116);
1226
-var setInnerHTML = _dereq_(137);
1227
-var setTextContent = _dereq_(138);
1226
+var createMicrosoftUnsafeLocalFunction = _dereq_(117);
1227
+var setInnerHTML = _dereq_(139);
1228
+var setTextContent = _dereq_(140);
1229
1230
function getNodeAfter(parentNode, node) {
1231
// Special case for text components, which return [open, close] comments
1231
- // from getNativeNode.
1232
+ // from getHostNode.
1233
if (Array.isArray(node)) {
1234
node = node[1];
1235
}
@@ -1317,7 +1318,7 @@ function replaceDelimitedText(openingComment, closingComment, stringText) {
1318
}
1319
1320
if ("development" !== 'production') {
1320
- ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
1321
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
1322
}
1323
}
1324
@@ -1326,11 +1327,11 @@ if ("development" !== 'production') {
1327
dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {
1328
Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);
1329
if (prevInstance._debugID !== 0) {
1329
- ReactInstrumentation.debugTool.onNativeOperation(prevInstance._debugID, 'replace with', markup.toString());
1330
+ ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());
1331
} else {
1332
var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);
1333
if (nextInstance._debugID !== 0) {
1333
- ReactInstrumentation.debugTool.onNativeOperation(nextInstance._debugID, 'mount', markup.toString());
1334
+ ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());
1335
}
1336
}
1337
};
@@ -1363,31 +1364,31 @@ var DOMChildrenOperations = {
1364
case ReactMultiChildUpdateTypes.INSERT_MARKUP:
1365
insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));
1366
if ("development" !== 'production') {
1366
- ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
1367
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
1368
}
1369
break;
1370
case ReactMultiChildUpdateTypes.MOVE_EXISTING:
1371
moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));
1372
if ("development" !== 'production') {
1372
- ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
1373
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
1374
}
1375
break;
1376
case ReactMultiChildUpdateTypes.SET_MARKUP:
1377
setInnerHTML(parentNode, update.content);
1378
if ("development" !== 'production') {
1378
- ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'replace children', update.content.toString());
1379
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());
1380
}
1381
break;
1382
case ReactMultiChildUpdateTypes.TEXT_CONTENT:
1383
setTextContent(parentNode, update.content);
1384
if ("development" !== 'production') {
1384
- ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'replace text', update.content.toString());
1385
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());
1386
}
1387
break;
1388
case ReactMultiChildUpdateTypes.REMOVE_NODE:
1389
removeChild(parentNode, update.fromNode);
1390
if ("development" !== 'production') {
1390
- ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
1391
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
1392
}
1393
break;
1394
}
@@ -1397,7 +1398,7 @@ var DOMChildrenOperations = {
1398
};
1399
1400
module.exports = DOMChildrenOperations;
1400
-},{"116":116,"12":12,"137":137,"138":138,"41":41,"71":71,"76":76,"8":8}],8:[function(_dereq_,module,exports){
1401
+},{"117":117,"12":12,"139":139,"140":140,"41":41,"73":73,"78":78,"8":8}],8:[function(_dereq_,module,exports){
1402
/**
1403
* Copyright 2015-present, Facebook, Inc.
1404
* All rights reserved.
@@ -1412,9 +1413,10 @@ module.exports = DOMChildrenOperations;
1413
'use strict';
1414
1415
var DOMNamespaces = _dereq_(9);
1416
+var setInnerHTML = _dereq_(139);
1417
1416
-var createMicrosoftUnsafeLocalFunction = _dereq_(116);
1417
-var setTextContent = _dereq_(138);
1418
+var createMicrosoftUnsafeLocalFunction = _dereq_(117);
1419
+var setTextContent = _dereq_(140);
1420
1421
var ELEMENT_NODE_TYPE = 1;
1422
var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
@@ -1443,7 +1445,7 @@ function insertTreeChildren(tree) {
1445
insertTreeBefore(node, children[i], null);
1446
}
1447
} else if (tree.html != null) {
1446
- node.innerHTML = tree.html;
1448
+ setInnerHTML(node, tree.html);
1449
} else if (tree.text != null) {
1450
setTextContent(node, tree.text);
1451
}
@@ -1482,7 +1484,7 @@ function queueHTML(tree, html) {
1484
if (enableLazy) {
1485
tree.html = html;
1486
} else {
1485
- tree.node.innerHTML = html;
1487
+ setInnerHTML(tree.node, html);
1488
}
1489
}
1490
@@ -1515,7 +1517,7 @@ DOMLazyTree.queueHTML = queueHTML;
1517
DOMLazyTree.queueText = queueText;
1518
1519
module.exports = DOMLazyTree;
1518
-},{"116":116,"138":138,"9":9}],9:[function(_dereq_,module,exports){
1520
+},{"117":117,"139":139,"140":140,"9":9}],9:[function(_dereq_,module,exports){
1521
/**
1522
* Copyright 2013-present, Facebook, Inc.
1523
* All rights reserved.
@@ -1550,7 +1552,9 @@ module.exports = DOMNamespaces;
1552
1553
'use strict';
1554
1553
-var invariant = _dereq_(157);
1555
+var _prodInvariant = _dereq_(137);
1556
+
1557
+var invariant = _dereq_(159);
1558
1559
function checkMask(value, bitmask) {
1560
return (value & bitmask) === bitmask;
@@ -1609,7 +1613,7 @@ var DOMPropertyInjection = {
1613
}
1614
1615
for (var propName in Properties) {
1612
- !!DOMProperty.properties.hasOwnProperty(propName) ? "development" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : void 0;
1616
+ !!DOMProperty.properties.hasOwnProperty(propName) ? "development" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property \'%s\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;
1617
1618
var lowerCased = propName.toLowerCase();
1619
var propConfig = Properties[propName];
@@ -1628,8 +1632,8 @@ var DOMPropertyInjection = {
1632
hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
1633
};
1634
1631
- !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : void 0;
1632
- !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : void 0;
1635
+ !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : _prodInvariant('49', propName) : void 0;
1636
+ !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;
1637
1638
if ("development" !== 'production') {
1639
DOMProperty.getPossibleStandardName[lowerCased] = propName;
@@ -1683,7 +1687,7 @@ var DOMProperty = {
1687
ROOT_ATTRIBUTE_NAME: 'data-reactroot',
1688
1689
ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,
1686
- ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\uB7\\u0300-\\u036F\\u203F-\\u2040',
1690
+ ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040',
1691
1692
/**
1693
* Map from property "standard name" to an object with info about how to set
@@ -1750,7 +1754,7 @@ var DOMProperty = {
1754
};
1755
1756
module.exports = DOMProperty;
1753
-},{"157":157}],11:[function(_dereq_,module,exports){
1757
+},{"137":137,"159":159}],11:[function(_dereq_,module,exports){
1758
/**
1759
* Copyright 2013-present, Facebook, Inc.
1760
* All rights reserved.
@@ -1767,10 +1771,10 @@ module.exports = DOMProperty;
1771
var DOMProperty = _dereq_(10);
1772
var ReactDOMComponentTree = _dereq_(41);
1773
var ReactDOMInstrumentation = _dereq_(49);
1770
-var ReactInstrumentation = _dereq_(71);
1774
+var ReactInstrumentation = _dereq_(73);
1775
1772
-var quoteAttributeValueForBrowser = _dereq_(135);
1773
-var warning = _dereq_(167);
1776
+var quoteAttributeValueForBrowser = _dereq_(136);
1777
+var warning = _dereq_(169);
1778
1779
var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');
1780
var illegalAttributeNameCache = {};
@@ -1914,7 +1918,7 @@ var DOMPropertyOperations = {
1918
ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);
1919
var payload = {};
1920
payload[name] = value;
1917
- ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1921
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1922
}
1923
},
1924
@@ -1931,7 +1935,21 @@ var DOMPropertyOperations = {
1935
if ("development" !== 'production') {
1936
var payload = {};
1937
payload[name] = value;
1934
- ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1938
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1939
+ }
1940
+ },
1941
+
1942
+ /**
1943
+ * Deletes an attributes from a node.
1944
+ *
1945
+ * @param {DOMElement} node
1946
+ * @param {string} name
1947
+ */
1948
+ deleteValueForAttribute: function (node, name) {
1949
+ node.removeAttribute(name);
1950
+ if ("development" !== 'production') {
1951
+ ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1952
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1953
}
1954
},
1955
@@ -1966,14 +1984,14 @@ var DOMPropertyOperations = {
1984
1985
if ("development" !== 'production') {
1986
ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1969
- ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1987
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1988
}
1989
}
1990
1991
};
1992
1993
module.exports = DOMPropertyOperations;
1976
-},{"10":10,"135":135,"167":167,"41":41,"49":49,"71":71}],12:[function(_dereq_,module,exports){
1994
+},{"10":10,"136":136,"169":169,"41":41,"49":49,"73":73}],12:[function(_dereq_,module,exports){
1995
/**
1996
* Copyright 2013-present, Facebook, Inc.
1997
* All rights reserved.
@@ -1987,13 +2005,15 @@ module.exports = DOMPropertyOperations;
2005
2006
'use strict';
2007
2008
+var _prodInvariant = _dereq_(137);
2009
+
2010
var DOMLazyTree = _dereq_(8);
1991
-var ExecutionEnvironment = _dereq_(143);
2011
+var ExecutionEnvironment = _dereq_(145);
2012
1993
-var createNodesFromMarkup = _dereq_(148);
1994
-var emptyFunction = _dereq_(149);
1995
-var getMarkupWrap = _dereq_(153);
1996
-var invariant = _dereq_(157);
2013
+var createNodesFromMarkup = _dereq_(150);
2014
+var emptyFunction = _dereq_(151);
2015
+var getMarkupWrap = _dereq_(155);
2016
+var invariant = _dereq_(159);
2017
2018
var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/;
2019
var RESULT_INDEX_ATTR = 'data-danger-index';
@@ -2025,12 +2045,12 @@ var Danger = {
2045
* @internal
2046
*/
2047
dangerouslyRenderMarkup: function (markupList) {
2028
- !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : void 0;
2048
+ !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString for server rendering.') : _prodInvariant('51') : void 0;
2049
var nodeName;
2050
var markupByNodeName = {};
2051
// Group markup by `nodeName` if a wrap is necessary, else by '*'.
2052
for (var i = 0; i < markupList.length; i++) {
2033
- !markupList[i] ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : void 0;
2053
+ !markupList[i] ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : _prodInvariant('52') : void 0;
2054
nodeName = getNodeName(markupList[i]);
2055
nodeName = getMarkupWrap(nodeName) ? nodeName : '*';
2056
markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];
@@ -2072,7 +2092,7 @@ var Danger = {
2092
resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);
2093
renderNode.removeAttribute(RESULT_INDEX_ATTR);
2094
2075
- !!resultList.hasOwnProperty(resultIndex) ? "development" !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : void 0;
2095
+ !!resultList.hasOwnProperty(resultIndex) ? "development" !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : _prodInvariant('53') : void 0;
2096
2097
resultList[resultIndex] = renderNode;
2098
@@ -2087,9 +2107,9 @@ var Danger = {
2107
2108
// Although resultList was populated out of order, it should now be a dense
2109
// array.
2090
- !(resultListAssignmentCount === resultList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : void 0;
2110
+ !(resultListAssignmentCount === resultList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : _prodInvariant('54') : void 0;
2111
2092
- !(resultList.length === markupList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : void 0;
2112
+ !(resultList.length === markupList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : _prodInvariant('55', markupList.length, resultList.length) : void 0;
2113
2114
return resultList;
2115
},
@@ -2103,9 +2123,9 @@ var Danger = {
2123
* @internal
2124
*/
2125
dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
2106
- !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : void 0;
2107
- !markup ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : void 0;
2108
- !(oldChild.nodeName !== 'HTML') ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : void 0;
2126
+ !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;
2127
+ !markup ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;
2128
+ !(oldChild.nodeName !== 'HTML') ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;
2129
2130
if (typeof markup === 'string') {
2131
var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
@@ -2118,7 +2138,7 @@ var Danger = {
2138
};
2139
2140
module.exports = Danger;
2121
-},{"143":143,"148":148,"149":149,"153":153,"157":157,"8":8}],13:[function(_dereq_,module,exports){
2141
+},{"137":137,"145":145,"150":150,"151":151,"155":155,"159":159,"8":8}],13:[function(_dereq_,module,exports){
2142
/**
2143
* Copyright 2013-present, Facebook, Inc.
2144
* All rights reserved.
@@ -2132,7 +2152,7 @@ module.exports = Danger;
2152
2153
'use strict';
2154
2135
-var keyOf = _dereq_(161);
2155
+var keyOf = _dereq_(163);
2156
2157
/**
2158
* Module that is injectable into `EventPluginHub`, that specifies a
@@ -2146,7 +2166,7 @@ var keyOf = _dereq_(161);
2166
var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
2167
2168
module.exports = DefaultEventPluginOrder;
2149
-},{"161":161}],14:[function(_dereq_,module,exports){
2169
+},{"163":163}],14:[function(_dereq_,module,exports){
2170
/**
2171
* Copyright 2013-present, Facebook, Inc.
2172
* All rights reserved.
@@ -2175,24 +2195,24 @@ var disableableMouseListenerNames = {
2195
};
2196
2197
/**
2178
- * Implements a native component that does not receive mouse events
2198
+ * Implements a host component that does not receive mouse events
2199
* when `disabled` is set.
2200
*/
2201
var DisabledInputUtils = {
2182
- getNativeProps: function (inst, props) {
2202
+ getHostProps: function (inst, props) {
2203
if (!props.disabled) {
2204
return props;
2205
}
2206
2207
// Copy the props, except the mouse listeners
2188
- var nativeProps = {};
2208
+ var hostProps = {};
2209
for (var key in props) {
2210
if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {
2191
- nativeProps[key] = props[key];
2211
+ hostProps[key] = props[key];
2212
}
2213
}
2214
2195
- return nativeProps;
2215
+ return hostProps;
2216
}
2217
};
2218
@@ -2216,7 +2236,7 @@ var EventPropagators = _dereq_(20);
2236
var ReactDOMComponentTree = _dereq_(41);
2237
var SyntheticMouseEvent = _dereq_(106);
2238
2219
-var keyOf = _dereq_(161);
2239
+var keyOf = _dereq_(163);
2240
2241
var topLevelTypes = EventConstants.topLevelTypes;
2242
@@ -2303,7 +2323,7 @@ var EnterLeaveEventPlugin = {
2323
};
2324
2325
module.exports = EnterLeaveEventPlugin;
2306
-},{"106":106,"16":16,"161":161,"20":20,"41":41}],16:[function(_dereq_,module,exports){
2326
+},{"106":106,"16":16,"163":163,"20":20,"41":41}],16:[function(_dereq_,module,exports){
2327
/**
2328
* Copyright 2013-present, Facebook, Inc.
2329
* All rights reserved.
@@ -2317,7 +2337,7 @@ module.exports = EnterLeaveEventPlugin;
2337
2338
'use strict';
2339
2320
-var keyMirror = _dereq_(160);
2340
+var keyMirror = _dereq_(162);
2341
2342
var PropagationPhases = keyMirror({ bubbled: null, captured: null });
2343
@@ -2401,7 +2421,7 @@ var EventConstants = {
2421
};
2422
2423
module.exports = EventConstants;
2404
-},{"160":160}],17:[function(_dereq_,module,exports){
2424
+},{"162":162}],17:[function(_dereq_,module,exports){
2425
/**
2426
* Copyright 2013-present, Facebook, Inc.
2427
* All rights reserved.
@@ -2415,13 +2435,15 @@ module.exports = EventConstants;
2435
2436
'use strict';
2437
2438
+var _prodInvariant = _dereq_(137);
2439
+
2440
var EventPluginRegistry = _dereq_(18);
2441
var EventPluginUtils = _dereq_(19);
2442
var ReactErrorUtils = _dereq_(64);
2443
2444
var accumulateInto = _dereq_(113);
2423
-var forEachAccumulated = _dereq_(121);
2424
-var invariant = _dereq_(157);
2445
+var forEachAccumulated = _dereq_(122);
2446
+var invariant = _dereq_(159);
2447
2448
/**
2449
* Internal store for event listeners
@@ -2507,7 +2529,7 @@ var EventPluginHub = {
2529
* @param {function} listener The callback to store.
2530
*/
2531
putListener: function (inst, registrationName, listener) {
2510
- !(typeof listener === 'function') ? "development" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : void 0;
2532
+ !(typeof listener === 'function') ? "development" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;
2533
2534
var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
2535
bankForRegistrationName[inst._rootNodeID] = listener;
@@ -2554,6 +2576,10 @@ var EventPluginHub = {
2576
*/
2577
deleteAllListeners: function (inst) {
2578
for (var registrationName in listenerBank) {
2579
+ if (!listenerBank.hasOwnProperty(registrationName)) {
2580
+ continue;
2581
+ }
2582
+
2583
if (!listenerBank[registrationName][inst._rootNodeID]) {
2584
continue;
2585
}
@@ -2618,7 +2644,7 @@ var EventPluginHub = {
2644
} else {
2645
forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
2646
}
2621
- !!eventQueue ? "development" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : void 0;
2647
+ !!eventQueue ? "development" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;
2648
// This would be a good time to rethrow if any of the event handlers threw.
2649
ReactErrorUtils.rethrowCaughtError();
2650
},
@@ -2637,7 +2663,7 @@ var EventPluginHub = {
2663
};
2664
2665
module.exports = EventPluginHub;
2640
-},{"113":113,"121":121,"157":157,"18":18,"19":19,"64":64}],18:[function(_dereq_,module,exports){
2666
+},{"113":113,"122":122,"137":137,"159":159,"18":18,"19":19,"64":64}],18:[function(_dereq_,module,exports){
2667
/**
2668
* Copyright 2013-present, Facebook, Inc.
2669
* All rights reserved.
@@ -2651,7 +2677,9 @@ module.exports = EventPluginHub;
2677
2678
'use strict';
2679
2654
-var invariant = _dereq_(157);
2680
+var _prodInvariant = _dereq_(137);
2681
+
2682
+var invariant = _dereq_(159);
2683
2684
/**
2685
* Injectable ordering of event plugins.
@@ -2676,15 +2704,15 @@ function recomputePluginOrdering() {
2704
for (var pluginName in namesToPlugins) {
2705
var PluginModule = namesToPlugins[pluginName];
2706
var pluginIndex = EventPluginOrder.indexOf(pluginName);
2679
- !(pluginIndex > -1) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : void 0;
2707
+ !(pluginIndex > -1) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;
2708
if (EventPluginRegistry.plugins[pluginIndex]) {
2709
continue;
2710
}
2683
- !PluginModule.extractEvents ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : void 0;
2711
+ !PluginModule.extractEvents ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;
2712
EventPluginRegistry.plugins[pluginIndex] = PluginModule;
2713
var publishedEvents = PluginModule.eventTypes;
2714
for (var eventName in publishedEvents) {
2687
- !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : void 0;
2715
+ !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;
2716
}
2717
}
2718
}
@@ -2698,7 +2726,7 @@ function recomputePluginOrdering() {
2726
* @private
2727
*/
2728
function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
2701
- !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : void 0;
2729
+ !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;
2730
EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
2731
2732
var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
@@ -2726,13 +2754,17 @@ function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
2754
* @private
2755
*/
2756
function publishRegistrationName(registrationName, PluginModule, eventName) {
2729
- !!EventPluginRegistry.registrationNameModules[registrationName] ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : void 0;
2757
+ !!EventPluginRegistry.registrationNameModules[registrationName] ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;
2758
EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
2759
EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
2760
2761
if ("development" !== 'production') {
2762
var lowerCasedName = registrationName.toLowerCase();
2763
EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;
2764
+
2765
+ if (registrationName === 'onDoubleClick') {
2766
+ EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;
2767
+ }
2768
}
2769
}
2770
@@ -2781,7 +2813,7 @@ var EventPluginRegistry = {
2813
* @see {EventPluginHub.injection.injectEventPluginOrder}
2814
*/
2815
injectEventPluginOrder: function (InjectedEventPluginOrder) {
2784
- !!EventPluginOrder ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : void 0;
2816
+ !!EventPluginOrder ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;
2817
// Clone the ordering so it cannot be dynamically mutated.
2818
EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
2819
recomputePluginOrdering();
@@ -2805,7 +2837,7 @@ var EventPluginRegistry = {
2837
}
2838
var PluginModule = injectedNamesToPlugins[pluginName];
2839
if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
2808
- !!namesToPlugins[pluginName] ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : void 0;
2840
+ !!namesToPlugins[pluginName] ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;
2841
namesToPlugins[pluginName] = PluginModule;
2842
isOrderingDirty = true;
2843
}
@@ -2879,7 +2911,7 @@ var EventPluginRegistry = {
2911
};
2912
2913
module.exports = EventPluginRegistry;
2882
-},{"157":157}],19:[function(_dereq_,module,exports){
2914
+},{"137":137,"159":159}],19:[function(_dereq_,module,exports){
2915
/**
2916
* Copyright 2013-present, Facebook, Inc.
2917
* All rights reserved.
@@ -2893,11 +2925,13 @@ module.exports = EventPluginRegistry;
2925
2926
'use strict';
2927
2928
+var _prodInvariant = _dereq_(137);
2929
+
2930
var EventConstants = _dereq_(16);
2931
var ReactErrorUtils = _dereq_(64);
2932
2899
-var invariant = _dereq_(157);
2900
-var warning = _dereq_(167);
2933
+var invariant = _dereq_(159);
2934
+var warning = _dereq_(169);
2935
2936
/**
2937
* Injected dependencies:
@@ -3051,7 +3085,7 @@ function executeDirectDispatch(event) {
3085
}
3086
var dispatchListener = event._dispatchListeners;
3087
var dispatchInstance = event._dispatchInstances;
3054
- !!Array.isArray(dispatchListener) ? "development" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : void 0;
3088
+ !!Array.isArray(dispatchListener) ? "development" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;
3089
event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;
3090
var res = dispatchListener ? dispatchListener(event) : null;
3091
event.currentTarget = null;
@@ -3107,7 +3141,7 @@ var EventPluginUtils = {
3141
};
3142
3143
module.exports = EventPluginUtils;
3110
-},{"157":157,"16":16,"167":167,"64":64}],20:[function(_dereq_,module,exports){
3144
+},{"137":137,"159":159,"16":16,"169":169,"64":64}],20:[function(_dereq_,module,exports){
3145
/**
3146
* Copyright 2013-present, Facebook, Inc.
3147
* All rights reserved.
@@ -3126,8 +3160,8 @@ var EventPluginHub = _dereq_(17);
3160
var EventPluginUtils = _dereq_(19);
3161
3162
var accumulateInto = _dereq_(113);
3129
-var forEachAccumulated = _dereq_(121);
3130
-var warning = _dereq_(167);
3163
+var forEachAccumulated = _dereq_(122);
3164
+var warning = _dereq_(169);
3165
3166
var PropagationPhases = EventConstants.PropagationPhases;
3167
var getListener = EventPluginHub.getListener;
@@ -3245,7 +3279,7 @@ var EventPropagators = {
3279
};
3280
3281
module.exports = EventPropagators;
3248
-},{"113":113,"121":121,"16":16,"167":167,"17":17,"19":19}],21:[function(_dereq_,module,exports){
3282
+},{"113":113,"122":122,"16":16,"169":169,"17":17,"19":19}],21:[function(_dereq_,module,exports){
3283
/**
3284
* Copyright 2013-present, Facebook, Inc.
3285
* All rights reserved.
@@ -3259,11 +3293,11 @@ module.exports = EventPropagators;
3293
3294
'use strict';
3295
3262
-var _assign = _dereq_(168);
3296
+var _assign = _dereq_(170);
3297
3298
var PooledClass = _dereq_(25);
3299
3266
-var getTextContentAccessor = _dereq_(129);
3300
+var getTextContentAccessor = _dereq_(130);
3301
3302
/**
3303
* This helper class stores information about text content of a target node,
@@ -3341,7 +3375,7 @@ _assign(FallbackCompositionState.prototype, {
3375
PooledClass.addPoolingTo(FallbackCompositionState);
3376
3377
module.exports = FallbackCompositionState;
3344
-},{"129":129,"168":168,"25":25}],22:[function(_dereq_,module,exports){
3378
+},{"130":130,"170":170,"25":25}],22:[function(_dereq_,module,exports){
3379
/**
3380
* Copyright 2013-present, Facebook, Inc.
3381
* All rights reserved.
@@ -3359,7 +3393,6 @@ var DOMProperty = _dereq_(10);
3393
3394
var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
3395
var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
3362
-var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;
3396
var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
3397
var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
3398
var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
@@ -3493,7 +3526,7 @@ var HTMLDOMPropertyConfig = {
3526
// Setting .type throws on non-<input> tags
3527
type: 0,
3528
useMap: 0,
3496
- value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
3529
+ value: 0,
3530
width: 0,
3531
wmode: 0,
3532
wrap: 0,
@@ -3624,11 +3657,13 @@ module.exports = KeyEscapeUtils;
3657
3658
'use strict';
3659
3660
+var _prodInvariant = _dereq_(137);
3661
+
3662
var ReactPropTypes = _dereq_(84);
3663
var ReactPropTypeLocations = _dereq_(83);
3664
3630
-var invariant = _dereq_(157);
3631
-var warning = _dereq_(167);
3665
+var invariant = _dereq_(159);
3666
+var warning = _dereq_(169);
3667
3668
var hasReadOnlyValue = {
3669
'button': true,
@@ -3641,16 +3676,16 @@ var hasReadOnlyValue = {
3676
};
3677
3678
function _assertSingleLink(inputProps) {
3644
- !(inputProps.checkedLink == null || inputProps.valueLink == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(false) : void 0;
3679
+ !(inputProps.checkedLink == null || inputProps.valueLink == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;
3680
}
3681
function _assertValueLink(inputProps) {
3682
_assertSingleLink(inputProps);
3648
- !(inputProps.value == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(false) : void 0;
3683
+ !(inputProps.value == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\'t want to use valueLink.') : _prodInvariant('88') : void 0;
3684
}
3685
3686
function _assertCheckedLink(inputProps) {
3687
_assertSingleLink(inputProps);
3653
- !(inputProps.checked == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(false) : void 0;
3688
+ !(inputProps.checked == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\'t want to use checkedLink') : _prodInvariant('89') : void 0;
3689
}
3690
3691
var propTypes = {
@@ -3744,7 +3779,7 @@ var LinkedValueUtils = {
3779
};
3780
3781
module.exports = LinkedValueUtils;
3747
-},{"157":157,"167":167,"83":83,"84":84}],25:[function(_dereq_,module,exports){
3782
+},{"137":137,"159":159,"169":169,"83":83,"84":84}],25:[function(_dereq_,module,exports){
3783
/**
3784
* Copyright 2013-present, Facebook, Inc.
3785
* All rights reserved.
@@ -3758,7 +3793,9 @@ module.exports = LinkedValueUtils;
3793
3794
'use strict';
3795
3761
-var invariant = _dereq_(157);
3796
+var _prodInvariant = _dereq_(137);
3797
+
3798
+var invariant = _dereq_(159);
3799
3800
/**
3801
* Static poolers. Several custom versions for each potential number of
@@ -3824,7 +3861,7 @@ var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
3861
3862
var standardReleaser = function (instance) {
3863
var Klass = this;
3827
- !(instance instanceof Klass) ? "development" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : void 0;
3864
+ !(instance instanceof Klass) ? "development" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
3865
instance.destructor();
3866
if (Klass.instancePool.length < Klass.poolSize) {
3867
Klass.instancePool.push(instance);
@@ -3864,7 +3901,7 @@ var PooledClass = {
3901
};
3902
3903
module.exports = PooledClass;
3867
-},{"157":157}],26:[function(_dereq_,module,exports){
3904
+},{"137":137,"159":159}],26:[function(_dereq_,module,exports){
3905
/**
3906
* Copyright 2013-present, Facebook, Inc.
3907
* All rights reserved.
@@ -3878,25 +3915,25 @@ module.exports = PooledClass;
3915
3916
'use strict';
3917
3881
-var _assign = _dereq_(168);
3918
+var _assign = _dereq_(170);
3919
3920
var ReactChildren = _dereq_(29);
3921
var ReactComponent = _dereq_(31);
3922
var ReactClass = _dereq_(30);
3923
var ReactDOMFactories = _dereq_(45);
3924
var ReactElement = _dereq_(61);
3888
-var ReactElementValidator = _dereq_(62);
3925
var ReactPropTypes = _dereq_(84);
3926
var ReactVersion = _dereq_(94);
3927
3892
-var onlyChild = _dereq_(134);
3893
-var warning = _dereq_(167);
3928
+var onlyChild = _dereq_(135);
3929
+var warning = _dereq_(169);
3930
3931
var createElement = ReactElement.createElement;
3932
var createFactory = ReactElement.createFactory;
3933
var cloneElement = ReactElement.cloneElement;
3934
3935
if ("development" !== 'production') {
3936
+ var ReactElementValidator = _dereq_(62);
3937
createElement = ReactElementValidator.createElement;
3938
createFactory = ReactElementValidator.createFactory;
3939
cloneElement = ReactElementValidator.cloneElement;
@@ -3952,7 +3989,7 @@ var React = {
3989
};
3990
3991
module.exports = React;
3955
-},{"134":134,"167":167,"168":168,"29":29,"30":30,"31":31,"45":45,"61":61,"62":62,"84":84,"94":94}],27:[function(_dereq_,module,exports){
3992
+},{"135":135,"169":169,"170":170,"29":29,"30":30,"31":31,"45":45,"61":61,"62":62,"84":84,"94":94}],27:[function(_dereq_,module,exports){
3993
/**
3994
* Copyright 2013-present, Facebook, Inc.
3995
* All rights reserved.
@@ -3966,15 +4003,15 @@ module.exports = React;
4003
4004
'use strict';
4005
3969
-var _assign = _dereq_(168);
4006
+var _assign = _dereq_(170);
4007
4008
var EventConstants = _dereq_(16);
4009
var EventPluginRegistry = _dereq_(18);
4010
var ReactEventEmitterMixin = _dereq_(65);
4011
var ViewportMetrics = _dereq_(112);
4012
3976
-var getVendorPrefixedEventName = _dereq_(130);
3977
-var isEventSupported = _dereq_(132);
4013
+var getVendorPrefixedEventName = _dereq_(131);
4014
+var isEventSupported = _dereq_(133);
4015
4016
/**
4017
* Summary of `ReactBrowserEventEmitter` event handling:
@@ -4270,7 +4307,7 @@ var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
4307
});
4308
4309
module.exports = ReactBrowserEventEmitter;
4273
-},{"112":112,"130":130,"132":132,"16":16,"168":168,"18":18,"65":65}],28:[function(_dereq_,module,exports){
4310
+},{"112":112,"131":131,"133":133,"16":16,"170":170,"18":18,"65":65}],28:[function(_dereq_,module,exports){
4311
/**
4312
* Copyright 2014-present, Facebook, Inc.
4313
* All rights reserved.
@@ -4286,17 +4323,18 @@ module.exports = ReactBrowserEventEmitter;
4323
4324
var ReactReconciler = _dereq_(86);
4325
4289
-var instantiateReactComponent = _dereq_(131);
4326
+var ReactComponentTreeDevtool = _dereq_(34);
4327
+var instantiateReactComponent = _dereq_(132);
4328
var KeyEscapeUtils = _dereq_(23);
4291
-var shouldUpdateReactComponent = _dereq_(139);
4292
-var traverseAllChildren = _dereq_(140);
4293
-var warning = _dereq_(167);
4329
+var shouldUpdateReactComponent = _dereq_(141);
4330
+var traverseAllChildren = _dereq_(142);
4331
+var warning = _dereq_(169);
4332
4295
-function instantiateChild(childInstances, child, name) {
4333
+function instantiateChild(childInstances, child, name, selfDebugID) {
4334
// We found a component instance.
4335
var keyUnique = childInstances[name] === undefined;
4336
if ("development" !== 'production') {
4299
- "development" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', KeyEscapeUtils.unescape(name)) : void 0;
4337
+ "development" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeDevtool.getStackAddendumByID(selfDebugID)) : void 0;
4338
}
4339
if (child != null && keyUnique) {
4340
childInstances[name] = instantiateReactComponent(child);
@@ -4317,12 +4355,20 @@ var ReactChildReconciler = {
4355
* @return {?object} A set of child instances.
4356
* @internal
4357
*/
4320
- instantiateChildren: function (nestedChildNodes, transaction, context) {
4358
+ instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // __DEV__ only
4359
+ ) {
4360
if (nestedChildNodes == null) {
4361
return null;
4362
}
4363
var childInstances = {};
4325
- traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
4364
+
4365
+ if ("development" !== 'production') {
4366
+ traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {
4367
+ return instantiateChild(childInsts, child, name, selfDebugID);
4368
+ }, childInstances);
4369
+ } else {
4370
+ traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
4371
+ }
4372
return childInstances;
4373
},
4374
@@ -4359,7 +4405,7 @@ var ReactChildReconciler = {
4405
nextChildren[name] = prevChild;
4406
} else {
4407
if (prevChild) {
4362
- removedNodes[name] = ReactReconciler.getNativeNode(prevChild);
4408
+ removedNodes[name] = ReactReconciler.getHostNode(prevChild);
4409
ReactReconciler.unmountComponent(prevChild, false);
4410
}
4411
// The child must be instantiated before it's mounted.
@@ -4371,7 +4417,7 @@ var ReactChildReconciler = {
4417
for (name in prevChildren) {
4418
if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
4419
prevChild = prevChildren[name];
4374
- removedNodes[name] = ReactReconciler.getNativeNode(prevChild);
4420
+ removedNodes[name] = ReactReconciler.getHostNode(prevChild);
4421
ReactReconciler.unmountComponent(prevChild, false);
4422
}
4423
}
@@ -4396,7 +4442,7 @@ var ReactChildReconciler = {
4442
};
4443
4444
module.exports = ReactChildReconciler;
4399
-},{"131":131,"139":139,"140":140,"167":167,"23":23,"86":86}],29:[function(_dereq_,module,exports){
4445
+},{"132":132,"141":141,"142":142,"169":169,"23":23,"34":34,"86":86}],29:[function(_dereq_,module,exports){
4446
/**
4447
* Copyright 2013-present, Facebook, Inc.
4448
* All rights reserved.
@@ -4413,8 +4459,8 @@ module.exports = ReactChildReconciler;
4459
var PooledClass = _dereq_(25);
4460
var ReactElement = _dereq_(61);
4461
4416
-var emptyFunction = _dereq_(149);
4417
-var traverseAllChildren = _dereq_(140);
4462
+var emptyFunction = _dereq_(151);
4463
+var traverseAllChildren = _dereq_(142);
4464
4465
var twoArgumentPooler = PooledClass.twoArgumentPooler;
4466
var fourArgumentPooler = PooledClass.fourArgumentPooler;
@@ -4588,7 +4634,7 @@ var ReactChildren = {
4634
};
4635
4636
module.exports = ReactChildren;
4591
-},{"140":140,"149":149,"25":25,"61":61}],30:[function(_dereq_,module,exports){
4637
+},{"142":142,"151":151,"25":25,"61":61}],30:[function(_dereq_,module,exports){
4638
/**
4639
* Copyright 2013-present, Facebook, Inc.
4640
* All rights reserved.
@@ -4602,7 +4648,8 @@ module.exports = ReactChildren;
4648
4649
'use strict';
4650
4605
-var _assign = _dereq_(168);
4651
+var _prodInvariant = _dereq_(137),
4652
+ _assign = _dereq_(170);
4653
4654
var ReactComponent = _dereq_(31);
4655
var ReactElement = _dereq_(61);
@@ -4610,11 +4657,11 @@ var ReactPropTypeLocations = _dereq_(83);
4657
var ReactPropTypeLocationNames = _dereq_(82);
4658
var ReactNoopUpdateQueue = _dereq_(80);
4659
4613
-var emptyObject = _dereq_(150);
4614
-var invariant = _dereq_(157);
4615
-var keyMirror = _dereq_(160);
4616
-var keyOf = _dereq_(161);
4617
-var warning = _dereq_(167);
4660
+var emptyObject = _dereq_(152);
4661
+var invariant = _dereq_(159);
4662
+var keyMirror = _dereq_(162);
4663
+var keyOf = _dereq_(163);
4664
+var warning = _dereq_(169);
4665
4666
var MIXINS_KEY = keyOf({ mixins: null });
4667
@@ -4647,7 +4694,7 @@ var injectedMixins = [];
4694
4695
/**
4696
* Composite components are higher-level components that compose other composite
4650
- * or native components.
4697
+ * or host components.
4698
*
4699
* To create a new type of `ReactClass`, pass a specification of
4700
* your new class to `React.createClass`. The only requirement of your class
@@ -4960,12 +5007,12 @@ function validateMethodOverride(isAlreadyDefined, name) {
5007
5008
// Disallow overriding of base class methods unless explicitly allowed.
5009
if (ReactClassMixin.hasOwnProperty(name)) {
4963
- !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : void 0;
5010
+ !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;
5011
}
5012
5013
// Disallow defining methods more than once unless explicitly allowed.
5014
if (isAlreadyDefined) {
4968
- !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : void 0;
5015
+ !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;
5016
}
5017
}
5018
@@ -4978,8 +5025,8 @@ function mixSpecIntoComponent(Constructor, spec) {
5025
return;
5026
}
5027
4981
- !(typeof spec !== 'function') ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component class or function as a mixin. Instead, just use a ' + 'regular object.') : invariant(false) : void 0;
4982
- !!ReactElement.isValidElement(spec) ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : void 0;
5028
+ !(typeof spec !== 'function') ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;
5029
+ !!ReactElement.isValidElement(spec) ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;
5030
5031
var proto = Constructor.prototype;
5032
var autoBindPairs = proto.__reactAutoBindPairs;
@@ -5024,7 +5071,7 @@ function mixSpecIntoComponent(Constructor, spec) {
5071
var specPolicy = ReactClassInterface[name];
5072
5073
// These cases should already be caught by validateMethodOverride.
5027
- !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? "development" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : void 0;
5074
+ !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? "development" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;
5075
5076
// For methods which are defined more than once, call the existing
5077
// methods before calling the new property, merging if appropriate.
@@ -5059,10 +5106,10 @@ function mixStaticSpecIntoComponent(Constructor, statics) {
5106
}
5107
5108
var isReserved = name in RESERVED_SPEC_KEYS;
5062
- !!isReserved ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : void 0;
5109
+ !!isReserved ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;
5110
5111
var isInherited = name in Constructor;
5065
- !!isInherited ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : void 0;
5112
+ !!isInherited ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;
5113
Constructor[name] = property;
5114
}
5115
}
@@ -5075,11 +5122,11 @@ function mixStaticSpecIntoComponent(Constructor, statics) {
5122
* @return {object} one after it has been mutated to contain everything in two.
5123
*/
5124
function mergeIntoWithNoDuplicateKeys(one, two) {
5078
- !(one && two && typeof one === 'object' && typeof two === 'object') ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : void 0;
5125
+ !(one && two && typeof one === 'object' && typeof two === 'object') ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;
5126
5127
for (var key in two) {
5128
if (two.hasOwnProperty(key)) {
5082
- !(one[key] === undefined) ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : void 0;
5129
+ !(one[key] === undefined) ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;
5130
one[key] = two[key];
5131
}
5132
}
@@ -5257,7 +5304,7 @@ var ReactClass = {
5304
initialState = null;
5305
}
5306
}
5260
- !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : void 0;
5307
+ !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;
5308
5309
this.state = initialState;
5310
};
@@ -5287,7 +5334,7 @@ var ReactClass = {
5334
}
5335
}
5336
5290
- !Constructor.prototype.render ? "development" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : void 0;
5337
+ !Constructor.prototype.render ? "development" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;
5338
5339
if ("development" !== 'production') {
5340
"development" !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;
@@ -5313,7 +5360,7 @@ var ReactClass = {
5360
};
5361
5362
module.exports = ReactClass;
5316
-},{"150":150,"157":157,"160":160,"161":161,"167":167,"168":168,"31":31,"61":61,"80":80,"82":82,"83":83}],31:[function(_dereq_,module,exports){
5363
+},{"137":137,"152":152,"159":159,"162":162,"163":163,"169":169,"170":170,"31":31,"61":61,"80":80,"82":82,"83":83}],31:[function(_dereq_,module,exports){
5364
/**
5365
* Copyright 2013-present, Facebook, Inc.
5366
* All rights reserved.
@@ -5327,13 +5374,14 @@ module.exports = ReactClass;
5374
5375
'use strict';
5376
5377
+var _prodInvariant = _dereq_(137);
5378
+
5379
var ReactNoopUpdateQueue = _dereq_(80);
5331
-var ReactInstrumentation = _dereq_(71);
5380
5381
var canDefineProperty = _dereq_(115);
5334
-var emptyObject = _dereq_(150);
5335
-var invariant = _dereq_(157);
5336
-var warning = _dereq_(167);
5382
+var emptyObject = _dereq_(152);
5383
+var invariant = _dereq_(159);
5384
+var warning = _dereq_(169);
5385
5386
/**
5387
* Base class helpers for the updating state of a component.
@@ -5375,11 +5423,7 @@ ReactComponent.prototype.isReactComponent = {};
5423
* @protected
5424
*/
5425
ReactComponent.prototype.setState = function (partialState, callback) {
5378
- !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? "development" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : void 0;
5379
- if ("development" !== 'production') {
5380
- ReactInstrumentation.debugTool.onSetState();
5381
- "development" !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;
5382
- }
5426
+ !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? "development" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;
5427
this.updater.enqueueSetState(this, partialState);
5428
if (callback) {
5429
this.updater.enqueueCallback(this, callback, 'setState');
@@ -5435,7 +5479,7 @@ if ("development" !== 'production') {
5479
}
5480
5481
module.exports = ReactComponent;
5438
-},{"115":115,"150":150,"157":157,"167":167,"71":71,"80":80}],32:[function(_dereq_,module,exports){
5482
+},{"115":115,"137":137,"152":152,"159":159,"169":169,"80":80}],32:[function(_dereq_,module,exports){
5483
/**
5484
* Copyright 2013-present, Facebook, Inc.
5485
* All rights reserved.
@@ -5489,7 +5533,9 @@ module.exports = ReactComponentBrowserEnvironment;
5533
5534
'use strict';
5535
5492
-var invariant = _dereq_(157);
5536
+var _prodInvariant = _dereq_(137);
5537
+
5538
+var invariant = _dereq_(159);
5539
5540
var injected = false;
5541
@@ -5516,7 +5562,7 @@ var ReactComponentEnvironment = {
5562
5563
injection: {
5564
injectEnvironment: function (environment) {
5519
- !!injected ? "development" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : void 0;
5565
+ !!injected ? "development" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;
5566
ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;
5567
ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;
5568
ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
@@ -5527,7 +5573,7 @@ var ReactComponentEnvironment = {
5573
};
5574
5575
module.exports = ReactComponentEnvironment;
5530
-},{"157":157}],34:[function(_dereq_,module,exports){
5576
+},{"137":137,"159":159}],34:[function(_dereq_,module,exports){
5577
/**
5578
* Copyright 2016-present, Facebook, Inc.
5579
* All rights reserved.
@@ -5541,14 +5587,21 @@ module.exports = ReactComponentEnvironment;
5587
5588
'use strict';
5589
5544
-var invariant = _dereq_(157);
5590
+var _prodInvariant = _dereq_(137);
5591
+
5592
+var ReactCurrentOwner = _dereq_(36);
5593
+
5594
+var invariant = _dereq_(159);
5595
+var warning = _dereq_(169);
5596
5597
var tree = {};
5547
-var rootIDs = [];
5598
+var unmountedIDs = {};
5599
+var rootIDs = {};
5600
5601
function updateTree(id, update) {
5602
if (!tree[id]) {
5603
tree[id] = {
5604
+ element: null,
5605
parentID: null,
5606
ownerID: null,
5607
text: null,
@@ -5557,6 +5610,10 @@ function updateTree(id, update) {
5610
isMounted: false,
5611
updateCount: 0
5612
};
5613
+ // TODO: We need to do this awkward dance because TopLevelWrapper "never
5614
+ // gets mounted" but its display name gets set in instantiateReactComponent
5615
+ // before its debug ID is set to 0.
5616
+ unmountedIDs[id] = true;
5617
}
5618
update(tree[id]);
5619
}
@@ -5571,6 +5628,22 @@ function purgeDeep(id) {
5628
}
5629
}
5630
5631
+function describeComponentFrame(name, source, ownerName) {
5632
+ return '\n in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
5633
+}
5634
+
5635
+function describeID(id) {
5636
+ var name = ReactComponentTreeDevtool.getDisplayName(id);
5637
+ var element = ReactComponentTreeDevtool.getElement(id);
5638
+ var ownerID = ReactComponentTreeDevtool.getOwnerID(id);
5639
+ var ownerName;
5640
+ if (ownerID) {
5641
+ ownerName = ReactComponentTreeDevtool.getDisplayName(ownerID);
5642
+ }
5643
+ "development" !== 'production' ? warning(element, 'ReactComponentTreeDevtool: Missing React element for debugID %s when ' + 'building stack', id) : void 0;
5644
+ return describeComponentFrame(name, element && element._source, ownerName);
5645
+}
5646
+
5647
var ReactComponentTreeDevtool = {
5648
onSetDisplayName: function (id, displayName) {
5649
updateTree(id, function (item) {
@@ -5579,19 +5652,21 @@ var ReactComponentTreeDevtool = {
5652
},
5653
onSetChildren: function (id, nextChildIDs) {
5654
updateTree(id, function (item) {
5582
- var prevChildIDs = item.childIDs;
5655
item.childIDs = nextChildIDs;
5656
5657
nextChildIDs.forEach(function (nextChildID) {
5658
var nextChild = tree[nextChildID];
5587
- !nextChild ? "development" !== 'production' ? invariant(false, 'Expected devtool events to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5588
- !(nextChild.displayName != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetDisplayName() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5589
- !(nextChild.childIDs != null || nextChild.text != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetChildren() or onSetText() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5590
- !nextChild.isMounted ? "development" !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5591
-
5592
- if (prevChildIDs.indexOf(nextChildID) === -1) {
5659
+ !nextChild ? "development" !== 'production' ? invariant(false, 'Expected devtool events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('68') : void 0;
5660
+ !(nextChild.displayName != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetDisplayName() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('69') : void 0;
5661
+ !(nextChild.childIDs != null || nextChild.text != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetChildren() or onSetText() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('70') : void 0;
5662
+ !nextChild.isMounted ? "development" !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;
5663
+ if (nextChild.parentID == null) {
5664
nextChild.parentID = id;
5665
+ // TODO: This shouldn't be necessary but mounting a new root during in
5666
+ // componentWillMount currently causes not-yet-mounted components to
5667
+ // be purged from our tree data so their parent ID is missing.
5668
}
5669
+ !(nextChild.parentID === id) ? "development" !== 'production' ? invariant(false, 'Expected onSetParent() and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('72', nextChildID, nextChild.parentID, id) : void 0;
5670
});
5671
});
5672
},
@@ -5600,18 +5675,34 @@ var ReactComponentTreeDevtool = {
5675
return item.ownerID = ownerID;
5676
});
5677
},
5678
+ onSetParent: function (id, parentID) {
5679
+ updateTree(id, function (item) {
5680
+ return item.parentID = parentID;
5681
+ });
5682
+ },
5683
onSetText: function (id, text) {
5684
updateTree(id, function (item) {
5685
return item.text = text;
5686
});
5687
},
5688
+ onBeforeMountComponent: function (id, element) {
5689
+ updateTree(id, function (item) {
5690
+ return item.element = element;
5691
+ });
5692
+ },
5693
+ onBeforeUpdateComponent: function (id, element) {
5694
+ updateTree(id, function (item) {
5695
+ return item.element = element;
5696
+ });
5697
+ },
5698
onMountComponent: function (id) {
5699
updateTree(id, function (item) {
5700
return item.isMounted = true;
5701
});
5702
+ delete unmountedIDs[id];
5703
},
5704
onMountRootComponent: function (id) {
5614
- rootIDs.push(id);
5705
+ rootIDs[id] = true;
5706
},
5707
onUpdateComponent: function (id) {
5708
updateTree(id, function (item) {
@@ -5622,9 +5713,8 @@ var ReactComponentTreeDevtool = {
5713
updateTree(id, function (item) {
5714
return item.isMounted = false;
5715
});
5625
- rootIDs = rootIDs.filter(function (rootID) {
5626
- return rootID !== id;
5627
- });
5716
+ unmountedIDs[id] = true;
5717
+ delete rootIDs[id];
5718
},
5719
purgeUnmountedComponents: function () {
5720
if (ReactComponentTreeDevtool._preventPurging) {
@@ -5632,14 +5722,38 @@ var ReactComponentTreeDevtool = {
5722
return;
5723
}
5724
5635
- Object.keys(tree).filter(function (id) {
5636
- return !tree[id].isMounted;
5637
- }).forEach(purgeDeep);
5725
+ for (var id in unmountedIDs) {
5726
+ purgeDeep(id);
5727
+ }
5728
+ unmountedIDs = {};
5729
},
5730
isMounted: function (id) {
5731
var item = tree[id];
5732
return item ? item.isMounted : false;
5733
},
5734
+ getCurrentStackAddendum: function (topElement) {
5735
+ var info = '';
5736
+ if (topElement) {
5737
+ var type = topElement.type;
5738
+ var name = typeof type === 'function' ? type.displayName || type.name : type;
5739
+ var owner = topElement._owner;
5740
+ info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());
5741
+ }
5742
+
5743
+ var currentOwner = ReactCurrentOwner.current;
5744
+ var id = currentOwner && currentOwner._debugID;
5745
+
5746
+ info += ReactComponentTreeDevtool.getStackAddendumByID(id);
5747
+ return info;
5748
+ },
5749
+ getStackAddendumByID: function (id) {
5750
+ var info = '';
5751
+ while (id) {
5752
+ info += describeID(id);
5753
+ id = ReactComponentTreeDevtool.getParentID(id);
5754
+ }
5755
+ return info;
5756
+ },
5757
getChildIDs: function (id) {
5758
var item = tree[id];
5759
return item ? item.childIDs : [];
@@ -5648,6 +5762,10 @@ var ReactComponentTreeDevtool = {
5762
var item = tree[id];
5763
return item ? item.displayName : 'Unknown';
5764
},
5765
+ getElement: function (id) {
5766
+ var item = tree[id];
5767
+ return item ? item.element : null;
5768
+ },
5769
getOwnerID: function (id) {
5770
var item = tree[id];
5771
return item ? item.ownerID : null;
@@ -5656,6 +5774,12 @@ var ReactComponentTreeDevtool = {
5774
var item = tree[id];
5775
return item ? item.parentID : null;
5776
},
5777
+ getSource: function (id) {
5778
+ var item = tree[id];
5779
+ var element = item ? item.element : null;
5780
+ var source = element != null ? element._source : null;
5781
+ return source;
5782
+ },
5783
getText: function (id) {
5784
var item = tree[id];
5785
return item ? item.text : null;
@@ -5665,7 +5789,7 @@ var ReactComponentTreeDevtool = {
5789
return item ? item.updateCount : 0;
5790
},
5791
getRootIDs: function () {
5668
- return rootIDs;
5792
+ return Object.keys(rootIDs);
5793
},
5794
getRegisteredIDs: function () {
5795
return Object.keys(tree);
@@ -5673,7 +5797,7 @@ var ReactComponentTreeDevtool = {
5797
};
5798
5799
module.exports = ReactComponentTreeDevtool;
5676
-},{"157":157}],35:[function(_dereq_,module,exports){
5800
+},{"137":137,"159":159,"169":169,"36":36}],35:[function(_dereq_,module,exports){
5801
/**
5802
* Copyright 2013-present, Facebook, Inc.
5803
* All rights reserved.
@@ -5687,35 +5811,26 @@ module.exports = ReactComponentTreeDevtool;
5811
5812
'use strict';
5813
5690
-var _assign = _dereq_(168);
5814
+var _prodInvariant = _dereq_(137),
5815
+ _assign = _dereq_(170);
5816
5817
var ReactComponentEnvironment = _dereq_(33);
5818
var ReactCurrentOwner = _dereq_(36);
5819
var ReactElement = _dereq_(61);
5820
var ReactErrorUtils = _dereq_(64);
5696
-var ReactInstanceMap = _dereq_(70);
5697
-var ReactInstrumentation = _dereq_(71);
5821
+var ReactInstanceMap = _dereq_(72);
5822
+var ReactInstrumentation = _dereq_(73);
5823
var ReactNodeTypes = _dereq_(79);
5824
var ReactPropTypeLocations = _dereq_(83);
5700
-var ReactPropTypeLocationNames = _dereq_(82);
5825
var ReactReconciler = _dereq_(86);
5826
var ReactUpdateQueue = _dereq_(92);
5827
5704
-var emptyObject = _dereq_(150);
5705
-var invariant = _dereq_(157);
5706
-var shouldUpdateReactComponent = _dereq_(139);
5707
-var warning = _dereq_(167);
5828
+var checkReactTypeSpec = _dereq_(116);
5829
5709
-function getDeclarationErrorAddendum(component) {
5710
- var owner = component._currentElement._owner || null;
5711
- if (owner) {
5712
- var name = owner.getName();
5713
- if (name) {
5714
- return ' Check the render method of `' + name + '`.';
5715
- }
5716
- }
5717
- return '';
5718
-}
5830
+var emptyObject = _dereq_(152);
5831
+var invariant = _dereq_(159);
5832
+var shouldUpdateReactComponent = _dereq_(141);
5833
+var warning = _dereq_(169);
5834
5835
function StatelessComponent(Component) {}
5836
StatelessComponent.prototype.render = function () {
@@ -5728,6 +5843,7 @@ StatelessComponent.prototype.render = function () {
5843
function warnIfInvalidElement(Component, element) {
5844
if ("development" !== 'production') {
5845
"development" !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;
5846
+ "development" !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;
5847
}
5848
}
5849
@@ -5808,8 +5924,8 @@ var ReactCompositeComponentMixin = {
5924
this._currentElement = element;
5925
this._rootNodeID = null;
5926
this._instance = null;
5811
- this._nativeParent = null;
5812
- this._nativeContainerInfo = null;
5927
+ this._hostParent = null;
5928
+ this._hostContainerInfo = null;
5929
5930
// See ReactUpdateQueue
5931
this._updateBatchNumber = null;
@@ -5829,26 +5945,30 @@ var ReactCompositeComponentMixin = {
5945
5946
// ComponentWillUnmount shall only be called once
5947
this._calledComponentWillUnmount = false;
5948
+
5949
+ if ("development" !== 'production') {
5950
+ this._warnedAboutRefsInRender = false;
5951
+ }
5952
},
5953
5954
/**
5955
* Initializes the component, renders markup, and registers event listeners.
5956
*
5957
* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
5838
- * @param {?object} nativeParent
5839
- * @param {?object} nativeContainerInfo
5958
+ * @param {?object} hostParent
5959
+ * @param {?object} hostContainerInfo
5960
* @param {?object} context
5961
* @return {?string} Rendered markup to be inserted into the DOM.
5962
* @final
5963
* @internal
5964
*/
5845
- mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
5965
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
5966
this._context = context;
5967
this._mountOrder = nextMountID++;
5848
- this._nativeParent = nativeParent;
5849
- this._nativeContainerInfo = nativeContainerInfo;
5968
+ this._hostParent = hostParent;
5969
+ this._hostContainerInfo = hostContainerInfo;
5970
5851
- var publicProps = this._processProps(this._currentElement.props);
5971
+ var publicProps = this._currentElement.props;
5972
var publicContext = this._processContext(context);
5973
5974
var Component = this._currentElement.type;
@@ -5861,7 +5981,7 @@ var ReactCompositeComponentMixin = {
5981
if (!shouldConstruct(Component) && (inst == null || inst.render == null)) {
5982
renderedElement = inst;
5983
warnIfInvalidElement(Component, renderedElement);
5864
- !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? "development" !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : invariant(false) : void 0;
5984
+ !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? "development" !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;
5985
inst = new StatelessComponent(Component);
5986
}
5987
@@ -5907,7 +6027,7 @@ var ReactCompositeComponentMixin = {
6027
if (initialState === undefined) {
6028
inst.state = initialState = null;
6029
}
5910
- !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;
6030
+ !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;
6031
6032
this._pendingStateQueue = null;
6033
this._pendingReplaceState = false;
@@ -5915,9 +6035,9 @@ var ReactCompositeComponentMixin = {
6035
6036
var markup;
6037
if (inst.unstable_handleError) {
5918
- markup = this.performInitialMountWithErrorHandling(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6038
+ markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);
6039
} else {
5920
- markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6040
+ markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
6041
}
6042
6043
if (inst.componentDidMount) {
@@ -5977,11 +6097,11 @@ var ReactCompositeComponentMixin = {
6097
return instanceOrElement;
6098
},
6099
5980
- performInitialMountWithErrorHandling: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
6100
+ performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
6101
var markup;
6102
var checkpoint = transaction.checkpoint();
6103
try {
5984
- markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6104
+ markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
6105
} catch (e) {
6106
// Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint
6107
transaction.rollback(checkpoint);
@@ -5996,12 +6116,12 @@ var ReactCompositeComponentMixin = {
6116
6117
// Try again - we've informed the component about the error, so they can render an error message this time.
6118
// If this throws again, the error will bubble up (and can be caught by a higher error boundary).
5999
- markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6119
+ markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
6120
}
6121
return markup;
6122
},
6123
6004
- performInitialMount: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
6124
+ performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
6125
var inst = this._instance;
6126
if (inst.componentWillMount) {
6127
if ("development" !== 'production') {
@@ -6028,21 +6148,27 @@ var ReactCompositeComponentMixin = {
6148
}
6149
6150
this._renderedNodeType = ReactNodeTypes.getType(renderedElement);
6031
- this._renderedComponent = this._instantiateReactComponent(renderedElement);
6151
+ var child = this._instantiateReactComponent(renderedElement);
6152
+ this._renderedComponent = child;
6153
+ if ("development" !== 'production') {
6154
+ if (child._debugID !== 0 && this._debugID !== 0) {
6155
+ ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);
6156
+ }
6157
+ }
6158
6033
- var markup = ReactReconciler.mountComponent(this._renderedComponent, transaction, nativeParent, nativeContainerInfo, this._processChildContext(context));
6159
+ var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context));
6160
6161
if ("development" !== 'production') {
6162
if (this._debugID !== 0) {
6037
- ReactInstrumentation.debugTool.onSetChildren(this._debugID, this._renderedComponent._debugID !== 0 ? [this._renderedComponent._debugID] : []);
6163
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);
6164
}
6165
}
6166
6167
return markup;
6168
},
6169
6044
- getNativeNode: function () {
6045
- return ReactReconciler.getNativeNode(this._renderedComponent);
6170
+ getHostNode: function () {
6171
+ return ReactReconciler.getHostNode(this._renderedComponent);
6172
},
6173
6174
/**
@@ -6145,7 +6271,7 @@ var ReactCompositeComponentMixin = {
6271
if ("development" !== 'production') {
6272
var Component = this._currentElement.type;
6273
if (Component.contextTypes) {
6148
- this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
6274
+ this._checkContextTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
6275
}
6276
}
6277
return maskedContext;
@@ -6167,12 +6293,12 @@ var ReactCompositeComponentMixin = {
6293
ReactInstrumentation.debugTool.onEndProcessingChildContext();
6294
}
6295
if (childContext) {
6170
- !(typeof Component.childContextTypes === 'object') ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;
6296
+ !(typeof Component.childContextTypes === 'object') ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;
6297
if ("development" !== 'production') {
6172
- this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
6298
+ this._checkContextTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
6299
}
6300
for (var name in childContext) {
6175
- !(name in Component.childContextTypes) ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : void 0;
6301
+ !(name in Component.childContextTypes) ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;
6302
}
6303
return _assign({}, currentContext, childContext);
6304
}
@@ -6180,62 +6306,15 @@ var ReactCompositeComponentMixin = {
6306
},
6307
6308
/**
6183
- * Processes props by setting default values for unspecified props and
6184
- * asserting that the props are valid. Does not mutate its argument; returns
6185
- * a new props object with defaults merged in.
6186
- *
6187
- * @param {object} newProps
6188
- * @return {object}
6189
- * @private
6190
- */
6191
- _processProps: function (newProps) {
6192
- if ("development" !== 'production') {
6193
- var Component = this._currentElement.type;
6194
- if (Component.propTypes) {
6195
- this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);
6196
- }
6197
- }
6198
- return newProps;
6199
- },
6200
-
6201
- /**
6202
- * Assert that the props are valid
6309
+ * Assert that the context types are valid
6310
*
6204
- * @param {object} propTypes Map of prop name to a ReactPropType
6205
- * @param {object} props
6311
+ * @param {object} typeSpecs Map of context field to a ReactPropType
6312
+ * @param {object} values Runtime values that need to be type-checked
6313
* @param {string} location e.g. "prop", "context", "child context"
6314
* @private
6315
*/
6209
- _checkPropTypes: function (propTypes, props, location) {
6210
- // TODO: Stop validating prop types here and only use the element
6211
- // validation.
6212
- var componentName = this.getName();
6213
- for (var propName in propTypes) {
6214
- if (propTypes.hasOwnProperty(propName)) {
6215
- var error;
6216
- try {
6217
- // This is intentionally an invariant that gets caught. It's the same
6218
- // behavior as without this statement except with a better message.
6219
- !(typeof propTypes[propName] === 'function') ? "development" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : void 0;
6220
- error = propTypes[propName](props, propName, componentName, location);
6221
- } catch (ex) {
6222
- error = ex;
6223
- }
6224
- if (error instanceof Error) {
6225
- // We may want to extend this logic for similar errors in
6226
- // top-level render calls, so I'm abstracting it away into
6227
- // a function to minimize refactoring in the future
6228
- var addendum = getDeclarationErrorAddendum(this);
6229
-
6230
- if (location === ReactPropTypeLocations.prop) {
6231
- // Preface gives us something to blacklist in warning module
6232
- "development" !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : void 0;
6233
- } else {
6234
- "development" !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : void 0;
6235
- }
6236
- }
6237
- }
6238
- }
6316
+ _checkContextTypes: function (typeSpecs, values, location) {
6317
+ checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);
6318
},
6319
6320
receiveComponent: function (nextElement, transaction, nextContext) {
@@ -6281,6 +6360,8 @@ var ReactCompositeComponentMixin = {
6360
*/
6361
updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
6362
var inst = this._instance;
6363
+ !(inst != null) ? "development" !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;
6364
+
6365
var willReceive = false;
6366
var nextContext;
6367
var nextProps;
@@ -6293,13 +6374,10 @@ var ReactCompositeComponentMixin = {
6374
willReceive = true;
6375
}
6376
6296
- // Distinguish between a props update versus a simple state update
6297
- if (prevParentElement === nextParentElement) {
6298
- // Skip checking prop types again -- we don't read inst.props to avoid
6299
- // warning for DOM component props in this upgrade
6300
- nextProps = nextParentElement.props;
6301
- } else {
6302
- nextProps = this._processProps(nextParentElement.props);
6377
+ nextProps = nextParentElement.props;
6378
+
6379
+ // Not a simple state update but a props update
6380
+ if (prevParentElement !== nextParentElement) {
6381
willReceive = true;
6382
}
6383
@@ -6450,21 +6528,27 @@ var ReactCompositeComponentMixin = {
6528
if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
6529
ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
6530
} else {
6453
- var oldNativeNode = ReactReconciler.getNativeNode(prevComponentInstance);
6531
+ var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);
6532
ReactReconciler.unmountComponent(prevComponentInstance, false);
6533
6534
this._renderedNodeType = ReactNodeTypes.getType(nextRenderedElement);
6457
- this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);
6535
+ var child = this._instantiateReactComponent(nextRenderedElement);
6536
+ this._renderedComponent = child;
6537
+ if ("development" !== 'production') {
6538
+ if (child._debugID !== 0 && this._debugID !== 0) {
6539
+ ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);
6540
+ }
6541
+ }
6542
6459
- var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, transaction, this._nativeParent, this._nativeContainerInfo, this._processChildContext(context));
6543
+ var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context));
6544
6545
if ("development" !== 'production') {
6546
if (this._debugID !== 0) {
6463
- ReactInstrumentation.debugTool.onSetChildren(this._debugID, this._renderedComponent._debugID !== 0 ? [this._renderedComponent._debugID] : []);
6547
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);
6548
}
6549
}
6550
6467
- this._replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevComponentInstance);
6551
+ this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);
6552
}
6553
},
6554
@@ -6473,8 +6557,8 @@ var ReactCompositeComponentMixin = {
6557
*
6558
* @protected
6559
*/
6476
- _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup, prevInstance) {
6477
- ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevInstance);
6560
+ _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {
6561
+ ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);
6562
},
6563
6564
/**
@@ -6520,7 +6604,7 @@ var ReactCompositeComponentMixin = {
6604
}
6605
!(
6606
// TODO: An `isValidNode` function would probably be more appropriate
6523
- renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? "development" !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;
6607
+ renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? "development" !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;
6608
6609
return renderedComponent;
6610
},
@@ -6535,7 +6619,7 @@ var ReactCompositeComponentMixin = {
6619
*/
6620
attachRef: function (ref, component) {
6621
var inst = this.getPublicInstance();
6538
- !(inst != null) ? "development" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : void 0;
6622
+ !(inst != null) ? "development" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;
6623
var publicComponentInstance = component.getPublicInstance();
6624
if ("development" !== 'production') {
6625
var componentName = component && component.getName ? component.getName() : 'a component';
@@ -6597,7 +6681,7 @@ var ReactCompositeComponent = {
6681
};
6682
6683
module.exports = ReactCompositeComponent;
6600
-},{"139":139,"150":150,"157":157,"167":167,"168":168,"33":33,"36":36,"61":61,"64":64,"70":70,"71":71,"79":79,"82":82,"83":83,"86":86,"92":92}],36:[function(_dereq_,module,exports){
6684
+},{"116":116,"137":137,"141":141,"152":152,"159":159,"169":169,"170":170,"33":33,"36":36,"61":61,"64":64,"72":72,"73":73,"79":79,"83":83,"86":86,"92":92}],36:[function(_dereq_,module,exports){
6685
/**
6686
* Copyright 2013-present, Facebook, Inc.
6687
* All rights reserved.
@@ -6647,15 +6731,15 @@ module.exports = ReactCurrentOwner;
6731
6732
var ReactDOMComponentTree = _dereq_(41);
6733
var ReactDefaultInjection = _dereq_(60);
6650
-var ReactMount = _dereq_(74);
6734
+var ReactMount = _dereq_(76);
6735
var ReactReconciler = _dereq_(86);
6736
var ReactUpdates = _dereq_(93);
6737
var ReactVersion = _dereq_(94);
6738
6655
-var findDOMNode = _dereq_(119);
6656
-var getNativeComponentFromComposite = _dereq_(127);
6657
-var renderSubtreeIntoContainer = _dereq_(136);
6658
-var warning = _dereq_(167);
6739
+var findDOMNode = _dereq_(120);
6740
+var getHostComponentFromComposite = _dereq_(127);
6741
+var renderSubtreeIntoContainer = _dereq_(138);
6742
+var warning = _dereq_(169);
6743
6744
ReactDefaultInjection.inject();
6745
@@ -6680,7 +6764,7 @@ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVT
6764
getNodeFromInstance: function (inst) {
6765
// inst is an internal instance (but could be a composite)
6766
if (inst._renderedComponent) {
6683
- inst = getNativeComponentFromComposite(inst);
6767
+ inst = getHostComponentFromComposite(inst);
6768
}
6769
if (inst) {
6770
return ReactDOMComponentTree.getNodeFromInstance(inst);
@@ -6695,7 +6779,7 @@ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVT
6779
}
6780
6781
if ("development" !== 'production') {
6698
- var ExecutionEnvironment = _dereq_(143);
6782
+ var ExecutionEnvironment = _dereq_(145);
6783
if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
6784
6785
// First check if devtools is not installed
@@ -6731,7 +6815,7 @@ if ("development" !== 'production') {
6815
}
6816
6817
module.exports = React;
6734
-},{"119":119,"127":127,"136":136,"143":143,"167":167,"41":41,"60":60,"74":74,"86":86,"93":93,"94":94}],38:[function(_dereq_,module,exports){
6818
+},{"120":120,"127":127,"138":138,"145":145,"169":169,"41":41,"60":60,"76":76,"86":86,"93":93,"94":94}],38:[function(_dereq_,module,exports){
6819
/**
6820
* Copyright 2013-present, Facebook, Inc.
6821
* All rights reserved.
@@ -6748,11 +6832,11 @@ module.exports = React;
6832
var DisabledInputUtils = _dereq_(14);
6833
6834
/**
6751
- * Implements a <button> native component that does not receive mouse events
6835
+ * Implements a <button> host component that does not receive mouse events
6836
* when `disabled` is set.
6837
*/
6838
var ReactDOMButton = {
6755
- getNativeProps: DisabledInputUtils.getNativeProps
6839
+ getHostProps: DisabledInputUtils.getHostProps
6840
};
6841
6842
module.exports = ReactDOMButton;
@@ -6772,7 +6856,8 @@ module.exports = ReactDOMButton;
6856
6857
'use strict';
6858
6775
-var _assign = _dereq_(168);
6859
+var _prodInvariant = _dereq_(137),
6860
+ _assign = _dereq_(170);
6861
6862
var AutoFocusUtils = _dereq_(1);
6863
var CSSPropertyOperations = _dereq_(4);
@@ -6792,18 +6877,18 @@ var ReactDOMInput = _dereq_(48);
6877
var ReactDOMOption = _dereq_(50);
6878
var ReactDOMSelect = _dereq_(51);
6879
var ReactDOMTextarea = _dereq_(55);
6795
-var ReactInstrumentation = _dereq_(71);
6796
-var ReactMultiChild = _dereq_(75);
6880
+var ReactInstrumentation = _dereq_(73);
6881
+var ReactMultiChild = _dereq_(77);
6882
var ReactServerRenderingTransaction = _dereq_(90);
6883
6799
-var emptyFunction = _dereq_(149);
6800
-var escapeTextContentForBrowser = _dereq_(118);
6801
-var invariant = _dereq_(157);
6802
-var isEventSupported = _dereq_(132);
6803
-var keyOf = _dereq_(161);
6804
-var shallowEqual = _dereq_(166);
6805
-var validateDOMNesting = _dereq_(141);
6806
-var warning = _dereq_(167);
6884
+var emptyFunction = _dereq_(151);
6885
+var escapeTextContentForBrowser = _dereq_(119);
6886
+var invariant = _dereq_(159);
6887
+var isEventSupported = _dereq_(133);
6888
+var keyOf = _dereq_(163);
6889
+var shallowEqual = _dereq_(168);
6890
+var validateDOMNesting = _dereq_(143);
6891
+var warning = _dereq_(169);
6892
6893
var Flags = ReactDOMComponentFlags;
6894
var deleteListener = EventPluginHub.deleteListener;
@@ -6900,18 +6985,18 @@ function assertValidProps(component, props) {
6985
}
6986
// Note the use of `==` which checks for null or undefined.
6987
if (voidElementTags[component._tag]) {
6903
- !(props.children == null && props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : invariant(false) : void 0;
6988
+ !(props.children == null && props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '%s is a void element tag and must not have `children` or use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('59', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;
6989
}
6990
if (props.dangerouslySetInnerHTML != null) {
6906
- !(props.children == null) ? "development" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : void 0;
6907
- !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? "development" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : void 0;
6991
+ !(props.children == null) ? "development" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;
6992
+ !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? "development" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;
6993
}
6994
if ("development" !== 'production') {
6995
"development" !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;
6996
"development" !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;
6997
"development" !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;
6998
}
6914
- !(props.style == null || typeof props.style === 'object') ? "development" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : void 0;
6999
+ !(props.style == null || typeof props.style === 'object') ? "development" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \'em\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;
7000
}
7001
7002
function enqueuePutListener(inst, registrationName, listener, transaction) {
@@ -6923,7 +7008,7 @@ function enqueuePutListener(inst, registrationName, listener, transaction) {
7008
// bubble.
7009
"development" !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : void 0;
7010
}
6926
- var containerInfo = inst._nativeContainerInfo;
7011
+ var containerInfo = inst._hostContainerInfo;
7012
var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
7013
var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;
7014
listenTo(registrationName, doc);
@@ -6939,6 +7024,16 @@ function putListener() {
7024
EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);
7025
}
7026
7027
+function inputPostMount() {
7028
+ var inst = this;
7029
+ ReactDOMInput.postMountWrapper(inst);
7030
+}
7031
+
7032
+function textareaPostMount() {
7033
+ var inst = this;
7034
+ ReactDOMTextarea.postMountWrapper(inst);
7035
+}
7036
+
7037
function optionPostMount() {
7038
var inst = this;
7039
ReactDOMOption.postMountWrapper(inst);
@@ -6946,14 +7041,34 @@ function optionPostMount() {
7041
7042
var setContentChildForInstrumentation = emptyFunction;
7043
if ("development" !== 'production') {
6949
- setContentChildForInstrumentation = function (contentToUse) {
7044
+ setContentChildForInstrumentation = function (content) {
7045
+ var hasExistingContent = this._contentDebugID != null;
7046
var debugID = this._debugID;
7047
var contentDebugID = debugID + '#text';
7048
+
7049
+ if (content == null) {
7050
+ if (hasExistingContent) {
7051
+ ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7052
+ }
7053
+ this._contentDebugID = null;
7054
+ return;
7055
+ }
7056
+
7057
this._contentDebugID = contentDebugID;
7058
+ var text = '' + content;
7059
+
7060
ReactInstrumentation.debugTool.onSetDisplayName(contentDebugID, '#text');
6954
- ReactInstrumentation.debugTool.onSetText(contentDebugID, '' + contentToUse);
6955
- ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
6956
- ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
7061
+ ReactInstrumentation.debugTool.onSetParent(contentDebugID, debugID);
7062
+ ReactInstrumentation.debugTool.onSetText(contentDebugID, text);
7063
+
7064
+ if (hasExistingContent) {
7065
+ ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);
7066
+ ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);
7067
+ } else {
7068
+ ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content);
7069
+ ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
7070
+ ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
7071
+ }
7072
};
7073
}
7074
@@ -6989,9 +7104,9 @@ function trapBubbledEventsLocal() {
7104
var inst = this;
7105
// If a component renders to null or if another component fatals and causes
7106
// the state of the tree to be corrupted, `node` here can be null.
6992
- !inst._rootNodeID ? "development" !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : void 0;
7107
+ !inst._rootNodeID ? "development" !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;
7108
var node = getNode(inst);
6994
- !node ? "development" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : void 0;
7109
+ !node ? "development" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;
7110
7111
switch (inst._tag) {
7112
case 'iframe':
@@ -7008,7 +7123,9 @@ function trapBubbledEventsLocal() {
7123
inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
7124
}
7125
}
7011
-
7126
+ break;
7127
+ case 'source':
7128
+ inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node)];
7129
break;
7130
case 'img':
7131
inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
@@ -7073,7 +7190,7 @@ var hasOwnProperty = {}.hasOwnProperty;
7190
7191
function validateDangerousTag(tag) {
7192
if (!hasOwnProperty.call(validatedTagCache, tag)) {
7076
- !VALID_TAG_REGEX.test(tag) ? "development" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : void 0;
7193
+ !VALID_TAG_REGEX.test(tag) ? "development" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;
7194
validatedTagCache[tag] = true;
7195
}
7196
}
@@ -7107,17 +7224,17 @@ function ReactDOMComponent(element) {
7224
this._renderedChildren = null;
7225
this._previousStyle = null;
7226
this._previousStyleCopy = null;
7110
- this._nativeNode = null;
7111
- this._nativeParent = null;
7227
+ this._hostNode = null;
7228
+ this._hostParent = null;
7229
this._rootNodeID = null;
7230
this._domID = null;
7114
- this._nativeContainerInfo = null;
7231
+ this._hostContainerInfo = null;
7232
this._wrapperState = null;
7233
this._topLevelWrapper = null;
7234
this._flags = 0;
7235
if ("development" !== 'production') {
7236
this._ancestorInfo = null;
7120
- this._contentDebugID = null;
7237
+ setContentChildForInstrumentation.call(this, null);
7238
}
7239
}
7240
@@ -7132,50 +7249,52 @@ ReactDOMComponent.Mixin = {
7249
* @internal
7250
* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
7251
* @param {?ReactDOMComponent} the containing DOM component instance
7135
- * @param {?object} info about the native container
7252
+ * @param {?object} info about the host container
7253
* @param {object} context
7254
* @return {string} The computed markup.
7255
*/
7139
- mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
7256
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
7257
this._rootNodeID = globalIdCounter++;
7141
- this._domID = nativeContainerInfo._idCounter++;
7142
- this._nativeParent = nativeParent;
7143
- this._nativeContainerInfo = nativeContainerInfo;
7258
+ this._domID = hostContainerInfo._idCounter++;
7259
+ this._hostParent = hostParent;
7260
+ this._hostContainerInfo = hostContainerInfo;
7261
7262
var props = this._currentElement.props;
7263
7264
switch (this._tag) {
7265
+ case 'audio':
7266
+ case 'form':
7267
case 'iframe':
7149
- case 'object':
7268
case 'img':
7151
- case 'form':
7269
+ case 'link':
7270
+ case 'object':
7271
+ case 'source':
7272
case 'video':
7153
- case 'audio':
7273
this._wrapperState = {
7274
listeners: null
7275
};
7276
transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7277
break;
7278
case 'button':
7160
- props = ReactDOMButton.getNativeProps(this, props, nativeParent);
7279
+ props = ReactDOMButton.getHostProps(this, props, hostParent);
7280
break;
7281
case 'input':
7163
- ReactDOMInput.mountWrapper(this, props, nativeParent);
7164
- props = ReactDOMInput.getNativeProps(this, props);
7282
+ ReactDOMInput.mountWrapper(this, props, hostParent);
7283
+ props = ReactDOMInput.getHostProps(this, props);
7284
transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7285
break;
7286
case 'option':
7168
- ReactDOMOption.mountWrapper(this, props, nativeParent);
7169
- props = ReactDOMOption.getNativeProps(this, props);
7287
+ ReactDOMOption.mountWrapper(this, props, hostParent);
7288
+ props = ReactDOMOption.getHostProps(this, props);
7289
break;
7290
case 'select':
7172
- ReactDOMSelect.mountWrapper(this, props, nativeParent);
7173
- props = ReactDOMSelect.getNativeProps(this, props);
7291
+ ReactDOMSelect.mountWrapper(this, props, hostParent);
7292
+ props = ReactDOMSelect.getHostProps(this, props);
7293
transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7294
break;
7295
case 'textarea':
7177
- ReactDOMTextarea.mountWrapper(this, props, nativeParent);
7178
- props = ReactDOMTextarea.getNativeProps(this, props);
7296
+ ReactDOMTextarea.mountWrapper(this, props, hostParent);
7297
+ props = ReactDOMTextarea.getHostProps(this, props);
7298
transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7299
break;
7300
}
@@ -7186,12 +7305,12 @@ ReactDOMComponent.Mixin = {
7305
// tags get no namespace.
7306
var namespaceURI;
7307
var parentTag;
7189
- if (nativeParent != null) {
7190
- namespaceURI = nativeParent._namespaceURI;
7191
- parentTag = nativeParent._tag;
7192
- } else if (nativeContainerInfo._tag) {
7193
- namespaceURI = nativeContainerInfo._namespaceURI;
7194
- parentTag = nativeContainerInfo._tag;
7308
+ if (hostParent != null) {
7309
+ namespaceURI = hostParent._namespaceURI;
7310
+ parentTag = hostParent._tag;
7311
+ } else if (hostContainerInfo._tag) {
7312
+ namespaceURI = hostContainerInfo._namespaceURI;
7313
+ parentTag = hostContainerInfo._tag;
7314
}
7315
if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {
7316
namespaceURI = DOMNamespaces.html;
@@ -7207,10 +7326,10 @@ ReactDOMComponent.Mixin = {
7326
7327
if ("development" !== 'production') {
7328
var parentInfo;
7210
- if (nativeParent != null) {
7211
- parentInfo = nativeParent._ancestorInfo;
7212
- } else if (nativeContainerInfo._tag) {
7213
- parentInfo = nativeContainerInfo._ancestorInfo;
7329
+ if (hostParent != null) {
7330
+ parentInfo = hostParent._ancestorInfo;
7331
+ } else if (hostContainerInfo._tag) {
7332
+ parentInfo = hostContainerInfo._ancestorInfo;
7333
}
7334
if (parentInfo) {
7335
// parentInfo should always be present except for the top-level
@@ -7222,7 +7341,7 @@ ReactDOMComponent.Mixin = {
7341
7342
var mountImage;
7343
if (transaction.useCreateElement) {
7225
- var ownerDocument = nativeContainerInfo._ownerDocument;
7344
+ var ownerDocument = hostContainerInfo._ownerDocument;
7345
var el;
7346
if (namespaceURI === DOMNamespaces.html) {
7347
if (this._tag === 'script') {
@@ -7232,15 +7351,20 @@ ReactDOMComponent.Mixin = {
7351
var type = this._currentElement.type;
7352
div.innerHTML = '<' + type + '></' + type + '>';
7353
el = div.removeChild(div.firstChild);
7354
+ } else if (props.is) {
7355
+ el = ownerDocument.createElement(this._currentElement.type, props.is);
7356
} else {
7236
- el = ownerDocument.createElement(this._currentElement.type, props.is || null);
7357
+ // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.
7358
+ // See discussion in https://github.com/facebook/react/pull/6896
7359
+ // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
7360
+ el = ownerDocument.createElement(this._currentElement.type);
7361
}
7362
} else {
7363
el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);
7364
}
7365
ReactDOMComponentTree.precacheNode(this, el);
7366
this._flags |= Flags.hasCachedChildNodes;
7243
- if (!this._nativeParent) {
7367
+ if (!this._hostParent) {
7368
DOMPropertyOperations.setAttributeForRoot(el);
7369
}
7370
this._updateDOMProperties(null, props, transaction);
@@ -7258,16 +7382,31 @@ ReactDOMComponent.Mixin = {
7382
}
7383
7384
switch (this._tag) {
7261
- case 'button':
7385
case 'input':
7263
- case 'select':
7386
+ transaction.getReactMountReady().enqueue(inputPostMount, this);
7387
+ if (props.autoFocus) {
7388
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7389
+ }
7390
+ break;
7391
case 'textarea':
7392
+ transaction.getReactMountReady().enqueue(textareaPostMount, this);
7393
+ if (props.autoFocus) {
7394
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7395
+ }
7396
+ break;
7397
+ case 'select':
7398
+ if (props.autoFocus) {
7399
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7400
+ }
7401
+ break;
7402
+ case 'button':
7403
if (props.autoFocus) {
7404
transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7405
}
7406
break;
7407
case 'option':
7408
transaction.getReactMountReady().enqueue(optionPostMount, this);
7409
+ break;
7410
}
7411
7412
return mountImage;
@@ -7332,7 +7471,7 @@ ReactDOMComponent.Mixin = {
7471
return ret;
7472
}
7473
7335
- if (!this._nativeParent) {
7474
+ if (!this._hostParent) {
7475
ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
7476
}
7477
ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
@@ -7428,7 +7567,7 @@ ReactDOMComponent.Mixin = {
7567
},
7568
7569
/**
7431
- * Updates a native DOM component after it has already been allocated and
7570
+ * Updates a DOM component after it has already been allocated and
7571
* attached to the DOM. Reconciles the root DOM node, then recurses.
7572
*
7573
* @param {ReactReconcileTransaction} transaction
@@ -7443,26 +7582,26 @@ ReactDOMComponent.Mixin = {
7582
7583
switch (this._tag) {
7584
case 'button':
7446
- lastProps = ReactDOMButton.getNativeProps(this, lastProps);
7447
- nextProps = ReactDOMButton.getNativeProps(this, nextProps);
7585
+ lastProps = ReactDOMButton.getHostProps(this, lastProps);
7586
+ nextProps = ReactDOMButton.getHostProps(this, nextProps);
7587
break;
7588
case 'input':
7589
ReactDOMInput.updateWrapper(this);
7451
- lastProps = ReactDOMInput.getNativeProps(this, lastProps);
7452
- nextProps = ReactDOMInput.getNativeProps(this, nextProps);
7590
+ lastProps = ReactDOMInput.getHostProps(this, lastProps);
7591
+ nextProps = ReactDOMInput.getHostProps(this, nextProps);
7592
break;
7593
case 'option':
7455
- lastProps = ReactDOMOption.getNativeProps(this, lastProps);
7456
- nextProps = ReactDOMOption.getNativeProps(this, nextProps);
7594
+ lastProps = ReactDOMOption.getHostProps(this, lastProps);
7595
+ nextProps = ReactDOMOption.getHostProps(this, nextProps);
7596
break;
7597
case 'select':
7459
- lastProps = ReactDOMSelect.getNativeProps(this, lastProps);
7460
- nextProps = ReactDOMSelect.getNativeProps(this, nextProps);
7598
+ lastProps = ReactDOMSelect.getHostProps(this, lastProps);
7599
+ nextProps = ReactDOMSelect.getHostProps(this, nextProps);
7600
break;
7601
case 'textarea':
7602
ReactDOMTextarea.updateWrapper(this);
7464
- lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);
7465
- nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);
7603
+ lastProps = ReactDOMTextarea.getHostProps(this, lastProps);
7604
+ nextProps = ReactDOMTextarea.getHostProps(this, nextProps);
7605
break;
7606
}
7607
@@ -7517,6 +7656,10 @@ ReactDOMComponent.Mixin = {
7656
// listener (e.g., onClick={null})
7657
deleteListener(this, propKey);
7658
}
7659
+ } else if (isCustomComponent(this._tag, lastProps)) {
7660
+ if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
7661
+ DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);
7662
+ }
7663
} else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
7664
DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);
7665
}
@@ -7620,7 +7763,6 @@ ReactDOMComponent.Mixin = {
7763
if (lastContent !== nextContent) {
7764
this.updateTextContent('' + nextContent);
7765
if ("development" !== 'production') {
7623
- this._contentDebugID = this._debugID + '#text';
7766
setContentChildForInstrumentation.call(this, nextContent);
7767
}
7768
}
@@ -7633,17 +7775,14 @@ ReactDOMComponent.Mixin = {
7775
}
7776
} else if (nextChildren != null) {
7777
if ("development" !== 'production') {
7636
- if (this._contentDebugID) {
7637
- ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7638
- this._contentDebugID = null;
7639
- }
7778
+ setContentChildForInstrumentation.call(this, null);
7779
}
7780
7781
this.updateChildren(nextChildren, transaction, context);
7782
}
7783
},
7784
7646
- getNativeNode: function () {
7785
+ getHostNode: function () {
7786
return getNode(this);
7787
},
7788
@@ -7655,12 +7794,14 @@ ReactDOMComponent.Mixin = {
7794
*/
7795
unmountComponent: function (safely) {
7796
switch (this._tag) {
7797
+ case 'audio':
7798
+ case 'form':
7799
case 'iframe':
7659
- case 'object':
7800
case 'img':
7661
- case 'form':
7801
+ case 'link':
7802
+ case 'object':
7803
+ case 'source':
7804
case 'video':
7663
- case 'audio':
7805
var listeners = this._wrapperState.listeners;
7806
if (listeners) {
7807
for (var i = 0; i < listeners.length; i++) {
@@ -7677,7 +7818,7 @@ ReactDOMComponent.Mixin = {
7818
* take advantage of React's reconciliation for styling and <title>
7819
* management. So we just document it and throw in dangerous cases.
7820
*/
7680
- !false ? "development" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : void 0;
7821
+ !false ? "development" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;
7822
break;
7823
}
7824
@@ -7690,10 +7831,7 @@ ReactDOMComponent.Mixin = {
7831
this._wrapperState = null;
7832
7833
if ("development" !== 'production') {
7693
- if (this._contentDebugID) {
7694
- ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7695
- this._contentDebugID = null;
7696
- }
7834
+ setContentChildForInstrumentation.call(this, null);
7835
}
7836
},
7837
@@ -7706,7 +7844,7 @@ ReactDOMComponent.Mixin = {
7844
_assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
7845
7846
module.exports = ReactDOMComponent;
7709
-},{"1":1,"10":10,"11":11,"118":118,"132":132,"141":141,"149":149,"157":157,"16":16,"161":161,"166":166,"167":167,"168":168,"17":17,"18":18,"27":27,"32":32,"38":38,"4":4,"40":40,"41":41,"48":48,"50":50,"51":51,"55":55,"71":71,"75":75,"8":8,"9":9,"90":90}],40:[function(_dereq_,module,exports){
7847
+},{"1":1,"10":10,"11":11,"119":119,"133":133,"137":137,"143":143,"151":151,"159":159,"16":16,"163":163,"168":168,"169":169,"17":17,"170":170,"18":18,"27":27,"32":32,"38":38,"4":4,"40":40,"41":41,"48":48,"50":50,"51":51,"55":55,"73":73,"77":77,"8":8,"9":9,"90":90}],40:[function(_dereq_,module,exports){
7848
/**
7849
* Copyright 2015-present, Facebook, Inc.
7850
* All rights reserved.
@@ -7739,10 +7877,12 @@ module.exports = ReactDOMComponentFlags;
7877
7878
'use strict';
7879
7880
+var _prodInvariant = _dereq_(137);
7881
+
7882
var DOMProperty = _dereq_(10);
7883
var ReactDOMComponentFlags = _dereq_(40);
7884
7745
-var invariant = _dereq_(157);
7885
+var invariant = _dereq_(159);
7886
7887
var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
7888
var Flags = ReactDOMComponentFlags;
@@ -7750,13 +7890,13 @@ var Flags = ReactDOMComponentFlags;
7890
var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
7891
7892
/**
7753
- * Drill down (through composites and empty components) until we get a native or
7754
- * native text component.
7893
+ * Drill down (through composites and empty components) until we get a host or
7894
+ * host text component.
7895
*
7896
* This is pretty polymorphic but unavoidable with the current structure we have
7897
* for `_renderedChildren`.
7898
*/
7759
-function getRenderedNativeOrTextFromComponent(component) {
7899
+function getRenderedHostOrTextFromComponent(component) {
7900
var rendered;
7901
while (rendered = component._renderedComponent) {
7902
component = rendered;
@@ -7765,25 +7905,25 @@ function getRenderedNativeOrTextFromComponent(component) {
7905
}
7906
7907
/**
7768
- * Populate `_nativeNode` on the rendered native/text component with the given
7908
+ * Populate `_hostNode` on the rendered host/text component with the given
7909
* DOM node. The passed `inst` can be a composite.
7910
*/
7911
function precacheNode(inst, node) {
7772
- var nativeInst = getRenderedNativeOrTextFromComponent(inst);
7773
- nativeInst._nativeNode = node;
7774
- node[internalInstanceKey] = nativeInst;
7912
+ var hostInst = getRenderedHostOrTextFromComponent(inst);
7913
+ hostInst._hostNode = node;
7914
+ node[internalInstanceKey] = hostInst;
7915
}
7916
7917
function uncacheNode(inst) {
7778
- var node = inst._nativeNode;
7918
+ var node = inst._hostNode;
7919
if (node) {
7920
delete node[internalInstanceKey];
7781
- inst._nativeNode = null;
7921
+ inst._hostNode = null;
7922
}
7923
}
7924
7925
/**
7786
- * Populate `_nativeNode` on each child of `inst`, assuming that the children
7926
+ * Populate `_hostNode` on each child of `inst`, assuming that the children
7927
* match up with the DOM (element) children of `node`.
7928
*
7929
* We cache entire levels at once to avoid an n^2 problem where we access the
@@ -7807,7 +7947,7 @@ function precacheChildNodes(inst, node) {
7947
continue;
7948
}
7949
var childInst = children[name];
7810
- var childID = getRenderedNativeOrTextFromComponent(childInst)._domID;
7950
+ var childID = getRenderedHostOrTextFromComponent(childInst)._domID;
7951
if (childID == null) {
7952
// We're currently unmounting this child in ReactMultiChild; skip it.
7953
continue;
@@ -7820,7 +7960,7 @@ function precacheChildNodes(inst, node) {
7960
}
7961
}
7962
// We reached the end of the DOM children without finding an ID match.
7823
- !false ? "development" !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : invariant(false) : void 0;
7963
+ !false ? "development" !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;
7964
}
7965
inst._flags |= Flags.hasCachedChildNodes;
7966
}
@@ -7865,7 +8005,7 @@ function getClosestInstanceFromNode(node) {
8005
*/
8006
function getInstanceFromNode(node) {
8007
var inst = getClosestInstanceFromNode(node);
7868
- if (inst != null && inst._nativeNode === node) {
8008
+ if (inst != null && inst._hostNode === node) {
8009
return inst;
8010
} else {
8011
return null;
@@ -7879,27 +8019,27 @@ function getInstanceFromNode(node) {
8019
function getNodeFromInstance(inst) {
8020
// Without this first invariant, passing a non-DOM-component triggers the next
8021
// invariant for a missing parent, which is super confusing.
7882
- !(inst._nativeNode !== undefined) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;
8022
+ !(inst._hostNode !== undefined) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
8023
7884
- if (inst._nativeNode) {
7885
- return inst._nativeNode;
8024
+ if (inst._hostNode) {
8025
+ return inst._hostNode;
8026
}
8027
8028
// Walk up the tree until we find an ancestor whose DOM node we have cached.
8029
var parents = [];
7890
- while (!inst._nativeNode) {
8030
+ while (!inst._hostNode) {
8031
parents.push(inst);
7892
- !inst._nativeParent ? "development" !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : invariant(false) : void 0;
7893
- inst = inst._nativeParent;
8032
+ !inst._hostParent ? "development" !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;
8033
+ inst = inst._hostParent;
8034
}
8035
8036
// Now parents contains each ancestor that does *not* have a cached native
8037
// node, and `inst` is the deepest ancestor that does.
8038
for (; parents.length; inst = parents.pop()) {
7899
- precacheChildNodes(inst, inst._nativeNode);
8039
+ precacheChildNodes(inst, inst._hostNode);
8040
}
8041
7902
- return inst._nativeNode;
8042
+ return inst._hostNode;
8043
}
8044
8045
var ReactDOMComponentTree = {
@@ -7912,7 +8052,7 @@ var ReactDOMComponentTree = {
8052
};
8053
8054
module.exports = ReactDOMComponentTree;
7915
-},{"10":10,"157":157,"40":40}],42:[function(_dereq_,module,exports){
8055
+},{"10":10,"137":137,"159":159,"40":40}],42:[function(_dereq_,module,exports){
8056
/**
8057
* Copyright 2013-present, Facebook, Inc.
8058
* All rights reserved.
@@ -7926,7 +8066,7 @@ module.exports = ReactDOMComponentTree;
8066
8067
'use strict';
8068
7929
-var validateDOMNesting = _dereq_(141);
8069
+var validateDOMNesting = _dereq_(143);
8070
8071
var DOC_NODE_TYPE = 9;
8072
@@ -7946,7 +8086,7 @@ function ReactDOMContainerInfo(topLevelWrapper, node) {
8086
}
8087
8088
module.exports = ReactDOMContainerInfo;
7949
-},{"141":141}],43:[function(_dereq_,module,exports){
8089
+},{"143":143}],43:[function(_dereq_,module,exports){
8090
/**
8091
* Copyright 2013-present, Facebook, Inc.
8092
* All rights reserved.
@@ -7961,8 +8101,9 @@ module.exports = ReactDOMContainerInfo;
8101
'use strict';
8102
8103
var ReactDOMUnknownPropertyDevtool = _dereq_(57);
8104
+var ReactDebugTool = _dereq_(58);
8105
7965
-var warning = _dereq_(167);
8106
+var warning = _dereq_(169);
8107
8108
var eventHandlers = [];
8109
var handlerDoesThrowForEvent = {};
@@ -7975,7 +8116,7 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
8116
handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);
8117
}
8118
} catch (e) {
7978
- "development" !== 'production' ? warning(!handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e.message) : void 0;
8119
+ "development" !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\n' + e.stack) : void 0;
8120
handlerDoesThrowForEvent[handlerFunctionName] = true;
8121
}
8122
});
@@ -7984,9 +8125,11 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
8125
8126
var ReactDOMDebugTool = {
8127
addDevtool: function (devtool) {
8128
+ ReactDebugTool.addDevtool(devtool);
8129
eventHandlers.push(devtool);
8130
},
8131
removeDevtool: function (devtool) {
8132
+ ReactDebugTool.removeDevtool(devtool);
8133
for (var i = 0; i < eventHandlers.length; i++) {
8134
if (eventHandlers[i] === devtool) {
8135
eventHandlers.splice(i, 1);
@@ -8002,13 +8145,16 @@ var ReactDOMDebugTool = {
8145
},
8146
onDeleteValueForProperty: function (node, name) {
8147
emitEvent('onDeleteValueForProperty', node, name);
8148
+ },
8149
+ onTestEvent: function () {
8150
+ emitEvent('onTestEvent');
8151
}
8152
};
8153
8154
ReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);
8155
8156
module.exports = ReactDOMDebugTool;
8011
-},{"167":167,"57":57}],44:[function(_dereq_,module,exports){
8157
+},{"169":169,"57":57,"58":58}],44:[function(_dereq_,module,exports){
8158
/**
8159
* Copyright 2014-present, Facebook, Inc.
8160
* All rights reserved.
@@ -8022,7 +8168,7 @@ module.exports = ReactDOMDebugTool;
8168
8169
'use strict';
8170
8025
-var _assign = _dereq_(168);
8171
+var _assign = _dereq_(170);
8172
8173
var DOMLazyTree = _dereq_(8);
8174
var ReactDOMComponentTree = _dereq_(41);
@@ -8031,21 +8177,21 @@ var ReactDOMEmptyComponent = function (instantiate) {
8177
// ReactCompositeComponent uses this:
8178
this._currentElement = null;
8179
// ReactDOMComponentTree uses these:
8034
- this._nativeNode = null;
8035
- this._nativeParent = null;
8036
- this._nativeContainerInfo = null;
8180
+ this._hostNode = null;
8181
+ this._hostParent = null;
8182
+ this._hostContainerInfo = null;
8183
this._domID = null;
8184
};
8185
_assign(ReactDOMEmptyComponent.prototype, {
8040
- mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
8041
- var domID = nativeContainerInfo._idCounter++;
8186
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
8187
+ var domID = hostContainerInfo._idCounter++;
8188
this._domID = domID;
8043
- this._nativeParent = nativeParent;
8044
- this._nativeContainerInfo = nativeContainerInfo;
8189
+ this._hostParent = hostParent;
8190
+ this._hostContainerInfo = hostContainerInfo;
8191
8192
var nodeValue = ' react-empty: ' + this._domID + ' ';
8193
if (transaction.useCreateElement) {
8048
- var ownerDocument = nativeContainerInfo._ownerDocument;
8194
+ var ownerDocument = hostContainerInfo._ownerDocument;
8195
var node = ownerDocument.createComment(nodeValue);
8196
ReactDOMComponentTree.precacheNode(this, node);
8197
return DOMLazyTree(node);
@@ -8060,7 +8206,7 @@ _assign(ReactDOMEmptyComponent.prototype, {
8206
}
8207
},
8208
receiveComponent: function () {},
8063
- getNativeNode: function () {
8209
+ getHostNode: function () {
8210
return ReactDOMComponentTree.getNodeFromInstance(this);
8211
},
8212
unmountComponent: function () {
@@ -8069,7 +8215,7 @@ _assign(ReactDOMEmptyComponent.prototype, {
8215
});
8216
8217
module.exports = ReactDOMEmptyComponent;
8072
-},{"168":168,"41":41,"8":8}],45:[function(_dereq_,module,exports){
8218
+},{"170":170,"41":41,"8":8}],45:[function(_dereq_,module,exports){
8219
/**
8220
* Copyright 2013-present, Facebook, Inc.
8221
* All rights reserved.
@@ -8084,9 +8230,8 @@ module.exports = ReactDOMEmptyComponent;
8230
'use strict';
8231
8232
var ReactElement = _dereq_(61);
8087
-var ReactElementValidator = _dereq_(62);
8233
8089
-var mapObject = _dereq_(162);
8234
+var mapObject = _dereq_(164);
8235
8236
/**
8237
* Create a factory that creates HTML tag elements.
@@ -8096,6 +8241,7 @@ var mapObject = _dereq_(162);
8241
*/
8242
function createDOMFactory(tag) {
8243
if ("development" !== 'production') {
8244
+ var ReactElementValidator = _dereq_(62);
8245
return ReactElementValidator.createFactory(tag);
8246
}
8247
return ReactElement.createFactory(tag);
@@ -8246,7 +8392,7 @@ var ReactDOMFactories = mapObject({
8392
}, createDOMFactory);
8393
8394
module.exports = ReactDOMFactories;
8249
-},{"162":162,"61":61,"62":62}],46:[function(_dereq_,module,exports){
8395
+},{"164":164,"61":61,"62":62}],46:[function(_dereq_,module,exports){
8396
/**
8397
* Copyright 2013-present, Facebook, Inc.
8398
* All rights reserved.
@@ -8314,7 +8460,8 @@ module.exports = ReactDOMIDOperations;
8460
8461
'use strict';
8462
8317
-var _assign = _dereq_(168);
8463
+var _prodInvariant = _dereq_(137),
8464
+ _assign = _dereq_(170);
8465
8466
var DisabledInputUtils = _dereq_(14);
8467
var DOMPropertyOperations = _dereq_(11);
@@ -8322,8 +8469,8 @@ var LinkedValueUtils = _dereq_(24);
8469
var ReactDOMComponentTree = _dereq_(41);
8470
var ReactUpdates = _dereq_(93);
8471
8325
-var invariant = _dereq_(157);
8326
-var warning = _dereq_(167);
8472
+var invariant = _dereq_(159);
8473
+var warning = _dereq_(169);
8474
8475
var didWarnValueLink = false;
8476
var didWarnCheckedLink = false;
@@ -8348,8 +8495,13 @@ function warnIfValueIsNull(props) {
8495
}
8496
}
8497
8498
+function isControlled(props) {
8499
+ var usesChecked = props.type === 'checkbox' || props.type === 'radio';
8500
+ return usesChecked ? props.checked !== undefined : props.value !== undefined;
8501
+}
8502
+
8503
/**
8352
- * Implements an <input> native component that allows setting these optional
8504
+ * Implements an <input> host component that allows setting these optional
8505
* props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
8506
*
8507
* If `checked` or `value` are not supplied (or null/undefined), user actions
@@ -8365,15 +8517,15 @@ function warnIfValueIsNull(props) {
8517
* @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
8518
*/
8519
var ReactDOMInput = {
8368
- getNativeProps: function (inst, props) {
8520
+ getHostProps: function (inst, props) {
8521
var value = LinkedValueUtils.getValue(props);
8522
var checked = LinkedValueUtils.getChecked(props);
8523
8372
- var nativeProps = _assign({
8524
+ var hostProps = _assign({
8525
// Make sure we set .type before any other properties (setting .value
8526
// before .type means .value is lost in IE11 and below)
8527
type: undefined
8376
- }, DisabledInputUtils.getNativeProps(inst, props), {
8528
+ }, DisabledInputUtils.getHostProps(inst, props), {
8529
defaultChecked: undefined,
8530
defaultValue: undefined,
8531
value: value != null ? value : inst._wrapperState.initialValue,
@@ -8381,7 +8533,7 @@ var ReactDOMInput = {
8533
onChange: inst._wrapperState.onChange
8534
});
8535
8384
- return nativeProps;
8536
+ return hostProps;
8537
},
8538
8539
mountWrapper: function (inst, props) {
@@ -8411,14 +8563,14 @@ var ReactDOMInput = {
8563
8564
var defaultValue = props.defaultValue;
8565
inst._wrapperState = {
8414
- initialChecked: props.defaultChecked || false,
8415
- initialValue: defaultValue != null ? defaultValue : null,
8566
+ initialChecked: props.checked != null ? props.checked : props.defaultChecked,
8567
+ initialValue: props.value != null ? props.value : defaultValue,
8568
listeners: null,
8569
onChange: _handleChange.bind(inst)
8570
};
8571
8572
if ("development" !== 'production') {
8421
- inst._wrapperState.controlled = props.checked !== undefined || props.value !== undefined;
8573
+ inst._wrapperState.controlled = isControlled(props);
8574
}
8575
},
8576
@@ -8428,16 +8580,14 @@ var ReactDOMInput = {
8580
if ("development" !== 'production') {
8581
warnIfValueIsNull(props);
8582
8431
- var initialValue = inst._wrapperState.initialChecked || inst._wrapperState.initialValue;
8432
- var defaultValue = props.defaultChecked || props.defaultValue;
8433
- var controlled = props.checked !== undefined || props.value !== undefined;
8583
+ var controlled = isControlled(props);
8584
var owner = inst._currentElement._owner;
8585
8436
- if ((initialValue || !inst._wrapperState.controlled) && controlled && !didWarnUncontrolledToControlled) {
8586
+ if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
8587
"development" !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
8588
didWarnUncontrolledToControlled = true;
8589
}
8440
- if (inst._wrapperState.controlled && (defaultValue || !controlled) && !didWarnControlledToUncontrolled) {
8590
+ if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
8591
"development" !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
8592
didWarnControlledToUncontrolled = true;
8593
}
@@ -8449,12 +8599,44 @@ var ReactDOMInput = {
8599
DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);
8600
}
8601
8602
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
8603
var value = LinkedValueUtils.getValue(props);
8604
if (value != null) {
8605
+
8606
// Cast `value` to a string to ensure the value is set correctly. While
8607
// browsers typically do this as necessary, jsdom doesn't.
8456
- DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'value', '' + value);
8608
+ var newValue = '' + value;
8609
+
8610
+ // To avoid side effects (such as losing text selection), only set value if changed
8611
+ if (newValue !== node.value) {
8612
+ node.value = newValue;
8613
+ }
8614
+ } else {
8615
+ if (props.value == null && props.defaultValue != null) {
8616
+ node.defaultValue = '' + props.defaultValue;
8617
+ }
8618
+ if (props.checked == null && props.defaultChecked != null) {
8619
+ node.defaultChecked = !!props.defaultChecked;
8620
+ }
8621
}
8622
+ },
8623
+
8624
+ postMountWrapper: function (inst) {
8625
+ // This is in postMount because we need access to the DOM node, which is not
8626
+ // available until after the component has mounted.
8627
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
8628
+ node.value = node.value; // Detach value from defaultValue
8629
+
8630
+ // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
8631
+ // this is needed to work around a chrome bug where setting defaultChecked
8632
+ // will sometimes influence the value of checked (even after detachment).
8633
+ // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
8634
+ // We need to temporarily unset name to avoid disrupting radio button groups.
8635
+ var name = node.name;
8636
+ node.name = undefined;
8637
+ node.defaultChecked = !node.defaultChecked;
8638
+ node.defaultChecked = !node.defaultChecked;
8639
+ node.name = name;
8640
}
8641
};
8642
@@ -8495,7 +8677,7 @@ function _handleChange(event) {
8677
// That's probably okay; we don't support it just as we don't support
8678
// mixing React radio buttons with non-React ones.
8679
var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);
8498
- !otherInstance ? "development" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : void 0;
8680
+ !otherInstance ? "development" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;
8681
// If this is a controlled radio button group, forcing the input that
8682
// was previously checked to update will cause it to be come re-checked
8683
// as appropriate.
@@ -8507,7 +8689,7 @@ function _handleChange(event) {
8689
}
8690
8691
module.exports = ReactDOMInput;
8510
-},{"11":11,"14":14,"157":157,"167":167,"168":168,"24":24,"41":41,"93":93}],49:[function(_dereq_,module,exports){
8692
+},{"11":11,"137":137,"14":14,"159":159,"169":169,"170":170,"24":24,"41":41,"93":93}],49:[function(_dereq_,module,exports){
8693
/**
8694
* Copyright 2013-present, Facebook, Inc.
8695
* All rights reserved.
@@ -8538,19 +8720,40 @@ module.exports = { debugTool: ReactDOMDebugTool };
8720
8721
'use strict';
8722
8541
-var _assign = _dereq_(168);
8723
+var _assign = _dereq_(170);
8724
8725
var ReactChildren = _dereq_(29);
8726
var ReactDOMComponentTree = _dereq_(41);
8727
var ReactDOMSelect = _dereq_(51);
8728
8547
-var warning = _dereq_(167);
8729
+var warning = _dereq_(169);
8730
+var didWarnInvalidOptionChildren = false;
8731
+
8732
+function flattenChildren(children) {
8733
+ var content = '';
8734
+
8735
+ // Flatten children and warn if they aren't strings or numbers;
8736
+ // invalid types are ignored.
8737
+ ReactChildren.forEach(children, function (child) {
8738
+ if (child == null) {
8739
+ return;
8740
+ }
8741
+ if (typeof child === 'string' || typeof child === 'number') {
8742
+ content += child;
8743
+ } else if (!didWarnInvalidOptionChildren) {
8744
+ didWarnInvalidOptionChildren = true;
8745
+ "development" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
8746
+ }
8747
+ });
8748
+
8749
+ return content;
8750
+}
8751
8752
/**
8550
- * Implements an <option> native component that warns when `selected` is set.
8753
+ * Implements an <option> host component that warns when `selected` is set.
8754
*/
8755
var ReactDOMOption = {
8553
- mountWrapper: function (inst, props, nativeParent) {
8756
+ mountWrapper: function (inst, props, hostParent) {
8757
// TODO (yungsters): Remove support for `selected` in <option>.
8758
if ("development" !== 'production') {
8759
"development" !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;
@@ -8558,11 +8761,11 @@ var ReactDOMOption = {
8761
8762
// Look up whether this option is 'selected'
8763
var selectValue = null;
8561
- if (nativeParent != null) {
8562
- var selectParent = nativeParent;
8764
+ if (hostParent != null) {
8765
+ var selectParent = hostParent;
8766
8767
if (selectParent._tag === 'optgroup') {
8565
- selectParent = selectParent._nativeParent;
8768
+ selectParent = selectParent._hostParent;
8769
}
8770
8771
if (selectParent != null && selectParent._tag === 'select') {
@@ -8574,17 +8777,23 @@ var ReactDOMOption = {
8777
// or missing (e.g., for <datalist>), we don't change props.selected
8778
var selected = null;
8779
if (selectValue != null) {
8780
+ var value;
8781
+ if (props.value != null) {
8782
+ value = props.value + '';
8783
+ } else {
8784
+ value = flattenChildren(props.children);
8785
+ }
8786
selected = false;
8787
if (Array.isArray(selectValue)) {
8788
// multiple
8789
for (var i = 0; i < selectValue.length; i++) {
8581
- if ('' + selectValue[i] === '' + props.value) {
8790
+ if ('' + selectValue[i] === value) {
8791
selected = true;
8792
break;
8793
}
8794
}
8795
} else {
8587
- selected = '' + selectValue === '' + props.value;
8796
+ selected = '' + selectValue === value;
8797
}
8798
}
8799
@@ -8600,41 +8809,28 @@ var ReactDOMOption = {
8809
}
8810
},
8811
8603
- getNativeProps: function (inst, props) {
8604
- var nativeProps = _assign({ selected: undefined, children: undefined }, props);
8812
+ getHostProps: function (inst, props) {
8813
+ var hostProps = _assign({ selected: undefined, children: undefined }, props);
8814
8815
// Read state only from initial mount because <select> updates value
8816
// manually; we need the initial state only for server rendering
8817
if (inst._wrapperState.selected != null) {
8609
- nativeProps.selected = inst._wrapperState.selected;
8818
+ hostProps.selected = inst._wrapperState.selected;
8819
}
8820
8612
- var content = '';
8613
-
8614
- // Flatten children and warn if they aren't strings or numbers;
8615
- // invalid types are ignored.
8616
- ReactChildren.forEach(props.children, function (child) {
8617
- if (child == null) {
8618
- return;
8619
- }
8620
- if (typeof child === 'string' || typeof child === 'number') {
8621
- content += child;
8622
- } else {
8623
- "development" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
8624
- }
8625
- });
8821
+ var content = flattenChildren(props.children);
8822
8823
if (content) {
8628
- nativeProps.children = content;
8824
+ hostProps.children = content;
8825
}
8826
8631
- return nativeProps;
8827
+ return hostProps;
8828
}
8829
8830
};
8831
8832
module.exports = ReactDOMOption;
8637
-},{"167":167,"168":168,"29":29,"41":41,"51":51}],51:[function(_dereq_,module,exports){
8833
+},{"169":169,"170":170,"29":29,"41":41,"51":51}],51:[function(_dereq_,module,exports){
8834
/**
8835
* Copyright 2013-present, Facebook, Inc.
8836
* All rights reserved.
@@ -8648,14 +8844,14 @@ module.exports = ReactDOMOption;
8844
8845
'use strict';
8846
8651
-var _assign = _dereq_(168);
8847
+var _assign = _dereq_(170);
8848
8849
var DisabledInputUtils = _dereq_(14);
8850
var LinkedValueUtils = _dereq_(24);
8851
var ReactDOMComponentTree = _dereq_(41);
8852
var ReactUpdates = _dereq_(93);
8853
8658
-var warning = _dereq_(167);
8854
+var warning = _dereq_(169);
8855
8856
var didWarnValueLink = false;
8857
var didWarnValueNull = false;
@@ -8758,7 +8954,7 @@ function updateOptions(inst, multiple, propValue) {
8954
}
8955
8956
/**
8761
- * Implements a <select> native component that allows optionally setting the
8957
+ * Implements a <select> host component that allows optionally setting the
8958
* props `value` and `defaultValue`. If `multiple` is false, the prop must be a
8959
* stringable. If `multiple` is true, the prop must be an array of stringables.
8960
*
@@ -8773,8 +8969,8 @@ function updateOptions(inst, multiple, propValue) {
8969
* selected.
8970
*/
8971
var ReactDOMSelect = {
8776
- getNativeProps: function (inst, props) {
8777
- return _assign({}, DisabledInputUtils.getNativeProps(inst, props), {
8972
+ getHostProps: function (inst, props) {
8973
+ return _assign({}, DisabledInputUtils.getHostProps(inst, props), {
8974
onChange: inst._wrapperState.onChange,
8975
value: undefined
8976
});
@@ -8848,7 +9044,7 @@ function _handleChange(event) {
9044
}
9045
9046
module.exports = ReactDOMSelect;
8851
-},{"14":14,"167":167,"168":168,"24":24,"41":41,"93":93}],52:[function(_dereq_,module,exports){
9047
+},{"14":14,"169":169,"170":170,"24":24,"41":41,"93":93}],52:[function(_dereq_,module,exports){
9048
/**
9049
* Copyright 2013-present, Facebook, Inc.
9050
* All rights reserved.
@@ -8862,10 +9058,10 @@ module.exports = ReactDOMSelect;
9058
9059
'use strict';
9060
8865
-var ExecutionEnvironment = _dereq_(143);
9061
+var ExecutionEnvironment = _dereq_(145);
9062
8867
-var getNodeForCharacterOffset = _dereq_(128);
8868
-var getTextContentAccessor = _dereq_(129);
9063
+var getNodeForCharacterOffset = _dereq_(129);
9064
+var getTextContentAccessor = _dereq_(130);
9065
9066
/**
9067
* While `isCollapsed` is available on the Selection object and `collapsed`
@@ -9061,7 +9257,7 @@ var ReactDOMSelection = {
9257
};
9258
9259
module.exports = ReactDOMSelection;
9064
-},{"128":128,"129":129,"143":143}],53:[function(_dereq_,module,exports){
9260
+},{"129":129,"130":130,"145":145}],53:[function(_dereq_,module,exports){
9261
/**
9262
* Copyright 2013-present, Facebook, Inc.
9263
* All rights reserved.
@@ -9102,16 +9298,17 @@ module.exports = ReactDOMServer;
9298
9299
'use strict';
9300
9105
-var _assign = _dereq_(168);
9301
+var _prodInvariant = _dereq_(137),
9302
+ _assign = _dereq_(170);
9303
9304
var DOMChildrenOperations = _dereq_(7);
9305
var DOMLazyTree = _dereq_(8);
9306
var ReactDOMComponentTree = _dereq_(41);
9110
-var ReactInstrumentation = _dereq_(71);
9307
+var ReactInstrumentation = _dereq_(73);
9308
9112
-var escapeTextContentForBrowser = _dereq_(118);
9113
-var invariant = _dereq_(157);
9114
-var validateDOMNesting = _dereq_(141);
9309
+var escapeTextContentForBrowser = _dereq_(119);
9310
+var invariant = _dereq_(159);
9311
+var validateDOMNesting = _dereq_(143);
9312
9313
/**
9314
* Text nodes violate a couple assumptions that React makes about components:
@@ -9133,8 +9330,8 @@ var ReactDOMTextComponent = function (text) {
9330
this._currentElement = text;
9331
this._stringText = '' + text;
9332
// ReactDOMComponentTree uses these:
9136
- this._nativeNode = null;
9137
- this._nativeParent = null;
9333
+ this._hostNode = null;
9334
+ this._hostParent = null;
9335
9336
// Properties
9337
this._domID = null;
@@ -9153,15 +9350,15 @@ _assign(ReactDOMTextComponent.prototype, {
9350
* @return {string} Markup for this text node.
9351
* @internal
9352
*/
9156
- mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
9353
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
9354
if ("development" !== 'production') {
9355
ReactInstrumentation.debugTool.onSetText(this._debugID, this._stringText);
9356
9357
var parentInfo;
9161
- if (nativeParent != null) {
9162
- parentInfo = nativeParent._ancestorInfo;
9163
- } else if (nativeContainerInfo != null) {
9164
- parentInfo = nativeContainerInfo._ancestorInfo;
9358
+ if (hostParent != null) {
9359
+ parentInfo = hostParent._ancestorInfo;
9360
+ } else if (hostContainerInfo != null) {
9361
+ parentInfo = hostContainerInfo._ancestorInfo;
9362
}
9363
if (parentInfo) {
9364
// parentInfo should always be present except for the top-level
@@ -9170,13 +9367,13 @@ _assign(ReactDOMTextComponent.prototype, {
9367
}
9368
}
9369
9173
- var domID = nativeContainerInfo._idCounter++;
9370
+ var domID = hostContainerInfo._idCounter++;
9371
var openingValue = ' react-text: ' + domID + ' ';
9372
var closingValue = ' /react-text ';
9373
this._domID = domID;
9177
- this._nativeParent = nativeParent;
9374
+ this._hostParent = hostParent;
9375
if (transaction.useCreateElement) {
9179
- var ownerDocument = nativeContainerInfo._ownerDocument;
9376
+ var ownerDocument = hostContainerInfo._ownerDocument;
9377
var openingComment = ownerDocument.createComment(openingValue);
9378
var closingComment = ownerDocument.createComment(closingValue);
9379
var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());
@@ -9218,7 +9415,7 @@ _assign(ReactDOMTextComponent.prototype, {
9415
// and/or updateComponent to do the actual update for consistency with
9416
// other component types?
9417
this._stringText = nextStringText;
9221
- var commentNodes = this.getNativeNode();
9418
+ var commentNodes = this.getHostNode();
9419
DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
9420
9421
if ("development" !== 'production') {
@@ -9228,16 +9425,16 @@ _assign(ReactDOMTextComponent.prototype, {
9425
}
9426
},
9427
9231
- getNativeNode: function () {
9232
- var nativeNode = this._commentNodes;
9233
- if (nativeNode) {
9234
- return nativeNode;
9428
+ getHostNode: function () {
9429
+ var hostNode = this._commentNodes;
9430
+ if (hostNode) {
9431
+ return hostNode;
9432
}
9433
if (!this._closingComment) {
9434
var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);
9435
var node = openingComment.nextSibling;
9436
while (true) {
9240
- !(node != null) ? "development" !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : invariant(false) : void 0;
9437
+ !(node != null) ? "development" !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;
9438
if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
9439
this._closingComment = node;
9440
break;
@@ -9245,9 +9442,9 @@ _assign(ReactDOMTextComponent.prototype, {
9442
node = node.nextSibling;
9443
}
9444
}
9248
- nativeNode = [this._nativeNode, this._closingComment];
9249
- this._commentNodes = nativeNode;
9250
- return nativeNode;
9445
+ hostNode = [this._hostNode, this._closingComment];
9446
+ this._commentNodes = hostNode;
9447
+ return hostNode;
9448
},
9449
9450
unmountComponent: function () {
@@ -9259,7 +9456,7 @@ _assign(ReactDOMTextComponent.prototype, {
9456
});
9457
9458
module.exports = ReactDOMTextComponent;
9262
-},{"118":118,"141":141,"157":157,"168":168,"41":41,"7":7,"71":71,"8":8}],55:[function(_dereq_,module,exports){
9459
+},{"119":119,"137":137,"143":143,"159":159,"170":170,"41":41,"7":7,"73":73,"8":8}],55:[function(_dereq_,module,exports){
9460
/**
9461
* Copyright 2013-present, Facebook, Inc.
9462
* All rights reserved.
@@ -9273,16 +9470,16 @@ module.exports = ReactDOMTextComponent;
9470
9471
'use strict';
9472
9276
-var _assign = _dereq_(168);
9473
+var _prodInvariant = _dereq_(137),
9474
+ _assign = _dereq_(170);
9475
9476
var DisabledInputUtils = _dereq_(14);
9279
-var DOMPropertyOperations = _dereq_(11);
9477
var LinkedValueUtils = _dereq_(24);
9478
var ReactDOMComponentTree = _dereq_(41);
9479
var ReactUpdates = _dereq_(93);
9480
9284
-var invariant = _dereq_(157);
9285
-var warning = _dereq_(167);
9481
+var invariant = _dereq_(159);
9482
+var warning = _dereq_(169);
9483
9484
var didWarnValueLink = false;
9485
var didWarnValueNull = false;
@@ -9304,7 +9501,7 @@ function warnIfValueIsNull(props) {
9501
}
9502
9503
/**
9307
- * Implements a <textarea> native component that allows setting `value`, and
9504
+ * Implements a <textarea> host component that allows setting `value`, and
9505
* `defaultValue`. This differs from the traditional DOM API because value is
9506
* usually set as PCDATA children.
9507
*
@@ -9319,19 +9516,22 @@ function warnIfValueIsNull(props) {
9516
* `defaultValue` if specified, or the children content (deprecated).
9517
*/
9518
var ReactDOMTextarea = {
9322
- getNativeProps: function (inst, props) {
9323
- !(props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : void 0;
9519
+ getHostProps: function (inst, props) {
9520
+ !(props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;
9521
9522
// Always set children to the same thing. In IE9, the selection range will
9326
- // get reset if `textContent` is mutated.
9327
- var nativeProps = _assign({}, DisabledInputUtils.getNativeProps(inst, props), {
9328
- defaultValue: undefined,
9523
+ // get reset if `textContent` is mutated. We could add a check in setTextContent
9524
+ // to only set the value if/when the value differs from the node value (which would
9525
+ // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.
9526
+ // The value can be a boolean or object so that's why it's forced to be a string.
9527
+ var hostProps = _assign({}, DisabledInputUtils.getHostProps(inst, props), {
9528
value: undefined,
9330
- children: inst._wrapperState.initialValue,
9529
+ defaultValue: undefined,
9530
+ children: '' + inst._wrapperState.initialValue,
9531
onChange: inst._wrapperState.onChange
9532
});
9533
9334
- return nativeProps;
9534
+ return hostProps;
9535
},
9536
9537
mountWrapper: function (inst, props) {
@@ -9348,31 +9548,34 @@ var ReactDOMTextarea = {
9548
warnIfValueIsNull(props);
9549
}
9550
9351
- var defaultValue = props.defaultValue;
9352
- // TODO (yungsters): Remove support for children content in <textarea>.
9353
- var children = props.children;
9354
- if (children != null) {
9355
- if ("development" !== 'production') {
9356
- "development" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
9551
+ var value = LinkedValueUtils.getValue(props);
9552
+ var initialValue = value;
9553
+
9554
+ // Only bother fetching default value if we're going to use it
9555
+ if (value == null) {
9556
+ var defaultValue = props.defaultValue;
9557
+ // TODO (yungsters): Remove support for children content in <textarea>.
9558
+ var children = props.children;
9559
+ if (children != null) {
9560
+ if ("development" !== 'production') {
9561
+ "development" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
9562
+ }
9563
+ !(defaultValue == null) ? "development" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;
9564
+ if (Array.isArray(children)) {
9565
+ !(children.length <= 1) ? "development" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;
9566
+ children = children[0];
9567
+ }
9568
+
9569
+ defaultValue = '' + children;
9570
}
9358
- !(defaultValue == null) ? "development" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : void 0;
9359
- if (Array.isArray(children)) {
9360
- !(children.length <= 1) ? "development" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : void 0;
9361
- children = children[0];
9571
+ if (defaultValue == null) {
9572
+ defaultValue = '';
9573
}
9363
-
9364
- defaultValue = '' + children;
9365
- }
9366
- if (defaultValue == null) {
9367
- defaultValue = '';
9574
+ initialValue = defaultValue;
9575
}
9369
- var value = LinkedValueUtils.getValue(props);
9576
+
9577
inst._wrapperState = {
9371
- // We save the initial value so that `ReactDOMComponent` doesn't update
9372
- // `textContent` (unnecessary since we update value).
9373
- // The initial value can be a boolean or object so that's why it's
9374
- // forced to be a string.
9375
- initialValue: '' + (value != null ? value : defaultValue),
9578
+ initialValue: '' + initialValue,
9579
listeners: null,
9580
onChange: _handleChange.bind(inst)
9581
};
@@ -9385,12 +9588,33 @@ var ReactDOMTextarea = {
9588
warnIfValueIsNull(props);
9589
}
9590
9591
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
9592
var value = LinkedValueUtils.getValue(props);
9593
if (value != null) {
9594
// Cast `value` to a string to ensure the value is set correctly. While
9595
// browsers typically do this as necessary, jsdom doesn't.
9392
- DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'value', '' + value);
9596
+ var newValue = '' + value;
9597
+
9598
+ // To avoid side effects (such as losing text selection), only set value if changed
9599
+ if (newValue !== node.value) {
9600
+ node.value = newValue;
9601
+ }
9602
+ if (props.defaultValue == null) {
9603
+ node.defaultValue = newValue;
9604
+ }
9605
+ }
9606
+ if (props.defaultValue != null) {
9607
+ node.defaultValue = props.defaultValue;
9608
}
9609
+ },
9610
+
9611
+ postMountWrapper: function (inst) {
9612
+ // This is in postMount because we need access to the DOM node, which is not
9613
+ // available until after the component has mounted.
9614
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
9615
+
9616
+ // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
9617
+ node.value = node.textContent; // Detach value from defaultValue
9618
}
9619
};
9620
@@ -9402,7 +9626,7 @@ function _handleChange(event) {
9626
}
9627
9628
module.exports = ReactDOMTextarea;
9405
-},{"11":11,"14":14,"157":157,"167":167,"168":168,"24":24,"41":41,"93":93}],56:[function(_dereq_,module,exports){
9629
+},{"137":137,"14":14,"159":159,"169":169,"170":170,"24":24,"41":41,"93":93}],56:[function(_dereq_,module,exports){
9630
/**
9631
* Copyright 2015-present, Facebook, Inc.
9632
* All rights reserved.
@@ -9416,34 +9640,36 @@ module.exports = ReactDOMTextarea;
9640
9641
'use strict';
9642
9419
-var invariant = _dereq_(157);
9643
+var _prodInvariant = _dereq_(137);
9644
+
9645
+var invariant = _dereq_(159);
9646
9647
/**
9648
* Return the lowest common ancestor of A and B, or null if they are in
9649
* different trees.
9650
*/
9651
function getLowestCommonAncestor(instA, instB) {
9426
- !('_nativeNode' in instA) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;
9427
- !('_nativeNode' in instB) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;
9652
+ !('_hostNode' in instA) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
9653
+ !('_hostNode' in instB) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
9654
9655
var depthA = 0;
9430
- for (var tempA = instA; tempA; tempA = tempA._nativeParent) {
9656
+ for (var tempA = instA; tempA; tempA = tempA._hostParent) {
9657
depthA++;
9658
}
9659
var depthB = 0;
9434
- for (var tempB = instB; tempB; tempB = tempB._nativeParent) {
9660
+ for (var tempB = instB; tempB; tempB = tempB._hostParent) {
9661
depthB++;
9662
}
9663
9664
// If A is deeper, crawl up.
9665
while (depthA - depthB > 0) {
9440
- instA = instA._nativeParent;
9666
+ instA = instA._hostParent;
9667
depthA--;
9668
}
9669
9670
// If B is deeper, crawl up.
9671
while (depthB - depthA > 0) {
9446
- instB = instB._nativeParent;
9672
+ instB = instB._hostParent;
9673
depthB--;
9674
}
9675
@@ -9453,8 +9679,8 @@ function getLowestCommonAncestor(instA, instB) {
9679
if (instA === instB) {
9680
return instA;
9681
}
9456
- instA = instA._nativeParent;
9457
- instB = instB._nativeParent;
9682
+ instA = instA._hostParent;
9683
+ instB = instB._hostParent;
9684
}
9685
return null;
9686
}
@@ -9463,14 +9689,14 @@ function getLowestCommonAncestor(instA, instB) {
9689
* Return if A is an ancestor of B.
9690
*/
9691
function isAncestor(instA, instB) {
9466
- !('_nativeNode' in instA) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : invariant(false) : void 0;
9467
- !('_nativeNode' in instB) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : invariant(false) : void 0;
9692
+ !('_hostNode' in instA) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
9693
+ !('_hostNode' in instB) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
9694
9695
while (instB) {
9696
if (instB === instA) {
9697
return true;
9698
}
9473
- instB = instB._nativeParent;
9699
+ instB = instB._hostParent;
9700
}
9701
return false;
9702
}
@@ -9479,9 +9705,9 @@ function isAncestor(instA, instB) {
9705
* Return the parent instance of the passed-in instance.
9706
*/
9707
function getParentInstance(inst) {
9482
- !('_nativeNode' in inst) ? "development" !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : invariant(false) : void 0;
9708
+ !('_hostNode' in inst) ? "development" !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;
9709
9484
- return inst._nativeParent;
9710
+ return inst._hostParent;
9711
}
9712
9713
/**
@@ -9491,7 +9717,7 @@ function traverseTwoPhase(inst, fn, arg) {
9717
var path = [];
9718
while (inst) {
9719
path.push(inst);
9494
- inst = inst._nativeParent;
9720
+ inst = inst._hostParent;
9721
}
9722
var i;
9723
for (i = path.length; i-- > 0;) {
@@ -9514,12 +9740,12 @@ function traverseEnterLeave(from, to, fn, argFrom, argTo) {
9740
var pathFrom = [];
9741
while (from && from !== common) {
9742
pathFrom.push(from);
9517
- from = from._nativeParent;
9743
+ from = from._hostParent;
9744
}
9745
var pathTo = [];
9746
while (to && to !== common) {
9747
pathTo.push(to);
9522
- to = to._nativeParent;
9748
+ to = to._hostParent;
9749
}
9750
var i;
9751
for (i = 0; i < pathFrom.length; i++) {
@@ -9537,7 +9763,7 @@ module.exports = {
9763
traverseTwoPhase: traverseTwoPhase,
9764
traverseEnterLeave: traverseEnterLeave
9765
};
9540
-},{"157":157}],57:[function(_dereq_,module,exports){
9766
+},{"137":137,"159":159}],57:[function(_dereq_,module,exports){
9767
/**
9768
* Copyright 2013-present, Facebook, Inc.
9769
* All rights reserved.
@@ -9553,56 +9779,104 @@ module.exports = {
9779
9780
var DOMProperty = _dereq_(10);
9781
var EventPluginRegistry = _dereq_(18);
9782
+var ReactComponentTreeDevtool = _dereq_(34);
9783
9557
-var warning = _dereq_(167);
9784
+var warning = _dereq_(169);
9785
9786
if ("development" !== 'production') {
9787
var reactProps = {
9788
children: true,
9789
dangerouslySetInnerHTML: true,
9790
key: true,
9564
- ref: true
9791
+ ref: true,
9792
+
9793
+ autoFocus: true,
9794
+ defaultValue: true,
9795
+ valueLink: true,
9796
+ defaultChecked: true,
9797
+ checkedLink: true,
9798
+ innerHTML: true,
9799
+ suppressContentEditableWarning: true,
9800
+ onFocusIn: true,
9801
+ onFocusOut: true
9802
};
9803
var warnedProperties = {};
9804
9568
- var warnUnknownProperty = function (name) {
9805
+ var validateProperty = function (tagName, name, debugID) {
9806
if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {
9570
- return;
9807
+ return true;
9808
}
9809
if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
9573
- return;
9810
+ return true;
9811
+ }
9812
+ if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {
9813
+ return true;
9814
}
9575
-
9815
warnedProperties[name] = true;
9816
var lowerCasedName = name.toLowerCase();
9817
9818
// data-* attributes should be lowercase; suggest the lowercase version
9819
var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
9820
9582
- // For now, only warn when we have a suggested correction. This prevents
9583
- // logging too much when using transferPropsTo.
9584
- "development" !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : void 0;
9585
-
9821
var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;
9822
9588
- "development" !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?', name, registrationName) : void 0;
9823
+ if (standardName != null) {
9824
+ "development" !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9825
+ return true;
9826
+ } else if (registrationName != null) {
9827
+ "development" !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9828
+ return true;
9829
+ } else {
9830
+ // We were unable to guess which prop the user intended.
9831
+ // It is likely that the user was just blindly spreading/forwarding props
9832
+ // Components should be careful to only render valid props/attributes.
9833
+ // Warning will be invoked in warnUnknownProperties to allow grouping.
9834
+ return false;
9835
+ }
9836
};
9837
}
9838
9839
+var warnUnknownProperties = function (debugID, element) {
9840
+ var unknownProps = [];
9841
+ for (var key in element.props) {
9842
+ var isValid = validateProperty(element.type, key, debugID);
9843
+ if (!isValid) {
9844
+ unknownProps.push(key);
9845
+ }
9846
+ }
9847
+
9848
+ var unknownPropString = unknownProps.map(function (prop) {
9849
+ return '`' + prop + '`';
9850
+ }).join(', ');
9851
+
9852
+ if (unknownProps.length === 1) {
9853
+ "development" !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9854
+ } else if (unknownProps.length > 1) {
9855
+ "development" !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9856
+ }
9857
+};
9858
+
9859
+function handleElement(debugID, element) {
9860
+ if (element == null || typeof element.type !== 'string') {
9861
+ return;
9862
+ }
9863
+ if (element.type.indexOf('-') >= 0 || element.props.is) {
9864
+ return;
9865
+ }
9866
+ warnUnknownProperties(debugID, element);
9867
+}
9868
+
9869
var ReactDOMUnknownPropertyDevtool = {
9593
- onCreateMarkupForProperty: function (name, value) {
9594
- warnUnknownProperty(name);
9595
- },
9596
- onSetValueForProperty: function (node, name, value) {
9597
- warnUnknownProperty(name);
9870
+ onBeforeMountComponent: function (debugID, element) {
9871
+ handleElement(debugID, element);
9872
},
9599
- onDeleteValueForProperty: function (node, name) {
9600
- warnUnknownProperty(name);
9873
+ onBeforeUpdateComponent: function (debugID, element) {
9874
+ handleElement(debugID, element);
9875
}
9876
};
9877
9878
module.exports = ReactDOMUnknownPropertyDevtool;
9605
-},{"10":10,"167":167,"18":18}],58:[function(_dereq_,module,exports){
9879
+},{"10":10,"169":169,"18":18,"34":34}],58:[function(_dereq_,module,exports){
9880
/**
9881
* Copyright 2016-present, Facebook, Inc.
9882
* All rights reserved.
@@ -9616,10 +9890,10 @@ module.exports = ReactDOMUnknownPropertyDevtool;
9890
9891
'use strict';
9892
9619
-var ExecutionEnvironment = _dereq_(143);
9893
+var ExecutionEnvironment = _dereq_(145);
9894
9621
-var performanceNow = _dereq_(165);
9622
-var warning = _dereq_(167);
9895
+var performanceNow = _dereq_(167);
9896
+var warning = _dereq_(169);
9897
9898
var eventHandlers = [];
9899
var handlerDoesThrowForEvent = {};
@@ -9632,7 +9906,7 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
9906
handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);
9907
}
9908
} catch (e) {
9635
- "development" !== 'production' ? warning(!handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e.message) : void 0;
9909
+ "development" !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\n' + e.stack) : void 0;
9910
handlerDoesThrowForEvent[handlerFunctionName] = true;
9911
}
9912
});
@@ -9641,16 +9915,18 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
9915
9916
var isProfiling = false;
9917
var flushHistory = [];
9918
+var lifeCycleTimerStack = [];
9919
var currentFlushNesting = 0;
9920
var currentFlushMeasurements = null;
9921
var currentFlushStartTime = null;
9922
var currentTimerDebugID = null;
9923
var currentTimerStartTime = null;
9924
+var currentTimerNestedFlushDuration = null;
9925
var currentTimerType = null;
9926
9927
function clearHistory() {
9928
ReactComponentTreeDevtool.purgeUnmountedComponents();
9653
- ReactNativeOperationHistoryDevtool.clearHistory();
9929
+ ReactHostOperationHistoryDevtool.clearHistory();
9930
}
9931
9932
function getTreeSnapshot(registeredIDs) {
@@ -9674,7 +9950,7 @@ function resetMeasurements() {
9950
if ("development" !== 'production') {
9951
var previousStartTime = currentFlushStartTime;
9952
var previousMeasurements = currentFlushMeasurements || [];
9677
- var previousOperations = ReactNativeOperationHistoryDevtool.getHistory();
9953
+ var previousOperations = ReactHostOperationHistoryDevtool.getHistory();
9954
9955
if (!isProfiling || currentFlushNesting === 0) {
9956
currentFlushStartTime = null;
@@ -9703,6 +9979,62 @@ function checkDebugID(debugID) {
9979
"development" !== 'production' ? warning(debugID, 'ReactDebugTool: debugID may not be empty.') : void 0;
9980
}
9981
9982
+function beginLifeCycleTimer(debugID, timerType) {
9983
+ if (!isProfiling || currentFlushNesting === 0) {
9984
+ return;
9985
+ }
9986
+ "development" !== 'production' ? warning(!currentTimerType, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
9987
+ currentTimerStartTime = performanceNow();
9988
+ currentTimerNestedFlushDuration = 0;
9989
+ currentTimerDebugID = debugID;
9990
+ currentTimerType = timerType;
9991
+}
9992
+
9993
+function endLifeCycleTimer(debugID, timerType) {
9994
+ if (!isProfiling || currentFlushNesting === 0) {
9995
+ return;
9996
+ }
9997
+ "development" !== 'production' ? warning(currentTimerType === timerType, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
9998
+ currentFlushMeasurements.push({
9999
+ timerType: timerType,
10000
+ instanceID: debugID,
10001
+ duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration
10002
+ });
10003
+ currentTimerStartTime = null;
10004
+ currentTimerNestedFlushDuration = null;
10005
+ currentTimerDebugID = null;
10006
+ currentTimerType = null;
10007
+}
10008
+
10009
+function pauseCurrentLifeCycleTimer() {
10010
+ var currentTimer = {
10011
+ startTime: currentTimerStartTime,
10012
+ nestedFlushStartTime: performanceNow(),
10013
+ debugID: currentTimerDebugID,
10014
+ timerType: currentTimerType
10015
+ };
10016
+ lifeCycleTimerStack.push(currentTimer);
10017
+ currentTimerStartTime = null;
10018
+ currentTimerNestedFlushDuration = null;
10019
+ currentTimerDebugID = null;
10020
+ currentTimerType = null;
10021
+}
10022
+
10023
+function resumeCurrentLifeCycleTimer() {
10024
+ var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop();
10025
+
10026
+ var startTime = _lifeCycleTimerStack$.startTime;
10027
+ var nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime;
10028
+ var debugID = _lifeCycleTimerStack$.debugID;
10029
+ var timerType = _lifeCycleTimerStack$.timerType;
10030
+
10031
+ var nestedFlushDuration = performanceNow() - nestedFlushStartTime;
10032
+ currentTimerStartTime = startTime;
10033
+ currentTimerNestedFlushDuration += nestedFlushDuration;
10034
+ currentTimerDebugID = debugID;
10035
+ currentTimerType = timerType;
10036
+}
10037
+
10038
var ReactDebugTool = {
10039
addDevtool: function (devtool) {
10040
eventHandlers.push(devtool);
@@ -9715,6 +10047,9 @@ var ReactDebugTool = {
10047
}
10048
}
10049
},
10050
+ isProfiling: function () {
10051
+ return isProfiling;
10052
+ },
10053
beginProfiling: function () {
10054
if ("development" !== 'production') {
10055
if (isProfiling) {
@@ -9737,14 +10072,13 @@ var ReactDebugTool = {
10072
}
10073
},
10074
getFlushHistory: function () {
9740
- if ("development" !== 'production') {
9741
- return flushHistory;
9742
- }
10075
+ return flushHistory;
10076
},
10077
onBeginFlush: function () {
10078
if ("development" !== 'production') {
10079
currentFlushNesting++;
10080
resetMeasurements();
10081
+ pauseCurrentLifeCycleTimer();
10082
}
10083
emitEvent('onBeginFlush');
10084
},
@@ -9752,6 +10086,7 @@ var ReactDebugTool = {
10086
if ("development" !== 'production') {
10087
resetMeasurements();
10088
currentFlushNesting--;
10089
+ resumeCurrentLifeCycleTimer();
10090
}
10091
emitEvent('onEndFlush');
10092
},
@@ -9759,28 +10094,13 @@ var ReactDebugTool = {
10094
checkDebugID(debugID);
10095
emitEvent('onBeginLifeCycleTimer', debugID, timerType);
10096
if ("development" !== 'production') {
9762
- if (isProfiling && currentFlushNesting > 0) {
9763
- "development" !== 'production' ? warning(!currentTimerType, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
9764
- currentTimerStartTime = performanceNow();
9765
- currentTimerDebugID = debugID;
9766
- currentTimerType = timerType;
9767
- }
10097
+ beginLifeCycleTimer(debugID, timerType);
10098
}
10099
},
10100
onEndLifeCycleTimer: function (debugID, timerType) {
10101
checkDebugID(debugID);
10102
if ("development" !== 'production') {
9773
- if (isProfiling && currentFlushNesting > 0) {
9774
- "development" !== 'production' ? warning(currentTimerType === timerType, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
9775
- currentFlushMeasurements.push({
9776
- timerType: timerType,
9777
- instanceID: debugID,
9778
- duration: performanceNow() - currentTimerStartTime
9779
- });
9780
- currentTimerStartTime = null;
9781
- currentTimerDebugID = null;
9782
- currentTimerType = null;
9783
- }
10103
+ endLifeCycleTimer(debugID, timerType);
10104
}
10105
emitEvent('onEndLifeCycleTimer', debugID, timerType);
10106
},
@@ -9798,9 +10118,9 @@ var ReactDebugTool = {
10118
onEndProcessingChildContext: function () {
10119
emitEvent('onEndProcessingChildContext');
10120
},
9801
- onNativeOperation: function (debugID, type, payload) {
10121
+ onHostOperation: function (debugID, type, payload) {
10122
checkDebugID(debugID);
9803
- emitEvent('onNativeOperation', debugID, type, payload);
10123
+ emitEvent('onHostOperation', debugID, type, payload);
10124
},
10125
onSetState: function () {
10126
emitEvent('onSetState');
@@ -9817,6 +10137,10 @@ var ReactDebugTool = {
10137
checkDebugID(debugID);
10138
emitEvent('onSetOwner', debugID, ownerDebugID);
10139
},
10140
+ onSetParent: function (debugID, parentDebugID) {
10141
+ checkDebugID(debugID);
10142
+ emitEvent('onSetParent', debugID, parentDebugID);
10143
+ },
10144
onSetText: function (debugID, text) {
10145
checkDebugID(debugID);
10146
emitEvent('onSetText', debugID, text);
@@ -9825,10 +10149,18 @@ var ReactDebugTool = {
10149
checkDebugID(debugID);
10150
emitEvent('onMountRootComponent', debugID);
10151
},
10152
+ onBeforeMountComponent: function (debugID, element) {
10153
+ checkDebugID(debugID);
10154
+ emitEvent('onBeforeMountComponent', debugID, element);
10155
+ },
10156
onMountComponent: function (debugID) {
10157
checkDebugID(debugID);
10158
emitEvent('onMountComponent', debugID);
10159
},
10160
+ onBeforeUpdateComponent: function (debugID, element) {
10161
+ checkDebugID(debugID);
10162
+ emitEvent('onBeforeUpdateComponent', debugID, element);
10163
+ },
10164
onUpdateComponent: function (debugID) {
10165
checkDebugID(debugID);
10166
emitEvent('onUpdateComponent', debugID);
@@ -9836,16 +10168,19 @@ var ReactDebugTool = {
10168
onUnmountComponent: function (debugID) {
10169
checkDebugID(debugID);
10170
emitEvent('onUnmountComponent', debugID);
10171
+ },
10172
+ onTestEvent: function () {
10173
+ emitEvent('onTestEvent');
10174
}
10175
};
10176
10177
if ("development" !== 'production') {
9843
- var ReactInvalidSetStateWarningDevTool = _dereq_(72);
9844
- var ReactNativeOperationHistoryDevtool = _dereq_(78);
10178
+ var ReactInvalidSetStateWarningDevTool = _dereq_(74);
10179
+ var ReactHostOperationHistoryDevtool = _dereq_(69);
10180
var ReactComponentTreeDevtool = _dereq_(34);
10181
ReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);
10182
ReactDebugTool.addDevtool(ReactComponentTreeDevtool);
9848
- ReactDebugTool.addDevtool(ReactNativeOperationHistoryDevtool);
10183
+ ReactDebugTool.addDevtool(ReactHostOperationHistoryDevtool);
10184
var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
10185
if (/[?&]react_perf\b/.test(url)) {
10186
ReactDebugTool.beginProfiling();
@@ -9853,7 +10188,7 @@ if ("development" !== 'production') {
10188
}
10189
10190
module.exports = ReactDebugTool;
9856
-},{"143":143,"165":165,"167":167,"34":34,"72":72,"78":78}],59:[function(_dereq_,module,exports){
10191
+},{"145":145,"167":167,"169":169,"34":34,"69":69,"74":74}],59:[function(_dereq_,module,exports){
10192
/**
10193
* Copyright 2013-present, Facebook, Inc.
10194
* All rights reserved.
@@ -9867,12 +10202,12 @@ module.exports = ReactDebugTool;
10202
10203
'use strict';
10204
9870
-var _assign = _dereq_(168);
10205
+var _assign = _dereq_(170);
10206
10207
var ReactUpdates = _dereq_(93);
10208
var Transaction = _dereq_(111);
10209
9875
-var emptyFunction = _dereq_(149);
10210
+var emptyFunction = _dereq_(151);
10211
10212
var RESET_BATCHED_UPDATES = {
10213
initialize: emptyFunction,
@@ -9922,7 +10257,7 @@ var ReactDefaultBatchingStrategy = {
10257
};
10258
10259
module.exports = ReactDefaultBatchingStrategy;
9925
-},{"111":111,"149":149,"168":168,"93":93}],60:[function(_dereq_,module,exports){
10260
+},{"111":111,"151":151,"170":170,"93":93}],60:[function(_dereq_,module,exports){
10261
/**
10262
* Copyright 2013-present, Facebook, Inc.
10263
* All rights reserved.
@@ -9949,7 +10284,7 @@ var ReactDOMTreeTraversal = _dereq_(56);
10284
var ReactDOMTextComponent = _dereq_(54);
10285
var ReactDefaultBatchingStrategy = _dereq_(59);
10286
var ReactEventListener = _dereq_(66);
9952
-var ReactInjection = _dereq_(68);
10287
+var ReactInjection = _dereq_(70);
10288
var ReactReconcileTransaction = _dereq_(85);
10289
var SVGDOMPropertyConfig = _dereq_(95);
10290
var SelectEventPlugin = _dereq_(96);
@@ -9987,9 +10322,9 @@ function inject() {
10322
BeforeInputEventPlugin: BeforeInputEventPlugin
10323
});
10324
9990
- ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);
10325
+ ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);
10326
9992
- ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
10327
+ ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);
10328
10329
ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
10330
ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
@@ -10007,7 +10342,7 @@ function inject() {
10342
module.exports = {
10343
inject: inject
10344
};
10010
-},{"13":13,"15":15,"2":2,"22":22,"32":32,"39":39,"41":41,"44":44,"54":54,"56":56,"59":59,"6":6,"66":66,"68":68,"85":85,"95":95,"96":96,"97":97}],61:[function(_dereq_,module,exports){
10345
+},{"13":13,"15":15,"2":2,"22":22,"32":32,"39":39,"41":41,"44":44,"54":54,"56":56,"59":59,"6":6,"66":66,"70":70,"85":85,"95":95,"96":96,"97":97}],61:[function(_dereq_,module,exports){
10346
/**
10347
* Copyright 2014-present, Facebook, Inc.
10348
* All rights reserved.
@@ -10021,12 +10356,13 @@ module.exports = {
10356
10357
'use strict';
10358
10024
-var _assign = _dereq_(168);
10359
+var _assign = _dereq_(170);
10360
10361
var ReactCurrentOwner = _dereq_(36);
10362
10028
-var warning = _dereq_(167);
10363
+var warning = _dereq_(169);
10364
var canDefineProperty = _dereq_(115);
10365
+var hasOwnProperty = Object.prototype.hasOwnProperty;
10366
10367
// The Symbol used to tag the ReactElement type. If there is no native Symbol
10368
// nor polyfill, then a plain number is used for performance.
@@ -10041,6 +10377,30 @@ var RESERVED_PROPS = {
10377
10378
var specialPropKeyWarningShown, specialPropRefWarningShown;
10379
10380
+function hasValidRef(config) {
10381
+ if ("development" !== 'production') {
10382
+ if (hasOwnProperty.call(config, 'ref')) {
10383
+ var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
10384
+ if (getter && getter.isReactWarning) {
10385
+ return false;
10386
+ }
10387
+ }
10388
+ }
10389
+ return config.ref !== undefined;
10390
+}
10391
+
10392
+function hasValidKey(config) {
10393
+ if ("development" !== 'production') {
10394
+ if (hasOwnProperty.call(config, 'key')) {
10395
+ var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
10396
+ if (getter && getter.isReactWarning) {
10397
+ return false;
10398
+ }
10399
+ }
10400
+ }
10401
+ return config.key !== undefined;
10402
+}
10403
+
10404
/**
10405
* Factory method to create a new React element. This no longer adheres to
10406
* the class pattern, so do not use new to call it. Also, no instanceof check
@@ -10145,17 +10505,20 @@ ReactElement.createElement = function (type, config, children) {
10505
config.__proto__ == null || config.__proto__ === Object.prototype,
10506
/* eslint-enable no-proto */
10507
'React.createElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
10148
- ref = !config.hasOwnProperty('ref') || Object.getOwnPropertyDescriptor(config, 'ref').get ? null : config.ref;
10149
- key = !config.hasOwnProperty('key') || Object.getOwnPropertyDescriptor(config, 'key').get ? null : '' + config.key;
10150
- } else {
10151
- ref = config.ref === undefined ? null : config.ref;
10152
- key = config.key === undefined ? null : '' + config.key;
10508
}
10509
+
10510
+ if (hasValidRef(config)) {
10511
+ ref = config.ref;
10512
+ }
10513
+ if (hasValidKey(config)) {
10514
+ key = '' + config.key;
10515
+ }
10516
+
10517
self = config.__self === undefined ? null : config.__self;
10518
source = config.__source === undefined ? null : config.__source;
10519
// Remaining properties are added to a new props object
10520
for (propName in config) {
10158
- if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10521
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10522
props[propName] = config[propName];
10523
}
10524
}
@@ -10184,30 +10547,37 @@ ReactElement.createElement = function (type, config, children) {
10547
}
10548
}
10549
if ("development" !== 'production') {
10187
- // Create dummy `key` and `ref` property to `props` to warn users
10188
- // against its use
10550
+ var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
10551
+
10552
+ // Create dummy `key` and `ref` property to `props` to warn users against its use
10553
+ var warnAboutAccessingKey = function () {
10554
+ if (!specialPropKeyWarningShown) {
10555
+ specialPropKeyWarningShown = true;
10556
+ "development" !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
10557
+ }
10558
+ return undefined;
10559
+ };
10560
+ warnAboutAccessingKey.isReactWarning = true;
10561
+
10562
+ var warnAboutAccessingRef = function () {
10563
+ if (!specialPropRefWarningShown) {
10564
+ specialPropRefWarningShown = true;
10565
+ "development" !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
10566
+ }
10567
+ return undefined;
10568
+ };
10569
+ warnAboutAccessingRef.isReactWarning = true;
10570
+
10571
if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {
10572
if (!props.hasOwnProperty('key')) {
10573
Object.defineProperty(props, 'key', {
10192
- get: function () {
10193
- if (!specialPropKeyWarningShown) {
10194
- specialPropKeyWarningShown = true;
10195
- "development" !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', typeof type === 'function' && 'displayName' in type ? type.displayName : 'Element') : void 0;
10196
- }
10197
- return undefined;
10198
- },
10574
+ get: warnAboutAccessingKey,
10575
configurable: true
10576
});
10577
}
10578
if (!props.hasOwnProperty('ref')) {
10579
Object.defineProperty(props, 'ref', {
10204
- get: function () {
10205
- if (!specialPropRefWarningShown) {
10206
- specialPropRefWarningShown = true;
10207
- "development" !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', typeof type === 'function' && 'displayName' in type ? type.displayName : 'Element') : void 0;
10208
- }
10209
- return undefined;
10210
- },
10580
+ get: warnAboutAccessingRef,
10581
configurable: true
10582
});
10583
}
@@ -10268,21 +10638,23 @@ ReactElement.cloneElement = function (element, config, children) {
10638
/* eslint-enable no-proto */
10639
'React.cloneElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
10640
}
10271
- if (config.ref !== undefined) {
10641
+
10642
+ if (hasValidRef(config)) {
10643
// Silently steal the ref from the parent.
10644
ref = config.ref;
10645
owner = ReactCurrentOwner.current;
10646
}
10276
- if (config.key !== undefined) {
10647
+ if (hasValidKey(config)) {
10648
key = '' + config.key;
10649
}
10650
+
10651
// Remaining properties override existing props
10652
var defaultProps;
10653
if (element.type && element.type.defaultProps) {
10654
defaultProps = element.type.defaultProps;
10655
}
10656
for (propName in config) {
10285
- if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10657
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10658
if (config[propName] === undefined && defaultProps !== undefined) {
10659
// Resolve default props
10660
props[propName] = defaultProps[propName];
@@ -10320,8 +10692,10 @@ ReactElement.isValidElement = function (object) {
10692
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
10693
};
10694
10695
+ReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;
10696
+
10697
module.exports = ReactElement;
10324
-},{"115":115,"167":167,"168":168,"36":36}],62:[function(_dereq_,module,exports){
10698
+},{"115":115,"169":169,"170":170,"36":36}],62:[function(_dereq_,module,exports){
10699
/**
10700
* Copyright 2014-present, Facebook, Inc.
10701
* All rights reserved.
@@ -10342,15 +10716,16 @@ module.exports = ReactElement;
10716
10717
'use strict';
10718
10719
+var ReactCurrentOwner = _dereq_(36);
10720
+var ReactComponentTreeDevtool = _dereq_(34);
10721
var ReactElement = _dereq_(61);
10722
var ReactPropTypeLocations = _dereq_(83);
10347
-var ReactPropTypeLocationNames = _dereq_(82);
10348
-var ReactCurrentOwner = _dereq_(36);
10723
+
10724
+var checkReactTypeSpec = _dereq_(116);
10725
10726
var canDefineProperty = _dereq_(115);
10351
-var getIteratorFn = _dereq_(126);
10352
-var invariant = _dereq_(157);
10353
-var warning = _dereq_(167);
10727
+var getIteratorFn = _dereq_(128);
10728
+var warning = _dereq_(169);
10729
10730
function getDeclarationErrorAddendum() {
10731
if (ReactCurrentOwner.current) {
@@ -10369,13 +10744,24 @@ function getDeclarationErrorAddendum() {
10744
*/
10745
var ownerHasKeyUseWarning = {};
10746
10372
-var loggedTypeFailures = {};
10747
+function getCurrentComponentErrorInfo(parentType) {
10748
+ var info = getDeclarationErrorAddendum();
10749
+
10750
+ if (!info) {
10751
+ var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
10752
+ if (parentName) {
10753
+ info = ' Check the top-level render call using <' + parentName + '>.';
10754
+ }
10755
+ }
10756
+ return info;
10757
+}
10758
10759
/**
10760
* Warn if the element doesn't have an explicit key assigned to it.
10761
* This element is in an array. The array could grow and shrink or be
10762
* reordered. All children that haven't already been validated are required to
10378
- * have a "key" property assigned to it.
10763
+ * have a "key" property assigned to it. Error statuses are cached so a warning
10764
+ * will only be shown once.
10765
*
10766
* @internal
10767
* @param {ReactElement} element Element that requires a key.
@@ -10387,54 +10773,24 @@ function validateExplicitKey(element, parentType) {
10773
}
10774
element._store.validated = true;
10775
10390
- var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);
10391
- if (addenda === null) {
10392
- // we already showed the warning
10393
- return;
10394
- }
10395
- "development" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : void 0;
10396
-}
10397
-
10398
-/**
10399
- * Shared warning and monitoring code for the key warnings.
10400
- *
10401
- * @internal
10402
- * @param {string} messageType A key used for de-duping warnings.
10403
- * @param {ReactElement} element Component that requires a key.
10404
- * @param {*} parentType element's parent's type.
10405
- * @returns {?object} A set of addenda to use in the warning message, or null
10406
- * if the warning has already been shown before (and shouldn't be shown again).
10407
- */
10408
-function getAddendaForKeyUse(messageType, element, parentType) {
10409
- var addendum = getDeclarationErrorAddendum();
10410
- if (!addendum) {
10411
- var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
10412
- if (parentName) {
10413
- addendum = ' Check the top-level render call using <' + parentName + '>.';
10414
- }
10415
- }
10776
+ var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});
10777
10417
- var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});
10418
- if (memoizer[addendum]) {
10419
- return null;
10778
+ var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
10779
+ if (memoizer[currentComponentErrorInfo]) {
10780
+ return;
10781
}
10421
- memoizer[addendum] = true;
10422
-
10423
- var addenda = {
10424
- parentOrOwner: addendum,
10425
- url: ' See https://fb.me/react-warning-keys for more information.',
10426
- childOwner: null
10427
- };
10782
+ memoizer[currentComponentErrorInfo] = true;
10783
10784
// Usually the current owner is the offender, but if it accepts children as a
10785
// property, it may be the creator of the child that's responsible for
10786
// assigning it a key.
10787
+ var childOwner = '';
10788
if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
10789
// Give the component that originally created this child.
10434
- addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
10790
+ childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
10791
}
10792
10437
- return addenda;
10793
+ "development" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeDevtool.getCurrentStackAddendum(element)) : void 0;
10794
}
10795
10796
/**
@@ -10479,43 +10835,6 @@ function validateChildKeys(node, parentType) {
10835
}
10836
}
10837
10482
-/**
10483
- * Assert that the props are valid
10484
- *
10485
- * @param {string} componentName Name of the component for error messages.
10486
- * @param {object} propTypes Map of prop name to a ReactPropType
10487
- * @param {object} props
10488
- * @param {string} location e.g. "prop", "context", "child context"
10489
- * @private
10490
- */
10491
-function checkPropTypes(componentName, propTypes, props, location) {
10492
- for (var propName in propTypes) {
10493
- if (propTypes.hasOwnProperty(propName)) {
10494
- var error;
10495
- // Prop type validation may throw. In case they do, we don't want to
10496
- // fail the render phase where it didn't fail before. So we log it.
10497
- // After these have been cleaned up, we'll let them throw.
10498
- try {
10499
- // This is intentionally an invariant that gets caught. It's the same
10500
- // behavior as without this statement except with a better message.
10501
- !(typeof propTypes[propName] === 'function') ? "development" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : void 0;
10502
- error = propTypes[propName](props, propName, componentName, location);
10503
- } catch (ex) {
10504
- error = ex;
10505
- }
10506
- "development" !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : void 0;
10507
- if (error instanceof Error && !(error.message in loggedTypeFailures)) {
10508
- // Only monitor this failure once because there tends to be a lot of the
10509
- // same error.
10510
- loggedTypeFailures[error.message] = true;
10511
-
10512
- var addendum = getDeclarationErrorAddendum();
10513
- "development" !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : void 0;
10514
- }
10515
- }
10516
- }
10517
-}
10518
-
10838
/**
10839
* Given an element, validate that its props follow the propTypes definition,
10840
* provided by the type.
@@ -10529,7 +10848,7 @@ function validatePropTypes(element) {
10848
}
10849
var name = componentClass.displayName || componentClass.name;
10850
if (componentClass.propTypes) {
10532
- checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);
10851
+ checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);
10852
}
10853
if (typeof componentClass.getDefaultProps === 'function') {
10854
"development" !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;
@@ -10603,7 +10922,7 @@ var ReactElementValidator = {
10922
};
10923
10924
module.exports = ReactElementValidator;
10606
-},{"115":115,"126":126,"157":157,"167":167,"36":36,"61":61,"82":82,"83":83}],63:[function(_dereq_,module,exports){
10925
+},{"115":115,"116":116,"128":128,"169":169,"34":34,"36":36,"61":61,"83":83}],63:[function(_dereq_,module,exports){
10926
/**
10927
* Copyright 2014-present, Facebook, Inc.
10928
* All rights reserved.
@@ -10759,16 +11078,16 @@ module.exports = ReactEventEmitterMixin;
11078
11079
'use strict';
11080
10762
-var _assign = _dereq_(168);
11081
+var _assign = _dereq_(170);
11082
10764
-var EventListener = _dereq_(142);
10765
-var ExecutionEnvironment = _dereq_(143);
11083
+var EventListener = _dereq_(144);
11084
+var ExecutionEnvironment = _dereq_(145);
11085
var PooledClass = _dereq_(25);
11086
var ReactDOMComponentTree = _dereq_(41);
11087
var ReactUpdates = _dereq_(93);
11088
10770
-var getEventTarget = _dereq_(125);
10771
-var getUnboundedScrollPosition = _dereq_(154);
11089
+var getEventTarget = _dereq_(126);
11090
+var getUnboundedScrollPosition = _dereq_(156);
11091
11092
/**
11093
* Find the deepest React component completely containing the root of the
@@ -10779,8 +11098,8 @@ function findParent(inst) {
11098
// TODO: It may be a good idea to cache this to prevent unnecessary DOM
11099
// traversal, but caching is difficult to do correctly without using a
11100
// mutation observer to listen for all DOM changes.
10782
- while (inst._nativeParent) {
10783
- inst = inst._nativeParent;
11101
+ while (inst._hostParent) {
11102
+ inst = inst._hostParent;
11103
}
11104
var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
11105
var container = rootNode.parentNode;
@@ -10903,7 +11222,7 @@ var ReactEventListener = {
11222
};
11223
11224
module.exports = ReactEventListener;
10906
-},{"125":125,"142":142,"143":143,"154":154,"168":168,"25":25,"41":41,"93":93}],67:[function(_dereq_,module,exports){
11225
+},{"126":126,"144":144,"145":145,"156":156,"170":170,"25":25,"41":41,"93":93}],67:[function(_dereq_,module,exports){
11226
/**
11227
* Copyright 2013-present, Facebook, Inc.
11228
* All rights reserved.
@@ -10926,6 +11245,121 @@ var ReactFeatureFlags = {
11245
11246
module.exports = ReactFeatureFlags;
11247
},{}],68:[function(_dereq_,module,exports){
11248
+/**
11249
+ * Copyright 2014-present, Facebook, Inc.
11250
+ * All rights reserved.
11251
+ *
11252
+ * This source code is licensed under the BSD-style license found in the
11253
+ * LICENSE file in the root directory of this source tree. An additional grant
11254
+ * of patent rights can be found in the PATENTS file in the same directory.
11255
+ *
11256
+ * @providesModule ReactHostComponent
11257
+ */
11258
+
11259
+'use strict';
11260
+
11261
+var _prodInvariant = _dereq_(137),
11262
+ _assign = _dereq_(170);
11263
+
11264
+var invariant = _dereq_(159);
11265
+
11266
+var genericComponentClass = null;
11267
+// This registry keeps track of wrapper classes around host tags.
11268
+var tagToComponentClass = {};
11269
+var textComponentClass = null;
11270
+
11271
+var ReactHostComponentInjection = {
11272
+ // This accepts a class that receives the tag string. This is a catch all
11273
+ // that can render any kind of tag.
11274
+ injectGenericComponentClass: function (componentClass) {
11275
+ genericComponentClass = componentClass;
11276
+ },
11277
+ // This accepts a text component class that takes the text string to be
11278
+ // rendered as props.
11279
+ injectTextComponentClass: function (componentClass) {
11280
+ textComponentClass = componentClass;
11281
+ },
11282
+ // This accepts a keyed object with classes as values. Each key represents a
11283
+ // tag. That particular tag will use this class instead of the generic one.
11284
+ injectComponentClasses: function (componentClasses) {
11285
+ _assign(tagToComponentClass, componentClasses);
11286
+ }
11287
+};
11288
+
11289
+/**
11290
+ * Get a host internal component class for a specific tag.
11291
+ *
11292
+ * @param {ReactElement} element The element to create.
11293
+ * @return {function} The internal class constructor function.
11294
+ */
11295
+function createInternalComponent(element) {
11296
+ !genericComponentClass ? "development" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;
11297
+ return new genericComponentClass(element);
11298
+}
11299
+
11300
+/**
11301
+ * @param {ReactText} text
11302
+ * @return {ReactComponent}
11303
+ */
11304
+function createInstanceForText(text) {
11305
+ return new textComponentClass(text);
11306
+}
11307
+
11308
+/**
11309
+ * @param {ReactComponent} component
11310
+ * @return {boolean}
11311
+ */
11312
+function isTextComponent(component) {
11313
+ return component instanceof textComponentClass;
11314
+}
11315
+
11316
+var ReactHostComponent = {
11317
+ createInternalComponent: createInternalComponent,
11318
+ createInstanceForText: createInstanceForText,
11319
+ isTextComponent: isTextComponent,
11320
+ injection: ReactHostComponentInjection
11321
+};
11322
+
11323
+module.exports = ReactHostComponent;
11324
+},{"137":137,"159":159,"170":170}],69:[function(_dereq_,module,exports){
11325
+/**
11326
+ * Copyright 2016-present, Facebook, Inc.
11327
+ * All rights reserved.
11328
+ *
11329
+ * This source code is licensed under the BSD-style license found in the
11330
+ * LICENSE file in the root directory of this source tree. An additional grant
11331
+ * of patent rights can be found in the PATENTS file in the same directory.
11332
+ *
11333
+ * @providesModule ReactHostOperationHistoryDevtool
11334
+ */
11335
+
11336
+'use strict';
11337
+
11338
+var history = [];
11339
+
11340
+var ReactHostOperationHistoryDevtool = {
11341
+ onHostOperation: function (debugID, type, payload) {
11342
+ history.push({
11343
+ instanceID: debugID,
11344
+ type: type,
11345
+ payload: payload
11346
+ });
11347
+ },
11348
+ clearHistory: function () {
11349
+ if (ReactHostOperationHistoryDevtool._preventClearing) {
11350
+ // Should only be used for tests.
11351
+ return;
11352
+ }
11353
+
11354
+ history = [];
11355
+ },
11356
+ getHistory: function () {
11357
+ return history;
11358
+ }
11359
+};
11360
+
11361
+module.exports = ReactHostOperationHistoryDevtool;
11362
+},{}],70:[function(_dereq_,module,exports){
11363
/**
11364
* Copyright 2013-present, Facebook, Inc.
11365
* All rights reserved.
@@ -10946,7 +11380,7 @@ var ReactComponentEnvironment = _dereq_(33);
11380
var ReactClass = _dereq_(30);
11381
var ReactEmptyComponent = _dereq_(63);
11382
var ReactBrowserEventEmitter = _dereq_(27);
10949
-var ReactNativeComponent = _dereq_(77);
11383
+var ReactHostComponent = _dereq_(68);
11384
var ReactUpdates = _dereq_(93);
11385
11386
var ReactInjection = {
@@ -10957,12 +11391,12 @@ var ReactInjection = {
11391
EventPluginHub: EventPluginHub.injection,
11392
EventPluginUtils: EventPluginUtils.injection,
11393
EventEmitter: ReactBrowserEventEmitter.injection,
10960
- NativeComponent: ReactNativeComponent.injection,
11394
+ HostComponent: ReactHostComponent.injection,
11395
Updates: ReactUpdates.injection
11396
};
11397
11398
module.exports = ReactInjection;
10965
-},{"10":10,"17":17,"19":19,"27":27,"30":30,"33":33,"63":63,"77":77,"93":93}],69:[function(_dereq_,module,exports){
11399
+},{"10":10,"17":17,"19":19,"27":27,"30":30,"33":33,"63":63,"68":68,"93":93}],71:[function(_dereq_,module,exports){
11400
/**
11401
* Copyright 2013-present, Facebook, Inc.
11402
* All rights reserved.
@@ -10978,9 +11412,9 @@ module.exports = ReactInjection;
11412
11413
var ReactDOMSelection = _dereq_(52);
11414
10981
-var containsNode = _dereq_(146);
10982
-var focusNode = _dereq_(151);
10983
-var getActiveElement = _dereq_(152);
11415
+var containsNode = _dereq_(148);
11416
+var focusNode = _dereq_(153);
11417
+var getActiveElement = _dereq_(154);
11418
11419
function isInDocument(node) {
11420
return containsNode(document.documentElement, node);
@@ -11087,7 +11521,7 @@ var ReactInputSelection = {
11521
};
11522
11523
module.exports = ReactInputSelection;
11090
-},{"146":146,"151":151,"152":152,"52":52}],70:[function(_dereq_,module,exports){
11524
+},{"148":148,"153":153,"154":154,"52":52}],72:[function(_dereq_,module,exports){
11525
/**
11526
* Copyright 2013-present, Facebook, Inc.
11527
* All rights reserved.
@@ -11136,7 +11570,7 @@ var ReactInstanceMap = {
11570
};
11571
11572
module.exports = ReactInstanceMap;
11139
-},{}],71:[function(_dereq_,module,exports){
11573
+},{}],73:[function(_dereq_,module,exports){
11574
/**
11575
* Copyright 2016-present, Facebook, Inc.
11576
* All rights reserved.
@@ -11153,7 +11587,7 @@ module.exports = ReactInstanceMap;
11587
var ReactDebugTool = _dereq_(58);
11588
11589
module.exports = { debugTool: ReactDebugTool };
11156
-},{"58":58}],72:[function(_dereq_,module,exports){
11590
+},{"58":58}],74:[function(_dereq_,module,exports){
11591
/**
11592
* Copyright 2016-present, Facebook, Inc.
11593
* All rights reserved.
@@ -11167,7 +11601,7 @@ module.exports = { debugTool: ReactDebugTool };
11601
11602
'use strict';
11603
11170
-var warning = _dereq_(167);
11604
+var warning = _dereq_(169);
11605
11606
if ("development" !== 'production') {
11607
var processingChildContext = false;
@@ -11190,7 +11624,7 @@ var ReactInvalidSetStateWarningDevTool = {
11624
};
11625
11626
module.exports = ReactInvalidSetStateWarningDevTool;
11193
-},{"167":167}],73:[function(_dereq_,module,exports){
11627
+},{"169":169}],75:[function(_dereq_,module,exports){
11628
/**
11629
* Copyright 2013-present, Facebook, Inc.
11630
* All rights reserved.
@@ -11241,7 +11675,7 @@ var ReactMarkupChecksum = {
11675
};
11676
11677
module.exports = ReactMarkupChecksum;
11244
-},{"114":114}],74:[function(_dereq_,module,exports){
11678
+},{"114":114}],76:[function(_dereq_,module,exports){
11679
/**
11680
* Copyright 2013-present, Facebook, Inc.
11681
* All rights reserved.
@@ -11255,6 +11689,8 @@ module.exports = ReactMarkupChecksum;
11689
11690
'use strict';
11691
11692
+var _prodInvariant = _dereq_(137);
11693
+
11694
var DOMLazyTree = _dereq_(8);
11695
var DOMProperty = _dereq_(10);
11696
var ReactBrowserEventEmitter = _dereq_(27);
@@ -11264,18 +11700,18 @@ var ReactDOMContainerInfo = _dereq_(42);
11700
var ReactDOMFeatureFlags = _dereq_(46);
11701
var ReactElement = _dereq_(61);
11702
var ReactFeatureFlags = _dereq_(67);
11267
-var ReactInstrumentation = _dereq_(71);
11268
-var ReactMarkupChecksum = _dereq_(73);
11703
+var ReactInstrumentation = _dereq_(73);
11704
+var ReactMarkupChecksum = _dereq_(75);
11705
var ReactReconciler = _dereq_(86);
11706
var ReactUpdateQueue = _dereq_(92);
11707
var ReactUpdates = _dereq_(93);
11708
11273
-var emptyObject = _dereq_(150);
11274
-var instantiateReactComponent = _dereq_(131);
11275
-var invariant = _dereq_(157);
11276
-var setInnerHTML = _dereq_(137);
11277
-var shouldUpdateReactComponent = _dereq_(139);
11278
-var warning = _dereq_(167);
11709
+var emptyObject = _dereq_(152);
11710
+var instantiateReactComponent = _dereq_(132);
11711
+var invariant = _dereq_(159);
11712
+var setInnerHTML = _dereq_(139);
11713
+var shouldUpdateReactComponent = _dereq_(141);
11714
+var warning = _dereq_(169);
11715
11716
var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
11717
var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
@@ -11378,7 +11814,13 @@ function batchedMountComponentIntoNode(componentInstance, container, shouldReuse
11814
* @see {ReactMount.unmountComponentAtNode}
11815
*/
11816
function unmountComponentFromNode(instance, container, safely) {
11817
+ if ("development" !== 'production') {
11818
+ ReactInstrumentation.debugTool.onBeginFlush();
11819
+ }
11820
ReactReconciler.unmountComponent(instance, safely);
11821
+ if ("development" !== 'production') {
11822
+ ReactInstrumentation.debugTool.onEndFlush();
11823
+ }
11824
11825
if (container.nodeType === DOC_NODE_TYPE) {
11826
container = container.documentElement;
@@ -11404,19 +11846,19 @@ function hasNonRootReactChild(container) {
11846
var rootEl = getReactRootElementInContainer(container);
11847
if (rootEl) {
11848
var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);
11407
- return !!(inst && inst._nativeParent);
11849
+ return !!(inst && inst._hostParent);
11850
}
11851
}
11852
11411
-function getNativeRootInstanceInContainer(container) {
11853
+function getHostRootInstanceInContainer(container) {
11854
var rootEl = getReactRootElementInContainer(container);
11413
- var prevNativeInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
11414
- return prevNativeInstance && !prevNativeInstance._nativeParent ? prevNativeInstance : null;
11855
+ var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
11856
+ return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;
11857
}
11858
11859
function getTopLevelWrapperInContainer(container) {
11418
- var root = getNativeRootInstanceInContainer(container);
11419
- return root ? root._nativeContainerInfo._topLevelWrapper : null;
11860
+ var root = getHostRootInstanceInContainer(container);
11861
+ return root ? root._hostContainerInfo._topLevelWrapper : null;
11862
}
11863
11864
/**
@@ -11512,7 +11954,7 @@ var ReactMount = {
11954
// verify that that's the case.
11955
"development" !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
11956
11515
- !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : void 0;
11957
+ !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;
11958
11959
ReactBrowserEventEmitter.ensureScrollValueMonitoring();
11960
var componentInstance = instantiateReactComponent(nextElement);
@@ -11555,7 +11997,7 @@ var ReactMount = {
11997
* @return {ReactComponent} Component instance rendered in `container`.
11998
*/
11999
renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
11558
- !(parentComponent != null && parentComponent._reactInternalInstance != null) ? "development" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : void 0;
12000
+ !(parentComponent != null && parentComponent._reactInternalInstance != null) ? "development" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;
12001
return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
12002
},
12003
@@ -11563,7 +12005,7 @@ var ReactMount = {
12005
ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');
12006
!ReactElement.isValidElement(nextElement) ? "development" !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :
12007
// Check if it quacks like an element
11566
- nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : void 0;
12008
+ nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;
12009
12010
"development" !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;
12011
@@ -11645,7 +12087,7 @@ var ReactMount = {
12087
// render but we still don't expect to be in a render call here.)
12088
"development" !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
12089
11648
- !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : void 0;
12090
+ !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;
12091
12092
var prevComponent = getTopLevelWrapperInContainer(container);
12093
if (!prevComponent) {
@@ -11668,7 +12110,7 @@ var ReactMount = {
12110
},
12111
12112
_mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {
11671
- !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : void 0;
12113
+ !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;
12114
12115
if (shouldReuseMarkup) {
12116
var rootElement = getReactRootElementInContainer(container);
@@ -11705,7 +12147,7 @@ var ReactMount = {
12147
var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
12148
var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
12149
11708
- !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(false) : void 0;
12150
+ !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\n%s', difference) : _prodInvariant('42', difference) : void 0;
12151
12152
if ("development" !== 'production') {
12153
"development" !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : void 0;
@@ -11713,7 +12155,7 @@ var ReactMount = {
12155
}
12156
}
12157
11716
- !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : void 0;
12158
+ !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but you didn\'t use server rendering. We can\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;
12159
12160
if (transaction.useCreateElement) {
12161
while (container.lastChild) {
@@ -11726,16 +12168,16 @@ var ReactMount = {
12168
}
12169
12170
if ("development" !== 'production') {
11729
- var nativeNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
11730
- if (nativeNode._debugID !== 0) {
11731
- ReactInstrumentation.debugTool.onNativeOperation(nativeNode._debugID, 'mount', markup.toString());
12171
+ var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
12172
+ if (hostNode._debugID !== 0) {
12173
+ ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());
12174
}
12175
}
12176
}
12177
};
12178
12179
module.exports = ReactMount;
11738
-},{"10":10,"131":131,"137":137,"139":139,"150":150,"157":157,"167":167,"27":27,"36":36,"41":41,"42":42,"46":46,"61":61,"67":67,"71":71,"73":73,"8":8,"86":86,"92":92,"93":93}],75:[function(_dereq_,module,exports){
12180
+},{"10":10,"132":132,"137":137,"139":139,"141":141,"152":152,"159":159,"169":169,"27":27,"36":36,"41":41,"42":42,"46":46,"61":61,"67":67,"73":73,"75":75,"8":8,"86":86,"92":92,"93":93}],77:[function(_dereq_,module,exports){
12181
/**
12182
* Copyright 2013-present, Facebook, Inc.
12183
* All rights reserved.
@@ -11749,17 +12191,20 @@ module.exports = ReactMount;
12191
12192
'use strict';
12193
12194
+var _prodInvariant = _dereq_(137);
12195
+
12196
var ReactComponentEnvironment = _dereq_(33);
11753
-var ReactInstrumentation = _dereq_(71);
11754
-var ReactMultiChildUpdateTypes = _dereq_(76);
12197
+var ReactInstanceMap = _dereq_(72);
12198
+var ReactInstrumentation = _dereq_(73);
12199
+var ReactMultiChildUpdateTypes = _dereq_(78);
12200
12201
var ReactCurrentOwner = _dereq_(36);
12202
var ReactReconciler = _dereq_(86);
12203
var ReactChildReconciler = _dereq_(28);
12204
11760
-var emptyFunction = _dereq_(149);
11761
-var flattenChildren = _dereq_(120);
11762
-var invariant = _dereq_(157);
12205
+var emptyFunction = _dereq_(151);
12206
+var flattenChildren = _dereq_(121);
12207
+var invariant = _dereq_(159);
12208
12209
/**
12210
* Make an update for markup to be rendered and inserted at a supplied index.
@@ -11793,7 +12238,7 @@ function makeMove(child, afterNode, toIndex) {
12238
type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
12239
content: null,
12240
fromIndex: child._mountIndex,
11796
- fromNode: ReactReconciler.getNativeNode(child),
12241
+ fromNode: ReactReconciler.getHostNode(child),
12242
toIndex: toIndex,
12243
afterNode: afterNode
12244
};
@@ -11874,10 +12319,26 @@ function processQueue(inst, updateQueue) {
12319
ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
12320
}
12321
12322
+var setParentForInstrumentation = emptyFunction;
12323
var setChildrenForInstrumentation = emptyFunction;
12324
if ("development" !== 'production') {
12325
+ var getDebugID = function (inst) {
12326
+ if (!inst._debugID) {
12327
+ // Check for ART-like instances. TODO: This is silly/gross.
12328
+ var internal;
12329
+ if (internal = ReactInstanceMap.get(inst)) {
12330
+ inst = internal;
12331
+ }
12332
+ }
12333
+ return inst._debugID;
12334
+ };
12335
+ setParentForInstrumentation = function (child) {
12336
+ if (child._debugID !== 0) {
12337
+ ReactInstrumentation.debugTool.onSetParent(child._debugID, getDebugID(this));
12338
+ }
12339
+ };
12340
setChildrenForInstrumentation = function (children) {
11880
- ReactInstrumentation.debugTool.onSetChildren(this._debugID, children ? Object.keys(children).map(function (key) {
12341
+ ReactInstrumentation.debugTool.onSetChildren(getDebugID(this), children ? Object.keys(children).map(function (key) {
12342
return children[key]._debugID;
12343
}) : []);
12344
};
@@ -11905,7 +12366,7 @@ var ReactMultiChild = {
12366
if (this._currentElement) {
12367
try {
12368
ReactCurrentOwner.current = this._currentElement._owner;
11908
- return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
12369
+ return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, this._debugID);
12370
} finally {
12371
ReactCurrentOwner.current = null;
12372
}
@@ -11920,7 +12381,7 @@ var ReactMultiChild = {
12381
if (this._currentElement) {
12382
try {
12383
ReactCurrentOwner.current = this._currentElement._owner;
11923
- nextChildren = flattenChildren(nextNestedChildrenElements);
12384
+ nextChildren = flattenChildren(nextNestedChildrenElements, this._debugID);
12385
} finally {
12386
ReactCurrentOwner.current = null;
12387
}
@@ -11950,7 +12411,10 @@ var ReactMultiChild = {
12411
for (var name in children) {
12412
if (children.hasOwnProperty(name)) {
12413
var child = children[name];
11953
- var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._nativeContainerInfo, context);
12414
+ if ("development" !== 'production') {
12415
+ setParentForInstrumentation.call(this, child);
12416
+ }
12417
+ var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context);
12418
child._mountIndex = index++;
12419
mountImages.push(mountImage);
12420
}
@@ -11975,7 +12439,7 @@ var ReactMultiChild = {
12439
ReactChildReconciler.unmountChildren(prevChildren, false);
12440
for (var name in prevChildren) {
12441
if (prevChildren.hasOwnProperty(name)) {
11978
- !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : invariant(false) : void 0;
12442
+ !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
12443
}
12444
}
12445
// Set new text content.
@@ -11995,7 +12459,7 @@ var ReactMultiChild = {
12459
ReactChildReconciler.unmountChildren(prevChildren, false);
12460
for (var name in prevChildren) {
12461
if (prevChildren.hasOwnProperty(name)) {
11998
- !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : invariant(false) : void 0;
12462
+ !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
12463
}
12464
}
12465
var updates = [makeSetMarkup(nextMarkup)];
@@ -12054,7 +12518,7 @@ var ReactMultiChild = {
12518
updates = enqueue(updates, this._mountChildAtIndex(nextChild, lastPlacedNode, nextIndex, transaction, context));
12519
}
12520
nextIndex++;
12057
- lastPlacedNode = ReactReconciler.getNativeNode(nextChild);
12521
+ lastPlacedNode = ReactReconciler.getHostNode(nextChild);
12522
}
12523
// Remove children that are no longer present.
12524
for (name in removedNodes) {
@@ -12135,7 +12599,7 @@ var ReactMultiChild = {
12599
* @private
12600
*/
12601
_mountChildAtIndex: function (child, afterNode, index, transaction, context) {
12138
- var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._nativeContainerInfo, context);
12602
+ var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context);
12603
child._mountIndex = index;
12604
return this.createChild(child, afterNode, mountImage);
12605
},
@@ -12159,7 +12623,7 @@ var ReactMultiChild = {
12623
};
12624
12625
module.exports = ReactMultiChild;
12162
-},{"120":120,"149":149,"157":157,"28":28,"33":33,"36":36,"71":71,"76":76,"86":86}],76:[function(_dereq_,module,exports){
12626
+},{"121":121,"137":137,"151":151,"159":159,"28":28,"33":33,"36":36,"72":72,"73":73,"78":78,"86":86}],78:[function(_dereq_,module,exports){
12627
/**
12628
* Copyright 2013-present, Facebook, Inc.
12629
* All rights reserved.
@@ -12167,166 +12631,32 @@ module.exports = ReactMultiChild;
12631
* This source code is licensed under the BSD-style license found in the
12632
* LICENSE file in the root directory of this source tree. An additional grant
12633
* of patent rights can be found in the PATENTS file in the same directory.
12170
- *
12171
- * @providesModule ReactMultiChildUpdateTypes
12172
- */
12173
-
12174
-'use strict';
12175
-
12176
-var keyMirror = _dereq_(160);
12177
-
12178
-/**
12179
- * When a component's children are updated, a series of update configuration
12180
- * objects are created in order to batch and serialize the required changes.
12181
- *
12182
- * Enumerates all the possible types of update configurations.
12183
- *
12184
- * @internal
12185
- */
12186
-var ReactMultiChildUpdateTypes = keyMirror({
12187
- INSERT_MARKUP: null,
12188
- MOVE_EXISTING: null,
12189
- REMOVE_NODE: null,
12190
- SET_MARKUP: null,
12191
- TEXT_CONTENT: null
12192
-});
12193
-
12194
-module.exports = ReactMultiChildUpdateTypes;
12195
-},{"160":160}],77:[function(_dereq_,module,exports){
12196
-/**
12197
- * Copyright 2014-present, Facebook, Inc.
12198
- * All rights reserved.
12199
- *
12200
- * This source code is licensed under the BSD-style license found in the
12201
- * LICENSE file in the root directory of this source tree. An additional grant
12202
- * of patent rights can be found in the PATENTS file in the same directory.
12203
- *
12204
- * @providesModule ReactNativeComponent
12205
- */
12206
-
12207
-'use strict';
12208
-
12209
-var _assign = _dereq_(168);
12210
-
12211
-var invariant = _dereq_(157);
12212
-
12213
-var autoGenerateWrapperClass = null;
12214
-var genericComponentClass = null;
12215
-// This registry keeps track of wrapper classes around native tags.
12216
-var tagToComponentClass = {};
12217
-var textComponentClass = null;
12218
-
12219
-var ReactNativeComponentInjection = {
12220
- // This accepts a class that receives the tag string. This is a catch all
12221
- // that can render any kind of tag.
12222
- injectGenericComponentClass: function (componentClass) {
12223
- genericComponentClass = componentClass;
12224
- },
12225
- // This accepts a text component class that takes the text string to be
12226
- // rendered as props.
12227
- injectTextComponentClass: function (componentClass) {
12228
- textComponentClass = componentClass;
12229
- },
12230
- // This accepts a keyed object with classes as values. Each key represents a
12231
- // tag. That particular tag will use this class instead of the generic one.
12232
- injectComponentClasses: function (componentClasses) {
12233
- _assign(tagToComponentClass, componentClasses);
12234
- }
12235
-};
12236
-
12237
-/**
12238
- * Get a composite component wrapper class for a specific tag.
12239
- *
12240
- * @param {ReactElement} element The tag for which to get the class.
12241
- * @return {function} The React class constructor function.
12242
- */
12243
-function getComponentClassForElement(element) {
12244
- if (typeof element.type === 'function') {
12245
- return element.type;
12246
- }
12247
- var tag = element.type;
12248
- var componentClass = tagToComponentClass[tag];
12249
- if (componentClass == null) {
12250
- tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);
12251
- }
12252
- return componentClass;
12253
-}
12254
-
12255
-/**
12256
- * Get a native internal component class for a specific tag.
12257
- *
12258
- * @param {ReactElement} element The element to create.
12259
- * @return {function} The internal class constructor function.
12260
- */
12261
-function createInternalComponent(element) {
12262
- !genericComponentClass ? "development" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : void 0;
12263
- return new genericComponentClass(element);
12264
-}
12265
-
12266
-/**
12267
- * @param {ReactText} text
12268
- * @return {ReactComponent}
12269
- */
12270
-function createInstanceForText(text) {
12271
- return new textComponentClass(text);
12272
-}
12273
-
12274
-/**
12275
- * @param {ReactComponent} component
12276
- * @return {boolean}
12277
- */
12278
-function isTextComponent(component) {
12279
- return component instanceof textComponentClass;
12280
-}
12281
-
12282
-var ReactNativeComponent = {
12283
- getComponentClassForElement: getComponentClassForElement,
12284
- createInternalComponent: createInternalComponent,
12285
- createInstanceForText: createInstanceForText,
12286
- isTextComponent: isTextComponent,
12287
- injection: ReactNativeComponentInjection
12288
-};
12289
-
12290
-module.exports = ReactNativeComponent;
12291
-},{"157":157,"168":168}],78:[function(_dereq_,module,exports){
12292
-/**
12293
- * Copyright 2016-present, Facebook, Inc.
12294
- * All rights reserved.
12295
- *
12296
- * This source code is licensed under the BSD-style license found in the
12297
- * LICENSE file in the root directory of this source tree. An additional grant
12298
- * of patent rights can be found in the PATENTS file in the same directory.
12299
- *
12300
- * @providesModule ReactNativeOperationHistoryDevtool
12301
- */
12302
-
12303
-'use strict';
12304
-
12305
-var history = [];
12306
-
12307
-var ReactNativeOperationHistoryDevtool = {
12308
- onNativeOperation: function (debugID, type, payload) {
12309
- history.push({
12310
- instanceID: debugID,
12311
- type: type,
12312
- payload: payload
12313
- });
12314
- },
12315
- clearHistory: function () {
12316
- if (ReactNativeOperationHistoryDevtool._preventClearing) {
12317
- // Should only be used for tests.
12318
- return;
12319
- }
12634
+ *
12635
+ * @providesModule ReactMultiChildUpdateTypes
12636
+ */
12637
12321
- history = [];
12322
- },
12323
- getHistory: function () {
12324
- return history;
12325
- }
12326
-};
12638
+'use strict';
12639
+
12640
+var keyMirror = _dereq_(162);
12641
+
12642
+/**
12643
+ * When a component's children are updated, a series of update configuration
12644
+ * objects are created in order to batch and serialize the required changes.
12645
+ *
12646
+ * Enumerates all the possible types of update configurations.
12647
+ *
12648
+ * @internal
12649
+ */
12650
+var ReactMultiChildUpdateTypes = keyMirror({
12651
+ INSERT_MARKUP: null,
12652
+ MOVE_EXISTING: null,
12653
+ REMOVE_NODE: null,
12654
+ SET_MARKUP: null,
12655
+ TEXT_CONTENT: null
12656
+});
12657
12328
-module.exports = ReactNativeOperationHistoryDevtool;
12329
-},{}],79:[function(_dereq_,module,exports){
12658
+module.exports = ReactMultiChildUpdateTypes;
12659
+},{"162":162}],79:[function(_dereq_,module,exports){
12660
/**
12661
* Copyright 2013-present, Facebook, Inc.
12662
* All rights reserved.
@@ -12340,12 +12670,14 @@ module.exports = ReactNativeOperationHistoryDevtool;
12670
12671
'use strict';
12672
12673
+var _prodInvariant = _dereq_(137);
12674
+
12675
var ReactElement = _dereq_(61);
12676
12345
-var invariant = _dereq_(157);
12677
+var invariant = _dereq_(159);
12678
12679
var ReactNodeTypes = {
12348
- NATIVE: 0,
12680
+ HOST: 0,
12681
COMPOSITE: 1,
12682
EMPTY: 2,
12683
@@ -12356,15 +12688,15 @@ var ReactNodeTypes = {
12688
if (typeof node.type === 'function') {
12689
return ReactNodeTypes.COMPOSITE;
12690
} else {
12359
- return ReactNodeTypes.NATIVE;
12691
+ return ReactNodeTypes.HOST;
12692
}
12693
}
12362
- !false ? "development" !== 'production' ? invariant(false, 'Unexpected node: %s', node) : invariant(false) : void 0;
12694
+ !false ? "development" !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;
12695
}
12696
};
12697
12698
module.exports = ReactNodeTypes;
12367
-},{"157":157,"61":61}],80:[function(_dereq_,module,exports){
12699
+},{"137":137,"159":159,"61":61}],80:[function(_dereq_,module,exports){
12700
/**
12701
* Copyright 2015-present, Facebook, Inc.
12702
* All rights reserved.
This file is too large to show in full.