require=(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);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.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(require,module,exports){1// shim for using process in browser23var process = module.exports = {};45process.nextTick = (function () {6var canSetImmediate = typeof window !== 'undefined'7&& window.setImmediate;8var canPost = typeof window !== 'undefined'9&& window.postMessage && window.addEventListener10;1112if (canSetImmediate) {13return function (f) { return window.setImmediate(f) };14}1516if (canPost) {17var queue = [];18window.addEventListener('message', function (ev) {19var source = ev.source;20if ((source === window || source === null) && ev.data === 'process-tick') {21ev.stopPropagation();22if (queue.length > 0) {23var fn = queue.shift();24fn();25}26}27}, true);2829return function nextTick(fn) {30queue.push(fn);31window.postMessage('process-tick', '*');32};33}3435return function nextTick(fn) {36setTimeout(fn, 0);37};38})();3940process.title = 'browser';41process.browser = true;42process.env = {};43process.argv = [];4445function noop() {}4647process.on = noop;48process.addListener = noop;49process.once = noop;50process.off = noop;51process.removeListener = noop;52process.removeAllListeners = noop;53process.emit = noop;5455process.binding = function (name) {56throw new Error('process.binding is not supported');57}5859// TODO(shtylman)60process.cwd = function () { return '/' };61process.chdir = function (dir) {62throw new Error('process.chdir is not supported');63};6465},{}],2:[function(require,module,exports){66/**67* Copyright 2013-2015, Facebook, Inc.68* All rights reserved.69*70* This source code is licensed under the BSD-style license found in the71* LICENSE file in the root directory of this source tree. An additional grant72* of patent rights can be found in the PATENTS file in the same directory.73*74* @providesModule AutoFocusMixin75* @typechecks static-only76*/7778'use strict';7980var focusNode = require("./focusNode");8182var AutoFocusMixin = {83componentDidMount: function() {84if (this.props.autoFocus) {85focusNode(this.getDOMNode());86}87}88};8990module.exports = AutoFocusMixin;919293},{"./focusNode":120}],3:[function(require,module,exports){94/**95* Copyright 2013-2015 Facebook, Inc.96* All rights reserved.97*98* This source code is licensed under the BSD-style license found in the99* LICENSE file in the root directory of this source tree. An additional grant100* of patent rights can be found in the PATENTS file in the same directory.101*102* @providesModule BeforeInputEventPlugin103* @typechecks static-only104*/105106'use strict';107108var EventConstants = require("./EventConstants");109var EventPropagators = require("./EventPropagators");110var ExecutionEnvironment = require("./ExecutionEnvironment");111var FallbackCompositionState = require("./FallbackCompositionState");112var SyntheticCompositionEvent = require("./SyntheticCompositionEvent");113var SyntheticInputEvent = require("./SyntheticInputEvent");114115var keyOf = require("./keyOf");116117var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space118var START_KEYCODE = 229;119120var canUseCompositionEvent = (121ExecutionEnvironment.canUseDOM &&122'CompositionEvent' in window123);124125var documentMode = null;126if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {127documentMode = document.documentMode;128}129130// Webkit offers a very useful `textInput` event that can be used to131// directly represent `beforeInput`. The IE `textinput` event is not as132// useful, so we don't use it.133var canUseTextInputEvent = (134ExecutionEnvironment.canUseDOM &&135'TextEvent' in window &&136!documentMode &&137!isPresto()138);139140// In IE9+, we have access to composition events, but the data supplied141// by the native compositionend event may be incorrect. Japanese ideographic142// spaces, for instance (\u3000) are not recorded correctly.143var useFallbackCompositionData = (144ExecutionEnvironment.canUseDOM &&145(146(!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11)147)148);149150/**151* Opera <= 12 includes TextEvent in window, but does not fire152* text input events. Rely on keypress instead.153*/154function isPresto() {155var opera = window.opera;156return (157typeof opera === 'object' &&158typeof opera.version === 'function' &&159parseInt(opera.version(), 10) <= 12160);161}162163var SPACEBAR_CODE = 32;164var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);165166var topLevelTypes = EventConstants.topLevelTypes;167168// Events and their corresponding property names.169var eventTypes = {170beforeInput: {171phasedRegistrationNames: {172bubbled: keyOf({onBeforeInput: null}),173captured: keyOf({onBeforeInputCapture: null})174},175dependencies: [176topLevelTypes.topCompositionEnd,177topLevelTypes.topKeyPress,178topLevelTypes.topTextInput,179topLevelTypes.topPaste180]181},182compositionEnd: {183phasedRegistrationNames: {184bubbled: keyOf({onCompositionEnd: null}),185captured: keyOf({onCompositionEndCapture: null})186},187dependencies: [188topLevelTypes.topBlur,189topLevelTypes.topCompositionEnd,190topLevelTypes.topKeyDown,191topLevelTypes.topKeyPress,192topLevelTypes.topKeyUp,193topLevelTypes.topMouseDown194]195},196compositionStart: {197phasedRegistrationNames: {198bubbled: keyOf({onCompositionStart: null}),199captured: keyOf({onCompositionStartCapture: null})200},201dependencies: [202topLevelTypes.topBlur,203topLevelTypes.topCompositionStart,204topLevelTypes.topKeyDown,205topLevelTypes.topKeyPress,206topLevelTypes.topKeyUp,207topLevelTypes.topMouseDown208]209},210compositionUpdate: {211phasedRegistrationNames: {212bubbled: keyOf({onCompositionUpdate: null}),213captured: keyOf({onCompositionUpdateCapture: null})214},215dependencies: [216topLevelTypes.topBlur,217topLevelTypes.topCompositionUpdate,218topLevelTypes.topKeyDown,219topLevelTypes.topKeyPress,220topLevelTypes.topKeyUp,221topLevelTypes.topMouseDown222]223}224};225226// Track whether we've ever handled a keypress on the space key.227var hasSpaceKeypress = false;228229/**230* Return whether a native keypress event is assumed to be a command.231* This is required because Firefox fires `keypress` events for key commands232* (cut, copy, select-all, etc.) even though no character is inserted.233*/234function isKeypressCommand(nativeEvent) {235return (236(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&237// ctrlKey && altKey is equivalent to AltGr, and is not a command.238!(nativeEvent.ctrlKey && nativeEvent.altKey)239);240}241242243/**244* Translate native top level events into event types.245*246* @param {string} topLevelType247* @return {object}248*/249function getCompositionEventType(topLevelType) {250switch (topLevelType) {251case topLevelTypes.topCompositionStart:252return eventTypes.compositionStart;253case topLevelTypes.topCompositionEnd:254return eventTypes.compositionEnd;255case topLevelTypes.topCompositionUpdate:256return eventTypes.compositionUpdate;257}258}259260/**261* Does our fallback best-guess model think this event signifies that262* composition has begun?263*264* @param {string} topLevelType265* @param {object} nativeEvent266* @return {boolean}267*/268function isFallbackCompositionStart(topLevelType, nativeEvent) {269return (270topLevelType === topLevelTypes.topKeyDown &&271nativeEvent.keyCode === START_KEYCODE272);273}274275/**276* Does our fallback mode think that this event is the end of composition?277*278* @param {string} topLevelType279* @param {object} nativeEvent280* @return {boolean}281*/282function isFallbackCompositionEnd(topLevelType, nativeEvent) {283switch (topLevelType) {284case topLevelTypes.topKeyUp:285// Command keys insert or clear IME input.286return (END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1);287case topLevelTypes.topKeyDown:288// Expect IME keyCode on each keydown. If we get any other289// code we must have exited earlier.290return (nativeEvent.keyCode !== START_KEYCODE);291case topLevelTypes.topKeyPress:292case topLevelTypes.topMouseDown:293case topLevelTypes.topBlur:294// Events are not possible without cancelling IME.295return true;296default:297return false;298}299}300301/**302* Google Input Tools provides composition data via a CustomEvent,303* with the `data` property populated in the `detail` object. If this304* is available on the event object, use it. If not, this is a plain305* composition event and we have nothing special to extract.306*307* @param {object} nativeEvent308* @return {?string}309*/310function getDataFromCustomEvent(nativeEvent) {311var detail = nativeEvent.detail;312if (typeof detail === 'object' && 'data' in detail) {313return detail.data;314}315return null;316}317318// Track the current IME composition fallback object, if any.319var currentComposition = null;320321/**322* @param {string} topLevelType Record from `EventConstants`.323* @param {DOMEventTarget} topLevelTarget The listening component root node.324* @param {string} topLevelTargetID ID of `topLevelTarget`.325* @param {object} nativeEvent Native browser event.326* @return {?object} A SyntheticCompositionEvent.327*/328function extractCompositionEvent(329topLevelType,330topLevelTarget,331topLevelTargetID,332nativeEvent333) {334var eventType;335var fallbackData;336337if (canUseCompositionEvent) {338eventType = getCompositionEventType(topLevelType);339} else if (!currentComposition) {340if (isFallbackCompositionStart(topLevelType, nativeEvent)) {341eventType = eventTypes.compositionStart;342}343} else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {344eventType = eventTypes.compositionEnd;345}346347if (!eventType) {348return null;349}350351if (useFallbackCompositionData) {352// The current composition is stored statically and must not be353// overwritten while composition continues.354if (!currentComposition && eventType === eventTypes.compositionStart) {355currentComposition = FallbackCompositionState.getPooled(topLevelTarget);356} else if (eventType === eventTypes.compositionEnd) {357if (currentComposition) {358fallbackData = currentComposition.getData();359}360}361}362363var event = SyntheticCompositionEvent.getPooled(364eventType,365topLevelTargetID,366nativeEvent367);368369if (fallbackData) {370// Inject data generated from fallback path into the synthetic event.371// This matches the property of native CompositionEventInterface.372event.data = fallbackData;373} else {374var customData = getDataFromCustomEvent(nativeEvent);375if (customData !== null) {376event.data = customData;377}378}379380EventPropagators.accumulateTwoPhaseDispatches(event);381return event;382}383384/**385* @param {string} topLevelType Record from `EventConstants`.386* @param {object} nativeEvent Native browser event.387* @return {?string} The string corresponding to this `beforeInput` event.388*/389function getNativeBeforeInputChars(topLevelType, nativeEvent) {390switch (topLevelType) {391case topLevelTypes.topCompositionEnd:392return getDataFromCustomEvent(nativeEvent);393case topLevelTypes.topKeyPress:394/**395* If native `textInput` events are available, our goal is to make396* use of them. However, there is a special case: the spacebar key.397* In Webkit, preventing default on a spacebar `textInput` event398* cancels character insertion, but it *also* causes the browser399* to fall back to its default spacebar behavior of scrolling the400* page.401*402* Tracking at:403* https://code.google.com/p/chromium/issues/detail?id=355103404*405* To avoid this issue, use the keypress event as if no `textInput`406* event is available.407*/408var which = nativeEvent.which;409if (which !== SPACEBAR_CODE) {410return null;411}412413hasSpaceKeypress = true;414return SPACEBAR_CHAR;415416case topLevelTypes.topTextInput:417// Record the characters to be added to the DOM.418var chars = nativeEvent.data;419420// If it's a spacebar character, assume that we have already handled421// it at the keypress level and bail immediately. Android Chrome422// doesn't give us keycodes, so we need to blacklist it.423if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {424return null;425}426427return chars;428429default:430// For other native event types, do nothing.431return null;432}433}434435/**436* For browsers that do not provide the `textInput` event, extract the437* appropriate string to use for SyntheticInputEvent.438*439* @param {string} topLevelType Record from `EventConstants`.440* @param {object} nativeEvent Native browser event.441* @return {?string} The fallback string for this `beforeInput` event.442*/443function getFallbackBeforeInputChars(topLevelType, nativeEvent) {444// If we are currently composing (IME) and using a fallback to do so,445// try to extract the composed characters from the fallback object.446if (currentComposition) {447if (448topLevelType === topLevelTypes.topCompositionEnd ||449isFallbackCompositionEnd(topLevelType, nativeEvent)450) {451var chars = currentComposition.getData();452FallbackCompositionState.release(currentComposition);453currentComposition = null;454return chars;455}456return null;457}458459switch (topLevelType) {460case topLevelTypes.topPaste:461// If a paste event occurs after a keypress, throw out the input462// chars. Paste events should not lead to BeforeInput events.463return null;464case topLevelTypes.topKeyPress:465/**466* As of v27, Firefox may fire keypress events even when no character467* will be inserted. A few possibilities:468*469* - `which` is `0`. Arrow keys, Esc key, etc.470*471* - `which` is the pressed key code, but no char is available.472* Ex: 'AltGr + d` in Polish. There is no modified character for473* this key combination and no character is inserted into the474* document, but FF fires the keypress for char code `100` anyway.475* No `input` event will occur.476*477* - `which` is the pressed key code, but a command combination is478* being used. Ex: `Cmd+C`. No character is inserted, and no479* `input` event will occur.480*/481if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {482return String.fromCharCode(nativeEvent.which);483}484return null;485case topLevelTypes.topCompositionEnd:486return useFallbackCompositionData ? null : nativeEvent.data;487default:488return null;489}490}491492/**493* Extract a SyntheticInputEvent for `beforeInput`, based on either native494* `textInput` or fallback behavior.495*496* @param {string} topLevelType Record from `EventConstants`.497* @param {DOMEventTarget} topLevelTarget The listening component root node.498* @param {string} topLevelTargetID ID of `topLevelTarget`.499* @param {object} nativeEvent Native browser event.500* @return {?object} A SyntheticInputEvent.501*/502function extractBeforeInputEvent(503topLevelType,504topLevelTarget,505topLevelTargetID,506nativeEvent507) {508var chars;509510if (canUseTextInputEvent) {511chars = getNativeBeforeInputChars(topLevelType, nativeEvent);512} else {513chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);514}515516// If no characters are being inserted, no BeforeInput event should517// be fired.518if (!chars) {519return null;520}521522var event = SyntheticInputEvent.getPooled(523eventTypes.beforeInput,524topLevelTargetID,525nativeEvent526);527528event.data = chars;529EventPropagators.accumulateTwoPhaseDispatches(event);530return event;531}532533/**534* Create an `onBeforeInput` event to match535* http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.536*537* This event plugin is based on the native `textInput` event538* available in Chrome, Safari, Opera, and IE. This event fires after539* `onKeyPress` and `onCompositionEnd`, but before `onInput`.540*541* `beforeInput` is spec'd but not implemented in any browsers, and542* the `input` event does not provide any useful information about what has543* actually been added, contrary to the spec. Thus, `textInput` is the best544* available event to identify the characters that have actually been inserted545* into the target node.546*547* This plugin is also responsible for emitting `composition` events, thus548* allowing us to share composition fallback code for both `beforeInput` and549* `composition` event types.550*/551var BeforeInputEventPlugin = {552553eventTypes: eventTypes,554555/**556* @param {string} topLevelType Record from `EventConstants`.557* @param {DOMEventTarget} topLevelTarget The listening component root node.558* @param {string} topLevelTargetID ID of `topLevelTarget`.559* @param {object} nativeEvent Native browser event.560* @return {*} An accumulation of synthetic events.561* @see {EventPluginHub.extractEvents}562*/563extractEvents: function(564topLevelType,565topLevelTarget,566topLevelTargetID,567nativeEvent568) {569return [570extractCompositionEvent(571topLevelType,572topLevelTarget,573topLevelTargetID,574nativeEvent575),576extractBeforeInputEvent(577topLevelType,578topLevelTarget,579topLevelTargetID,580nativeEvent581)582];583}584};585586module.exports = BeforeInputEventPlugin;587588589},{"./EventConstants":15,"./EventPropagators":20,"./ExecutionEnvironment":21,"./FallbackCompositionState":22,"./SyntheticCompositionEvent":94,"./SyntheticInputEvent":98,"./keyOf":142}],4:[function(require,module,exports){590/**591* Copyright 2013-2015, Facebook, Inc.592* All rights reserved.593*594* This source code is licensed under the BSD-style license found in the595* LICENSE file in the root directory of this source tree. An additional grant596* of patent rights can be found in the PATENTS file in the same directory.597*598* @providesModule CSSProperty599*/600601'use strict';602603/**604* CSS properties which accept numbers but are not in units of "px".605*/606var isUnitlessNumber = {607boxFlex: true,608boxFlexGroup: true,609columnCount: true,610flex: true,611flexGrow: true,612flexShrink: true,613fontWeight: true,614lineClamp: true,615lineHeight: true,616opacity: true,617order: true,618orphans: true,619widows: true,620zIndex: true,621zoom: true,622623// SVG-related properties624fillOpacity: true,625strokeOpacity: true626};627628/**629* @param {string} prefix vendor-specific prefix, eg: Webkit630* @param {string} key style name, eg: transitionDuration631* @return {string} style name prefixed with `prefix`, properly camelCased, eg:632* WebkitTransitionDuration633*/634function prefixKey(prefix, key) {635return prefix + key.charAt(0).toUpperCase() + key.substring(1);636}637638/**639* Support style names that may come passed in prefixed by adding permutations640* of vendor prefixes.641*/642var prefixes = ['Webkit', 'ms', 'Moz', 'O'];643644// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an645// infinite loop, because it iterates over the newly added props too.646Object.keys(isUnitlessNumber).forEach(function(prop) {647prefixes.forEach(function(prefix) {648isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];649});650});651652/**653* Most style properties can be unset by doing .style[prop] = '' but IE8654* doesn't like doing that with shorthand properties so for the properties that655* IE8 breaks on, which are listed here, we instead unset each of the656* individual properties. See http://bugs.jquery.com/ticket/12385.657* The 4-value 'clock' properties like margin, padding, border-width seem to658* behave without any problems. Curiously, list-style works too without any659* special prodding.660*/661var shorthandPropertyExpansions = {662background: {663backgroundImage: true,664backgroundPosition: true,665backgroundRepeat: true,666backgroundColor: true667},668border: {669borderWidth: true,670borderStyle: true,671borderColor: true672},673borderBottom: {674borderBottomWidth: true,675borderBottomStyle: true,676borderBottomColor: true677},678borderLeft: {679borderLeftWidth: true,680borderLeftStyle: true,681borderLeftColor: true682},683borderRight: {684borderRightWidth: true,685borderRightStyle: true,686borderRightColor: true687},688borderTop: {689borderTopWidth: true,690borderTopStyle: true,691borderTopColor: true692},693font: {694fontStyle: true,695fontVariant: true,696fontWeight: true,697fontSize: true,698lineHeight: true,699fontFamily: true700}701};702703var CSSProperty = {704isUnitlessNumber: isUnitlessNumber,705shorthandPropertyExpansions: shorthandPropertyExpansions706};707708module.exports = CSSProperty;709710711},{}],5:[function(require,module,exports){712(function (process){713/**714* Copyright 2013-2015, Facebook, Inc.715* All rights reserved.716*717* This source code is licensed under the BSD-style license found in the718* LICENSE file in the root directory of this source tree. An additional grant719* of patent rights can be found in the PATENTS file in the same directory.720*721* @providesModule CSSPropertyOperations722* @typechecks static-only723*/724725'use strict';726727var CSSProperty = require("./CSSProperty");728var ExecutionEnvironment = require("./ExecutionEnvironment");729730var camelizeStyleName = require("./camelizeStyleName");731var dangerousStyleValue = require("./dangerousStyleValue");732var hyphenateStyleName = require("./hyphenateStyleName");733var memoizeStringOnly = require("./memoizeStringOnly");734var warning = require("./warning");735736var processStyleName = memoizeStringOnly(function(styleName) {737return hyphenateStyleName(styleName);738});739740var styleFloatAccessor = 'cssFloat';741if (ExecutionEnvironment.canUseDOM) {742// IE8 only supports accessing cssFloat (standard) as styleFloat743if (document.documentElement.style.cssFloat === undefined) {744styleFloatAccessor = 'styleFloat';745}746}747748if ("production" !== process.env.NODE_ENV) {749// 'msTransform' is correct, but the other prefixes should be capitalized750var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;751752// style values shouldn't contain a semicolon753var badStyleValueWithSemicolonPattern = /;\s*$/;754755var warnedStyleNames = {};756var warnedStyleValues = {};757758var warnHyphenatedStyleName = function(name) {759if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {760return;761}762763warnedStyleNames[name] = true;764("production" !== process.env.NODE_ENV ? warning(765false,766'Unsupported style property %s. Did you mean %s?',767name,768camelizeStyleName(name)769) : null);770};771772var warnBadVendoredStyleName = function(name) {773if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {774return;775}776777warnedStyleNames[name] = true;778("production" !== process.env.NODE_ENV ? warning(779false,780'Unsupported vendor-prefixed style property %s. Did you mean %s?',781name,782name.charAt(0).toUpperCase() + name.slice(1)783) : null);784};785786var warnStyleValueWithSemicolon = function(name, value) {787if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {788return;789}790791warnedStyleValues[value] = true;792("production" !== process.env.NODE_ENV ? warning(793false,794'Style property values shouldn\'t contain a semicolon. ' +795'Try "%s: %s" instead.',796name,797value.replace(badStyleValueWithSemicolonPattern, '')798) : null);799};800801/**802* @param {string} name803* @param {*} value804*/805var warnValidStyle = function(name, value) {806if (name.indexOf('-') > -1) {807warnHyphenatedStyleName(name);808} else if (badVendoredStyleNamePattern.test(name)) {809warnBadVendoredStyleName(name);810} else if (badStyleValueWithSemicolonPattern.test(value)) {811warnStyleValueWithSemicolon(name, value);812}813};814}815816/**817* Operations for dealing with CSS properties.818*/819var CSSPropertyOperations = {820821/**822* Serializes a mapping of style properties for use as inline styles:823*824* > createMarkupForStyles({width: '200px', height: 0})825* "width:200px;height:0;"826*827* Undefined values are ignored so that declarative programming is easier.828* The result should be HTML-escaped before insertion into the DOM.829*830* @param {object} styles831* @return {?string}832*/833createMarkupForStyles: function(styles) {834var serialized = '';835for (var styleName in styles) {836if (!styles.hasOwnProperty(styleName)) {837continue;838}839var styleValue = styles[styleName];840if ("production" !== process.env.NODE_ENV) {841warnValidStyle(styleName, styleValue);842}843if (styleValue != null) {844serialized += processStyleName(styleName) + ':';845serialized += dangerousStyleValue(styleName, styleValue) + ';';846}847}848return serialized || null;849},850851/**852* Sets the value for multiple styles on a node. If a value is specified as853* '' (empty string), the corresponding style property will be unset.854*855* @param {DOMElement} node856* @param {object} styles857*/858setValueForStyles: function(node, styles) {859var style = node.style;860for (var styleName in styles) {861if (!styles.hasOwnProperty(styleName)) {862continue;863}864if ("production" !== process.env.NODE_ENV) {865warnValidStyle(styleName, styles[styleName]);866}867var styleValue = dangerousStyleValue(styleName, styles[styleName]);868if (styleName === 'float') {869styleName = styleFloatAccessor;870}871if (styleValue) {872style[styleName] = styleValue;873} else {874var expansion = CSSProperty.shorthandPropertyExpansions[styleName];875if (expansion) {876// Shorthand property that IE8 won't like unsetting, so unset each877// component to placate it878for (var individualStyleName in expansion) {879style[individualStyleName] = '';880}881} else {882style[styleName] = '';883}884}885}886}887888};889890module.exports = CSSPropertyOperations;891892893}).call(this,require("FWaASH"))894},{"./CSSProperty":4,"./ExecutionEnvironment":21,"./camelizeStyleName":109,"./dangerousStyleValue":114,"./hyphenateStyleName":134,"./memoizeStringOnly":144,"./warning":155,"FWaASH":1}],6:[function(require,module,exports){895(function (process){896/**897* Copyright 2013-2015, Facebook, Inc.898* All rights reserved.899*900* This source code is licensed under the BSD-style license found in the901* LICENSE file in the root directory of this source tree. An additional grant902* of patent rights can be found in the PATENTS file in the same directory.903*904* @providesModule CallbackQueue905*/906907'use strict';908909var PooledClass = require("./PooledClass");910911var assign = require("./Object.assign");912var invariant = require("./invariant");913914/**915* A specialized pseudo-event module to help keep track of components waiting to916* be notified when their DOM representations are available for use.917*918* This implements `PooledClass`, so you should never need to instantiate this.919* Instead, use `CallbackQueue.getPooled()`.920*921* @class ReactMountReady922* @implements PooledClass923* @internal924*/925function CallbackQueue() {926this._callbacks = null;927this._contexts = null;928}929930assign(CallbackQueue.prototype, {931932/**933* Enqueues a callback to be invoked when `notifyAll` is invoked.934*935* @param {function} callback Invoked when `notifyAll` is invoked.936* @param {?object} context Context to call `callback` with.937* @internal938*/939enqueue: function(callback, context) {940this._callbacks = this._callbacks || [];941this._contexts = this._contexts || [];942this._callbacks.push(callback);943this._contexts.push(context);944},945946/**947* Invokes all enqueued callbacks and clears the queue. This is invoked after948* the DOM representation of a component has been created or updated.949*950* @internal951*/952notifyAll: function() {953var callbacks = this._callbacks;954var contexts = this._contexts;955if (callbacks) {956("production" !== process.env.NODE_ENV ? invariant(957callbacks.length === contexts.length,958'Mismatched list of contexts in callback queue'959) : invariant(callbacks.length === contexts.length));960this._callbacks = null;961this._contexts = null;962for (var i = 0, l = callbacks.length; i < l; i++) {963callbacks[i].call(contexts[i]);964}965callbacks.length = 0;966contexts.length = 0;967}968},969970/**971* Resets the internal queue.972*973* @internal974*/975reset: function() {976this._callbacks = null;977this._contexts = null;978},979980/**981* `PooledClass` looks for this.982*/983destructor: function() {984this.reset();985}986987});988989PooledClass.addPoolingTo(CallbackQueue);990991module.exports = CallbackQueue;992993994}).call(this,require("FWaASH"))995},{"./Object.assign":27,"./PooledClass":28,"./invariant":136,"FWaASH":1}],7:[function(require,module,exports){996/**997* Copyright 2013-2015, Facebook, Inc.998* All rights reserved.999*1000* This source code is licensed under the BSD-style license found in the1001* LICENSE file in the root directory of this source tree. An additional grant1002* of patent rights can be found in the PATENTS file in the same directory.1003*1004* @providesModule ChangeEventPlugin1005*/10061007'use strict';10081009var EventConstants = require("./EventConstants");1010var EventPluginHub = require("./EventPluginHub");1011var EventPropagators = require("./EventPropagators");1012var ExecutionEnvironment = require("./ExecutionEnvironment");1013var ReactUpdates = require("./ReactUpdates");1014var SyntheticEvent = require("./SyntheticEvent");10151016var isEventSupported = require("./isEventSupported");1017var isTextInputElement = require("./isTextInputElement");1018var keyOf = require("./keyOf");10191020var topLevelTypes = EventConstants.topLevelTypes;10211022var eventTypes = {1023change: {1024phasedRegistrationNames: {1025bubbled: keyOf({onChange: null}),1026captured: keyOf({onChangeCapture: null})1027},1028dependencies: [1029topLevelTypes.topBlur,1030topLevelTypes.topChange,1031topLevelTypes.topClick,1032topLevelTypes.topFocus,1033topLevelTypes.topInput,1034topLevelTypes.topKeyDown,1035topLevelTypes.topKeyUp,1036topLevelTypes.topSelectionChange1037]1038}1039};10401041/**1042* For IE shims1043*/1044var activeElement = null;1045var activeElementID = null;1046var activeElementValue = null;1047var activeElementValueProp = null;10481049/**1050* SECTION: handle `change` event1051*/1052function shouldUseChangeEvent(elem) {1053return (1054elem.nodeName === 'SELECT' ||1055(elem.nodeName === 'INPUT' && elem.type === 'file')1056);1057}10581059var doesChangeEventBubble = false;1060if (ExecutionEnvironment.canUseDOM) {1061// See `handleChange` comment below1062doesChangeEventBubble = isEventSupported('change') && (1063(!('documentMode' in document) || document.documentMode > 8)1064);1065}10661067function manualDispatchChangeEvent(nativeEvent) {1068var event = SyntheticEvent.getPooled(1069eventTypes.change,1070activeElementID,1071nativeEvent1072);1073EventPropagators.accumulateTwoPhaseDispatches(event);10741075// If change and propertychange bubbled, we'd just bind to it like all the1076// other events and have it go through ReactBrowserEventEmitter. Since it1077// doesn't, we manually listen for the events and so we have to enqueue and1078// process the abstract event manually.1079//1080// Batching is necessary here in order to ensure that all event handlers run1081// before the next rerender (including event handlers attached to ancestor1082// elements instead of directly on the input). Without this, controlled1083// components don't work properly in conjunction with event bubbling because1084// the component is rerendered and the value reverted before all the event1085// handlers can run. See https://github.com/facebook/react/issues/708.1086ReactUpdates.batchedUpdates(runEventInBatch, event);1087}10881089function runEventInBatch(event) {1090EventPluginHub.enqueueEvents(event);1091EventPluginHub.processEventQueue();1092}10931094function startWatchingForChangeEventIE8(target, targetID) {1095activeElement = target;1096activeElementID = targetID;1097activeElement.attachEvent('onchange', manualDispatchChangeEvent);1098}10991100function stopWatchingForChangeEventIE8() {1101if (!activeElement) {1102return;1103}1104activeElement.detachEvent('onchange', manualDispatchChangeEvent);1105activeElement = null;1106activeElementID = null;1107}11081109function getTargetIDForChangeEvent(1110topLevelType,1111topLevelTarget,1112topLevelTargetID) {1113if (topLevelType === topLevelTypes.topChange) {1114return topLevelTargetID;1115}1116}1117function handleEventsForChangeEventIE8(1118topLevelType,1119topLevelTarget,1120topLevelTargetID) {1121if (topLevelType === topLevelTypes.topFocus) {1122// stopWatching() should be a noop here but we call it just in case we1123// missed a blur event somehow.1124stopWatchingForChangeEventIE8();1125startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);1126} else if (topLevelType === topLevelTypes.topBlur) {1127stopWatchingForChangeEventIE8();1128}1129}113011311132/**1133* SECTION: handle `input` event1134*/1135var isInputEventSupported = false;1136if (ExecutionEnvironment.canUseDOM) {1137// IE9 claims to support the input event but fails to trigger it when1138// deleting text, so we ignore its input events1139isInputEventSupported = isEventSupported('input') && (1140(!('documentMode' in document) || document.documentMode > 9)1141);1142}11431144/**1145* (For old IE.) Replacement getter/setter for the `value` property that gets1146* set on the active element.1147*/1148var newValueProp = {1149get: function() {1150return activeElementValueProp.get.call(this);1151},1152set: function(val) {1153// Cast to a string so we can do equality checks.1154activeElementValue = '' + val;1155activeElementValueProp.set.call(this, val);1156}1157};11581159/**1160* (For old IE.) Starts tracking propertychange events on the passed-in element1161* and override the value property so that we can distinguish user events from1162* value changes in JS.1163*/1164function startWatchingForValueChange(target, targetID) {1165activeElement = target;1166activeElementID = targetID;1167activeElementValue = target.value;1168activeElementValueProp = Object.getOwnPropertyDescriptor(1169target.constructor.prototype,1170'value'1171);11721173Object.defineProperty(activeElement, 'value', newValueProp);1174activeElement.attachEvent('onpropertychange', handlePropertyChange);1175}11761177/**1178* (For old IE.) Removes the event listeners from the currently-tracked element,1179* if any exists.1180*/1181function stopWatchingForValueChange() {1182if (!activeElement) {1183return;1184}11851186// delete restores the original property definition1187delete activeElement.value;1188activeElement.detachEvent('onpropertychange', handlePropertyChange);11891190activeElement = null;1191activeElementID = null;1192activeElementValue = null;1193activeElementValueProp = null;1194}11951196/**1197* (For old IE.) Handles a propertychange event, sending a `change` event if1198* the value of the active element has changed.1199*/1200function handlePropertyChange(nativeEvent) {1201if (nativeEvent.propertyName !== 'value') {1202return;1203}1204var value = nativeEvent.srcElement.value;1205if (value === activeElementValue) {1206return;1207}1208activeElementValue = value;12091210manualDispatchChangeEvent(nativeEvent);1211}12121213/**1214* If a `change` event should be fired, returns the target's ID.1215*/1216function getTargetIDForInputEvent(1217topLevelType,1218topLevelTarget,1219topLevelTargetID) {1220if (topLevelType === topLevelTypes.topInput) {1221// In modern browsers (i.e., not IE8 or IE9), the input event is exactly1222// what we want so fall through here and trigger an abstract event1223return topLevelTargetID;1224}1225}12261227// For IE8 and IE9.1228function handleEventsForInputEventIE(1229topLevelType,1230topLevelTarget,1231topLevelTargetID) {1232if (topLevelType === topLevelTypes.topFocus) {1233// In IE8, we can capture almost all .value changes by adding a1234// propertychange handler and looking for events with propertyName1235// equal to 'value'1236// In IE9, propertychange fires for most input events but is buggy and1237// doesn't fire when text is deleted, but conveniently, selectionchange1238// appears to fire in all of the remaining cases so we catch those and1239// forward the event if the value has changed1240// In either case, we don't want to call the event handler if the value1241// is changed from JS so we redefine a setter for `.value` that updates1242// our activeElementValue variable, allowing us to ignore those changes1243//1244// stopWatching() should be a noop here but we call it just in case we1245// missed a blur event somehow.1246stopWatchingForValueChange();1247startWatchingForValueChange(topLevelTarget, topLevelTargetID);1248} else if (topLevelType === topLevelTypes.topBlur) {1249stopWatchingForValueChange();1250}1251}12521253// For IE8 and IE9.1254function getTargetIDForInputEventIE(1255topLevelType,1256topLevelTarget,1257topLevelTargetID) {1258if (topLevelType === topLevelTypes.topSelectionChange ||1259topLevelType === topLevelTypes.topKeyUp ||1260topLevelType === topLevelTypes.topKeyDown) {1261// On the selectionchange event, the target is just document which isn't1262// helpful for us so just check activeElement instead.1263//1264// 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire1265// propertychange on the first input event after setting `value` from a1266// script and fires only keydown, keypress, keyup. Catching keyup usually1267// gets it and catching keydown lets us fire an event for the first1268// keystroke if user does a key repeat (it'll be a little delayed: right1269// before the second keystroke). Other input methods (e.g., paste) seem to1270// fire selectionchange normally.1271if (activeElement && activeElement.value !== activeElementValue) {1272activeElementValue = activeElement.value;1273return activeElementID;1274}1275}1276}127712781279/**1280* SECTION: handle `click` event1281*/1282function shouldUseClickEvent(elem) {1283// Use the `click` event to detect changes to checkbox and radio inputs.1284// This approach works across all browsers, whereas `change` does not fire1285// until `blur` in IE8.1286return (1287elem.nodeName === 'INPUT' &&1288(elem.type === 'checkbox' || elem.type === 'radio')1289);1290}12911292function getTargetIDForClickEvent(1293topLevelType,1294topLevelTarget,1295topLevelTargetID) {1296if (topLevelType === topLevelTypes.topClick) {1297return topLevelTargetID;1298}1299}13001301/**1302* This plugin creates an `onChange` event that normalizes change events1303* across form elements. This event fires at a time when it's possible to1304* change the element's value without seeing a flicker.1305*1306* Supported elements are:1307* - input (see `isTextInputElement`)1308* - textarea1309* - select1310*/1311var ChangeEventPlugin = {13121313eventTypes: eventTypes,13141315/**1316* @param {string} topLevelType Record from `EventConstants`.1317* @param {DOMEventTarget} topLevelTarget The listening component root node.1318* @param {string} topLevelTargetID ID of `topLevelTarget`.1319* @param {object} nativeEvent Native browser event.1320* @return {*} An accumulation of synthetic events.1321* @see {EventPluginHub.extractEvents}1322*/1323extractEvents: function(1324topLevelType,1325topLevelTarget,1326topLevelTargetID,1327nativeEvent) {13281329var getTargetIDFunc, handleEventFunc;1330if (shouldUseChangeEvent(topLevelTarget)) {1331if (doesChangeEventBubble) {1332getTargetIDFunc = getTargetIDForChangeEvent;1333} else {1334handleEventFunc = handleEventsForChangeEventIE8;1335}1336} else if (isTextInputElement(topLevelTarget)) {1337if (isInputEventSupported) {1338getTargetIDFunc = getTargetIDForInputEvent;1339} else {1340getTargetIDFunc = getTargetIDForInputEventIE;1341handleEventFunc = handleEventsForInputEventIE;1342}1343} else if (shouldUseClickEvent(topLevelTarget)) {1344getTargetIDFunc = getTargetIDForClickEvent;1345}13461347if (getTargetIDFunc) {1348var targetID = getTargetIDFunc(1349topLevelType,1350topLevelTarget,1351topLevelTargetID1352);1353if (targetID) {1354var event = SyntheticEvent.getPooled(1355eventTypes.change,1356targetID,1357nativeEvent1358);1359EventPropagators.accumulateTwoPhaseDispatches(event);1360return event;1361}1362}13631364if (handleEventFunc) {1365handleEventFunc(1366topLevelType,1367topLevelTarget,1368topLevelTargetID1369);1370}1371}13721373};13741375module.exports = ChangeEventPlugin;137613771378},{"./EventConstants":15,"./EventPluginHub":17,"./EventPropagators":20,"./ExecutionEnvironment":21,"./ReactUpdates":88,"./SyntheticEvent":96,"./isEventSupported":137,"./isTextInputElement":139,"./keyOf":142}],8:[function(require,module,exports){1379/**1380* Copyright 2013-2015, Facebook, Inc.1381* All rights reserved.1382*1383* This source code is licensed under the BSD-style license found in the1384* LICENSE file in the root directory of this source tree. An additional grant1385* of patent rights can be found in the PATENTS file in the same directory.1386*1387* @providesModule ClientReactRootIndex1388* @typechecks1389*/13901391'use strict';13921393var nextReactRootIndex = 0;13941395var ClientReactRootIndex = {1396createReactRootIndex: function() {1397return nextReactRootIndex++;1398}1399};14001401module.exports = ClientReactRootIndex;140214031404},{}],9:[function(require,module,exports){1405(function (process){1406/**1407* Copyright 2013-2015, Facebook, Inc.1408* All rights reserved.1409*1410* This source code is licensed under the BSD-style license found in the1411* LICENSE file in the root directory of this source tree. An additional grant1412* of patent rights can be found in the PATENTS file in the same directory.1413*1414* @providesModule DOMChildrenOperations1415* @typechecks static-only1416*/14171418'use strict';14191420var Danger = require("./Danger");1421var ReactMultiChildUpdateTypes = require("./ReactMultiChildUpdateTypes");14221423var setTextContent = require("./setTextContent");1424var invariant = require("./invariant");14251426/**1427* Inserts `childNode` as a child of `parentNode` at the `index`.1428*1429* @param {DOMElement} parentNode Parent node in which to insert.1430* @param {DOMElement} childNode Child node to insert.1431* @param {number} index Index at which to insert the child.1432* @internal1433*/1434function insertChildAt(parentNode, childNode, index) {1435// By exploiting arrays returning `undefined` for an undefined index, we can1436// rely exclusively on `insertBefore(node, null)` instead of also using1437// `appendChild(node)`. However, using `undefined` is not allowed by all1438// browsers so we must replace it with `null`.1439parentNode.insertBefore(1440childNode,1441parentNode.childNodes[index] || null1442);1443}14441445/**1446* Operations for updating with DOM children.1447*/1448var DOMChildrenOperations = {14491450dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,14511452updateTextContent: setTextContent,14531454/**1455* Updates a component's children by processing a series of updates. The1456* update configurations are each expected to have a `parentNode` property.1457*1458* @param {array<object>} updates List of update configurations.1459* @param {array<string>} markupList List of markup strings.1460* @internal1461*/1462processUpdates: function(updates, markupList) {1463var update;1464// Mapping from parent IDs to initial child orderings.1465var initialChildren = null;1466// List of children that will be moved or removed.1467var updatedChildren = null;14681469for (var i = 0; i < updates.length; i++) {1470update = updates[i];1471if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING ||1472update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {1473var updatedIndex = update.fromIndex;1474var updatedChild = update.parentNode.childNodes[updatedIndex];1475var parentID = update.parentID;14761477("production" !== process.env.NODE_ENV ? invariant(1478updatedChild,1479'processUpdates(): Unable to find child %s of element. This ' +1480'probably means the DOM was unexpectedly mutated (e.g., by the ' +1481'browser), usually due to forgetting a <tbody> when using tables, ' +1482'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' +1483'in an <svg> parent. Try inspecting the child nodes of the element ' +1484'with React ID `%s`.',1485updatedIndex,1486parentID1487) : invariant(updatedChild));14881489initialChildren = initialChildren || {};1490initialChildren[parentID] = initialChildren[parentID] || [];1491initialChildren[parentID][updatedIndex] = updatedChild;14921493updatedChildren = updatedChildren || [];1494updatedChildren.push(updatedChild);1495}1496}14971498var renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);14991500// Remove updated children first so that `toIndex` is consistent.1501if (updatedChildren) {1502for (var j = 0; j < updatedChildren.length; j++) {1503updatedChildren[j].parentNode.removeChild(updatedChildren[j]);1504}1505}15061507for (var k = 0; k < updates.length; k++) {1508update = updates[k];1509switch (update.type) {1510case ReactMultiChildUpdateTypes.INSERT_MARKUP:1511insertChildAt(1512update.parentNode,1513renderedMarkup[update.markupIndex],1514update.toIndex1515);1516break;1517case ReactMultiChildUpdateTypes.MOVE_EXISTING:1518insertChildAt(1519update.parentNode,1520initialChildren[update.parentID][update.fromIndex],1521update.toIndex1522);1523break;1524case ReactMultiChildUpdateTypes.TEXT_CONTENT:1525setTextContent(1526update.parentNode,1527update.textContent1528);1529break;1530case ReactMultiChildUpdateTypes.REMOVE_NODE:1531// Already removed by the for-loop above.1532break;1533}1534}1535}15361537};15381539module.exports = DOMChildrenOperations;154015411542}).call(this,require("FWaASH"))1543},{"./Danger":12,"./ReactMultiChildUpdateTypes":73,"./invariant":136,"./setTextContent":150,"FWaASH":1}],10:[function(require,module,exports){1544(function (process){1545/**1546* Copyright 2013-2015, Facebook, Inc.1547* All rights reserved.1548*1549* This source code is licensed under the BSD-style license found in the1550* LICENSE file in the root directory of this source tree. An additional grant1551* of patent rights can be found in the PATENTS file in the same directory.1552*1553* @providesModule DOMProperty1554* @typechecks static-only1555*/15561557/*jslint bitwise: true */15581559'use strict';15601561var invariant = require("./invariant");15621563function checkMask(value, bitmask) {1564return (value & bitmask) === bitmask;1565}15661567var DOMPropertyInjection = {1568/**1569* Mapping from normalized, camelcased property names to a configuration that1570* specifies how the associated DOM property should be accessed or rendered.1571*/1572MUST_USE_ATTRIBUTE: 0x1,1573MUST_USE_PROPERTY: 0x2,1574HAS_SIDE_EFFECTS: 0x4,1575HAS_BOOLEAN_VALUE: 0x8,1576HAS_NUMERIC_VALUE: 0x10,1577HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,1578HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,15791580/**1581* Inject some specialized knowledge about the DOM. This takes a config object1582* with the following properties:1583*1584* isCustomAttribute: function that given an attribute name will return true1585* if it can be inserted into the DOM verbatim. Useful for data-* or aria-*1586* attributes where it's impossible to enumerate all of the possible1587* attribute names,1588*1589* Properties: object mapping DOM property name to one of the1590* DOMPropertyInjection constants or null. If your attribute isn't in here,1591* it won't get written to the DOM.1592*1593* DOMAttributeNames: object mapping React attribute name to the DOM1594* attribute name. Attribute names not specified use the **lowercase**1595* normalized name.1596*1597* DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.1598* Property names not specified use the normalized name.1599*1600* DOMMutationMethods: Properties that require special mutation methods. If1601* `value` is undefined, the mutation method should unset the property.1602*1603* @param {object} domPropertyConfig the config as described above.1604*/1605injectDOMPropertyConfig: function(domPropertyConfig) {1606var Properties = domPropertyConfig.Properties || {};1607var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};1608var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};1609var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};16101611if (domPropertyConfig.isCustomAttribute) {1612DOMProperty._isCustomAttributeFunctions.push(1613domPropertyConfig.isCustomAttribute1614);1615}16161617for (var propName in Properties) {1618("production" !== process.env.NODE_ENV ? invariant(1619!DOMProperty.isStandardName.hasOwnProperty(propName),1620'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' +1621'\'%s\' which has already been injected. You may be accidentally ' +1622'injecting the same DOM property config twice, or you may be ' +1623'injecting two configs that have conflicting property names.',1624propName1625) : invariant(!DOMProperty.isStandardName.hasOwnProperty(propName)));16261627DOMProperty.isStandardName[propName] = true;16281629var lowerCased = propName.toLowerCase();1630DOMProperty.getPossibleStandardName[lowerCased] = propName;16311632if (DOMAttributeNames.hasOwnProperty(propName)) {1633var attributeName = DOMAttributeNames[propName];1634DOMProperty.getPossibleStandardName[attributeName] = propName;1635DOMProperty.getAttributeName[propName] = attributeName;1636} else {1637DOMProperty.getAttributeName[propName] = lowerCased;1638}16391640DOMProperty.getPropertyName[propName] =1641DOMPropertyNames.hasOwnProperty(propName) ?1642DOMPropertyNames[propName] :1643propName;16441645if (DOMMutationMethods.hasOwnProperty(propName)) {1646DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName];1647} else {1648DOMProperty.getMutationMethod[propName] = null;1649}16501651var propConfig = Properties[propName];1652DOMProperty.mustUseAttribute[propName] =1653checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE);1654DOMProperty.mustUseProperty[propName] =1655checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY);1656DOMProperty.hasSideEffects[propName] =1657checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS);1658DOMProperty.hasBooleanValue[propName] =1659checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE);1660DOMProperty.hasNumericValue[propName] =1661checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE);1662DOMProperty.hasPositiveNumericValue[propName] =1663checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);1664DOMProperty.hasOverloadedBooleanValue[propName] =1665checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);16661667("production" !== process.env.NODE_ENV ? invariant(1668!DOMProperty.mustUseAttribute[propName] ||1669!DOMProperty.mustUseProperty[propName],1670'DOMProperty: Cannot require using both attribute and property: %s',1671propName1672) : invariant(!DOMProperty.mustUseAttribute[propName] ||1673!DOMProperty.mustUseProperty[propName]));1674("production" !== process.env.NODE_ENV ? invariant(1675DOMProperty.mustUseProperty[propName] ||1676!DOMProperty.hasSideEffects[propName],1677'DOMProperty: Properties that have side effects must use property: %s',1678propName1679) : invariant(DOMProperty.mustUseProperty[propName] ||1680!DOMProperty.hasSideEffects[propName]));1681("production" !== process.env.NODE_ENV ? invariant(1682!!DOMProperty.hasBooleanValue[propName] +1683!!DOMProperty.hasNumericValue[propName] +1684!!DOMProperty.hasOverloadedBooleanValue[propName] <= 1,1685'DOMProperty: Value can be one of boolean, overloaded boolean, or ' +1686'numeric value, but not a combination: %s',1687propName1688) : invariant(!!DOMProperty.hasBooleanValue[propName] +1689!!DOMProperty.hasNumericValue[propName] +1690!!DOMProperty.hasOverloadedBooleanValue[propName] <= 1));1691}1692}1693};1694var defaultValueCache = {};16951696/**1697* DOMProperty exports lookup objects that can be used like functions:1698*1699* > DOMProperty.isValid['id']1700* true1701* > DOMProperty.isValid['foobar']1702* undefined1703*1704* Although this may be confusing, it performs better in general.1705*1706* @see http://jsperf.com/key-exists1707* @see http://jsperf.com/key-missing1708*/1709var DOMProperty = {17101711ID_ATTRIBUTE_NAME: 'data-reactid',17121713/**1714* Checks whether a property name is a standard property.1715* @type {Object}1716*/1717isStandardName: {},17181719/**1720* Mapping from lowercase property names to the properly cased version, used1721* to warn in the case of missing properties.1722* @type {Object}1723*/1724getPossibleStandardName: {},17251726/**1727* Mapping from normalized names to attribute names that differ. Attribute1728* names are used when rendering markup or with `*Attribute()`.1729* @type {Object}1730*/1731getAttributeName: {},17321733/**1734* Mapping from normalized names to properties on DOM node instances.1735* (This includes properties that mutate due to external factors.)1736* @type {Object}1737*/1738getPropertyName: {},17391740/**1741* Mapping from normalized names to mutation methods. This will only exist if1742* mutation cannot be set simply by the property or `setAttribute()`.1743* @type {Object}1744*/1745getMutationMethod: {},17461747/**1748* Whether the property must be accessed and mutated as an object property.1749* @type {Object}1750*/1751mustUseAttribute: {},17521753/**1754* Whether the property must be accessed and mutated using `*Attribute()`.1755* (This includes anything that fails `<propName> in <element>`.)1756* @type {Object}1757*/1758mustUseProperty: {},17591760/**1761* Whether or not setting a value causes side effects such as triggering1762* resources to be loaded or text selection changes. We must ensure that1763* the value is only set if it has changed.1764* @type {Object}1765*/1766hasSideEffects: {},17671768/**1769* Whether the property should be removed when set to a falsey value.1770* @type {Object}1771*/1772hasBooleanValue: {},17731774/**1775* Whether the property must be numeric or parse as a1776* numeric and should be removed when set to a falsey value.1777* @type {Object}1778*/1779hasNumericValue: {},17801781/**1782* Whether the property must be positive numeric or parse as a positive1783* numeric and should be removed when set to a falsey value.1784* @type {Object}1785*/1786hasPositiveNumericValue: {},17871788/**1789* Whether the property can be used as a flag as well as with a value. Removed1790* when strictly equal to false; present without a value when strictly equal1791* to true; present with a value otherwise.1792* @type {Object}1793*/1794hasOverloadedBooleanValue: {},17951796/**1797* All of the isCustomAttribute() functions that have been injected.1798*/1799_isCustomAttributeFunctions: [],18001801/**1802* Checks whether a property name is a custom attribute.1803* @method1804*/1805isCustomAttribute: function(attributeName) {1806for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {1807var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];1808if (isCustomAttributeFn(attributeName)) {1809return true;1810}1811}1812return false;1813},18141815/**1816* Returns the default property value for a DOM property (i.e., not an1817* attribute). Most default values are '' or false, but not all. Worse yet,1818* some (in particular, `type`) vary depending on the type of element.1819*1820* TODO: Is it better to grab all the possible properties when creating an1821* element to avoid having to create the same element twice?1822*/1823getDefaultValueForProperty: function(nodeName, prop) {1824var nodeDefaults = defaultValueCache[nodeName];1825var testElement;1826if (!nodeDefaults) {1827defaultValueCache[nodeName] = nodeDefaults = {};1828}1829if (!(prop in nodeDefaults)) {1830testElement = document.createElement(nodeName);1831nodeDefaults[prop] = testElement[prop];1832}1833return nodeDefaults[prop];1834},18351836injection: DOMPropertyInjection1837};18381839module.exports = DOMProperty;184018411842}).call(this,require("FWaASH"))1843},{"./invariant":136,"FWaASH":1}],11:[function(require,module,exports){1844(function (process){1845/**1846* Copyright 2013-2015, Facebook, Inc.1847* All rights reserved.1848*1849* This source code is licensed under the BSD-style license found in the1850* LICENSE file in the root directory of this source tree. An additional grant1851* of patent rights can be found in the PATENTS file in the same directory.1852*1853* @providesModule DOMPropertyOperations1854* @typechecks static-only1855*/18561857'use strict';18581859var DOMProperty = require("./DOMProperty");18601861var quoteAttributeValueForBrowser = require("./quoteAttributeValueForBrowser");1862var warning = require("./warning");18631864function shouldIgnoreValue(name, value) {1865return value == null ||1866(DOMProperty.hasBooleanValue[name] && !value) ||1867(DOMProperty.hasNumericValue[name] && isNaN(value)) ||1868(DOMProperty.hasPositiveNumericValue[name] && (value < 1)) ||1869(DOMProperty.hasOverloadedBooleanValue[name] && value === false);1870}18711872if ("production" !== process.env.NODE_ENV) {1873var reactProps = {1874children: true,1875dangerouslySetInnerHTML: true,1876key: true,1877ref: true1878};1879var warnedProperties = {};18801881var warnUnknownProperty = function(name) {1882if (reactProps.hasOwnProperty(name) && reactProps[name] ||1883warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {1884return;1885}18861887warnedProperties[name] = true;1888var lowerCasedName = name.toLowerCase();18891890// data-* attributes should be lowercase; suggest the lowercase version1891var standardName = (1892DOMProperty.isCustomAttribute(lowerCasedName) ?1893lowerCasedName :1894DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ?1895DOMProperty.getPossibleStandardName[lowerCasedName] :1896null1897);18981899// For now, only warn when we have a suggested correction. This prevents1900// logging too much when using transferPropsTo.1901("production" !== process.env.NODE_ENV ? warning(1902standardName == null,1903'Unknown DOM property %s. Did you mean %s?',1904name,1905standardName1906) : null);19071908};1909}19101911/**1912* Operations for dealing with DOM properties.1913*/1914var DOMPropertyOperations = {19151916/**1917* Creates markup for the ID property.1918*1919* @param {string} id Unescaped ID.1920* @return {string} Markup string.1921*/1922createMarkupForID: function(id) {1923return DOMProperty.ID_ATTRIBUTE_NAME + '=' +1924quoteAttributeValueForBrowser(id);1925},19261927/**1928* Creates markup for a property.1929*1930* @param {string} name1931* @param {*} value1932* @return {?string} Markup string, or null if the property was invalid.1933*/1934createMarkupForProperty: function(name, value) {1935if (DOMProperty.isStandardName.hasOwnProperty(name) &&1936DOMProperty.isStandardName[name]) {1937if (shouldIgnoreValue(name, value)) {1938return '';1939}1940var attributeName = DOMProperty.getAttributeName[name];1941if (DOMProperty.hasBooleanValue[name] ||1942(DOMProperty.hasOverloadedBooleanValue[name] && value === true)) {1943return attributeName;1944}1945return attributeName + '=' + quoteAttributeValueForBrowser(value);1946} else if (DOMProperty.isCustomAttribute(name)) {1947if (value == null) {1948return '';1949}1950return name + '=' + quoteAttributeValueForBrowser(value);1951} else if ("production" !== process.env.NODE_ENV) {1952warnUnknownProperty(name);1953}1954return null;1955},19561957/**1958* Sets the value for a property on a node.1959*1960* @param {DOMElement} node1961* @param {string} name1962* @param {*} value1963*/1964setValueForProperty: function(node, name, value) {1965if (DOMProperty.isStandardName.hasOwnProperty(name) &&1966DOMProperty.isStandardName[name]) {1967var mutationMethod = DOMProperty.getMutationMethod[name];1968if (mutationMethod) {1969mutationMethod(node, value);1970} else if (shouldIgnoreValue(name, value)) {1971this.deleteValueForProperty(node, name);1972} else if (DOMProperty.mustUseAttribute[name]) {1973// `setAttribute` with objects becomes only `[object]` in IE8/9,1974// ('' + value) makes it output the correct toString()-value.1975node.setAttribute(DOMProperty.getAttributeName[name], '' + value);1976} else {1977var propName = DOMProperty.getPropertyName[name];1978// Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the1979// property type before comparing; only `value` does and is string.1980if (!DOMProperty.hasSideEffects[name] ||1981('' + node[propName]) !== ('' + value)) {1982// Contrary to `setAttribute`, object properties are properly1983// `toString`ed by IE8/9.1984node[propName] = value;1985}1986}1987} else if (DOMProperty.isCustomAttribute(name)) {1988if (value == null) {1989node.removeAttribute(name);1990} else {1991node.setAttribute(name, '' + value);1992}1993} else if ("production" !== process.env.NODE_ENV) {1994warnUnknownProperty(name);1995}1996},19971998/**1999* Deletes the value for a property on a node.2000*2001* @param {DOMElement} node2002* @param {string} name2003*/2004deleteValueForProperty: function(node, name) {2005if (DOMProperty.isStandardName.hasOwnProperty(name) &&2006DOMProperty.isStandardName[name]) {2007var mutationMethod = DOMProperty.getMutationMethod[name];2008if (mutationMethod) {2009mutationMethod(node, undefined);2010} else if (DOMProperty.mustUseAttribute[name]) {2011node.removeAttribute(DOMProperty.getAttributeName[name]);2012} else {2013var propName = DOMProperty.getPropertyName[name];2014var defaultValue = DOMProperty.getDefaultValueForProperty(2015node.nodeName,2016propName2017);2018if (!DOMProperty.hasSideEffects[name] ||2019('' + node[propName]) !== defaultValue) {2020node[propName] = defaultValue;2021}2022}2023} else if (DOMProperty.isCustomAttribute(name)) {2024node.removeAttribute(name);2025} else if ("production" !== process.env.NODE_ENV) {2026warnUnknownProperty(name);2027}2028}20292030};20312032module.exports = DOMPropertyOperations;203320342035}).call(this,require("FWaASH"))2036},{"./DOMProperty":10,"./quoteAttributeValueForBrowser":148,"./warning":155,"FWaASH":1}],12:[function(require,module,exports){2037(function (process){2038/**2039* Copyright 2013-2015, Facebook, Inc.2040* All rights reserved.2041*2042* This source code is licensed under the BSD-style license found in the2043* LICENSE file in the root directory of this source tree. An additional grant2044* of patent rights can be found in the PATENTS file in the same directory.2045*2046* @providesModule Danger2047* @typechecks static-only2048*/20492050/*jslint evil: true, sub: true */20512052'use strict';20532054var ExecutionEnvironment = require("./ExecutionEnvironment");20552056var createNodesFromMarkup = require("./createNodesFromMarkup");2057var emptyFunction = require("./emptyFunction");2058var getMarkupWrap = require("./getMarkupWrap");2059var invariant = require("./invariant");20602061var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/;2062var RESULT_INDEX_ATTR = 'data-danger-index';20632064/**2065* Extracts the `nodeName` from a string of markup.2066*2067* NOTE: Extracting the `nodeName` does not require a regular expression match2068* because we make assumptions about React-generated markup (i.e. there are no2069* spaces surrounding the opening tag and there is at least one attribute).2070*2071* @param {string} markup String of markup.2072* @return {string} Node name of the supplied markup.2073* @see http://jsperf.com/extract-nodename2074*/2075function getNodeName(markup) {2076return markup.substring(1, markup.indexOf(' '));2077}20782079var Danger = {20802081/**2082* Renders markup into an array of nodes. The markup is expected to render2083* into a list of root nodes. Also, the length of `resultList` and2084* `markupList` should be the same.2085*2086* @param {array<string>} markupList List of markup strings to render.2087* @return {array<DOMElement>} List of rendered nodes.2088* @internal2089*/2090dangerouslyRenderMarkup: function(markupList) {2091("production" !== process.env.NODE_ENV ? invariant(2092ExecutionEnvironment.canUseDOM,2093'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' +2094'thread. Make sure `window` and `document` are available globally ' +2095'before requiring React when unit testing or use ' +2096'React.renderToString for server rendering.'2097) : invariant(ExecutionEnvironment.canUseDOM));2098var nodeName;2099var markupByNodeName = {};2100// Group markup by `nodeName` if a wrap is necessary, else by '*'.2101for (var i = 0; i < markupList.length; i++) {2102("production" !== process.env.NODE_ENV ? invariant(2103markupList[i],2104'dangerouslyRenderMarkup(...): Missing markup.'2105) : invariant(markupList[i]));2106nodeName = getNodeName(markupList[i]);2107nodeName = getMarkupWrap(nodeName) ? nodeName : '*';2108markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];2109markupByNodeName[nodeName][i] = markupList[i];2110}2111var resultList = [];2112var resultListAssignmentCount = 0;2113for (nodeName in markupByNodeName) {2114if (!markupByNodeName.hasOwnProperty(nodeName)) {2115continue;2116}2117var markupListByNodeName = markupByNodeName[nodeName];21182119// This for-in loop skips the holes of the sparse array. The order of2120// iteration should follow the order of assignment, which happens to match2121// numerical index order, but we don't rely on that.2122var resultIndex;2123for (resultIndex in markupListByNodeName) {2124if (markupListByNodeName.hasOwnProperty(resultIndex)) {2125var markup = markupListByNodeName[resultIndex];21262127// Push the requested markup with an additional RESULT_INDEX_ATTR2128// attribute. If the markup does not start with a < character, it2129// will be discarded below (with an appropriate console.error).2130markupListByNodeName[resultIndex] = markup.replace(2131OPEN_TAG_NAME_EXP,2132// This index will be parsed back out below.2133'$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" '2134);2135}2136}21372138// Render each group of markup with similar wrapping `nodeName`.2139var renderNodes = createNodesFromMarkup(2140markupListByNodeName.join(''),2141emptyFunction // Do nothing special with <script> tags.2142);21432144for (var j = 0; j < renderNodes.length; ++j) {2145var renderNode = renderNodes[j];2146if (renderNode.hasAttribute &&2147renderNode.hasAttribute(RESULT_INDEX_ATTR)) {21482149resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);2150renderNode.removeAttribute(RESULT_INDEX_ATTR);21512152("production" !== process.env.NODE_ENV ? invariant(2153!resultList.hasOwnProperty(resultIndex),2154'Danger: Assigning to an already-occupied result index.'2155) : invariant(!resultList.hasOwnProperty(resultIndex)));21562157resultList[resultIndex] = renderNode;21582159// This should match resultList.length and markupList.length when2160// we're done.2161resultListAssignmentCount += 1;21622163} else if ("production" !== process.env.NODE_ENV) {2164console.error(2165'Danger: Discarding unexpected node:',2166renderNode2167);2168}2169}2170}21712172// Although resultList was populated out of order, it should now be a dense2173// array.2174("production" !== process.env.NODE_ENV ? invariant(2175resultListAssignmentCount === resultList.length,2176'Danger: Did not assign to every index of resultList.'2177) : invariant(resultListAssignmentCount === resultList.length));21782179("production" !== process.env.NODE_ENV ? invariant(2180resultList.length === markupList.length,2181'Danger: Expected markup to render %s nodes, but rendered %s.',2182markupList.length,2183resultList.length2184) : invariant(resultList.length === markupList.length));21852186return resultList;2187},21882189/**2190* Replaces a node with a string of markup at its current position within its2191* parent. The markup must render into a single root node.2192*2193* @param {DOMElement} oldChild Child node to replace.2194* @param {string} markup Markup to render in place of the child node.2195* @internal2196*/2197dangerouslyReplaceNodeWithMarkup: function(oldChild, markup) {2198("production" !== process.env.NODE_ENV ? invariant(2199ExecutionEnvironment.canUseDOM,2200'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' +2201'worker thread. Make sure `window` and `document` are available ' +2202'globally before requiring React when unit testing or use ' +2203'React.renderToString for server rendering.'2204) : invariant(ExecutionEnvironment.canUseDOM));2205("production" !== process.env.NODE_ENV ? invariant(markup, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(markup));2206("production" !== process.env.NODE_ENV ? invariant(2207oldChild.tagName.toLowerCase() !== 'html',2208'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' +2209'<html> node. This is because browser quirks make this unreliable ' +2210'and/or slow. If you want to render to the root you must use ' +2211'server rendering. See React.renderToString().'2212) : invariant(oldChild.tagName.toLowerCase() !== 'html'));22132214var newChild = createNodesFromMarkup(markup, emptyFunction)[0];2215oldChild.parentNode.replaceChild(newChild, oldChild);2216}22172218};22192220module.exports = Danger;222122222223}).call(this,require("FWaASH"))2224},{"./ExecutionEnvironment":21,"./createNodesFromMarkup":113,"./emptyFunction":115,"./getMarkupWrap":128,"./invariant":136,"FWaASH":1}],13:[function(require,module,exports){2225/**2226* Copyright 2013-2015, Facebook, Inc.2227* All rights reserved.2228*2229* This source code is licensed under the BSD-style license found in the2230* LICENSE file in the root directory of this source tree. An additional grant2231* of patent rights can be found in the PATENTS file in the same directory.2232*2233* @providesModule DefaultEventPluginOrder2234*/22352236'use strict';22372238var keyOf = require("./keyOf");22392240/**2241* Module that is injectable into `EventPluginHub`, that specifies a2242* deterministic ordering of `EventPlugin`s. A convenient way to reason about2243* plugins, without having to package every one of them. This is better than2244* having plugins be ordered in the same order that they are injected because2245* that ordering would be influenced by the packaging order.2246* `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that2247* preventing default on events is convenient in `SimpleEventPlugin` handlers.2248*/2249var DefaultEventPluginOrder = [2250keyOf({ResponderEventPlugin: null}),2251keyOf({SimpleEventPlugin: null}),2252keyOf({TapEventPlugin: null}),2253keyOf({EnterLeaveEventPlugin: null}),2254keyOf({ChangeEventPlugin: null}),2255keyOf({SelectEventPlugin: null}),2256keyOf({BeforeInputEventPlugin: null}),2257keyOf({AnalyticsEventPlugin: null}),2258keyOf({MobileSafariClickEventPlugin: null})2259];22602261module.exports = DefaultEventPluginOrder;226222632264},{"./keyOf":142}],14:[function(require,module,exports){2265/**2266* Copyright 2013-2015, Facebook, Inc.2267* All rights reserved.2268*2269* This source code is licensed under the BSD-style license found in the2270* LICENSE file in the root directory of this source tree. An additional grant2271* of patent rights can be found in the PATENTS file in the same directory.2272*2273* @providesModule EnterLeaveEventPlugin2274* @typechecks static-only2275*/22762277'use strict';22782279var EventConstants = require("./EventConstants");2280var EventPropagators = require("./EventPropagators");2281var SyntheticMouseEvent = require("./SyntheticMouseEvent");22822283var ReactMount = require("./ReactMount");2284var keyOf = require("./keyOf");22852286var topLevelTypes = EventConstants.topLevelTypes;2287var getFirstReactDOM = ReactMount.getFirstReactDOM;22882289var eventTypes = {2290mouseEnter: {2291registrationName: keyOf({onMouseEnter: null}),2292dependencies: [2293topLevelTypes.topMouseOut,2294topLevelTypes.topMouseOver2295]2296},2297mouseLeave: {2298registrationName: keyOf({onMouseLeave: null}),2299dependencies: [2300topLevelTypes.topMouseOut,2301topLevelTypes.topMouseOver2302]2303}2304};23052306var extractedEvents = [null, null];23072308var EnterLeaveEventPlugin = {23092310eventTypes: eventTypes,23112312/**2313* For almost every interaction we care about, there will be both a top-level2314* `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that2315* we do not extract duplicate events. However, moving the mouse into the2316* browser from outside will not fire a `mouseout` event. In this case, we use2317* the `mouseover` top-level event.2318*2319* @param {string} topLevelType Record from `EventConstants`.2320* @param {DOMEventTarget} topLevelTarget The listening component root node.2321* @param {string} topLevelTargetID ID of `topLevelTarget`.2322* @param {object} nativeEvent Native browser event.2323* @return {*} An accumulation of synthetic events.2324* @see {EventPluginHub.extractEvents}2325*/2326extractEvents: function(2327topLevelType,2328topLevelTarget,2329topLevelTargetID,2330nativeEvent) {2331if (topLevelType === topLevelTypes.topMouseOver &&2332(nativeEvent.relatedTarget || nativeEvent.fromElement)) {2333return null;2334}2335if (topLevelType !== topLevelTypes.topMouseOut &&2336topLevelType !== topLevelTypes.topMouseOver) {2337// Must not be a mouse in or mouse out - ignoring.2338return null;2339}23402341var win;2342if (topLevelTarget.window === topLevelTarget) {2343// `topLevelTarget` is probably a window object.2344win = topLevelTarget;2345} else {2346// TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.2347var doc = topLevelTarget.ownerDocument;2348if (doc) {2349win = doc.defaultView || doc.parentWindow;2350} else {2351win = window;2352}2353}23542355var from, to;2356if (topLevelType === topLevelTypes.topMouseOut) {2357from = topLevelTarget;2358to =2359getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) ||2360win;2361} else {2362from = win;2363to = topLevelTarget;2364}23652366if (from === to) {2367// Nothing pertains to our managed components.2368return null;2369}23702371var fromID = from ? ReactMount.getID(from) : '';2372var toID = to ? ReactMount.getID(to) : '';23732374var leave = SyntheticMouseEvent.getPooled(2375eventTypes.mouseLeave,2376fromID,2377nativeEvent2378);2379leave.type = 'mouseleave';2380leave.target = from;2381leave.relatedTarget = to;23822383var enter = SyntheticMouseEvent.getPooled(2384eventTypes.mouseEnter,2385toID,2386nativeEvent2387);2388enter.type = 'mouseenter';2389enter.target = to;2390enter.relatedTarget = from;23912392EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);23932394extractedEvents[0] = leave;2395extractedEvents[1] = enter;23962397return extractedEvents;2398}23992400};24012402module.exports = EnterLeaveEventPlugin;240324042405},{"./EventConstants":15,"./EventPropagators":20,"./ReactMount":71,"./SyntheticMouseEvent":100,"./keyOf":142}],15:[function(require,module,exports){2406/**2407* Copyright 2013-2015, Facebook, Inc.2408* All rights reserved.2409*2410* This source code is licensed under the BSD-style license found in the2411* LICENSE file in the root directory of this source tree. An additional grant2412* of patent rights can be found in the PATENTS file in the same directory.2413*2414* @providesModule EventConstants2415*/24162417'use strict';24182419var keyMirror = require("./keyMirror");24202421var PropagationPhases = keyMirror({bubbled: null, captured: null});24222423/**2424* Types of raw signals from the browser caught at the top level.2425*/2426var topLevelTypes = keyMirror({2427topBlur: null,2428topChange: null,2429topClick: null,2430topCompositionEnd: null,2431topCompositionStart: null,2432topCompositionUpdate: null,2433topContextMenu: null,2434topCopy: null,2435topCut: null,2436topDoubleClick: null,2437topDrag: null,2438topDragEnd: null,2439topDragEnter: null,2440topDragExit: null,2441topDragLeave: null,2442topDragOver: null,2443topDragStart: null,2444topDrop: null,2445topError: null,2446topFocus: null,2447topInput: null,2448topKeyDown: null,2449topKeyPress: null,2450topKeyUp: null,2451topLoad: null,2452topMouseDown: null,2453topMouseMove: null,2454topMouseOut: null,2455topMouseOver: null,2456topMouseUp: null,2457topPaste: null,2458topReset: null,2459topScroll: null,2460topSelectionChange: null,2461topSubmit: null,2462topTextInput: null,2463topTouchCancel: null,2464topTouchEnd: null,2465topTouchMove: null,2466topTouchStart: null,2467topWheel: null2468});24692470var EventConstants = {2471topLevelTypes: topLevelTypes,2472PropagationPhases: PropagationPhases2473};24742475module.exports = EventConstants;247624772478},{"./keyMirror":141}],16:[function(require,module,exports){2479(function (process){2480/**2481* Copyright 2013-2015, Facebook, Inc.2482*2483* Licensed under the Apache License, Version 2.0 (the "License");2484* you may not use this file except in compliance with the License.2485* You may obtain a copy of the License at2486*2487* http://www.apache.org/licenses/LICENSE-2.02488*2489* Unless required by applicable law or agreed to in writing, software2490* distributed under the License is distributed on an "AS IS" BASIS,2491* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.2492* See the License for the specific language governing permissions and2493* limitations under the License.2494*2495* @providesModule EventListener2496* @typechecks2497*/24982499var emptyFunction = require("./emptyFunction");25002501/**2502* Upstream version of event listener. Does not take into account specific2503* nature of platform.2504*/2505var EventListener = {2506/**2507* Listen to DOM events during the bubble phase.2508*2509* @param {DOMEventTarget} target DOM element to register listener on.2510* @param {string} eventType Event type, e.g. 'click' or 'mouseover'.2511* @param {function} callback Callback function.2512* @return {object} Object with a `remove` method.2513*/2514listen: function(target, eventType, callback) {2515if (target.addEventListener) {2516target.addEventListener(eventType, callback, false);2517return {2518remove: function() {2519target.removeEventListener(eventType, callback, false);2520}2521};2522} else if (target.attachEvent) {2523target.attachEvent('on' + eventType, callback);2524return {2525remove: function() {2526target.detachEvent('on' + eventType, callback);2527}2528};2529}2530},25312532/**2533* Listen to DOM events during the capture phase.2534*2535* @param {DOMEventTarget} target DOM element to register listener on.2536* @param {string} eventType Event type, e.g. 'click' or 'mouseover'.2537* @param {function} callback Callback function.2538* @return {object} Object with a `remove` method.2539*/2540capture: function(target, eventType, callback) {2541if (!target.addEventListener) {2542if ("production" !== process.env.NODE_ENV) {2543console.error(2544'Attempted to listen to events during the capture phase on a ' +2545'browser that does not support the capture phase. Your application ' +2546'will not receive some events.'2547);2548}2549return {2550remove: emptyFunction2551};2552} else {2553target.addEventListener(eventType, callback, true);2554return {2555remove: function() {2556target.removeEventListener(eventType, callback, true);2557}2558};2559}2560},25612562registerDefault: function() {}2563};25642565module.exports = EventListener;256625672568}).call(this,require("FWaASH"))2569},{"./emptyFunction":115,"FWaASH":1}],17:[function(require,module,exports){2570(function (process){2571/**2572* Copyright 2013-2015, Facebook, Inc.2573* All rights reserved.2574*2575* This source code is licensed under the BSD-style license found in the2576* LICENSE file in the root directory of this source tree. An additional grant2577* of patent rights can be found in the PATENTS file in the same directory.2578*2579* @providesModule EventPluginHub2580*/25812582'use strict';25832584var EventPluginRegistry = require("./EventPluginRegistry");2585var EventPluginUtils = require("./EventPluginUtils");25862587var accumulateInto = require("./accumulateInto");2588var forEachAccumulated = require("./forEachAccumulated");2589var invariant = require("./invariant");25902591/**2592* Internal store for event listeners2593*/2594var listenerBank = {};25952596/**2597* Internal queue of events that have accumulated their dispatches and are2598* waiting to have their dispatches executed.2599*/2600var eventQueue = null;26012602/**2603* Dispatches an event and releases it back into the pool, unless persistent.2604*2605* @param {?object} event Synthetic event to be dispatched.2606* @private2607*/2608var executeDispatchesAndRelease = function(event) {2609if (event) {2610var executeDispatch = EventPluginUtils.executeDispatch;2611// Plugins can provide custom behavior when dispatching events.2612var PluginModule = EventPluginRegistry.getPluginModuleForEvent(event);2613if (PluginModule && PluginModule.executeDispatch) {2614executeDispatch = PluginModule.executeDispatch;2615}2616EventPluginUtils.executeDispatchesInOrder(event, executeDispatch);26172618if (!event.isPersistent()) {2619event.constructor.release(event);2620}2621}2622};26232624/**2625* - `InstanceHandle`: [required] Module that performs logical traversals of DOM2626* hierarchy given ids of the logical DOM elements involved.2627*/2628var InstanceHandle = null;26292630function validateInstanceHandle() {2631var valid =2632InstanceHandle &&2633InstanceHandle.traverseTwoPhase &&2634InstanceHandle.traverseEnterLeave;2635("production" !== process.env.NODE_ENV ? invariant(2636valid,2637'InstanceHandle not injected before use!'2638) : invariant(valid));2639}26402641/**2642* This is a unified interface for event plugins to be installed and configured.2643*2644* Event plugins can implement the following properties:2645*2646* `extractEvents` {function(string, DOMEventTarget, string, object): *}2647* Required. When a top-level event is fired, this method is expected to2648* extract synthetic events that will in turn be queued and dispatched.2649*2650* `eventTypes` {object}2651* Optional, plugins that fire events must publish a mapping of registration2652* names that are used to register listeners. Values of this mapping must2653* be objects that contain `registrationName` or `phasedRegistrationNames`.2654*2655* `executeDispatch` {function(object, function, string)}2656* Optional, allows plugins to override how an event gets dispatched. By2657* default, the listener is simply invoked.2658*2659* Each plugin that is injected into `EventsPluginHub` is immediately operable.2660*2661* @public2662*/2663var EventPluginHub = {26642665/**2666* Methods for injecting dependencies.2667*/2668injection: {26692670/**2671* @param {object} InjectedMount2672* @public2673*/2674injectMount: EventPluginUtils.injection.injectMount,26752676/**2677* @param {object} InjectedInstanceHandle2678* @public2679*/2680injectInstanceHandle: function(InjectedInstanceHandle) {2681InstanceHandle = InjectedInstanceHandle;2682if ("production" !== process.env.NODE_ENV) {2683validateInstanceHandle();2684}2685},26862687getInstanceHandle: function() {2688if ("production" !== process.env.NODE_ENV) {2689validateInstanceHandle();2690}2691return InstanceHandle;2692},26932694/**2695* @param {array} InjectedEventPluginOrder2696* @public2697*/2698injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,26992700/**2701* @param {object} injectedNamesToPlugins Map from names to plugin modules.2702*/2703injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName27042705},27062707eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,27082709registrationNameModules: EventPluginRegistry.registrationNameModules,27102711/**2712* Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.2713*2714* @param {string} id ID of the DOM element.2715* @param {string} registrationName Name of listener (e.g. `onClick`).2716* @param {?function} listener The callback to store.2717*/2718putListener: function(id, registrationName, listener) {2719("production" !== process.env.NODE_ENV ? invariant(2720!listener || typeof listener === 'function',2721'Expected %s listener to be a function, instead got type %s',2722registrationName, typeof listener2723) : invariant(!listener || typeof listener === 'function'));27242725var bankForRegistrationName =2726listenerBank[registrationName] || (listenerBank[registrationName] = {});2727bankForRegistrationName[id] = listener;2728},27292730/**2731* @param {string} id ID of the DOM element.2732* @param {string} registrationName Name of listener (e.g. `onClick`).2733* @return {?function} The stored callback.2734*/2735getListener: function(id, registrationName) {2736var bankForRegistrationName = listenerBank[registrationName];2737return bankForRegistrationName && bankForRegistrationName[id];2738},27392740/**2741* Deletes a listener from the registration bank.2742*2743* @param {string} id ID of the DOM element.2744* @param {string} registrationName Name of listener (e.g. `onClick`).2745*/2746deleteListener: function(id, registrationName) {2747var bankForRegistrationName = listenerBank[registrationName];2748if (bankForRegistrationName) {2749delete bankForRegistrationName[id];2750}2751},27522753/**2754* Deletes all listeners for the DOM element with the supplied ID.2755*2756* @param {string} id ID of the DOM element.2757*/2758deleteAllListeners: function(id) {2759for (var registrationName in listenerBank) {2760delete listenerBank[registrationName][id];2761}2762},27632764/**2765* Allows registered plugins an opportunity to extract events from top-level2766* native browser events.2767*2768* @param {string} topLevelType Record from `EventConstants`.2769* @param {DOMEventTarget} topLevelTarget The listening component root node.2770* @param {string} topLevelTargetID ID of `topLevelTarget`.2771* @param {object} nativeEvent Native browser event.2772* @return {*} An accumulation of synthetic events.2773* @internal2774*/2775extractEvents: function(2776topLevelType,2777topLevelTarget,2778topLevelTargetID,2779nativeEvent) {2780var events;2781var plugins = EventPluginRegistry.plugins;2782for (var i = 0, l = plugins.length; i < l; i++) {2783// Not every plugin in the ordering may be loaded at runtime.2784var possiblePlugin = plugins[i];2785if (possiblePlugin) {2786var extractedEvents = possiblePlugin.extractEvents(2787topLevelType,2788topLevelTarget,2789topLevelTargetID,2790nativeEvent2791);2792if (extractedEvents) {2793events = accumulateInto(events, extractedEvents);2794}2795}2796}2797return events;2798},27992800/**2801* Enqueues a synthetic event that should be dispatched when2802* `processEventQueue` is invoked.2803*2804* @param {*} events An accumulation of synthetic events.2805* @internal2806*/2807enqueueEvents: function(events) {2808if (events) {2809eventQueue = accumulateInto(eventQueue, events);2810}2811},28122813/**2814* Dispatches all synthetic events on the event queue.2815*2816* @internal2817*/2818processEventQueue: function() {2819// Set `eventQueue` to null before processing it so that we can tell if more2820// events get enqueued while processing.2821var processingEventQueue = eventQueue;2822eventQueue = null;2823forEachAccumulated(processingEventQueue, executeDispatchesAndRelease);2824("production" !== process.env.NODE_ENV ? invariant(2825!eventQueue,2826'processEventQueue(): Additional events were enqueued while processing ' +2827'an event queue. Support for this has not yet been implemented.'2828) : invariant(!eventQueue));2829},28302831/**2832* These are needed for tests only. Do not use!2833*/2834__purge: function() {2835listenerBank = {};2836},28372838__getListenerBank: function() {2839return listenerBank;2840}28412842};28432844module.exports = EventPluginHub;284528462847}).call(this,require("FWaASH"))2848},{"./EventPluginRegistry":18,"./EventPluginUtils":19,"./accumulateInto":106,"./forEachAccumulated":121,"./invariant":136,"FWaASH":1}],18:[function(require,module,exports){2849(function (process){2850/**2851* Copyright 2013-2015, Facebook, Inc.2852* All rights reserved.2853*2854* This source code is licensed under the BSD-style license found in the2855* LICENSE file in the root directory of this source tree. An additional grant2856* of patent rights can be found in the PATENTS file in the same directory.2857*2858* @providesModule EventPluginRegistry2859* @typechecks static-only2860*/28612862'use strict';28632864var invariant = require("./invariant");28652866/**2867* Injectable ordering of event plugins.2868*/2869var EventPluginOrder = null;28702871/**2872* Injectable mapping from names to event plugin modules.2873*/2874var namesToPlugins = {};28752876/**2877* Recomputes the plugin list using the injected plugins and plugin ordering.2878*2879* @private2880*/2881function recomputePluginOrdering() {2882if (!EventPluginOrder) {2883// Wait until an `EventPluginOrder` is injected.2884return;2885}2886for (var pluginName in namesToPlugins) {2887var PluginModule = namesToPlugins[pluginName];2888var pluginIndex = EventPluginOrder.indexOf(pluginName);2889("production" !== process.env.NODE_ENV ? invariant(2890pluginIndex > -1,2891'EventPluginRegistry: Cannot inject event plugins that do not exist in ' +2892'the plugin ordering, `%s`.',2893pluginName2894) : invariant(pluginIndex > -1));2895if (EventPluginRegistry.plugins[pluginIndex]) {2896continue;2897}2898("production" !== process.env.NODE_ENV ? invariant(2899PluginModule.extractEvents,2900'EventPluginRegistry: Event plugins must implement an `extractEvents` ' +2901'method, but `%s` does not.',2902pluginName2903) : invariant(PluginModule.extractEvents));2904EventPluginRegistry.plugins[pluginIndex] = PluginModule;2905var publishedEvents = PluginModule.eventTypes;2906for (var eventName in publishedEvents) {2907("production" !== process.env.NODE_ENV ? invariant(2908publishEventForPlugin(2909publishedEvents[eventName],2910PluginModule,2911eventName2912),2913'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.',2914eventName,2915pluginName2916) : invariant(publishEventForPlugin(2917publishedEvents[eventName],2918PluginModule,2919eventName2920)));2921}2922}2923}29242925/**2926* Publishes an event so that it can be dispatched by the supplied plugin.2927*2928* @param {object} dispatchConfig Dispatch configuration for the event.2929* @param {object} PluginModule Plugin publishing the event.2930* @return {boolean} True if the event was successfully published.2931* @private2932*/2933function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {2934("production" !== process.env.NODE_ENV ? invariant(2935!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName),2936'EventPluginHub: More than one plugin attempted to publish the same ' +2937'event name, `%s`.',2938eventName2939) : invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName)));2940EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;29412942var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;2943if (phasedRegistrationNames) {2944for (var phaseName in phasedRegistrationNames) {2945if (phasedRegistrationNames.hasOwnProperty(phaseName)) {2946var phasedRegistrationName = phasedRegistrationNames[phaseName];2947publishRegistrationName(2948phasedRegistrationName,2949PluginModule,2950eventName2951);2952}2953}2954return true;2955} else if (dispatchConfig.registrationName) {2956publishRegistrationName(2957dispatchConfig.registrationName,2958PluginModule,2959eventName2960);2961return true;2962}2963return false;2964}29652966/**2967* Publishes a registration name that is used to identify dispatched events and2968* can be used with `EventPluginHub.putListener` to register listeners.2969*2970* @param {string} registrationName Registration name to add.2971* @param {object} PluginModule Plugin publishing the event.2972* @private2973*/2974function publishRegistrationName(registrationName, PluginModule, eventName) {2975("production" !== process.env.NODE_ENV ? invariant(2976!EventPluginRegistry.registrationNameModules[registrationName],2977'EventPluginHub: More than one plugin attempted to publish the same ' +2978'registration name, `%s`.',2979registrationName2980) : invariant(!EventPluginRegistry.registrationNameModules[registrationName]));2981EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;2982EventPluginRegistry.registrationNameDependencies[registrationName] =2983PluginModule.eventTypes[eventName].dependencies;2984}29852986/**2987* Registers plugins so that they can extract and dispatch events.2988*2989* @see {EventPluginHub}2990*/2991var EventPluginRegistry = {29922993/**2994* Ordered list of injected plugins.2995*/2996plugins: [],29972998/**2999* Mapping from event name to dispatch config3000*/3001eventNameDispatchConfigs: {},30023003/**3004* Mapping from registration name to plugin module3005*/3006registrationNameModules: {},30073008/**3009* Mapping from registration name to event name3010*/3011registrationNameDependencies: {},30123013/**3014* Injects an ordering of plugins (by plugin name). This allows the ordering3015* to be decoupled from injection of the actual plugins so that ordering is3016* always deterministic regardless of packaging, on-the-fly injection, etc.3017*3018* @param {array} InjectedEventPluginOrder3019* @internal3020* @see {EventPluginHub.injection.injectEventPluginOrder}3021*/3022injectEventPluginOrder: function(InjectedEventPluginOrder) {3023("production" !== process.env.NODE_ENV ? invariant(3024!EventPluginOrder,3025'EventPluginRegistry: Cannot inject event plugin ordering more than ' +3026'once. You are likely trying to load more than one copy of React.'3027) : invariant(!EventPluginOrder));3028// Clone the ordering so it cannot be dynamically mutated.3029EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);3030recomputePluginOrdering();3031},30323033/**3034* Injects plugins to be used by `EventPluginHub`. The plugin names must be3035* in the ordering injected by `injectEventPluginOrder`.3036*3037* Plugins can be injected as part of page initialization or on-the-fly.3038*3039* @param {object} injectedNamesToPlugins Map from names to plugin modules.3040* @internal3041* @see {EventPluginHub.injection.injectEventPluginsByName}3042*/3043injectEventPluginsByName: function(injectedNamesToPlugins) {3044var isOrderingDirty = false;3045for (var pluginName in injectedNamesToPlugins) {3046if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {3047continue;3048}3049var PluginModule = injectedNamesToPlugins[pluginName];3050if (!namesToPlugins.hasOwnProperty(pluginName) ||3051namesToPlugins[pluginName] !== PluginModule) {3052("production" !== process.env.NODE_ENV ? invariant(3053!namesToPlugins[pluginName],3054'EventPluginRegistry: Cannot inject two different event plugins ' +3055'using the same name, `%s`.',3056pluginName3057) : invariant(!namesToPlugins[pluginName]));3058namesToPlugins[pluginName] = PluginModule;3059isOrderingDirty = true;3060}3061}3062if (isOrderingDirty) {3063recomputePluginOrdering();3064}3065},30663067/**3068* Looks up the plugin for the supplied event.3069*3070* @param {object} event A synthetic event.3071* @return {?object} The plugin that created the supplied event.3072* @internal3073*/3074getPluginModuleForEvent: function(event) {3075var dispatchConfig = event.dispatchConfig;3076if (dispatchConfig.registrationName) {3077return EventPluginRegistry.registrationNameModules[3078dispatchConfig.registrationName3079] || null;3080}3081for (var phase in dispatchConfig.phasedRegistrationNames) {3082if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {3083continue;3084}3085var PluginModule = EventPluginRegistry.registrationNameModules[3086dispatchConfig.phasedRegistrationNames[phase]3087];3088if (PluginModule) {3089return PluginModule;3090}3091}3092return null;3093},30943095/**3096* Exposed for unit testing.3097* @private3098*/3099_resetEventPlugins: function() {3100EventPluginOrder = null;3101for (var pluginName in namesToPlugins) {3102if (namesToPlugins.hasOwnProperty(pluginName)) {3103delete namesToPlugins[pluginName];3104}3105}3106EventPluginRegistry.plugins.length = 0;31073108var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;3109for (var eventName in eventNameDispatchConfigs) {3110if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {3111delete eventNameDispatchConfigs[eventName];3112}3113}31143115var registrationNameModules = EventPluginRegistry.registrationNameModules;3116for (var registrationName in registrationNameModules) {3117if (registrationNameModules.hasOwnProperty(registrationName)) {3118delete registrationNameModules[registrationName];3119}3120}3121}31223123};31243125module.exports = EventPluginRegistry;312631273128}).call(this,require("FWaASH"))3129},{"./invariant":136,"FWaASH":1}],19:[function(require,module,exports){3130(function (process){3131/**3132* Copyright 2013-2015, Facebook, Inc.3133* All rights reserved.3134*3135* This source code is licensed under the BSD-style license found in the3136* LICENSE file in the root directory of this source tree. An additional grant3137* of patent rights can be found in the PATENTS file in the same directory.3138*3139* @providesModule EventPluginUtils3140*/31413142'use strict';31433144var EventConstants = require("./EventConstants");31453146var invariant = require("./invariant");31473148/**3149* Injected dependencies:3150*/31513152/**3153* - `Mount`: [required] Module that can convert between React dom IDs and3154* actual node references.3155*/3156var injection = {3157Mount: null,3158injectMount: function(InjectedMount) {3159injection.Mount = InjectedMount;3160if ("production" !== process.env.NODE_ENV) {3161("production" !== process.env.NODE_ENV ? invariant(3162InjectedMount && InjectedMount.getNode,3163'EventPluginUtils.injection.injectMount(...): Injected Mount module ' +3164'is missing getNode.'3165) : invariant(InjectedMount && InjectedMount.getNode));3166}3167}3168};31693170var topLevelTypes = EventConstants.topLevelTypes;31713172function isEndish(topLevelType) {3173return topLevelType === topLevelTypes.topMouseUp ||3174topLevelType === topLevelTypes.topTouchEnd ||3175topLevelType === topLevelTypes.topTouchCancel;3176}31773178function isMoveish(topLevelType) {3179return topLevelType === topLevelTypes.topMouseMove ||3180topLevelType === topLevelTypes.topTouchMove;3181}3182function isStartish(topLevelType) {3183return topLevelType === topLevelTypes.topMouseDown ||3184topLevelType === topLevelTypes.topTouchStart;3185}318631873188var validateEventDispatches;3189if ("production" !== process.env.NODE_ENV) {3190validateEventDispatches = function(event) {3191var dispatchListeners = event._dispatchListeners;3192var dispatchIDs = event._dispatchIDs;31933194var listenersIsArr = Array.isArray(dispatchListeners);3195var idsIsArr = Array.isArray(dispatchIDs);3196var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;3197var listenersLen = listenersIsArr ?3198dispatchListeners.length :3199dispatchListeners ? 1 : 0;32003201("production" !== process.env.NODE_ENV ? invariant(3202idsIsArr === listenersIsArr && IDsLen === listenersLen,3203'EventPluginUtils: Invalid `event`.'3204) : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen));3205};3206}32073208/**3209* Invokes `cb(event, listener, id)`. Avoids using call if no scope is3210* provided. The `(listener,id)` pair effectively forms the "dispatch" but are3211* kept separate to conserve memory.3212*/3213function forEachEventDispatch(event, cb) {3214var dispatchListeners = event._dispatchListeners;3215var dispatchIDs = event._dispatchIDs;3216if ("production" !== process.env.NODE_ENV) {3217validateEventDispatches(event);3218}3219if (Array.isArray(dispatchListeners)) {3220for (var i = 0; i < dispatchListeners.length; i++) {3221if (event.isPropagationStopped()) {3222break;3223}3224// Listeners and IDs are two parallel arrays that are always in sync.3225cb(event, dispatchListeners[i], dispatchIDs[i]);3226}3227} else if (dispatchListeners) {3228cb(event, dispatchListeners, dispatchIDs);3229}3230}32313232/**3233* Default implementation of PluginModule.executeDispatch().3234* @param {SyntheticEvent} SyntheticEvent to handle3235* @param {function} Application-level callback3236* @param {string} domID DOM id to pass to the callback.3237*/3238function executeDispatch(event, listener, domID) {3239event.currentTarget = injection.Mount.getNode(domID);3240var returnValue = listener(event, domID);3241event.currentTarget = null;3242return returnValue;3243}32443245/**3246* Standard/simple iteration through an event's collected dispatches.3247*/3248function executeDispatchesInOrder(event, cb) {3249forEachEventDispatch(event, cb);3250event._dispatchListeners = null;3251event._dispatchIDs = null;3252}32533254/**3255* Standard/simple iteration through an event's collected dispatches, but stops3256* at the first dispatch execution returning true, and returns that id.3257*3258* @return id of the first dispatch execution who's listener returns true, or3259* null if no listener returned true.3260*/3261function executeDispatchesInOrderStopAtTrueImpl(event) {3262var dispatchListeners = event._dispatchListeners;3263var dispatchIDs = event._dispatchIDs;3264if ("production" !== process.env.NODE_ENV) {3265validateEventDispatches(event);3266}3267if (Array.isArray(dispatchListeners)) {3268for (var i = 0; i < dispatchListeners.length; i++) {3269if (event.isPropagationStopped()) {3270break;3271}3272// Listeners and IDs are two parallel arrays that are always in sync.3273if (dispatchListeners[i](event, dispatchIDs[i])) {3274return dispatchIDs[i];3275}3276}3277} else if (dispatchListeners) {3278if (dispatchListeners(event, dispatchIDs)) {3279return dispatchIDs;3280}3281}3282return null;3283}32843285/**3286* @see executeDispatchesInOrderStopAtTrueImpl3287*/3288function executeDispatchesInOrderStopAtTrue(event) {3289var ret = executeDispatchesInOrderStopAtTrueImpl(event);3290event._dispatchIDs = null;3291event._dispatchListeners = null;3292return ret;3293}32943295/**3296* Execution of a "direct" dispatch - there must be at most one dispatch3297* accumulated on the event or it is considered an error. It doesn't really make3298* sense for an event with multiple dispatches (bubbled) to keep track of the3299* return values at each dispatch execution, but it does tend to make sense when3300* dealing with "direct" dispatches.3301*3302* @return The return value of executing the single dispatch.3303*/3304function executeDirectDispatch(event) {3305if ("production" !== process.env.NODE_ENV) {3306validateEventDispatches(event);3307}3308var dispatchListener = event._dispatchListeners;3309var dispatchID = event._dispatchIDs;3310("production" !== process.env.NODE_ENV ? invariant(3311!Array.isArray(dispatchListener),3312'executeDirectDispatch(...): Invalid `event`.'3313) : invariant(!Array.isArray(dispatchListener)));3314var res = dispatchListener ?3315dispatchListener(event, dispatchID) :3316null;3317event._dispatchListeners = null;3318event._dispatchIDs = null;3319return res;3320}33213322/**3323* @param {SyntheticEvent} event3324* @return {bool} True iff number of dispatches accumulated is greater than 0.3325*/3326function hasDispatches(event) {3327return !!event._dispatchListeners;3328}33293330/**3331* General utilities that are useful in creating custom Event Plugins.3332*/3333var EventPluginUtils = {3334isEndish: isEndish,3335isMoveish: isMoveish,3336isStartish: isStartish,33373338executeDirectDispatch: executeDirectDispatch,3339executeDispatch: executeDispatch,3340executeDispatchesInOrder: executeDispatchesInOrder,3341executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,3342hasDispatches: hasDispatches,3343injection: injection,3344useTouchEvents: false3345};33463347module.exports = EventPluginUtils;334833493350}).call(this,require("FWaASH"))3351},{"./EventConstants":15,"./invariant":136,"FWaASH":1}],20:[function(require,module,exports){3352(function (process){3353/**3354* Copyright 2013-2015, Facebook, Inc.3355* All rights reserved.3356*3357* This source code is licensed under the BSD-style license found in the3358* LICENSE file in the root directory of this source tree. An additional grant3359* of patent rights can be found in the PATENTS file in the same directory.3360*3361* @providesModule EventPropagators3362*/33633364'use strict';33653366var EventConstants = require("./EventConstants");3367var EventPluginHub = require("./EventPluginHub");33683369var accumulateInto = require("./accumulateInto");3370var forEachAccumulated = require("./forEachAccumulated");33713372var PropagationPhases = EventConstants.PropagationPhases;3373var getListener = EventPluginHub.getListener;33743375/**3376* Some event types have a notion of different registration names for different3377* "phases" of propagation. This finds listeners by a given phase.3378*/3379function listenerAtPhase(id, event, propagationPhase) {3380var registrationName =3381event.dispatchConfig.phasedRegistrationNames[propagationPhase];3382return getListener(id, registrationName);3383}33843385/**3386* Tags a `SyntheticEvent` with dispatched listeners. Creating this function3387* here, allows us to not have to bind or create functions for each event.3388* Mutating the event's members allows us to not have to create a wrapping3389* "dispatch" object that pairs the event with the listener.3390*/3391function accumulateDirectionalDispatches(domID, upwards, event) {3392if ("production" !== process.env.NODE_ENV) {3393if (!domID) {3394throw new Error('Dispatching id must not be null');3395}3396}3397var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;3398var listener = listenerAtPhase(domID, event, phase);3399if (listener) {3400event._dispatchListeners =3401accumulateInto(event._dispatchListeners, listener);3402event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);3403}3404}34053406/**3407* Collect dispatches (must be entirely collected before dispatching - see unit3408* tests). Lazily allocate the array to conserve memory. We must loop through3409* each event and perform the traversal for each one. We can not perform a3410* single traversal for the entire collection of events because each event may3411* have a different target.3412*/3413function accumulateTwoPhaseDispatchesSingle(event) {3414if (event && event.dispatchConfig.phasedRegistrationNames) {3415EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(3416event.dispatchMarker,3417accumulateDirectionalDispatches,3418event3419);3420}3421}342234233424/**3425* Accumulates without regard to direction, does not look for phased3426* registration names. Same as `accumulateDirectDispatchesSingle` but without3427* requiring that the `dispatchMarker` be the same as the dispatched ID.3428*/3429function accumulateDispatches(id, ignoredDirection, event) {3430if (event && event.dispatchConfig.registrationName) {3431var registrationName = event.dispatchConfig.registrationName;3432var listener = getListener(id, registrationName);3433if (listener) {3434event._dispatchListeners =3435accumulateInto(event._dispatchListeners, listener);3436event._dispatchIDs = accumulateInto(event._dispatchIDs, id);3437}3438}3439}34403441/**3442* Accumulates dispatches on an `SyntheticEvent`, but only for the3443* `dispatchMarker`.3444* @param {SyntheticEvent} event3445*/3446function accumulateDirectDispatchesSingle(event) {3447if (event && event.dispatchConfig.registrationName) {3448accumulateDispatches(event.dispatchMarker, null, event);3449}3450}34513452function accumulateTwoPhaseDispatches(events) {3453forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);3454}34553456function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {3457EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(3458fromID,3459toID,3460accumulateDispatches,3461leave,3462enter3463);3464}346534663467function accumulateDirectDispatches(events) {3468forEachAccumulated(events, accumulateDirectDispatchesSingle);3469}3470347134723473/**3474* A small set of propagation patterns, each of which will accept a small amount3475* of information, and generate a set of "dispatch ready event objects" - which3476* are sets of events that have already been annotated with a set of dispatched3477* listener functions/ids. The API is designed this way to discourage these3478* propagation strategies from actually executing the dispatches, since we3479* always want to collect the entire set of dispatches before executing event a3480* single one.3481*3482* @constructor EventPropagators3483*/3484var EventPropagators = {3485accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,3486accumulateDirectDispatches: accumulateDirectDispatches,3487accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches3488};34893490module.exports = EventPropagators;349134923493}).call(this,require("FWaASH"))3494},{"./EventConstants":15,"./EventPluginHub":17,"./accumulateInto":106,"./forEachAccumulated":121,"FWaASH":1}],21:[function(require,module,exports){3495/**3496* Copyright 2013-2015, Facebook, Inc.3497* All rights reserved.3498*3499* This source code is licensed under the BSD-style license found in the3500* LICENSE file in the root directory of this source tree. An additional grant3501* of patent rights can be found in the PATENTS file in the same directory.3502*3503* @providesModule ExecutionEnvironment3504*/35053506/*jslint evil: true */35073508"use strict";35093510var canUseDOM = !!(3511(typeof window !== 'undefined' &&3512window.document && window.document.createElement)3513);35143515/**3516* Simple, lightweight module assisting with the detection and context of3517* Worker. Helps avoid circular dependencies and allows code to reason about3518* whether or not they are in a Worker, even if they never include the main3519* `ReactWorker` dependency.3520*/3521var ExecutionEnvironment = {35223523canUseDOM: canUseDOM,35243525canUseWorkers: typeof Worker !== 'undefined',35263527canUseEventListeners:3528canUseDOM && !!(window.addEventListener || window.attachEvent),35293530canUseViewport: canUseDOM && !!window.screen,35313532isInWorker: !canUseDOM // For now, this is true - might change in the future.35333534};35353536module.exports = ExecutionEnvironment;353735383539},{}],22:[function(require,module,exports){3540/**3541* Copyright 2013-2015, Facebook, Inc.3542* All rights reserved.3543*3544* This source code is licensed under the BSD-style license found in the3545* LICENSE file in the root directory of this source tree. An additional grant3546* of patent rights can be found in the PATENTS file in the same directory.3547*3548* @providesModule FallbackCompositionState3549* @typechecks static-only3550*/35513552'use strict';35533554var PooledClass = require("./PooledClass");35553556var assign = require("./Object.assign");3557var getTextContentAccessor = require("./getTextContentAccessor");35583559/**3560* This helper class stores information about text content of a target node,3561* allowing comparison of content before and after a given event.3562*3563* Identify the node where selection currently begins, then observe3564* both its text content and its current position in the DOM. Since the3565* browser may natively replace the target node during composition, we can3566* use its position to find its replacement.3567*3568* @param {DOMEventTarget} root3569*/3570function FallbackCompositionState(root) {3571this._root = root;3572this._startText = this.getText();3573this._fallbackText = null;3574}35753576assign(FallbackCompositionState.prototype, {3577/**3578* Get current text of input.3579*3580* @return {string}3581*/3582getText: function() {3583if ('value' in this._root) {3584return this._root.value;3585}3586return this._root[getTextContentAccessor()];3587},35883589/**3590* Determine the differing substring between the initially stored3591* text content and the current content.3592*3593* @return {string}3594*/3595getData: function() {3596if (this._fallbackText) {3597return this._fallbackText;3598}35993600var start;3601var startValue = this._startText;3602var startLength = startValue.length;3603var end;3604var endValue = this.getText();3605var endLength = endValue.length;36063607for (start = 0; start < startLength; start++) {3608if (startValue[start] !== endValue[start]) {3609break;3610}3611}36123613var minEnd = startLength - start;3614for (end = 1; end <= minEnd; end++) {3615if (startValue[startLength - end] !== endValue[endLength - end]) {3616break;3617}3618}36193620var sliceTail = end > 1 ? 1 - end : undefined;3621this._fallbackText = endValue.slice(start, sliceTail);3622return this._fallbackText;3623}3624});36253626PooledClass.addPoolingTo(FallbackCompositionState);36273628module.exports = FallbackCompositionState;362936303631},{"./Object.assign":27,"./PooledClass":28,"./getTextContentAccessor":131}],23:[function(require,module,exports){3632/**3633* Copyright 2013-2015, Facebook, Inc.3634* All rights reserved.3635*3636* This source code is licensed under the BSD-style license found in the3637* LICENSE file in the root directory of this source tree. An additional grant3638* of patent rights can be found in the PATENTS file in the same directory.3639*3640* @providesModule HTMLDOMPropertyConfig3641*/36423643/*jslint bitwise: true*/36443645'use strict';36463647var DOMProperty = require("./DOMProperty");3648var ExecutionEnvironment = require("./ExecutionEnvironment");36493650var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;3651var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;3652var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;3653var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;3654var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;3655var HAS_POSITIVE_NUMERIC_VALUE =3656DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;3657var HAS_OVERLOADED_BOOLEAN_VALUE =3658DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;36593660var hasSVG;3661if (ExecutionEnvironment.canUseDOM) {3662var implementation = document.implementation;3663hasSVG = (3664implementation &&3665implementation.hasFeature &&3666implementation.hasFeature(3667'http://www.w3.org/TR/SVG11/feature#BasicStructure',3668'1.1'3669)3670);3671}367236733674var HTMLDOMPropertyConfig = {3675isCustomAttribute: RegExp.prototype.test.bind(3676/^(data|aria)-[a-z_][a-z\d_.\-]*$/3677),3678Properties: {3679/**3680* Standard Properties3681*/3682accept: null,3683acceptCharset: null,3684accessKey: null,3685action: null,3686allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,3687allowTransparency: MUST_USE_ATTRIBUTE,3688alt: null,3689async: HAS_BOOLEAN_VALUE,3690autoComplete: null,3691// autoFocus is polyfilled/normalized by AutoFocusMixin3692// autoFocus: HAS_BOOLEAN_VALUE,3693autoPlay: HAS_BOOLEAN_VALUE,3694cellPadding: null,3695cellSpacing: null,3696charSet: MUST_USE_ATTRIBUTE,3697checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3698classID: MUST_USE_ATTRIBUTE,3699// To set className on SVG elements, it's necessary to use .setAttribute;3700// this works on HTML elements too in all browsers except IE8. Conveniently,3701// IE8 doesn't support SVG and so we can simply use the attribute in3702// browsers that support SVG and the property in browsers that don't,3703// regardless of whether the element is HTML or SVG.3704className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,3705cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,3706colSpan: null,3707content: null,3708contentEditable: null,3709contextMenu: MUST_USE_ATTRIBUTE,3710controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3711coords: null,3712crossOrigin: null,3713data: null, // For `<object />` acts as `src`.3714dateTime: MUST_USE_ATTRIBUTE,3715defer: HAS_BOOLEAN_VALUE,3716dir: null,3717disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,3718download: HAS_OVERLOADED_BOOLEAN_VALUE,3719draggable: null,3720encType: null,3721form: MUST_USE_ATTRIBUTE,3722formAction: MUST_USE_ATTRIBUTE,3723formEncType: MUST_USE_ATTRIBUTE,3724formMethod: MUST_USE_ATTRIBUTE,3725formNoValidate: HAS_BOOLEAN_VALUE,3726formTarget: MUST_USE_ATTRIBUTE,3727frameBorder: MUST_USE_ATTRIBUTE,3728headers: null,3729height: MUST_USE_ATTRIBUTE,3730hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,3731href: null,3732hrefLang: null,3733htmlFor: null,3734httpEquiv: null,3735icon: null,3736id: MUST_USE_PROPERTY,3737label: null,3738lang: null,3739list: MUST_USE_ATTRIBUTE,3740loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3741manifest: MUST_USE_ATTRIBUTE,3742marginHeight: null,3743marginWidth: null,3744max: null,3745maxLength: MUST_USE_ATTRIBUTE,3746media: MUST_USE_ATTRIBUTE,3747mediaGroup: null,3748method: null,3749min: null,3750multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3751muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3752name: null,3753noValidate: HAS_BOOLEAN_VALUE,3754open: HAS_BOOLEAN_VALUE,3755pattern: null,3756placeholder: null,3757poster: null,3758preload: null,3759radioGroup: null,3760readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3761rel: null,3762required: HAS_BOOLEAN_VALUE,3763role: MUST_USE_ATTRIBUTE,3764rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,3765rowSpan: null,3766sandbox: null,3767scope: null,3768scrolling: null,3769seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,3770selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,3771shape: null,3772size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,3773sizes: MUST_USE_ATTRIBUTE,3774span: HAS_POSITIVE_NUMERIC_VALUE,3775spellCheck: null,3776src: null,3777srcDoc: MUST_USE_PROPERTY,3778srcSet: MUST_USE_ATTRIBUTE,3779start: HAS_NUMERIC_VALUE,3780step: null,3781style: null,3782tabIndex: null,3783target: null,3784title: null,3785type: null,3786useMap: null,3787value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,3788width: MUST_USE_ATTRIBUTE,3789wmode: MUST_USE_ATTRIBUTE,37903791/**3792* Non-standard Properties3793*/3794// autoCapitalize and autoCorrect are supported in Mobile Safari for3795// keyboard hints.3796autoCapitalize: null,3797autoCorrect: null,3798// itemProp, itemScope, itemType are for3799// Microdata support. See http://schema.org/docs/gs.html3800itemProp: MUST_USE_ATTRIBUTE,3801itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,3802itemType: MUST_USE_ATTRIBUTE,3803// itemID and itemRef are for Microdata support as well but3804// only specified in the the WHATWG spec document. See3805// https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api3806itemID: MUST_USE_ATTRIBUTE,3807itemRef: MUST_USE_ATTRIBUTE,3808// property is supported for OpenGraph in meta tags.3809property: null3810},3811DOMAttributeNames: {3812acceptCharset: 'accept-charset',3813className: 'class',3814htmlFor: 'for',3815httpEquiv: 'http-equiv'3816},3817DOMPropertyNames: {3818autoCapitalize: 'autocapitalize',3819autoComplete: 'autocomplete',3820autoCorrect: 'autocorrect',3821autoFocus: 'autofocus',3822autoPlay: 'autoplay',3823// `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.3824// http://www.w3.org/TR/html5/forms.html#dom-fs-encoding3825encType: 'encoding',3826hrefLang: 'hreflang',3827radioGroup: 'radiogroup',3828spellCheck: 'spellcheck',3829srcDoc: 'srcdoc',3830srcSet: 'srcset'3831}3832};38333834module.exports = HTMLDOMPropertyConfig;383538363837},{"./DOMProperty":10,"./ExecutionEnvironment":21}],24:[function(require,module,exports){3838(function (process){3839/**3840* Copyright 2013-2015, Facebook, Inc.3841* All rights reserved.3842*3843* This source code is licensed under the BSD-style license found in the3844* LICENSE file in the root directory of this source tree. An additional grant3845* of patent rights can be found in the PATENTS file in the same directory.3846*3847* @providesModule LinkedValueUtils3848* @typechecks static-only3849*/38503851'use strict';38523853var ReactPropTypes = require("./ReactPropTypes");38543855var invariant = require("./invariant");38563857var hasReadOnlyValue = {3858'button': true,3859'checkbox': true,3860'image': true,3861'hidden': true,3862'radio': true,3863'reset': true,3864'submit': true3865};38663867function _assertSingleLink(input) {3868("production" !== process.env.NODE_ENV ? invariant(3869input.props.checkedLink == null || input.props.valueLink == null,3870'Cannot provide a checkedLink and a valueLink. If you want to use ' +3871'checkedLink, you probably don\'t want to use valueLink and vice versa.'3872) : invariant(input.props.checkedLink == null || input.props.valueLink == null));3873}3874function _assertValueLink(input) {3875_assertSingleLink(input);3876("production" !== process.env.NODE_ENV ? invariant(3877input.props.value == null && input.props.onChange == null,3878'Cannot provide a valueLink and a value or onChange event. If you want ' +3879'to use value or onChange, you probably don\'t want to use valueLink.'3880) : invariant(input.props.value == null && input.props.onChange == null));3881}38823883function _assertCheckedLink(input) {3884_assertSingleLink(input);3885("production" !== process.env.NODE_ENV ? invariant(3886input.props.checked == null && input.props.onChange == null,3887'Cannot provide a checkedLink and a checked property or onChange event. ' +3888'If you want to use checked or onChange, you probably don\'t want to ' +3889'use checkedLink'3890) : invariant(input.props.checked == null && input.props.onChange == null));3891}38923893/**3894* @param {SyntheticEvent} e change event to handle3895*/3896function _handleLinkedValueChange(e) {3897/*jshint validthis:true */3898this.props.valueLink.requestChange(e.target.value);3899}39003901/**3902* @param {SyntheticEvent} e change event to handle3903*/3904function _handleLinkedCheckChange(e) {3905/*jshint validthis:true */3906this.props.checkedLink.requestChange(e.target.checked);3907}39083909/**3910* Provide a linked `value` attribute for controlled forms. You should not use3911* this outside of the ReactDOM controlled form components.3912*/3913var LinkedValueUtils = {3914Mixin: {3915propTypes: {3916value: function(props, propName, componentName) {3917if (!props[propName] ||3918hasReadOnlyValue[props.type] ||3919props.onChange ||3920props.readOnly ||3921props.disabled) {3922return null;3923}3924return new Error(3925'You provided a `value` prop to a form field without an ' +3926'`onChange` handler. This will render a read-only field. If ' +3927'the field should be mutable use `defaultValue`. Otherwise, ' +3928'set either `onChange` or `readOnly`.'3929);3930},3931checked: function(props, propName, componentName) {3932if (!props[propName] ||3933props.onChange ||3934props.readOnly ||3935props.disabled) {3936return null;3937}3938return new Error(3939'You provided a `checked` prop to a form field without an ' +3940'`onChange` handler. This will render a read-only field. If ' +3941'the field should be mutable use `defaultChecked`. Otherwise, ' +3942'set either `onChange` or `readOnly`.'3943);3944},3945onChange: ReactPropTypes.func3946}3947},39483949/**3950* @param {ReactComponent} input Form component3951* @return {*} current value of the input either from value prop or link.3952*/3953getValue: function(input) {3954if (input.props.valueLink) {3955_assertValueLink(input);3956return input.props.valueLink.value;3957}3958return input.props.value;3959},39603961/**3962* @param {ReactComponent} input Form component3963* @return {*} current checked status of the input either from checked prop3964* or link.3965*/3966getChecked: function(input) {3967if (input.props.checkedLink) {3968_assertCheckedLink(input);3969return input.props.checkedLink.value;3970}3971return input.props.checked;3972},39733974/**3975* @param {ReactComponent} input Form component3976* @return {function} change callback either from onChange prop or link.3977*/3978getOnChange: function(input) {3979if (input.props.valueLink) {3980_assertValueLink(input);3981return _handleLinkedValueChange;3982} else if (input.props.checkedLink) {3983_assertCheckedLink(input);3984return _handleLinkedCheckChange;3985}3986return input.props.onChange;3987}3988};39893990module.exports = LinkedValueUtils;399139923993}).call(this,require("FWaASH"))3994},{"./ReactPropTypes":79,"./invariant":136,"FWaASH":1}],25:[function(require,module,exports){3995(function (process){3996/**3997* Copyright 2014-2015, Facebook, Inc.3998* All rights reserved.3999*4000* This source code is licensed under the BSD-style license found in the4001* LICENSE file in the root directory of this source tree. An additional grant4002* of patent rights can be found in the PATENTS file in the same directory.4003*4004* @providesModule LocalEventTrapMixin4005*/40064007'use strict';40084009var ReactBrowserEventEmitter = require("./ReactBrowserEventEmitter");40104011var accumulateInto = require("./accumulateInto");4012var forEachAccumulated = require("./forEachAccumulated");4013var invariant = require("./invariant");40144015function remove(event) {4016event.remove();4017}40184019var LocalEventTrapMixin = {4020trapBubbledEvent:function(topLevelType, handlerBaseName) {4021("production" !== process.env.NODE_ENV ? invariant(this.isMounted(), 'Must be mounted to trap events') : invariant(this.isMounted()));4022// If a component renders to null or if another component fatals and causes4023// the state of the tree to be corrupted, `node` here can be null.4024var node = this.getDOMNode();4025("production" !== process.env.NODE_ENV ? invariant(4026node,4027'LocalEventTrapMixin.trapBubbledEvent(...): Requires node to be rendered.'4028) : invariant(node));4029var listener = ReactBrowserEventEmitter.trapBubbledEvent(4030topLevelType,4031handlerBaseName,4032node4033);4034this._localEventListeners =4035accumulateInto(this._localEventListeners, listener);4036},40374038// trapCapturedEvent would look nearly identical. We don't implement that4039// method because it isn't currently needed.40404041componentWillUnmount:function() {4042if (this._localEventListeners) {4043forEachAccumulated(this._localEventListeners, remove);4044}4045}4046};40474048module.exports = LocalEventTrapMixin;404940504051}).call(this,require("FWaASH"))4052},{"./ReactBrowserEventEmitter":31,"./accumulateInto":106,"./forEachAccumulated":121,"./invariant":136,"FWaASH":1}],26:[function(require,module,exports){4053/**4054* Copyright 2013-2015, Facebook, Inc.4055* All rights reserved.4056*4057* This source code is licensed under the BSD-style license found in the4058* LICENSE file in the root directory of this source tree. An additional grant4059* of patent rights can be found in the PATENTS file in the same directory.4060*4061* @providesModule MobileSafariClickEventPlugin4062* @typechecks static-only4063*/40644065'use strict';40664067var EventConstants = require("./EventConstants");40684069var emptyFunction = require("./emptyFunction");40704071var topLevelTypes = EventConstants.topLevelTypes;40724073/**4074* Mobile Safari does not fire properly bubble click events on non-interactive4075* elements, which means delegated click listeners do not fire. The workaround4076* for this bug involves attaching an empty click listener on the target node.4077*4078* This particular plugin works around the bug by attaching an empty click4079* listener on `touchstart` (which does fire on every element).4080*/4081var MobileSafariClickEventPlugin = {40824083eventTypes: null,40844085/**4086* @param {string} topLevelType Record from `EventConstants`.4087* @param {DOMEventTarget} topLevelTarget The listening component root node.4088* @param {string} topLevelTargetID ID of `topLevelTarget`.4089* @param {object} nativeEvent Native browser event.4090* @return {*} An accumulation of synthetic events.4091* @see {EventPluginHub.extractEvents}4092*/4093extractEvents: function(4094topLevelType,4095topLevelTarget,4096topLevelTargetID,4097nativeEvent) {4098if (topLevelType === topLevelTypes.topTouchStart) {4099var target = nativeEvent.target;4100if (target && !target.onclick) {4101target.onclick = emptyFunction;4102}4103}4104}41054106};41074108module.exports = MobileSafariClickEventPlugin;410941104111},{"./EventConstants":15,"./emptyFunction":115}],27:[function(require,module,exports){4112/**4113* Copyright 2014-2015, Facebook, Inc.4114* All rights reserved.4115*4116* This source code is licensed under the BSD-style license found in the4117* LICENSE file in the root directory of this source tree. An additional grant4118* of patent rights can be found in the PATENTS file in the same directory.4119*4120* @providesModule Object.assign4121*/41224123// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign41244125'use strict';41264127function assign(target, sources) {4128if (target == null) {4129throw new TypeError('Object.assign target cannot be null or undefined');4130}41314132var to = Object(target);4133var hasOwnProperty = Object.prototype.hasOwnProperty;41344135for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {4136var nextSource = arguments[nextIndex];4137if (nextSource == null) {4138continue;4139}41404141var from = Object(nextSource);41424143// We don't currently support accessors nor proxies. Therefore this4144// copy cannot throw. If we ever supported this then we must handle4145// exceptions and side-effects. We don't support symbols so they won't4146// be transferred.41474148for (var key in from) {4149if (hasOwnProperty.call(from, key)) {4150to[key] = from[key];4151}4152}4153}41544155return to;4156}41574158module.exports = assign;415941604161},{}],28:[function(require,module,exports){4162(function (process){4163/**4164* Copyright 2013-2015, Facebook, Inc.4165* All rights reserved.4166*4167* This source code is licensed under the BSD-style license found in the4168* LICENSE file in the root directory of this source tree. An additional grant4169* of patent rights can be found in the PATENTS file in the same directory.4170*4171* @providesModule PooledClass4172*/41734174'use strict';41754176var invariant = require("./invariant");41774178/**4179* Static poolers. Several custom versions for each potential number of4180* arguments. A completely generic pooler is easy to implement, but would4181* require accessing the `arguments` object. In each of these, `this` refers to4182* the Class itself, not an instance. If any others are needed, simply add them4183* here, or in their own files.4184*/4185var oneArgumentPooler = function(copyFieldsFrom) {4186var Klass = this;4187if (Klass.instancePool.length) {4188var instance = Klass.instancePool.pop();4189Klass.call(instance, copyFieldsFrom);4190return instance;4191} else {4192return new Klass(copyFieldsFrom);4193}4194};41954196var twoArgumentPooler = function(a1, a2) {4197var Klass = this;4198if (Klass.instancePool.length) {4199var instance = Klass.instancePool.pop();4200Klass.call(instance, a1, a2);4201return instance;4202} else {4203return new Klass(a1, a2);4204}4205};42064207var threeArgumentPooler = function(a1, a2, a3) {4208var Klass = this;4209if (Klass.instancePool.length) {4210var instance = Klass.instancePool.pop();4211Klass.call(instance, a1, a2, a3);4212return instance;4213} else {4214return new Klass(a1, a2, a3);4215}4216};42174218var fiveArgumentPooler = function(a1, a2, a3, a4, a5) {4219var Klass = this;4220if (Klass.instancePool.length) {4221var instance = Klass.instancePool.pop();4222Klass.call(instance, a1, a2, a3, a4, a5);4223return instance;4224} else {4225return new Klass(a1, a2, a3, a4, a5);4226}4227};42284229var standardReleaser = function(instance) {4230var Klass = this;4231("production" !== process.env.NODE_ENV ? invariant(4232instance instanceof Klass,4233'Trying to release an instance into a pool of a different type.'4234) : invariant(instance instanceof Klass));4235if (instance.destructor) {4236instance.destructor();4237}4238if (Klass.instancePool.length < Klass.poolSize) {4239Klass.instancePool.push(instance);4240}4241};42424243var DEFAULT_POOL_SIZE = 10;4244var DEFAULT_POOLER = oneArgumentPooler;42454246/**4247* Augments `CopyConstructor` to be a poolable class, augmenting only the class4248* itself (statically) not adding any prototypical fields. Any CopyConstructor4249* you give this may have a `poolSize` property, and will look for a4250* prototypical `destructor` on instances (optional).4251*4252* @param {Function} CopyConstructor Constructor that can be used to reset.4253* @param {Function} pooler Customizable pooler.4254*/4255var addPoolingTo = function(CopyConstructor, pooler) {4256var NewKlass = CopyConstructor;4257NewKlass.instancePool = [];4258NewKlass.getPooled = pooler || DEFAULT_POOLER;4259if (!NewKlass.poolSize) {4260NewKlass.poolSize = DEFAULT_POOL_SIZE;4261}4262NewKlass.release = standardReleaser;4263return NewKlass;4264};42654266var PooledClass = {4267addPoolingTo: addPoolingTo,4268oneArgumentPooler: oneArgumentPooler,4269twoArgumentPooler: twoArgumentPooler,4270threeArgumentPooler: threeArgumentPooler,4271fiveArgumentPooler: fiveArgumentPooler4272};42734274module.exports = PooledClass;427542764277}).call(this,require("FWaASH"))4278},{"./invariant":136,"FWaASH":1}],29:[function(require,module,exports){4279(function (process){4280/**4281* Copyright 2013-2015, Facebook, Inc.4282* All rights reserved.4283*4284* This source code is licensed under the BSD-style license found in the4285* LICENSE file in the root directory of this source tree. An additional grant4286* of patent rights can be found in the PATENTS file in the same directory.4287*4288* @providesModule React4289*/42904291/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/42924293'use strict';42944295var EventPluginUtils = require("./EventPluginUtils");4296var ReactChildren = require("./ReactChildren");4297var ReactComponent = require("./ReactComponent");4298var ReactClass = require("./ReactClass");4299var ReactContext = require("./ReactContext");4300var ReactCurrentOwner = require("./ReactCurrentOwner");4301var ReactElement = require("./ReactElement");4302var ReactElementValidator = require("./ReactElementValidator");4303var ReactDOM = require("./ReactDOM");4304var ReactDOMTextComponent = require("./ReactDOMTextComponent");4305var ReactDefaultInjection = require("./ReactDefaultInjection");4306var ReactInstanceHandles = require("./ReactInstanceHandles");4307var ReactMount = require("./ReactMount");4308var ReactPerf = require("./ReactPerf");4309var ReactPropTypes = require("./ReactPropTypes");4310var ReactReconciler = require("./ReactReconciler");4311var ReactServerRendering = require("./ReactServerRendering");43124313var assign = require("./Object.assign");4314var findDOMNode = require("./findDOMNode");4315var onlyChild = require("./onlyChild");43164317ReactDefaultInjection.inject();43184319var createElement = ReactElement.createElement;4320var createFactory = ReactElement.createFactory;4321var cloneElement = ReactElement.cloneElement;43224323if ("production" !== process.env.NODE_ENV) {4324createElement = ReactElementValidator.createElement;4325createFactory = ReactElementValidator.createFactory;4326cloneElement = ReactElementValidator.cloneElement;4327}43284329var render = ReactPerf.measure('React', 'render', ReactMount.render);43304331var React = {4332Children: {4333map: ReactChildren.map,4334forEach: ReactChildren.forEach,4335count: ReactChildren.count,4336only: onlyChild4337},4338Component: ReactComponent,4339DOM: ReactDOM,4340PropTypes: ReactPropTypes,4341initializeTouchEvents: function(shouldUseTouch) {4342EventPluginUtils.useTouchEvents = shouldUseTouch;4343},4344createClass: ReactClass.createClass,4345createElement: createElement,4346cloneElement: cloneElement,4347createFactory: createFactory,4348createMixin: function(mixin) {4349// Currently a noop. Will be used to validate and trace mixins.4350return mixin;4351},4352constructAndRenderComponent: ReactMount.constructAndRenderComponent,4353constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,4354findDOMNode: findDOMNode,4355render: render,4356renderToString: ReactServerRendering.renderToString,4357renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,4358unmountComponentAtNode: ReactMount.unmountComponentAtNode,4359isValidElement: ReactElement.isValidElement,4360withContext: ReactContext.withContext,43614362// Hook for JSX spread, don't use this for anything else.4363__spread: assign4364};43654366// Inject the runtime into a devtools global hook regardless of browser.4367// Allows for debugging when the hook is injected on the page.4368if (4369typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&4370typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {4371__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({4372CurrentOwner: ReactCurrentOwner,4373InstanceHandles: ReactInstanceHandles,4374Mount: ReactMount,4375Reconciler: ReactReconciler,4376TextComponent: ReactDOMTextComponent4377});4378}43794380if ("production" !== process.env.NODE_ENV) {4381var ExecutionEnvironment = require("./ExecutionEnvironment");4382if (ExecutionEnvironment.canUseDOM && window.top === window.self) {43834384// If we're in Chrome, look for the devtools marker and provide a download4385// link if not installed.4386if (navigator.userAgent.indexOf('Chrome') > -1) {4387if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {4388console.debug(4389'Download the React DevTools for a better development experience: ' +4390'http://fb.me/react-devtools'4391);4392}4393}43944395var expectedFeatures = [4396// shims4397Array.isArray,4398Array.prototype.every,4399Array.prototype.forEach,4400Array.prototype.indexOf,4401Array.prototype.map,4402Date.now,4403Function.prototype.bind,4404Object.keys,4405String.prototype.split,4406String.prototype.trim,44074408// shams4409Object.create,4410Object.freeze4411];44124413for (var i = 0; i < expectedFeatures.length; i++) {4414if (!expectedFeatures[i]) {4415console.error(4416'One or more ES5 shim/shams expected by React are not available: ' +4417'http://fb.me/react-warning-polyfills'4418);4419break;4420}4421}4422}4423}44244425React.version = '0.13.0-rc2';44264427module.exports = React;442844294430}).call(this,require("FWaASH"))4431},{"./EventPluginUtils":19,"./ExecutionEnvironment":21,"./Object.assign":27,"./ReactChildren":33,"./ReactClass":34,"./ReactComponent":35,"./ReactContext":39,"./ReactCurrentOwner":40,"./ReactDOM":41,"./ReactDOMTextComponent":52,"./ReactDefaultInjection":55,"./ReactElement":58,"./ReactElementValidator":59,"./ReactInstanceHandles":67,"./ReactMount":71,"./ReactPerf":76,"./ReactPropTypes":79,"./ReactReconciler":82,"./ReactServerRendering":85,"./findDOMNode":118,"./onlyChild":145,"FWaASH":1}],30:[function(require,module,exports){4432/**4433* Copyright 2013-2015, Facebook, Inc.4434* All rights reserved.4435*4436* This source code is licensed under the BSD-style license found in the4437* LICENSE file in the root directory of this source tree. An additional grant4438* of patent rights can be found in the PATENTS file in the same directory.4439*4440* @providesModule ReactBrowserComponentMixin4441*/44424443'use strict';44444445var findDOMNode = require("./findDOMNode");44464447var ReactBrowserComponentMixin = {4448/**4449* Returns the DOM node rendered by this component.4450*4451* @return {DOMElement} The root node of this component.4452* @final4453* @protected4454*/4455getDOMNode: function() {4456return findDOMNode(this);4457}4458};44594460module.exports = ReactBrowserComponentMixin;446144624463},{"./findDOMNode":118}],31:[function(require,module,exports){4464/**4465* Copyright 2013-2015, Facebook, Inc.4466* All rights reserved.4467*4468* This source code is licensed under the BSD-style license found in the4469* LICENSE file in the root directory of this source tree. An additional grant4470* of patent rights can be found in the PATENTS file in the same directory.4471*4472* @providesModule ReactBrowserEventEmitter4473* @typechecks static-only4474*/44754476'use strict';44774478var EventConstants = require("./EventConstants");4479var EventPluginHub = require("./EventPluginHub");4480var EventPluginRegistry = require("./EventPluginRegistry");4481var ReactEventEmitterMixin = require("./ReactEventEmitterMixin");4482var ViewportMetrics = require("./ViewportMetrics");44834484var assign = require("./Object.assign");4485var isEventSupported = require("./isEventSupported");44864487/**4488* Summary of `ReactBrowserEventEmitter` event handling:4489*4490* - Top-level delegation is used to trap most native browser events. This4491* may only occur in the main thread and is the responsibility of4492* ReactEventListener, which is injected and can therefore support pluggable4493* event sources. This is the only work that occurs in the main thread.4494*4495* - We normalize and de-duplicate events to account for browser quirks. This4496* may be done in the worker thread.4497*4498* - Forward these native events (with the associated top-level type used to4499* trap it) to `EventPluginHub`, which in turn will ask plugins if they want4500* to extract any synthetic events.4501*4502* - The `EventPluginHub` will then process each event by annotating them with4503* "dispatches", a sequence of listeners and IDs that care about that event.4504*4505* - The `EventPluginHub` then dispatches the events.4506*4507* Overview of React and the event system:4508*4509* +------------+ .4510* | DOM | .4511* +------------+ .4512* | .4513* v .4514* +------------+ .4515* | ReactEvent | .4516* | Listener | .4517* +------------+ . +-----------+4518* | . +--------+|SimpleEvent|4519* | . | |Plugin |4520* +-----|------+ . v +-----------+4521* | | | . +--------------+ +------------+4522* | +-----------.--->|EventPluginHub| | Event |4523* | | . | | +-----------+ | Propagators|4524* | ReactEvent | . | | |TapEvent | |------------|4525* | Emitter | . | |<---+|Plugin | |other plugin|4526* | | . | | +-----------+ | utilities |4527* | +-----------.--->| | +------------+4528* | | | . +--------------+4529* +-----|------+ . ^ +-----------+4530* | . | |Enter/Leave|4531* + . +-------+|Plugin |4532* +-------------+ . +-----------+4533* | application | .4534* |-------------| .4535* | | .4536* | | .4537* +-------------+ .4538* .4539* React Core . General Purpose Event Plugin System4540*/45414542var alreadyListeningTo = {};4543var isMonitoringScrollValue = false;4544var reactTopListenersCounter = 0;45454546// For events like 'submit' which don't consistently bubble (which we trap at a4547// lower node than `document`), binding at `document` would cause duplicate4548// events so we don't include them here4549var topEventMapping = {4550topBlur: 'blur',4551topChange: 'change',4552topClick: 'click',4553topCompositionEnd: 'compositionend',4554topCompositionStart: 'compositionstart',4555topCompositionUpdate: 'compositionupdate',4556topContextMenu: 'contextmenu',4557topCopy: 'copy',4558topCut: 'cut',4559topDoubleClick: 'dblclick',4560topDrag: 'drag',4561topDragEnd: 'dragend',4562topDragEnter: 'dragenter',4563topDragExit: 'dragexit',4564topDragLeave: 'dragleave',4565topDragOver: 'dragover',4566topDragStart: 'dragstart',4567topDrop: 'drop',4568topFocus: 'focus',4569topInput: 'input',4570topKeyDown: 'keydown',4571topKeyPress: 'keypress',4572topKeyUp: 'keyup',4573topMouseDown: 'mousedown',4574topMouseMove: 'mousemove',4575topMouseOut: 'mouseout',4576topMouseOver: 'mouseover',4577topMouseUp: 'mouseup',4578topPaste: 'paste',4579topScroll: 'scroll',4580topSelectionChange: 'selectionchange',4581topTextInput: 'textInput',4582topTouchCancel: 'touchcancel',4583topTouchEnd: 'touchend',4584topTouchMove: 'touchmove',4585topTouchStart: 'touchstart',4586topWheel: 'wheel'4587};45884589/**4590* To ensure no conflicts with other potential React instances on the page4591*/4592var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);45934594function getListeningForDocument(mountAt) {4595// In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`4596// directly.4597if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {4598mountAt[topListenersIDKey] = reactTopListenersCounter++;4599alreadyListeningTo[mountAt[topListenersIDKey]] = {};4600}4601return alreadyListeningTo[mountAt[topListenersIDKey]];4602}46034604/**4605* `ReactBrowserEventEmitter` is used to attach top-level event listeners. For4606* example:4607*4608* ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);4609*4610* This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.4611*4612* @internal4613*/4614var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {46154616/**4617* Injectable event backend4618*/4619ReactEventListener: null,46204621injection: {4622/**4623* @param {object} ReactEventListener4624*/4625injectReactEventListener: function(ReactEventListener) {4626ReactEventListener.setHandleTopLevel(4627ReactBrowserEventEmitter.handleTopLevel4628);4629ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;4630}4631},46324633/**4634* Sets whether or not any created callbacks should be enabled.4635*4636* @param {boolean} enabled True if callbacks should be enabled.4637*/4638setEnabled: function(enabled) {4639if (ReactBrowserEventEmitter.ReactEventListener) {4640ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);4641}4642},46434644/**4645* @return {boolean} True if callbacks are enabled.4646*/4647isEnabled: function() {4648return !!(4649(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled())4650);4651},46524653/**4654* We listen for bubbled touch events on the document object.4655*4656* Firefox v8.01 (and possibly others) exhibited strange behavior when4657* mounting `onmousemove` events at some node that was not the document4658* element. The symptoms were that if your mouse is not moving over something4659* contained within that mount point (for example on the background) the4660* top-level listeners for `onmousemove` won't be called. However, if you4661* register the `mousemove` on the document object, then it will of course4662* catch all `mousemove`s. This along with iOS quirks, justifies restricting4663* top-level listeners to the document object only, at least for these4664* movement types of events and possibly all events.4665*4666* @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html4667*4668* Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but4669* they bubble to document.4670*4671* @param {string} registrationName Name of listener (e.g. `onClick`).4672* @param {object} contentDocumentHandle Document which owns the container4673*/4674listenTo: function(registrationName, contentDocumentHandle) {4675var mountAt = contentDocumentHandle;4676var isListening = getListeningForDocument(mountAt);4677var dependencies = EventPluginRegistry.4678registrationNameDependencies[registrationName];46794680var topLevelTypes = EventConstants.topLevelTypes;4681for (var i = 0, l = dependencies.length; i < l; i++) {4682var dependency = dependencies[i];4683if (!(4684(isListening.hasOwnProperty(dependency) && isListening[dependency])4685)) {4686if (dependency === topLevelTypes.topWheel) {4687if (isEventSupported('wheel')) {4688ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4689topLevelTypes.topWheel,4690'wheel',4691mountAt4692);4693} else if (isEventSupported('mousewheel')) {4694ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4695topLevelTypes.topWheel,4696'mousewheel',4697mountAt4698);4699} else {4700// Firefox needs to capture a different mouse scroll event.4701// @see http://www.quirksmode.org/dom/events/tests/scroll.html4702ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4703topLevelTypes.topWheel,4704'DOMMouseScroll',4705mountAt4706);4707}4708} else if (dependency === topLevelTypes.topScroll) {47094710if (isEventSupported('scroll', true)) {4711ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(4712topLevelTypes.topScroll,4713'scroll',4714mountAt4715);4716} else {4717ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4718topLevelTypes.topScroll,4719'scroll',4720ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE4721);4722}4723} else if (dependency === topLevelTypes.topFocus ||4724dependency === topLevelTypes.topBlur) {47254726if (isEventSupported('focus', true)) {4727ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(4728topLevelTypes.topFocus,4729'focus',4730mountAt4731);4732ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(4733topLevelTypes.topBlur,4734'blur',4735mountAt4736);4737} else if (isEventSupported('focusin')) {4738// IE has `focusin` and `focusout` events which bubble.4739// @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html4740ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4741topLevelTypes.topFocus,4742'focusin',4743mountAt4744);4745ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4746topLevelTypes.topBlur,4747'focusout',4748mountAt4749);4750}47514752// to make sure blur and focus event listeners are only attached once4753isListening[topLevelTypes.topBlur] = true;4754isListening[topLevelTypes.topFocus] = true;4755} else if (topEventMapping.hasOwnProperty(dependency)) {4756ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4757dependency,4758topEventMapping[dependency],4759mountAt4760);4761}47624763isListening[dependency] = true;4764}4765}4766},47674768trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {4769return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(4770topLevelType,4771handlerBaseName,4772handle4773);4774},47754776trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {4777return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(4778topLevelType,4779handlerBaseName,4780handle4781);4782},47834784/**4785* Listens to window scroll and resize events. We cache scroll values so that4786* application code can access them without triggering reflows.4787*4788* NOTE: Scroll events do not bubble.4789*4790* @see http://www.quirksmode.org/dom/events/scroll.html4791*/4792ensureScrollValueMonitoring: function() {4793if (!isMonitoringScrollValue) {4794var refresh = ViewportMetrics.refreshScrollValues;4795ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);4796isMonitoringScrollValue = true;4797}4798},47994800eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,48014802registrationNameModules: EventPluginHub.registrationNameModules,48034804putListener: EventPluginHub.putListener,48054806getListener: EventPluginHub.getListener,48074808deleteListener: EventPluginHub.deleteListener,48094810deleteAllListeners: EventPluginHub.deleteAllListeners48114812});48134814module.exports = ReactBrowserEventEmitter;481548164817},{"./EventConstants":15,"./EventPluginHub":17,"./EventPluginRegistry":18,"./Object.assign":27,"./ReactEventEmitterMixin":62,"./ViewportMetrics":105,"./isEventSupported":137}],32:[function(require,module,exports){4818/**4819* Copyright 2014-2015, Facebook, Inc.4820* All rights reserved.4821*4822* This source code is licensed under the BSD-style license found in the4823* LICENSE file in the root directory of this source tree. An additional grant4824* of patent rights can be found in the PATENTS file in the same directory.4825*4826* @providesModule ReactChildReconciler4827* @typechecks static-only4828*/48294830'use strict';48314832var ReactReconciler = require("./ReactReconciler");48334834var flattenChildren = require("./flattenChildren");4835var instantiateReactComponent = require("./instantiateReactComponent");4836var shouldUpdateReactComponent = require("./shouldUpdateReactComponent");48374838/**4839* ReactChildReconciler provides helpers for initializing or updating a set of4840* children. Its output is suitable for passing it onto ReactMultiChild which4841* does diffed reordering and insertion.4842*/4843var ReactChildReconciler = {48444845/**4846* Generates a "mount image" for each of the supplied children. In the case4847* of `ReactDOMComponent`, a mount image is a string of markup.4848*4849* @param {?object} nestedChildNodes Nested child maps.4850* @return {?object} A set of child instances.4851* @internal4852*/4853instantiateChildren: function(nestedChildNodes, transaction, context) {4854var children = flattenChildren(nestedChildNodes);4855for (var name in children) {4856if (children.hasOwnProperty(name)) {4857var child = children[name];4858// The rendered children must be turned into instances as they're4859// mounted.4860var childInstance = instantiateReactComponent(child, null);4861children[name] = childInstance;4862}4863}4864return children;4865},48664867/**4868* Updates the rendered children and returns a new set of children.4869*4870* @param {?object} prevChildren Previously initialized set of children.4871* @param {?object} nextNestedChildNodes Nested child maps.4872* @param {ReactReconcileTransaction} transaction4873* @param {object} context4874* @return {?object} A new set of child instances.4875* @internal4876*/4877updateChildren: function(4878prevChildren,4879nextNestedChildNodes,4880transaction,4881context) {4882// We currently don't have a way to track moves here but if we use iterators4883// instead of for..in we can zip the iterators and check if an item has4884// moved.4885// TODO: If nothing has changed, return the prevChildren object so that we4886// can quickly bailout if nothing has changed.4887var nextChildren = flattenChildren(nextNestedChildNodes);4888if (!nextChildren && !prevChildren) {4889return null;4890}4891var name;4892for (name in nextChildren) {4893if (!nextChildren.hasOwnProperty(name)) {4894continue;4895}4896var prevChild = prevChildren && prevChildren[name];4897var prevElement = prevChild && prevChild._currentElement;4898var nextElement = nextChildren[name];4899if (shouldUpdateReactComponent(prevElement, nextElement)) {4900ReactReconciler.receiveComponent(4901prevChild, nextElement, transaction, context4902);4903nextChildren[name] = prevChild;4904} else {4905if (prevChild) {4906ReactReconciler.unmountComponent(prevChild, name);4907}4908// The child must be instantiated before it's mounted.4909var nextChildInstance = instantiateReactComponent(4910nextElement,4911null4912);4913nextChildren[name] = nextChildInstance;4914}4915}4916// Unmount children that are no longer present.4917for (name in prevChildren) {4918if (prevChildren.hasOwnProperty(name) &&4919!(nextChildren && nextChildren.hasOwnProperty(name))) {4920ReactReconciler.unmountComponent(prevChildren[name]);4921}4922}4923return nextChildren;4924},49254926/**4927* Unmounts all rendered children. This should be used to clean up children4928* when this component is unmounted.4929*4930* @param {?object} renderedChildren Previously initialized set of children.4931* @internal4932*/4933unmountChildren: function(renderedChildren) {4934for (var name in renderedChildren) {4935var renderedChild = renderedChildren[name];4936ReactReconciler.unmountComponent(renderedChild);4937}4938}49394940};49414942module.exports = ReactChildReconciler;494349444945},{"./ReactReconciler":82,"./flattenChildren":119,"./instantiateReactComponent":135,"./shouldUpdateReactComponent":152}],33:[function(require,module,exports){4946(function (process){4947/**4948* Copyright 2013-2015, Facebook, Inc.4949* All rights reserved.4950*4951* This source code is licensed under the BSD-style license found in the4952* LICENSE file in the root directory of this source tree. An additional grant4953* of patent rights can be found in the PATENTS file in the same directory.4954*4955* @providesModule ReactChildren4956*/49574958'use strict';49594960var PooledClass = require("./PooledClass");4961var ReactFragment = require("./ReactFragment");49624963var traverseAllChildren = require("./traverseAllChildren");4964var warning = require("./warning");49654966var twoArgumentPooler = PooledClass.twoArgumentPooler;4967var threeArgumentPooler = PooledClass.threeArgumentPooler;49684969/**4970* PooledClass representing the bookkeeping associated with performing a child4971* traversal. Allows avoiding binding callbacks.4972*4973* @constructor ForEachBookKeeping4974* @param {!function} forEachFunction Function to perform traversal with.4975* @param {?*} forEachContext Context to perform context with.4976*/4977function ForEachBookKeeping(forEachFunction, forEachContext) {4978this.forEachFunction = forEachFunction;4979this.forEachContext = forEachContext;4980}4981PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);49824983function forEachSingleChild(traverseContext, child, name, i) {4984var forEachBookKeeping = traverseContext;4985forEachBookKeeping.forEachFunction.call(4986forEachBookKeeping.forEachContext, child, i);4987}49884989/**4990* Iterates through children that are typically specified as `props.children`.4991*4992* The provided forEachFunc(child, index) will be called for each4993* leaf child.4994*4995* @param {?*} children Children tree container.4996* @param {function(*, int)} forEachFunc.4997* @param {*} forEachContext Context for forEachContext.4998*/4999function forEachChildren(children, forEachFunc, forEachContext) {5000if (children == null) {5001return children;5002}50035004var traverseContext =5005ForEachBookKeeping.getPooled(forEachFunc, forEachContext);5006traverseAllChildren(children, forEachSingleChild, traverseContext);5007ForEachBookKeeping.release(traverseContext);5008}50095010/**5011* PooledClass representing the bookkeeping associated with performing a child5012* mapping. Allows avoiding binding callbacks.5013*5014* @constructor MapBookKeeping5015* @param {!*} mapResult Object containing the ordered map of results.5016* @param {!function} mapFunction Function to perform mapping with.5017* @param {?*} mapContext Context to perform mapping with.5018*/5019function MapBookKeeping(mapResult, mapFunction, mapContext) {5020this.mapResult = mapResult;5021this.mapFunction = mapFunction;5022this.mapContext = mapContext;5023}5024PooledClass.addPoolingTo(MapBookKeeping, threeArgumentPooler);50255026function mapSingleChildIntoContext(traverseContext, child, name, i) {5027var mapBookKeeping = traverseContext;5028var mapResult = mapBookKeeping.mapResult;50295030var keyUnique = !mapResult.hasOwnProperty(name);5031if ("production" !== process.env.NODE_ENV) {5032("production" !== process.env.NODE_ENV ? warning(5033keyUnique,5034'ReactChildren.map(...): Encountered two children with the same key, ' +5035'`%s`. Child keys must be unique; when two children share a key, only ' +5036'the first child will be used.',5037name5038) : null);5039}50405041if (keyUnique) {5042var mappedChild =5043mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext, child, i);5044mapResult[name] = mappedChild;5045}5046}50475048/**5049* Maps children that are typically specified as `props.children`.5050*5051* The provided mapFunction(child, key, index) will be called for each5052* leaf child.5053*5054* TODO: This may likely break any calls to `ReactChildren.map` that were5055* previously relying on the fact that we guarded against null children.5056*5057* @param {?*} children Children tree container.5058* @param {function(*, int)} mapFunction.5059* @param {*} mapContext Context for mapFunction.5060* @return {object} Object containing the ordered map of results.5061*/5062function mapChildren(children, func, context) {5063if (children == null) {5064return children;5065}50665067var mapResult = {};5068var traverseContext = MapBookKeeping.getPooled(mapResult, func, context);5069traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);5070MapBookKeeping.release(traverseContext);5071return ReactFragment.create(mapResult);5072}50735074function forEachSingleChildDummy(traverseContext, child, name, i) {5075return null;5076}50775078/**5079* Count the number of children that are typically specified as5080* `props.children`.5081*5082* @param {?*} children Children tree container.5083* @return {number} The number of children.5084*/5085function countChildren(children, context) {5086return traverseAllChildren(children, forEachSingleChildDummy, null);5087}50885089var ReactChildren = {5090forEach: forEachChildren,5091map: mapChildren,5092count: countChildren5093};50945095module.exports = ReactChildren;509650975098}).call(this,require("FWaASH"))5099},{"./PooledClass":28,"./ReactFragment":64,"./traverseAllChildren":154,"./warning":155,"FWaASH":1}],34:[function(require,module,exports){5100(function (process){5101/**5102* Copyright 2013-2015, Facebook, Inc.5103* All rights reserved.5104*5105* This source code is licensed under the BSD-style license found in the5106* LICENSE file in the root directory of this source tree. An additional grant5107* of patent rights can be found in the PATENTS file in the same directory.5108*5109* @providesModule ReactClass5110*/51115112'use strict';51135114var ReactComponent = require("./ReactComponent");5115var ReactCurrentOwner = require("./ReactCurrentOwner");5116var ReactElement = require("./ReactElement");5117var ReactErrorUtils = require("./ReactErrorUtils");5118var ReactInstanceMap = require("./ReactInstanceMap");5119var ReactLifeCycle = require("./ReactLifeCycle");5120var ReactPropTypeLocations = require("./ReactPropTypeLocations");5121var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");5122var ReactUpdateQueue = require("./ReactUpdateQueue");51235124var assign = require("./Object.assign");5125var invariant = require("./invariant");5126var keyMirror = require("./keyMirror");5127var keyOf = require("./keyOf");5128var warning = require("./warning");51295130var MIXINS_KEY = keyOf({mixins: null});51315132/**5133* Policies that describe methods in `ReactClassInterface`.5134*/5135var SpecPolicy = keyMirror({5136/**5137* These methods may be defined only once by the class specification or mixin.5138*/5139DEFINE_ONCE: null,5140/**5141* These methods may be defined by both the class specification and mixins.5142* Subsequent definitions will be chained. These methods must return void.5143*/5144DEFINE_MANY: null,5145/**5146* These methods are overriding the base class.5147*/5148OVERRIDE_BASE: null,5149/**5150* These methods are similar to DEFINE_MANY, except we assume they return5151* objects. We try to merge the keys of the return values of all the mixed in5152* functions. If there is a key conflict we throw.5153*/5154DEFINE_MANY_MERGED: null5155});515651575158var injectedMixins = [];51595160/**5161* Composite components are higher-level components that compose other composite5162* or native components.5163*5164* To create a new type of `ReactClass`, pass a specification of5165* your new class to `React.createClass`. The only requirement of your class5166* specification is that you implement a `render` method.5167*5168* var MyComponent = React.createClass({5169* render: function() {5170* return <div>Hello World</div>;5171* }5172* });5173*5174* The class specification supports a specific protocol of methods that have5175* special meaning (e.g. `render`). See `ReactClassInterface` for5176* more the comprehensive protocol. Any other properties and methods in the5177* class specification will available on the prototype.5178*5179* @interface ReactClassInterface5180* @internal5181*/5182var ReactClassInterface = {51835184/**5185* An array of Mixin objects to include when defining your component.5186*5187* @type {array}5188* @optional5189*/5190mixins: SpecPolicy.DEFINE_MANY,51915192/**5193* An object containing properties and methods that should be defined on5194* the component's constructor instead of its prototype (static methods).5195*5196* @type {object}5197* @optional5198*/5199statics: SpecPolicy.DEFINE_MANY,52005201/**5202* Definition of prop types for this component.5203*5204* @type {object}5205* @optional5206*/5207propTypes: SpecPolicy.DEFINE_MANY,52085209/**5210* Definition of context types for this component.5211*5212* @type {object}5213* @optional5214*/5215contextTypes: SpecPolicy.DEFINE_MANY,52165217/**5218* Definition of context types this component sets for its children.5219*5220* @type {object}5221* @optional5222*/5223childContextTypes: SpecPolicy.DEFINE_MANY,52245225// ==== Definition methods ====52265227/**5228* Invoked when the component is mounted. Values in the mapping will be set on5229* `this.props` if that prop is not specified (i.e. using an `in` check).5230*5231* This method is invoked before `getInitialState` and therefore cannot rely5232* on `this.state` or use `this.setState`.5233*5234* @return {object}5235* @optional5236*/5237getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,52385239/**5240* Invoked once before the component is mounted. The return value will be used5241* as the initial value of `this.state`.5242*5243* getInitialState: function() {5244* return {5245* isOn: false,5246* fooBaz: new BazFoo()5247* }5248* }5249*5250* @return {object}5251* @optional5252*/5253getInitialState: SpecPolicy.DEFINE_MANY_MERGED,52545255/**5256* @return {object}5257* @optional5258*/5259getChildContext: SpecPolicy.DEFINE_MANY_MERGED,52605261/**5262* Uses props from `this.props` and state from `this.state` to render the5263* structure of the component.5264*5265* No guarantees are made about when or how often this method is invoked, so5266* it must not have side effects.5267*5268* render: function() {5269* var name = this.props.name;5270* return <div>Hello, {name}!</div>;5271* }5272*5273* @return {ReactComponent}5274* @nosideeffects5275* @required5276*/5277render: SpecPolicy.DEFINE_ONCE,5278527952805281// ==== Delegate methods ====52825283/**5284* Invoked when the component is initially created and about to be mounted.5285* This may have side effects, but any external subscriptions or data created5286* by this method must be cleaned up in `componentWillUnmount`.5287*5288* @optional5289*/5290componentWillMount: SpecPolicy.DEFINE_MANY,52915292/**5293* Invoked when the component has been mounted and has a DOM representation.5294* However, there is no guarantee that the DOM node is in the document.5295*5296* Use this as an opportunity to operate on the DOM when the component has5297* been mounted (initialized and rendered) for the first time.5298*5299* @param {DOMElement} rootNode DOM element representing the component.5300* @optional5301*/5302componentDidMount: SpecPolicy.DEFINE_MANY,53035304/**5305* Invoked before the component receives new props.5306*5307* Use this as an opportunity to react to a prop transition by updating the5308* state using `this.setState`. Current props are accessed via `this.props`.5309*5310* componentWillReceiveProps: function(nextProps, nextContext) {5311* this.setState({5312* likesIncreasing: nextProps.likeCount > this.props.likeCount5313* });5314* }5315*5316* NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop5317* transition may cause a state change, but the opposite is not true. If you5318* need it, you are probably looking for `componentWillUpdate`.5319*5320* @param {object} nextProps5321* @optional5322*/5323componentWillReceiveProps: SpecPolicy.DEFINE_MANY,53245325/**5326* Invoked while deciding if the component should be updated as a result of5327* receiving new props, state and/or context.5328*5329* Use this as an opportunity to `return false` when you're certain that the5330* transition to the new props/state/context will not require a component5331* update.5332*5333* shouldComponentUpdate: function(nextProps, nextState, nextContext) {5334* return !equal(nextProps, this.props) ||5335* !equal(nextState, this.state) ||5336* !equal(nextContext, this.context);5337* }5338*5339* @param {object} nextProps5340* @param {?object} nextState5341* @param {?object} nextContext5342* @return {boolean} True if the component should update.5343* @optional5344*/5345shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,53465347/**5348* Invoked when the component is about to update due to a transition from5349* `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`5350* and `nextContext`.5351*5352* Use this as an opportunity to perform preparation before an update occurs.5353*5354* NOTE: You **cannot** use `this.setState()` in this method.5355*5356* @param {object} nextProps5357* @param {?object} nextState5358* @param {?object} nextContext5359* @param {ReactReconcileTransaction} transaction5360* @optional5361*/5362componentWillUpdate: SpecPolicy.DEFINE_MANY,53635364/**5365* Invoked when the component's DOM representation has been updated.5366*5367* Use this as an opportunity to operate on the DOM when the component has5368* been updated.5369*5370* @param {object} prevProps5371* @param {?object} prevState5372* @param {?object} prevContext5373* @param {DOMElement} rootNode DOM element representing the component.5374* @optional5375*/5376componentDidUpdate: SpecPolicy.DEFINE_MANY,53775378/**5379* Invoked when the component is about to be removed from its parent and have5380* its DOM representation destroyed.5381*5382* Use this as an opportunity to deallocate any external resources.5383*5384* NOTE: There is no `componentDidUnmount` since your component will have been5385* destroyed by that point.5386*5387* @optional5388*/5389componentWillUnmount: SpecPolicy.DEFINE_MANY,5390539153925393// ==== Advanced methods ====53945395/**5396* Updates the component's currently mounted DOM representation.5397*5398* By default, this implements React's rendering and reconciliation algorithm.5399* Sophisticated clients may wish to override this.5400*5401* @param {ReactReconcileTransaction} transaction5402* @internal5403* @overridable5404*/5405updateComponent: SpecPolicy.OVERRIDE_BASE54065407};54085409/**5410* Mapping from class specification keys to special processing functions.5411*5412* Although these are declared like instance properties in the specification5413* when defining classes using `React.createClass`, they are actually static5414* and are accessible on the constructor instead of the prototype. Despite5415* being static, they must be defined outside of the "statics" key under5416* which all other static methods are defined.5417*/5418var RESERVED_SPEC_KEYS = {5419displayName: function(Constructor, displayName) {5420Constructor.displayName = displayName;5421},5422mixins: function(Constructor, mixins) {5423if (mixins) {5424for (var i = 0; i < mixins.length; i++) {5425mixSpecIntoComponent(Constructor, mixins[i]);5426}5427}5428},5429childContextTypes: function(Constructor, childContextTypes) {5430if ("production" !== process.env.NODE_ENV) {5431validateTypeDef(5432Constructor,5433childContextTypes,5434ReactPropTypeLocations.childContext5435);5436}5437Constructor.childContextTypes = assign(5438{},5439Constructor.childContextTypes,5440childContextTypes5441);5442},5443contextTypes: function(Constructor, contextTypes) {5444if ("production" !== process.env.NODE_ENV) {5445validateTypeDef(5446Constructor,5447contextTypes,5448ReactPropTypeLocations.context5449);5450}5451Constructor.contextTypes = assign(5452{},5453Constructor.contextTypes,5454contextTypes5455);5456},5457/**5458* Special case getDefaultProps which should move into statics but requires5459* automatic merging.5460*/5461getDefaultProps: function(Constructor, getDefaultProps) {5462if (Constructor.getDefaultProps) {5463Constructor.getDefaultProps = createMergedResultFunction(5464Constructor.getDefaultProps,5465getDefaultProps5466);5467} else {5468Constructor.getDefaultProps = getDefaultProps;5469}5470},5471propTypes: function(Constructor, propTypes) {5472if ("production" !== process.env.NODE_ENV) {5473validateTypeDef(5474Constructor,5475propTypes,5476ReactPropTypeLocations.prop5477);5478}5479Constructor.propTypes = assign(5480{},5481Constructor.propTypes,5482propTypes5483);5484},5485statics: function(Constructor, statics) {5486mixStaticSpecIntoComponent(Constructor, statics);5487}5488};54895490function validateTypeDef(Constructor, typeDef, location) {5491for (var propName in typeDef) {5492if (typeDef.hasOwnProperty(propName)) {5493// use a warning instead of an invariant so components5494// don't show up in prod but not in __DEV__5495("production" !== process.env.NODE_ENV ? warning(5496typeof typeDef[propName] === 'function',5497'%s: %s type `%s` is invalid; it must be a function, usually from ' +5498'React.PropTypes.',5499Constructor.displayName || 'ReactClass',5500ReactPropTypeLocationNames[location],5501propName5502) : null);5503}5504}5505}55065507function validateMethodOverride(proto, name) {5508var specPolicy = ReactClassInterface.hasOwnProperty(name) ?5509ReactClassInterface[name] :5510null;55115512// Disallow overriding of base class methods unless explicitly allowed.5513if (ReactClassMixin.hasOwnProperty(name)) {5514("production" !== process.env.NODE_ENV ? invariant(5515specPolicy === SpecPolicy.OVERRIDE_BASE,5516'ReactClassInterface: You are attempting to override ' +5517'`%s` from your class specification. Ensure that your method names ' +5518'do not overlap with React methods.',5519name5520) : invariant(specPolicy === SpecPolicy.OVERRIDE_BASE));5521}55225523// Disallow defining methods more than once unless explicitly allowed.5524if (proto.hasOwnProperty(name)) {5525("production" !== process.env.NODE_ENV ? invariant(5526specPolicy === SpecPolicy.DEFINE_MANY ||5527specPolicy === SpecPolicy.DEFINE_MANY_MERGED,5528'ReactClassInterface: You are attempting to define ' +5529'`%s` on your component more than once. This conflict may be due ' +5530'to a mixin.',5531name5532) : invariant(specPolicy === SpecPolicy.DEFINE_MANY ||5533specPolicy === SpecPolicy.DEFINE_MANY_MERGED));5534}5535}55365537/**5538* Mixin helper which handles policy validation and reserved5539* specification keys when building React classses.5540*/5541function mixSpecIntoComponent(Constructor, spec) {5542if (!spec) {5543return;5544}55455546("production" !== process.env.NODE_ENV ? invariant(5547typeof spec !== 'function',5548'ReactClass: You\'re attempting to ' +5549'use a component class as a mixin. Instead, just use a regular object.'5550) : invariant(typeof spec !== 'function'));5551("production" !== process.env.NODE_ENV ? invariant(5552!ReactElement.isValidElement(spec),5553'ReactClass: You\'re attempting to ' +5554'use a component as a mixin. Instead, just use a regular object.'5555) : invariant(!ReactElement.isValidElement(spec)));55565557var proto = Constructor.prototype;55585559// By handling mixins before any other properties, we ensure the same5560// chaining order is applied to methods with DEFINE_MANY policy, whether5561// mixins are listed before or after these methods in the spec.5562if (spec.hasOwnProperty(MIXINS_KEY)) {5563RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);5564}55655566for (var name in spec) {5567if (!spec.hasOwnProperty(name)) {5568continue;5569}55705571if (name === MIXINS_KEY) {5572// We have already handled mixins in a special case above5573continue;5574}55755576var property = spec[name];5577validateMethodOverride(proto, name);55785579if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {5580RESERVED_SPEC_KEYS[name](Constructor, property);5581} else {5582// Setup methods on prototype:5583// The following member methods should not be automatically bound:5584// 1. Expected ReactClass methods (in the "interface").5585// 2. Overridden methods (that were mixed in).5586var isReactClassMethod =5587ReactClassInterface.hasOwnProperty(name);5588var isAlreadyDefined = proto.hasOwnProperty(name);5589var markedDontBind = property && property.__reactDontBind;5590var isFunction = typeof property === 'function';5591var shouldAutoBind =5592isFunction &&5593!isReactClassMethod &&5594!isAlreadyDefined &&5595!markedDontBind;55965597if (shouldAutoBind) {5598if (!proto.__reactAutoBindMap) {5599proto.__reactAutoBindMap = {};5600}5601proto.__reactAutoBindMap[name] = property;5602proto[name] = property;5603} else {5604if (isAlreadyDefined) {5605var specPolicy = ReactClassInterface[name];56065607// These cases should already be caught by validateMethodOverride5608("production" !== process.env.NODE_ENV ? invariant(5609isReactClassMethod && (5610(specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)5611),5612'ReactClass: Unexpected spec policy %s for key %s ' +5613'when mixing in component specs.',5614specPolicy,5615name5616) : invariant(isReactClassMethod && (5617(specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)5618)));56195620// For methods which are defined more than once, call the existing5621// methods before calling the new property, merging if appropriate.5622if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {5623proto[name] = createMergedResultFunction(proto[name], property);5624} else if (specPolicy === SpecPolicy.DEFINE_MANY) {5625proto[name] = createChainedFunction(proto[name], property);5626}5627} else {5628proto[name] = property;5629if ("production" !== process.env.NODE_ENV) {5630// Add verbose displayName to the function, which helps when looking5631// at profiling tools.5632if (typeof property === 'function' && spec.displayName) {5633proto[name].displayName = spec.displayName + '_' + name;5634}5635}5636}5637}5638}5639}5640}56415642function mixStaticSpecIntoComponent(Constructor, statics) {5643if (!statics) {5644return;5645}5646for (var name in statics) {5647var property = statics[name];5648if (!statics.hasOwnProperty(name)) {5649continue;5650}56515652var isReserved = name in RESERVED_SPEC_KEYS;5653("production" !== process.env.NODE_ENV ? invariant(5654!isReserved,5655'ReactClass: You are attempting to define a reserved ' +5656'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' +5657'as an instance property instead; it will still be accessible on the ' +5658'constructor.',5659name5660) : invariant(!isReserved));56615662var isInherited = name in Constructor;5663("production" !== process.env.NODE_ENV ? invariant(5664!isInherited,5665'ReactClass: You are attempting to define ' +5666'`%s` on your component more than once. This conflict may be ' +5667'due to a mixin.',5668name5669) : invariant(!isInherited));5670Constructor[name] = property;5671}5672}56735674/**5675* Merge two objects, but throw if both contain the same key.5676*5677* @param {object} one The first object, which is mutated.5678* @param {object} two The second object5679* @return {object} one after it has been mutated to contain everything in two.5680*/5681function mergeIntoWithNoDuplicateKeys(one, two) {5682("production" !== process.env.NODE_ENV ? invariant(5683one && two && typeof one === 'object' && typeof two === 'object',5684'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'5685) : invariant(one && two && typeof one === 'object' && typeof two === 'object'));56865687for (var key in two) {5688if (two.hasOwnProperty(key)) {5689("production" !== process.env.NODE_ENV ? invariant(5690one[key] === undefined,5691'mergeIntoWithNoDuplicateKeys(): ' +5692'Tried to merge two objects with the same key: `%s`. This conflict ' +5693'may be due to a mixin; in particular, this may be caused by two ' +5694'getInitialState() or getDefaultProps() methods returning objects ' +5695'with clashing keys.',5696key5697) : invariant(one[key] === undefined));5698one[key] = two[key];5699}5700}5701return one;5702}57035704/**5705* Creates a function that invokes two functions and merges their return values.5706*5707* @param {function} one Function to invoke first.5708* @param {function} two Function to invoke second.5709* @return {function} Function that invokes the two argument functions.5710* @private5711*/5712function createMergedResultFunction(one, two) {5713return function mergedResult() {5714var a = one.apply(this, arguments);5715var b = two.apply(this, arguments);5716if (a == null) {5717return b;5718} else if (b == null) {5719return a;5720}5721var c = {};5722mergeIntoWithNoDuplicateKeys(c, a);5723mergeIntoWithNoDuplicateKeys(c, b);5724return c;5725};5726}57275728/**5729* Creates a function that invokes two functions and ignores their return vales.5730*5731* @param {function} one Function to invoke first.5732* @param {function} two Function to invoke second.5733* @return {function} Function that invokes the two argument functions.5734* @private5735*/5736function createChainedFunction(one, two) {5737return function chainedFunction() {5738one.apply(this, arguments);5739two.apply(this, arguments);5740};5741}57425743/**5744* Binds a method to the component.5745*5746* @param {object} component Component whose method is going to be bound.5747* @param {function} method Method to be bound.5748* @return {function} The bound method.5749*/5750function bindAutoBindMethod(component, method) {5751var boundMethod = method.bind(component);5752if ("production" !== process.env.NODE_ENV) {5753boundMethod.__reactBoundContext = component;5754boundMethod.__reactBoundMethod = method;5755boundMethod.__reactBoundArguments = null;5756var componentName = component.constructor.displayName;5757var _bind = boundMethod.bind;5758/* eslint-disable block-scoped-var, no-undef */5759boundMethod.bind = function(newThis ) {for (var args=[],$__0=1,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);5760// User is trying to bind() an autobound method; we effectively will5761// ignore the value of "this" that the user is trying to use, so5762// let's warn.5763if (newThis !== component && newThis !== null) {5764("production" !== process.env.NODE_ENV ? warning(5765false,5766'bind(): React component methods may only be bound to the ' +5767'component instance. See %s',5768componentName5769) : null);5770} else if (!args.length) {5771("production" !== process.env.NODE_ENV ? warning(5772false,5773'bind(): You are binding a component method to the component. ' +5774'React does this for you automatically in a high-performance ' +5775'way, so you can safely remove this call. See %s',5776componentName5777) : null);5778return boundMethod;5779}5780var reboundMethod = _bind.apply(boundMethod, arguments);5781reboundMethod.__reactBoundContext = component;5782reboundMethod.__reactBoundMethod = method;5783reboundMethod.__reactBoundArguments = args;5784return reboundMethod;5785/* eslint-enable */5786};5787}5788return boundMethod;5789}57905791/**5792* Binds all auto-bound methods in a component.5793*5794* @param {object} component Component whose method is going to be bound.5795*/5796function bindAutoBindMethods(component) {5797for (var autoBindKey in component.__reactAutoBindMap) {5798if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {5799var method = component.__reactAutoBindMap[autoBindKey];5800component[autoBindKey] = bindAutoBindMethod(5801component,5802ReactErrorUtils.guard(5803method,5804component.constructor.displayName + '.' + autoBindKey5805)5806);5807}5808}5809}58105811var typeDeprecationDescriptor = {5812enumerable: false,5813get: function() {5814var displayName = this.displayName || this.name || 'Component';5815("production" !== process.env.NODE_ENV ? warning(5816false,5817'%s.type is deprecated. Use %s directly to access the class.',5818displayName,5819displayName5820) : null);5821Object.defineProperty(this, 'type', {5822value: this5823});5824return this;5825}5826};58275828/**5829* Add more to the ReactClass base class. These are all legacy features and5830* therefore not already part of the modern ReactComponent.5831*/5832var ReactClassMixin = {58335834/**5835* TODO: This will be deprecated because state should always keep a consistent5836* type signature and the only use case for this, is to avoid that.5837*/5838replaceState: function(newState, callback) {5839ReactUpdateQueue.enqueueReplaceState(this, newState);5840if (callback) {5841ReactUpdateQueue.enqueueCallback(this, callback);5842}5843},58445845/**5846* Checks whether or not this composite component is mounted.5847* @return {boolean} True if mounted, false otherwise.5848* @protected5849* @final5850*/5851isMounted: function() {5852if ("production" !== process.env.NODE_ENV) {5853var owner = ReactCurrentOwner.current;5854if (owner !== null) {5855("production" !== process.env.NODE_ENV ? warning(5856owner._warnedAboutRefsInRender,5857'%s is accessing isMounted inside its render() function. ' +5858'render() should be a pure function of props and state. It should ' +5859'never access something that requires stale data from the previous ' +5860'render, such as refs. Move this logic to componentDidMount and ' +5861'componentDidUpdate instead.',5862owner.getName() || 'A component'5863) : null);5864owner._warnedAboutRefsInRender = true;5865}5866}5867var internalInstance = ReactInstanceMap.get(this);5868return (5869internalInstance &&5870internalInstance !== ReactLifeCycle.currentlyMountingInstance5871);5872},58735874/**5875* Sets a subset of the props.5876*5877* @param {object} partialProps Subset of the next props.5878* @param {?function} callback Called after props are updated.5879* @final5880* @public5881* @deprecated5882*/5883setProps: function(partialProps, callback) {5884ReactUpdateQueue.enqueueSetProps(this, partialProps);5885if (callback) {5886ReactUpdateQueue.enqueueCallback(this, callback);5887}5888},58895890/**5891* Replace all the props.5892*5893* @param {object} newProps Subset of the next props.5894* @param {?function} callback Called after props are updated.5895* @final5896* @public5897* @deprecated5898*/5899replaceProps: function(newProps, callback) {5900ReactUpdateQueue.enqueueReplaceProps(this, newProps);5901if (callback) {5902ReactUpdateQueue.enqueueCallback(this, callback);5903}5904}5905};59065907var ReactClassComponent = function() {};5908assign(5909ReactClassComponent.prototype,5910ReactComponent.prototype,5911ReactClassMixin5912);59135914/**5915* Module for creating composite components.5916*5917* @class ReactClass5918*/5919var ReactClass = {59205921/**5922* Creates a composite component class given a class specification.5923*5924* @param {object} spec Class specification (which must define `render`).5925* @return {function} Component constructor function.5926* @public5927*/5928createClass: function(spec) {5929var Constructor = function(props, context) {5930// This constructor is overridden by mocks. The argument is used5931// by mocks to assert on what gets mounted.59325933if ("production" !== process.env.NODE_ENV) {5934("production" !== process.env.NODE_ENV ? warning(5935this instanceof Constructor,5936'Something is calling a React component directly. Use a factory or ' +5937'JSX instead. See: http://fb.me/react-legacyfactory'5938) : null);5939}59405941// Wire up auto-binding5942if (this.__reactAutoBindMap) {5943bindAutoBindMethods(this);5944}59455946this.props = props;5947this.context = context;5948this.state = null;59495950// ReactClasses doesn't have constructors. Instead, they use the5951// getInitialState and componentWillMount methods for initialization.59525953var initialState = this.getInitialState ? this.getInitialState() : null;5954if ("production" !== process.env.NODE_ENV) {5955// We allow auto-mocks to proceed as if they're returning null.5956if (typeof initialState === 'undefined' &&5957this.getInitialState._isMockFunction) {5958// This is probably bad practice. Consider warning here and5959// deprecating this convenience.5960initialState = null;5961}5962}5963("production" !== process.env.NODE_ENV ? invariant(5964typeof initialState === 'object' && !Array.isArray(initialState),5965'%s.getInitialState(): must return an object or null',5966Constructor.displayName || 'ReactCompositeComponent'5967) : invariant(typeof initialState === 'object' && !Array.isArray(initialState)));59685969this.state = initialState;5970};5971Constructor.prototype = new ReactClassComponent();5972Constructor.prototype.constructor = Constructor;59735974injectedMixins.forEach(5975mixSpecIntoComponent.bind(null, Constructor)5976);59775978mixSpecIntoComponent(Constructor, spec);59795980// Initialize the defaultProps property after all mixins have been merged5981if (Constructor.getDefaultProps) {5982Constructor.defaultProps = Constructor.getDefaultProps();5983}59845985if ("production" !== process.env.NODE_ENV) {5986// This is a tag to indicate that the use of these method names is ok,5987// since it's used with createClass. If it's not, then it's likely a5988// mistake so we'll warn you to use the static property, property5989// initializer or constructor respectively.5990if (Constructor.getDefaultProps) {5991Constructor.getDefaultProps.isReactClassApproved = {};5992}5993if (Constructor.prototype.getInitialState) {5994Constructor.prototype.getInitialState.isReactClassApproved = {};5995}5996}59975998("production" !== process.env.NODE_ENV ? invariant(5999Constructor.prototype.render,6000'createClass(...): Class specification must implement a `render` method.'6001) : invariant(Constructor.prototype.render));60026003if ("production" !== process.env.NODE_ENV) {6004("production" !== process.env.NODE_ENV ? warning(6005!Constructor.prototype.componentShouldUpdate,6006'%s has a method called ' +6007'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +6008'The name is phrased as a question because the function is ' +6009'expected to return a value.',6010spec.displayName || 'A component'6011) : null);6012}60136014// Reduce time spent doing lookups by setting these on the prototype.6015for (var methodName in ReactClassInterface) {6016if (!Constructor.prototype[methodName]) {6017Constructor.prototype[methodName] = null;6018}6019}60206021// Legacy hook6022Constructor.type = Constructor;6023if ("production" !== process.env.NODE_ENV) {6024try {6025Object.defineProperty(Constructor, 'type', typeDeprecationDescriptor);6026} catch (x) {6027// IE will fail on defineProperty (es5-shim/sham too)6028}6029}60306031return Constructor;6032},60336034injection: {6035injectMixin: function(mixin) {6036injectedMixins.push(mixin);6037}6038}60396040};60416042module.exports = ReactClass;604360446045}).call(this,require("FWaASH"))6046},{"./Object.assign":27,"./ReactComponent":35,"./ReactCurrentOwner":40,"./ReactElement":58,"./ReactErrorUtils":61,"./ReactInstanceMap":68,"./ReactLifeCycle":69,"./ReactPropTypeLocationNames":77,"./ReactPropTypeLocations":78,"./ReactUpdateQueue":87,"./invariant":136,"./keyMirror":141,"./keyOf":142,"./warning":155,"FWaASH":1}],35:[function(require,module,exports){6047(function (process){6048/**6049* Copyright 2013-2015, Facebook, Inc.6050* All rights reserved.6051*6052* This source code is licensed under the BSD-style license found in the6053* LICENSE file in the root directory of this source tree. An additional grant6054* of patent rights can be found in the PATENTS file in the same directory.6055*6056* @providesModule ReactComponent6057*/60586059'use strict';60606061var ReactUpdateQueue = require("./ReactUpdateQueue");60626063var invariant = require("./invariant");6064var warning = require("./warning");60656066/**6067* Base class helpers for the updating state of a component.6068*/6069function ReactComponent(props, context) {6070this.props = props;6071this.context = context;6072}60736074/**6075* Sets a subset of the state. Always use this to mutate6076* state. You should treat `this.state` as immutable.6077*6078* There is no guarantee that `this.state` will be immediately updated, so6079* accessing `this.state` after calling this method may return the old value.6080*6081* There is no guarantee that calls to `setState` will run synchronously,6082* as they may eventually be batched together. You can provide an optional6083* callback that will be executed when the call to setState is actually6084* completed.6085*6086* When a function is provided to setState, it will be called at some point in6087* the future (not synchronously). It will be called with the up to date6088* component arguments (state, props, context). These values can be different6089* from this.* because your function may be called after receiveProps but before6090* shouldComponentUpdate, and this new state, props, and context will not yet be6091* assigned to this.6092*6093* @param {object|function} partialState Next partial state or function to6094* produce next partial state to be merged with current state.6095* @param {?function} callback Called after state is updated.6096* @final6097* @protected6098*/6099ReactComponent.prototype.setState = function(partialState, callback) {6100("production" !== process.env.NODE_ENV ? invariant(6101typeof partialState === 'object' ||6102typeof partialState === 'function' ||6103partialState == null,6104'setState(...): takes an object of state variables to update or a ' +6105'function which returns an object of state variables.'6106) : invariant(typeof partialState === 'object' ||6107typeof partialState === 'function' ||6108partialState == null));6109if ("production" !== process.env.NODE_ENV) {6110("production" !== process.env.NODE_ENV ? warning(6111partialState != null,6112'setState(...): You passed an undefined or null state object; ' +6113'instead, use forceUpdate().'6114) : null);6115}6116ReactUpdateQueue.enqueueSetState(this, partialState);6117if (callback) {6118ReactUpdateQueue.enqueueCallback(this, callback);6119}6120};61216122/**6123* Forces an update. This should only be invoked when it is known with6124* certainty that we are **not** in a DOM transaction.6125*6126* You may want to call this when you know that some deeper aspect of the6127* component's state has changed but `setState` was not called.6128*6129* This will not invoke `shouldUpdateComponent`, but it will invoke6130* `componentWillUpdate` and `componentDidUpdate`.6131*6132* @param {?function} callback Called after update is complete.6133* @final6134* @protected6135*/6136ReactComponent.prototype.forceUpdate = function(callback) {6137ReactUpdateQueue.enqueueForceUpdate(this);6138if (callback) {6139ReactUpdateQueue.enqueueCallback(this, callback);6140}6141};61426143/**6144* Deprecated APIs. These APIs used to exist on classic React classes but since6145* we would like to deprecate them, we're not going to move them over to this6146* modern base class. Instead, we define a getter that warns if it's accessed.6147*/6148if ("production" !== process.env.NODE_ENV) {6149var deprecatedAPIs = {6150getDOMNode: 'getDOMNode',6151isMounted: 'isMounted',6152replaceState: 'replaceState',6153setProps: 'setProps'6154};6155var defineDeprecationWarning = function(methodName, displayName) {6156try {6157Object.defineProperty(ReactComponent.prototype, methodName, {6158get: function() {6159("production" !== process.env.NODE_ENV ? warning(6160false,6161'%s(...) is deprecated in plain JavaScript React classes.',6162displayName6163) : null);6164return undefined;6165}6166});6167} catch (x) {6168// IE will fail on defineProperty (es5-shim/sham too)6169}6170};6171for (var fnName in deprecatedAPIs) {6172if (deprecatedAPIs.hasOwnProperty(fnName)) {6173defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);6174}6175}6176}61776178module.exports = ReactComponent;617961806181}).call(this,require("FWaASH"))6182},{"./ReactUpdateQueue":87,"./invariant":136,"./warning":155,"FWaASH":1}],36:[function(require,module,exports){6183/**6184* Copyright 2013-2015, Facebook, Inc.6185* All rights reserved.6186*6187* This source code is licensed under the BSD-style license found in the6188* LICENSE file in the root directory of this source tree. An additional grant6189* of patent rights can be found in the PATENTS file in the same directory.6190*6191* @providesModule ReactComponentBrowserEnvironment6192*/61936194/*jslint evil: true */61956196'use strict';61976198var ReactDOMIDOperations = require("./ReactDOMIDOperations");6199var ReactMount = require("./ReactMount");62006201/**6202* Abstracts away all functionality of the reconciler that requires knowledge of6203* the browser context. TODO: These callers should be refactored to avoid the6204* need for this injection.6205*/6206var ReactComponentBrowserEnvironment = {62076208processChildrenUpdates:6209ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,62106211replaceNodeWithMarkupByID:6212ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,62136214/**6215* If a particular environment requires that some resources be cleaned up,6216* specify this in the injected Mixin. In the DOM, we would likely want to6217* purge any cached node ID lookups.6218*6219* @private6220*/6221unmountIDFromEnvironment: function(rootNodeID) {6222ReactMount.purgeID(rootNodeID);6223}62246225};62266227module.exports = ReactComponentBrowserEnvironment;622862296230},{"./ReactDOMIDOperations":45,"./ReactMount":71}],37:[function(require,module,exports){6231(function (process){6232/**6233* Copyright 2014-2015, Facebook, Inc.6234* All rights reserved.6235*6236* This source code is licensed under the BSD-style license found in the6237* LICENSE file in the root directory of this source tree. An additional grant6238* of patent rights can be found in the PATENTS file in the same directory.6239*6240* @providesModule ReactComponentEnvironment6241*/62426243'use strict';62446245var invariant = require("./invariant");62466247var injected = false;62486249var ReactComponentEnvironment = {62506251/**6252* Optionally injectable environment dependent cleanup hook. (server vs.6253* browser etc). Example: A browser system caches DOM nodes based on component6254* ID and must remove that cache entry when this instance is unmounted.6255*/6256unmountIDFromEnvironment: null,62576258/**6259* Optionally injectable hook for swapping out mount images in the middle of6260* the tree.6261*/6262replaceNodeWithMarkupByID: null,62636264/**6265* Optionally injectable hook for processing a queue of child updates. Will6266* later move into MultiChildComponents.6267*/6268processChildrenUpdates: null,62696270injection: {6271injectEnvironment: function(environment) {6272("production" !== process.env.NODE_ENV ? invariant(6273!injected,6274'ReactCompositeComponent: injectEnvironment() can only be called once.'6275) : invariant(!injected));6276ReactComponentEnvironment.unmountIDFromEnvironment =6277environment.unmountIDFromEnvironment;6278ReactComponentEnvironment.replaceNodeWithMarkupByID =6279environment.replaceNodeWithMarkupByID;6280ReactComponentEnvironment.processChildrenUpdates =6281environment.processChildrenUpdates;6282injected = true;6283}6284}62856286};62876288module.exports = ReactComponentEnvironment;628962906291}).call(this,require("FWaASH"))6292},{"./invariant":136,"FWaASH":1}],38:[function(require,module,exports){6293(function (process){6294/**6295* Copyright 2013-2015, Facebook, Inc.6296* All rights reserved.6297*6298* This source code is licensed under the BSD-style license found in the6299* LICENSE file in the root directory of this source tree. An additional grant6300* of patent rights can be found in the PATENTS file in the same directory.6301*6302* @providesModule ReactCompositeComponent6303*/63046305'use strict';63066307var ReactComponentEnvironment = require("./ReactComponentEnvironment");6308var ReactContext = require("./ReactContext");6309var ReactCurrentOwner = require("./ReactCurrentOwner");6310var ReactElement = require("./ReactElement");6311var ReactElementValidator = require("./ReactElementValidator");6312var ReactInstanceMap = require("./ReactInstanceMap");6313var ReactLifeCycle = require("./ReactLifeCycle");6314var ReactNativeComponent = require("./ReactNativeComponent");6315var ReactPerf = require("./ReactPerf");6316var ReactPropTypeLocations = require("./ReactPropTypeLocations");6317var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");6318var ReactReconciler = require("./ReactReconciler");6319var ReactUpdates = require("./ReactUpdates");63206321var assign = require("./Object.assign");6322var emptyObject = require("./emptyObject");6323var invariant = require("./invariant");6324var shouldUpdateReactComponent = require("./shouldUpdateReactComponent");6325var warning = require("./warning");63266327function getDeclarationErrorAddendum(component) {6328var owner = component._currentElement._owner || null;6329if (owner) {6330var name = owner.getName();6331if (name) {6332return ' Check the render method of `' + name + '`.';6333}6334}6335return '';6336}63376338/**6339* ------------------ The Life-Cycle of a Composite Component ------------------6340*6341* - constructor: Initialization of state. The instance is now retained.6342* - componentWillMount6343* - render6344* - [children's constructors]6345* - [children's componentWillMount and render]6346* - [children's componentDidMount]6347* - componentDidMount6348*6349* Update Phases:6350* - componentWillReceiveProps (only called if parent updated)6351* - shouldComponentUpdate6352* - componentWillUpdate6353* - render6354* - [children's constructors or receive props phases]6355* - componentDidUpdate6356*6357* - componentWillUnmount6358* - [children's componentWillUnmount]6359* - [children destroyed]6360* - (destroyed): The instance is now blank, released by React and ready for GC.6361*6362* -----------------------------------------------------------------------------6363*/63646365/**6366* An incrementing ID assigned to each component when it is mounted. This is6367* used to enforce the order in which `ReactUpdates` updates dirty components.6368*6369* @private6370*/6371var nextMountID = 1;63726373/**6374* @lends {ReactCompositeComponent.prototype}6375*/6376var ReactCompositeComponentMixin = {63776378/**6379* Base constructor for all composite component.6380*6381* @param {ReactElement} element6382* @final6383* @internal6384*/6385construct: function(element) {6386this._currentElement = element;6387this._rootNodeID = null;6388this._instance = null;63896390// See ReactUpdateQueue6391this._pendingElement = null;6392this._pendingStateQueue = null;6393this._pendingReplaceState = false;6394this._pendingForceUpdate = false;63956396this._renderedComponent = null;63976398this._context = null;6399this._mountOrder = 0;6400this._isTopLevel = false;64016402// See ReactUpdates and ReactUpdateQueue.6403this._pendingCallbacks = null;6404},64056406/**6407* Initializes the component, renders markup, and registers event listeners.6408*6409* @param {string} rootID DOM ID of the root node.6410* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction6411* @return {?string} Rendered markup to be inserted into the DOM.6412* @final6413* @internal6414*/6415mountComponent: function(rootID, transaction, context) {6416this._context = context;6417this._mountOrder = nextMountID++;6418this._rootNodeID = rootID;64196420var publicProps = this._processProps(this._currentElement.props);6421var publicContext = this._processContext(this._currentElement._context);64226423var Component = ReactNativeComponent.getComponentClassForElement(6424this._currentElement6425);64266427// Initialize the public class6428var inst = new Component(publicProps, publicContext);6429// These should be set up in the constructor, but as a convenience for6430// simpler class abstractions, we set them up after the fact.6431inst.props = publicProps;6432inst.context = publicContext;6433inst.refs = emptyObject;64346435this._instance = inst;64366437// Store a reference from the instance back to the internal representation6438ReactInstanceMap.set(inst, this);64396440if ("production" !== process.env.NODE_ENV) {6441this._warnIfContextsDiffer(this._currentElement._context, context);6442}64436444if ("production" !== process.env.NODE_ENV) {6445// Since plain JS classes are defined without any special initialization6446// logic, we can not catch common errors early. Therefore, we have to6447// catch them here, at initialization time, instead.6448("production" !== process.env.NODE_ENV ? warning(6449!inst.getInitialState ||6450inst.getInitialState.isReactClassApproved,6451'getInitialState was defined on %s, a plain JavaScript class. ' +6452'This is only supported for classes created using React.createClass. ' +6453'Did you mean to define a state property instead?',6454this.getName() || 'a component'6455) : null);6456("production" !== process.env.NODE_ENV ? warning(6457!inst.propTypes,6458'propTypes was defined as an instance property on %s. Use a static ' +6459'property to define propTypes instead.',6460this.getName() || 'a component'6461) : null);6462("production" !== process.env.NODE_ENV ? warning(6463!inst.contextTypes,6464'contextTypes was defined as an instance property on %s. Use a ' +6465'static property to define contextTypes instead.',6466this.getName() || 'a component'6467) : null);6468("production" !== process.env.NODE_ENV ? warning(6469typeof inst.componentShouldUpdate !== 'function',6470'%s has a method called ' +6471'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +6472'The name is phrased as a question because the function is ' +6473'expected to return a value.',6474(this.getName() || 'A component')6475) : null);6476}64776478var initialState = inst.state;6479if (initialState === undefined) {6480inst.state = initialState = null;6481}6482("production" !== process.env.NODE_ENV ? invariant(6483typeof initialState === 'object' && !Array.isArray(initialState),6484'%s.state: must be set to an object or null',6485this.getName() || 'ReactCompositeComponent'6486) : invariant(typeof initialState === 'object' && !Array.isArray(initialState)));64876488this._pendingStateQueue = null;6489this._pendingReplaceState = false;6490this._pendingForceUpdate = false;64916492var renderedElement;64936494var previouslyMounting = ReactLifeCycle.currentlyMountingInstance;6495ReactLifeCycle.currentlyMountingInstance = this;6496try {6497if (inst.componentWillMount) {6498inst.componentWillMount();6499// When mounting, calls to `setState` by `componentWillMount` will set6500// `this._pendingStateQueue` without triggering a re-render.6501if (this._pendingStateQueue) {6502inst.state = this._processPendingState(inst.props, inst.context);6503}6504}65056506renderedElement = this._renderValidatedComponent();6507} finally {6508ReactLifeCycle.currentlyMountingInstance = previouslyMounting;6509}65106511this._renderedComponent = this._instantiateReactComponent(6512renderedElement,6513this._currentElement.type // The wrapping type6514);65156516var markup = ReactReconciler.mountComponent(6517this._renderedComponent,6518rootID,6519transaction,6520this._processChildContext(context)6521);6522if (inst.componentDidMount) {6523transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);6524}65256526return markup;6527},65286529/**6530* Releases any resources allocated by `mountComponent`.6531*6532* @final6533* @internal6534*/6535unmountComponent: function() {6536var inst = this._instance;65376538if (inst.componentWillUnmount) {6539var previouslyUnmounting = ReactLifeCycle.currentlyUnmountingInstance;6540ReactLifeCycle.currentlyUnmountingInstance = this;6541try {6542inst.componentWillUnmount();6543} finally {6544ReactLifeCycle.currentlyUnmountingInstance = previouslyUnmounting;6545}6546}65476548ReactReconciler.unmountComponent(this._renderedComponent);6549this._renderedComponent = null;65506551// Reset pending fields6552this._pendingStateQueue = null;6553this._pendingReplaceState = false;6554this._pendingForceUpdate = false;6555this._pendingCallbacks = null;6556this._pendingElement = null;65576558// These fields do not really need to be reset since this object is no6559// longer accessible.6560this._context = null;6561this._rootNodeID = null;65626563// Delete the reference from the instance to this internal representation6564// which allow the internals to be properly cleaned up even if the user6565// leaks a reference to the public instance.6566ReactInstanceMap.remove(inst);65676568// Some existing components rely on inst.props even after they've been6569// destroyed (in event handlers).6570// TODO: inst.props = null;6571// TODO: inst.state = null;6572// TODO: inst.context = null;6573},65746575/**6576* Schedule a partial update to the props. Only used for internal testing.6577*6578* @param {object} partialProps Subset of the next props.6579* @param {?function} callback Called after props are updated.6580* @final6581* @internal6582*/6583_setPropsInternal: function(partialProps, callback) {6584// This is a deoptimized path. We optimize for always having an element.6585// This creates an extra internal element.6586var element = this._pendingElement || this._currentElement;6587this._pendingElement = ReactElement.cloneAndReplaceProps(6588element,6589assign({}, element.props, partialProps)6590);6591ReactUpdates.enqueueUpdate(this, callback);6592},65936594/**6595* Filters the context object to only contain keys specified in6596* `contextTypes`6597*6598* @param {object} context6599* @return {?object}6600* @private6601*/6602_maskContext: function(context) {6603var maskedContext = null;6604// This really should be getting the component class for the element,6605// but we know that we're not going to need it for built-ins.6606if (typeof this._currentElement.type === 'string') {6607return emptyObject;6608}6609var contextTypes = this._currentElement.type.contextTypes;6610if (!contextTypes) {6611return emptyObject;6612}6613maskedContext = {};6614for (var contextName in contextTypes) {6615maskedContext[contextName] = context[contextName];6616}6617return maskedContext;6618},66196620/**6621* Filters the context object to only contain keys specified in6622* `contextTypes`, and asserts that they are valid.6623*6624* @param {object} context6625* @return {?object}6626* @private6627*/6628_processContext: function(context) {6629var maskedContext = this._maskContext(context);6630if ("production" !== process.env.NODE_ENV) {6631var Component = ReactNativeComponent.getComponentClassForElement(6632this._currentElement6633);6634if (Component.contextTypes) {6635this._checkPropTypes(6636Component.contextTypes,6637maskedContext,6638ReactPropTypeLocations.context6639);6640}6641}6642return maskedContext;6643},66446645/**6646* @param {object} currentContext6647* @return {object}6648* @private6649*/6650_processChildContext: function(currentContext) {6651var inst = this._instance;6652var childContext = inst.getChildContext && inst.getChildContext();6653if (childContext) {6654("production" !== process.env.NODE_ENV ? invariant(6655typeof inst.constructor.childContextTypes === 'object',6656'%s.getChildContext(): childContextTypes must be defined in order to ' +6657'use getChildContext().',6658this.getName() || 'ReactCompositeComponent'6659) : invariant(typeof inst.constructor.childContextTypes === 'object'));6660if ("production" !== process.env.NODE_ENV) {6661this._checkPropTypes(6662inst.constructor.childContextTypes,6663childContext,6664ReactPropTypeLocations.childContext6665);6666}6667for (var name in childContext) {6668("production" !== process.env.NODE_ENV ? invariant(6669name in inst.constructor.childContextTypes,6670'%s.getChildContext(): key "%s" is not defined in childContextTypes.',6671this.getName() || 'ReactCompositeComponent',6672name6673) : invariant(name in inst.constructor.childContextTypes));6674}6675return assign({}, currentContext, childContext);6676}6677return currentContext;6678},66796680/**6681* Processes props by setting default values for unspecified props and6682* asserting that the props are valid. Does not mutate its argument; returns6683* a new props object with defaults merged in.6684*6685* @param {object} newProps6686* @return {object}6687* @private6688*/6689_processProps: function(newProps) {6690if ("production" !== process.env.NODE_ENV) {6691var Component = ReactNativeComponent.getComponentClassForElement(6692this._currentElement6693);6694if (Component.propTypes) {6695this._checkPropTypes(6696Component.propTypes,6697newProps,6698ReactPropTypeLocations.prop6699);6700}6701}6702return newProps;6703},67046705/**6706* Assert that the props are valid6707*6708* @param {object} propTypes Map of prop name to a ReactPropType6709* @param {object} props6710* @param {string} location e.g. "prop", "context", "child context"6711* @private6712*/6713_checkPropTypes: function(propTypes, props, location) {6714// TODO: Stop validating prop types here and only use the element6715// validation.6716var componentName = this.getName();6717for (var propName in propTypes) {6718if (propTypes.hasOwnProperty(propName)) {6719var error;6720try {6721// This is intentionally an invariant that gets caught. It's the same6722// behavior as without this statement except with a better message.6723("production" !== process.env.NODE_ENV ? invariant(6724typeof propTypes[propName] === 'function',6725'%s: %s type `%s` is invalid; it must be a function, usually ' +6726'from React.PropTypes.',6727componentName || 'React class',6728ReactPropTypeLocationNames[location],6729propName6730) : invariant(typeof propTypes[propName] === 'function'));6731error = propTypes[propName](props, propName, componentName, location);6732} catch (ex) {6733error = ex;6734}6735if (error instanceof Error) {6736// We may want to extend this logic for similar errors in6737// React.render calls, so I'm abstracting it away into6738// a function to minimize refactoring in the future6739var addendum = getDeclarationErrorAddendum(this);67406741if (location === ReactPropTypeLocations.prop) {6742// Preface gives us something to blacklist in warning module6743("production" !== process.env.NODE_ENV ? warning(6744false,6745'Failed Composite propType: %s%s',6746error.message,6747addendum6748) : null);6749} else {6750("production" !== process.env.NODE_ENV ? warning(6751false,6752'Failed Context Types: %s%s',6753error.message,6754addendum6755) : null);6756}6757}6758}6759}6760},67616762receiveComponent: function(nextElement, transaction, nextContext) {6763var prevElement = this._currentElement;6764var prevContext = this._context;67656766this._pendingElement = null;67676768this.updateComponent(6769transaction,6770prevElement,6771nextElement,6772prevContext,6773nextContext6774);6775},67766777/**6778* If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`6779* is set, update the component.6780*6781* @param {ReactReconcileTransaction} transaction6782* @internal6783*/6784performUpdateIfNecessary: function(transaction) {6785if (this._pendingElement != null) {6786ReactReconciler.receiveComponent(6787this,6788this._pendingElement || this._currentElement,6789transaction,6790this._context6791);6792}67936794if (this._pendingStateQueue !== null || this._pendingForceUpdate) {6795if ("production" !== process.env.NODE_ENV) {6796ReactElementValidator.checkAndWarnForMutatedProps(6797this._currentElement6798);6799}68006801this.updateComponent(6802transaction,6803this._currentElement,6804this._currentElement,6805this._context,6806this._context6807);6808}6809},68106811/**6812* Compare two contexts, warning if they are different6813* TODO: Remove this check when owner-context is removed6814*/6815_warnIfContextsDiffer: function(ownerBasedContext, parentBasedContext) {6816ownerBasedContext = this._maskContext(ownerBasedContext);6817parentBasedContext = this._maskContext(parentBasedContext);6818var parentKeys = Object.keys(parentBasedContext).sort();6819var displayName = this.getName() || 'ReactCompositeComponent';6820for (var i = 0; i < parentKeys.length; i++) {6821var key = parentKeys[i];6822("production" !== process.env.NODE_ENV ? warning(6823ownerBasedContext[key] === parentBasedContext[key],6824'owner-based and parent-based contexts differ ' +6825'(values: `%s` vs `%s`) for key (%s) while mounting %s ' +6826'(see: http://fb.me/react-context-by-parent)',6827ownerBasedContext[key],6828parentBasedContext[key],6829key,6830displayName6831) : null);6832}6833},68346835/**6836* Perform an update to a mounted component. The componentWillReceiveProps and6837* shouldComponentUpdate methods are called, then (assuming the update isn't6838* skipped) the remaining update lifecycle methods are called and the DOM6839* representation is updated.6840*6841* By default, this implements React's rendering and reconciliation algorithm.6842* Sophisticated clients may wish to override this.6843*6844* @param {ReactReconcileTransaction} transaction6845* @param {ReactElement} prevParentElement6846* @param {ReactElement} nextParentElement6847* @internal6848* @overridable6849*/6850updateComponent: function(6851transaction,6852prevParentElement,6853nextParentElement,6854prevUnmaskedContext,6855nextUnmaskedContext6856) {6857var inst = this._instance;68586859var nextContext = inst.context;6860var nextProps = inst.props;68616862// Distinguish between a props update versus a simple state update6863if (prevParentElement !== nextParentElement) {6864nextContext = this._processContext(nextParentElement._context);6865nextProps = this._processProps(nextParentElement.props);68666867if ("production" !== process.env.NODE_ENV) {6868if (nextUnmaskedContext != null) {6869this._warnIfContextsDiffer(6870nextParentElement._context,6871nextUnmaskedContext6872);6873}6874}68756876// An update here will schedule an update but immediately set6877// _pendingStateQueue which will ensure that any state updates gets6878// immediately reconciled instead of waiting for the next batch.68796880if (inst.componentWillReceiveProps) {6881inst.componentWillReceiveProps(nextProps, nextContext);6882}6883}68846885var nextState = this._processPendingState(nextProps, nextContext);68866887var shouldUpdate =6888this._pendingForceUpdate ||6889!inst.shouldComponentUpdate ||6890inst.shouldComponentUpdate(nextProps, nextState, nextContext);68916892if ("production" !== process.env.NODE_ENV) {6893("production" !== process.env.NODE_ENV ? warning(6894typeof shouldUpdate !== 'undefined',6895'%s.shouldComponentUpdate(): Returned undefined instead of a ' +6896'boolean value. Make sure to return true or false.',6897this.getName() || 'ReactCompositeComponent'6898) : null);6899}69006901if (shouldUpdate) {6902this._pendingForceUpdate = false;6903// Will set `this.props`, `this.state` and `this.context`.6904this._performComponentUpdate(6905nextParentElement,6906nextProps,6907nextState,6908nextContext,6909transaction,6910nextUnmaskedContext6911);6912} else {6913// If it's determined that a component should not update, we still want6914// to set props and state but we shortcut the rest of the update.6915this._currentElement = nextParentElement;6916this._context = nextUnmaskedContext;6917inst.props = nextProps;6918inst.state = nextState;6919inst.context = nextContext;6920}6921},69226923_processPendingState: function(props, context) {6924var inst = this._instance;6925var queue = this._pendingStateQueue;6926var replace = this._pendingReplaceState;6927this._pendingReplaceState = false;6928this._pendingStateQueue = null;69296930if (!queue) {6931return inst.state;6932}69336934var nextState = assign({}, replace ? queue[0] : inst.state);6935for (var i = replace ? 1 : 0; i < queue.length; i++) {6936var partial = queue[i];6937assign(6938nextState,6939typeof partial === 'function' ?6940partial.call(inst, nextState, props, context) :6941partial6942);6943}69446945return nextState;6946},69476948/**6949* Merges new props and state, notifies delegate methods of update and6950* performs update.6951*6952* @param {ReactElement} nextElement Next element6953* @param {object} nextProps Next public object to set as properties.6954* @param {?object} nextState Next object to set as state.6955* @param {?object} nextContext Next public object to set as context.6956* @param {ReactReconcileTransaction} transaction6957* @param {?object} unmaskedContext6958* @private6959*/6960_performComponentUpdate: function(6961nextElement,6962nextProps,6963nextState,6964nextContext,6965transaction,6966unmaskedContext6967) {6968var inst = this._instance;69696970var prevProps = inst.props;6971var prevState = inst.state;6972var prevContext = inst.context;69736974if (inst.componentWillUpdate) {6975inst.componentWillUpdate(nextProps, nextState, nextContext);6976}69776978this._currentElement = nextElement;6979this._context = unmaskedContext;6980inst.props = nextProps;6981inst.state = nextState;6982inst.context = nextContext;69836984this._updateRenderedComponent(transaction, unmaskedContext);69856986if (inst.componentDidUpdate) {6987transaction.getReactMountReady().enqueue(6988inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext),6989inst6990);6991}6992},69936994/**6995* Call the component's `render` method and update the DOM accordingly.6996*6997* @param {ReactReconcileTransaction} transaction6998* @internal6999*/7000_updateRenderedComponent: function(transaction, context) {7001var prevComponentInstance = this._renderedComponent;7002var prevRenderedElement = prevComponentInstance._currentElement;7003var nextRenderedElement = this._renderValidatedComponent();7004if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {7005ReactReconciler.receiveComponent(7006prevComponentInstance,7007nextRenderedElement,7008transaction,7009this._processChildContext(context)7010);7011} else {7012// These two IDs are actually the same! But nothing should rely on that.7013var thisID = this._rootNodeID;7014var prevComponentID = prevComponentInstance._rootNodeID;7015ReactReconciler.unmountComponent(prevComponentInstance);70167017this._renderedComponent = this._instantiateReactComponent(7018nextRenderedElement,7019this._currentElement.type7020);7021var nextMarkup = ReactReconciler.mountComponent(7022this._renderedComponent,7023thisID,7024transaction,7025context7026);7027this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);7028}7029},70307031/**7032* @protected7033*/7034_replaceNodeWithMarkupByID: function(prevComponentID, nextMarkup) {7035ReactComponentEnvironment.replaceNodeWithMarkupByID(7036prevComponentID,7037nextMarkup7038);7039},70407041/**7042* @protected7043*/7044_renderValidatedComponentWithoutOwnerOrContext: function() {7045var inst = this._instance;7046var renderedComponent = inst.render();7047if ("production" !== process.env.NODE_ENV) {7048// We allow auto-mocks to proceed as if they're returning null.7049if (typeof renderedComponent === 'undefined' &&7050inst.render._isMockFunction) {7051// This is probably bad practice. Consider warning here and7052// deprecating this convenience.7053renderedComponent = null;7054}7055}70567057return renderedComponent;7058},70597060/**7061* @private7062*/7063_renderValidatedComponent: function() {7064var renderedComponent;7065var previousContext = ReactContext.current;7066ReactContext.current = this._processChildContext(7067this._currentElement._context7068);7069ReactCurrentOwner.current = this;7070try {7071renderedComponent =7072this._renderValidatedComponentWithoutOwnerOrContext();7073} finally {7074ReactContext.current = previousContext;7075ReactCurrentOwner.current = null;7076}7077("production" !== process.env.NODE_ENV ? invariant(7078// TODO: An `isValidNode` function would probably be more appropriate7079renderedComponent === null || renderedComponent === false ||7080ReactElement.isValidElement(renderedComponent),7081'%s.render(): A valid ReactComponent must be returned. You may have ' +7082'returned undefined, an array or some other invalid object.',7083this.getName() || 'ReactCompositeComponent'7084) : invariant(// TODO: An `isValidNode` function would probably be more appropriate7085renderedComponent === null || renderedComponent === false ||7086ReactElement.isValidElement(renderedComponent)));7087return renderedComponent;7088},70897090/**7091* Lazily allocates the refs object and stores `component` as `ref`.7092*7093* @param {string} ref Reference name.7094* @param {component} component Component to store as `ref`.7095* @final7096* @private7097*/7098attachRef: function(ref, component) {7099var inst = this.getPublicInstance();7100var refs = inst.refs === emptyObject ? (inst.refs = {}) : inst.refs;7101refs[ref] = component.getPublicInstance();7102},71037104/**7105* Detaches a reference name.7106*7107* @param {string} ref Name to dereference.7108* @final7109* @private7110*/7111detachRef: function(ref) {7112var refs = this.getPublicInstance().refs;7113delete refs[ref];7114},71157116/**7117* Get a text description of the component that can be used to identify it7118* in error messages.7119* @return {string} The name or null.7120* @internal7121*/7122getName: function() {7123var type = this._currentElement.type;7124var constructor = this._instance && this._instance.constructor;7125return (7126type.displayName || (constructor && constructor.displayName) ||7127type.name || (constructor && constructor.name) ||7128null7129);7130},71317132/**7133* Get the publicly accessible representation of this component - i.e. what7134* is exposed by refs and returned by React.render. Can be null for stateless7135* components.7136*7137* @return {ReactComponent} the public component instance.7138* @internal7139*/7140getPublicInstance: function() {7141return this._instance;7142},71437144// Stub7145_instantiateReactComponent: null71467147};71487149ReactPerf.measureMethods(7150ReactCompositeComponentMixin,7151'ReactCompositeComponent',7152{7153mountComponent: 'mountComponent',7154updateComponent: 'updateComponent',7155_renderValidatedComponent: '_renderValidatedComponent'7156}7157);71587159var ReactCompositeComponent = {71607161Mixin: ReactCompositeComponentMixin71627163};71647165module.exports = ReactCompositeComponent;716671677168}).call(this,require("FWaASH"))7169},{"./Object.assign":27,"./ReactComponentEnvironment":37,"./ReactContext":39,"./ReactCurrentOwner":40,"./ReactElement":58,"./ReactElementValidator":59,"./ReactInstanceMap":68,"./ReactLifeCycle":69,"./ReactNativeComponent":74,"./ReactPerf":76,"./ReactPropTypeLocationNames":77,"./ReactPropTypeLocations":78,"./ReactReconciler":82,"./ReactUpdates":88,"./emptyObject":116,"./invariant":136,"./shouldUpdateReactComponent":152,"./warning":155,"FWaASH":1}],39:[function(require,module,exports){7170(function (process){7171/**7172* Copyright 2013-2015, Facebook, Inc.7173* All rights reserved.7174*7175* This source code is licensed under the BSD-style license found in the7176* LICENSE file in the root directory of this source tree. An additional grant7177* of patent rights can be found in the PATENTS file in the same directory.7178*7179* @providesModule ReactContext7180*/71817182'use strict';71837184var assign = require("./Object.assign");7185var emptyObject = require("./emptyObject");7186var warning = require("./warning");71877188var didWarn = false;71897190/**7191* Keeps track of the current context.7192*7193* The context is automatically passed down the component ownership hierarchy7194* and is accessible via `this.context` on ReactCompositeComponents.7195*/7196var ReactContext = {71977198/**7199* @internal7200* @type {object}7201*/7202current: emptyObject,72037204/**7205* Temporarily extends the current context while executing scopedCallback.7206*7207* A typical use case might look like7208*7209* render: function() {7210* var children = ReactContext.withContext({foo: 'foo'}, () => (7211*7212* ));7213* return <div>{children}</div>;7214* }7215*7216* @param {object} newContext New context to merge into the existing context7217* @param {function} scopedCallback Callback to run with the new context7218* @return {ReactComponent|array<ReactComponent>}7219*/7220withContext: function(newContext, scopedCallback) {7221if ("production" !== process.env.NODE_ENV) {7222("production" !== process.env.NODE_ENV ? warning(7223didWarn,7224'withContext is deprecated and will be removed in a future version. ' +7225'Use a wrapper component with getChildContext instead.'7226) : null);72277228didWarn = true;7229}72307231var result;7232var previousContext = ReactContext.current;7233ReactContext.current = assign({}, previousContext, newContext);7234try {7235result = scopedCallback();7236} finally {7237ReactContext.current = previousContext;7238}7239return result;7240}72417242};72437244module.exports = ReactContext;724572467247}).call(this,require("FWaASH"))7248},{"./Object.assign":27,"./emptyObject":116,"./warning":155,"FWaASH":1}],40:[function(require,module,exports){7249/**7250* Copyright 2013-2015, Facebook, Inc.7251* All rights reserved.7252*7253* This source code is licensed under the BSD-style license found in the7254* LICENSE file in the root directory of this source tree. An additional grant7255* of patent rights can be found in the PATENTS file in the same directory.7256*7257* @providesModule ReactCurrentOwner7258*/72597260'use strict';72617262/**7263* Keeps track of the current owner.7264*7265* The current owner is the component who should own any components that are7266* currently being constructed.7267*7268* The depth indicate how many composite components are above this render level.7269*/7270var ReactCurrentOwner = {72717272/**7273* @internal7274* @type {ReactComponent}7275*/7276current: null72777278};72797280module.exports = ReactCurrentOwner;728172827283},{}],41:[function(require,module,exports){7284(function (process){7285/**7286* Copyright 2013-2015, Facebook, Inc.7287* All rights reserved.7288*7289* This source code is licensed under the BSD-style license found in the7290* LICENSE file in the root directory of this source tree. An additional grant7291* of patent rights can be found in the PATENTS file in the same directory.7292*7293* @providesModule ReactDOM7294* @typechecks static-only7295*/72967297'use strict';72987299var ReactElement = require("./ReactElement");7300var ReactElementValidator = require("./ReactElementValidator");73017302var mapObject = require("./mapObject");73037304/**7305* Create a factory that creates HTML tag elements.7306*7307* @param {string} tag Tag name (e.g. `div`).7308* @private7309*/7310function createDOMFactory(tag) {7311if ("production" !== process.env.NODE_ENV) {7312return ReactElementValidator.createFactory(tag);7313}7314return ReactElement.createFactory(tag);7315}73167317/**7318* Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.7319* This is also accessible via `React.DOM`.7320*7321* @public7322*/7323var ReactDOM = mapObject({7324a: 'a',7325abbr: 'abbr',7326address: 'address',7327area: 'area',7328article: 'article',7329aside: 'aside',7330audio: 'audio',7331b: 'b',7332base: 'base',7333bdi: 'bdi',7334bdo: 'bdo',7335big: 'big',7336blockquote: 'blockquote',7337body: 'body',7338br: 'br',7339button: 'button',7340canvas: 'canvas',7341caption: 'caption',7342cite: 'cite',7343code: 'code',7344col: 'col',7345colgroup: 'colgroup',7346data: 'data',7347datalist: 'datalist',7348dd: 'dd',7349del: 'del',7350details: 'details',7351dfn: 'dfn',7352dialog: 'dialog',7353div: 'div',7354dl: 'dl',7355dt: 'dt',7356em: 'em',7357embed: 'embed',7358fieldset: 'fieldset',7359figcaption: 'figcaption',7360figure: 'figure',7361footer: 'footer',7362form: 'form',7363h1: 'h1',7364h2: 'h2',7365h3: 'h3',7366h4: 'h4',7367h5: 'h5',7368h6: 'h6',7369head: 'head',7370header: 'header',7371hr: 'hr',7372html: 'html',7373i: 'i',7374iframe: 'iframe',7375img: 'img',7376input: 'input',7377ins: 'ins',7378kbd: 'kbd',7379keygen: 'keygen',7380label: 'label',7381legend: 'legend',7382li: 'li',7383link: 'link',7384main: 'main',7385map: 'map',7386mark: 'mark',7387menu: 'menu',7388menuitem: 'menuitem',7389meta: 'meta',7390meter: 'meter',7391nav: 'nav',7392noscript: 'noscript',7393object: 'object',7394ol: 'ol',7395optgroup: 'optgroup',7396option: 'option',7397output: 'output',7398p: 'p',7399param: 'param',7400picture: 'picture',7401pre: 'pre',7402progress: 'progress',7403q: 'q',7404rp: 'rp',7405rt: 'rt',7406ruby: 'ruby',7407s: 's',7408samp: 'samp',7409script: 'script',7410section: 'section',7411select: 'select',7412small: 'small',7413source: 'source',7414span: 'span',7415strong: 'strong',7416style: 'style',7417sub: 'sub',7418summary: 'summary',7419sup: 'sup',7420table: 'table',7421tbody: 'tbody',7422td: 'td',7423textarea: 'textarea',7424tfoot: 'tfoot',7425th: 'th',7426thead: 'thead',7427time: 'time',7428title: 'title',7429tr: 'tr',7430track: 'track',7431u: 'u',7432ul: 'ul',7433'var': 'var',7434video: 'video',7435wbr: 'wbr',74367437// SVG7438circle: 'circle',7439defs: 'defs',7440ellipse: 'ellipse',7441g: 'g',7442line: 'line',7443linearGradient: 'linearGradient',7444mask: 'mask',7445path: 'path',7446pattern: 'pattern',7447polygon: 'polygon',7448polyline: 'polyline',7449radialGradient: 'radialGradient',7450rect: 'rect',7451stop: 'stop',7452svg: 'svg',7453text: 'text',7454tspan: 'tspan'74557456}, createDOMFactory);74577458module.exports = ReactDOM;745974607461}).call(this,require("FWaASH"))7462},{"./ReactElement":58,"./ReactElementValidator":59,"./mapObject":143,"FWaASH":1}],42:[function(require,module,exports){7463/**7464* Copyright 2013-2015, Facebook, Inc.7465* All rights reserved.7466*7467* This source code is licensed under the BSD-style license found in the7468* LICENSE file in the root directory of this source tree. An additional grant7469* of patent rights can be found in the PATENTS file in the same directory.7470*7471* @providesModule ReactDOMButton7472*/74737474'use strict';74757476var AutoFocusMixin = require("./AutoFocusMixin");7477var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");7478var ReactClass = require("./ReactClass");7479var ReactElement = require("./ReactElement");74807481var keyMirror = require("./keyMirror");74827483var button = ReactElement.createFactory('button');74847485var mouseListenerNames = keyMirror({7486onClick: true,7487onDoubleClick: true,7488onMouseDown: true,7489onMouseMove: true,7490onMouseUp: true,7491onClickCapture: true,7492onDoubleClickCapture: true,7493onMouseDownCapture: true,7494onMouseMoveCapture: true,7495onMouseUpCapture: true7496});74977498/**7499* Implements a <button> native component that does not receive mouse events7500* when `disabled` is set.7501*/7502var ReactDOMButton = ReactClass.createClass({7503displayName: 'ReactDOMButton',7504tagName: 'BUTTON',75057506mixins: [AutoFocusMixin, ReactBrowserComponentMixin],75077508render: function() {7509var props = {};75107511// Copy the props; except the mouse listeners if we're disabled7512for (var key in this.props) {7513if (this.props.hasOwnProperty(key) &&7514(!this.props.disabled || !mouseListenerNames[key])) {7515props[key] = this.props[key];7516}7517}75187519return button(props, this.props.children);7520}75217522});75237524module.exports = ReactDOMButton;752575267527},{"./AutoFocusMixin":2,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58,"./keyMirror":141}],43:[function(require,module,exports){7528(function (process){7529/**7530* Copyright 2013-2015, Facebook, Inc.7531* All rights reserved.7532*7533* This source code is licensed under the BSD-style license found in the7534* LICENSE file in the root directory of this source tree. An additional grant7535* of patent rights can be found in the PATENTS file in the same directory.7536*7537* @providesModule ReactDOMComponent7538* @typechecks static-only7539*/75407541/* global hasOwnProperty:true */75427543'use strict';75447545var CSSPropertyOperations = require("./CSSPropertyOperations");7546var DOMProperty = require("./DOMProperty");7547var DOMPropertyOperations = require("./DOMPropertyOperations");7548var ReactBrowserEventEmitter = require("./ReactBrowserEventEmitter");7549var ReactComponentBrowserEnvironment =7550require("./ReactComponentBrowserEnvironment");7551var ReactMount = require("./ReactMount");7552var ReactMultiChild = require("./ReactMultiChild");7553var ReactPerf = require("./ReactPerf");75547555var assign = require("./Object.assign");7556var escapeTextContentForBrowser = require("./escapeTextContentForBrowser");7557var invariant = require("./invariant");7558var isEventSupported = require("./isEventSupported");7559var keyOf = require("./keyOf");7560var warning = require("./warning");75617562var deleteListener = ReactBrowserEventEmitter.deleteListener;7563var listenTo = ReactBrowserEventEmitter.listenTo;7564var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;75657566// For quickly matching children type, to test if can be treated as content.7567var CONTENT_TYPES = {'string': true, 'number': true};75687569var STYLE = keyOf({style: null});75707571var ELEMENT_NODE_TYPE = 1;75727573/**7574* Optionally injectable operations for mutating the DOM7575*/7576var BackendIDOperations = null;75777578/**7579* @param {?object} props7580*/7581function assertValidProps(props) {7582if (!props) {7583return;7584}7585// Note the use of `==` which checks for null or undefined.7586if (props.dangerouslySetInnerHTML != null) {7587("production" !== process.env.NODE_ENV ? invariant(7588props.children == null,7589'Can only set one of `children` or `props.dangerouslySetInnerHTML`.'7590) : invariant(props.children == null));7591("production" !== process.env.NODE_ENV ? invariant(7592props.dangerouslySetInnerHTML.__html != null,7593'`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' +7594'Please visit http://fb.me/react-invariant-dangerously-set-inner-html ' +7595'for more information.'7596) : invariant(props.dangerouslySetInnerHTML.__html != null));7597}7598if ("production" !== process.env.NODE_ENV) {7599("production" !== process.env.NODE_ENV ? warning(7600props.innerHTML == null,7601'Directly setting property `innerHTML` is not permitted. ' +7602'For more information, lookup documentation on `dangerouslySetInnerHTML`.'7603) : null);7604("production" !== process.env.NODE_ENV ? warning(7605!props.contentEditable || props.children == null,7606'A component is `contentEditable` and contains `children` managed by ' +7607'React. It is now your responsibility to guarantee that none of ' +7608'those nodes are unexpectedly modified or duplicated. This is ' +7609'probably not intentional.'7610) : null);7611}7612("production" !== process.env.NODE_ENV ? invariant(7613props.style == null || typeof props.style === 'object',7614'The `style` prop expects a mapping from style properties to values, ' +7615'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' +7616'using JSX.'7617) : invariant(props.style == null || typeof props.style === 'object'));7618}76197620function putListener(id, registrationName, listener, transaction) {7621if ("production" !== process.env.NODE_ENV) {7622// IE8 has no API for event capturing and the `onScroll` event doesn't7623// bubble.7624("production" !== process.env.NODE_ENV ? warning(7625registrationName !== 'onScroll' || isEventSupported('scroll', true),7626'This browser doesn\'t support the `onScroll` event'7627) : null);7628}7629var container = ReactMount.findReactContainerForID(id);7630if (container) {7631var doc = container.nodeType === ELEMENT_NODE_TYPE ?7632container.ownerDocument :7633container;7634listenTo(registrationName, doc);7635}7636transaction.getPutListenerQueue().enqueuePutListener(7637id,7638registrationName,7639listener7640);7641}76427643// For HTML, certain tags should omit their close tag. We keep a whitelist for7644// those special cased tags.76457646var omittedCloseTags = {7647'area': true,7648'base': true,7649'br': true,7650'col': true,7651'embed': true,7652'hr': true,7653'img': true,7654'input': true,7655'keygen': true,7656'link': true,7657'meta': true,7658'param': true,7659'source': true,7660'track': true,7661'wbr': true7662// NOTE: menuitem's close tag should be omitted, but that causes problems.7663};76647665// We accept any tag to be rendered but since this gets injected into abitrary7666// HTML, we want to make sure that it's a safe tag.7667// http://www.w3.org/TR/REC-xml/#NT-Name76687669var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset7670var validatedTagCache = {};7671var hasOwnProperty = {}.hasOwnProperty;76727673function validateDangerousTag(tag) {7674if (!hasOwnProperty.call(validatedTagCache, tag)) {7675("production" !== process.env.NODE_ENV ? invariant(VALID_TAG_REGEX.test(tag), 'Invalid tag: %s', tag) : invariant(VALID_TAG_REGEX.test(tag)));7676validatedTagCache[tag] = true;7677}7678}76797680/**7681* Creates a new React class that is idempotent and capable of containing other7682* React components. It accepts event listeners and DOM properties that are7683* valid according to `DOMProperty`.7684*7685* - Event listeners: `onClick`, `onMouseDown`, etc.7686* - DOM properties: `className`, `name`, `title`, etc.7687*7688* The `style` property functions differently from the DOM API. It accepts an7689* object mapping of style properties to values.7690*7691* @constructor ReactDOMComponent7692* @extends ReactMultiChild7693*/7694function ReactDOMComponent(tag) {7695validateDangerousTag(tag);7696this._tag = tag;7697this._renderedChildren = null;7698this._previousStyleCopy = null;7699this._rootNodeID = null;7700}77017702ReactDOMComponent.displayName = 'ReactDOMComponent';77037704ReactDOMComponent.Mixin = {77057706construct: function(element) {7707this._currentElement = element;7708},77097710/**7711* Generates root tag markup then recurses. This method has side effects and7712* is not idempotent.7713*7714* @internal7715* @param {string} rootID The root DOM ID for this node.7716* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction7717* @return {string} The computed markup.7718*/7719mountComponent: function(rootID, transaction, context) {7720this._rootNodeID = rootID;7721assertValidProps(this._currentElement.props);7722var closeTag = omittedCloseTags[this._tag] ? '' : '</' + this._tag + '>';7723return (7724this._createOpenTagMarkupAndPutListeners(transaction) +7725this._createContentMarkup(transaction, context) +7726closeTag7727);7728},77297730/**7731* Creates markup for the open tag and all attributes.7732*7733* This method has side effects because events get registered.7734*7735* Iterating over object properties is faster than iterating over arrays.7736* @see http://jsperf.com/obj-vs-arr-iteration7737*7738* @private7739* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction7740* @return {string} Markup of opening tag.7741*/7742_createOpenTagMarkupAndPutListeners: function(transaction) {7743var props = this._currentElement.props;7744var ret = '<' + this._tag;77457746for (var propKey in props) {7747if (!props.hasOwnProperty(propKey)) {7748continue;7749}7750var propValue = props[propKey];7751if (propValue == null) {7752continue;7753}7754if (registrationNameModules.hasOwnProperty(propKey)) {7755putListener(this._rootNodeID, propKey, propValue, transaction);7756} else {7757if (propKey === STYLE) {7758if (propValue) {7759propValue = this._previousStyleCopy = assign({}, props.style);7760}7761propValue = CSSPropertyOperations.createMarkupForStyles(propValue);7762}7763var markup =7764DOMPropertyOperations.createMarkupForProperty(propKey, propValue);7765if (markup) {7766ret += ' ' + markup;7767}7768}7769}77707771// For static pages, no need to put React ID and checksum. Saves lots of7772// bytes.7773if (transaction.renderToStaticMarkup) {7774return ret + '>';7775}77767777var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);7778return ret + ' ' + markupForID + '>';7779},77807781/**7782* Creates markup for the content between the tags.7783*7784* @private7785* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction7786* @param {object} context7787* @return {string} Content markup.7788*/7789_createContentMarkup: function(transaction, context) {7790var prefix = '';7791if (this._tag === 'listing' ||7792this._tag === 'pre' ||7793this._tag === 'textarea') {7794// Add an initial newline because browsers ignore the first newline in7795// a <listing>, <pre>, or <textarea> as an "authoring convenience" -- see7796// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody.7797prefix = '\n';7798}77997800var props = this._currentElement.props;78017802// Intentional use of != to avoid catching zero/false.7803var innerHTML = props.dangerouslySetInnerHTML;7804if (innerHTML != null) {7805if (innerHTML.__html != null) {7806return prefix + innerHTML.__html;7807}7808} else {7809var contentToUse =7810CONTENT_TYPES[typeof props.children] ? props.children : null;7811var childrenToUse = contentToUse != null ? null : props.children;7812if (contentToUse != null) {7813return prefix + escapeTextContentForBrowser(contentToUse);7814} else if (childrenToUse != null) {7815var mountImages = this.mountChildren(7816childrenToUse,7817transaction,7818context7819);7820return prefix + mountImages.join('');7821}7822}7823return prefix;7824},78257826receiveComponent: function(nextElement, transaction, context) {7827var prevElement = this._currentElement;7828this._currentElement = nextElement;7829this.updateComponent(transaction, prevElement, nextElement, context);7830},78317832/**7833* Updates a native DOM component after it has already been allocated and7834* attached to the DOM. Reconciles the root DOM node, then recurses.7835*7836* @param {ReactReconcileTransaction} transaction7837* @param {ReactElement} prevElement7838* @param {ReactElement} nextElement7839* @internal7840* @overridable7841*/7842updateComponent: function(transaction, prevElement, nextElement, context) {7843assertValidProps(this._currentElement.props);7844this._updateDOMProperties(prevElement.props, transaction);7845this._updateDOMChildren(prevElement.props, transaction, context);7846},78477848/**7849* Reconciles the properties by detecting differences in property values and7850* updating the DOM as necessary. This function is probably the single most7851* critical path for performance optimization.7852*7853* TODO: Benchmark whether checking for changed values in memory actually7854* improves performance (especially statically positioned elements).7855* TODO: Benchmark the effects of putting this at the top since 99% of props7856* do not change for a given reconciliation.7857* TODO: Benchmark areas that can be improved with caching.7858*7859* @private7860* @param {object} lastProps7861* @param {ReactReconcileTransaction} transaction7862*/7863_updateDOMProperties: function(lastProps, transaction) {7864var nextProps = this._currentElement.props;7865var propKey;7866var styleName;7867var styleUpdates;7868for (propKey in lastProps) {7869if (nextProps.hasOwnProperty(propKey) ||7870!lastProps.hasOwnProperty(propKey)) {7871continue;7872}7873if (propKey === STYLE) {7874var lastStyle = this._previousStyleCopy;7875for (styleName in lastStyle) {7876if (lastStyle.hasOwnProperty(styleName)) {7877styleUpdates = styleUpdates || {};7878styleUpdates[styleName] = '';7879}7880}7881} else if (registrationNameModules.hasOwnProperty(propKey)) {7882deleteListener(this._rootNodeID, propKey);7883} else if (7884DOMProperty.isStandardName[propKey] ||7885DOMProperty.isCustomAttribute(propKey)) {7886BackendIDOperations.deletePropertyByID(7887this._rootNodeID,7888propKey7889);7890}7891}7892for (propKey in nextProps) {7893var nextProp = nextProps[propKey];7894var lastProp = propKey === STYLE ?7895this._previousStyleCopy :7896lastProps[propKey];7897if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {7898continue;7899}7900if (propKey === STYLE) {7901if (nextProp) {7902nextProp = this._previousStyleCopy = assign({}, nextProp);7903}7904if (lastProp) {7905// Unset styles on `lastProp` but not on `nextProp`.7906for (styleName in lastProp) {7907if (lastProp.hasOwnProperty(styleName) &&7908(!nextProp || !nextProp.hasOwnProperty(styleName))) {7909styleUpdates = styleUpdates || {};7910styleUpdates[styleName] = '';7911}7912}7913// Update styles that changed since `lastProp`.7914for (styleName in nextProp) {7915if (nextProp.hasOwnProperty(styleName) &&7916lastProp[styleName] !== nextProp[styleName]) {7917styleUpdates = styleUpdates || {};7918styleUpdates[styleName] = nextProp[styleName];7919}7920}7921} else {7922// Relies on `updateStylesByID` not mutating `styleUpdates`.7923styleUpdates = nextProp;7924}7925} else if (registrationNameModules.hasOwnProperty(propKey)) {7926putListener(this._rootNodeID, propKey, nextProp, transaction);7927} else if (7928DOMProperty.isStandardName[propKey] ||7929DOMProperty.isCustomAttribute(propKey)) {7930BackendIDOperations.updatePropertyByID(7931this._rootNodeID,7932propKey,7933nextProp7934);7935}7936}7937if (styleUpdates) {7938BackendIDOperations.updateStylesByID(7939this._rootNodeID,7940styleUpdates7941);7942}7943},79447945/**7946* Reconciles the children with the various properties that affect the7947* children content.7948*7949* @param {object} lastProps7950* @param {ReactReconcileTransaction} transaction7951*/7952_updateDOMChildren: function(lastProps, transaction, context) {7953var nextProps = this._currentElement.props;79547955var lastContent =7956CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;7957var nextContent =7958CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;79597960var lastHtml =7961lastProps.dangerouslySetInnerHTML &&7962lastProps.dangerouslySetInnerHTML.__html;7963var nextHtml =7964nextProps.dangerouslySetInnerHTML &&7965nextProps.dangerouslySetInnerHTML.__html;79667967// Note the use of `!=` which checks for null or undefined.7968var lastChildren = lastContent != null ? null : lastProps.children;7969var nextChildren = nextContent != null ? null : nextProps.children;79707971// If we're switching from children to content/html or vice versa, remove7972// the old content7973var lastHasContentOrHtml = lastContent != null || lastHtml != null;7974var nextHasContentOrHtml = nextContent != null || nextHtml != null;7975if (lastChildren != null && nextChildren == null) {7976this.updateChildren(null, transaction, context);7977} else if (lastHasContentOrHtml && !nextHasContentOrHtml) {7978this.updateTextContent('');7979}79807981if (nextContent != null) {7982if (lastContent !== nextContent) {7983this.updateTextContent('' + nextContent);7984}7985} else if (nextHtml != null) {7986if (lastHtml !== nextHtml) {7987BackendIDOperations.updateInnerHTMLByID(7988this._rootNodeID,7989nextHtml7990);7991}7992} else if (nextChildren != null) {7993this.updateChildren(nextChildren, transaction, context);7994}7995},79967997/**7998* Destroys all event registrations for this instance. Does not remove from7999* the DOM. That must be done by the parent.8000*8001* @internal8002*/8003unmountComponent: function() {8004this.unmountChildren();8005ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);8006ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);8007this._rootNodeID = null;8008}80098010};80118012ReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {8013mountComponent: 'mountComponent',8014updateComponent: 'updateComponent'8015});80168017assign(8018ReactDOMComponent.prototype,8019ReactDOMComponent.Mixin,8020ReactMultiChild.Mixin8021);80228023ReactDOMComponent.injection = {8024injectIDOperations: function(IDOperations) {8025ReactDOMComponent.BackendIDOperations = BackendIDOperations = IDOperations;8026}8027};80288029module.exports = ReactDOMComponent;803080318032}).call(this,require("FWaASH"))8033},{"./CSSPropertyOperations":5,"./DOMProperty":10,"./DOMPropertyOperations":11,"./Object.assign":27,"./ReactBrowserEventEmitter":31,"./ReactComponentBrowserEnvironment":36,"./ReactMount":71,"./ReactMultiChild":72,"./ReactPerf":76,"./escapeTextContentForBrowser":117,"./invariant":136,"./isEventSupported":137,"./keyOf":142,"./warning":155,"FWaASH":1}],44:[function(require,module,exports){8034/**8035* Copyright 2013-2015, Facebook, Inc.8036* All rights reserved.8037*8038* This source code is licensed under the BSD-style license found in the8039* LICENSE file in the root directory of this source tree. An additional grant8040* of patent rights can be found in the PATENTS file in the same directory.8041*8042* @providesModule ReactDOMForm8043*/80448045'use strict';80468047var EventConstants = require("./EventConstants");8048var LocalEventTrapMixin = require("./LocalEventTrapMixin");8049var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");8050var ReactClass = require("./ReactClass");8051var ReactElement = require("./ReactElement");80528053var form = ReactElement.createFactory('form');80548055/**8056* Since onSubmit doesn't bubble OR capture on the top level in IE8, we need8057* to capture it on the <form> element itself. There are lots of hacks we could8058* do to accomplish this, but the most reliable is to make <form> a8059* composite component and use `componentDidMount` to attach the event handlers.8060*/8061var ReactDOMForm = ReactClass.createClass({8062displayName: 'ReactDOMForm',8063tagName: 'FORM',80648065mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],80668067render: function() {8068// TODO: Instead of using `ReactDOM` directly, we should use JSX. However,8069// `jshint` fails to parse JSX so in order for linting to work in the open8070// source repo, we need to just use `ReactDOM.form`.8071return form(this.props);8072},80738074componentDidMount: function() {8075this.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset');8076this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit');8077}8078});80798080module.exports = ReactDOMForm;808180828083},{"./EventConstants":15,"./LocalEventTrapMixin":25,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58}],45:[function(require,module,exports){8084(function (process){8085/**8086* Copyright 2013-2015, Facebook, Inc.8087* All rights reserved.8088*8089* This source code is licensed under the BSD-style license found in the8090* LICENSE file in the root directory of this source tree. An additional grant8091* of patent rights can be found in the PATENTS file in the same directory.8092*8093* @providesModule ReactDOMIDOperations8094* @typechecks static-only8095*/80968097/*jslint evil: true */80988099'use strict';81008101var CSSPropertyOperations = require("./CSSPropertyOperations");8102var DOMChildrenOperations = require("./DOMChildrenOperations");8103var DOMPropertyOperations = require("./DOMPropertyOperations");8104var ReactMount = require("./ReactMount");8105var ReactPerf = require("./ReactPerf");81068107var invariant = require("./invariant");8108var setInnerHTML = require("./setInnerHTML");81098110/**8111* Errors for properties that should not be updated with `updatePropertyById()`.8112*8113* @type {object}8114* @private8115*/8116var INVALID_PROPERTY_ERRORS = {8117dangerouslySetInnerHTML:8118'`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',8119style: '`style` must be set using `updateStylesByID()`.'8120};81218122/**8123* Operations used to process updates to DOM nodes. This is made injectable via8124* `ReactDOMComponent.BackendIDOperations`.8125*/8126var ReactDOMIDOperations = {81278128/**8129* Updates a DOM node with new property values. This should only be used to8130* update DOM properties in `DOMProperty`.8131*8132* @param {string} id ID of the node to update.8133* @param {string} name A valid property name, see `DOMProperty`.8134* @param {*} value New value of the property.8135* @internal8136*/8137updatePropertyByID: function(id, name, value) {8138var node = ReactMount.getNode(id);8139("production" !== process.env.NODE_ENV ? invariant(8140!INVALID_PROPERTY_ERRORS.hasOwnProperty(name),8141'updatePropertyByID(...): %s',8142INVALID_PROPERTY_ERRORS[name]8143) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)));81448145// If we're updating to null or undefined, we should remove the property8146// from the DOM node instead of inadvertantly setting to a string. This8147// brings us in line with the same behavior we have on initial render.8148if (value != null) {8149DOMPropertyOperations.setValueForProperty(node, name, value);8150} else {8151DOMPropertyOperations.deleteValueForProperty(node, name);8152}8153},81548155/**8156* Updates a DOM node to remove a property. This should only be used to remove8157* DOM properties in `DOMProperty`.8158*8159* @param {string} id ID of the node to update.8160* @param {string} name A property name to remove, see `DOMProperty`.8161* @internal8162*/8163deletePropertyByID: function(id, name, value) {8164var node = ReactMount.getNode(id);8165("production" !== process.env.NODE_ENV ? invariant(8166!INVALID_PROPERTY_ERRORS.hasOwnProperty(name),8167'updatePropertyByID(...): %s',8168INVALID_PROPERTY_ERRORS[name]8169) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)));8170DOMPropertyOperations.deleteValueForProperty(node, name, value);8171},81728173/**8174* Updates a DOM node with new style values. If a value is specified as '',8175* the corresponding style property will be unset.8176*8177* @param {string} id ID of the node to update.8178* @param {object} styles Mapping from styles to values.8179* @internal8180*/8181updateStylesByID: function(id, styles) {8182var node = ReactMount.getNode(id);8183CSSPropertyOperations.setValueForStyles(node, styles);8184},81858186/**8187* Updates a DOM node's innerHTML.8188*8189* @param {string} id ID of the node to update.8190* @param {string} html An HTML string.8191* @internal8192*/8193updateInnerHTMLByID: function(id, html) {8194var node = ReactMount.getNode(id);8195setInnerHTML(node, html);8196},81978198/**8199* Updates a DOM node's text content set by `props.content`.8200*8201* @param {string} id ID of the node to update.8202* @param {string} content Text content.8203* @internal8204*/8205updateTextContentByID: function(id, content) {8206var node = ReactMount.getNode(id);8207DOMChildrenOperations.updateTextContent(node, content);8208},82098210/**8211* Replaces a DOM node that exists in the document with markup.8212*8213* @param {string} id ID of child to be replaced.8214* @param {string} markup Dangerous markup to inject in place of child.8215* @internal8216* @see {Danger.dangerouslyReplaceNodeWithMarkup}8217*/8218dangerouslyReplaceNodeWithMarkupByID: function(id, markup) {8219var node = ReactMount.getNode(id);8220DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);8221},82228223/**8224* Updates a component's children by processing a series of updates.8225*8226* @param {array<object>} updates List of update configurations.8227* @param {array<string>} markup List of markup strings.8228* @internal8229*/8230dangerouslyProcessChildrenUpdates: function(updates, markup) {8231for (var i = 0; i < updates.length; i++) {8232updates[i].parentNode = ReactMount.getNode(updates[i].parentID);8233}8234DOMChildrenOperations.processUpdates(updates, markup);8235}8236};82378238ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {8239updatePropertyByID: 'updatePropertyByID',8240deletePropertyByID: 'deletePropertyByID',8241updateStylesByID: 'updateStylesByID',8242updateInnerHTMLByID: 'updateInnerHTMLByID',8243updateTextContentByID: 'updateTextContentByID',8244dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',8245dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'8246});82478248module.exports = ReactDOMIDOperations;824982508251}).call(this,require("FWaASH"))8252},{"./CSSPropertyOperations":5,"./DOMChildrenOperations":9,"./DOMPropertyOperations":11,"./ReactMount":71,"./ReactPerf":76,"./invariant":136,"./setInnerHTML":149,"FWaASH":1}],46:[function(require,module,exports){8253/**8254* Copyright 2013-2015, Facebook, Inc.8255* All rights reserved.8256*8257* This source code is licensed under the BSD-style license found in the8258* LICENSE file in the root directory of this source tree. An additional grant8259* of patent rights can be found in the PATENTS file in the same directory.8260*8261* @providesModule ReactDOMIframe8262*/82638264'use strict';82658266var EventConstants = require("./EventConstants");8267var LocalEventTrapMixin = require("./LocalEventTrapMixin");8268var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");8269var ReactClass = require("./ReactClass");8270var ReactElement = require("./ReactElement");82718272var iframe = ReactElement.createFactory('iframe');82738274/**8275* Since onLoad doesn't bubble OR capture on the top level in IE8, we need to8276* capture it on the <iframe> element itself. There are lots of hacks we could8277* do to accomplish this, but the most reliable is to make <iframe> a composite8278* component and use `componentDidMount` to attach the event handlers.8279*/8280var ReactDOMIframe = ReactClass.createClass({8281displayName: 'ReactDOMIframe',8282tagName: 'IFRAME',82838284mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],82858286render: function() {8287return iframe(this.props);8288},82898290componentDidMount: function() {8291this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load');8292}8293});82948295module.exports = ReactDOMIframe;829682978298},{"./EventConstants":15,"./LocalEventTrapMixin":25,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58}],47:[function(require,module,exports){8299/**8300* Copyright 2013-2015, Facebook, Inc.8301* All rights reserved.8302*8303* This source code is licensed under the BSD-style license found in the8304* LICENSE file in the root directory of this source tree. An additional grant8305* of patent rights can be found in the PATENTS file in the same directory.8306*8307* @providesModule ReactDOMImg8308*/83098310'use strict';83118312var EventConstants = require("./EventConstants");8313var LocalEventTrapMixin = require("./LocalEventTrapMixin");8314var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");8315var ReactClass = require("./ReactClass");8316var ReactElement = require("./ReactElement");83178318var img = ReactElement.createFactory('img');83198320/**8321* Since onLoad doesn't bubble OR capture on the top level in IE8, we need to8322* capture it on the <img> element itself. There are lots of hacks we could do8323* to accomplish this, but the most reliable is to make <img> a composite8324* component and use `componentDidMount` to attach the event handlers.8325*/8326var ReactDOMImg = ReactClass.createClass({8327displayName: 'ReactDOMImg',8328tagName: 'IMG',83298330mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],83318332render: function() {8333return img(this.props);8334},83358336componentDidMount: function() {8337this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load');8338this.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error');8339}8340});83418342module.exports = ReactDOMImg;834383448345},{"./EventConstants":15,"./LocalEventTrapMixin":25,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58}],48:[function(require,module,exports){8346(function (process){8347/**8348* Copyright 2013-2015, Facebook, Inc.8349* All rights reserved.8350*8351* This source code is licensed under the BSD-style license found in the8352* LICENSE file in the root directory of this source tree. An additional grant8353* of patent rights can be found in the PATENTS file in the same directory.8354*8355* @providesModule ReactDOMInput8356*/83578358'use strict';83598360var AutoFocusMixin = require("./AutoFocusMixin");8361var DOMPropertyOperations = require("./DOMPropertyOperations");8362var LinkedValueUtils = require("./LinkedValueUtils");8363var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");8364var ReactClass = require("./ReactClass");8365var ReactElement = require("./ReactElement");8366var ReactMount = require("./ReactMount");8367var ReactUpdates = require("./ReactUpdates");83688369var assign = require("./Object.assign");8370var invariant = require("./invariant");83718372var input = ReactElement.createFactory('input');83738374var instancesByReactID = {};83758376function forceUpdateIfMounted() {8377/*jshint validthis:true */8378if (this.isMounted()) {8379this.forceUpdate();8380}8381}83828383/**8384* Implements an <input> native component that allows setting these optional8385* props: `checked`, `value`, `defaultChecked`, and `defaultValue`.8386*8387* If `checked` or `value` are not supplied (or null/undefined), user actions8388* that affect the checked state or value will trigger updates to the element.8389*8390* If they are supplied (and not null/undefined), the rendered element will not8391* trigger updates to the element. Instead, the props must change in order for8392* the rendered element to be updated.8393*8394* The rendered element will be initialized as unchecked (or `defaultChecked`)8395* with an empty value (or `defaultValue`).8396*8397* @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html8398*/8399var ReactDOMInput = ReactClass.createClass({8400displayName: 'ReactDOMInput',8401tagName: 'INPUT',84028403mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],84048405getInitialState: function() {8406var defaultValue = this.props.defaultValue;8407return {8408initialChecked: this.props.defaultChecked || false,8409initialValue: defaultValue != null ? defaultValue : null8410};8411},84128413render: function() {8414// Clone `this.props` so we don't mutate the input.8415var props = assign({}, this.props);84168417props.defaultChecked = null;8418props.defaultValue = null;84198420var value = LinkedValueUtils.getValue(this);8421props.value = value != null ? value : this.state.initialValue;84228423var checked = LinkedValueUtils.getChecked(this);8424props.checked = checked != null ? checked : this.state.initialChecked;84258426props.onChange = this._handleChange;84278428return input(props, this.props.children);8429},84308431componentDidMount: function() {8432var id = ReactMount.getID(this.getDOMNode());8433instancesByReactID[id] = this;8434},84358436componentWillUnmount: function() {8437var rootNode = this.getDOMNode();8438var id = ReactMount.getID(rootNode);8439delete instancesByReactID[id];8440},84418442componentDidUpdate: function(prevProps, prevState, prevContext) {8443var rootNode = this.getDOMNode();8444if (this.props.checked != null) {8445DOMPropertyOperations.setValueForProperty(8446rootNode,8447'checked',8448this.props.checked || false8449);8450}84518452var value = LinkedValueUtils.getValue(this);8453if (value != null) {8454// Cast `value` to a string to ensure the value is set correctly. While8455// browsers typically do this as necessary, jsdom doesn't.8456DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);8457}8458},84598460_handleChange: function(event) {8461var returnValue;8462var onChange = LinkedValueUtils.getOnChange(this);8463if (onChange) {8464returnValue = onChange.call(this, event);8465}8466// Here we use asap to wait until all updates have propagated, which8467// is important when using controlled components within layers:8468// https://github.com/facebook/react/issues/16988469ReactUpdates.asap(forceUpdateIfMounted, this);84708471var name = this.props.name;8472if (this.props.type === 'radio' && name != null) {8473var rootNode = this.getDOMNode();8474var queryRoot = rootNode;84758476while (queryRoot.parentNode) {8477queryRoot = queryRoot.parentNode;8478}84798480// If `rootNode.form` was non-null, then we could try `form.elements`,8481// but that sometimes behaves strangely in IE8. We could also try using8482// `form.getElementsByName`, but that will only return direct children8483// and won't include inputs that use the HTML5 `form=` attribute. Since8484// the input might not even be in a form, let's just use the global8485// `querySelectorAll` to ensure we don't miss anything.8486var group = queryRoot.querySelectorAll(8487'input[name=' + JSON.stringify('' + name) + '][type="radio"]');84888489for (var i = 0, groupLen = group.length; i < groupLen; i++) {8490var otherNode = group[i];8491if (otherNode === rootNode ||8492otherNode.form !== rootNode.form) {8493continue;8494}8495var otherID = ReactMount.getID(otherNode);8496("production" !== process.env.NODE_ENV ? invariant(8497otherID,8498'ReactDOMInput: Mixing React and non-React radio inputs with the ' +8499'same `name` is not supported.'8500) : invariant(otherID));8501var otherInstance = instancesByReactID[otherID];8502("production" !== process.env.NODE_ENV ? invariant(8503otherInstance,8504'ReactDOMInput: Unknown radio button ID %s.',8505otherID8506) : invariant(otherInstance));8507// If this is a controlled radio button group, forcing the input that8508// was previously checked to update will cause it to be come re-checked8509// as appropriate.8510ReactUpdates.asap(forceUpdateIfMounted, otherInstance);8511}8512}85138514return returnValue;8515}85168517});85188519module.exports = ReactDOMInput;852085218522}).call(this,require("FWaASH"))8523},{"./AutoFocusMixin":2,"./DOMPropertyOperations":11,"./LinkedValueUtils":24,"./Object.assign":27,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58,"./ReactMount":71,"./ReactUpdates":88,"./invariant":136,"FWaASH":1}],49:[function(require,module,exports){8524(function (process){8525/**8526* Copyright 2013-2015, Facebook, Inc.8527* All rights reserved.8528*8529* This source code is licensed under the BSD-style license found in the8530* LICENSE file in the root directory of this source tree. An additional grant8531* of patent rights can be found in the PATENTS file in the same directory.8532*8533* @providesModule ReactDOMOption8534*/85358536'use strict';85378538var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");8539var ReactClass = require("./ReactClass");8540var ReactElement = require("./ReactElement");85418542var warning = require("./warning");85438544var option = ReactElement.createFactory('option');85458546/**8547* Implements an <option> native component that warns when `selected` is set.8548*/8549var ReactDOMOption = ReactClass.createClass({8550displayName: 'ReactDOMOption',8551tagName: 'OPTION',85528553mixins: [ReactBrowserComponentMixin],85548555componentWillMount: function() {8556// TODO (yungsters): Remove support for `selected` in <option>.8557if ("production" !== process.env.NODE_ENV) {8558("production" !== process.env.NODE_ENV ? warning(8559this.props.selected == null,8560'Use the `defaultValue` or `value` props on <select> instead of ' +8561'setting `selected` on <option>.'8562) : null);8563}8564},85658566render: function() {8567return option(this.props, this.props.children);8568}85698570});85718572module.exports = ReactDOMOption;857385748575}).call(this,require("FWaASH"))8576},{"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58,"./warning":155,"FWaASH":1}],50:[function(require,module,exports){8577/**8578* Copyright 2013-2015, Facebook, Inc.8579* All rights reserved.8580*8581* This source code is licensed under the BSD-style license found in the8582* LICENSE file in the root directory of this source tree. An additional grant8583* of patent rights can be found in the PATENTS file in the same directory.8584*8585* @providesModule ReactDOMSelect8586*/85878588'use strict';85898590var AutoFocusMixin = require("./AutoFocusMixin");8591var LinkedValueUtils = require("./LinkedValueUtils");8592var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");8593var ReactClass = require("./ReactClass");8594var ReactElement = require("./ReactElement");8595var ReactUpdates = require("./ReactUpdates");85968597var assign = require("./Object.assign");85988599var select = ReactElement.createFactory('select');86008601function updateOptionsIfPendingUpdateAndMounted() {8602/*jshint validthis:true */8603if (this._pendingUpdate) {8604this._pendingUpdate = false;8605var value = LinkedValueUtils.getValue(this);8606if (value != null && this.isMounted()) {8607updateOptions(this, value);8608}8609}8610}86118612/**8613* Validation function for `value` and `defaultValue`.8614* @private8615*/8616function selectValueType(props, propName, componentName) {8617if (props[propName] == null) {8618return null;8619}8620if (props.multiple) {8621if (!Array.isArray(props[propName])) {8622return new Error(8623("The `" + propName + "` prop supplied to <select> must be an array if ") +8624("`multiple` is true.")8625);8626}8627} else {8628if (Array.isArray(props[propName])) {8629return new Error(8630("The `" + propName + "` prop supplied to <select> must be a scalar ") +8631("value if `multiple` is false.")8632);8633}8634}8635}86368637/**8638* @param {ReactComponent} component Instance of ReactDOMSelect8639* @param {*} propValue A stringable (with `multiple`, a list of stringables).8640* @private8641*/8642function updateOptions(component, propValue) {8643var selectedValue, i, l;8644var options = component.getDOMNode().options;86458646if (component.props.multiple) {8647selectedValue = {};8648for (i = 0, l = propValue.length; i < l; i++) {8649selectedValue['' + propValue[i]] = true;8650}8651for (i = 0, l = options.length; i < l; i++) {8652var selected = selectedValue.hasOwnProperty(options[i].value);8653if (options[i].selected !== selected) {8654options[i].selected = selected;8655}8656}8657} else {8658// Do not set `select.value` as exact behavior isn't consistent across all8659// browsers for all cases.8660selectedValue = '' + propValue;8661for (i = 0, l = options.length; i < l; i++) {8662if (options[i].value === selectedValue) {8663options[i].selected = true;8664return;8665}8666}8667options[0].selected = true;8668}8669}86708671/**8672* Implements a <select> native component that allows optionally setting the8673* props `value` and `defaultValue`. If `multiple` is false, the prop must be a8674* stringable. If `multiple` is true, the prop must be an array of stringables.8675*8676* If `value` is not supplied (or null/undefined), user actions that change the8677* selected option will trigger updates to the rendered options.8678*8679* If it is supplied (and not null/undefined), the rendered options will not8680* update in response to user actions. Instead, the `value` prop must change in8681* order for the rendered options to update.8682*8683* If `defaultValue` is provided, any options with the supplied values will be8684* selected.8685*/8686var ReactDOMSelect = ReactClass.createClass({8687displayName: 'ReactDOMSelect',8688tagName: 'SELECT',86898690mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],86918692propTypes: {8693defaultValue: selectValueType,8694value: selectValueType8695},86968697render: function() {8698// Clone `this.props` so we don't mutate the input.8699var props = assign({}, this.props);87008701props.onChange = this._handleChange;8702props.value = null;87038704return select(props, this.props.children);8705},87068707componentWillMount: function() {8708this._pendingUpdate = false;8709},87108711componentDidMount: function() {8712var value = LinkedValueUtils.getValue(this);8713if (value != null) {8714updateOptions(this, value);8715} else if (this.props.defaultValue != null) {8716updateOptions(this, this.props.defaultValue);8717}8718},87198720componentDidUpdate: function(prevProps) {8721var value = LinkedValueUtils.getValue(this);8722if (value != null) {8723this._pendingUpdate = false;8724updateOptions(this, value);8725} else if (!prevProps.multiple !== !this.props.multiple) {8726// For simplicity, reapply `defaultValue` if `multiple` is toggled.8727if (this.props.defaultValue != null) {8728updateOptions(this, this.props.defaultValue);8729} else {8730// Revert the select back to its default unselected state.8731updateOptions(this, this.props.multiple ? [] : '');8732}8733}8734},87358736_handleChange: function(event) {8737var returnValue;8738var onChange = LinkedValueUtils.getOnChange(this);8739if (onChange) {8740returnValue = onChange.call(this, event);8741}87428743this._pendingUpdate = true;8744ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);8745return returnValue;8746}87478748});87498750module.exports = ReactDOMSelect;875187528753},{"./AutoFocusMixin":2,"./LinkedValueUtils":24,"./Object.assign":27,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58,"./ReactUpdates":88}],51:[function(require,module,exports){8754/**8755* Copyright 2013-2015, Facebook, Inc.8756* All rights reserved.8757*8758* This source code is licensed under the BSD-style license found in the8759* LICENSE file in the root directory of this source tree. An additional grant8760* of patent rights can be found in the PATENTS file in the same directory.8761*8762* @providesModule ReactDOMSelection8763*/87648765'use strict';87668767var ExecutionEnvironment = require("./ExecutionEnvironment");87688769var getNodeForCharacterOffset = require("./getNodeForCharacterOffset");8770var getTextContentAccessor = require("./getTextContentAccessor");87718772/**8773* While `isCollapsed` is available on the Selection object and `collapsed`8774* is available on the Range object, IE11 sometimes gets them wrong.8775* If the anchor/focus nodes and offsets are the same, the range is collapsed.8776*/8777function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {8778return anchorNode === focusNode && anchorOffset === focusOffset;8779}87808781/**8782* Get the appropriate anchor and focus node/offset pairs for IE.8783*8784* The catch here is that IE's selection API doesn't provide information8785* about whether the selection is forward or backward, so we have to8786* behave as though it's always forward.8787*8788* IE text differs from modern selection in that it behaves as though8789* block elements end with a new line. This means character offsets will8790* differ between the two APIs.8791*8792* @param {DOMElement} node8793* @return {object}8794*/8795function getIEOffsets(node) {8796var selection = document.selection;8797var selectedRange = selection.createRange();8798var selectedLength = selectedRange.text.length;87998800// Duplicate selection so we can move range without breaking user selection.8801var fromStart = selectedRange.duplicate();8802fromStart.moveToElementText(node);8803fromStart.setEndPoint('EndToStart', selectedRange);88048805var startOffset = fromStart.text.length;8806var endOffset = startOffset + selectedLength;88078808return {8809start: startOffset,8810end: endOffset8811};8812}88138814/**8815* @param {DOMElement} node8816* @return {?object}8817*/8818function getModernOffsets(node) {8819var selection = window.getSelection && window.getSelection();88208821if (!selection || selection.rangeCount === 0) {8822return null;8823}88248825var anchorNode = selection.anchorNode;8826var anchorOffset = selection.anchorOffset;8827var focusNode = selection.focusNode;8828var focusOffset = selection.focusOffset;88298830var currentRange = selection.getRangeAt(0);88318832// If the node and offset values are the same, the selection is collapsed.8833// `Selection.isCollapsed` is available natively, but IE sometimes gets8834// this value wrong.8835var isSelectionCollapsed = isCollapsed(8836selection.anchorNode,8837selection.anchorOffset,8838selection.focusNode,8839selection.focusOffset8840);88418842var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;88438844var tempRange = currentRange.cloneRange();8845tempRange.selectNodeContents(node);8846tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);88478848var isTempRangeCollapsed = isCollapsed(8849tempRange.startContainer,8850tempRange.startOffset,8851tempRange.endContainer,8852tempRange.endOffset8853);88548855var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;8856var end = start + rangeLength;88578858// Detect whether the selection is backward.8859var detectionRange = document.createRange();8860detectionRange.setStart(anchorNode, anchorOffset);8861detectionRange.setEnd(focusNode, focusOffset);8862var isBackward = detectionRange.collapsed;88638864return {8865start: isBackward ? end : start,8866end: isBackward ? start : end8867};8868}88698870/**8871* @param {DOMElement|DOMTextNode} node8872* @param {object} offsets8873*/8874function setIEOffsets(node, offsets) {8875var range = document.selection.createRange().duplicate();8876var start, end;88778878if (typeof offsets.end === 'undefined') {8879start = offsets.start;8880end = start;8881} else if (offsets.start > offsets.end) {8882start = offsets.end;8883end = offsets.start;8884} else {8885start = offsets.start;8886end = offsets.end;8887}88888889range.moveToElementText(node);8890range.moveStart('character', start);8891range.setEndPoint('EndToStart', range);8892range.moveEnd('character', end - start);8893range.select();8894}88958896/**8897* In modern non-IE browsers, we can support both forward and backward8898* selections.8899*8900* Note: IE10+ supports the Selection object, but it does not support8901* the `extend` method, which means that even in modern IE, it's not possible8902* to programatically create a backward selection. Thus, for all IE8903* versions, we use the old IE API to create our selections.8904*8905* @param {DOMElement|DOMTextNode} node8906* @param {object} offsets8907*/8908function setModernOffsets(node, offsets) {8909if (!window.getSelection) {8910return;8911}89128913var selection = window.getSelection();8914var length = node[getTextContentAccessor()].length;8915var start = Math.min(offsets.start, length);8916var end = typeof offsets.end === 'undefined' ?8917start : Math.min(offsets.end, length);89188919// IE 11 uses modern selection, but doesn't support the extend method.8920// Flip backward selections, so we can set with a single range.8921if (!selection.extend && start > end) {8922var temp = end;8923end = start;8924start = temp;8925}89268927var startMarker = getNodeForCharacterOffset(node, start);8928var endMarker = getNodeForCharacterOffset(node, end);89298930if (startMarker && endMarker) {8931var range = document.createRange();8932range.setStart(startMarker.node, startMarker.offset);8933selection.removeAllRanges();89348935if (start > end) {8936selection.addRange(range);8937selection.extend(endMarker.node, endMarker.offset);8938} else {8939range.setEnd(endMarker.node, endMarker.offset);8940selection.addRange(range);8941}8942}8943}89448945var useIEOffsets = (8946ExecutionEnvironment.canUseDOM &&8947'selection' in document &&8948!('getSelection' in window)8949);89508951var ReactDOMSelection = {8952/**8953* @param {DOMElement} node8954*/8955getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,89568957/**8958* @param {DOMElement|DOMTextNode} node8959* @param {object} offsets8960*/8961setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets8962};89638964module.exports = ReactDOMSelection;896589668967},{"./ExecutionEnvironment":21,"./getNodeForCharacterOffset":129,"./getTextContentAccessor":131}],52:[function(require,module,exports){8968/**8969* Copyright 2013-2015, Facebook, Inc.8970* All rights reserved.8971*8972* This source code is licensed under the BSD-style license found in the8973* LICENSE file in the root directory of this source tree. An additional grant8974* of patent rights can be found in the PATENTS file in the same directory.8975*8976* @providesModule ReactDOMTextComponent8977* @typechecks static-only8978*/89798980'use strict';89818982var DOMPropertyOperations = require("./DOMPropertyOperations");8983var ReactComponentBrowserEnvironment =8984require("./ReactComponentBrowserEnvironment");8985var ReactDOMComponent = require("./ReactDOMComponent");89868987var assign = require("./Object.assign");8988var escapeTextContentForBrowser = require("./escapeTextContentForBrowser");89898990/**8991* Text nodes violate a couple assumptions that React makes about components:8992*8993* - When mounting text into the DOM, adjacent text nodes are merged.8994* - Text nodes cannot be assigned a React root ID.8995*8996* This component is used to wrap strings in elements so that they can undergo8997* the same reconciliation that is applied to elements.8998*8999* TODO: Investigate representing React components in the DOM with text nodes.9000*9001* @class ReactDOMTextComponent9002* @extends ReactComponent9003* @internal9004*/9005var ReactDOMTextComponent = function(props) {9006// This constructor and its argument is currently used by mocks.9007};90089009assign(ReactDOMTextComponent.prototype, {90109011/**9012* @param {ReactText} text9013* @internal9014*/9015construct: function(text) {9016// TODO: This is really a ReactText (ReactNode), not a ReactElement9017this._currentElement = text;9018this._stringText = '' + text;90199020// Properties9021this._rootNodeID = null;9022this._mountIndex = 0;9023},90249025/**9026* Creates the markup for this text node. This node is not intended to have9027* any features besides containing text content.9028*9029* @param {string} rootID DOM ID of the root node.9030* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction9031* @return {string} Markup for this text node.9032* @internal9033*/9034mountComponent: function(rootID, transaction, context) {9035this._rootNodeID = rootID;9036var escapedText = escapeTextContentForBrowser(this._stringText);90379038if (transaction.renderToStaticMarkup) {9039// Normally we'd wrap this in a `span` for the reasons stated above, but9040// since this is a situation where React won't take over (static pages),9041// we can simply return the text as it is.9042return escapedText;9043}90449045return (9046'<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' +9047escapedText +9048'</span>'9049);9050},90519052/**9053* Updates this component by updating the text content.9054*9055* @param {ReactText} nextText The next text content9056* @param {ReactReconcileTransaction} transaction9057* @internal9058*/9059receiveComponent: function(nextText, transaction) {9060if (nextText !== this._currentElement) {9061this._currentElement = nextText;9062var nextStringText = '' + nextText;9063if (nextStringText !== this._stringText) {9064// TODO: Save this as pending props and use performUpdateIfNecessary9065// and/or updateComponent to do the actual update for consistency with9066// other component types?9067this._stringText = nextStringText;9068ReactDOMComponent.BackendIDOperations.updateTextContentByID(9069this._rootNodeID,9070nextStringText9071);9072}9073}9074},90759076unmountComponent: function() {9077ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);9078}90799080});90819082module.exports = ReactDOMTextComponent;908390849085},{"./DOMPropertyOperations":11,"./Object.assign":27,"./ReactComponentBrowserEnvironment":36,"./ReactDOMComponent":43,"./escapeTextContentForBrowser":117}],53:[function(require,module,exports){9086(function (process){9087/**9088* Copyright 2013-2015, Facebook, Inc.9089* All rights reserved.9090*9091* This source code is licensed under the BSD-style license found in the9092* LICENSE file in the root directory of this source tree. An additional grant9093* of patent rights can be found in the PATENTS file in the same directory.9094*9095* @providesModule ReactDOMTextarea9096*/90979098'use strict';90999100var AutoFocusMixin = require("./AutoFocusMixin");9101var DOMPropertyOperations = require("./DOMPropertyOperations");9102var LinkedValueUtils = require("./LinkedValueUtils");9103var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");9104var ReactClass = require("./ReactClass");9105var ReactElement = require("./ReactElement");9106var ReactUpdates = require("./ReactUpdates");91079108var assign = require("./Object.assign");9109var invariant = require("./invariant");91109111var warning = require("./warning");91129113var textarea = ReactElement.createFactory('textarea');91149115function forceUpdateIfMounted() {9116/*jshint validthis:true */9117if (this.isMounted()) {9118this.forceUpdate();9119}9120}91219122/**9123* Implements a <textarea> native component that allows setting `value`, and9124* `defaultValue`. This differs from the traditional DOM API because value is9125* usually set as PCDATA children.9126*9127* If `value` is not supplied (or null/undefined), user actions that affect the9128* value will trigger updates to the element.9129*9130* If `value` is supplied (and not null/undefined), the rendered element will9131* not trigger updates to the element. Instead, the `value` prop must change in9132* order for the rendered element to be updated.9133*9134* The rendered element will be initialized with an empty value, the prop9135* `defaultValue` if specified, or the children content (deprecated).9136*/9137var ReactDOMTextarea = ReactClass.createClass({9138displayName: 'ReactDOMTextarea',9139tagName: 'TEXTAREA',91409141mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],91429143getInitialState: function() {9144var defaultValue = this.props.defaultValue;9145// TODO (yungsters): Remove support for children content in <textarea>.9146var children = this.props.children;9147if (children != null) {9148if ("production" !== process.env.NODE_ENV) {9149("production" !== process.env.NODE_ENV ? warning(9150false,9151'Use the `defaultValue` or `value` props instead of setting ' +9152'children on <textarea>.'9153) : null);9154}9155("production" !== process.env.NODE_ENV ? invariant(9156defaultValue == null,9157'If you supply `defaultValue` on a <textarea>, do not pass children.'9158) : invariant(defaultValue == null));9159if (Array.isArray(children)) {9160("production" !== process.env.NODE_ENV ? invariant(9161children.length <= 1,9162'<textarea> can only have at most one child.'9163) : invariant(children.length <= 1));9164children = children[0];9165}91669167defaultValue = '' + children;9168}9169if (defaultValue == null) {9170defaultValue = '';9171}9172var value = LinkedValueUtils.getValue(this);9173return {9174// We save the initial value so that `ReactDOMComponent` doesn't update9175// `textContent` (unnecessary since we update value).9176// The initial value can be a boolean or object so that's why it's9177// forced to be a string.9178initialValue: '' + (value != null ? value : defaultValue)9179};9180},91819182render: function() {9183// Clone `this.props` so we don't mutate the input.9184var props = assign({}, this.props);91859186("production" !== process.env.NODE_ENV ? invariant(9187props.dangerouslySetInnerHTML == null,9188'`dangerouslySetInnerHTML` does not make sense on <textarea>.'9189) : invariant(props.dangerouslySetInnerHTML == null));91909191props.defaultValue = null;9192props.value = null;9193props.onChange = this._handleChange;91949195// Always set children to the same thing. In IE9, the selection range will9196// get reset if `textContent` is mutated.9197return textarea(props, this.state.initialValue);9198},91999200componentDidUpdate: function(prevProps, prevState, prevContext) {9201var value = LinkedValueUtils.getValue(this);9202if (value != null) {9203var rootNode = this.getDOMNode();9204// Cast `value` to a string to ensure the value is set correctly. While9205// browsers typically do this as necessary, jsdom doesn't.9206DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);9207}9208},92099210_handleChange: function(event) {9211var returnValue;9212var onChange = LinkedValueUtils.getOnChange(this);9213if (onChange) {9214returnValue = onChange.call(this, event);9215}9216ReactUpdates.asap(forceUpdateIfMounted, this);9217return returnValue;9218}92199220});92219222module.exports = ReactDOMTextarea;922392249225}).call(this,require("FWaASH"))9226},{"./AutoFocusMixin":2,"./DOMPropertyOperations":11,"./LinkedValueUtils":24,"./Object.assign":27,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactElement":58,"./ReactUpdates":88,"./invariant":136,"./warning":155,"FWaASH":1}],54:[function(require,module,exports){9227/**9228* Copyright 2013-2015, Facebook, Inc.9229* All rights reserved.9230*9231* This source code is licensed under the BSD-style license found in the9232* LICENSE file in the root directory of this source tree. An additional grant9233* of patent rights can be found in the PATENTS file in the same directory.9234*9235* @providesModule ReactDefaultBatchingStrategy9236*/92379238'use strict';92399240var ReactUpdates = require("./ReactUpdates");9241var Transaction = require("./Transaction");92429243var assign = require("./Object.assign");9244var emptyFunction = require("./emptyFunction");92459246var RESET_BATCHED_UPDATES = {9247initialize: emptyFunction,9248close: function() {9249ReactDefaultBatchingStrategy.isBatchingUpdates = false;9250}9251};92529253var FLUSH_BATCHED_UPDATES = {9254initialize: emptyFunction,9255close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)9256};92579258var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];92599260function ReactDefaultBatchingStrategyTransaction() {9261this.reinitializeTransaction();9262}92639264assign(9265ReactDefaultBatchingStrategyTransaction.prototype,9266Transaction.Mixin,9267{9268getTransactionWrappers: function() {9269return TRANSACTION_WRAPPERS;9270}9271}9272);92739274var transaction = new ReactDefaultBatchingStrategyTransaction();92759276var ReactDefaultBatchingStrategy = {9277isBatchingUpdates: false,92789279/**9280* Call the provided function in a context within which calls to `setState`9281* and friends are batched such that components aren't updated unnecessarily.9282*/9283batchedUpdates: function(callback, a, b, c, d) {9284var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;92859286ReactDefaultBatchingStrategy.isBatchingUpdates = true;92879288// The code is written this way to avoid extra allocations9289if (alreadyBatchingUpdates) {9290callback(a, b, c, d);9291} else {9292transaction.perform(callback, null, a, b, c, d);9293}9294}9295};92969297module.exports = ReactDefaultBatchingStrategy;929892999300},{"./Object.assign":27,"./ReactUpdates":88,"./Transaction":104,"./emptyFunction":115}],55:[function(require,module,exports){9301(function (process){9302/**9303* Copyright 2013-2015, Facebook, Inc.9304* All rights reserved.9305*9306* This source code is licensed under the BSD-style license found in the9307* LICENSE file in the root directory of this source tree. An additional grant9308* of patent rights can be found in the PATENTS file in the same directory.9309*9310* @providesModule ReactDefaultInjection9311*/93129313'use strict';93149315var BeforeInputEventPlugin = require("./BeforeInputEventPlugin");9316var ChangeEventPlugin = require("./ChangeEventPlugin");9317var ClientReactRootIndex = require("./ClientReactRootIndex");9318var DefaultEventPluginOrder = require("./DefaultEventPluginOrder");9319var EnterLeaveEventPlugin = require("./EnterLeaveEventPlugin");9320var ExecutionEnvironment = require("./ExecutionEnvironment");9321var HTMLDOMPropertyConfig = require("./HTMLDOMPropertyConfig");9322var MobileSafariClickEventPlugin = require("./MobileSafariClickEventPlugin");9323var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin");9324var ReactClass = require("./ReactClass");9325var ReactComponentBrowserEnvironment =9326require("./ReactComponentBrowserEnvironment");9327var ReactDefaultBatchingStrategy = require("./ReactDefaultBatchingStrategy");9328var ReactDOMComponent = require("./ReactDOMComponent");9329var ReactDOMButton = require("./ReactDOMButton");9330var ReactDOMForm = require("./ReactDOMForm");9331var ReactDOMImg = require("./ReactDOMImg");9332var ReactDOMIDOperations = require("./ReactDOMIDOperations");9333var ReactDOMIframe = require("./ReactDOMIframe");9334var ReactDOMInput = require("./ReactDOMInput");9335var ReactDOMOption = require("./ReactDOMOption");9336var ReactDOMSelect = require("./ReactDOMSelect");9337var ReactDOMTextarea = require("./ReactDOMTextarea");9338var ReactDOMTextComponent = require("./ReactDOMTextComponent");9339var ReactElement = require("./ReactElement");9340var ReactEventListener = require("./ReactEventListener");9341var ReactInjection = require("./ReactInjection");9342var ReactInstanceHandles = require("./ReactInstanceHandles");9343var ReactMount = require("./ReactMount");9344var ReactReconcileTransaction = require("./ReactReconcileTransaction");9345var SelectEventPlugin = require("./SelectEventPlugin");9346var ServerReactRootIndex = require("./ServerReactRootIndex");9347var SimpleEventPlugin = require("./SimpleEventPlugin");9348var SVGDOMPropertyConfig = require("./SVGDOMPropertyConfig");93499350var createFullPageComponent = require("./createFullPageComponent");93519352function autoGenerateWrapperClass(type) {9353return ReactClass.createClass({9354tagName: type.toUpperCase(),9355render: function() {9356return new ReactElement(9357type,9358null,9359null,9360null,9361null,9362this.props9363);9364}9365});9366}93679368function inject() {9369ReactInjection.EventEmitter.injectReactEventListener(9370ReactEventListener9371);93729373/**9374* Inject modules for resolving DOM hierarchy and plugin ordering.9375*/9376ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);9377ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);9378ReactInjection.EventPluginHub.injectMount(ReactMount);93799380/**9381* Some important event plugins included by default (without having to require9382* them).9383*/9384ReactInjection.EventPluginHub.injectEventPluginsByName({9385SimpleEventPlugin: SimpleEventPlugin,9386EnterLeaveEventPlugin: EnterLeaveEventPlugin,9387ChangeEventPlugin: ChangeEventPlugin,9388MobileSafariClickEventPlugin: MobileSafariClickEventPlugin,9389SelectEventPlugin: SelectEventPlugin,9390BeforeInputEventPlugin: BeforeInputEventPlugin9391});93929393ReactInjection.NativeComponent.injectGenericComponentClass(9394ReactDOMComponent9395);93969397ReactInjection.NativeComponent.injectTextComponentClass(9398ReactDOMTextComponent9399);94009401ReactInjection.NativeComponent.injectAutoWrapper(9402autoGenerateWrapperClass9403);94049405// This needs to happen before createFullPageComponent() otherwise the mixin9406// won't be included.9407ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);94089409ReactInjection.NativeComponent.injectComponentClasses({9410'button': ReactDOMButton,9411'form': ReactDOMForm,9412'iframe': ReactDOMIframe,9413'img': ReactDOMImg,9414'input': ReactDOMInput,9415'option': ReactDOMOption,9416'select': ReactDOMSelect,9417'textarea': ReactDOMTextarea,94189419'html': createFullPageComponent('html'),9420'head': createFullPageComponent('head'),9421'body': createFullPageComponent('body')9422});94239424ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);9425ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);94269427ReactInjection.EmptyComponent.injectEmptyComponent('noscript');94289429ReactInjection.Updates.injectReconcileTransaction(9430ReactReconcileTransaction9431);9432ReactInjection.Updates.injectBatchingStrategy(9433ReactDefaultBatchingStrategy9434);94359436ReactInjection.RootIndex.injectCreateReactRootIndex(9437ExecutionEnvironment.canUseDOM ?9438ClientReactRootIndex.createReactRootIndex :9439ServerReactRootIndex.createReactRootIndex9440);94419442ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);9443ReactInjection.DOMComponent.injectIDOperations(ReactDOMIDOperations);94449445if ("production" !== process.env.NODE_ENV) {9446var url = (ExecutionEnvironment.canUseDOM && window.location.href) || '';9447if ((/[?&]react_perf\b/).test(url)) {9448var ReactDefaultPerf = require("./ReactDefaultPerf");9449ReactDefaultPerf.start();9450}9451}9452}94539454module.exports = {9455inject: inject9456};945794589459}).call(this,require("FWaASH"))9460},{"./BeforeInputEventPlugin":3,"./ChangeEventPlugin":7,"./ClientReactRootIndex":8,"./DefaultEventPluginOrder":13,"./EnterLeaveEventPlugin":14,"./ExecutionEnvironment":21,"./HTMLDOMPropertyConfig":23,"./MobileSafariClickEventPlugin":26,"./ReactBrowserComponentMixin":30,"./ReactClass":34,"./ReactComponentBrowserEnvironment":36,"./ReactDOMButton":42,"./ReactDOMComponent":43,"./ReactDOMForm":44,"./ReactDOMIDOperations":45,"./ReactDOMIframe":46,"./ReactDOMImg":47,"./ReactDOMInput":48,"./ReactDOMOption":49,"./ReactDOMSelect":50,"./ReactDOMTextComponent":52,"./ReactDOMTextarea":53,"./ReactDefaultBatchingStrategy":54,"./ReactDefaultPerf":56,"./ReactElement":58,"./ReactEventListener":63,"./ReactInjection":65,"./ReactInstanceHandles":67,"./ReactMount":71,"./ReactReconcileTransaction":81,"./SVGDOMPropertyConfig":89,"./SelectEventPlugin":90,"./ServerReactRootIndex":91,"./SimpleEventPlugin":92,"./createFullPageComponent":112,"FWaASH":1}],56:[function(require,module,exports){9461/**9462* Copyright 2013-2015, Facebook, Inc.9463* All rights reserved.9464*9465* This source code is licensed under the BSD-style license found in the9466* LICENSE file in the root directory of this source tree. An additional grant9467* of patent rights can be found in the PATENTS file in the same directory.9468*9469* @providesModule ReactDefaultPerf9470* @typechecks static-only9471*/94729473'use strict';94749475var DOMProperty = require("./DOMProperty");9476var ReactDefaultPerfAnalysis = require("./ReactDefaultPerfAnalysis");9477var ReactMount = require("./ReactMount");9478var ReactPerf = require("./ReactPerf");94799480var performanceNow = require("./performanceNow");94819482function roundFloat(val) {9483return Math.floor(val * 100) / 100;9484}94859486function addValue(obj, key, val) {9487obj[key] = (obj[key] || 0) + val;9488}94899490var ReactDefaultPerf = {9491_allMeasurements: [], // last item in the list is the current one9492_mountStack: [0],9493_injected: false,94949495start: function() {9496if (!ReactDefaultPerf._injected) {9497ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);9498}94999500ReactDefaultPerf._allMeasurements.length = 0;9501ReactPerf.enableMeasure = true;9502},95039504stop: function() {9505ReactPerf.enableMeasure = false;9506},95079508getLastMeasurements: function() {9509return ReactDefaultPerf._allMeasurements;9510},95119512printExclusive: function(measurements) {9513measurements = measurements || ReactDefaultPerf._allMeasurements;9514var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);9515console.table(summary.map(function(item) {9516return {9517'Component class name': item.componentName,9518'Total inclusive time (ms)': roundFloat(item.inclusive),9519'Exclusive mount time (ms)': roundFloat(item.exclusive),9520'Exclusive render time (ms)': roundFloat(item.render),9521'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),9522'Render time per instance (ms)': roundFloat(item.render / item.count),9523'Instances': item.count9524};9525}));9526// TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct9527// number.9528},95299530printInclusive: function(measurements) {9531measurements = measurements || ReactDefaultPerf._allMeasurements;9532var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);9533console.table(summary.map(function(item) {9534return {9535'Owner > component': item.componentName,9536'Inclusive time (ms)': roundFloat(item.time),9537'Instances': item.count9538};9539}));9540console.log(9541'Total time:',9542ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'9543);9544},95459546getMeasurementsSummaryMap: function(measurements) {9547var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(9548measurements,9549true9550);9551return summary.map(function(item) {9552return {9553'Owner > component': item.componentName,9554'Wasted time (ms)': item.time,9555'Instances': item.count9556};9557});9558},95599560printWasted: function(measurements) {9561measurements = measurements || ReactDefaultPerf._allMeasurements;9562console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));9563console.log(9564'Total time:',9565ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'9566);9567},95689569printDOM: function(measurements) {9570measurements = measurements || ReactDefaultPerf._allMeasurements;9571var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);9572console.table(summary.map(function(item) {9573var result = {};9574result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;9575result['type'] = item.type;9576result['args'] = JSON.stringify(item.args);9577return result;9578}));9579console.log(9580'Total time:',9581ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'9582);9583},95849585_recordWrite: function(id, fnName, totalTime, args) {9586// TODO: totalTime isn't that useful since it doesn't count paints/reflows9587var writes =9588ReactDefaultPerf9589._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1]9590.writes;9591writes[id] = writes[id] || [];9592writes[id].push({9593type: fnName,9594time: totalTime,9595args: args9596});9597},95989599measure: function(moduleName, fnName, func) {9600return function() {for (var args=[],$__0=0,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);9601var totalTime;9602var rv;9603var start;96049605if (fnName === '_renderNewRootComponent' ||9606fnName === 'flushBatchedUpdates') {9607// A "measurement" is a set of metrics recorded for each flush. We want9608// to group the metrics for a given flush together so we can look at the9609// components that rendered and the DOM operations that actually9610// happened to determine the amount of "wasted work" performed.9611ReactDefaultPerf._allMeasurements.push({9612exclusive: {},9613inclusive: {},9614render: {},9615counts: {},9616writes: {},9617displayNames: {},9618totalTime: 09619});9620start = performanceNow();9621rv = func.apply(this, args);9622ReactDefaultPerf._allMeasurements[9623ReactDefaultPerf._allMeasurements.length - 19624].totalTime = performanceNow() - start;9625return rv;9626} else if (moduleName === 'ReactDOMIDOperations' ||9627moduleName === 'ReactComponentBrowserEnvironment') {9628start = performanceNow();9629rv = func.apply(this, args);9630totalTime = performanceNow() - start;96319632if (fnName === '_mountImageIntoNode') {9633var mountID = ReactMount.getID(args[1]);9634ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);9635} else if (fnName === 'dangerouslyProcessChildrenUpdates') {9636// special format9637args[0].forEach(function(update) {9638var writeArgs = {};9639if (update.fromIndex !== null) {9640writeArgs.fromIndex = update.fromIndex;9641}9642if (update.toIndex !== null) {9643writeArgs.toIndex = update.toIndex;9644}9645if (update.textContent !== null) {9646writeArgs.textContent = update.textContent;9647}9648if (update.markupIndex !== null) {9649writeArgs.markup = args[1][update.markupIndex];9650}9651ReactDefaultPerf._recordWrite(9652update.parentID,9653update.type,9654totalTime,9655writeArgs9656);9657});9658} else {9659// basic format9660ReactDefaultPerf._recordWrite(9661args[0],9662fnName,9663totalTime,9664Array.prototype.slice.call(args, 1)9665);9666}9667return rv;9668} else if (moduleName === 'ReactCompositeComponent' && (9669(// TODO: receiveComponent()?9670(fnName === 'mountComponent' ||9671fnName === 'updateComponent' || fnName === '_renderValidatedComponent')))) {96729673var rootNodeID = fnName === 'mountComponent' ?9674args[0] :9675this._rootNodeID;9676var isRender = fnName === '_renderValidatedComponent';9677var isMount = fnName === 'mountComponent';96789679var mountStack = ReactDefaultPerf._mountStack;9680var entry = ReactDefaultPerf._allMeasurements[9681ReactDefaultPerf._allMeasurements.length - 19682];96839684if (isRender) {9685addValue(entry.counts, rootNodeID, 1);9686} else if (isMount) {9687mountStack.push(0);9688}96899690start = performanceNow();9691rv = func.apply(this, args);9692totalTime = performanceNow() - start;96939694if (isRender) {9695addValue(entry.render, rootNodeID, totalTime);9696} else if (isMount) {9697var subMountTime = mountStack.pop();9698mountStack[mountStack.length - 1] += totalTime;9699addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);9700addValue(entry.inclusive, rootNodeID, totalTime);9701} else {9702addValue(entry.inclusive, rootNodeID, totalTime);9703}97049705var displayName = null;9706if (this._instance.constructor.displayName) {9707displayName = this._instance.constructor.displayName;9708} else if (this._currentElement.type) {9709displayName = this._currentElement.type;9710}97119712entry.displayNames[rootNodeID] = {9713current: displayName,9714owner: this._currentElement._owner ?9715this._currentElement._owner._instance.constructor.displayName :9716'<root>'9717};97189719return rv;9720} else {9721return func.apply(this, args);9722}9723};9724}9725};97269727module.exports = ReactDefaultPerf;972897299730},{"./DOMProperty":10,"./ReactDefaultPerfAnalysis":57,"./ReactMount":71,"./ReactPerf":76,"./performanceNow":147}],57:[function(require,module,exports){9731/**9732* Copyright 2013-2015, Facebook, Inc.9733* All rights reserved.9734*9735* This source code is licensed under the BSD-style license found in the9736* LICENSE file in the root directory of this source tree. An additional grant9737* of patent rights can be found in the PATENTS file in the same directory.9738*9739* @providesModule ReactDefaultPerfAnalysis9740*/97419742var assign = require("./Object.assign");97439744// Don't try to save users less than 1.2ms (a number I made up)9745var DONT_CARE_THRESHOLD = 1.2;9746var DOM_OPERATION_TYPES = {9747'_mountImageIntoNode': 'set innerHTML',9748INSERT_MARKUP: 'set innerHTML',9749MOVE_EXISTING: 'move',9750REMOVE_NODE: 'remove',9751TEXT_CONTENT: 'set textContent',9752'updatePropertyByID': 'update attribute',9753'deletePropertyByID': 'delete attribute',9754'updateStylesByID': 'update styles',9755'updateInnerHTMLByID': 'set innerHTML',9756'dangerouslyReplaceNodeWithMarkupByID': 'replace'9757};97589759function getTotalTime(measurements) {9760// TODO: return number of DOM ops? could be misleading.9761// TODO: measure dropped frames after reconcile?9762// TODO: log total time of each reconcile and the top-level component9763// class that triggered it.9764var totalTime = 0;9765for (var i = 0; i < measurements.length; i++) {9766var measurement = measurements[i];9767totalTime += measurement.totalTime;9768}9769return totalTime;9770}97719772function getDOMSummary(measurements) {9773var items = [];9774for (var i = 0; i < measurements.length; i++) {9775var measurement = measurements[i];9776var id;97779778for (id in measurement.writes) {9779measurement.writes[id].forEach(function(write) {9780items.push({9781id: id,9782type: DOM_OPERATION_TYPES[write.type] || write.type,9783args: write.args9784});9785});9786}9787}9788return items;9789}97909791function getExclusiveSummary(measurements) {9792var candidates = {};9793var displayName;97949795for (var i = 0; i < measurements.length; i++) {9796var measurement = measurements[i];9797var allIDs = assign(9798{},9799measurement.exclusive,9800measurement.inclusive9801);98029803for (var id in allIDs) {9804displayName = measurement.displayNames[id].current;98059806candidates[displayName] = candidates[displayName] || {9807componentName: displayName,9808inclusive: 0,9809exclusive: 0,9810render: 0,9811count: 09812};9813if (measurement.render[id]) {9814candidates[displayName].render += measurement.render[id];9815}9816if (measurement.exclusive[id]) {9817candidates[displayName].exclusive += measurement.exclusive[id];9818}9819if (measurement.inclusive[id]) {9820candidates[displayName].inclusive += measurement.inclusive[id];9821}9822if (measurement.counts[id]) {9823candidates[displayName].count += measurement.counts[id];9824}9825}9826}98279828// Now make a sorted array with the results.9829var arr = [];9830for (displayName in candidates) {9831if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {9832arr.push(candidates[displayName]);9833}9834}98359836arr.sort(function(a, b) {9837return b.exclusive - a.exclusive;9838});98399840return arr;9841}98429843function getInclusiveSummary(measurements, onlyClean) {9844var candidates = {};9845var inclusiveKey;98469847for (var i = 0; i < measurements.length; i++) {9848var measurement = measurements[i];9849var allIDs = assign(9850{},9851measurement.exclusive,9852measurement.inclusive9853);9854var cleanComponents;98559856if (onlyClean) {9857cleanComponents = getUnchangedComponents(measurement);9858}98599860for (var id in allIDs) {9861if (onlyClean && !cleanComponents[id]) {9862continue;9863}98649865var displayName = measurement.displayNames[id];98669867// Inclusive time is not useful for many components without knowing where9868// they are instantiated. So we aggregate inclusive time with both the9869// owner and current displayName as the key.9870inclusiveKey = displayName.owner + ' > ' + displayName.current;98719872candidates[inclusiveKey] = candidates[inclusiveKey] || {9873componentName: inclusiveKey,9874time: 0,9875count: 09876};98779878if (measurement.inclusive[id]) {9879candidates[inclusiveKey].time += measurement.inclusive[id];9880}9881if (measurement.counts[id]) {9882candidates[inclusiveKey].count += measurement.counts[id];9883}9884}9885}98869887// Now make a sorted array with the results.9888var arr = [];9889for (inclusiveKey in candidates) {9890if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {9891arr.push(candidates[inclusiveKey]);9892}9893}98949895arr.sort(function(a, b) {9896return b.time - a.time;9897});98989899return arr;9900}99019902function getUnchangedComponents(measurement) {9903// For a given reconcile, look at which components did not actually9904// render anything to the DOM and return a mapping of their ID to9905// the amount of time it took to render the entire subtree.9906var cleanComponents = {};9907var dirtyLeafIDs = Object.keys(measurement.writes);9908var allIDs = assign({}, measurement.exclusive, measurement.inclusive);99099910for (var id in allIDs) {9911var isDirty = false;9912// For each component that rendered, see if a component that triggered9913// a DOM op is in its subtree.9914for (var i = 0; i < dirtyLeafIDs.length; i++) {9915if (dirtyLeafIDs[i].indexOf(id) === 0) {9916isDirty = true;9917break;9918}9919}9920if (!isDirty && measurement.counts[id] > 0) {9921cleanComponents[id] = true;9922}9923}9924return cleanComponents;9925}99269927var ReactDefaultPerfAnalysis = {9928getExclusiveSummary: getExclusiveSummary,9929getInclusiveSummary: getInclusiveSummary,9930getDOMSummary: getDOMSummary,9931getTotalTime: getTotalTime9932};99339934module.exports = ReactDefaultPerfAnalysis;993599369937},{"./Object.assign":27}],58:[function(require,module,exports){9938(function (process){9939/**9940* Copyright 2014-2015, Facebook, Inc.9941* All rights reserved.9942*9943* This source code is licensed under the BSD-style license found in the9944* LICENSE file in the root directory of this source tree. An additional grant9945* of patent rights can be found in the PATENTS file in the same directory.9946*9947* @providesModule ReactElement9948*/99499950'use strict';99519952var ReactContext = require("./ReactContext");9953var ReactCurrentOwner = require("./ReactCurrentOwner");99549955var assign = require("./Object.assign");9956var warning = require("./warning");99579958var RESERVED_PROPS = {9959key: true,9960ref: true9961};99629963/**9964* Warn for mutations.9965*9966* @internal9967* @param {object} object9968* @param {string} key9969*/9970function defineWarningProperty(object, key) {9971Object.defineProperty(object, key, {99729973configurable: false,9974enumerable: true,99759976get: function() {9977if (!this._store) {9978return null;9979}9980return this._store[key];9981},99829983set: function(value) {9984("production" !== process.env.NODE_ENV ? warning(9985false,9986'Don\'t set the %s property of the React element. Instead, ' +9987'specify the correct value when initially creating the element.',9988key9989) : null);9990this._store[key] = value;9991}99929993});9994}99959996/**9997* This is updated to true if the membrane is successfully created.9998*/9999var useMutationMembrane = false;1000010001/**10002* Warn for mutations.10003*10004* @internal10005* @param {object} element10006*/10007function defineMutationMembrane(prototype) {10008try {10009var pseudoFrozenProperties = {10010props: true10011};10012for (var key in pseudoFrozenProperties) {10013defineWarningProperty(prototype, key);10014}10015useMutationMembrane = true;10016} catch (x) {10017// IE will fail on defineProperty10018}10019}1002010021/**10022* Base constructor for all React elements. This is only used to make this10023* work with a dynamic instanceof check. Nothing should live on this prototype.10024*10025* @param {*} type10026* @param {string|object} ref10027* @param {*} key10028* @param {*} props10029* @internal10030*/10031var ReactElement = function(type, key, ref, owner, context, props) {10032// Built-in properties that belong on the element10033this.type = type;10034this.key = key;10035this.ref = ref;1003610037// Record the component responsible for creating this element.10038this._owner = owner;1003910040// TODO: Deprecate withContext, and then the context becomes accessible10041// through the owner.10042this._context = context;1004310044if ("production" !== process.env.NODE_ENV) {10045// The validation flag and props are currently mutative. We put them on10046// an external backing store so that we can freeze the whole object.10047// This can be replaced with a WeakMap once they are implemented in10048// commonly used development environments.10049this._store = {props: props, originalProps: assign({}, props)};1005010051// To make comparing ReactElements easier for testing purposes, we make10052// the validation flag non-enumerable (where possible, which should10053// include every environment we run tests in), so the test framework10054// ignores it.10055try {10056Object.defineProperty(this._store, 'validated', {10057configurable: false,10058enumerable: false,10059writable: true10060});10061} catch (x) {10062}10063this._store.validated = false;1006410065// We're not allowed to set props directly on the object so we early10066// return and rely on the prototype membrane to forward to the backing10067// store.10068if (useMutationMembrane) {10069Object.freeze(this);10070return;10071}10072}1007310074this.props = props;10075};1007610077// We intentionally don't expose the function on the constructor property.10078// ReactElement should be indistinguishable from a plain object.10079ReactElement.prototype = {10080_isReactElement: true10081};1008210083if ("production" !== process.env.NODE_ENV) {10084defineMutationMembrane(ReactElement.prototype);10085}1008610087ReactElement.createElement = function(type, config, children) {10088var propName;1008910090// Reserved names are extracted10091var props = {};1009210093var key = null;10094var ref = null;1009510096if (config != null) {10097ref = config.ref === undefined ? null : config.ref;10098key = config.key === undefined ? null : '' + config.key;10099// Remaining properties are added to a new props object10100for (propName in config) {10101if (config.hasOwnProperty(propName) &&10102!RESERVED_PROPS.hasOwnProperty(propName)) {10103props[propName] = config[propName];10104}10105}10106}1010710108// Children can be more than one argument, and those are transferred onto10109// the newly allocated props object.10110var childrenLength = arguments.length - 2;10111if (childrenLength === 1) {10112props.children = children;10113} else if (childrenLength > 1) {10114var childArray = Array(childrenLength);10115for (var i = 0; i < childrenLength; i++) {10116childArray[i] = arguments[i + 2];10117}10118props.children = childArray;10119}1012010121// Resolve default props10122if (type && type.defaultProps) {10123var defaultProps = type.defaultProps;10124for (propName in defaultProps) {10125if (typeof props[propName] === 'undefined') {10126props[propName] = defaultProps[propName];10127}10128}10129}1013010131return new ReactElement(10132type,10133key,10134ref,10135ReactCurrentOwner.current,10136ReactContext.current,10137props10138);10139};1014010141ReactElement.createFactory = function(type) {10142var factory = ReactElement.createElement.bind(null, type);10143// Expose the type on the factory and the prototype so that it can be10144// easily accessed on elements. E.g. <Foo />.type === Foo.type.10145// This should not be named `constructor` since this may not be the function10146// that created the element, and it may not even be a constructor.10147// Legacy hook TODO: Warn if this is accessed10148factory.type = type;10149return factory;10150};1015110152ReactElement.cloneAndReplaceProps = function(oldElement, newProps) {10153var newElement = new ReactElement(10154oldElement.type,10155oldElement.key,10156oldElement.ref,10157oldElement._owner,10158oldElement._context,10159newProps10160);1016110162if ("production" !== process.env.NODE_ENV) {10163// If the key on the original is valid, then the clone is valid10164newElement._store.validated = oldElement._store.validated;10165}10166return newElement;10167};1016810169ReactElement.cloneElement = function(element, config, children) {10170var propName;1017110172// Original props are copied10173var props = assign({}, element.props);1017410175// Reserved names are extracted10176var key = element.key;10177var ref = element.ref;1017810179// Owner will be preserved, unless ref is overridden10180var owner = element._owner;1018110182if (config != null) {10183if (config.ref !== undefined) {10184// Silently steal the ref from the parent.10185ref = config.ref;10186owner = ReactCurrentOwner.current;10187}10188if (config.key !== undefined) {10189key = '' + config.key;10190}10191// Remaining properties override existing props10192for (propName in config) {10193if (config.hasOwnProperty(propName) &&10194!RESERVED_PROPS.hasOwnProperty(propName)) {10195props[propName] = config[propName];10196}10197}10198}1019910200// Children can be more than one argument, and those are transferred onto10201// the newly allocated props object.10202var childrenLength = arguments.length - 2;10203if (childrenLength === 1) {10204props.children = children;10205} else if (childrenLength > 1) {10206var childArray = Array(childrenLength);10207for (var i = 0; i < childrenLength; i++) {10208childArray[i] = arguments[i + 2];10209}10210props.children = childArray;10211}1021210213return new ReactElement(10214element.type,10215key,10216ref,10217owner,10218element._context,10219props10220);10221};1022210223/**10224* @param {?object} object10225* @return {boolean} True if `object` is a valid component.10226* @final10227*/10228ReactElement.isValidElement = function(object) {10229// ReactTestUtils is often used outside of beforeEach where as React is10230// within it. This leads to two different instances of React on the same10231// page. To identify a element from a different React instance we use10232// a flag instead of an instanceof check.10233var isElement = !!(object && object._isReactElement);10234// if (isElement && !(object instanceof ReactElement)) {10235// This is an indicator that you're using multiple versions of React at the10236// same time. This will screw with ownership and stuff. Fix it, please.10237// TODO: We could possibly warn here.10238// }10239return isElement;10240};1024110242module.exports = ReactElement;102431024410245}).call(this,require("FWaASH"))10246},{"./Object.assign":27,"./ReactContext":39,"./ReactCurrentOwner":40,"./warning":155,"FWaASH":1}],59:[function(require,module,exports){10247(function (process){10248/**10249* Copyright 2014-2015, Facebook, Inc.10250* All rights reserved.10251*10252* This source code is licensed under the BSD-style license found in the10253* LICENSE file in the root directory of this source tree. An additional grant10254* of patent rights can be found in the PATENTS file in the same directory.10255*10256* @providesModule ReactElementValidator10257*/1025810259/**10260* ReactElementValidator provides a wrapper around a element factory10261* which validates the props passed to the element. This is intended to be10262* used only in DEV and could be replaced by a static type checker for languages10263* that support it.10264*/1026510266'use strict';1026710268var ReactElement = require("./ReactElement");10269var ReactFragment = require("./ReactFragment");10270var ReactPropTypeLocations = require("./ReactPropTypeLocations");10271var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");10272var ReactCurrentOwner = require("./ReactCurrentOwner");10273var ReactNativeComponent = require("./ReactNativeComponent");1027410275var getIteratorFn = require("./getIteratorFn");10276var invariant = require("./invariant");10277var warning = require("./warning");1027810279function getDeclarationErrorAddendum() {10280if (ReactCurrentOwner.current) {10281var name = ReactCurrentOwner.current.getName();10282if (name) {10283return ' Check the render method of `' + name + '`.';10284}10285}10286return '';10287}1028810289/**10290* Warn if there's no key explicitly set on dynamic arrays of children or10291* object keys are not valid. This allows us to keep track of children between10292* updates.10293*/10294var ownerHasKeyUseWarning = {};1029510296var loggedTypeFailures = {};1029710298var NUMERIC_PROPERTY_REGEX = /^\d+$/;1029910300/**10301* Gets the instance's name for use in warnings.10302*10303* @internal10304* @return {?string} Display name or undefined10305*/10306function getName(instance) {10307var publicInstance = instance && instance.getPublicInstance();10308if (!publicInstance) {10309return undefined;10310}10311var constructor = publicInstance.constructor;10312if (!constructor) {10313return undefined;10314}10315return constructor.displayName || constructor.name || undefined;10316}1031710318/**10319* Gets the current owner's displayName for use in warnings.10320*10321* @internal10322* @return {?string} Display name or undefined10323*/10324function getCurrentOwnerDisplayName() {10325var current = ReactCurrentOwner.current;10326return (10327current && getName(current) || undefined10328);10329}1033010331/**10332* Warn if the element doesn't have an explicit key assigned to it.10333* This element is in an array. The array could grow and shrink or be10334* reordered. All children that haven't already been validated are required to10335* have a "key" property assigned to it.10336*10337* @internal10338* @param {ReactElement} element Element that requires a key.10339* @param {*} parentType element's parent's type.10340*/10341function validateExplicitKey(element, parentType) {10342if (element._store.validated || element.key != null) {10343return;10344}10345element._store.validated = true;1034610347warnAndMonitorForKeyUse(10348'Each child in an array or iterator should have a unique "key" prop.',10349element,10350parentType10351);10352}1035310354/**10355* Warn if the key is being defined as an object property but has an incorrect10356* value.10357*10358* @internal10359* @param {string} name Property name of the key.10360* @param {ReactElement} element Component that requires a key.10361* @param {*} parentType element's parent's type.10362*/10363function validatePropertyKey(name, element, parentType) {10364if (!NUMERIC_PROPERTY_REGEX.test(name)) {10365return;10366}10367warnAndMonitorForKeyUse(10368'Child objects should have non-numeric keys so ordering is preserved.',10369element,10370parentType10371);10372}1037310374/**10375* Shared warning and monitoring code for the key warnings.10376*10377* @internal10378* @param {string} message The base warning that gets output.10379* @param {ReactElement} element Component that requires a key.10380* @param {*} parentType element's parent's type.10381*/10382function warnAndMonitorForKeyUse(message, element, parentType) {10383var ownerName = getCurrentOwnerDisplayName();10384var parentName = typeof parentType === 'string' ?10385parentType : parentType.displayName || parentType.name;1038610387var useName = ownerName || parentName;10388var memoizer = ownerHasKeyUseWarning[message] || (10389(ownerHasKeyUseWarning[message] = {})10390);10391if (memoizer.hasOwnProperty(useName)) {10392return;10393}10394memoizer[useName] = true;1039510396var parentOrOwnerAddendum =10397ownerName ? (" Check the render method of " + ownerName + ".") :10398parentName ? (" Check the React.render call using <" + parentName + ">.") :10399'';1040010401// Usually the current owner is the offender, but if it accepts children as a10402// property, it may be the creator of the child that's responsible for10403// assigning it a key.10404var childOwnerAddendum = '';10405if (element &&10406element._owner &&10407element._owner !== ReactCurrentOwner.current) {10408// Name of the component that originally created this child.10409var childOwnerName = getName(element._owner);1041010411childOwnerAddendum = (" It was passed a child from " + childOwnerName + ".");10412}1041310414("production" !== process.env.NODE_ENV ? warning(10415false,10416message + '%s%s See http://fb.me/react-warning-keys for more information.',10417parentOrOwnerAddendum,10418childOwnerAddendum10419) : null);10420}1042110422/**10423* Ensure that every element either is passed in a static location, in an10424* array with an explicit keys property defined, or in an object literal10425* with valid key property.10426*10427* @internal10428* @param {ReactNode} node Statically passed child of any type.10429* @param {*} parentType node's parent's type.10430*/10431function validateChildKeys(node, parentType) {10432if (Array.isArray(node)) {10433for (var i = 0; i < node.length; i++) {10434var child = node[i];10435if (ReactElement.isValidElement(child)) {10436validateExplicitKey(child, parentType);10437}10438}10439} else if (ReactElement.isValidElement(node)) {10440// This element was passed in a valid location.10441node._store.validated = true;10442} else if (node) {10443var iteratorFn = getIteratorFn(node);10444// Entry iterators provide implicit keys.10445if (iteratorFn) {10446if (iteratorFn !== node.entries) {10447var iterator = iteratorFn.call(node);10448var step;10449while (!(step = iterator.next()).done) {10450if (ReactElement.isValidElement(step.value)) {10451validateExplicitKey(step.value, parentType);10452}10453}10454}10455} else if (typeof node === 'object') {10456var fragment = ReactFragment.extractIfFragment(node);10457for (var key in fragment) {10458if (fragment.hasOwnProperty(key)) {10459validatePropertyKey(key, fragment[key], parentType);10460}10461}10462}10463}10464}1046510466/**10467* Assert that the props are valid10468*10469* @param {string} componentName Name of the component for error messages.10470* @param {object} propTypes Map of prop name to a ReactPropType10471* @param {object} props10472* @param {string} location e.g. "prop", "context", "child context"10473* @private10474*/10475function checkPropTypes(componentName, propTypes, props, location) {10476for (var propName in propTypes) {10477if (propTypes.hasOwnProperty(propName)) {10478var error;10479// Prop type validation may throw. In case they do, we don't want to10480// fail the render phase where it didn't fail before. So we log it.10481// After these have been cleaned up, we'll let them throw.10482try {10483// This is intentionally an invariant that gets caught. It's the same10484// behavior as without this statement except with a better message.10485("production" !== process.env.NODE_ENV ? invariant(10486typeof propTypes[propName] === 'function',10487'%s: %s type `%s` is invalid; it must be a function, usually from ' +10488'React.PropTypes.',10489componentName || 'React class',10490ReactPropTypeLocationNames[location],10491propName10492) : invariant(typeof propTypes[propName] === 'function'));10493error = propTypes[propName](props, propName, componentName, location);10494} catch (ex) {10495error = ex;10496}10497if (error instanceof Error && !(error.message in loggedTypeFailures)) {10498// Only monitor this failure once because there tends to be a lot of the10499// same error.10500loggedTypeFailures[error.message] = true;1050110502var addendum = getDeclarationErrorAddendum(this);10503("production" !== process.env.NODE_ENV ? warning(false, 'Failed propType: %s%s', error.message, addendum) : null);10504}10505}10506}10507}1050810509var warnedPropsMutations = {};1051010511/**10512* Warn about mutating props when setting `propName` on `element`.10513*10514* @param {string} propName The string key within props that was set10515* @param {ReactElement} element10516*/10517function warnForPropsMutation(propName, element) {10518var type = element.type;10519var elementName = typeof type === 'string' ? type : type.displayName;10520var ownerName = element._owner ?10521element._owner.getPublicInstance().constructor.displayName : null;1052210523var warningKey = propName + '|' + elementName + '|' + ownerName;10524if (warnedPropsMutations.hasOwnProperty(warningKey)) {10525return;10526}10527warnedPropsMutations[warningKey] = true;1052810529var elementInfo = '';10530if (elementName) {10531elementInfo = ' <' + elementName + ' />';10532}10533var ownerInfo = '';10534if (ownerName) {10535ownerInfo = ' The element was created by ' + ownerName + '.';10536}1053710538("production" !== process.env.NODE_ENV ? warning(10539false,10540'Don\'t set .props.%s of the React component%s. ' +10541'Instead, specify the correct value when ' +10542'initially creating the element.%s',10543propName,10544elementInfo,10545ownerInfo10546) : null);10547}1054810549// Inline Object.is polyfill10550function is(a, b) {10551if (a !== a) {10552// NaN10553return b !== b;10554}10555if (a === 0 && b === 0) {10556// +-010557return 1 / a === 1 / b;10558}10559return a === b;10560}1056110562/**10563* Given an element, check if its props have been mutated since element10564* creation (or the last call to this function). In particular, check if any10565* new props have been added, which we can't directly catch by defining warning10566* properties on the props object.10567*10568* @param {ReactElement} element10569*/10570function checkAndWarnForMutatedProps(element) {10571if (!element._store) {10572// Element was created using `new ReactElement` directly or with10573// `ReactElement.createElement`; skip mutation checking10574return;10575}1057610577var originalProps = element._store.originalProps;10578var props = element.props;1057910580for (var propName in props) {10581if (props.hasOwnProperty(propName)) {10582if (!originalProps.hasOwnProperty(propName) ||10583!is(originalProps[propName], props[propName])) {10584warnForPropsMutation(propName, element);1058510586// Copy over the new value so that the two props objects match again10587originalProps[propName] = props[propName];10588}10589}10590}10591}1059210593/**10594* Given an element, validate that its props follow the propTypes definition,10595* provided by the type.10596*10597* @param {ReactElement} element10598*/10599function validatePropTypes(element) {10600if (element.type == null) {10601// This has already warned. Don't throw.10602return;10603}10604// Extract the component class from the element. Converts string types10605// to a composite class which may have propTypes.10606// TODO: Validating a string's propTypes is not decoupled from the10607// rendering target which is problematic.10608var componentClass = ReactNativeComponent.getComponentClassForElement(10609element10610);10611var name = componentClass.displayName || componentClass.name;10612if (componentClass.propTypes) {10613checkPropTypes(10614name,10615componentClass.propTypes,10616element.props,10617ReactPropTypeLocations.prop10618);10619}10620if (typeof componentClass.getDefaultProps === 'function') {10621("production" !== process.env.NODE_ENV ? warning(10622componentClass.getDefaultProps.isReactClassApproved,10623'getDefaultProps is only used on classic React.createClass ' +10624'definitions. Use a static property named `defaultProps` instead.'10625) : null);10626}10627}1062810629var ReactElementValidator = {1063010631checkAndWarnForMutatedProps: checkAndWarnForMutatedProps,1063210633createElement: function(type, props, children) {10634// We warn in this case but don't throw. We expect the element creation to10635// succeed and there will likely be errors in render.10636("production" !== process.env.NODE_ENV ? warning(10637type != null,10638'React.createElement: type should not be null or undefined. It should ' +10639'be a string (for DOM elements) or a ReactClass (for composite ' +10640'components).'10641) : null);1064210643var element = ReactElement.createElement.apply(this, arguments);1064410645// The result can be nullish if a mock or a custom function is used.10646// TODO: Drop this when these are no longer allowed as the type argument.10647if (element == null) {10648return element;10649}1065010651for (var i = 2; i < arguments.length; i++) {10652validateChildKeys(arguments[i], type);10653}1065410655validatePropTypes(element);1065610657return element;10658},1065910660createFactory: function(type) {10661var validatedFactory = ReactElementValidator.createElement.bind(10662null,10663type10664);10665// Legacy hook TODO: Warn if this is accessed10666validatedFactory.type = type;1066710668if ("production" !== process.env.NODE_ENV) {10669try {10670Object.defineProperty(10671validatedFactory,10672'type',10673{10674enumerable: false,10675get: function() {10676("production" !== process.env.NODE_ENV ? warning(10677false,10678'Factory.type is deprecated. Access the class directly ' +10679'before passing it to createFactory.'10680) : null);10681Object.defineProperty(this, 'type', {10682value: type10683});10684return type;10685}10686}10687);10688} catch (x) {10689// IE will fail on defineProperty (es5-shim/sham too)10690}10691}106921069310694return validatedFactory;10695},1069610697cloneElement: function(element, props, children) {10698var newElement = ReactElement.cloneElement.apply(this, arguments);10699for (var i = 2; i < arguments.length; i++) {10700validateChildKeys(arguments[i], newElement.type);10701}10702validatePropTypes(newElement);10703return newElement;10704}1070510706};1070710708module.exports = ReactElementValidator;107091071010711}).call(this,require("FWaASH"))10712},{"./ReactCurrentOwner":40,"./ReactElement":58,"./ReactFragment":64,"./ReactNativeComponent":74,"./ReactPropTypeLocationNames":77,"./ReactPropTypeLocations":78,"./getIteratorFn":127,"./invariant":136,"./warning":155,"FWaASH":1}],60:[function(require,module,exports){10713(function (process){10714/**10715* Copyright 2014-2015, Facebook, Inc.10716* All rights reserved.10717*10718* This source code is licensed under the BSD-style license found in the10719* LICENSE file in the root directory of this source tree. An additional grant10720* of patent rights can be found in the PATENTS file in the same directory.10721*10722* @providesModule ReactEmptyComponent10723*/1072410725'use strict';1072610727var ReactElement = require("./ReactElement");10728var ReactInstanceMap = require("./ReactInstanceMap");1072910730var invariant = require("./invariant");1073110732var component;10733// This registry keeps track of the React IDs of the components that rendered to10734// `null` (in reality a placeholder such as `noscript`)10735var nullComponentIDsRegistry = {};1073610737var ReactEmptyComponentInjection = {10738injectEmptyComponent: function(emptyComponent) {10739component = ReactElement.createFactory(emptyComponent);10740}10741};1074210743var ReactEmptyComponentType = function() {};10744ReactEmptyComponentType.prototype.componentDidMount = function() {10745var internalInstance = ReactInstanceMap.get(this);10746// TODO: Make sure we run these methods in the correct order, we shouldn't10747// need this check. We're going to assume if we're here it means we ran10748// componentWillUnmount already so there is no internal instance (it gets10749// removed as part of the unmounting process).10750if (!internalInstance) {10751return;10752}10753registerNullComponentID(internalInstance._rootNodeID);10754};10755ReactEmptyComponentType.prototype.componentWillUnmount = function() {10756var internalInstance = ReactInstanceMap.get(this);10757// TODO: Get rid of this check. See TODO in componentDidMount.10758if (!internalInstance) {10759return;10760}10761deregisterNullComponentID(internalInstance._rootNodeID);10762};10763ReactEmptyComponentType.prototype.render = function() {10764("production" !== process.env.NODE_ENV ? invariant(10765component,10766'Trying to return null from a render, but no null placeholder component ' +10767'was injected.'10768) : invariant(component));10769return component();10770};1077110772var emptyElement = ReactElement.createElement(ReactEmptyComponentType);1077310774/**10775* Mark the component as having rendered to null.10776* @param {string} id Component's `_rootNodeID`.10777*/10778function registerNullComponentID(id) {10779nullComponentIDsRegistry[id] = true;10780}1078110782/**10783* Unmark the component as having rendered to null: it renders to something now.10784* @param {string} id Component's `_rootNodeID`.10785*/10786function deregisterNullComponentID(id) {10787delete nullComponentIDsRegistry[id];10788}1078910790/**10791* @param {string} id Component's `_rootNodeID`.10792* @return {boolean} True if the component is rendered to null.10793*/10794function isNullComponentID(id) {10795return !!nullComponentIDsRegistry[id];10796}1079710798var ReactEmptyComponent = {10799emptyElement: emptyElement,10800injection: ReactEmptyComponentInjection,10801isNullComponentID: isNullComponentID10802};1080310804module.exports = ReactEmptyComponent;108051080610807}).call(this,require("FWaASH"))10808},{"./ReactElement":58,"./ReactInstanceMap":68,"./invariant":136,"FWaASH":1}],61:[function(require,module,exports){10809/**10810* Copyright 2013-2015, Facebook, Inc.10811* All rights reserved.10812*10813* This source code is licensed under the BSD-style license found in the10814* LICENSE file in the root directory of this source tree. An additional grant10815* of patent rights can be found in the PATENTS file in the same directory.10816*10817* @providesModule ReactErrorUtils10818* @typechecks10819*/1082010821"use strict";1082210823var ReactErrorUtils = {10824/**10825* Creates a guarded version of a function. This is supposed to make debugging10826* of event handlers easier. To aid debugging with the browser's debugger,10827* this currently simply returns the original function.10828*10829* @param {function} func Function to be executed10830* @param {string} name The name of the guard10831* @return {function}10832*/10833guard: function(func, name) {10834return func;10835}10836};1083710838module.exports = ReactErrorUtils;108391084010841},{}],62:[function(require,module,exports){10842/**10843* Copyright 2013-2015, Facebook, Inc.10844* All rights reserved.10845*10846* This source code is licensed under the BSD-style license found in the10847* LICENSE file in the root directory of this source tree. An additional grant10848* of patent rights can be found in the PATENTS file in the same directory.10849*10850* @providesModule ReactEventEmitterMixin10851*/1085210853'use strict';1085410855var EventPluginHub = require("./EventPluginHub");1085610857function runEventQueueInBatch(events) {10858EventPluginHub.enqueueEvents(events);10859EventPluginHub.processEventQueue();10860}1086110862var ReactEventEmitterMixin = {1086310864/**10865* Streams a fired top-level event to `EventPluginHub` where plugins have the10866* opportunity to create `ReactEvent`s to be dispatched.10867*10868* @param {string} topLevelType Record from `EventConstants`.10869* @param {object} topLevelTarget The listening component root node.10870* @param {string} topLevelTargetID ID of `topLevelTarget`.10871* @param {object} nativeEvent Native environment event.10872*/10873handleTopLevel: function(10874topLevelType,10875topLevelTarget,10876topLevelTargetID,10877nativeEvent) {10878var events = EventPluginHub.extractEvents(10879topLevelType,10880topLevelTarget,10881topLevelTargetID,10882nativeEvent10883);1088410885runEventQueueInBatch(events);10886}10887};1088810889module.exports = ReactEventEmitterMixin;108901089110892},{"./EventPluginHub":17}],63:[function(require,module,exports){10893/**10894* Copyright 2013-2015, Facebook, Inc.10895* All rights reserved.10896*10897* This source code is licensed under the BSD-style license found in the10898* LICENSE file in the root directory of this source tree. An additional grant10899* of patent rights can be found in the PATENTS file in the same directory.10900*10901* @providesModule ReactEventListener10902* @typechecks static-only10903*/1090410905'use strict';1090610907var EventListener = require("./EventListener");10908var ExecutionEnvironment = require("./ExecutionEnvironment");10909var PooledClass = require("./PooledClass");10910var ReactInstanceHandles = require("./ReactInstanceHandles");10911var ReactMount = require("./ReactMount");10912var ReactUpdates = require("./ReactUpdates");1091310914var assign = require("./Object.assign");10915var getEventTarget = require("./getEventTarget");10916var getUnboundedScrollPosition = require("./getUnboundedScrollPosition");1091710918/**10919* Finds the parent React component of `node`.10920*10921* @param {*} node10922* @return {?DOMEventTarget} Parent container, or `null` if the specified node10923* is not nested.10924*/10925function findParent(node) {10926// TODO: It may be a good idea to cache this to prevent unnecessary DOM10927// traversal, but caching is difficult to do correctly without using a10928// mutation observer to listen for all DOM changes.10929var nodeID = ReactMount.getID(node);10930var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);10931var container = ReactMount.findReactContainerForID(rootID);10932var parent = ReactMount.getFirstReactDOM(container);10933return parent;10934}1093510936// Used to store ancestor hierarchy in top level callback10937function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {10938this.topLevelType = topLevelType;10939this.nativeEvent = nativeEvent;10940this.ancestors = [];10941}10942assign(TopLevelCallbackBookKeeping.prototype, {10943destructor: function() {10944this.topLevelType = null;10945this.nativeEvent = null;10946this.ancestors.length = 0;10947}10948});10949PooledClass.addPoolingTo(10950TopLevelCallbackBookKeeping,10951PooledClass.twoArgumentPooler10952);1095310954function handleTopLevelImpl(bookKeeping) {10955var topLevelTarget = ReactMount.getFirstReactDOM(10956getEventTarget(bookKeeping.nativeEvent)10957) || window;1095810959// Loop through the hierarchy, in case there's any nested components.10960// It's important that we build the array of ancestors before calling any10961// event handlers, because event handlers can modify the DOM, leading to10962// inconsistencies with ReactMount's node cache. See #1105.10963var ancestor = topLevelTarget;10964while (ancestor) {10965bookKeeping.ancestors.push(ancestor);10966ancestor = findParent(ancestor);10967}1096810969for (var i = 0, l = bookKeeping.ancestors.length; i < l; i++) {10970topLevelTarget = bookKeeping.ancestors[i];10971var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';10972ReactEventListener._handleTopLevel(10973bookKeeping.topLevelType,10974topLevelTarget,10975topLevelTargetID,10976bookKeeping.nativeEvent10977);10978}10979}1098010981function scrollValueMonitor(cb) {10982var scrollPosition = getUnboundedScrollPosition(window);10983cb(scrollPosition);10984}1098510986var ReactEventListener = {10987_enabled: true,10988_handleTopLevel: null,1098910990WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,1099110992setHandleTopLevel: function(handleTopLevel) {10993ReactEventListener._handleTopLevel = handleTopLevel;10994},1099510996setEnabled: function(enabled) {10997ReactEventListener._enabled = !!enabled;10998},1099911000isEnabled: function() {11001return ReactEventListener._enabled;11002},110031100411005/**11006* Traps top-level events by using event bubbling.11007*11008* @param {string} topLevelType Record from `EventConstants`.11009* @param {string} handlerBaseName Event name (e.g. "click").11010* @param {object} handle Element on which to attach listener.11011* @return {object} An object with a remove function which will forcefully11012* remove the listener.11013* @internal11014*/11015trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {11016var element = handle;11017if (!element) {11018return null;11019}11020return EventListener.listen(11021element,11022handlerBaseName,11023ReactEventListener.dispatchEvent.bind(null, topLevelType)11024);11025},1102611027/**11028* Traps a top-level event by using event capturing.11029*11030* @param {string} topLevelType Record from `EventConstants`.11031* @param {string} handlerBaseName Event name (e.g. "click").11032* @param {object} handle Element on which to attach listener.11033* @return {object} An object with a remove function which will forcefully11034* remove the listener.11035* @internal11036*/11037trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {11038var element = handle;11039if (!element) {11040return null;11041}11042return EventListener.capture(11043element,11044handlerBaseName,11045ReactEventListener.dispatchEvent.bind(null, topLevelType)11046);11047},1104811049monitorScrollValue: function(refresh) {11050var callback = scrollValueMonitor.bind(null, refresh);11051EventListener.listen(window, 'scroll', callback);11052},1105311054dispatchEvent: function(topLevelType, nativeEvent) {11055if (!ReactEventListener._enabled) {11056return;11057}1105811059var bookKeeping = TopLevelCallbackBookKeeping.getPooled(11060topLevelType,11061nativeEvent11062);11063try {11064// Event queue being processed in the same cycle allows11065// `preventDefault`.11066ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);11067} finally {11068TopLevelCallbackBookKeeping.release(bookKeeping);11069}11070}11071};1107211073module.exports = ReactEventListener;110741107511076},{"./EventListener":16,"./ExecutionEnvironment":21,"./Object.assign":27,"./PooledClass":28,"./ReactInstanceHandles":67,"./ReactMount":71,"./ReactUpdates":88,"./getEventTarget":126,"./getUnboundedScrollPosition":132}],64:[function(require,module,exports){11077(function (process){11078/**11079* Copyright 2015, Facebook, Inc.11080* All rights reserved.11081*11082* This source code is licensed under the BSD-style license found in the11083* LICENSE file in the root directory of this source tree. An additional grant11084* of patent rights can be found in the PATENTS file in the same directory.11085*11086* @providesModule ReactFragment11087*/1108811089'use strict';1109011091var ReactElement = require("./ReactElement");1109211093var warning = require("./warning");1109411095/**11096* We used to allow keyed objects to serve as a collection of ReactElements,11097* or nested sets. This allowed us a way to explicitly key a set a fragment of11098* components. This is now being replaced with an opaque data structure.11099* The upgrade path is to call React.addons.createFragment({ key: value }) to11100* create a keyed fragment. The resulting data structure is opaque, for now.11101*/1110211103if ("production" !== process.env.NODE_ENV) {11104var fragmentKey = '_reactFragment';11105var didWarnKey = '_reactDidWarn';11106var canWarnForReactFragment = false;1110711108try {11109// Feature test. Don't even try to issue this warning if we can't use11110// enumerable: false.1111111112var dummy = function() {11113return 1;11114};1111511116Object.defineProperty(11117{},11118fragmentKey,11119{enumerable: false, value: true}11120);1112111122Object.defineProperty(11123{},11124'key',11125{enumerable: true, get: dummy}11126);1112711128canWarnForReactFragment = true;11129} catch (x) { }1113011131var proxyPropertyAccessWithWarning = function(obj, key) {11132Object.defineProperty(obj, key, {11133enumerable: true,11134get: function() {11135("production" !== process.env.NODE_ENV ? warning(11136this[didWarnKey],11137'A ReactFragment is an opaque type. Accessing any of its ' +11138'properties is deprecated. Pass it to one of the React.Children ' +11139'helpers.'11140) : null);11141this[didWarnKey] = true;11142return this[fragmentKey][key];11143},11144set: function(value) {11145("production" !== process.env.NODE_ENV ? warning(11146this[didWarnKey],11147'A ReactFragment is an immutable opaque type. Mutating its ' +11148'properties is deprecated.'11149) : null);11150this[didWarnKey] = true;11151this[fragmentKey][key] = value;11152}11153});11154};1115511156var issuedWarnings = {};1115711158var didWarnForFragment = function(fragment) {11159// We use the keys and the type of the value as a heuristic to dedupe the11160// warning to avoid spamming too much.11161var fragmentCacheKey = '';11162for (var key in fragment) {11163fragmentCacheKey += key + ':' + (typeof fragment[key]) + ',';11164}11165var alreadyWarnedOnce = !!issuedWarnings[fragmentCacheKey];11166issuedWarnings[fragmentCacheKey] = true;11167return alreadyWarnedOnce;11168};11169}1117011171var ReactFragment = {11172// Wrap a keyed object in an opaque proxy that warns you if you access any11173// of its properties.11174create: function(object) {11175if ("production" !== process.env.NODE_ENV) {11176if (typeof object !== 'object' || !object || Array.isArray(object)) {11177("production" !== process.env.NODE_ENV ? warning(11178false,11179'React.addons.createFragment only accepts a single object.',11180object11181) : null);11182return object;11183}11184if (ReactElement.isValidElement(object)) {11185("production" !== process.env.NODE_ENV ? warning(11186false,11187'React.addons.createFragment does not accept a ReactElement ' +11188'without a wrapper object.'11189) : null);11190return object;11191}11192if (canWarnForReactFragment) {11193var proxy = {};11194Object.defineProperty(proxy, fragmentKey, {11195enumerable: false,11196value: object11197});11198Object.defineProperty(proxy, didWarnKey, {11199writable: true,11200enumerable: false,11201value: false11202});11203for (var key in object) {11204proxyPropertyAccessWithWarning(proxy, key);11205}11206Object.preventExtensions(proxy);11207return proxy;11208}11209}11210return object;11211},11212// Extract the original keyed object from the fragment opaque type. Warn if11213// a plain object is passed here.11214extract: function(fragment) {11215if ("production" !== process.env.NODE_ENV) {11216if (canWarnForReactFragment) {11217if (!fragment[fragmentKey]) {11218("production" !== process.env.NODE_ENV ? warning(11219didWarnForFragment(fragment),11220'Any use of a keyed object should be wrapped in ' +11221'React.addons.createFragment(object) before being passed as a ' +11222'child.'11223) : null);11224return fragment;11225}11226return fragment[fragmentKey];11227}11228}11229return fragment;11230},11231// Check if this is a fragment and if so, extract the keyed object. If it11232// is a fragment-like object, warn that it should be wrapped. Ignore if we11233// can't determine what kind of object this is.11234extractIfFragment: function(fragment) {11235if ("production" !== process.env.NODE_ENV) {11236if (canWarnForReactFragment) {11237// If it is the opaque type, return the keyed object.11238if (fragment[fragmentKey]) {11239return fragment[fragmentKey];11240}11241// Otherwise, check each property if it has an element, if it does11242// it is probably meant as a fragment, so we can warn early. Defer,11243// the warning to extract.11244for (var key in fragment) {11245if (fragment.hasOwnProperty(key) &&11246ReactElement.isValidElement(fragment[key])) {11247// This looks like a fragment object, we should provide an11248// early warning.11249return ReactFragment.extract(fragment);11250}11251}11252}11253}11254return fragment;11255}11256};1125711258module.exports = ReactFragment;112591126011261}).call(this,require("FWaASH"))11262},{"./ReactElement":58,"./warning":155,"FWaASH":1}],65:[function(require,module,exports){11263/**11264* Copyright 2013-2015, Facebook, Inc.11265* All rights reserved.11266*11267* This source code is licensed under the BSD-style license found in the11268* LICENSE file in the root directory of this source tree. An additional grant11269* of patent rights can be found in the PATENTS file in the same directory.11270*11271* @providesModule ReactInjection11272*/1127311274'use strict';1127511276var DOMProperty = require("./DOMProperty");11277var EventPluginHub = require("./EventPluginHub");11278var ReactComponentEnvironment = require("./ReactComponentEnvironment");11279var ReactClass = require("./ReactClass");11280var ReactEmptyComponent = require("./ReactEmptyComponent");11281var ReactBrowserEventEmitter = require("./ReactBrowserEventEmitter");11282var ReactNativeComponent = require("./ReactNativeComponent");11283var ReactDOMComponent = require("./ReactDOMComponent");11284var ReactPerf = require("./ReactPerf");11285var ReactRootIndex = require("./ReactRootIndex");11286var ReactUpdates = require("./ReactUpdates");1128711288var ReactInjection = {11289Component: ReactComponentEnvironment.injection,11290Class: ReactClass.injection,11291DOMComponent: ReactDOMComponent.injection,11292DOMProperty: DOMProperty.injection,11293EmptyComponent: ReactEmptyComponent.injection,11294EventPluginHub: EventPluginHub.injection,11295EventEmitter: ReactBrowserEventEmitter.injection,11296NativeComponent: ReactNativeComponent.injection,11297Perf: ReactPerf.injection,11298RootIndex: ReactRootIndex.injection,11299Updates: ReactUpdates.injection11300};1130111302module.exports = ReactInjection;113031130411305},{"./DOMProperty":10,"./EventPluginHub":17,"./ReactBrowserEventEmitter":31,"./ReactClass":34,"./ReactComponentEnvironment":37,"./ReactDOMComponent":43,"./ReactEmptyComponent":60,"./ReactNativeComponent":74,"./ReactPerf":76,"./ReactRootIndex":84,"./ReactUpdates":88}],66:[function(require,module,exports){11306/**11307* Copyright 2013-2015, Facebook, Inc.11308* All rights reserved.11309*11310* This source code is licensed under the BSD-style license found in the11311* LICENSE file in the root directory of this source tree. An additional grant11312* of patent rights can be found in the PATENTS file in the same directory.11313*11314* @providesModule ReactInputSelection11315*/1131611317'use strict';1131811319var ReactDOMSelection = require("./ReactDOMSelection");1132011321var containsNode = require("./containsNode");11322var focusNode = require("./focusNode");11323var getActiveElement = require("./getActiveElement");1132411325function isInDocument(node) {11326return containsNode(document.documentElement, node);11327}1132811329/**11330* @ReactInputSelection: React input selection module. Based on Selection.js,11331* but modified to be suitable for react and has a couple of bug fixes (doesn't11332* assume buttons have range selections allowed).11333* Input selection module for React.11334*/11335var ReactInputSelection = {1133611337hasSelectionCapabilities: function(elem) {11338return elem && (11339((elem.nodeName === 'INPUT' && elem.type === 'text') ||11340elem.nodeName === 'TEXTAREA' || elem.contentEditable === 'true')11341);11342},1134311344getSelectionInformation: function() {11345var focusedElem = getActiveElement();11346return {11347focusedElem: focusedElem,11348selectionRange:11349ReactInputSelection.hasSelectionCapabilities(focusedElem) ?11350ReactInputSelection.getSelection(focusedElem) :11351null11352};11353},1135411355/**11356* @restoreSelection: If any selection information was potentially lost,11357* restore it. This is useful when performing operations that could remove dom11358* nodes and place them back in, resulting in focus being lost.11359*/11360restoreSelection: function(priorSelectionInformation) {11361var curFocusedElem = getActiveElement();11362var priorFocusedElem = priorSelectionInformation.focusedElem;11363var priorSelectionRange = priorSelectionInformation.selectionRange;11364if (curFocusedElem !== priorFocusedElem &&11365isInDocument(priorFocusedElem)) {11366if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {11367ReactInputSelection.setSelection(11368priorFocusedElem,11369priorSelectionRange11370);11371}11372focusNode(priorFocusedElem);11373}11374},1137511376/**11377* @getSelection: Gets the selection bounds of a focused textarea, input or11378* contentEditable node.11379* -@input: Look up selection bounds of this input11380* -@return {start: selectionStart, end: selectionEnd}11381*/11382getSelection: function(input) {11383var selection;1138411385if ('selectionStart' in input) {11386// Modern browser with input or textarea.11387selection = {11388start: input.selectionStart,11389end: input.selectionEnd11390};11391} else if (document.selection && input.nodeName === 'INPUT') {11392// IE8 input.11393var range = document.selection.createRange();11394// There can only be one selection per document in IE, so it must11395// be in our element.11396if (range.parentElement() === input) {11397selection = {11398start: -range.moveStart('character', -input.value.length),11399end: -range.moveEnd('character', -input.value.length)11400};11401}11402} else {11403// Content editable or old IE textarea.11404selection = ReactDOMSelection.getOffsets(input);11405}1140611407return selection || {start: 0, end: 0};11408},1140911410/**11411* @setSelection: Sets the selection bounds of a textarea or input and focuses11412* the input.11413* -@input Set selection bounds of this input or textarea11414* -@offsets Object of same form that is returned from get*11415*/11416setSelection: function(input, offsets) {11417var start = offsets.start;11418var end = offsets.end;11419if (typeof end === 'undefined') {11420end = start;11421}1142211423if ('selectionStart' in input) {11424input.selectionStart = start;11425input.selectionEnd = Math.min(end, input.value.length);11426} else if (document.selection && input.nodeName === 'INPUT') {11427var range = input.createTextRange();11428range.collapse(true);11429range.moveStart('character', start);11430range.moveEnd('character', end - start);11431range.select();11432} else {11433ReactDOMSelection.setOffsets(input, offsets);11434}11435}11436};1143711438module.exports = ReactInputSelection;114391144011441},{"./ReactDOMSelection":51,"./containsNode":110,"./focusNode":120,"./getActiveElement":122}],67:[function(require,module,exports){11442(function (process){11443/**11444* Copyright 2013-2015, Facebook, Inc.11445* All rights reserved.11446*11447* This source code is licensed under the BSD-style license found in the11448* LICENSE file in the root directory of this source tree. An additional grant11449* of patent rights can be found in the PATENTS file in the same directory.11450*11451* @providesModule ReactInstanceHandles11452* @typechecks static-only11453*/1145411455'use strict';1145611457var ReactRootIndex = require("./ReactRootIndex");1145811459var invariant = require("./invariant");1146011461var SEPARATOR = '.';11462var SEPARATOR_LENGTH = SEPARATOR.length;1146311464/**11465* Maximum depth of traversals before we consider the possibility of a bad ID.11466*/11467var MAX_TREE_DEPTH = 100;1146811469/**11470* Creates a DOM ID prefix to use when mounting React components.11471*11472* @param {number} index A unique integer11473* @return {string} React root ID.11474* @internal11475*/11476function getReactRootIDString(index) {11477return SEPARATOR + index.toString(36);11478}1147911480/**11481* Checks if a character in the supplied ID is a separator or the end.11482*11483* @param {string} id A React DOM ID.11484* @param {number} index Index of the character to check.11485* @return {boolean} True if the character is a separator or end of the ID.11486* @private11487*/11488function isBoundary(id, index) {11489return id.charAt(index) === SEPARATOR || index === id.length;11490}1149111492/**11493* Checks if the supplied string is a valid React DOM ID.11494*11495* @param {string} id A React DOM ID, maybe.11496* @return {boolean} True if the string is a valid React DOM ID.11497* @private11498*/11499function isValidID(id) {11500return id === '' || (11501id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR11502);11503}1150411505/**11506* Checks if the first ID is an ancestor of or equal to the second ID.11507*11508* @param {string} ancestorID11509* @param {string} descendantID11510* @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.11511* @internal11512*/11513function isAncestorIDOf(ancestorID, descendantID) {11514return (11515descendantID.indexOf(ancestorID) === 0 &&11516isBoundary(descendantID, ancestorID.length)11517);11518}1151911520/**11521* Gets the parent ID of the supplied React DOM ID, `id`.11522*11523* @param {string} id ID of a component.11524* @return {string} ID of the parent, or an empty string.11525* @private11526*/11527function getParentID(id) {11528return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';11529}1153011531/**11532* Gets the next DOM ID on the tree path from the supplied `ancestorID` to the11533* supplied `destinationID`. If they are equal, the ID is returned.11534*11535* @param {string} ancestorID ID of an ancestor node of `destinationID`.11536* @param {string} destinationID ID of the destination node.11537* @return {string} Next ID on the path from `ancestorID` to `destinationID`.11538* @private11539*/11540function getNextDescendantID(ancestorID, destinationID) {11541("production" !== process.env.NODE_ENV ? invariant(11542isValidID(ancestorID) && isValidID(destinationID),11543'getNextDescendantID(%s, %s): Received an invalid React DOM ID.',11544ancestorID,11545destinationID11546) : invariant(isValidID(ancestorID) && isValidID(destinationID)));11547("production" !== process.env.NODE_ENV ? invariant(11548isAncestorIDOf(ancestorID, destinationID),11549'getNextDescendantID(...): React has made an invalid assumption about ' +11550'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.',11551ancestorID,11552destinationID11553) : invariant(isAncestorIDOf(ancestorID, destinationID)));11554if (ancestorID === destinationID) {11555return ancestorID;11556}11557// Skip over the ancestor and the immediate separator. Traverse until we hit11558// another separator or we reach the end of `destinationID`.11559var start = ancestorID.length + SEPARATOR_LENGTH;11560var i;11561for (i = start; i < destinationID.length; i++) {11562if (isBoundary(destinationID, i)) {11563break;11564}11565}11566return destinationID.substr(0, i);11567}1156811569/**11570* Gets the nearest common ancestor ID of two IDs.11571*11572* Using this ID scheme, the nearest common ancestor ID is the longest common11573* prefix of the two IDs that immediately preceded a "marker" in both strings.11574*11575* @param {string} oneID11576* @param {string} twoID11577* @return {string} Nearest common ancestor ID, or the empty string if none.11578* @private11579*/11580function getFirstCommonAncestorID(oneID, twoID) {11581var minLength = Math.min(oneID.length, twoID.length);11582if (minLength === 0) {11583return '';11584}11585var lastCommonMarkerIndex = 0;11586// Use `<=` to traverse until the "EOL" of the shorter string.11587for (var i = 0; i <= minLength; i++) {11588if (isBoundary(oneID, i) && isBoundary(twoID, i)) {11589lastCommonMarkerIndex = i;11590} else if (oneID.charAt(i) !== twoID.charAt(i)) {11591break;11592}11593}11594var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);11595("production" !== process.env.NODE_ENV ? invariant(11596isValidID(longestCommonID),11597'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s',11598oneID,11599twoID,11600longestCommonID11601) : invariant(isValidID(longestCommonID)));11602return longestCommonID;11603}1160411605/**11606* Traverses the parent path between two IDs (either up or down). The IDs must11607* not be the same, and there must exist a parent path between them. If the11608* callback returns `false`, traversal is stopped.11609*11610* @param {?string} start ID at which to start traversal.11611* @param {?string} stop ID at which to end traversal.11612* @param {function} cb Callback to invoke each ID with.11613* @param {?boolean} skipFirst Whether or not to skip the first node.11614* @param {?boolean} skipLast Whether or not to skip the last node.11615* @private11616*/11617function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {11618start = start || '';11619stop = stop || '';11620("production" !== process.env.NODE_ENV ? invariant(11621start !== stop,11622'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.',11623start11624) : invariant(start !== stop));11625var traverseUp = isAncestorIDOf(stop, start);11626("production" !== process.env.NODE_ENV ? invariant(11627traverseUp || isAncestorIDOf(start, stop),11628'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' +11629'not have a parent path.',11630start,11631stop11632) : invariant(traverseUp || isAncestorIDOf(start, stop)));11633// Traverse from `start` to `stop` one depth at a time.11634var depth = 0;11635var traverse = traverseUp ? getParentID : getNextDescendantID;11636for (var id = start; /* until break */; id = traverse(id, stop)) {11637var ret;11638if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {11639ret = cb(id, traverseUp, arg);11640}11641if (ret === false || id === stop) {11642// Only break //after// visiting `stop`.11643break;11644}11645("production" !== process.env.NODE_ENV ? invariant(11646depth++ < MAX_TREE_DEPTH,11647'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' +11648'traversing the React DOM ID tree. This may be due to malformed IDs: %s',11649start, stop11650) : invariant(depth++ < MAX_TREE_DEPTH));11651}11652}1165311654/**11655* Manages the IDs assigned to DOM representations of React components. This11656* uses a specific scheme in order to traverse the DOM efficiently (e.g. in11657* order to simulate events).11658*11659* @internal11660*/11661var ReactInstanceHandles = {1166211663/**11664* Constructs a React root ID11665* @return {string} A React root ID.11666*/11667createReactRootID: function() {11668return getReactRootIDString(ReactRootIndex.createReactRootIndex());11669},1167011671/**11672* Constructs a React ID by joining a root ID with a name.11673*11674* @param {string} rootID Root ID of a parent component.11675* @param {string} name A component's name (as flattened children).11676* @return {string} A React ID.11677* @internal11678*/11679createReactID: function(rootID, name) {11680return rootID + name;11681},1168211683/**11684* Gets the DOM ID of the React component that is the root of the tree that11685* contains the React component with the supplied DOM ID.11686*11687* @param {string} id DOM ID of a React component.11688* @return {?string} DOM ID of the React component that is the root.11689* @internal11690*/11691getReactRootIDFromNodeID: function(id) {11692if (id && id.charAt(0) === SEPARATOR && id.length > 1) {11693var index = id.indexOf(SEPARATOR, 1);11694return index > -1 ? id.substr(0, index) : id;11695}11696return null;11697},1169811699/**11700* Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that11701* should would receive a `mouseEnter` or `mouseLeave` event.11702*11703* NOTE: Does not invoke the callback on the nearest common ancestor because11704* nothing "entered" or "left" that element.11705*11706* @param {string} leaveID ID being left.11707* @param {string} enterID ID being entered.11708* @param {function} cb Callback to invoke on each entered/left ID.11709* @param {*} upArg Argument to invoke the callback with on left IDs.11710* @param {*} downArg Argument to invoke the callback with on entered IDs.11711* @internal11712*/11713traverseEnterLeave: function(leaveID, enterID, cb, upArg, downArg) {11714var ancestorID = getFirstCommonAncestorID(leaveID, enterID);11715if (ancestorID !== leaveID) {11716traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);11717}11718if (ancestorID !== enterID) {11719traverseParentPath(ancestorID, enterID, cb, downArg, true, false);11720}11721},1172211723/**11724* Simulates the traversal of a two-phase, capture/bubble event dispatch.11725*11726* NOTE: This traversal happens on IDs without touching the DOM.11727*11728* @param {string} targetID ID of the target node.11729* @param {function} cb Callback to invoke.11730* @param {*} arg Argument to invoke the callback with.11731* @internal11732*/11733traverseTwoPhase: function(targetID, cb, arg) {11734if (targetID) {11735traverseParentPath('', targetID, cb, arg, true, false);11736traverseParentPath(targetID, '', cb, arg, false, true);11737}11738},1173911740/**11741* Traverse a node ID, calling the supplied `cb` for each ancestor ID. For11742* example, passing `.0.$row-0.1` would result in `cb` getting called11743* with `.0`, `.0.$row-0`, and `.0.$row-0.1`.11744*11745* NOTE: This traversal happens on IDs without touching the DOM.11746*11747* @param {string} targetID ID of the target node.11748* @param {function} cb Callback to invoke.11749* @param {*} arg Argument to invoke the callback with.11750* @internal11751*/11752traverseAncestors: function(targetID, cb, arg) {11753traverseParentPath('', targetID, cb, arg, true, false);11754},1175511756/**11757* Exposed for unit testing.11758* @private11759*/11760_getFirstCommonAncestorID: getFirstCommonAncestorID,1176111762/**11763* Exposed for unit testing.11764* @private11765*/11766_getNextDescendantID: getNextDescendantID,1176711768isAncestorIDOf: isAncestorIDOf,1176911770SEPARATOR: SEPARATOR1177111772};1177311774module.exports = ReactInstanceHandles;117751177611777}).call(this,require("FWaASH"))11778},{"./ReactRootIndex":84,"./invariant":136,"FWaASH":1}],68:[function(require,module,exports){11779/**11780* Copyright 2013-2015, Facebook, Inc.11781* All rights reserved.11782*11783* This source code is licensed under the BSD-style license found in the11784* LICENSE file in the root directory of this source tree. An additional grant11785* of patent rights can be found in the PATENTS file in the same directory.11786*11787* @providesModule ReactInstanceMap11788*/1178911790'use strict';1179111792/**11793* `ReactInstanceMap` maintains a mapping from a public facing stateful11794* instance (key) and the internal representation (value). This allows public11795* methods to accept the user facing instance as an argument and map them back11796* to internal methods.11797*/1179811799// TODO: Replace this with ES6: var ReactInstanceMap = new Map();11800var ReactInstanceMap = {1180111802/**11803* This API should be called `delete` but we'd have to make sure to always11804* transform these to strings for IE support. When this transform is fully11805* supported we can rename it.11806*/11807remove: function(key) {11808key._reactInternalInstance = undefined;11809},1181011811get: function(key) {11812return key._reactInternalInstance;11813},1181411815has: function(key) {11816return key._reactInternalInstance !== undefined;11817},1181811819set: function(key, value) {11820key._reactInternalInstance = value;11821}1182211823};1182411825module.exports = ReactInstanceMap;118261182711828},{}],69:[function(require,module,exports){11829/**11830* Copyright 2015, Facebook, Inc.11831* All rights reserved.11832*11833* This source code is licensed under the BSD-style license found in the11834* LICENSE file in the root directory of this source tree. An additional grant11835* of patent rights can be found in the PATENTS file in the same directory.11836*11837* @providesModule ReactLifeCycle11838*/1183911840'use strict';1184111842/**11843* This module manages the bookkeeping when a component is in the process11844* of being mounted or being unmounted. This is used as a way to enforce11845* invariants (or warnings) when it is not recommended to call11846* setState/forceUpdate.11847*11848* currentlyMountingInstance: During the construction phase, it is not possible11849* to trigger an update since the instance is not fully mounted yet. However, we11850* currently allow this as a convenience for mutating the initial state.11851*11852* currentlyUnmountingInstance: During the unmounting phase, the instance is11853* still mounted and can therefore schedule an update. However, this is not11854* recommended and probably an error since it's about to be unmounted.11855* Therefore we still want to trigger in an error for that case.11856*/1185711858var ReactLifeCycle = {11859currentlyMountingInstance: null,11860currentlyUnmountingInstance: null11861};1186211863module.exports = ReactLifeCycle;118641186511866},{}],70:[function(require,module,exports){11867/**11868* Copyright 2013-2015, Facebook, Inc.11869* All rights reserved.11870*11871* This source code is licensed under the BSD-style license found in the11872* LICENSE file in the root directory of this source tree. An additional grant11873* of patent rights can be found in the PATENTS file in the same directory.11874*11875* @providesModule ReactMarkupChecksum11876*/1187711878'use strict';1187911880var adler32 = require("./adler32");1188111882var ReactMarkupChecksum = {11883CHECKSUM_ATTR_NAME: 'data-react-checksum',1188411885/**11886* @param {string} markup Markup string11887* @return {string} Markup string with checksum attribute attached11888*/11889addChecksumToMarkup: function(markup) {11890var checksum = adler32(markup);11891return markup.replace(11892'>',11893' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '">'11894);11895},1189611897/**11898* @param {string} markup to use11899* @param {DOMElement} element root React element11900* @returns {boolean} whether or not the markup is the same11901*/11902canReuseMarkup: function(markup, element) {11903var existingChecksum = element.getAttribute(11904ReactMarkupChecksum.CHECKSUM_ATTR_NAME11905);11906existingChecksum = existingChecksum && parseInt(existingChecksum, 10);11907var markupChecksum = adler32(markup);11908return markupChecksum === existingChecksum;11909}11910};1191111912module.exports = ReactMarkupChecksum;119131191411915},{"./adler32":107}],71:[function(require,module,exports){11916(function (process){11917/**11918* Copyright 2013-2015, Facebook, Inc.11919* All rights reserved.11920*11921* This source code is licensed under the BSD-style license found in the11922* LICENSE file in the root directory of this source tree. An additional grant11923* of patent rights can be found in the PATENTS file in the same directory.11924*11925* @providesModule ReactMount11926*/1192711928'use strict';1192911930var DOMProperty = require("./DOMProperty");11931var ReactBrowserEventEmitter = require("./ReactBrowserEventEmitter");11932var ReactCurrentOwner = require("./ReactCurrentOwner");11933var ReactElement = require("./ReactElement");11934var ReactElementValidator = require("./ReactElementValidator");11935var ReactEmptyComponent = require("./ReactEmptyComponent");11936var ReactInstanceHandles = require("./ReactInstanceHandles");11937var ReactInstanceMap = require("./ReactInstanceMap");11938var ReactMarkupChecksum = require("./ReactMarkupChecksum");11939var ReactPerf = require("./ReactPerf");11940var ReactReconciler = require("./ReactReconciler");11941var ReactUpdateQueue = require("./ReactUpdateQueue");11942var ReactUpdates = require("./ReactUpdates");1194311944var emptyObject = require("./emptyObject");11945var containsNode = require("./containsNode");11946var getReactRootElementInContainer = require("./getReactRootElementInContainer");11947var instantiateReactComponent = require("./instantiateReactComponent");11948var invariant = require("./invariant");11949var setInnerHTML = require("./setInnerHTML");11950var shouldUpdateReactComponent = require("./shouldUpdateReactComponent");11951var warning = require("./warning");1195211953var SEPARATOR = ReactInstanceHandles.SEPARATOR;1195411955var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;11956var nodeCache = {};1195711958var ELEMENT_NODE_TYPE = 1;11959var DOC_NODE_TYPE = 9;1196011961/** Mapping from reactRootID to React component instance. */11962var instancesByReactRootID = {};1196311964/** Mapping from reactRootID to `container` nodes. */11965var containersByReactRootID = {};1196611967if ("production" !== process.env.NODE_ENV) {11968/** __DEV__-only mapping from reactRootID to root elements. */11969var rootElementsByReactRootID = {};11970}1197111972// Used to store breadth-first search state in findComponentRoot.11973var findComponentRootReusableArray = [];1197411975/**11976* Finds the index of the first character11977* that's not common between the two given strings.11978*11979* @return {number} the index of the character where the strings diverge11980*/11981function firstDifferenceIndex(string1, string2) {11982var minLen = Math.min(string1.length, string2.length);11983for (var i = 0; i < minLen; i++) {11984if (string1.charAt(i) !== string2.charAt(i)) {11985return i;11986}11987}11988return string1.length === string2.length ? -1 : minLen;11989}1199011991/**11992* @param {DOMElement} container DOM element that may contain a React component.11993* @return {?string} A "reactRoot" ID, if a React component is rendered.11994*/11995function getReactRootID(container) {11996var rootElement = getReactRootElementInContainer(container);11997return rootElement && ReactMount.getID(rootElement);11998}1199912000/**12001* Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form12002* element can return its control whose name or ID equals ATTR_NAME. All12003* DOM nodes support `getAttributeNode` but this can also get called on12004* other objects so just return '' if we're given something other than a12005* DOM node (such as window).12006*12007* @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.12008* @return {string} ID of the supplied `domNode`.12009*/12010function getID(node) {12011var id = internalGetID(node);12012if (id) {12013if (nodeCache.hasOwnProperty(id)) {12014var cached = nodeCache[id];12015if (cached !== node) {12016("production" !== process.env.NODE_ENV ? invariant(12017!isValid(cached, id),12018'ReactMount: Two valid but unequal nodes with the same `%s`: %s',12019ATTR_NAME, id12020) : invariant(!isValid(cached, id)));1202112022nodeCache[id] = node;12023}12024} else {12025nodeCache[id] = node;12026}12027}1202812029return id;12030}1203112032function internalGetID(node) {12033// If node is something like a window, document, or text node, none of12034// which support attributes or a .getAttribute method, gracefully return12035// the empty string, as if the attribute were missing.12036return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';12037}1203812039/**12040* Sets the React-specific ID of the given node.12041*12042* @param {DOMElement} node The DOM node whose ID will be set.12043* @param {string} id The value of the ID attribute.12044*/12045function setID(node, id) {12046var oldID = internalGetID(node);12047if (oldID !== id) {12048delete nodeCache[oldID];12049}12050node.setAttribute(ATTR_NAME, id);12051nodeCache[id] = node;12052}1205312054/**12055* Finds the node with the supplied React-generated DOM ID.12056*12057* @param {string} id A React-generated DOM ID.12058* @return {DOMElement} DOM node with the suppled `id`.12059* @internal12060*/12061function getNode(id) {12062if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {12063nodeCache[id] = ReactMount.findReactNodeByID(id);12064}12065return nodeCache[id];12066}1206712068/**12069* Finds the node with the supplied public React instance.12070*12071* @param {*} instance A public React instance.12072* @return {?DOMElement} DOM node with the suppled `id`.12073* @internal12074*/12075function getNodeFromInstance(instance) {12076var id = ReactInstanceMap.get(instance)._rootNodeID;12077if (ReactEmptyComponent.isNullComponentID(id)) {12078return null;12079}12080if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {12081nodeCache[id] = ReactMount.findReactNodeByID(id);12082}12083return nodeCache[id];12084}1208512086/**12087* A node is "valid" if it is contained by a currently mounted container.12088*12089* This means that the node does not have to be contained by a document in12090* order to be considered valid.12091*12092* @param {?DOMElement} node The candidate DOM node.12093* @param {string} id The expected ID of the node.12094* @return {boolean} Whether the node is contained by a mounted container.12095*/12096function isValid(node, id) {12097if (node) {12098("production" !== process.env.NODE_ENV ? invariant(12099internalGetID(node) === id,12100'ReactMount: Unexpected modification of `%s`',12101ATTR_NAME12102) : invariant(internalGetID(node) === id));1210312104var container = ReactMount.findReactContainerForID(id);12105if (container && containsNode(container, node)) {12106return true;12107}12108}1210912110return false;12111}1211212113/**12114* Causes the cache to forget about one React-specific ID.12115*12116* @param {string} id The ID to forget.12117*/12118function purgeID(id) {12119delete nodeCache[id];12120}1212112122var deepestNodeSoFar = null;12123function findDeepestCachedAncestorImpl(ancestorID) {12124var ancestor = nodeCache[ancestorID];12125if (ancestor && isValid(ancestor, ancestorID)) {12126deepestNodeSoFar = ancestor;12127} else {12128// This node isn't populated in the cache, so presumably none of its12129// descendants are. Break out of the loop.12130return false;12131}12132}1213312134/**12135* Return the deepest cached node whose ID is a prefix of `targetID`.12136*/12137function findDeepestCachedAncestor(targetID) {12138deepestNodeSoFar = null;12139ReactInstanceHandles.traverseAncestors(12140targetID,12141findDeepestCachedAncestorImpl12142);1214312144var foundNode = deepestNodeSoFar;12145deepestNodeSoFar = null;12146return foundNode;12147}1214812149/**12150* Mounts this component and inserts it into the DOM.12151*12152* @param {ReactComponent} componentInstance The instance to mount.12153* @param {string} rootID DOM ID of the root node.12154* @param {DOMElement} container DOM element to mount into.12155* @param {ReactReconcileTransaction} transaction12156* @param {boolean} shouldReuseMarkup If true, do not insert markup12157*/12158function mountComponentIntoNode(12159componentInstance,12160rootID,12161container,12162transaction,12163shouldReuseMarkup) {12164var markup = ReactReconciler.mountComponent(12165componentInstance, rootID, transaction, emptyObject12166);12167componentInstance._isTopLevel = true;12168ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup);12169}1217012171/**12172* Batched mount.12173*12174* @param {ReactComponent} componentInstance The instance to mount.12175* @param {string} rootID DOM ID of the root node.12176* @param {DOMElement} container DOM element to mount into.12177* @param {boolean} shouldReuseMarkup If true, do not insert markup12178*/12179function batchedMountComponentIntoNode(12180componentInstance,12181rootID,12182container,12183shouldReuseMarkup) {12184var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();12185transaction.perform(12186mountComponentIntoNode,12187null,12188componentInstance,12189rootID,12190container,12191transaction,12192shouldReuseMarkup12193);12194ReactUpdates.ReactReconcileTransaction.release(transaction);12195}1219612197/**12198* Mounting is the process of initializing a React component by creating its12199* representative DOM elements and inserting them into a supplied `container`.12200* Any prior content inside `container` is destroyed in the process.12201*12202* ReactMount.render(12203* component,12204* document.getElementById('container')12205* );12206*12207* <div id="container"> <-- Supplied `container`.12208* <div data-reactid=".3"> <-- Rendered reactRoot of React12209* // ... component.12210* </div>12211* </div>12212*12213* Inside of `container`, the first element rendered is the "reactRoot".12214*/12215var ReactMount = {12216/** Exposed for debugging purposes **/12217_instancesByReactRootID: instancesByReactRootID,1221812219/**12220* This is a hook provided to support rendering React components while12221* ensuring that the apparent scroll position of its `container` does not12222* change.12223*12224* @param {DOMElement} container The `container` being rendered into.12225* @param {function} renderCallback This must be called once to do the render.12226*/12227scrollMonitor: function(container, renderCallback) {12228renderCallback();12229},1223012231/**12232* Take a component that's already mounted into the DOM and replace its props12233* @param {ReactComponent} prevComponent component instance already in the DOM12234* @param {ReactElement} nextElement component instance to render12235* @param {DOMElement} container container to render into12236* @param {?function} callback function triggered on completion12237*/12238_updateRootComponent: function(12239prevComponent,12240nextElement,12241container,12242callback) {12243if ("production" !== process.env.NODE_ENV) {12244ReactElementValidator.checkAndWarnForMutatedProps(nextElement);12245}1224612247ReactMount.scrollMonitor(container, function() {12248ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);12249if (callback) {12250ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);12251}12252});1225312254if ("production" !== process.env.NODE_ENV) {12255// Record the root element in case it later gets transplanted.12256rootElementsByReactRootID[getReactRootID(container)] =12257getReactRootElementInContainer(container);12258}1225912260return prevComponent;12261},1226212263/**12264* Register a component into the instance map and starts scroll value12265* monitoring12266* @param {ReactComponent} nextComponent component instance to render12267* @param {DOMElement} container container to render into12268* @return {string} reactRoot ID prefix12269*/12270_registerComponent: function(nextComponent, container) {12271("production" !== process.env.NODE_ENV ? invariant(12272container && (12273(container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE)12274),12275'_registerComponent(...): Target container is not a DOM element.'12276) : invariant(container && (12277(container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE)12278)));1227912280ReactBrowserEventEmitter.ensureScrollValueMonitoring();1228112282var reactRootID = ReactMount.registerContainer(container);12283instancesByReactRootID[reactRootID] = nextComponent;12284return reactRootID;12285},1228612287/**12288* Render a new component into the DOM.12289* @param {ReactElement} nextElement element to render12290* @param {DOMElement} container container to render into12291* @param {boolean} shouldReuseMarkup if we should skip the markup insertion12292* @return {ReactComponent} nextComponent12293*/12294_renderNewRootComponent: function(12295nextElement,12296container,12297shouldReuseMarkup12298) {12299// Various parts of our code (such as ReactCompositeComponent's12300// _renderValidatedComponent) assume that calls to render aren't nested;12301// verify that that's the case.12302("production" !== process.env.NODE_ENV ? warning(12303ReactCurrentOwner.current == null,12304'_renderNewRootComponent(): Render methods should be a pure function ' +12305'of props and state; triggering nested component updates from ' +12306'render is not allowed. If necessary, trigger nested updates in ' +12307'componentDidUpdate.'12308) : null);1230912310var componentInstance = instantiateReactComponent(nextElement, null);12311var reactRootID = ReactMount._registerComponent(12312componentInstance,12313container12314);1231512316// The initial render is synchronous but any updates that happen during12317// rendering, in componentWillMount or componentDidMount, will be batched12318// according to the current batching strategy.1231912320ReactUpdates.batchedUpdates(12321batchedMountComponentIntoNode,12322componentInstance,12323reactRootID,12324container,12325shouldReuseMarkup12326);1232712328if ("production" !== process.env.NODE_ENV) {12329// Record the root element in case it later gets transplanted.12330rootElementsByReactRootID[reactRootID] =12331getReactRootElementInContainer(container);12332}1233312334return componentInstance;12335},1233612337/**12338* Renders a React component into the DOM in the supplied `container`.12339*12340* If the React component was previously rendered into `container`, this will12341* perform an update on it and only mutate the DOM as necessary to reflect the12342* latest React component.12343*12344* @param {ReactElement} nextElement Component element to render.12345* @param {DOMElement} container DOM element to render into.12346* @param {?function} callback function triggered on completion12347* @return {ReactComponent} Component instance rendered in `container`.12348*/12349render: function(nextElement, container, callback) {12350("production" !== process.env.NODE_ENV ? invariant(12351ReactElement.isValidElement(nextElement),12352'React.render(): Invalid component element.%s',12353(12354typeof nextElement === 'string' ?12355' Instead of passing an element string, make sure to instantiate ' +12356'it by passing it to React.createElement.' :12357typeof nextElement === 'function' ?12358' Instead of passing a component class, make sure to instantiate ' +12359'it by passing it to React.createElement.' :12360// Check if it quacks like an element12361nextElement != null && nextElement.props !== undefined ?12362' This may be caused by unintentionally loading two independent ' +12363'copies of React.' :12364''12365)12366) : invariant(ReactElement.isValidElement(nextElement)));1236712368var prevComponent = instancesByReactRootID[getReactRootID(container)];1236912370if (prevComponent) {12371var prevElement = prevComponent._currentElement;12372if (shouldUpdateReactComponent(prevElement, nextElement)) {12373return ReactMount._updateRootComponent(12374prevComponent,12375nextElement,12376container,12377callback12378).getPublicInstance();12379} else {12380ReactMount.unmountComponentAtNode(container);12381}12382}1238312384var reactRootElement = getReactRootElementInContainer(container);12385var containerHasReactMarkup =12386reactRootElement && ReactMount.isRenderedByReact(reactRootElement);1238712388if ("production" !== process.env.NODE_ENV) {12389if (!containerHasReactMarkup || reactRootElement.nextSibling) {12390var rootElementSibling = reactRootElement;12391while (rootElementSibling) {12392if (ReactMount.isRenderedByReact(rootElementSibling)) {12393("production" !== process.env.NODE_ENV ? warning(12394false,12395'render(): Target node has markup rendered by React, but there ' +12396'are unrelated nodes as well. This is most commonly caused by ' +12397'white-space inserted around server-rendered markup.'12398) : null);12399break;12400}1240112402rootElementSibling = rootElementSibling.nextSibling;12403}12404}12405}1240612407var shouldReuseMarkup = containerHasReactMarkup && !prevComponent;1240812409var component = ReactMount._renderNewRootComponent(12410nextElement,12411container,12412shouldReuseMarkup12413).getPublicInstance();12414if (callback) {12415callback.call(component);12416}12417return component;12418},1241912420/**12421* Constructs a component instance of `constructor` with `initialProps` and12422* renders it into the supplied `container`.12423*12424* @param {function} constructor React component constructor.12425* @param {?object} props Initial props of the component instance.12426* @param {DOMElement} container DOM element to render into.12427* @return {ReactComponent} Component instance rendered in `container`.12428*/12429constructAndRenderComponent: function(constructor, props, container) {12430var element = ReactElement.createElement(constructor, props);12431return ReactMount.render(element, container);12432},1243312434/**12435* Constructs a component instance of `constructor` with `initialProps` and12436* renders it into a container node identified by supplied `id`.12437*12438* @param {function} componentConstructor React component constructor12439* @param {?object} props Initial props of the component instance.12440* @param {string} id ID of the DOM element to render into.12441* @return {ReactComponent} Component instance rendered in the container node.12442*/12443constructAndRenderComponentByID: function(constructor, props, id) {12444var domNode = document.getElementById(id);12445("production" !== process.env.NODE_ENV ? invariant(12446domNode,12447'Tried to get element with id of "%s" but it is not present on the page.',12448id12449) : invariant(domNode));12450return ReactMount.constructAndRenderComponent(constructor, props, domNode);12451},1245212453/**12454* Registers a container node into which React components will be rendered.12455* This also creates the "reactRoot" ID that will be assigned to the element12456* rendered within.12457*12458* @param {DOMElement} container DOM element to register as a container.12459* @return {string} The "reactRoot" ID of elements rendered within.12460*/12461registerContainer: function(container) {12462var reactRootID = getReactRootID(container);12463if (reactRootID) {12464// If one exists, make sure it is a valid "reactRoot" ID.12465reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);12466}12467if (!reactRootID) {12468// No valid "reactRoot" ID found, create one.12469reactRootID = ReactInstanceHandles.createReactRootID();12470}12471containersByReactRootID[reactRootID] = container;12472return reactRootID;12473},1247412475/**12476* Unmounts and destroys the React component rendered in the `container`.12477*12478* @param {DOMElement} container DOM element containing a React component.12479* @return {boolean} True if a component was found in and unmounted from12480* `container`12481*/12482unmountComponentAtNode: function(container) {12483// Various parts of our code (such as ReactCompositeComponent's12484// _renderValidatedComponent) assume that calls to render aren't nested;12485// verify that that's the case. (Strictly speaking, unmounting won't cause a12486// render but we still don't expect to be in a render call here.)12487("production" !== process.env.NODE_ENV ? warning(12488ReactCurrentOwner.current == null,12489'unmountComponentAtNode(): Render methods should be a pure function of ' +12490'props and state; triggering nested component updates from render is ' +12491'not allowed. If necessary, trigger nested updates in ' +12492'componentDidUpdate.'12493) : null);1249412495("production" !== process.env.NODE_ENV ? invariant(12496container && (12497(container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE)12498),12499'unmountComponentAtNode(...): Target container is not a DOM element.'12500) : invariant(container && (12501(container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE)12502)));1250312504var reactRootID = getReactRootID(container);12505var component = instancesByReactRootID[reactRootID];12506if (!component) {12507return false;12508}12509ReactMount.unmountComponentFromNode(component, container);12510delete instancesByReactRootID[reactRootID];12511delete containersByReactRootID[reactRootID];12512if ("production" !== process.env.NODE_ENV) {12513delete rootElementsByReactRootID[reactRootID];12514}12515return true;12516},1251712518/**12519* Unmounts a component and removes it from the DOM.12520*12521* @param {ReactComponent} instance React component instance.12522* @param {DOMElement} container DOM element to unmount from.12523* @final12524* @internal12525* @see {ReactMount.unmountComponentAtNode}12526*/12527unmountComponentFromNode: function(instance, container) {12528ReactReconciler.unmountComponent(instance);1252912530if (container.nodeType === DOC_NODE_TYPE) {12531container = container.documentElement;12532}1253312534// http://jsperf.com/emptying-a-node12535while (container.lastChild) {12536container.removeChild(container.lastChild);12537}12538},1253912540/**12541* Finds the container DOM element that contains React component to which the12542* supplied DOM `id` belongs.12543*12544* @param {string} id The ID of an element rendered by a React component.12545* @return {?DOMElement} DOM element that contains the `id`.12546*/12547findReactContainerForID: function(id) {12548var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);12549var container = containersByReactRootID[reactRootID];1255012551if ("production" !== process.env.NODE_ENV) {12552var rootElement = rootElementsByReactRootID[reactRootID];12553if (rootElement && rootElement.parentNode !== container) {12554("production" !== process.env.NODE_ENV ? invariant(12555// Call internalGetID here because getID calls isValid which calls12556// findReactContainerForID (this function).12557internalGetID(rootElement) === reactRootID,12558'ReactMount: Root element ID differed from reactRootID.'12559) : invariant(// Call internalGetID here because getID calls isValid which calls12560// findReactContainerForID (this function).12561internalGetID(rootElement) === reactRootID));1256212563var containerChild = container.firstChild;12564if (containerChild &&12565reactRootID === internalGetID(containerChild)) {12566// If the container has a new child with the same ID as the old12567// root element, then rootElementsByReactRootID[reactRootID] is12568// just stale and needs to be updated. The case that deserves a12569// warning is when the container is empty.12570rootElementsByReactRootID[reactRootID] = containerChild;12571} else {12572("production" !== process.env.NODE_ENV ? warning(12573false,12574'ReactMount: Root element has been removed from its original ' +12575'container. New container:', rootElement.parentNode12576) : null);12577}12578}12579}1258012581return container;12582},1258312584/**12585* Finds an element rendered by React with the supplied ID.12586*12587* @param {string} id ID of a DOM node in the React component.12588* @return {DOMElement} Root DOM node of the React component.12589*/12590findReactNodeByID: function(id) {12591var reactRoot = ReactMount.findReactContainerForID(id);12592return ReactMount.findComponentRoot(reactRoot, id);12593},1259412595/**12596* True if the supplied `node` is rendered by React.12597*12598* @param {*} node DOM Element to check.12599* @return {boolean} True if the DOM Element appears to be rendered by React.12600* @internal12601*/12602isRenderedByReact: function(node) {12603if (node.nodeType !== 1) {12604// Not a DOMElement, therefore not a React component12605return false;12606}12607var id = ReactMount.getID(node);12608return id ? id.charAt(0) === SEPARATOR : false;12609},1261012611/**12612* Traverses up the ancestors of the supplied node to find a node that is a12613* DOM representation of a React component.12614*12615* @param {*} node12616* @return {?DOMEventTarget}12617* @internal12618*/12619getFirstReactDOM: function(node) {12620var current = node;12621while (current && current.parentNode !== current) {12622if (ReactMount.isRenderedByReact(current)) {12623return current;12624}12625current = current.parentNode;12626}12627return null;12628},1262912630/**12631* Finds a node with the supplied `targetID` inside of the supplied12632* `ancestorNode`. Exploits the ID naming scheme to perform the search12633* quickly.12634*12635* @param {DOMEventTarget} ancestorNode Search from this root.12636* @pararm {string} targetID ID of the DOM representation of the component.12637* @return {DOMEventTarget} DOM node with the supplied `targetID`.12638* @internal12639*/12640findComponentRoot: function(ancestorNode, targetID) {12641var firstChildren = findComponentRootReusableArray;12642var childIndex = 0;1264312644var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;1264512646firstChildren[0] = deepestAncestor.firstChild;12647firstChildren.length = 1;1264812649while (childIndex < firstChildren.length) {12650var child = firstChildren[childIndex++];12651var targetChild;1265212653while (child) {12654var childID = ReactMount.getID(child);12655if (childID) {12656// Even if we find the node we're looking for, we finish looping12657// through its siblings to ensure they're cached so that we don't have12658// to revisit this node again. Otherwise, we make n^2 calls to getID12659// when visiting the many children of a single node in order.1266012661if (targetID === childID) {12662targetChild = child;12663} else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {12664// If we find a child whose ID is an ancestor of the given ID,12665// then we can be sure that we only want to search the subtree12666// rooted at this child, so we can throw out the rest of the12667// search state.12668firstChildren.length = childIndex = 0;12669firstChildren.push(child.firstChild);12670}1267112672} else {12673// If this child had no ID, then there's a chance that it was12674// injected automatically by the browser, as when a `<table>`12675// element sprouts an extra `<tbody>` child as a side effect of12676// `.innerHTML` parsing. Optimistically continue down this12677// branch, but not before examining the other siblings.12678firstChildren.push(child.firstChild);12679}1268012681child = child.nextSibling;12682}1268312684if (targetChild) {12685// Emptying firstChildren/findComponentRootReusableArray is12686// not necessary for correctness, but it helps the GC reclaim12687// any nodes that were left at the end of the search.12688firstChildren.length = 0;1268912690return targetChild;12691}12692}1269312694firstChildren.length = 0;1269512696("production" !== process.env.NODE_ENV ? invariant(12697false,12698'findComponentRoot(..., %s): Unable to find element. This probably ' +12699'means the DOM was unexpectedly mutated (e.g., by the browser), ' +12700'usually due to forgetting a <tbody> when using tables, nesting tags ' +12701'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' +12702'parent. ' +12703'Try inspecting the child nodes of the element with React ID `%s`.',12704targetID,12705ReactMount.getID(ancestorNode)12706) : invariant(false));12707},1270812709_mountImageIntoNode: function(markup, container, shouldReuseMarkup) {12710("production" !== process.env.NODE_ENV ? invariant(12711container && (12712(container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE)12713),12714'mountComponentIntoNode(...): Target container is not valid.'12715) : invariant(container && (12716(container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE)12717)));1271812719if (shouldReuseMarkup) {12720var rootElement = getReactRootElementInContainer(container);12721if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {12722return;12723} else {12724var checksum = rootElement.getAttribute(12725ReactMarkupChecksum.CHECKSUM_ATTR_NAME12726);12727rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);1272812729var rootMarkup = rootElement.outerHTML;12730rootElement.setAttribute(12731ReactMarkupChecksum.CHECKSUM_ATTR_NAME,12732checksum12733);1273412735var diffIndex = firstDifferenceIndex(markup, rootMarkup);12736var difference = ' (client) ' +12737markup.substring(diffIndex - 20, diffIndex + 20) +12738'\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);1273912740("production" !== process.env.NODE_ENV ? invariant(12741container.nodeType !== DOC_NODE_TYPE,12742'You\'re trying to render a component to the document using ' +12743'server rendering but the checksum was invalid. This usually ' +12744'means you rendered a different component type or props on ' +12745'the client from the one on the server, or your render() ' +12746'methods are impure. React cannot handle this case due to ' +12747'cross-browser quirks by rendering at the document root. You ' +12748'should look for environment dependent code in your components ' +12749'and ensure the props are the same client and server side:\n%s',12750difference12751) : invariant(container.nodeType !== DOC_NODE_TYPE));1275212753if ("production" !== process.env.NODE_ENV) {12754("production" !== process.env.NODE_ENV ? warning(12755false,12756'React attempted to reuse markup in a container but the ' +12757'checksum was invalid. This generally means that you are ' +12758'using server rendering and the markup generated on the ' +12759'server was not what the client was expecting. React injected ' +12760'new markup to compensate which works but you have lost many ' +12761'of the benefits of server rendering. Instead, figure out ' +12762'why the markup being generated is different on the client ' +12763'or server:\n%s',12764difference12765) : null);12766}12767}12768}1276912770("production" !== process.env.NODE_ENV ? invariant(12771container.nodeType !== DOC_NODE_TYPE,12772'You\'re trying to render a component to the document but ' +12773'you didn\'t use server rendering. We can\'t do this ' +12774'without using server rendering due to cross-browser quirks. ' +12775'See React.renderToString() for server rendering.'12776) : invariant(container.nodeType !== DOC_NODE_TYPE));1277712778setInnerHTML(container, markup);12779},1278012781/**12782* React ID utilities.12783*/1278412785getReactRootID: getReactRootID,1278612787getID: getID,1278812789setID: setID,1279012791getNode: getNode,1279212793getNodeFromInstance: getNodeFromInstance,1279412795purgeID: purgeID12796};1279712798ReactPerf.measureMethods(ReactMount, 'ReactMount', {12799_renderNewRootComponent: '_renderNewRootComponent',12800_mountImageIntoNode: '_mountImageIntoNode'12801});1280212803module.exports = ReactMount;128041280512806}).call(this,require("FWaASH"))12807},{"./DOMProperty":10,"./ReactBrowserEventEmitter":31,"./ReactCurrentOwner":40,"./ReactElement":58,"./ReactElementValidator":59,"./ReactEmptyComponent":60,"./ReactInstanceHandles":67,"./ReactInstanceMap":68,"./ReactMarkupChecksum":70,"./ReactPerf":76,"./ReactReconciler":82,"./ReactUpdateQueue":87,"./ReactUpdates":88,"./containsNode":110,"./emptyObject":116,"./getReactRootElementInContainer":130,"./instantiateReactComponent":135,"./invariant":136,"./setInnerHTML":149,"./shouldUpdateReactComponent":152,"./warning":155,"FWaASH":1}],72:[function(require,module,exports){12808/**12809* Copyright 2013-2015, Facebook, Inc.12810* All rights reserved.12811*12812* This source code is licensed under the BSD-style license found in the12813* LICENSE file in the root directory of this source tree. An additional grant12814* of patent rights can be found in the PATENTS file in the same directory.12815*12816* @providesModule ReactMultiChild12817* @typechecks static-only12818*/1281912820'use strict';1282112822var ReactComponentEnvironment = require("./ReactComponentEnvironment");12823var ReactMultiChildUpdateTypes = require("./ReactMultiChildUpdateTypes");1282412825var ReactReconciler = require("./ReactReconciler");12826var ReactChildReconciler = require("./ReactChildReconciler");1282712828/**12829* Updating children of a component may trigger recursive updates. The depth is12830* used to batch recursive updates to render markup more efficiently.12831*12832* @type {number}12833* @private12834*/12835var updateDepth = 0;1283612837/**12838* Queue of update configuration objects.12839*12840* Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.12841*12842* @type {array<object>}12843* @private12844*/12845var updateQueue = [];1284612847/**12848* Queue of markup to be rendered.12849*12850* @type {array<string>}12851* @private12852*/12853var markupQueue = [];1285412855/**12856* Enqueues markup to be rendered and inserted at a supplied index.12857*12858* @param {string} parentID ID of the parent component.12859* @param {string} markup Markup that renders into an element.12860* @param {number} toIndex Destination index.12861* @private12862*/12863function enqueueMarkup(parentID, markup, toIndex) {12864// NOTE: Null values reduce hidden classes.12865updateQueue.push({12866parentID: parentID,12867parentNode: null,12868type: ReactMultiChildUpdateTypes.INSERT_MARKUP,12869markupIndex: markupQueue.push(markup) - 1,12870textContent: null,12871fromIndex: null,12872toIndex: toIndex12873});12874}1287512876/**12877* Enqueues moving an existing element to another index.12878*12879* @param {string} parentID ID of the parent component.12880* @param {number} fromIndex Source index of the existing element.12881* @param {number} toIndex Destination index of the element.12882* @private12883*/12884function enqueueMove(parentID, fromIndex, toIndex) {12885// NOTE: Null values reduce hidden classes.12886updateQueue.push({12887parentID: parentID,12888parentNode: null,12889type: ReactMultiChildUpdateTypes.MOVE_EXISTING,12890markupIndex: null,12891textContent: null,12892fromIndex: fromIndex,12893toIndex: toIndex12894});12895}1289612897/**12898* Enqueues removing an element at an index.12899*12900* @param {string} parentID ID of the parent component.12901* @param {number} fromIndex Index of the element to remove.12902* @private12903*/12904function enqueueRemove(parentID, fromIndex) {12905// NOTE: Null values reduce hidden classes.12906updateQueue.push({12907parentID: parentID,12908parentNode: null,12909type: ReactMultiChildUpdateTypes.REMOVE_NODE,12910markupIndex: null,12911textContent: null,12912fromIndex: fromIndex,12913toIndex: null12914});12915}1291612917/**12918* Enqueues setting the text content.12919*12920* @param {string} parentID ID of the parent component.12921* @param {string} textContent Text content to set.12922* @private12923*/12924function enqueueTextContent(parentID, textContent) {12925// NOTE: Null values reduce hidden classes.12926updateQueue.push({12927parentID: parentID,12928parentNode: null,12929type: ReactMultiChildUpdateTypes.TEXT_CONTENT,12930markupIndex: null,12931textContent: textContent,12932fromIndex: null,12933toIndex: null12934});12935}1293612937/**12938* Processes any enqueued updates.12939*12940* @private12941*/12942function processQueue() {12943if (updateQueue.length) {12944ReactComponentEnvironment.processChildrenUpdates(12945updateQueue,12946markupQueue12947);12948clearQueue();12949}12950}1295112952/**12953* Clears any enqueued updates.12954*12955* @private12956*/12957function clearQueue() {12958updateQueue.length = 0;12959markupQueue.length = 0;12960}1296112962/**12963* ReactMultiChild are capable of reconciling multiple children.12964*12965* @class ReactMultiChild12966* @internal12967*/12968var ReactMultiChild = {1296912970/**12971* Provides common functionality for components that must reconcile multiple12972* children. This is used by `ReactDOMComponent` to mount, update, and12973* unmount child components.12974*12975* @lends {ReactMultiChild.prototype}12976*/12977Mixin: {1297812979/**12980* Generates a "mount image" for each of the supplied children. In the case12981* of `ReactDOMComponent`, a mount image is a string of markup.12982*12983* @param {?object} nestedChildren Nested child maps.12984* @return {array} An array of mounted representations.12985* @internal12986*/12987mountChildren: function(nestedChildren, transaction, context) {12988var children = ReactChildReconciler.instantiateChildren(12989nestedChildren, transaction, context12990);12991this._renderedChildren = children;12992var mountImages = [];12993var index = 0;12994for (var name in children) {12995if (children.hasOwnProperty(name)) {12996var child = children[name];12997// Inlined for performance, see `ReactInstanceHandles.createReactID`.12998var rootID = this._rootNodeID + name;12999var mountImage = ReactReconciler.mountComponent(13000child,13001rootID,13002transaction,13003context13004);13005child._mountIndex = index;13006mountImages.push(mountImage);13007index++;13008}13009}13010return mountImages;13011},1301213013/**13014* Replaces any rendered children with a text content string.13015*13016* @param {string} nextContent String of content.13017* @internal13018*/13019updateTextContent: function(nextContent) {13020updateDepth++;13021var errorThrown = true;13022try {13023var prevChildren = this._renderedChildren;13024// Remove any rendered children.13025ReactChildReconciler.unmountChildren(prevChildren);13026// TODO: The setTextContent operation should be enough13027for (var name in prevChildren) {13028if (prevChildren.hasOwnProperty(name)) {13029this._unmountChildByName(prevChildren[name], name);13030}13031}13032// Set new text content.13033this.setTextContent(nextContent);13034errorThrown = false;13035} finally {13036updateDepth--;13037if (!updateDepth) {13038if (errorThrown) {13039clearQueue();13040} else {13041processQueue();13042}13043}13044}13045},1304613047/**13048* Updates the rendered children with new children.13049*13050* @param {?object} nextNestedChildren Nested child maps.13051* @param {ReactReconcileTransaction} transaction13052* @internal13053*/13054updateChildren: function(nextNestedChildren, transaction, context) {13055updateDepth++;13056var errorThrown = true;13057try {13058this._updateChildren(nextNestedChildren, transaction, context);13059errorThrown = false;13060} finally {13061updateDepth--;13062if (!updateDepth) {13063if (errorThrown) {13064clearQueue();13065} else {13066processQueue();13067}13068}1306913070}13071},1307213073/**13074* Improve performance by isolating this hot code path from the try/catch13075* block in `updateChildren`.13076*13077* @param {?object} nextNestedChildren Nested child maps.13078* @param {ReactReconcileTransaction} transaction13079* @final13080* @protected13081*/13082_updateChildren: function(nextNestedChildren, transaction, context) {13083var prevChildren = this._renderedChildren;13084var nextChildren = ReactChildReconciler.updateChildren(13085prevChildren, nextNestedChildren, transaction, context13086);13087this._renderedChildren = nextChildren;13088if (!nextChildren && !prevChildren) {13089return;13090}13091var name;13092// `nextIndex` will increment for each child in `nextChildren`, but13093// `lastIndex` will be the last index visited in `prevChildren`.13094var lastIndex = 0;13095var nextIndex = 0;13096for (name in nextChildren) {13097if (!nextChildren.hasOwnProperty(name)) {13098continue;13099}13100var prevChild = prevChildren && prevChildren[name];13101var nextChild = nextChildren[name];13102if (prevChild === nextChild) {13103this.moveChild(prevChild, nextIndex, lastIndex);13104lastIndex = Math.max(prevChild._mountIndex, lastIndex);13105prevChild._mountIndex = nextIndex;13106} else {13107if (prevChild) {13108// Update `lastIndex` before `_mountIndex` gets unset by unmounting.13109lastIndex = Math.max(prevChild._mountIndex, lastIndex);13110this._unmountChildByName(prevChild, name);13111}13112// The child must be instantiated before it's mounted.13113this._mountChildByNameAtIndex(13114nextChild, name, nextIndex, transaction, context13115);13116}13117nextIndex++;13118}13119// Remove children that are no longer present.13120for (name in prevChildren) {13121if (prevChildren.hasOwnProperty(name) &&13122!(nextChildren && nextChildren.hasOwnProperty(name))) {13123this._unmountChildByName(prevChildren[name], name);13124}13125}13126},1312713128/**13129* Unmounts all rendered children. This should be used to clean up children13130* when this component is unmounted.13131*13132* @internal13133*/13134unmountChildren: function() {13135var renderedChildren = this._renderedChildren;13136ReactChildReconciler.unmountChildren(renderedChildren);13137this._renderedChildren = null;13138},1313913140/**13141* Moves a child component to the supplied index.13142*13143* @param {ReactComponent} child Component to move.13144* @param {number} toIndex Destination index of the element.13145* @param {number} lastIndex Last index visited of the siblings of `child`.13146* @protected13147*/13148moveChild: function(child, toIndex, lastIndex) {13149// If the index of `child` is less than `lastIndex`, then it needs to13150// be moved. Otherwise, we do not need to move it because a child will be13151// inserted or moved before `child`.13152if (child._mountIndex < lastIndex) {13153enqueueMove(this._rootNodeID, child._mountIndex, toIndex);13154}13155},1315613157/**13158* Creates a child component.13159*13160* @param {ReactComponent} child Component to create.13161* @param {string} mountImage Markup to insert.13162* @protected13163*/13164createChild: function(child, mountImage) {13165enqueueMarkup(this._rootNodeID, mountImage, child._mountIndex);13166},1316713168/**13169* Removes a child component.13170*13171* @param {ReactComponent} child Child to remove.13172* @protected13173*/13174removeChild: function(child) {13175enqueueRemove(this._rootNodeID, child._mountIndex);13176},1317713178/**13179* Sets this text content string.13180*13181* @param {string} textContent Text content to set.13182* @protected13183*/13184setTextContent: function(textContent) {13185enqueueTextContent(this._rootNodeID, textContent);13186},1318713188/**13189* Mounts a child with the supplied name.13190*13191* NOTE: This is part of `updateChildren` and is here for readability.13192*13193* @param {ReactComponent} child Component to mount.13194* @param {string} name Name of the child.13195* @param {number} index Index at which to insert the child.13196* @param {ReactReconcileTransaction} transaction13197* @private13198*/13199_mountChildByNameAtIndex: function(13200child,13201name,13202index,13203transaction,13204context) {13205// Inlined for performance, see `ReactInstanceHandles.createReactID`.13206var rootID = this._rootNodeID + name;13207var mountImage = ReactReconciler.mountComponent(13208child,13209rootID,13210transaction,13211context13212);13213child._mountIndex = index;13214this.createChild(child, mountImage);13215},1321613217/**13218* Unmounts a rendered child by name.13219*13220* NOTE: This is part of `updateChildren` and is here for readability.13221*13222* @param {ReactComponent} child Component to unmount.13223* @param {string} name Name of the child in `this._renderedChildren`.13224* @private13225*/13226_unmountChildByName: function(child, name) {13227this.removeChild(child);13228child._mountIndex = null;13229}1323013231}1323213233};1323413235module.exports = ReactMultiChild;132361323713238},{"./ReactChildReconciler":32,"./ReactComponentEnvironment":37,"./ReactMultiChildUpdateTypes":73,"./ReactReconciler":82}],73:[function(require,module,exports){13239/**13240* Copyright 2013-2015, Facebook, Inc.13241* All rights reserved.13242*13243* This source code is licensed under the BSD-style license found in the13244* LICENSE file in the root directory of this source tree. An additional grant13245* of patent rights can be found in the PATENTS file in the same directory.13246*13247* @providesModule ReactMultiChildUpdateTypes13248*/1324913250'use strict';1325113252var keyMirror = require("./keyMirror");1325313254/**13255* When a component's children are updated, a series of update configuration13256* objects are created in order to batch and serialize the required changes.13257*13258* Enumerates all the possible types of update configurations.13259*13260* @internal13261*/13262var ReactMultiChildUpdateTypes = keyMirror({13263INSERT_MARKUP: null,13264MOVE_EXISTING: null,13265REMOVE_NODE: null,13266TEXT_CONTENT: null13267});1326813269module.exports = ReactMultiChildUpdateTypes;132701327113272},{"./keyMirror":141}],74:[function(require,module,exports){13273(function (process){13274/**13275* Copyright 2014-2015, Facebook, Inc.13276* All rights reserved.13277*13278* This source code is licensed under the BSD-style license found in the13279* LICENSE file in the root directory of this source tree. An additional grant13280* of patent rights can be found in the PATENTS file in the same directory.13281*13282* @providesModule ReactNativeComponent13283*/1328413285'use strict';1328613287var assign = require("./Object.assign");13288var invariant = require("./invariant");1328913290var autoGenerateWrapperClass = null;13291var genericComponentClass = null;13292// This registry keeps track of wrapper classes around native tags13293var tagToComponentClass = {};13294var textComponentClass = null;1329513296var ReactNativeComponentInjection = {13297// This accepts a class that receives the tag string. This is a catch all13298// that can render any kind of tag.13299injectGenericComponentClass: function(componentClass) {13300genericComponentClass = componentClass;13301},13302// This accepts a text component class that takes the text string to be13303// rendered as props.13304injectTextComponentClass: function(componentClass) {13305textComponentClass = componentClass;13306},13307// This accepts a keyed object with classes as values. Each key represents a13308// tag. That particular tag will use this class instead of the generic one.13309injectComponentClasses: function(componentClasses) {13310assign(tagToComponentClass, componentClasses);13311},13312// Temporary hack since we expect DOM refs to behave like composites,13313// for this release.13314injectAutoWrapper: function(wrapperFactory) {13315autoGenerateWrapperClass = wrapperFactory;13316}13317};1331813319/**13320* Get a composite component wrapper class for a specific tag.13321*13322* @param {ReactElement} element The tag for which to get the class.13323* @return {function} The React class constructor function.13324*/13325function getComponentClassForElement(element) {13326if (typeof element.type === 'function') {13327return element.type;13328}13329var tag = element.type;13330var componentClass = tagToComponentClass[tag];13331if (componentClass == null) {13332tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);13333}13334return componentClass;13335}1333613337/**13338* Get a native internal component class for a specific tag.13339*13340* @param {ReactElement} element The element to create.13341* @return {function} The internal class constructor function.13342*/13343function createInternalComponent(element) {13344("production" !== process.env.NODE_ENV ? invariant(13345genericComponentClass,13346'There is no registered component for the tag %s',13347element.type13348) : invariant(genericComponentClass));13349return new genericComponentClass(element.type, element.props);13350}1335113352/**13353* @param {ReactText} text13354* @return {ReactComponent}13355*/13356function createInstanceForText(text) {13357return new textComponentClass(text);13358}1335913360/**13361* @param {ReactComponent} component13362* @return {boolean}13363*/13364function isTextComponent(component) {13365return component instanceof textComponentClass;13366}1336713368var ReactNativeComponent = {13369getComponentClassForElement: getComponentClassForElement,13370createInternalComponent: createInternalComponent,13371createInstanceForText: createInstanceForText,13372isTextComponent: isTextComponent,13373injection: ReactNativeComponentInjection13374};1337513376module.exports = ReactNativeComponent;133771337813379}).call(this,require("FWaASH"))13380},{"./Object.assign":27,"./invariant":136,"FWaASH":1}],75:[function(require,module,exports){13381(function (process){13382/**13383* Copyright 2013-2015, Facebook, Inc.13384* All rights reserved.13385*13386* This source code is licensed under the BSD-style license found in the13387* LICENSE file in the root directory of this source tree. An additional grant13388* of patent rights can be found in the PATENTS file in the same directory.13389*13390* @providesModule ReactOwner13391*/1339213393'use strict';1339413395var invariant = require("./invariant");1339613397/**13398* ReactOwners are capable of storing references to owned components.13399*13400* All components are capable of //being// referenced by owner components, but13401* only ReactOwner components are capable of //referencing// owned components.13402* The named reference is known as a "ref".13403*13404* Refs are available when mounted and updated during reconciliation.13405*13406* var MyComponent = React.createClass({13407* render: function() {13408* return (13409* <div onClick={this.handleClick}>13410* <CustomComponent ref="custom" />13411* </div>13412* );13413* },13414* handleClick: function() {13415* this.refs.custom.handleClick();13416* },13417* componentDidMount: function() {13418* this.refs.custom.initialize();13419* }13420* });13421*13422* Refs should rarely be used. When refs are used, they should only be done to13423* control data that is not handled by React's data flow.13424*13425* @class ReactOwner13426*/13427var ReactOwner = {1342813429/**13430* @param {?object} object13431* @return {boolean} True if `object` is a valid owner.13432* @final13433*/13434isValidOwner: function(object) {13435return !!(13436(object &&13437typeof object.attachRef === 'function' && typeof object.detachRef === 'function')13438);13439},1344013441/**13442* Adds a component by ref to an owner component.13443*13444* @param {ReactComponent} component Component to reference.13445* @param {string} ref Name by which to refer to the component.13446* @param {ReactOwner} owner Component on which to record the ref.13447* @final13448* @internal13449*/13450addComponentAsRefTo: function(component, ref, owner) {13451("production" !== process.env.NODE_ENV ? invariant(13452ReactOwner.isValidOwner(owner),13453'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' +13454'usually means that you\'re trying to add a ref to a component that ' +13455'doesn\'t have an owner (that is, was not created inside of another ' +13456'component\'s `render` method). Try rendering this component inside of ' +13457'a new top-level component which will hold the ref.'13458) : invariant(ReactOwner.isValidOwner(owner)));13459owner.attachRef(ref, component);13460},1346113462/**13463* Removes a component by ref from an owner component.13464*13465* @param {ReactComponent} component Component to dereference.13466* @param {string} ref Name of the ref to remove.13467* @param {ReactOwner} owner Component on which the ref is recorded.13468* @final13469* @internal13470*/13471removeComponentAsRefFrom: function(component, ref, owner) {13472("production" !== process.env.NODE_ENV ? invariant(13473ReactOwner.isValidOwner(owner),13474'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' +13475'usually means that you\'re trying to remove a ref to a component that ' +13476'doesn\'t have an owner (that is, was not created inside of another ' +13477'component\'s `render` method). Try rendering this component inside of ' +13478'a new top-level component which will hold the ref.'13479) : invariant(ReactOwner.isValidOwner(owner)));13480// Check that `component` is still the current ref because we do not want to13481// detach the ref if another component stole it.13482if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {13483owner.detachRef(ref);13484}13485}1348613487};1348813489module.exports = ReactOwner;134901349113492}).call(this,require("FWaASH"))13493},{"./invariant":136,"FWaASH":1}],76:[function(require,module,exports){13494(function (process){13495/**13496* Copyright 2013-2015, Facebook, Inc.13497* All rights reserved.13498*13499* This source code is licensed under the BSD-style license found in the13500* LICENSE file in the root directory of this source tree. An additional grant13501* of patent rights can be found in the PATENTS file in the same directory.13502*13503* @providesModule ReactPerf13504* @typechecks static-only13505*/1350613507'use strict';1350813509/**13510* ReactPerf is a general AOP system designed to measure performance. This13511* module only has the hooks: see ReactDefaultPerf for the analysis tool.13512*/13513var ReactPerf = {13514/**13515* Boolean to enable/disable measurement. Set to false by default to prevent13516* accidental logging and perf loss.13517*/13518enableMeasure: false,1351913520/**13521* Holds onto the measure function in use. By default, don't measure13522* anything, but we'll override this if we inject a measure function.13523*/13524storedMeasure: _noMeasure,1352513526/**13527* @param {object} object13528* @param {string} objectName13529* @param {object<string>} methodNames13530*/13531measureMethods: function(object, objectName, methodNames) {13532if ("production" !== process.env.NODE_ENV) {13533for (var key in methodNames) {13534if (!methodNames.hasOwnProperty(key)) {13535continue;13536}13537object[key] = ReactPerf.measure(13538objectName,13539methodNames[key],13540object[key]13541);13542}13543}13544},1354513546/**13547* Use this to wrap methods you want to measure. Zero overhead in production.13548*13549* @param {string} objName13550* @param {string} fnName13551* @param {function} func13552* @return {function}13553*/13554measure: function(objName, fnName, func) {13555if ("production" !== process.env.NODE_ENV) {13556var measuredFunc = null;13557var wrapper = function() {13558if (ReactPerf.enableMeasure) {13559if (!measuredFunc) {13560measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);13561}13562return measuredFunc.apply(this, arguments);13563}13564return func.apply(this, arguments);13565};13566wrapper.displayName = objName + '_' + fnName;13567return wrapper;13568}13569return func;13570},1357113572injection: {13573/**13574* @param {function} measure13575*/13576injectMeasure: function(measure) {13577ReactPerf.storedMeasure = measure;13578}13579}13580};1358113582/**13583* Simply passes through the measured function, without measuring it.13584*13585* @param {string} objName13586* @param {string} fnName13587* @param {function} func13588* @return {function}13589*/13590function _noMeasure(objName, fnName, func) {13591return func;13592}1359313594module.exports = ReactPerf;135951359613597}).call(this,require("FWaASH"))13598},{"FWaASH":1}],77:[function(require,module,exports){13599(function (process){13600/**13601* Copyright 2013-2015, Facebook, Inc.13602* All rights reserved.13603*13604* This source code is licensed under the BSD-style license found in the13605* LICENSE file in the root directory of this source tree. An additional grant13606* of patent rights can be found in the PATENTS file in the same directory.13607*13608* @providesModule ReactPropTypeLocationNames13609*/1361013611'use strict';1361213613var ReactPropTypeLocationNames = {};1361413615if ("production" !== process.env.NODE_ENV) {13616ReactPropTypeLocationNames = {13617prop: 'prop',13618context: 'context',13619childContext: 'child context'13620};13621}1362213623module.exports = ReactPropTypeLocationNames;136241362513626}).call(this,require("FWaASH"))13627},{"FWaASH":1}],78:[function(require,module,exports){13628/**13629* Copyright 2013-2015, Facebook, Inc.13630* All rights reserved.13631*13632* This source code is licensed under the BSD-style license found in the13633* LICENSE file in the root directory of this source tree. An additional grant13634* of patent rights can be found in the PATENTS file in the same directory.13635*13636* @providesModule ReactPropTypeLocations13637*/1363813639'use strict';1364013641var keyMirror = require("./keyMirror");1364213643var ReactPropTypeLocations = keyMirror({13644prop: null,13645context: null,13646childContext: null13647});1364813649module.exports = ReactPropTypeLocations;136501365113652},{"./keyMirror":141}],79:[function(require,module,exports){13653/**13654* Copyright 2013-2015, Facebook, Inc.13655* All rights reserved.13656*13657* This source code is licensed under the BSD-style license found in the13658* LICENSE file in the root directory of this source tree. An additional grant13659* of patent rights can be found in the PATENTS file in the same directory.13660*13661* @providesModule ReactPropTypes13662*/1366313664'use strict';1366513666var ReactElement = require("./ReactElement");13667var ReactFragment = require("./ReactFragment");13668var ReactPropTypeLocationNames = require("./ReactPropTypeLocationNames");1366913670var emptyFunction = require("./emptyFunction");1367113672/**13673* Collection of methods that allow declaration and validation of props that are13674* supplied to React components. Example usage:13675*13676* var Props = require('ReactPropTypes');13677* var MyArticle = React.createClass({13678* propTypes: {13679* // An optional string prop named "description".13680* description: Props.string,13681*13682* // A required enum prop named "category".13683* category: Props.oneOf(['News','Photos']).isRequired,13684*13685* // A prop named "dialog" that requires an instance of Dialog.13686* dialog: Props.instanceOf(Dialog).isRequired13687* },13688* render: function() { ... }13689* });13690*13691* A more formal specification of how these methods are used:13692*13693* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)13694* decl := ReactPropTypes.{type}(.isRequired)?13695*13696* Each and every declaration produces a function with the same signature. This13697* allows the creation of custom validation functions. For example:13698*13699* var MyLink = React.createClass({13700* propTypes: {13701* // An optional string or URI prop named "href".13702* href: function(props, propName, componentName) {13703* var propValue = props[propName];13704* if (propValue != null && typeof propValue !== 'string' &&13705* !(propValue instanceof URI)) {13706* return new Error(13707* 'Expected a string or an URI for ' + propName + ' in ' +13708* componentName13709* );13710* }13711* }13712* },13713* render: function() {...}13714* });13715*13716* @internal13717*/1371813719var ANONYMOUS = '<<anonymous>>';1372013721var elementTypeChecker = createElementTypeChecker();13722var nodeTypeChecker = createNodeChecker();1372313724var ReactPropTypes = {13725array: createPrimitiveTypeChecker('array'),13726bool: createPrimitiveTypeChecker('boolean'),13727func: createPrimitiveTypeChecker('function'),13728number: createPrimitiveTypeChecker('number'),13729object: createPrimitiveTypeChecker('object'),13730string: createPrimitiveTypeChecker('string'),1373113732any: createAnyTypeChecker(),13733arrayOf: createArrayOfTypeChecker,13734element: elementTypeChecker,13735instanceOf: createInstanceTypeChecker,13736node: nodeTypeChecker,13737objectOf: createObjectOfTypeChecker,13738oneOf: createEnumTypeChecker,13739oneOfType: createUnionTypeChecker,13740shape: createShapeTypeChecker13741};1374213743function createChainableTypeChecker(validate) {13744function checkType(isRequired, props, propName, componentName, location) {13745componentName = componentName || ANONYMOUS;13746if (props[propName] == null) {13747var locationName = ReactPropTypeLocationNames[location];13748if (isRequired) {13749return new Error(13750("Required " + locationName + " `" + propName + "` was not specified in ") +13751("`" + componentName + "`.")13752);13753}13754return null;13755} else {13756return validate(props, propName, componentName, location);13757}13758}1375913760var chainedCheckType = checkType.bind(null, false);13761chainedCheckType.isRequired = checkType.bind(null, true);1376213763return chainedCheckType;13764}1376513766function createPrimitiveTypeChecker(expectedType) {13767function validate(props, propName, componentName, location) {13768var propValue = props[propName];13769var propType = getPropType(propValue);13770if (propType !== expectedType) {13771var locationName = ReactPropTypeLocationNames[location];13772// `propValue` being instance of, say, date/regexp, pass the 'object'13773// check, but we can offer a more precise error message here rather than13774// 'of type `object`'.13775var preciseType = getPreciseType(propValue);1377613777return new Error(13778("Invalid " + locationName + " `" + propName + "` of type `" + preciseType + "` ") +13779("supplied to `" + componentName + "`, expected `" + expectedType + "`.")13780);13781}13782return null;13783}13784return createChainableTypeChecker(validate);13785}1378613787function createAnyTypeChecker() {13788return createChainableTypeChecker(emptyFunction.thatReturns(null));13789}1379013791function createArrayOfTypeChecker(typeChecker) {13792function validate(props, propName, componentName, location) {13793var propValue = props[propName];13794if (!Array.isArray(propValue)) {13795var locationName = ReactPropTypeLocationNames[location];13796var propType = getPropType(propValue);13797return new Error(13798("Invalid " + locationName + " `" + propName + "` of type ") +13799("`" + propType + "` supplied to `" + componentName + "`, expected an array.")13800);13801}13802for (var i = 0; i < propValue.length; i++) {13803var error = typeChecker(propValue, i, componentName, location);13804if (error instanceof Error) {13805return error;13806}13807}13808return null;13809}13810return createChainableTypeChecker(validate);13811}1381213813function createElementTypeChecker() {13814function validate(props, propName, componentName, location) {13815if (!ReactElement.isValidElement(props[propName])) {13816var locationName = ReactPropTypeLocationNames[location];13817return new Error(13818("Invalid " + locationName + " `" + propName + "` supplied to ") +13819("`" + componentName + "`, expected a ReactElement.")13820);13821}13822return null;13823}13824return createChainableTypeChecker(validate);13825}1382613827function createInstanceTypeChecker(expectedClass) {13828function validate(props, propName, componentName, location) {13829if (!(props[propName] instanceof expectedClass)) {13830var locationName = ReactPropTypeLocationNames[location];13831var expectedClassName = expectedClass.name || ANONYMOUS;13832return new Error(13833("Invalid " + locationName + " `" + propName + "` supplied to ") +13834("`" + componentName + "`, expected instance of `" + expectedClassName + "`.")13835);13836}13837return null;13838}13839return createChainableTypeChecker(validate);13840}1384113842function createEnumTypeChecker(expectedValues) {13843function validate(props, propName, componentName, location) {13844var propValue = props[propName];13845for (var i = 0; i < expectedValues.length; i++) {13846if (propValue === expectedValues[i]) {13847return null;13848}13849}1385013851var locationName = ReactPropTypeLocationNames[location];13852var valuesString = JSON.stringify(expectedValues);13853return new Error(13854("Invalid " + locationName + " `" + propName + "` of value `" + propValue + "` ") +13855("supplied to `" + componentName + "`, expected one of " + valuesString + ".")13856);13857}13858return createChainableTypeChecker(validate);13859}1386013861function createObjectOfTypeChecker(typeChecker) {13862function validate(props, propName, componentName, location) {13863var propValue = props[propName];13864var propType = getPropType(propValue);13865if (propType !== 'object') {13866var locationName = ReactPropTypeLocationNames[location];13867return new Error(13868("Invalid " + locationName + " `" + propName + "` of type ") +13869("`" + propType + "` supplied to `" + componentName + "`, expected an object.")13870);13871}13872for (var key in propValue) {13873if (propValue.hasOwnProperty(key)) {13874var error = typeChecker(propValue, key, componentName, location);13875if (error instanceof Error) {13876return error;13877}13878}13879}13880return null;13881}13882return createChainableTypeChecker(validate);13883}1388413885function createUnionTypeChecker(arrayOfTypeCheckers) {13886function validate(props, propName, componentName, location) {13887for (var i = 0; i < arrayOfTypeCheckers.length; i++) {13888var checker = arrayOfTypeCheckers[i];13889if (checker(props, propName, componentName, location) == null) {13890return null;13891}13892}1389313894var locationName = ReactPropTypeLocationNames[location];13895return new Error(13896("Invalid " + locationName + " `" + propName + "` supplied to ") +13897("`" + componentName + "`.")13898);13899}13900return createChainableTypeChecker(validate);13901}1390213903function createNodeChecker() {13904function validate(props, propName, componentName, location) {13905if (!isNode(props[propName])) {13906var locationName = ReactPropTypeLocationNames[location];13907return new Error(13908("Invalid " + locationName + " `" + propName + "` supplied to ") +13909("`" + componentName + "`, expected a ReactNode.")13910);13911}13912return null;13913}13914return createChainableTypeChecker(validate);13915}1391613917function createShapeTypeChecker(shapeTypes) {13918function validate(props, propName, componentName, location) {13919var propValue = props[propName];13920var propType = getPropType(propValue);13921if (propType !== 'object') {13922var locationName = ReactPropTypeLocationNames[location];13923return new Error(13924("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` ") +13925("supplied to `" + componentName + "`, expected `object`.")13926);13927}13928for (var key in shapeTypes) {13929var checker = shapeTypes[key];13930if (!checker) {13931continue;13932}13933var error = checker(propValue, key, componentName, location);13934if (error) {13935return error;13936}13937}13938return null;13939}13940return createChainableTypeChecker(validate);13941}1394213943function isNode(propValue) {13944switch (typeof propValue) {13945case 'number':13946case 'string':13947return true;13948case 'boolean':13949return !propValue;13950case 'object':13951if (Array.isArray(propValue)) {13952return propValue.every(isNode);13953}13954if (ReactElement.isValidElement(propValue)) {13955return true;13956}13957propValue = ReactFragment.extractIfFragment(propValue);13958for (var k in propValue) {13959if (!isNode(propValue[k])) {13960return false;13961}13962}13963return true;13964default:13965return false;13966}13967}1396813969// Equivalent of `typeof` but with special handling for array and regexp.13970function getPropType(propValue) {13971var propType = typeof propValue;13972if (Array.isArray(propValue)) {13973return 'array';13974}13975if (propValue instanceof RegExp) {13976// Old webkits (at least until Android 4.0) return 'function' rather than13977// 'object' for typeof a RegExp. We'll normalize this here so that /bla/13978// passes PropTypes.object.13979return 'object';13980}13981return propType;13982}1398313984// This handles more types than `getPropType`. Only used for error messages.13985// See `createPrimitiveTypeChecker`.13986function getPreciseType(propValue) {13987var propType = getPropType(propValue);13988if (propType === 'object') {13989if (propValue instanceof Date) {13990return 'date';13991} else if (propValue instanceof RegExp) {13992return 'regexp';13993}13994}13995return propType;13996}1399713998module.exports = ReactPropTypes;139991400014001},{"./ReactElement":58,"./ReactFragment":64,"./ReactPropTypeLocationNames":77,"./emptyFunction":115}],80:[function(require,module,exports){14002/**14003* Copyright 2013-2015, Facebook, Inc.14004* All rights reserved.14005*14006* This source code is licensed under the BSD-style license found in the14007* LICENSE file in the root directory of this source tree. An additional grant14008* of patent rights can be found in the PATENTS file in the same directory.14009*14010* @providesModule ReactPutListenerQueue14011*/1401214013'use strict';1401414015var PooledClass = require("./PooledClass");14016var ReactBrowserEventEmitter = require("./ReactBrowserEventEmitter");1401714018var assign = require("./Object.assign");1401914020function ReactPutListenerQueue() {14021this.listenersToPut = [];14022}1402314024assign(ReactPutListenerQueue.prototype, {14025enqueuePutListener: function(rootNodeID, propKey, propValue) {14026this.listenersToPut.push({14027rootNodeID: rootNodeID,14028propKey: propKey,14029propValue: propValue14030});14031},1403214033putListeners: function() {14034for (var i = 0; i < this.listenersToPut.length; i++) {14035var listenerToPut = this.listenersToPut[i];14036ReactBrowserEventEmitter.putListener(14037listenerToPut.rootNodeID,14038listenerToPut.propKey,14039listenerToPut.propValue14040);14041}14042},1404314044reset: function() {14045this.listenersToPut.length = 0;14046},1404714048destructor: function() {14049this.reset();14050}14051});1405214053PooledClass.addPoolingTo(ReactPutListenerQueue);1405414055module.exports = ReactPutListenerQueue;140561405714058},{"./Object.assign":27,"./PooledClass":28,"./ReactBrowserEventEmitter":31}],81:[function(require,module,exports){14059/**14060* Copyright 2013-2015, Facebook, Inc.14061* All rights reserved.14062*14063* This source code is licensed under the BSD-style license found in the14064* LICENSE file in the root directory of this source tree. An additional grant14065* of patent rights can be found in the PATENTS file in the same directory.14066*14067* @providesModule ReactReconcileTransaction14068* @typechecks static-only14069*/1407014071'use strict';1407214073var CallbackQueue = require("./CallbackQueue");14074var PooledClass = require("./PooledClass");14075var ReactBrowserEventEmitter = require("./ReactBrowserEventEmitter");14076var ReactInputSelection = require("./ReactInputSelection");14077var ReactPutListenerQueue = require("./ReactPutListenerQueue");14078var Transaction = require("./Transaction");1407914080var assign = require("./Object.assign");1408114082/**14083* Ensures that, when possible, the selection range (currently selected text14084* input) is not disturbed by performing the transaction.14085*/14086var SELECTION_RESTORATION = {14087/**14088* @return {Selection} Selection information.14089*/14090initialize: ReactInputSelection.getSelectionInformation,14091/**14092* @param {Selection} sel Selection information returned from `initialize`.14093*/14094close: ReactInputSelection.restoreSelection14095};1409614097/**14098* Suppresses events (blur/focus) that could be inadvertently dispatched due to14099* high level DOM manipulations (like temporarily removing a text input from the14100* DOM).14101*/14102var EVENT_SUPPRESSION = {14103/**14104* @return {boolean} The enabled status of `ReactBrowserEventEmitter` before14105* the reconciliation.14106*/14107initialize: function() {14108var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();14109ReactBrowserEventEmitter.setEnabled(false);14110return currentlyEnabled;14111},1411214113/**14114* @param {boolean} previouslyEnabled Enabled status of14115* `ReactBrowserEventEmitter` before the reconciliation occured. `close`14116* restores the previous value.14117*/14118close: function(previouslyEnabled) {14119ReactBrowserEventEmitter.setEnabled(previouslyEnabled);14120}14121};1412214123/**14124* Provides a queue for collecting `componentDidMount` and14125* `componentDidUpdate` callbacks during the the transaction.14126*/14127var ON_DOM_READY_QUEUEING = {14128/**14129* Initializes the internal `onDOMReady` queue.14130*/14131initialize: function() {14132this.reactMountReady.reset();14133},1413414135/**14136* After DOM is flushed, invoke all registered `onDOMReady` callbacks.14137*/14138close: function() {14139this.reactMountReady.notifyAll();14140}14141};1414214143var PUT_LISTENER_QUEUEING = {14144initialize: function() {14145this.putListenerQueue.reset();14146},1414714148close: function() {14149this.putListenerQueue.putListeners();14150}14151};1415214153/**14154* Executed within the scope of the `Transaction` instance. Consider these as14155* being member methods, but with an implied ordering while being isolated from14156* each other.14157*/14158var TRANSACTION_WRAPPERS = [14159PUT_LISTENER_QUEUEING,14160SELECTION_RESTORATION,14161EVENT_SUPPRESSION,14162ON_DOM_READY_QUEUEING14163];1416414165/**14166* Currently:14167* - The order that these are listed in the transaction is critical:14168* - Suppresses events.14169* - Restores selection range.14170*14171* Future:14172* - Restore document/overflow scroll positions that were unintentionally14173* modified via DOM insertions above the top viewport boundary.14174* - Implement/integrate with customized constraint based layout system and keep14175* track of which dimensions must be remeasured.14176*14177* @class ReactReconcileTransaction14178*/14179function ReactReconcileTransaction() {14180this.reinitializeTransaction();14181// Only server-side rendering really needs this option (see14182// `ReactServerRendering`), but server-side uses14183// `ReactServerRenderingTransaction` instead. This option is here so that it's14184// accessible and defaults to false when `ReactDOMComponent` and14185// `ReactTextComponent` checks it in `mountComponent`.`14186this.renderToStaticMarkup = false;14187this.reactMountReady = CallbackQueue.getPooled(null);14188this.putListenerQueue = ReactPutListenerQueue.getPooled();14189}1419014191var Mixin = {14192/**14193* @see Transaction14194* @abstract14195* @final14196* @return {array<object>} List of operation wrap proceedures.14197* TODO: convert to array<TransactionWrapper>14198*/14199getTransactionWrappers: function() {14200return TRANSACTION_WRAPPERS;14201},1420214203/**14204* @return {object} The queue to collect `onDOMReady` callbacks with.14205*/14206getReactMountReady: function() {14207return this.reactMountReady;14208},1420914210getPutListenerQueue: function() {14211return this.putListenerQueue;14212},1421314214/**14215* `PooledClass` looks for this, and will invoke this before allowing this14216* instance to be resused.14217*/14218destructor: function() {14219CallbackQueue.release(this.reactMountReady);14220this.reactMountReady = null;1422114222ReactPutListenerQueue.release(this.putListenerQueue);14223this.putListenerQueue = null;14224}14225};142261422714228assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);1422914230PooledClass.addPoolingTo(ReactReconcileTransaction);1423114232module.exports = ReactReconcileTransaction;142331423414235},{"./CallbackQueue":6,"./Object.assign":27,"./PooledClass":28,"./ReactBrowserEventEmitter":31,"./ReactInputSelection":66,"./ReactPutListenerQueue":80,"./Transaction":104}],82:[function(require,module,exports){14236(function (process){14237/**14238* Copyright 2013-2015, Facebook, Inc.14239* All rights reserved.14240*14241* This source code is licensed under the BSD-style license found in the14242* LICENSE file in the root directory of this source tree. An additional grant14243* of patent rights can be found in the PATENTS file in the same directory.14244*14245* @providesModule ReactReconciler14246*/1424714248'use strict';1424914250var ReactRef = require("./ReactRef");14251var ReactElementValidator = require("./ReactElementValidator");1425214253/**14254* Helper to call ReactRef.attachRefs with this composite component, split out14255* to avoid allocations in the transaction mount-ready queue.14256*/14257function attachRefs() {14258ReactRef.attachRefs(this, this._currentElement);14259}1426014261var ReactReconciler = {1426214263/**14264* Initializes the component, renders markup, and registers event listeners.14265*14266* @param {ReactComponent} internalInstance14267* @param {string} rootID DOM ID of the root node.14268* @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction14269* @return {?string} Rendered markup to be inserted into the DOM.14270* @final14271* @internal14272*/14273mountComponent: function(internalInstance, rootID, transaction, context) {14274var markup = internalInstance.mountComponent(rootID, transaction, context);14275if ("production" !== process.env.NODE_ENV) {14276ReactElementValidator.checkAndWarnForMutatedProps(14277internalInstance._currentElement14278);14279}14280transaction.getReactMountReady().enqueue(attachRefs, internalInstance);14281return markup;14282},1428314284/**14285* Releases any resources allocated by `mountComponent`.14286*14287* @final14288* @internal14289*/14290unmountComponent: function(internalInstance) {14291ReactRef.detachRefs(internalInstance, internalInstance._currentElement);14292internalInstance.unmountComponent();14293},1429414295/**14296* Update a component using a new element.14297*14298* @param {ReactComponent} internalInstance14299* @param {ReactElement} nextElement14300* @param {ReactReconcileTransaction} transaction14301* @param {object} context14302* @internal14303*/14304receiveComponent: function(14305internalInstance, nextElement, transaction, context14306) {14307var prevElement = internalInstance._currentElement;1430814309if (nextElement === prevElement && nextElement._owner != null) {14310// Since elements are immutable after the owner is rendered,14311// we can do a cheap identity compare here to determine if this is a14312// superfluous reconcile. It's possible for state to be mutable but such14313// change should trigger an update of the owner which would recreate14314// the element. We explicitly check for the existence of an owner since14315// it's possible for an element created outside a composite to be14316// deeply mutated and reused.14317return;14318}1431914320if ("production" !== process.env.NODE_ENV) {14321ReactElementValidator.checkAndWarnForMutatedProps(nextElement);14322}1432314324var refsChanged = ReactRef.shouldUpdateRefs(14325prevElement,14326nextElement14327);1432814329if (refsChanged) {14330ReactRef.detachRefs(internalInstance, prevElement);14331}1433214333internalInstance.receiveComponent(nextElement, transaction, context);1433414335if (refsChanged) {14336transaction.getReactMountReady().enqueue(attachRefs, internalInstance);14337}14338},1433914340/**14341* Flush any dirty changes in a component.14342*14343* @param {ReactComponent} internalInstance14344* @param {ReactReconcileTransaction} transaction14345* @internal14346*/14347performUpdateIfNecessary: function(14348internalInstance,14349transaction14350) {14351internalInstance.performUpdateIfNecessary(transaction);14352}1435314354};1435514356module.exports = ReactReconciler;143571435814359}).call(this,require("FWaASH"))14360},{"./ReactElementValidator":59,"./ReactRef":83,"FWaASH":1}],83:[function(require,module,exports){14361/**14362* Copyright 2013-2015, Facebook, Inc.14363* All rights reserved.14364*14365* This source code is licensed under the BSD-style license found in the14366* LICENSE file in the root directory of this source tree. An additional grant14367* of patent rights can be found in the PATENTS file in the same directory.14368*14369* @providesModule ReactRef14370*/1437114372'use strict';1437314374var ReactOwner = require("./ReactOwner");1437514376var ReactRef = {};1437714378function attachRef(ref, component, owner) {14379if (typeof ref === 'function') {14380ref(component.getPublicInstance());14381} else {14382// Legacy ref14383ReactOwner.addComponentAsRefTo(component, ref, owner);14384}14385}1438614387function detachRef(ref, component, owner) {14388if (typeof ref === 'function') {14389ref(null);14390} else {14391// Legacy ref14392ReactOwner.removeComponentAsRefFrom(component, ref, owner);14393}14394}1439514396ReactRef.attachRefs = function(instance, element) {14397var ref = element.ref;14398if (ref != null) {14399attachRef(ref, instance, element._owner);14400}14401};1440214403ReactRef.shouldUpdateRefs = function(prevElement, nextElement) {14404// If either the owner or a `ref` has changed, make sure the newest owner14405// has stored a reference to `this`, and the previous owner (if different)14406// has forgotten the reference to `this`. We use the element instead14407// of the public this.props because the post processing cannot determine14408// a ref. The ref conceptually lives on the element.1440914410// TODO: Should this even be possible? The owner cannot change because14411// it's forbidden by shouldUpdateReactComponent. The ref can change14412// if you swap the keys of but not the refs. Reconsider where this check14413// is made. It probably belongs where the key checking and14414// instantiateReactComponent is done.1441514416return (14417nextElement._owner !== prevElement._owner ||14418nextElement.ref !== prevElement.ref14419);14420};1442114422ReactRef.detachRefs = function(instance, element) {14423var ref = element.ref;14424if (ref != null) {14425detachRef(ref, instance, element._owner);14426}14427};1442814429module.exports = ReactRef;144301443114432},{"./ReactOwner":75}],84:[function(require,module,exports){14433/**14434* Copyright 2013-2015, Facebook, Inc.14435* All rights reserved.14436*14437* This source code is licensed under the BSD-style license found in the14438* LICENSE file in the root directory of this source tree. An additional grant14439* of patent rights can be found in the PATENTS file in the same directory.14440*14441* @providesModule ReactRootIndex14442* @typechecks14443*/1444414445'use strict';1444614447var ReactRootIndexInjection = {14448/**14449* @param {function} _createReactRootIndex14450*/14451injectCreateReactRootIndex: function(_createReactRootIndex) {14452ReactRootIndex.createReactRootIndex = _createReactRootIndex;14453}14454};1445514456var ReactRootIndex = {14457createReactRootIndex: null,14458injection: ReactRootIndexInjection14459};1446014461module.exports = ReactRootIndex;144621446314464},{}],85:[function(require,module,exports){14465(function (process){14466/**14467* Copyright 2013-2015, Facebook, Inc.14468* All rights reserved.14469*14470* This source code is licensed under the BSD-style license found in the14471* LICENSE file in the root directory of this source tree. An additional grant14472* of patent rights can be found in the PATENTS file in the same directory.14473*14474* @typechecks static-only14475* @providesModule ReactServerRendering14476*/14477'use strict';1447814479var ReactElement = require("./ReactElement");14480var ReactInstanceHandles = require("./ReactInstanceHandles");14481var ReactMarkupChecksum = require("./ReactMarkupChecksum");14482var ReactServerRenderingTransaction =14483require("./ReactServerRenderingTransaction");1448414485var emptyObject = require("./emptyObject");14486var instantiateReactComponent = require("./instantiateReactComponent");14487var invariant = require("./invariant");1448814489/**14490* @param {ReactElement} element14491* @return {string} the HTML markup14492*/14493function renderToString(element) {14494("production" !== process.env.NODE_ENV ? invariant(14495ReactElement.isValidElement(element),14496'renderToString(): You must pass a valid ReactElement.'14497) : invariant(ReactElement.isValidElement(element)));1449814499var transaction;14500try {14501var id = ReactInstanceHandles.createReactRootID();14502transaction = ReactServerRenderingTransaction.getPooled(false);1450314504return transaction.perform(function() {14505var componentInstance = instantiateReactComponent(element, null);14506var markup =14507componentInstance.mountComponent(id, transaction, emptyObject);14508return ReactMarkupChecksum.addChecksumToMarkup(markup);14509}, null);14510} finally {14511ReactServerRenderingTransaction.release(transaction);14512}14513}1451414515/**14516* @param {ReactElement} element14517* @return {string} the HTML markup, without the extra React ID and checksum14518* (for generating static pages)14519*/14520function renderToStaticMarkup(element) {14521("production" !== process.env.NODE_ENV ? invariant(14522ReactElement.isValidElement(element),14523'renderToStaticMarkup(): You must pass a valid ReactElement.'14524) : invariant(ReactElement.isValidElement(element)));1452514526var transaction;14527try {14528var id = ReactInstanceHandles.createReactRootID();14529transaction = ReactServerRenderingTransaction.getPooled(true);1453014531return transaction.perform(function() {14532var componentInstance = instantiateReactComponent(element, null);14533return componentInstance.mountComponent(id, transaction, emptyObject);14534}, null);14535} finally {14536ReactServerRenderingTransaction.release(transaction);14537}14538}1453914540module.exports = {14541renderToString: renderToString,14542renderToStaticMarkup: renderToStaticMarkup14543};145441454514546}).call(this,require("FWaASH"))14547},{"./ReactElement":58,"./ReactInstanceHandles":67,"./ReactMarkupChecksum":70,"./ReactServerRenderingTransaction":86,"./emptyObject":116,"./instantiateReactComponent":135,"./invariant":136,"FWaASH":1}],86:[function(require,module,exports){14548/**14549* Copyright 2014-2015, Facebook, Inc.14550* All rights reserved.14551*14552* This source code is licensed under the BSD-style license found in the14553* LICENSE file in the root directory of this source tree. An additional grant14554* of patent rights can be found in the PATENTS file in the same directory.14555*14556* @providesModule ReactServerRenderingTransaction14557* @typechecks14558*/1455914560'use strict';1456114562var PooledClass = require("./PooledClass");14563var CallbackQueue = require("./CallbackQueue");14564var ReactPutListenerQueue = require("./ReactPutListenerQueue");14565var Transaction = require("./Transaction");1456614567var assign = require("./Object.assign");14568var emptyFunction = require("./emptyFunction");1456914570/**14571* Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks14572* during the performing of the transaction.14573*/14574var ON_DOM_READY_QUEUEING = {14575/**14576* Initializes the internal `onDOMReady` queue.14577*/14578initialize: function() {14579this.reactMountReady.reset();14580},1458114582close: emptyFunction14583};1458414585var PUT_LISTENER_QUEUEING = {14586initialize: function() {14587this.putListenerQueue.reset();14588},1458914590close: emptyFunction14591};1459214593/**14594* Executed within the scope of the `Transaction` instance. Consider these as14595* being member methods, but with an implied ordering while being isolated from14596* each other.14597*/14598var TRANSACTION_WRAPPERS = [14599PUT_LISTENER_QUEUEING,14600ON_DOM_READY_QUEUEING14601];1460214603/**14604* @class ReactServerRenderingTransaction14605* @param {boolean} renderToStaticMarkup14606*/14607function ReactServerRenderingTransaction(renderToStaticMarkup) {14608this.reinitializeTransaction();14609this.renderToStaticMarkup = renderToStaticMarkup;14610this.reactMountReady = CallbackQueue.getPooled(null);14611this.putListenerQueue = ReactPutListenerQueue.getPooled();14612}1461314614var Mixin = {14615/**14616* @see Transaction14617* @abstract14618* @final14619* @return {array} Empty list of operation wrap proceedures.14620*/14621getTransactionWrappers: function() {14622return TRANSACTION_WRAPPERS;14623},1462414625/**14626* @return {object} The queue to collect `onDOMReady` callbacks with.14627*/14628getReactMountReady: function() {14629return this.reactMountReady;14630},1463114632getPutListenerQueue: function() {14633return this.putListenerQueue;14634},1463514636/**14637* `PooledClass` looks for this, and will invoke this before allowing this14638* instance to be resused.14639*/14640destructor: function() {14641CallbackQueue.release(this.reactMountReady);14642this.reactMountReady = null;1464314644ReactPutListenerQueue.release(this.putListenerQueue);14645this.putListenerQueue = null;14646}14647};146481464914650assign(14651ReactServerRenderingTransaction.prototype,14652Transaction.Mixin,14653Mixin14654);1465514656PooledClass.addPoolingTo(ReactServerRenderingTransaction);1465714658module.exports = ReactServerRenderingTransaction;146591466014661},{"./CallbackQueue":6,"./Object.assign":27,"./PooledClass":28,"./ReactPutListenerQueue":80,"./Transaction":104,"./emptyFunction":115}],87:[function(require,module,exports){14662(function (process){14663/**14664* Copyright 2015, Facebook, Inc.14665* All rights reserved.14666*14667* This source code is licensed under the BSD-style license found in the14668* LICENSE file in the root directory of this source tree. An additional grant14669* of patent rights can be found in the PATENTS file in the same directory.14670*14671* @providesModule ReactUpdateQueue14672*/1467314674'use strict';1467514676var ReactLifeCycle = require("./ReactLifeCycle");14677var ReactCurrentOwner = require("./ReactCurrentOwner");14678var ReactElement = require("./ReactElement");14679var ReactInstanceMap = require("./ReactInstanceMap");14680var ReactUpdates = require("./ReactUpdates");1468114682var assign = require("./Object.assign");14683var invariant = require("./invariant");14684var warning = require("./warning");1468514686function enqueueUpdate(internalInstance) {14687if (internalInstance !== ReactLifeCycle.currentlyMountingInstance) {14688// If we're in a componentWillMount handler, don't enqueue a rerender14689// because ReactUpdates assumes we're in a browser context (which is14690// wrong for server rendering) and we're about to do a render anyway.14691// See bug in #1740.14692ReactUpdates.enqueueUpdate(internalInstance);14693}14694}1469514696function getInternalInstanceReadyForUpdate(publicInstance, callerName) {14697("production" !== process.env.NODE_ENV ? invariant(14698ReactCurrentOwner.current == null,14699'%s(...): Cannot update during an existing state transition ' +14700'(such as within `render`). Render methods should be a pure function ' +14701'of props and state.',14702callerName14703) : invariant(ReactCurrentOwner.current == null));1470414705var internalInstance = ReactInstanceMap.get(publicInstance);14706if (!internalInstance) {14707if ("production" !== process.env.NODE_ENV) {14708// Only warn when we have a callerName. Otherwise we should be silent.14709// We're probably calling from enqueueCallback. We don't want to warn14710// there because we already warned for the corresponding lifecycle method.14711("production" !== process.env.NODE_ENV ? warning(14712!callerName,14713'%s(...): Can only update a mounted or mounting component. ' +14714'This usually means you called %s() on an unmounted ' +14715'component. This is a no-op.',14716callerName,14717callerName14718) : null);14719}14720return null;14721}1472214723if (internalInstance === ReactLifeCycle.currentlyUnmountingInstance) {14724return null;14725}1472614727return internalInstance;14728}1472914730/**14731* ReactUpdateQueue allows for state updates to be scheduled into a later14732* reconciliation step.14733*/14734var ReactUpdateQueue = {1473514736/**14737* Enqueue a callback that will be executed after all the pending updates14738* have processed.14739*14740* @param {ReactClass} publicInstance The instance to use as `this` context.14741* @param {?function} callback Called after state is updated.14742* @internal14743*/14744enqueueCallback: function(publicInstance, callback) {14745("production" !== process.env.NODE_ENV ? invariant(14746typeof callback === 'function',14747'enqueueCallback(...): You called `setProps`, `replaceProps`, ' +14748'`setState`, `replaceState`, or `forceUpdate` with a callback that ' +14749'isn\'t callable.'14750) : invariant(typeof callback === 'function'));14751var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);1475214753// Previously we would throw an error if we didn't have an internal14754// instance. Since we want to make it a no-op instead, we mirror the same14755// behavior we have in other enqueue* methods.14756// We also need to ignore callbacks in componentWillMount. See14757// enqueueUpdates.14758if (!internalInstance ||14759internalInstance === ReactLifeCycle.currentlyMountingInstance) {14760return null;14761}1476214763if (internalInstance._pendingCallbacks) {14764internalInstance._pendingCallbacks.push(callback);14765} else {14766internalInstance._pendingCallbacks = [callback];14767}14768// TODO: The callback here is ignored when setState is called from14769// componentWillMount. Either fix it or disallow doing so completely in14770// favor of getInitialState. Alternatively, we can disallow14771// componentWillMount during server-side rendering.14772enqueueUpdate(internalInstance);14773},1477414775enqueueCallbackInternal: function(internalInstance, callback) {14776("production" !== process.env.NODE_ENV ? invariant(14777typeof callback === 'function',14778'enqueueCallback(...): You called `setProps`, `replaceProps`, ' +14779'`setState`, `replaceState`, or `forceUpdate` with a callback that ' +14780'isn\'t callable.'14781) : invariant(typeof callback === 'function'));14782if (internalInstance._pendingCallbacks) {14783internalInstance._pendingCallbacks.push(callback);14784} else {14785internalInstance._pendingCallbacks = [callback];14786}14787enqueueUpdate(internalInstance);14788},1478914790/**14791* Forces an update. This should only be invoked when it is known with14792* certainty that we are **not** in a DOM transaction.14793*14794* You may want to call this when you know that some deeper aspect of the14795* component's state has changed but `setState` was not called.14796*14797* This will not invoke `shouldUpdateComponent`, but it will invoke14798* `componentWillUpdate` and `componentDidUpdate`.14799*14800* @param {ReactClass} publicInstance The instance that should rerender.14801* @internal14802*/14803enqueueForceUpdate: function(publicInstance) {14804var internalInstance = getInternalInstanceReadyForUpdate(14805publicInstance,14806'forceUpdate'14807);1480814809if (!internalInstance) {14810return;14811}1481214813internalInstance._pendingForceUpdate = true;1481414815enqueueUpdate(internalInstance);14816},1481714818/**14819* Replaces all of the state. Always use this or `setState` to mutate state.14820* You should treat `this.state` as immutable.14821*14822* There is no guarantee that `this.state` will be immediately updated, so14823* accessing `this.state` after calling this method may return the old value.14824*14825* @param {ReactClass} publicInstance The instance that should rerender.14826* @param {object} completeState Next state.14827* @internal14828*/14829enqueueReplaceState: function(publicInstance, completeState) {14830var internalInstance = getInternalInstanceReadyForUpdate(14831publicInstance,14832'replaceState'14833);1483414835if (!internalInstance) {14836return;14837}1483814839internalInstance._pendingStateQueue = [completeState];14840internalInstance._pendingReplaceState = true;1484114842enqueueUpdate(internalInstance);14843},1484414845/**14846* Sets a subset of the state. This only exists because _pendingState is14847* internal. This provides a merging strategy that is not available to deep14848* properties which is confusing. TODO: Expose pendingState or don't use it14849* during the merge.14850*14851* @param {ReactClass} publicInstance The instance that should rerender.14852* @param {object} partialState Next partial state to be merged with state.14853* @internal14854*/14855enqueueSetState: function(publicInstance, partialState) {14856var internalInstance = getInternalInstanceReadyForUpdate(14857publicInstance,14858'setState'14859);1486014861if (!internalInstance) {14862return;14863}1486414865var queue =14866internalInstance._pendingStateQueue ||14867(internalInstance._pendingStateQueue = []);14868queue.push(partialState);1486914870enqueueUpdate(internalInstance);14871},1487214873/**14874* Sets a subset of the props.14875*14876* @param {ReactClass} publicInstance The instance that should rerender.14877* @param {object} partialProps Subset of the next props.14878* @internal14879*/14880enqueueSetProps: function(publicInstance, partialProps) {14881var internalInstance = getInternalInstanceReadyForUpdate(14882publicInstance,14883'setProps'14884);1488514886if (!internalInstance) {14887return;14888}1488914890("production" !== process.env.NODE_ENV ? invariant(14891internalInstance._isTopLevel,14892'setProps(...): You called `setProps` on a ' +14893'component with a parent. This is an anti-pattern since props will ' +14894'get reactively updated when rendered. Instead, change the owner\'s ' +14895'`render` method to pass the correct value as props to the component ' +14896'where it is created.'14897) : invariant(internalInstance._isTopLevel));1489814899// Merge with the pending element if it exists, otherwise with existing14900// element props.14901var element = internalInstance._pendingElement ||14902internalInstance._currentElement;14903var props = assign({}, element.props, partialProps);14904internalInstance._pendingElement = ReactElement.cloneAndReplaceProps(14905element,14906props14907);1490814909enqueueUpdate(internalInstance);14910},1491114912/**14913* Replaces all of the props.14914*14915* @param {ReactClass} publicInstance The instance that should rerender.14916* @param {object} props New props.14917* @internal14918*/14919enqueueReplaceProps: function(publicInstance, props) {14920var internalInstance = getInternalInstanceReadyForUpdate(14921publicInstance,14922'replaceProps'14923);1492414925if (!internalInstance) {14926return;14927}1492814929("production" !== process.env.NODE_ENV ? invariant(14930internalInstance._isTopLevel,14931'replaceProps(...): You called `replaceProps` on a ' +14932'component with a parent. This is an anti-pattern since props will ' +14933'get reactively updated when rendered. Instead, change the owner\'s ' +14934'`render` method to pass the correct value as props to the component ' +14935'where it is created.'14936) : invariant(internalInstance._isTopLevel));1493714938// Merge with the pending element if it exists, otherwise with existing14939// element props.14940var element = internalInstance._pendingElement ||14941internalInstance._currentElement;14942internalInstance._pendingElement = ReactElement.cloneAndReplaceProps(14943element,14944props14945);1494614947enqueueUpdate(internalInstance);14948},1494914950enqueueElementInternal: function(internalInstance, newElement) {14951internalInstance._pendingElement = newElement;14952enqueueUpdate(internalInstance);14953}1495414955};1495614957module.exports = ReactUpdateQueue;149581495914960}).call(this,require("FWaASH"))14961},{"./Object.assign":27,"./ReactCurrentOwner":40,"./ReactElement":58,"./ReactInstanceMap":68,"./ReactLifeCycle":69,"./ReactUpdates":88,"./invariant":136,"./warning":155,"FWaASH":1}],88:[function(require,module,exports){14962(function (process){14963/**14964* Copyright 2013-2015, Facebook, Inc.14965* All rights reserved.14966*14967* This source code is licensed under the BSD-style license found in the14968* LICENSE file in the root directory of this source tree. An additional grant14969* of patent rights can be found in the PATENTS file in the same directory.14970*14971* @providesModule ReactUpdates14972*/1497314974'use strict';1497514976var CallbackQueue = require("./CallbackQueue");14977var PooledClass = require("./PooledClass");14978var ReactCurrentOwner = require("./ReactCurrentOwner");14979var ReactPerf = require("./ReactPerf");14980var ReactReconciler = require("./ReactReconciler");14981var Transaction = require("./Transaction");1498214983var assign = require("./Object.assign");14984var invariant = require("./invariant");14985var warning = require("./warning");1498614987var dirtyComponents = [];14988var asapCallbackQueue = CallbackQueue.getPooled();14989var asapEnqueued = false;1499014991var batchingStrategy = null;1499214993function ensureInjected() {14994("production" !== process.env.NODE_ENV ? invariant(14995ReactUpdates.ReactReconcileTransaction && batchingStrategy,14996'ReactUpdates: must inject a reconcile transaction class and batching ' +14997'strategy'14998) : invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy));14999}1500015001var NESTED_UPDATES = {15002initialize: function() {15003this.dirtyComponentsLength = dirtyComponents.length;15004},15005close: function() {15006if (this.dirtyComponentsLength !== dirtyComponents.length) {15007// Additional updates were enqueued by componentDidUpdate handlers or15008// similar; before our own UPDATE_QUEUEING wrapper closes, we want to run15009// these new updates so that if A's componentDidUpdate calls setState on15010// B, B will update before the callback A's updater provided when calling15011// setState.15012dirtyComponents.splice(0, this.dirtyComponentsLength);15013flushBatchedUpdates();15014} else {15015dirtyComponents.length = 0;15016}15017}15018};1501915020var UPDATE_QUEUEING = {15021initialize: function() {15022this.callbackQueue.reset();15023},15024close: function() {15025this.callbackQueue.notifyAll();15026}15027};1502815029var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];1503015031function ReactUpdatesFlushTransaction() {15032this.reinitializeTransaction();15033this.dirtyComponentsLength = null;15034this.callbackQueue = CallbackQueue.getPooled();15035this.reconcileTransaction =15036ReactUpdates.ReactReconcileTransaction.getPooled();15037}1503815039assign(15040ReactUpdatesFlushTransaction.prototype,15041Transaction.Mixin, {15042getTransactionWrappers: function() {15043return TRANSACTION_WRAPPERS;15044},1504515046destructor: function() {15047this.dirtyComponentsLength = null;15048CallbackQueue.release(this.callbackQueue);15049this.callbackQueue = null;15050ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);15051this.reconcileTransaction = null;15052},1505315054perform: function(method, scope, a) {15055// Essentially calls `this.reconcileTransaction.perform(method, scope, a)`15056// with this transaction's wrappers around it.15057return Transaction.Mixin.perform.call(15058this,15059this.reconcileTransaction.perform,15060this.reconcileTransaction,15061method,15062scope,15063a15064);15065}15066});1506715068PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);1506915070function batchedUpdates(callback, a, b, c, d) {15071ensureInjected();15072batchingStrategy.batchedUpdates(callback, a, b, c, d);15073}1507415075/**15076* Array comparator for ReactComponents by mount ordering.15077*15078* @param {ReactComponent} c1 first component you're comparing15079* @param {ReactComponent} c2 second component you're comparing15080* @return {number} Return value usable by Array.prototype.sort().15081*/15082function mountOrderComparator(c1, c2) {15083return c1._mountOrder - c2._mountOrder;15084}1508515086function runBatchedUpdates(transaction) {15087var len = transaction.dirtyComponentsLength;15088("production" !== process.env.NODE_ENV ? invariant(15089len === dirtyComponents.length,15090'Expected flush transaction\'s stored dirty-components length (%s) to ' +15091'match dirty-components array length (%s).',15092len,15093dirtyComponents.length15094) : invariant(len === dirtyComponents.length));1509515096// Since reconciling a component higher in the owner hierarchy usually (not15097// always -- see shouldComponentUpdate()) will reconcile children, reconcile15098// them before their children by sorting the array.15099dirtyComponents.sort(mountOrderComparator);1510015101for (var i = 0; i < len; i++) {15102// If a component is unmounted before pending changes apply, it will still15103// be here, but we assume that it has cleared its _pendingCallbacks and15104// that performUpdateIfNecessary is a noop.15105var component = dirtyComponents[i];1510615107// If performUpdateIfNecessary happens to enqueue any new updates, we15108// shouldn't execute the callbacks until the next render happens, so15109// stash the callbacks first15110var callbacks = component._pendingCallbacks;15111component._pendingCallbacks = null;1511215113ReactReconciler.performUpdateIfNecessary(15114component,15115transaction.reconcileTransaction15116);1511715118if (callbacks) {15119for (var j = 0; j < callbacks.length; j++) {15120transaction.callbackQueue.enqueue(15121callbacks[j],15122component.getPublicInstance()15123);15124}15125}15126}15127}1512815129var flushBatchedUpdates = function() {15130// ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents15131// array and perform any updates enqueued by mount-ready handlers (i.e.,15132// componentDidUpdate) but we need to check here too in order to catch15133// updates enqueued by setState callbacks and asap calls.15134while (dirtyComponents.length || asapEnqueued) {15135if (dirtyComponents.length) {15136var transaction = ReactUpdatesFlushTransaction.getPooled();15137transaction.perform(runBatchedUpdates, null, transaction);15138ReactUpdatesFlushTransaction.release(transaction);15139}1514015141if (asapEnqueued) {15142asapEnqueued = false;15143var queue = asapCallbackQueue;15144asapCallbackQueue = CallbackQueue.getPooled();15145queue.notifyAll();15146CallbackQueue.release(queue);15147}15148}15149};15150flushBatchedUpdates = ReactPerf.measure(15151'ReactUpdates',15152'flushBatchedUpdates',15153flushBatchedUpdates15154);1515515156/**15157* Mark a component as needing a rerender, adding an optional callback to a15158* list of functions which will be executed once the rerender occurs.15159*/15160function enqueueUpdate(component) {15161ensureInjected();1516215163// Various parts of our code (such as ReactCompositeComponent's15164// _renderValidatedComponent) assume that calls to render aren't nested;15165// verify that that's the case. (This is called by each top-level update15166// function, like setProps, setState, forceUpdate, etc.; creation and15167// destruction of top-level components is guarded in ReactMount.)15168("production" !== process.env.NODE_ENV ? warning(15169ReactCurrentOwner.current == null,15170'enqueueUpdate(): Render methods should be a pure function of props ' +15171'and state; triggering nested component updates from render is not ' +15172'allowed. If necessary, trigger nested updates in ' +15173'componentDidUpdate.'15174) : null);1517515176if (!batchingStrategy.isBatchingUpdates) {15177batchingStrategy.batchedUpdates(enqueueUpdate, component);15178return;15179}1518015181dirtyComponents.push(component);15182}1518315184/**15185* Enqueue a callback to be run at the end of the current batching cycle. Throws15186* if no updates are currently being performed.15187*/15188function asap(callback, context) {15189("production" !== process.env.NODE_ENV ? invariant(15190batchingStrategy.isBatchingUpdates,15191'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' +15192'updates are not being batched.'15193) : invariant(batchingStrategy.isBatchingUpdates));15194asapCallbackQueue.enqueue(callback, context);15195asapEnqueued = true;15196}1519715198var ReactUpdatesInjection = {15199injectReconcileTransaction: function(ReconcileTransaction) {15200("production" !== process.env.NODE_ENV ? invariant(15201ReconcileTransaction,15202'ReactUpdates: must provide a reconcile transaction class'15203) : invariant(ReconcileTransaction));15204ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;15205},1520615207injectBatchingStrategy: function(_batchingStrategy) {15208("production" !== process.env.NODE_ENV ? invariant(15209_batchingStrategy,15210'ReactUpdates: must provide a batching strategy'15211) : invariant(_batchingStrategy));15212("production" !== process.env.NODE_ENV ? invariant(15213typeof _batchingStrategy.batchedUpdates === 'function',15214'ReactUpdates: must provide a batchedUpdates() function'15215) : invariant(typeof _batchingStrategy.batchedUpdates === 'function'));15216("production" !== process.env.NODE_ENV ? invariant(15217typeof _batchingStrategy.isBatchingUpdates === 'boolean',15218'ReactUpdates: must provide an isBatchingUpdates boolean attribute'15219) : invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean'));15220batchingStrategy = _batchingStrategy;15221}15222};1522315224var ReactUpdates = {15225/**15226* React references `ReactReconcileTransaction` using this property in order15227* to allow dependency injection.15228*15229* @internal15230*/15231ReactReconcileTransaction: null,1523215233batchedUpdates: batchedUpdates,15234enqueueUpdate: enqueueUpdate,15235flushBatchedUpdates: flushBatchedUpdates,15236injection: ReactUpdatesInjection,15237asap: asap15238};1523915240module.exports = ReactUpdates;152411524215243}).call(this,require("FWaASH"))15244},{"./CallbackQueue":6,"./Object.assign":27,"./PooledClass":28,"./ReactCurrentOwner":40,"./ReactPerf":76,"./ReactReconciler":82,"./Transaction":104,"./invariant":136,"./warning":155,"FWaASH":1}],89:[function(require,module,exports){15245/**15246* Copyright 2013-2015, Facebook, Inc.15247* All rights reserved.15248*15249* This source code is licensed under the BSD-style license found in the15250* LICENSE file in the root directory of this source tree. An additional grant15251* of patent rights can be found in the PATENTS file in the same directory.15252*15253* @providesModule SVGDOMPropertyConfig15254*/1525515256/*jslint bitwise: true*/1525715258'use strict';1525915260var DOMProperty = require("./DOMProperty");1526115262var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;1526315264var SVGDOMPropertyConfig = {15265Properties: {15266cx: MUST_USE_ATTRIBUTE,15267cy: MUST_USE_ATTRIBUTE,15268d: MUST_USE_ATTRIBUTE,15269dx: MUST_USE_ATTRIBUTE,15270dy: MUST_USE_ATTRIBUTE,15271fill: MUST_USE_ATTRIBUTE,15272fillOpacity: MUST_USE_ATTRIBUTE,15273fontFamily: MUST_USE_ATTRIBUTE,15274fontSize: MUST_USE_ATTRIBUTE,15275fx: MUST_USE_ATTRIBUTE,15276fy: MUST_USE_ATTRIBUTE,15277gradientTransform: MUST_USE_ATTRIBUTE,15278gradientUnits: MUST_USE_ATTRIBUTE,15279markerEnd: MUST_USE_ATTRIBUTE,15280markerMid: MUST_USE_ATTRIBUTE,15281markerStart: MUST_USE_ATTRIBUTE,15282offset: MUST_USE_ATTRIBUTE,15283opacity: MUST_USE_ATTRIBUTE,15284patternContentUnits: MUST_USE_ATTRIBUTE,15285patternUnits: MUST_USE_ATTRIBUTE,15286points: MUST_USE_ATTRIBUTE,15287preserveAspectRatio: MUST_USE_ATTRIBUTE,15288r: MUST_USE_ATTRIBUTE,15289rx: MUST_USE_ATTRIBUTE,15290ry: MUST_USE_ATTRIBUTE,15291spreadMethod: MUST_USE_ATTRIBUTE,15292stopColor: MUST_USE_ATTRIBUTE,15293stopOpacity: MUST_USE_ATTRIBUTE,15294stroke: MUST_USE_ATTRIBUTE,15295strokeDasharray: MUST_USE_ATTRIBUTE,15296strokeLinecap: MUST_USE_ATTRIBUTE,15297strokeOpacity: MUST_USE_ATTRIBUTE,15298strokeWidth: MUST_USE_ATTRIBUTE,15299textAnchor: MUST_USE_ATTRIBUTE,15300transform: MUST_USE_ATTRIBUTE,15301version: MUST_USE_ATTRIBUTE,15302viewBox: MUST_USE_ATTRIBUTE,15303x1: MUST_USE_ATTRIBUTE,15304x2: MUST_USE_ATTRIBUTE,15305x: MUST_USE_ATTRIBUTE,15306y1: MUST_USE_ATTRIBUTE,15307y2: MUST_USE_ATTRIBUTE,15308y: MUST_USE_ATTRIBUTE15309},15310DOMAttributeNames: {15311fillOpacity: 'fill-opacity',15312fontFamily: 'font-family',15313fontSize: 'font-size',15314gradientTransform: 'gradientTransform',15315gradientUnits: 'gradientUnits',15316markerEnd: 'marker-end',15317markerMid: 'marker-mid',15318markerStart: 'marker-start',15319patternContentUnits: 'patternContentUnits',15320patternUnits: 'patternUnits',15321preserveAspectRatio: 'preserveAspectRatio',15322spreadMethod: 'spreadMethod',15323stopColor: 'stop-color',15324stopOpacity: 'stop-opacity',15325strokeDasharray: 'stroke-dasharray',15326strokeLinecap: 'stroke-linecap',15327strokeOpacity: 'stroke-opacity',15328strokeWidth: 'stroke-width',15329textAnchor: 'text-anchor',15330viewBox: 'viewBox'15331}15332};1533315334module.exports = SVGDOMPropertyConfig;153351533615337},{"./DOMProperty":10}],90:[function(require,module,exports){15338/**15339* Copyright 2013-2015, Facebook, Inc.15340* All rights reserved.15341*15342* This source code is licensed under the BSD-style license found in the15343* LICENSE file in the root directory of this source tree. An additional grant15344* of patent rights can be found in the PATENTS file in the same directory.15345*15346* @providesModule SelectEventPlugin15347*/1534815349'use strict';1535015351var EventConstants = require("./EventConstants");15352var EventPropagators = require("./EventPropagators");15353var ReactInputSelection = require("./ReactInputSelection");15354var SyntheticEvent = require("./SyntheticEvent");1535515356var getActiveElement = require("./getActiveElement");15357var isTextInputElement = require("./isTextInputElement");15358var keyOf = require("./keyOf");15359var shallowEqual = require("./shallowEqual");1536015361var topLevelTypes = EventConstants.topLevelTypes;1536215363var eventTypes = {15364select: {15365phasedRegistrationNames: {15366bubbled: keyOf({onSelect: null}),15367captured: keyOf({onSelectCapture: null})15368},15369dependencies: [15370topLevelTypes.topBlur,15371topLevelTypes.topContextMenu,15372topLevelTypes.topFocus,15373topLevelTypes.topKeyDown,15374topLevelTypes.topMouseDown,15375topLevelTypes.topMouseUp,15376topLevelTypes.topSelectionChange15377]15378}15379};1538015381var activeElement = null;15382var activeElementID = null;15383var lastSelection = null;15384var mouseDown = false;1538515386/**15387* Get an object which is a unique representation of the current selection.15388*15389* The return value will not be consistent across nodes or browsers, but15390* two identical selections on the same node will return identical objects.15391*15392* @param {DOMElement} node15393* @param {object}15394*/15395function getSelection(node) {15396if ('selectionStart' in node &&15397ReactInputSelection.hasSelectionCapabilities(node)) {15398return {15399start: node.selectionStart,15400end: node.selectionEnd15401};15402} else if (window.getSelection) {15403var selection = window.getSelection();15404return {15405anchorNode: selection.anchorNode,15406anchorOffset: selection.anchorOffset,15407focusNode: selection.focusNode,15408focusOffset: selection.focusOffset15409};15410} else if (document.selection) {15411var range = document.selection.createRange();15412return {15413parentElement: range.parentElement(),15414text: range.text,15415top: range.boundingTop,15416left: range.boundingLeft15417};15418}15419}1542015421/**15422* Poll selection to see whether it's changed.15423*15424* @param {object} nativeEvent15425* @return {?SyntheticEvent}15426*/15427function constructSelectEvent(nativeEvent) {15428// Ensure we have the right element, and that the user is not dragging a15429// selection (this matches native `select` event behavior). In HTML5, select15430// fires only on input and textarea thus if there's no focused element we15431// won't dispatch.15432if (mouseDown ||15433activeElement == null ||15434activeElement !== getActiveElement()) {15435return null;15436}1543715438// Only fire when selection has actually changed.15439var currentSelection = getSelection(activeElement);15440if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {15441lastSelection = currentSelection;1544215443var syntheticEvent = SyntheticEvent.getPooled(15444eventTypes.select,15445activeElementID,15446nativeEvent15447);1544815449syntheticEvent.type = 'select';15450syntheticEvent.target = activeElement;1545115452EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);1545315454return syntheticEvent;15455}15456}1545715458/**15459* This plugin creates an `onSelect` event that normalizes select events15460* across form elements.15461*15462* Supported elements are:15463* - input (see `isTextInputElement`)15464* - textarea15465* - contentEditable15466*15467* This differs from native browser implementations in the following ways:15468* - Fires on contentEditable fields as well as inputs.15469* - Fires for collapsed selection.15470* - Fires after user input.15471*/15472var SelectEventPlugin = {1547315474eventTypes: eventTypes,1547515476/**15477* @param {string} topLevelType Record from `EventConstants`.15478* @param {DOMEventTarget} topLevelTarget The listening component root node.15479* @param {string} topLevelTargetID ID of `topLevelTarget`.15480* @param {object} nativeEvent Native browser event.15481* @return {*} An accumulation of synthetic events.15482* @see {EventPluginHub.extractEvents}15483*/15484extractEvents: function(15485topLevelType,15486topLevelTarget,15487topLevelTargetID,15488nativeEvent) {1548915490switch (topLevelType) {15491// Track the input node that has focus.15492case topLevelTypes.topFocus:15493if (isTextInputElement(topLevelTarget) ||15494topLevelTarget.contentEditable === 'true') {15495activeElement = topLevelTarget;15496activeElementID = topLevelTargetID;15497lastSelection = null;15498}15499break;15500case topLevelTypes.topBlur:15501activeElement = null;15502activeElementID = null;15503lastSelection = null;15504break;1550515506// Don't fire the event while the user is dragging. This matches the15507// semantics of the native select event.15508case topLevelTypes.topMouseDown:15509mouseDown = true;15510break;15511case topLevelTypes.topContextMenu:15512case topLevelTypes.topMouseUp:15513mouseDown = false;15514return constructSelectEvent(nativeEvent);1551515516// Chrome and IE fire non-standard event when selection is changed (and15517// sometimes when it hasn't).15518// Firefox doesn't support selectionchange, so check selection status15519// after each key entry. The selection changes after keydown and before15520// keyup, but we check on keydown as well in the case of holding down a15521// key, when multiple keydown events are fired but only one keyup is.15522case topLevelTypes.topSelectionChange:15523case topLevelTypes.topKeyDown:15524case topLevelTypes.topKeyUp:15525return constructSelectEvent(nativeEvent);15526}15527}15528};1552915530module.exports = SelectEventPlugin;155311553215533},{"./EventConstants":15,"./EventPropagators":20,"./ReactInputSelection":66,"./SyntheticEvent":96,"./getActiveElement":122,"./isTextInputElement":139,"./keyOf":142,"./shallowEqual":151}],91:[function(require,module,exports){15534/**15535* Copyright 2013-2015, Facebook, Inc.15536* All rights reserved.15537*15538* This source code is licensed under the BSD-style license found in the15539* LICENSE file in the root directory of this source tree. An additional grant15540* of patent rights can be found in the PATENTS file in the same directory.15541*15542* @providesModule ServerReactRootIndex15543* @typechecks15544*/1554515546'use strict';1554715548/**15549* Size of the reactRoot ID space. We generate random numbers for React root15550* IDs and if there's a collision the events and DOM update system will15551* get confused. In the future we need a way to generate GUIDs but for15552* now this will work on a smaller scale.15553*/15554var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);1555515556var ServerReactRootIndex = {15557createReactRootIndex: function() {15558return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);15559}15560};1556115562module.exports = ServerReactRootIndex;155631556415565},{}],92:[function(require,module,exports){15566(function (process){15567/**15568* Copyright 2013-2015, Facebook, Inc.15569* All rights reserved.15570*15571* This source code is licensed under the BSD-style license found in the15572* LICENSE file in the root directory of this source tree. An additional grant15573* of patent rights can be found in the PATENTS file in the same directory.15574*15575* @providesModule SimpleEventPlugin15576*/1557715578'use strict';1557915580var EventConstants = require("./EventConstants");15581var EventPluginUtils = require("./EventPluginUtils");15582var EventPropagators = require("./EventPropagators");15583var SyntheticClipboardEvent = require("./SyntheticClipboardEvent");15584var SyntheticEvent = require("./SyntheticEvent");15585var SyntheticFocusEvent = require("./SyntheticFocusEvent");15586var SyntheticKeyboardEvent = require("./SyntheticKeyboardEvent");15587var SyntheticMouseEvent = require("./SyntheticMouseEvent");15588var SyntheticDragEvent = require("./SyntheticDragEvent");15589var SyntheticTouchEvent = require("./SyntheticTouchEvent");15590var SyntheticUIEvent = require("./SyntheticUIEvent");15591var SyntheticWheelEvent = require("./SyntheticWheelEvent");1559215593var getEventCharCode = require("./getEventCharCode");1559415595var invariant = require("./invariant");15596var keyOf = require("./keyOf");15597var warning = require("./warning");1559815599var topLevelTypes = EventConstants.topLevelTypes;1560015601var eventTypes = {15602blur: {15603phasedRegistrationNames: {15604bubbled: keyOf({onBlur: true}),15605captured: keyOf({onBlurCapture: true})15606}15607},15608click: {15609phasedRegistrationNames: {15610bubbled: keyOf({onClick: true}),15611captured: keyOf({onClickCapture: true})15612}15613},15614contextMenu: {15615phasedRegistrationNames: {15616bubbled: keyOf({onContextMenu: true}),15617captured: keyOf({onContextMenuCapture: true})15618}15619},15620copy: {15621phasedRegistrationNames: {15622bubbled: keyOf({onCopy: true}),15623captured: keyOf({onCopyCapture: true})15624}15625},15626cut: {15627phasedRegistrationNames: {15628bubbled: keyOf({onCut: true}),15629captured: keyOf({onCutCapture: true})15630}15631},15632doubleClick: {15633phasedRegistrationNames: {15634bubbled: keyOf({onDoubleClick: true}),15635captured: keyOf({onDoubleClickCapture: true})15636}15637},15638drag: {15639phasedRegistrationNames: {15640bubbled: keyOf({onDrag: true}),15641captured: keyOf({onDragCapture: true})15642}15643},15644dragEnd: {15645phasedRegistrationNames: {15646bubbled: keyOf({onDragEnd: true}),15647captured: keyOf({onDragEndCapture: true})15648}15649},15650dragEnter: {15651phasedRegistrationNames: {15652bubbled: keyOf({onDragEnter: true}),15653captured: keyOf({onDragEnterCapture: true})15654}15655},15656dragExit: {15657phasedRegistrationNames: {15658bubbled: keyOf({onDragExit: true}),15659captured: keyOf({onDragExitCapture: true})15660}15661},15662dragLeave: {15663phasedRegistrationNames: {15664bubbled: keyOf({onDragLeave: true}),15665captured: keyOf({onDragLeaveCapture: true})15666}15667},15668dragOver: {15669phasedRegistrationNames: {15670bubbled: keyOf({onDragOver: true}),15671captured: keyOf({onDragOverCapture: true})15672}15673},15674dragStart: {15675phasedRegistrationNames: {15676bubbled: keyOf({onDragStart: true}),15677captured: keyOf({onDragStartCapture: true})15678}15679},15680drop: {15681phasedRegistrationNames: {15682bubbled: keyOf({onDrop: true}),15683captured: keyOf({onDropCapture: true})15684}15685},15686focus: {15687phasedRegistrationNames: {15688bubbled: keyOf({onFocus: true}),15689captured: keyOf({onFocusCapture: true})15690}15691},15692input: {15693phasedRegistrationNames: {15694bubbled: keyOf({onInput: true}),15695captured: keyOf({onInputCapture: true})15696}15697},15698keyDown: {15699phasedRegistrationNames: {15700bubbled: keyOf({onKeyDown: true}),15701captured: keyOf({onKeyDownCapture: true})15702}15703},15704keyPress: {15705phasedRegistrationNames: {15706bubbled: keyOf({onKeyPress: true}),15707captured: keyOf({onKeyPressCapture: true})15708}15709},15710keyUp: {15711phasedRegistrationNames: {15712bubbled: keyOf({onKeyUp: true}),15713captured: keyOf({onKeyUpCapture: true})15714}15715},15716load: {15717phasedRegistrationNames: {15718bubbled: keyOf({onLoad: true}),15719captured: keyOf({onLoadCapture: true})15720}15721},15722error: {15723phasedRegistrationNames: {15724bubbled: keyOf({onError: true}),15725captured: keyOf({onErrorCapture: true})15726}15727},15728// Note: We do not allow listening to mouseOver events. Instead, use the15729// onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.15730mouseDown: {15731phasedRegistrationNames: {15732bubbled: keyOf({onMouseDown: true}),15733captured: keyOf({onMouseDownCapture: true})15734}15735},15736mouseMove: {15737phasedRegistrationNames: {15738bubbled: keyOf({onMouseMove: true}),15739captured: keyOf({onMouseMoveCapture: true})15740}15741},15742mouseOut: {15743phasedRegistrationNames: {15744bubbled: keyOf({onMouseOut: true}),15745captured: keyOf({onMouseOutCapture: true})15746}15747},15748mouseOver: {15749phasedRegistrationNames: {15750bubbled: keyOf({onMouseOver: true}),15751captured: keyOf({onMouseOverCapture: true})15752}15753},15754mouseUp: {15755phasedRegistrationNames: {15756bubbled: keyOf({onMouseUp: true}),15757captured: keyOf({onMouseUpCapture: true})15758}15759},15760paste: {15761phasedRegistrationNames: {15762bubbled: keyOf({onPaste: true}),15763captured: keyOf({onPasteCapture: true})15764}15765},15766reset: {15767phasedRegistrationNames: {15768bubbled: keyOf({onReset: true}),15769captured: keyOf({onResetCapture: true})15770}15771},15772scroll: {15773phasedRegistrationNames: {15774bubbled: keyOf({onScroll: true}),15775captured: keyOf({onScrollCapture: true})15776}15777},15778submit: {15779phasedRegistrationNames: {15780bubbled: keyOf({onSubmit: true}),15781captured: keyOf({onSubmitCapture: true})15782}15783},15784touchCancel: {15785phasedRegistrationNames: {15786bubbled: keyOf({onTouchCancel: true}),15787captured: keyOf({onTouchCancelCapture: true})15788}15789},15790touchEnd: {15791phasedRegistrationNames: {15792bubbled: keyOf({onTouchEnd: true}),15793captured: keyOf({onTouchEndCapture: true})15794}15795},15796touchMove: {15797phasedRegistrationNames: {15798bubbled: keyOf({onTouchMove: true}),15799captured: keyOf({onTouchMoveCapture: true})15800}15801},15802touchStart: {15803phasedRegistrationNames: {15804bubbled: keyOf({onTouchStart: true}),15805captured: keyOf({onTouchStartCapture: true})15806}15807},15808wheel: {15809phasedRegistrationNames: {15810bubbled: keyOf({onWheel: true}),15811captured: keyOf({onWheelCapture: true})15812}15813}15814};1581515816var topLevelEventsToDispatchConfig = {15817topBlur: eventTypes.blur,15818topClick: eventTypes.click,15819topContextMenu: eventTypes.contextMenu,15820topCopy: eventTypes.copy,15821topCut: eventTypes.cut,15822topDoubleClick: eventTypes.doubleClick,15823topDrag: eventTypes.drag,15824topDragEnd: eventTypes.dragEnd,15825topDragEnter: eventTypes.dragEnter,15826topDragExit: eventTypes.dragExit,15827topDragLeave: eventTypes.dragLeave,15828topDragOver: eventTypes.dragOver,15829topDragStart: eventTypes.dragStart,15830topDrop: eventTypes.drop,15831topError: eventTypes.error,15832topFocus: eventTypes.focus,15833topInput: eventTypes.input,15834topKeyDown: eventTypes.keyDown,15835topKeyPress: eventTypes.keyPress,15836topKeyUp: eventTypes.keyUp,15837topLoad: eventTypes.load,15838topMouseDown: eventTypes.mouseDown,15839topMouseMove: eventTypes.mouseMove,15840topMouseOut: eventTypes.mouseOut,15841topMouseOver: eventTypes.mouseOver,15842topMouseUp: eventTypes.mouseUp,15843topPaste: eventTypes.paste,15844topReset: eventTypes.reset,15845topScroll: eventTypes.scroll,15846topSubmit: eventTypes.submit,15847topTouchCancel: eventTypes.touchCancel,15848topTouchEnd: eventTypes.touchEnd,15849topTouchMove: eventTypes.touchMove,15850topTouchStart: eventTypes.touchStart,15851topWheel: eventTypes.wheel15852};1585315854for (var type in topLevelEventsToDispatchConfig) {15855topLevelEventsToDispatchConfig[type].dependencies = [type];15856}1585715858var SimpleEventPlugin = {1585915860eventTypes: eventTypes,1586115862/**15863* Same as the default implementation, except cancels the event when return15864* value is false. This behavior will be disabled in a future release.15865*15866* @param {object} Event to be dispatched.15867* @param {function} Application-level callback.15868* @param {string} domID DOM ID to pass to the callback.15869*/15870executeDispatch: function(event, listener, domID) {15871var returnValue = EventPluginUtils.executeDispatch(event, listener, domID);1587215873("production" !== process.env.NODE_ENV ? warning(15874typeof returnValue !== 'boolean',15875'Returning `false` from an event handler is deprecated and will be ' +15876'ignored in a future release. Instead, manually call ' +15877'e.stopPropagation() or e.preventDefault(), as appropriate.'15878) : null);1587915880if (returnValue === false) {15881event.stopPropagation();15882event.preventDefault();15883}15884},1588515886/**15887* @param {string} topLevelType Record from `EventConstants`.15888* @param {DOMEventTarget} topLevelTarget The listening component root node.15889* @param {string} topLevelTargetID ID of `topLevelTarget`.15890* @param {object} nativeEvent Native browser event.15891* @return {*} An accumulation of synthetic events.15892* @see {EventPluginHub.extractEvents}15893*/15894extractEvents: function(15895topLevelType,15896topLevelTarget,15897topLevelTargetID,15898nativeEvent) {15899var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];15900if (!dispatchConfig) {15901return null;15902}15903var EventConstructor;15904switch (topLevelType) {15905case topLevelTypes.topInput:15906case topLevelTypes.topLoad:15907case topLevelTypes.topError:15908case topLevelTypes.topReset:15909case topLevelTypes.topSubmit:15910// HTML Events15911// @see http://www.w3.org/TR/html5/index.html#events-015912EventConstructor = SyntheticEvent;15913break;15914case topLevelTypes.topKeyPress:15915// FireFox creates a keypress event for function keys too. This removes15916// the unwanted keypress events. Enter is however both printable and15917// non-printable. One would expect Tab to be as well (but it isn't).15918if (getEventCharCode(nativeEvent) === 0) {15919return null;15920}15921/* falls through */15922case topLevelTypes.topKeyDown:15923case topLevelTypes.topKeyUp:15924EventConstructor = SyntheticKeyboardEvent;15925break;15926case topLevelTypes.topBlur:15927case topLevelTypes.topFocus:15928EventConstructor = SyntheticFocusEvent;15929break;15930case topLevelTypes.topClick:15931// Firefox creates a click event on right mouse clicks. This removes the15932// unwanted click events.15933if (nativeEvent.button === 2) {15934return null;15935}15936/* falls through */15937case topLevelTypes.topContextMenu:15938case topLevelTypes.topDoubleClick:15939case topLevelTypes.topMouseDown:15940case topLevelTypes.topMouseMove:15941case topLevelTypes.topMouseOut:15942case topLevelTypes.topMouseOver:15943case topLevelTypes.topMouseUp:15944EventConstructor = SyntheticMouseEvent;15945break;15946case topLevelTypes.topDrag:15947case topLevelTypes.topDragEnd:15948case topLevelTypes.topDragEnter:15949case topLevelTypes.topDragExit:15950case topLevelTypes.topDragLeave:15951case topLevelTypes.topDragOver:15952case topLevelTypes.topDragStart:15953case topLevelTypes.topDrop:15954EventConstructor = SyntheticDragEvent;15955break;15956case topLevelTypes.topTouchCancel:15957case topLevelTypes.topTouchEnd:15958case topLevelTypes.topTouchMove:15959case topLevelTypes.topTouchStart:15960EventConstructor = SyntheticTouchEvent;15961break;15962case topLevelTypes.topScroll:15963EventConstructor = SyntheticUIEvent;15964break;15965case topLevelTypes.topWheel:15966EventConstructor = SyntheticWheelEvent;15967break;15968case topLevelTypes.topCopy:15969case topLevelTypes.topCut:15970case topLevelTypes.topPaste:15971EventConstructor = SyntheticClipboardEvent;15972break;15973}15974("production" !== process.env.NODE_ENV ? invariant(15975EventConstructor,15976'SimpleEventPlugin: Unhandled event type, `%s`.',15977topLevelType15978) : invariant(EventConstructor));15979var event = EventConstructor.getPooled(15980dispatchConfig,15981topLevelTargetID,15982nativeEvent15983);15984EventPropagators.accumulateTwoPhaseDispatches(event);15985return event;15986}1598715988};1598915990module.exports = SimpleEventPlugin;159911599215993}).call(this,require("FWaASH"))15994},{"./EventConstants":15,"./EventPluginUtils":19,"./EventPropagators":20,"./SyntheticClipboardEvent":93,"./SyntheticDragEvent":95,"./SyntheticEvent":96,"./SyntheticFocusEvent":97,"./SyntheticKeyboardEvent":99,"./SyntheticMouseEvent":100,"./SyntheticTouchEvent":101,"./SyntheticUIEvent":102,"./SyntheticWheelEvent":103,"./getEventCharCode":123,"./invariant":136,"./keyOf":142,"./warning":155,"FWaASH":1}],93:[function(require,module,exports){15995/**15996* Copyright 2013-2015, Facebook, Inc.15997* All rights reserved.15998*15999* This source code is licensed under the BSD-style license found in the16000* LICENSE file in the root directory of this source tree. An additional grant16001* of patent rights can be found in the PATENTS file in the same directory.16002*16003* @providesModule SyntheticClipboardEvent16004* @typechecks static-only16005*/1600616007'use strict';1600816009var SyntheticEvent = require("./SyntheticEvent");1601016011/**16012* @interface Event16013* @see http://www.w3.org/TR/clipboard-apis/16014*/16015var ClipboardEventInterface = {16016clipboardData: function(event) {16017return (16018'clipboardData' in event ?16019event.clipboardData :16020window.clipboardData16021);16022}16023};1602416025/**16026* @param {object} dispatchConfig Configuration used to dispatch this event.16027* @param {string} dispatchMarker Marker identifying the event target.16028* @param {object} nativeEvent Native browser event.16029* @extends {SyntheticUIEvent}16030*/16031function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {16032SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16033}1603416035SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);1603616037module.exports = SyntheticClipboardEvent;160381603916040},{"./SyntheticEvent":96}],94:[function(require,module,exports){16041/**16042* Copyright 2013-2015, Facebook, Inc.16043* All rights reserved.16044*16045* This source code is licensed under the BSD-style license found in the16046* LICENSE file in the root directory of this source tree. An additional grant16047* of patent rights can be found in the PATENTS file in the same directory.16048*16049* @providesModule SyntheticCompositionEvent16050* @typechecks static-only16051*/1605216053'use strict';1605416055var SyntheticEvent = require("./SyntheticEvent");1605616057/**16058* @interface Event16059* @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents16060*/16061var CompositionEventInterface = {16062data: null16063};1606416065/**16066* @param {object} dispatchConfig Configuration used to dispatch this event.16067* @param {string} dispatchMarker Marker identifying the event target.16068* @param {object} nativeEvent Native browser event.16069* @extends {SyntheticUIEvent}16070*/16071function SyntheticCompositionEvent(16072dispatchConfig,16073dispatchMarker,16074nativeEvent) {16075SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16076}1607716078SyntheticEvent.augmentClass(16079SyntheticCompositionEvent,16080CompositionEventInterface16081);1608216083module.exports = SyntheticCompositionEvent;160841608516086},{"./SyntheticEvent":96}],95:[function(require,module,exports){16087/**16088* Copyright 2013-2015, Facebook, Inc.16089* All rights reserved.16090*16091* This source code is licensed under the BSD-style license found in the16092* LICENSE file in the root directory of this source tree. An additional grant16093* of patent rights can be found in the PATENTS file in the same directory.16094*16095* @providesModule SyntheticDragEvent16096* @typechecks static-only16097*/1609816099'use strict';1610016101var SyntheticMouseEvent = require("./SyntheticMouseEvent");1610216103/**16104* @interface DragEvent16105* @see http://www.w3.org/TR/DOM-Level-3-Events/16106*/16107var DragEventInterface = {16108dataTransfer: null16109};1611016111/**16112* @param {object} dispatchConfig Configuration used to dispatch this event.16113* @param {string} dispatchMarker Marker identifying the event target.16114* @param {object} nativeEvent Native browser event.16115* @extends {SyntheticUIEvent}16116*/16117function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {16118SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16119}1612016121SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);1612216123module.exports = SyntheticDragEvent;161241612516126},{"./SyntheticMouseEvent":100}],96:[function(require,module,exports){16127/**16128* Copyright 2013-2015, Facebook, Inc.16129* All rights reserved.16130*16131* This source code is licensed under the BSD-style license found in the16132* LICENSE file in the root directory of this source tree. An additional grant16133* of patent rights can be found in the PATENTS file in the same directory.16134*16135* @providesModule SyntheticEvent16136* @typechecks static-only16137*/1613816139'use strict';1614016141var PooledClass = require("./PooledClass");1614216143var assign = require("./Object.assign");16144var emptyFunction = require("./emptyFunction");16145var getEventTarget = require("./getEventTarget");1614616147/**16148* @interface Event16149* @see http://www.w3.org/TR/DOM-Level-3-Events/16150*/16151var EventInterface = {16152type: null,16153target: getEventTarget,16154// currentTarget is set when dispatching; no use in copying it here16155currentTarget: emptyFunction.thatReturnsNull,16156eventPhase: null,16157bubbles: null,16158cancelable: null,16159timeStamp: function(event) {16160return event.timeStamp || Date.now();16161},16162defaultPrevented: null,16163isTrusted: null16164};1616516166/**16167* Synthetic events are dispatched by event plugins, typically in response to a16168* top-level event delegation handler.16169*16170* These systems should generally use pooling to reduce the frequency of garbage16171* collection. The system should check `isPersistent` to determine whether the16172* event should be released into the pool after being dispatched. Users that16173* need a persisted event should invoke `persist`.16174*16175* Synthetic events (and subclasses) implement the DOM Level 3 Events API by16176* normalizing browser quirks. Subclasses do not necessarily have to implement a16177* DOM interface; custom application-specific events can also subclass this.16178*16179* @param {object} dispatchConfig Configuration used to dispatch this event.16180* @param {string} dispatchMarker Marker identifying the event target.16181* @param {object} nativeEvent Native browser event.16182*/16183function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {16184this.dispatchConfig = dispatchConfig;16185this.dispatchMarker = dispatchMarker;16186this.nativeEvent = nativeEvent;1618716188var Interface = this.constructor.Interface;16189for (var propName in Interface) {16190if (!Interface.hasOwnProperty(propName)) {16191continue;16192}16193var normalize = Interface[propName];16194if (normalize) {16195this[propName] = normalize(nativeEvent);16196} else {16197this[propName] = nativeEvent[propName];16198}16199}1620016201var defaultPrevented = nativeEvent.defaultPrevented != null ?16202nativeEvent.defaultPrevented :16203nativeEvent.returnValue === false;16204if (defaultPrevented) {16205this.isDefaultPrevented = emptyFunction.thatReturnsTrue;16206} else {16207this.isDefaultPrevented = emptyFunction.thatReturnsFalse;16208}16209this.isPropagationStopped = emptyFunction.thatReturnsFalse;16210}1621116212assign(SyntheticEvent.prototype, {1621316214preventDefault: function() {16215this.defaultPrevented = true;16216var event = this.nativeEvent;16217if (event.preventDefault) {16218event.preventDefault();16219} else {16220event.returnValue = false;16221}16222this.isDefaultPrevented = emptyFunction.thatReturnsTrue;16223},1622416225stopPropagation: function() {16226var event = this.nativeEvent;16227if (event.stopPropagation) {16228event.stopPropagation();16229} else {16230event.cancelBubble = true;16231}16232this.isPropagationStopped = emptyFunction.thatReturnsTrue;16233},1623416235/**16236* We release all dispatched `SyntheticEvent`s after each event loop, adding16237* them back into the pool. This allows a way to hold onto a reference that16238* won't be added back into the pool.16239*/16240persist: function() {16241this.isPersistent = emptyFunction.thatReturnsTrue;16242},1624316244/**16245* Checks if this event should be released back into the pool.16246*16247* @return {boolean} True if this should not be released, false otherwise.16248*/16249isPersistent: emptyFunction.thatReturnsFalse,1625016251/**16252* `PooledClass` looks for `destructor` on each instance it releases.16253*/16254destructor: function() {16255var Interface = this.constructor.Interface;16256for (var propName in Interface) {16257this[propName] = null;16258}16259this.dispatchConfig = null;16260this.dispatchMarker = null;16261this.nativeEvent = null;16262}1626316264});1626516266SyntheticEvent.Interface = EventInterface;1626716268/**16269* Helper to reduce boilerplate when creating subclasses.16270*16271* @param {function} Class16272* @param {?object} Interface16273*/16274SyntheticEvent.augmentClass = function(Class, Interface) {16275var Super = this;1627616277var prototype = Object.create(Super.prototype);16278assign(prototype, Class.prototype);16279Class.prototype = prototype;16280Class.prototype.constructor = Class;1628116282Class.Interface = assign({}, Super.Interface, Interface);16283Class.augmentClass = Super.augmentClass;1628416285PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);16286};1628716288PooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);1628916290module.exports = SyntheticEvent;162911629216293},{"./Object.assign":27,"./PooledClass":28,"./emptyFunction":115,"./getEventTarget":126}],97:[function(require,module,exports){16294/**16295* Copyright 2013-2015, Facebook, Inc.16296* All rights reserved.16297*16298* This source code is licensed under the BSD-style license found in the16299* LICENSE file in the root directory of this source tree. An additional grant16300* of patent rights can be found in the PATENTS file in the same directory.16301*16302* @providesModule SyntheticFocusEvent16303* @typechecks static-only16304*/1630516306'use strict';1630716308var SyntheticUIEvent = require("./SyntheticUIEvent");1630916310/**16311* @interface FocusEvent16312* @see http://www.w3.org/TR/DOM-Level-3-Events/16313*/16314var FocusEventInterface = {16315relatedTarget: null16316};1631716318/**16319* @param {object} dispatchConfig Configuration used to dispatch this event.16320* @param {string} dispatchMarker Marker identifying the event target.16321* @param {object} nativeEvent Native browser event.16322* @extends {SyntheticUIEvent}16323*/16324function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {16325SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16326}1632716328SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);1632916330module.exports = SyntheticFocusEvent;163311633216333},{"./SyntheticUIEvent":102}],98:[function(require,module,exports){16334/**16335* Copyright 2013-2015, Facebook, Inc.16336* All rights reserved.16337*16338* This source code is licensed under the BSD-style license found in the16339* LICENSE file in the root directory of this source tree. An additional grant16340* of patent rights can be found in the PATENTS file in the same directory.16341*16342* @providesModule SyntheticInputEvent16343* @typechecks static-only16344*/1634516346'use strict';1634716348var SyntheticEvent = require("./SyntheticEvent");1634916350/**16351* @interface Event16352* @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-2013110516353* /#events-inputevents16354*/16355var InputEventInterface = {16356data: null16357};1635816359/**16360* @param {object} dispatchConfig Configuration used to dispatch this event.16361* @param {string} dispatchMarker Marker identifying the event target.16362* @param {object} nativeEvent Native browser event.16363* @extends {SyntheticUIEvent}16364*/16365function SyntheticInputEvent(16366dispatchConfig,16367dispatchMarker,16368nativeEvent) {16369SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16370}1637116372SyntheticEvent.augmentClass(16373SyntheticInputEvent,16374InputEventInterface16375);1637616377module.exports = SyntheticInputEvent;163781637916380},{"./SyntheticEvent":96}],99:[function(require,module,exports){16381/**16382* Copyright 2013-2015, Facebook, Inc.16383* All rights reserved.16384*16385* This source code is licensed under the BSD-style license found in the16386* LICENSE file in the root directory of this source tree. An additional grant16387* of patent rights can be found in the PATENTS file in the same directory.16388*16389* @providesModule SyntheticKeyboardEvent16390* @typechecks static-only16391*/1639216393'use strict';1639416395var SyntheticUIEvent = require("./SyntheticUIEvent");1639616397var getEventCharCode = require("./getEventCharCode");16398var getEventKey = require("./getEventKey");16399var getEventModifierState = require("./getEventModifierState");1640016401/**16402* @interface KeyboardEvent16403* @see http://www.w3.org/TR/DOM-Level-3-Events/16404*/16405var KeyboardEventInterface = {16406key: getEventKey,16407location: null,16408ctrlKey: null,16409shiftKey: null,16410altKey: null,16411metaKey: null,16412repeat: null,16413locale: null,16414getModifierState: getEventModifierState,16415// Legacy Interface16416charCode: function(event) {16417// `charCode` is the result of a KeyPress event and represents the value of16418// the actual printable character.1641916420// KeyPress is deprecated, but its replacement is not yet final and not16421// implemented in any major browser. Only KeyPress has charCode.16422if (event.type === 'keypress') {16423return getEventCharCode(event);16424}16425return 0;16426},16427keyCode: function(event) {16428// `keyCode` is the result of a KeyDown/Up event and represents the value of16429// physical keyboard key.1643016431// The actual meaning of the value depends on the users' keyboard layout16432// which cannot be detected. Assuming that it is a US keyboard layout16433// provides a surprisingly accurate mapping for US and European users.16434// Due to this, it is left to the user to implement at this time.16435if (event.type === 'keydown' || event.type === 'keyup') {16436return event.keyCode;16437}16438return 0;16439},16440which: function(event) {16441// `which` is an alias for either `keyCode` or `charCode` depending on the16442// type of the event.16443if (event.type === 'keypress') {16444return getEventCharCode(event);16445}16446if (event.type === 'keydown' || event.type === 'keyup') {16447return event.keyCode;16448}16449return 0;16450}16451};1645216453/**16454* @param {object} dispatchConfig Configuration used to dispatch this event.16455* @param {string} dispatchMarker Marker identifying the event target.16456* @param {object} nativeEvent Native browser event.16457* @extends {SyntheticUIEvent}16458*/16459function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {16460SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16461}1646216463SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);1646416465module.exports = SyntheticKeyboardEvent;164661646716468},{"./SyntheticUIEvent":102,"./getEventCharCode":123,"./getEventKey":124,"./getEventModifierState":125}],100:[function(require,module,exports){16469/**16470* Copyright 2013-2015, Facebook, Inc.16471* All rights reserved.16472*16473* This source code is licensed under the BSD-style license found in the16474* LICENSE file in the root directory of this source tree. An additional grant16475* of patent rights can be found in the PATENTS file in the same directory.16476*16477* @providesModule SyntheticMouseEvent16478* @typechecks static-only16479*/1648016481'use strict';1648216483var SyntheticUIEvent = require("./SyntheticUIEvent");16484var ViewportMetrics = require("./ViewportMetrics");1648516486var getEventModifierState = require("./getEventModifierState");1648716488/**16489* @interface MouseEvent16490* @see http://www.w3.org/TR/DOM-Level-3-Events/16491*/16492var MouseEventInterface = {16493screenX: null,16494screenY: null,16495clientX: null,16496clientY: null,16497ctrlKey: null,16498shiftKey: null,16499altKey: null,16500metaKey: null,16501getModifierState: getEventModifierState,16502button: function(event) {16503// Webkit, Firefox, IE9+16504// which: 1 2 316505// button: 0 1 2 (standard)16506var button = event.button;16507if ('which' in event) {16508return button;16509}16510// IE<916511// which: undefined16512// button: 0 0 016513// button: 1 4 2 (onmouseup)16514return button === 2 ? 2 : button === 4 ? 1 : 0;16515},16516buttons: null,16517relatedTarget: function(event) {16518return event.relatedTarget || (16519((event.fromElement === event.srcElement ? event.toElement : event.fromElement))16520);16521},16522// "Proprietary" Interface.16523pageX: function(event) {16524return 'pageX' in event ?16525event.pageX :16526event.clientX + ViewportMetrics.currentScrollLeft;16527},16528pageY: function(event) {16529return 'pageY' in event ?16530event.pageY :16531event.clientY + ViewportMetrics.currentScrollTop;16532}16533};1653416535/**16536* @param {object} dispatchConfig Configuration used to dispatch this event.16537* @param {string} dispatchMarker Marker identifying the event target.16538* @param {object} nativeEvent Native browser event.16539* @extends {SyntheticUIEvent}16540*/16541function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {16542SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16543}1654416545SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);1654616547module.exports = SyntheticMouseEvent;165481654916550},{"./SyntheticUIEvent":102,"./ViewportMetrics":105,"./getEventModifierState":125}],101:[function(require,module,exports){16551/**16552* Copyright 2013-2015, Facebook, Inc.16553* All rights reserved.16554*16555* This source code is licensed under the BSD-style license found in the16556* LICENSE file in the root directory of this source tree. An additional grant16557* of patent rights can be found in the PATENTS file in the same directory.16558*16559* @providesModule SyntheticTouchEvent16560* @typechecks static-only16561*/1656216563'use strict';1656416565var SyntheticUIEvent = require("./SyntheticUIEvent");1656616567var getEventModifierState = require("./getEventModifierState");1656816569/**16570* @interface TouchEvent16571* @see http://www.w3.org/TR/touch-events/16572*/16573var TouchEventInterface = {16574touches: null,16575targetTouches: null,16576changedTouches: null,16577altKey: null,16578metaKey: null,16579ctrlKey: null,16580shiftKey: null,16581getModifierState: getEventModifierState16582};1658316584/**16585* @param {object} dispatchConfig Configuration used to dispatch this event.16586* @param {string} dispatchMarker Marker identifying the event target.16587* @param {object} nativeEvent Native browser event.16588* @extends {SyntheticUIEvent}16589*/16590function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {16591SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16592}1659316594SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);1659516596module.exports = SyntheticTouchEvent;165971659816599},{"./SyntheticUIEvent":102,"./getEventModifierState":125}],102:[function(require,module,exports){16600/**16601* Copyright 2013-2015, Facebook, Inc.16602* All rights reserved.16603*16604* This source code is licensed under the BSD-style license found in the16605* LICENSE file in the root directory of this source tree. An additional grant16606* of patent rights can be found in the PATENTS file in the same directory.16607*16608* @providesModule SyntheticUIEvent16609* @typechecks static-only16610*/1661116612'use strict';1661316614var SyntheticEvent = require("./SyntheticEvent");1661516616var getEventTarget = require("./getEventTarget");1661716618/**16619* @interface UIEvent16620* @see http://www.w3.org/TR/DOM-Level-3-Events/16621*/16622var UIEventInterface = {16623view: function(event) {16624if (event.view) {16625return event.view;16626}1662716628var target = getEventTarget(event);16629if (target != null && target.window === target) {16630// target is a window object16631return target;16632}1663316634var doc = target.ownerDocument;16635// TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.16636if (doc) {16637return doc.defaultView || doc.parentWindow;16638} else {16639return window;16640}16641},16642detail: function(event) {16643return event.detail || 0;16644}16645};1664616647/**16648* @param {object} dispatchConfig Configuration used to dispatch this event.16649* @param {string} dispatchMarker Marker identifying the event target.16650* @param {object} nativeEvent Native browser event.16651* @extends {SyntheticEvent}16652*/16653function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {16654SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16655}1665616657SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);1665816659module.exports = SyntheticUIEvent;166601666116662},{"./SyntheticEvent":96,"./getEventTarget":126}],103:[function(require,module,exports){16663/**16664* Copyright 2013-2015, Facebook, Inc.16665* All rights reserved.16666*16667* This source code is licensed under the BSD-style license found in the16668* LICENSE file in the root directory of this source tree. An additional grant16669* of patent rights can be found in the PATENTS file in the same directory.16670*16671* @providesModule SyntheticWheelEvent16672* @typechecks static-only16673*/1667416675'use strict';1667616677var SyntheticMouseEvent = require("./SyntheticMouseEvent");1667816679/**16680* @interface WheelEvent16681* @see http://www.w3.org/TR/DOM-Level-3-Events/16682*/16683var WheelEventInterface = {16684deltaX: function(event) {16685return (16686'deltaX' in event ? event.deltaX :16687// Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).16688'wheelDeltaX' in event ? -event.wheelDeltaX : 016689);16690},16691deltaY: function(event) {16692return (16693'deltaY' in event ? event.deltaY :16694// Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).16695'wheelDeltaY' in event ? -event.wheelDeltaY :16696// Fallback to `wheelDelta` for IE<9 and normalize (down is positive).16697'wheelDelta' in event ? -event.wheelDelta : 016698);16699},16700deltaZ: null,1670116702// Browsers without "deltaMode" is reporting in raw wheel delta where one16703// notch on the scroll is always +/- 120, roughly equivalent to pixels.16704// A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or16705// ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.16706deltaMode: null16707};1670816709/**16710* @param {object} dispatchConfig Configuration used to dispatch this event.16711* @param {string} dispatchMarker Marker identifying the event target.16712* @param {object} nativeEvent Native browser event.16713* @extends {SyntheticMouseEvent}16714*/16715function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {16716SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);16717}1671816719SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);1672016721module.exports = SyntheticWheelEvent;167221672316724},{"./SyntheticMouseEvent":100}],104:[function(require,module,exports){16725(function (process){16726/**16727* Copyright 2013-2015, Facebook, Inc.16728* All rights reserved.16729*16730* This source code is licensed under the BSD-style license found in the16731* LICENSE file in the root directory of this source tree. An additional grant16732* of patent rights can be found in the PATENTS file in the same directory.16733*16734* @providesModule Transaction16735*/1673616737'use strict';1673816739var invariant = require("./invariant");1674016741/**16742* `Transaction` creates a black box that is able to wrap any method such that16743* certain invariants are maintained before and after the method is invoked16744* (Even if an exception is thrown while invoking the wrapped method). Whoever16745* instantiates a transaction can provide enforcers of the invariants at16746* creation time. The `Transaction` class itself will supply one additional16747* automatic invariant for you - the invariant that any transaction instance16748* should not be run while it is already being run. You would typically create a16749* single instance of a `Transaction` for reuse multiple times, that potentially16750* is used to wrap several different methods. Wrappers are extremely simple -16751* they only require implementing two methods.16752*16753* <pre>16754* wrappers (injected at creation time)16755* + +16756* | |16757* +-----------------|--------|--------------+16758* | v | |16759* | +---------------+ | |16760* | +--| wrapper1 |---|----+ |16761* | | +---------------+ v | |16762* | | +-------------+ | |16763* | | +----| wrapper2 |--------+ |16764* | | | +-------------+ | | |16765* | | | | | |16766* | v v v v | wrapper16767* | +---+ +---+ +---------+ +---+ +---+ | invariants16768* perform(anyMethod) | | | | | | | | | | | | maintained16769* +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->16770* | | | | | | | | | | | |16771* | | | | | | | | | | | |16772* | | | | | | | | | | | |16773* | +---+ +---+ +---------+ +---+ +---+ |16774* | initialize close |16775* +-----------------------------------------+16776* </pre>16777*16778* Use cases:16779* - Preserving the input selection ranges before/after reconciliation.16780* Restoring selection even in the event of an unexpected error.16781* - Deactivating events while rearranging the DOM, preventing blurs/focuses,16782* while guaranteeing that afterwards, the event system is reactivated.16783* - Flushing a queue of collected DOM mutations to the main UI thread after a16784* reconciliation takes place in a worker thread.16785* - Invoking any collected `componentDidUpdate` callbacks after rendering new16786* content.16787* - (Future use case): Wrapping particular flushes of the `ReactWorker` queue16788* to preserve the `scrollTop` (an automatic scroll aware DOM).16789* - (Future use case): Layout calculations before and after DOM updates.16790*16791* Transactional plugin API:16792* - A module that has an `initialize` method that returns any precomputation.16793* - and a `close` method that accepts the precomputation. `close` is invoked16794* when the wrapped process is completed, or has failed.16795*16796* @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules16797* that implement `initialize` and `close`.16798* @return {Transaction} Single transaction for reuse in thread.16799*16800* @class Transaction16801*/16802var Mixin = {16803/**16804* Sets up this instance so that it is prepared for collecting metrics. Does16805* so such that this setup method may be used on an instance that is already16806* initialized, in a way that does not consume additional memory upon reuse.16807* That can be useful if you decide to make your subclass of this mixin a16808* "PooledClass".16809*/16810reinitializeTransaction: function() {16811this.transactionWrappers = this.getTransactionWrappers();16812if (!this.wrapperInitData) {16813this.wrapperInitData = [];16814} else {16815this.wrapperInitData.length = 0;16816}16817this._isInTransaction = false;16818},1681916820_isInTransaction: false,1682116822/**16823* @abstract16824* @return {Array<TransactionWrapper>} Array of transaction wrappers.16825*/16826getTransactionWrappers: null,1682716828isInTransaction: function() {16829return !!this._isInTransaction;16830},1683116832/**16833* Executes the function within a safety window. Use this for the top level16834* methods that result in large amounts of computation/mutations that would16835* need to be safety checked.16836*16837* @param {function} method Member of scope to call.16838* @param {Object} scope Scope to invoke from.16839* @param {Object?=} args... Arguments to pass to the method (optional).16840* Helps prevent need to bind in many cases.16841* @return Return value from `method`.16842*/16843perform: function(method, scope, a, b, c, d, e, f) {16844("production" !== process.env.NODE_ENV ? invariant(16845!this.isInTransaction(),16846'Transaction.perform(...): Cannot initialize a transaction when there ' +16847'is already an outstanding transaction.'16848) : invariant(!this.isInTransaction()));16849var errorThrown;16850var ret;16851try {16852this._isInTransaction = true;16853// Catching errors makes debugging more difficult, so we start with16854// errorThrown set to true before setting it to false after calling16855// close -- if it's still set to true in the finally block, it means16856// one of these calls threw.16857errorThrown = true;16858this.initializeAll(0);16859ret = method.call(scope, a, b, c, d, e, f);16860errorThrown = false;16861} finally {16862try {16863if (errorThrown) {16864// If `method` throws, prefer to show that stack trace over any thrown16865// by invoking `closeAll`.16866try {16867this.closeAll(0);16868} catch (err) {16869}16870} else {16871// Since `method` didn't throw, we don't want to silence the exception16872// here.16873this.closeAll(0);16874}16875} finally {16876this._isInTransaction = false;16877}16878}16879return ret;16880},1688116882initializeAll: function(startIndex) {16883var transactionWrappers = this.transactionWrappers;16884for (var i = startIndex; i < transactionWrappers.length; i++) {16885var wrapper = transactionWrappers[i];16886try {16887// Catching errors makes debugging more difficult, so we start with the16888// OBSERVED_ERROR state before overwriting it with the real return value16889// of initialize -- if it's still set to OBSERVED_ERROR in the finally16890// block, it means wrapper.initialize threw.16891this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;16892this.wrapperInitData[i] = wrapper.initialize ?16893wrapper.initialize.call(this) :16894null;16895} finally {16896if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {16897// The initializer for wrapper i threw an error; initialize the16898// remaining wrappers but silence any exceptions from them to ensure16899// that the first error is the one to bubble up.16900try {16901this.initializeAll(i + 1);16902} catch (err) {16903}16904}16905}16906}16907},1690816909/**16910* Invokes each of `this.transactionWrappers.close[i]` functions, passing into16911* them the respective return values of `this.transactionWrappers.init[i]`16912* (`close`rs that correspond to initializers that failed will not be16913* invoked).16914*/16915closeAll: function(startIndex) {16916("production" !== process.env.NODE_ENV ? invariant(16917this.isInTransaction(),16918'Transaction.closeAll(): Cannot close transaction when none are open.'16919) : invariant(this.isInTransaction()));16920var transactionWrappers = this.transactionWrappers;16921for (var i = startIndex; i < transactionWrappers.length; i++) {16922var wrapper = transactionWrappers[i];16923var initData = this.wrapperInitData[i];16924var errorThrown;16925try {16926// Catching errors makes debugging more difficult, so we start with16927// errorThrown set to true before setting it to false after calling16928// close -- if it's still set to true in the finally block, it means16929// wrapper.close threw.16930errorThrown = true;16931if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {16932wrapper.close.call(this, initData);16933}16934errorThrown = false;16935} finally {16936if (errorThrown) {16937// The closer for wrapper i threw an error; close the remaining16938// wrappers but silence any exceptions from them to ensure that the16939// first error is the one to bubble up.16940try {16941this.closeAll(i + 1);16942} catch (e) {16943}16944}16945}16946}16947this.wrapperInitData.length = 0;16948}16949};1695016951var Transaction = {1695216953Mixin: Mixin,1695416955/**16956* Token to look for to determine if an error occured.16957*/16958OBSERVED_ERROR: {}1695916960};1696116962module.exports = Transaction;169631696416965}).call(this,require("FWaASH"))16966},{"./invariant":136,"FWaASH":1}],105:[function(require,module,exports){16967/**16968* Copyright 2013-2015, Facebook, Inc.16969* All rights reserved.16970*16971* This source code is licensed under the BSD-style license found in the16972* LICENSE file in the root directory of this source tree. An additional grant16973* of patent rights can be found in the PATENTS file in the same directory.16974*16975* @providesModule ViewportMetrics16976*/1697716978'use strict';1697916980var ViewportMetrics = {1698116982currentScrollLeft: 0,1698316984currentScrollTop: 0,1698516986refreshScrollValues: function(scrollPosition) {16987ViewportMetrics.currentScrollLeft = scrollPosition.x;16988ViewportMetrics.currentScrollTop = scrollPosition.y;16989}1699016991};1699216993module.exports = ViewportMetrics;169941699516996},{}],106:[function(require,module,exports){16997(function (process){16998/**16999* Copyright 2014-2015, Facebook, Inc.17000* All rights reserved.17001*17002* This source code is licensed under the BSD-style license found in the17003* LICENSE file in the root directory of this source tree. An additional grant17004* of patent rights can be found in the PATENTS file in the same directory.17005*17006* @providesModule accumulateInto17007*/1700817009'use strict';1701017011var invariant = require("./invariant");1701217013/**17014*17015* Accumulates items that must not be null or undefined into the first one. This17016* is used to conserve memory by avoiding array allocations, and thus sacrifices17017* API cleanness. Since `current` can be null before being passed in and not17018* null after this function, make sure to assign it back to `current`:17019*17020* `a = accumulateInto(a, b);`17021*17022* This API should be sparingly used. Try `accumulate` for something cleaner.17023*17024* @return {*|array<*>} An accumulation of items.17025*/1702617027function accumulateInto(current, next) {17028("production" !== process.env.NODE_ENV ? invariant(17029next != null,17030'accumulateInto(...): Accumulated items must not be null or undefined.'17031) : invariant(next != null));17032if (current == null) {17033return next;17034}1703517036// Both are not empty. Warning: Never call x.concat(y) when you are not17037// certain that x is an Array (x could be a string with concat method).17038var currentIsArray = Array.isArray(current);17039var nextIsArray = Array.isArray(next);1704017041if (currentIsArray && nextIsArray) {17042current.push.apply(current, next);17043return current;17044}1704517046if (currentIsArray) {17047current.push(next);17048return current;17049}1705017051if (nextIsArray) {17052// A bit too dangerous to mutate `next`.17053return [current].concat(next);17054}1705517056return [current, next];17057}1705817059module.exports = accumulateInto;170601706117062}).call(this,require("FWaASH"))17063},{"./invariant":136,"FWaASH":1}],107:[function(require,module,exports){17064/**17065* Copyright 2013-2015, Facebook, Inc.17066* All rights reserved.17067*17068* This source code is licensed under the BSD-style license found in the17069* LICENSE file in the root directory of this source tree. An additional grant17070* of patent rights can be found in the PATENTS file in the same directory.17071*17072* @providesModule adler3217073*/1707417075/* jslint bitwise:true */1707617077'use strict';1707817079var MOD = 65521;1708017081// This is a clean-room implementation of adler32 designed for detecting17082// if markup is not what we expect it to be. It does not need to be17083// cryptographically strong, only reasonably good at detecting if markup17084// generated on the server is different than that on the client.17085function adler32(data) {17086var a = 1;17087var b = 0;17088for (var i = 0; i < data.length; i++) {17089a = (a + data.charCodeAt(i)) % MOD;17090b = (b + a) % MOD;17091}17092return a | (b << 16);17093}1709417095module.exports = adler32;170961709717098},{}],108:[function(require,module,exports){17099/**17100* Copyright 2013-2015, Facebook, Inc.17101* All rights reserved.17102*17103* This source code is licensed under the BSD-style license found in the17104* LICENSE file in the root directory of this source tree. An additional grant17105* of patent rights can be found in the PATENTS file in the same directory.17106*17107* @providesModule camelize17108* @typechecks17109*/1711017111var _hyphenPattern = /-(.)/g;1711217113/**17114* Camelcases a hyphenated string, for example:17115*17116* > camelize('background-color')17117* < "backgroundColor"17118*17119* @param {string} string17120* @return {string}17121*/17122function camelize(string) {17123return string.replace(_hyphenPattern, function(_, character) {17124return character.toUpperCase();17125});17126}1712717128module.exports = camelize;171291713017131},{}],109:[function(require,module,exports){17132/**17133* Copyright 2014-2015, Facebook, Inc.17134* All rights reserved.17135*17136* This source code is licensed under the BSD-style license found in the17137* LICENSE file in the root directory of this source tree. An additional grant17138* of patent rights can be found in the PATENTS file in the same directory.17139*17140* @providesModule camelizeStyleName17141* @typechecks17142*/1714317144"use strict";1714517146var camelize = require("./camelize");1714717148var msPattern = /^-ms-/;1714917150/**17151* Camelcases a hyphenated CSS property name, for example:17152*17153* > camelizeStyleName('background-color')17154* < "backgroundColor"17155* > camelizeStyleName('-moz-transition')17156* < "MozTransition"17157* > camelizeStyleName('-ms-transition')17158* < "msTransition"17159*17160* As Andi Smith suggests17161* (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix17162* is converted to lowercase `ms`.17163*17164* @param {string} string17165* @return {string}17166*/17167function camelizeStyleName(string) {17168return camelize(string.replace(msPattern, 'ms-'));17169}1717017171module.exports = camelizeStyleName;171721717317174},{"./camelize":108}],110:[function(require,module,exports){17175/**17176* Copyright 2013-2015, Facebook, Inc.17177* All rights reserved.17178*17179* This source code is licensed under the BSD-style license found in the17180* LICENSE file in the root directory of this source tree. An additional grant17181* of patent rights can be found in the PATENTS file in the same directory.17182*17183* @providesModule containsNode17184* @typechecks17185*/1718617187var isTextNode = require("./isTextNode");1718817189/*jslint bitwise:true */1719017191/**17192* Checks if a given DOM node contains or is another DOM node.17193*17194* @param {?DOMNode} outerNode Outer DOM node.17195* @param {?DOMNode} innerNode Inner DOM node.17196* @return {boolean} True if `outerNode` contains or is `innerNode`.17197*/17198function containsNode(outerNode, innerNode) {17199if (!outerNode || !innerNode) {17200return false;17201} else if (outerNode === innerNode) {17202return true;17203} else if (isTextNode(outerNode)) {17204return false;17205} else if (isTextNode(innerNode)) {17206return containsNode(outerNode, innerNode.parentNode);17207} else if (outerNode.contains) {17208return outerNode.contains(innerNode);17209} else if (outerNode.compareDocumentPosition) {17210return !!(outerNode.compareDocumentPosition(innerNode) & 16);17211} else {17212return false;17213}17214}1721517216module.exports = containsNode;172171721817219},{"./isTextNode":140}],111:[function(require,module,exports){17220/**17221* Copyright 2013-2015, Facebook, Inc.17222* All rights reserved.17223*17224* This source code is licensed under the BSD-style license found in the17225* LICENSE file in the root directory of this source tree. An additional grant17226* of patent rights can be found in the PATENTS file in the same directory.17227*17228* @providesModule createArrayFromMixed17229* @typechecks17230*/1723117232var toArray = require("./toArray");1723317234/**17235* Perform a heuristic test to determine if an object is "array-like".17236*17237* A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"17238* Joshu replied: "Mu."17239*17240* This function determines if its argument has "array nature": it returns17241* true if the argument is an actual array, an `arguments' object, or an17242* HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).17243*17244* It will return false for other array-like objects like Filelist.17245*17246* @param {*} obj17247* @return {boolean}17248*/17249function hasArrayNature(obj) {17250return (17251// not null/false17252!!obj &&17253// arrays are objects, NodeLists are functions in Safari17254(typeof obj == 'object' || typeof obj == 'function') &&17255// quacks like an array17256('length' in obj) &&17257// not window17258!('setInterval' in obj) &&17259// no DOM node should be considered an array-like17260// a 'select' element has 'length' and 'item' properties on IE817261(typeof obj.nodeType != 'number') &&17262(17263// a real array17264(// HTMLCollection/NodeList17265(Array.isArray(obj) ||17266// arguments17267('callee' in obj) || 'item' in obj))17268)17269);17270}1727117272/**17273* Ensure that the argument is an array by wrapping it in an array if it is not.17274* Creates a copy of the argument if it is already an array.17275*17276* This is mostly useful idiomatically:17277*17278* var createArrayFromMixed = require('createArrayFromMixed');17279*17280* function takesOneOrMoreThings(things) {17281* things = createArrayFromMixed(things);17282* ...17283* }17284*17285* This allows you to treat `things' as an array, but accept scalars in the API.17286*17287* If you need to convert an array-like object, like `arguments`, into an array17288* use toArray instead.17289*17290* @param {*} obj17291* @return {array}17292*/17293function createArrayFromMixed(obj) {17294if (!hasArrayNature(obj)) {17295return [obj];17296} else if (Array.isArray(obj)) {17297return obj.slice();17298} else {17299return toArray(obj);17300}17301}1730217303module.exports = createArrayFromMixed;173041730517306},{"./toArray":153}],112:[function(require,module,exports){17307(function (process){17308/**17309* Copyright 2013-2015, Facebook, Inc.17310* All rights reserved.17311*17312* This source code is licensed under the BSD-style license found in the17313* LICENSE file in the root directory of this source tree. An additional grant17314* of patent rights can be found in the PATENTS file in the same directory.17315*17316* @providesModule createFullPageComponent17317* @typechecks17318*/1731917320'use strict';1732117322// Defeat circular references by requiring this directly.17323var ReactClass = require("./ReactClass");17324var ReactElement = require("./ReactElement");1732517326var invariant = require("./invariant");1732717328/**17329* Create a component that will throw an exception when unmounted.17330*17331* Components like <html> <head> and <body> can't be removed or added17332* easily in a cross-browser way, however it's valuable to be able to17333* take advantage of React's reconciliation for styling and <title>17334* management. So we just document it and throw in dangerous cases.17335*17336* @param {string} tag The tag to wrap17337* @return {function} convenience constructor of new component17338*/17339function createFullPageComponent(tag) {17340var elementFactory = ReactElement.createFactory(tag);1734117342var FullPageComponent = ReactClass.createClass({17343displayName: 'ReactFullPageComponent' + tag,1734417345componentWillUnmount: function() {17346("production" !== process.env.NODE_ENV ? invariant(17347false,17348'%s tried to unmount. Because of cross-browser quirks it is ' +17349'impossible to unmount some top-level components (eg <html>, <head>, ' +17350'and <body>) reliably and efficiently. To fix this, have a single ' +17351'top-level component that never unmounts render these elements.',17352this.constructor.displayName17353) : invariant(false));17354},1735517356render: function() {17357return elementFactory(this.props);17358}17359});1736017361return FullPageComponent;17362}1736317364module.exports = createFullPageComponent;173651736617367}).call(this,require("FWaASH"))17368},{"./ReactClass":34,"./ReactElement":58,"./invariant":136,"FWaASH":1}],113:[function(require,module,exports){17369(function (process){17370/**17371* Copyright 2013-2015, Facebook, Inc.17372* All rights reserved.17373*17374* This source code is licensed under the BSD-style license found in the17375* LICENSE file in the root directory of this source tree. An additional grant17376* of patent rights can be found in the PATENTS file in the same directory.17377*17378* @providesModule createNodesFromMarkup17379* @typechecks17380*/1738117382/*jslint evil: true, sub: true */1738317384var ExecutionEnvironment = require("./ExecutionEnvironment");1738517386var createArrayFromMixed = require("./createArrayFromMixed");17387var getMarkupWrap = require("./getMarkupWrap");17388var invariant = require("./invariant");1738917390/**17391* Dummy container used to render all markup.17392*/17393var dummyNode =17394ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;1739517396/**17397* Pattern used by `getNodeName`.17398*/17399var nodeNamePattern = /^\s*<(\w+)/;1740017401/**17402* Extracts the `nodeName` of the first element in a string of markup.17403*17404* @param {string} markup String of markup.17405* @return {?string} Node name of the supplied markup.17406*/17407function getNodeName(markup) {17408var nodeNameMatch = markup.match(nodeNamePattern);17409return nodeNameMatch && nodeNameMatch[1].toLowerCase();17410}1741117412/**17413* Creates an array containing the nodes rendered from the supplied markup. The17414* optionally supplied `handleScript` function will be invoked once for each17415* <script> element that is rendered. If no `handleScript` function is supplied,17416* an exception is thrown if any <script> elements are rendered.17417*17418* @param {string} markup A string of valid HTML markup.17419* @param {?function} handleScript Invoked once for each rendered <script>.17420* @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.17421*/17422function createNodesFromMarkup(markup, handleScript) {17423var node = dummyNode;17424("production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'createNodesFromMarkup dummy not initialized') : invariant(!!dummyNode));17425var nodeName = getNodeName(markup);1742617427var wrap = nodeName && getMarkupWrap(nodeName);17428if (wrap) {17429node.innerHTML = wrap[1] + markup + wrap[2];1743017431var wrapDepth = wrap[0];17432while (wrapDepth--) {17433node = node.lastChild;17434}17435} else {17436node.innerHTML = markup;17437}1743817439var scripts = node.getElementsByTagName('script');17440if (scripts.length) {17441("production" !== process.env.NODE_ENV ? invariant(17442handleScript,17443'createNodesFromMarkup(...): Unexpected <script> element rendered.'17444) : invariant(handleScript));17445createArrayFromMixed(scripts).forEach(handleScript);17446}1744717448var nodes = createArrayFromMixed(node.childNodes);17449while (node.lastChild) {17450node.removeChild(node.lastChild);17451}17452return nodes;17453}1745417455module.exports = createNodesFromMarkup;174561745717458}).call(this,require("FWaASH"))17459},{"./ExecutionEnvironment":21,"./createArrayFromMixed":111,"./getMarkupWrap":128,"./invariant":136,"FWaASH":1}],114:[function(require,module,exports){17460/**17461* Copyright 2013-2015, Facebook, Inc.17462* All rights reserved.17463*17464* This source code is licensed under the BSD-style license found in the17465* LICENSE file in the root directory of this source tree. An additional grant17466* of patent rights can be found in the PATENTS file in the same directory.17467*17468* @providesModule dangerousStyleValue17469* @typechecks static-only17470*/1747117472'use strict';1747317474var CSSProperty = require("./CSSProperty");1747517476var isUnitlessNumber = CSSProperty.isUnitlessNumber;1747717478/**17479* Convert a value into the proper css writable value. The style name `name`17480* should be logical (no hyphens), as specified17481* in `CSSProperty.isUnitlessNumber`.17482*17483* @param {string} name CSS property name such as `topMargin`.17484* @param {*} value CSS property value such as `10px`.17485* @return {string} Normalized style value with dimensions applied.17486*/17487function dangerousStyleValue(name, value) {17488// Note that we've removed escapeTextForBrowser() calls here since the17489// whole string will be escaped when the attribute is injected into17490// the markup. If you provide unsafe user data here they can inject17491// arbitrary CSS which may be problematic (I couldn't repro this):17492// https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet17493// http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/17494// This is not an XSS hole but instead a potential CSS injection issue17495// which has lead to a greater discussion about how we're going to17496// trust URLs moving forward. See #21159011749717498var isEmpty = value == null || typeof value === 'boolean' || value === '';17499if (isEmpty) {17500return '';17501}1750217503var isNonNumeric = isNaN(value);17504if (isNonNumeric || value === 0 ||17505isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {17506return '' + value; // cast to string17507}1750817509if (typeof value === 'string') {17510value = value.trim();17511}17512return value + 'px';17513}1751417515module.exports = dangerousStyleValue;175161751717518},{"./CSSProperty":4}],115:[function(require,module,exports){17519/**17520* Copyright 2013-2015, Facebook, Inc.17521* All rights reserved.17522*17523* This source code is licensed under the BSD-style license found in the17524* LICENSE file in the root directory of this source tree. An additional grant17525* of patent rights can be found in the PATENTS file in the same directory.17526*17527* @providesModule emptyFunction17528*/1752917530function makeEmptyFunction(arg) {17531return function() {17532return arg;17533};17534}1753517536/**17537* This function accepts and discards inputs; it has no side effects. This is17538* primarily useful idiomatically for overridable function endpoints which17539* always need to be callable, since JS lacks a null-call idiom ala Cocoa.17540*/17541function emptyFunction() {}1754217543emptyFunction.thatReturns = makeEmptyFunction;17544emptyFunction.thatReturnsFalse = makeEmptyFunction(false);17545emptyFunction.thatReturnsTrue = makeEmptyFunction(true);17546emptyFunction.thatReturnsNull = makeEmptyFunction(null);17547emptyFunction.thatReturnsThis = function() { return this; };17548emptyFunction.thatReturnsArgument = function(arg) { return arg; };1754917550module.exports = emptyFunction;175511755217553},{}],116:[function(require,module,exports){17554(function (process){17555/**17556* Copyright 2013-2015, Facebook, Inc.17557* All rights reserved.17558*17559* This source code is licensed under the BSD-style license found in the17560* LICENSE file in the root directory of this source tree. An additional grant17561* of patent rights can be found in the PATENTS file in the same directory.17562*17563* @providesModule emptyObject17564*/1756517566"use strict";1756717568var emptyObject = {};1756917570if ("production" !== process.env.NODE_ENV) {17571Object.freeze(emptyObject);17572}1757317574module.exports = emptyObject;175751757617577}).call(this,require("FWaASH"))17578},{"FWaASH":1}],117:[function(require,module,exports){17579/**17580* Copyright 2013-2015, Facebook, Inc.17581* All rights reserved.17582*17583* This source code is licensed under the BSD-style license found in the17584* LICENSE file in the root directory of this source tree. An additional grant17585* of patent rights can be found in the PATENTS file in the same directory.17586*17587* @providesModule escapeTextContentForBrowser17588*/1758917590'use strict';1759117592var ESCAPE_LOOKUP = {17593'&': '&',17594'>': '>',17595'<': '<',17596'"': '"',17597'\'': '''17598};1759917600var ESCAPE_REGEX = /[&><"']/g;1760117602function escaper(match) {17603return ESCAPE_LOOKUP[match];17604}1760517606/**17607* Escapes text to prevent scripting attacks.17608*17609* @param {*} text Text value to escape.17610* @return {string} An escaped string.17611*/17612function escapeTextContentForBrowser(text) {17613return ('' + text).replace(ESCAPE_REGEX, escaper);17614}1761517616module.exports = escapeTextContentForBrowser;176171761817619},{}],118:[function(require,module,exports){17620(function (process){17621/**17622* Copyright 2013-2015, Facebook, Inc.17623* All rights reserved.17624*17625* This source code is licensed under the BSD-style license found in the17626* LICENSE file in the root directory of this source tree. An additional grant17627* of patent rights can be found in the PATENTS file in the same directory.17628*17629* @providesModule findDOMNode17630* @typechecks static-only17631*/1763217633'use strict';1763417635var ReactCurrentOwner = require("./ReactCurrentOwner");17636var ReactInstanceMap = require("./ReactInstanceMap");17637var ReactMount = require("./ReactMount");1763817639var invariant = require("./invariant");17640var isNode = require("./isNode");17641var warning = require("./warning");1764217643/**17644* Returns the DOM node rendered by this element.17645*17646* @param {ReactComponent|DOMElement} componentOrElement17647* @return {DOMElement} The root node of this element.17648*/17649function findDOMNode(componentOrElement) {17650if ("production" !== process.env.NODE_ENV) {17651var owner = ReactCurrentOwner.current;17652if (owner !== null) {17653("production" !== process.env.NODE_ENV ? warning(17654owner._warnedAboutRefsInRender,17655'%s is accessing getDOMNode or findDOMNode inside its render(). ' +17656'render() should be a pure function of props and state. It should ' +17657'never access something that requires stale data from the previous ' +17658'render, such as refs. Move this logic to componentDidMount and ' +17659'componentDidUpdate instead.',17660owner.getName() || 'A component'17661) : null);17662owner._warnedAboutRefsInRender = true;17663}17664}17665if (componentOrElement == null) {17666return null;17667}17668if (isNode(componentOrElement)) {17669return componentOrElement;17670}17671if (ReactInstanceMap.has(componentOrElement)) {17672return ReactMount.getNodeFromInstance(componentOrElement);17673}17674("production" !== process.env.NODE_ENV ? invariant(17675componentOrElement.render == null ||17676typeof componentOrElement.render !== 'function',17677'Component (with keys: %s) contains `render` method ' +17678'but is not mounted in the DOM',17679Object.keys(componentOrElement)17680) : invariant(componentOrElement.render == null ||17681typeof componentOrElement.render !== 'function'));17682("production" !== process.env.NODE_ENV ? invariant(17683false,17684'Element appears to be neither ReactComponent nor DOMNode (keys: %s)',17685Object.keys(componentOrElement)17686) : invariant(false));17687}1768817689module.exports = findDOMNode;176901769117692}).call(this,require("FWaASH"))17693},{"./ReactCurrentOwner":40,"./ReactInstanceMap":68,"./ReactMount":71,"./invariant":136,"./isNode":138,"./warning":155,"FWaASH":1}],119:[function(require,module,exports){17694(function (process){17695/**17696* Copyright 2013-2015, Facebook, Inc.17697* All rights reserved.17698*17699* This source code is licensed under the BSD-style license found in the17700* LICENSE file in the root directory of this source tree. An additional grant17701* of patent rights can be found in the PATENTS file in the same directory.17702*17703* @providesModule flattenChildren17704*/1770517706'use strict';1770717708var traverseAllChildren = require("./traverseAllChildren");17709var warning = require("./warning");1771017711/**17712* @param {function} traverseContext Context passed through traversal.17713* @param {?ReactComponent} child React child component.17714* @param {!string} name String name of key path to child.17715*/17716function flattenSingleChildIntoContext(traverseContext, child, name) {17717// We found a component instance.17718var result = traverseContext;17719var keyUnique = !result.hasOwnProperty(name);17720if ("production" !== process.env.NODE_ENV) {17721("production" !== process.env.NODE_ENV ? warning(17722keyUnique,17723'flattenChildren(...): Encountered two children with the same key, ' +17724'`%s`. Child keys must be unique; when two children share a key, only ' +17725'the first child will be used.',17726name17727) : null);17728}17729if (keyUnique && child != null) {17730result[name] = child;17731}17732}1773317734/**17735* Flattens children that are typically specified as `props.children`. Any null17736* children will not be included in the resulting object.17737* @return {!object} flattened children keyed by name.17738*/17739function flattenChildren(children) {17740if (children == null) {17741return children;17742}17743var result = {};17744traverseAllChildren(children, flattenSingleChildIntoContext, result);17745return result;17746}1774717748module.exports = flattenChildren;177491775017751}).call(this,require("FWaASH"))17752},{"./traverseAllChildren":154,"./warning":155,"FWaASH":1}],120:[function(require,module,exports){17753/**17754* Copyright 2014-2015, Facebook, Inc.17755* All rights reserved.17756*17757* This source code is licensed under the BSD-style license found in the17758* LICENSE file in the root directory of this source tree. An additional grant17759* of patent rights can be found in the PATENTS file in the same directory.17760*17761* @providesModule focusNode17762*/1776317764"use strict";1776517766/**17767* @param {DOMElement} node input/textarea to focus17768*/17769function focusNode(node) {17770// IE8 can throw "Can't move focus to the control because it is invisible,17771// not enabled, or of a type that does not accept the focus." for all kinds of17772// reasons that are too expensive and fragile to test.17773try {17774node.focus();17775} catch(e) {17776}17777}1777817779module.exports = focusNode;177801778117782},{}],121:[function(require,module,exports){17783/**17784* Copyright 2013-2015, Facebook, Inc.17785* All rights reserved.17786*17787* This source code is licensed under the BSD-style license found in the17788* LICENSE file in the root directory of this source tree. An additional grant17789* of patent rights can be found in the PATENTS file in the same directory.17790*17791* @providesModule forEachAccumulated17792*/1779317794'use strict';1779517796/**17797* @param {array} an "accumulation" of items which is either an Array or17798* a single item. Useful when paired with the `accumulate` module. This is a17799* simple utility that allows us to reason about a collection of items, but17800* handling the case when there is exactly one item (and we do not need to17801* allocate an array).17802*/17803var forEachAccumulated = function(arr, cb, scope) {17804if (Array.isArray(arr)) {17805arr.forEach(cb, scope);17806} else if (arr) {17807cb.call(scope, arr);17808}17809};1781017811module.exports = forEachAccumulated;178121781317814},{}],122:[function(require,module,exports){17815/**17816* Copyright 2013-2015, Facebook, Inc.17817* All rights reserved.17818*17819* This source code is licensed under the BSD-style license found in the17820* LICENSE file in the root directory of this source tree. An additional grant17821* of patent rights can be found in the PATENTS file in the same directory.17822*17823* @providesModule getActiveElement17824* @typechecks17825*/1782617827/**17828* Same as document.activeElement but wraps in a try-catch block. In IE it is17829* not safe to call document.activeElement if there is nothing focused.17830*17831* The activeElement will be null only if the document body is not yet defined.17832*/17833function getActiveElement() /*?DOMElement*/ {17834try {17835return document.activeElement || document.body;17836} catch (e) {17837return document.body;17838}17839}1784017841module.exports = getActiveElement;178421784317844},{}],123:[function(require,module,exports){17845/**17846* Copyright 2013-2015, Facebook, Inc.17847* All rights reserved.17848*17849* This source code is licensed under the BSD-style license found in the17850* LICENSE file in the root directory of this source tree. An additional grant17851* of patent rights can be found in the PATENTS file in the same directory.17852*17853* @providesModule getEventCharCode17854* @typechecks static-only17855*/1785617857'use strict';1785817859/**17860* `charCode` represents the actual "character code" and is safe to use with17861* `String.fromCharCode`. As such, only keys that correspond to printable17862* characters produce a valid `charCode`, the only exception to this is Enter.17863* The Tab-key is considered non-printable and does not have a `charCode`,17864* presumably because it does not produce a tab-character in browsers.17865*17866* @param {object} nativeEvent Native browser event.17867* @return {string} Normalized `charCode` property.17868*/17869function getEventCharCode(nativeEvent) {17870var charCode;17871var keyCode = nativeEvent.keyCode;1787217873if ('charCode' in nativeEvent) {17874charCode = nativeEvent.charCode;1787517876// FF does not set `charCode` for the Enter-key, check against `keyCode`.17877if (charCode === 0 && keyCode === 13) {17878charCode = 13;17879}17880} else {17881// IE8 does not implement `charCode`, but `keyCode` has the correct value.17882charCode = keyCode;17883}1788417885// Some non-printable keys are reported in `charCode`/`keyCode`, discard them.17886// Must not discard the (non-)printable Enter-key.17887if (charCode >= 32 || charCode === 13) {17888return charCode;17889}1789017891return 0;17892}1789317894module.exports = getEventCharCode;178951789617897},{}],124:[function(require,module,exports){17898/**17899* Copyright 2013-2015, Facebook, Inc.17900* All rights reserved.17901*17902* This source code is licensed under the BSD-style license found in the17903* LICENSE file in the root directory of this source tree. An additional grant17904* of patent rights can be found in the PATENTS file in the same directory.17905*17906* @providesModule getEventKey17907* @typechecks static-only17908*/1790917910'use strict';1791117912var getEventCharCode = require("./getEventCharCode");1791317914/**17915* Normalization of deprecated HTML5 `key` values17916* @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names17917*/17918var normalizeKey = {17919'Esc': 'Escape',17920'Spacebar': ' ',17921'Left': 'ArrowLeft',17922'Up': 'ArrowUp',17923'Right': 'ArrowRight',17924'Down': 'ArrowDown',17925'Del': 'Delete',17926'Win': 'OS',17927'Menu': 'ContextMenu',17928'Apps': 'ContextMenu',17929'Scroll': 'ScrollLock',17930'MozPrintableKey': 'Unidentified'17931};1793217933/**17934* Translation from legacy `keyCode` to HTML5 `key`17935* Only special keys supported, all others depend on keyboard layout or browser17936* @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names17937*/17938var translateToKey = {179398: 'Backspace',179409: 'Tab',1794112: 'Clear',1794213: 'Enter',1794316: 'Shift',1794417: 'Control',1794518: 'Alt',1794619: 'Pause',1794720: 'CapsLock',1794827: 'Escape',1794932: ' ',1795033: 'PageUp',1795134: 'PageDown',1795235: 'End',1795336: 'Home',1795437: 'ArrowLeft',1795538: 'ArrowUp',1795639: 'ArrowRight',1795740: 'ArrowDown',1795845: 'Insert',1795946: 'Delete',17960112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',17961118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',17962144: 'NumLock',17963145: 'ScrollLock',17964224: 'Meta'17965};1796617967/**17968* @param {object} nativeEvent Native browser event.17969* @return {string} Normalized `key` property.17970*/17971function getEventKey(nativeEvent) {17972if (nativeEvent.key) {17973// Normalize inconsistent values reported by browsers due to17974// implementations of a working draft specification.1797517976// FireFox implements `key` but returns `MozPrintableKey` for all17977// printable characters (normalized to `Unidentified`), ignore it.17978var key = normalizeKey[nativeEvent.key] || nativeEvent.key;17979if (key !== 'Unidentified') {17980return key;17981}17982}1798317984// Browser does not implement `key`, polyfill as much of it as we can.17985if (nativeEvent.type === 'keypress') {17986var charCode = getEventCharCode(nativeEvent);1798717988// The enter-key is technically both printable and non-printable and can17989// thus be captured by `keypress`, no other non-printable key should.17990return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);17991}17992if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {17993// While user keyboard layout determines the actual meaning of each17994// `keyCode` value, almost all function keys have a universal value.17995return translateToKey[nativeEvent.keyCode] || 'Unidentified';17996}17997return '';17998}1799918000module.exports = getEventKey;180011800218003},{"./getEventCharCode":123}],125:[function(require,module,exports){18004/**18005* Copyright 2013-2015, Facebook, Inc.18006* All rights reserved.18007*18008* This source code is licensed under the BSD-style license found in the18009* LICENSE file in the root directory of this source tree. An additional grant18010* of patent rights can be found in the PATENTS file in the same directory.18011*18012* @providesModule getEventModifierState18013* @typechecks static-only18014*/1801518016'use strict';1801718018/**18019* Translation from modifier key to the associated property in the event.18020* @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers18021*/1802218023var modifierKeyToProp = {18024'Alt': 'altKey',18025'Control': 'ctrlKey',18026'Meta': 'metaKey',18027'Shift': 'shiftKey'18028};1802918030// IE8 does not implement getModifierState so we simply map it to the only18031// modifier keys exposed by the event itself, does not support Lock-keys.18032// Currently, all major browsers except Chrome seems to support Lock-keys.18033function modifierStateGetter(keyArg) {18034/*jshint validthis:true */18035var syntheticEvent = this;18036var nativeEvent = syntheticEvent.nativeEvent;18037if (nativeEvent.getModifierState) {18038return nativeEvent.getModifierState(keyArg);18039}18040var keyProp = modifierKeyToProp[keyArg];18041return keyProp ? !!nativeEvent[keyProp] : false;18042}1804318044function getEventModifierState(nativeEvent) {18045return modifierStateGetter;18046}1804718048module.exports = getEventModifierState;180491805018051},{}],126:[function(require,module,exports){18052/**18053* Copyright 2013-2015, Facebook, Inc.18054* All rights reserved.18055*18056* This source code is licensed under the BSD-style license found in the18057* LICENSE file in the root directory of this source tree. An additional grant18058* of patent rights can be found in the PATENTS file in the same directory.18059*18060* @providesModule getEventTarget18061* @typechecks static-only18062*/1806318064'use strict';1806518066/**18067* Gets the target node from a native browser event by accounting for18068* inconsistencies in browser DOM APIs.18069*18070* @param {object} nativeEvent Native browser event.18071* @return {DOMEventTarget} Target node.18072*/18073function getEventTarget(nativeEvent) {18074var target = nativeEvent.target || nativeEvent.srcElement || window;18075// Safari may fire events on text nodes (Node.TEXT_NODE is 3).18076// @see http://www.quirksmode.org/js/events_properties.html18077return target.nodeType === 3 ? target.parentNode : target;18078}1807918080module.exports = getEventTarget;180811808218083},{}],127:[function(require,module,exports){18084/**18085* Copyright 2013-2015, Facebook, Inc.18086* All rights reserved.18087*18088* This source code is licensed under the BSD-style license found in the18089* LICENSE file in the root directory of this source tree. An additional grant18090* of patent rights can be found in the PATENTS file in the same directory.18091*18092* @providesModule getIteratorFn18093* @typechecks static-only18094*/1809518096'use strict';1809718098/* global Symbol */18099var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;18100var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.1810118102/**18103* Returns the iterator method function contained on the iterable object.18104*18105* Be sure to invoke the function with the iterable as context:18106*18107* var iteratorFn = getIteratorFn(myIterable);18108* if (iteratorFn) {18109* var iterator = iteratorFn.call(myIterable);18110* ...18111* }18112*18113* @param {?object} maybeIterable18114* @return {?function}18115*/18116function getIteratorFn(maybeIterable) {18117var iteratorFn = maybeIterable && (18118(ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL])18119);18120if (typeof iteratorFn === 'function') {18121return iteratorFn;18122}18123}1812418125module.exports = getIteratorFn;181261812718128},{}],128:[function(require,module,exports){18129(function (process){18130/**18131* Copyright 2013-2015, Facebook, Inc.18132* All rights reserved.18133*18134* This source code is licensed under the BSD-style license found in the18135* LICENSE file in the root directory of this source tree. An additional grant18136* of patent rights can be found in the PATENTS file in the same directory.18137*18138* @providesModule getMarkupWrap18139*/1814018141var ExecutionEnvironment = require("./ExecutionEnvironment");1814218143var invariant = require("./invariant");1814418145/**18146* Dummy container used to detect which wraps are necessary.18147*/18148var dummyNode =18149ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;1815018151/**18152* Some browsers cannot use `innerHTML` to render certain elements standalone,18153* so we wrap them, render the wrapped nodes, then extract the desired node.18154*18155* In IE8, certain elements cannot render alone, so wrap all elements ('*').18156*/18157var shouldWrap = {18158// Force wrapping for SVG elements because if they get created inside a <div>,18159// they will be initialized in the wrong namespace (and will not display).18160'circle': true,18161'defs': true,18162'ellipse': true,18163'g': true,18164'line': true,18165'linearGradient': true,18166'path': true,18167'polygon': true,18168'polyline': true,18169'radialGradient': true,18170'rect': true,18171'stop': true,18172'text': true18173};1817418175var selectWrap = [1, '<select multiple="true">', '</select>'];18176var tableWrap = [1, '<table>', '</table>'];18177var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];1817818179var svgWrap = [1, '<svg>', '</svg>'];1818018181var markupWrap = {18182'*': [1, '?<div>', '</div>'],1818318184'area': [1, '<map>', '</map>'],18185'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],18186'legend': [1, '<fieldset>', '</fieldset>'],18187'param': [1, '<object>', '</object>'],18188'tr': [2, '<table><tbody>', '</tbody></table>'],1818918190'optgroup': selectWrap,18191'option': selectWrap,1819218193'caption': tableWrap,18194'colgroup': tableWrap,18195'tbody': tableWrap,18196'tfoot': tableWrap,18197'thead': tableWrap,1819818199'td': trWrap,18200'th': trWrap,1820118202'circle': svgWrap,18203'defs': svgWrap,18204'ellipse': svgWrap,18205'g': svgWrap,18206'line': svgWrap,18207'linearGradient': svgWrap,18208'path': svgWrap,18209'polygon': svgWrap,18210'polyline': svgWrap,18211'radialGradient': svgWrap,18212'rect': svgWrap,18213'stop': svgWrap,18214'text': svgWrap18215};1821618217/**18218* Gets the markup wrap configuration for the supplied `nodeName`.18219*18220* NOTE: This lazily detects which wraps are necessary for the current browser.18221*18222* @param {string} nodeName Lowercase `nodeName`.18223* @return {?array} Markup wrap configuration, if applicable.18224*/18225function getMarkupWrap(nodeName) {18226("production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'Markup wrapping node not initialized') : invariant(!!dummyNode));18227if (!markupWrap.hasOwnProperty(nodeName)) {18228nodeName = '*';18229}18230if (!shouldWrap.hasOwnProperty(nodeName)) {18231if (nodeName === '*') {18232dummyNode.innerHTML = '<link />';18233} else {18234dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';18235}18236shouldWrap[nodeName] = !dummyNode.firstChild;18237}18238return shouldWrap[nodeName] ? markupWrap[nodeName] : null;18239}182401824118242module.exports = getMarkupWrap;182431824418245}).call(this,require("FWaASH"))18246},{"./ExecutionEnvironment":21,"./invariant":136,"FWaASH":1}],129:[function(require,module,exports){18247/**18248* Copyright 2013-2015, Facebook, Inc.18249* All rights reserved.18250*18251* This source code is licensed under the BSD-style license found in the18252* LICENSE file in the root directory of this source tree. An additional grant18253* of patent rights can be found in the PATENTS file in the same directory.18254*18255* @providesModule getNodeForCharacterOffset18256*/1825718258'use strict';1825918260/**18261* Given any node return the first leaf node without children.18262*18263* @param {DOMElement|DOMTextNode} node18264* @return {DOMElement|DOMTextNode}18265*/18266function getLeafNode(node) {18267while (node && node.firstChild) {18268node = node.firstChild;18269}18270return node;18271}1827218273/**18274* Get the next sibling within a container. This will walk up the18275* DOM if a node's siblings have been exhausted.18276*18277* @param {DOMElement|DOMTextNode} node18278* @return {?DOMElement|DOMTextNode}18279*/18280function getSiblingNode(node) {18281while (node) {18282if (node.nextSibling) {18283return node.nextSibling;18284}18285node = node.parentNode;18286}18287}1828818289/**18290* Get object describing the nodes which contain characters at offset.18291*18292* @param {DOMElement|DOMTextNode} root18293* @param {number} offset18294* @return {?object}18295*/18296function getNodeForCharacterOffset(root, offset) {18297var node = getLeafNode(root);18298var nodeStart = 0;18299var nodeEnd = 0;1830018301while (node) {18302if (node.nodeType === 3) {18303nodeEnd = nodeStart + node.textContent.length;1830418305if (nodeStart <= offset && nodeEnd >= offset) {18306return {18307node: node,18308offset: offset - nodeStart18309};18310}1831118312nodeStart = nodeEnd;18313}1831418315node = getLeafNode(getSiblingNode(node));18316}18317}1831818319module.exports = getNodeForCharacterOffset;183201832118322},{}],130:[function(require,module,exports){18323/**18324* Copyright 2013-2015, Facebook, Inc.18325* All rights reserved.18326*18327* This source code is licensed under the BSD-style license found in the18328* LICENSE file in the root directory of this source tree. An additional grant18329* of patent rights can be found in the PATENTS file in the same directory.18330*18331* @providesModule getReactRootElementInContainer18332*/1833318334'use strict';1833518336var DOC_NODE_TYPE = 9;1833718338/**18339* @param {DOMElement|DOMDocument} container DOM element that may contain18340* a React component18341* @return {?*} DOM element that may have the reactRoot ID, or null.18342*/18343function getReactRootElementInContainer(container) {18344if (!container) {18345return null;18346}1834718348if (container.nodeType === DOC_NODE_TYPE) {18349return container.documentElement;18350} else {18351return container.firstChild;18352}18353}1835418355module.exports = getReactRootElementInContainer;183561835718358},{}],131:[function(require,module,exports){18359/**18360* Copyright 2013-2015, Facebook, Inc.18361* All rights reserved.18362*18363* This source code is licensed under the BSD-style license found in the18364* LICENSE file in the root directory of this source tree. An additional grant18365* of patent rights can be found in the PATENTS file in the same directory.18366*18367* @providesModule getTextContentAccessor18368*/1836918370'use strict';1837118372var ExecutionEnvironment = require("./ExecutionEnvironment");1837318374var contentKey = null;1837518376/**18377* Gets the key used to access text content on a DOM node.18378*18379* @return {?string} Key used to access text content.18380* @internal18381*/18382function getTextContentAccessor() {18383if (!contentKey && ExecutionEnvironment.canUseDOM) {18384// Prefer textContent to innerText because many browsers support both but18385// SVG <text> elements don't support innerText even when <div> does.18386contentKey = 'textContent' in document.documentElement ?18387'textContent' :18388'innerText';18389}18390return contentKey;18391}1839218393module.exports = getTextContentAccessor;183941839518396},{"./ExecutionEnvironment":21}],132:[function(require,module,exports){18397/**18398* Copyright 2013-2015, Facebook, Inc.18399* All rights reserved.18400*18401* This source code is licensed under the BSD-style license found in the18402* LICENSE file in the root directory of this source tree. An additional grant18403* of patent rights can be found in the PATENTS file in the same directory.18404*18405* @providesModule getUnboundedScrollPosition18406* @typechecks18407*/1840818409"use strict";1841018411/**18412* Gets the scroll position of the supplied element or window.18413*18414* The return values are unbounded, unlike `getScrollPosition`. This means they18415* may be negative or exceed the element boundaries (which is possible using18416* inertial scrolling).18417*18418* @param {DOMWindow|DOMElement} scrollable18419* @return {object} Map with `x` and `y` keys.18420*/18421function getUnboundedScrollPosition(scrollable) {18422if (scrollable === window) {18423return {18424x: window.pageXOffset || document.documentElement.scrollLeft,18425y: window.pageYOffset || document.documentElement.scrollTop18426};18427}18428return {18429x: scrollable.scrollLeft,18430y: scrollable.scrollTop18431};18432}1843318434module.exports = getUnboundedScrollPosition;184351843618437},{}],133:[function(require,module,exports){18438/**18439* Copyright 2013-2015, Facebook, Inc.18440* All rights reserved.18441*18442* This source code is licensed under the BSD-style license found in the18443* LICENSE file in the root directory of this source tree. An additional grant18444* of patent rights can be found in the PATENTS file in the same directory.18445*18446* @providesModule hyphenate18447* @typechecks18448*/1844918450var _uppercasePattern = /([A-Z])/g;1845118452/**18453* Hyphenates a camelcased string, for example:18454*18455* > hyphenate('backgroundColor')18456* < "background-color"18457*18458* For CSS style names, use `hyphenateStyleName` instead which works properly18459* with all vendor prefixes, including `ms`.18460*18461* @param {string} string18462* @return {string}18463*/18464function hyphenate(string) {18465return string.replace(_uppercasePattern, '-$1').toLowerCase();18466}1846718468module.exports = hyphenate;184691847018471},{}],134:[function(require,module,exports){18472/**18473* Copyright 2013-2015, Facebook, Inc.18474* All rights reserved.18475*18476* This source code is licensed under the BSD-style license found in the18477* LICENSE file in the root directory of this source tree. An additional grant18478* of patent rights can be found in the PATENTS file in the same directory.18479*18480* @providesModule hyphenateStyleName18481* @typechecks18482*/1848318484"use strict";1848518486var hyphenate = require("./hyphenate");1848718488var msPattern = /^ms-/;1848918490/**18491* Hyphenates a camelcased CSS property name, for example:18492*18493* > hyphenateStyleName('backgroundColor')18494* < "background-color"18495* > hyphenateStyleName('MozTransition')18496* < "-moz-transition"18497* > hyphenateStyleName('msTransition')18498* < "-ms-transition"18499*18500* As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix18501* is converted to `-ms-`.18502*18503* @param {string} string18504* @return {string}18505*/18506function hyphenateStyleName(string) {18507return hyphenate(string).replace(msPattern, '-ms-');18508}1850918510module.exports = hyphenateStyleName;185111851218513},{"./hyphenate":133}],135:[function(require,module,exports){18514(function (process){18515/**18516* Copyright 2013-2015, Facebook, Inc.18517* All rights reserved.18518*18519* This source code is licensed under the BSD-style license found in the18520* LICENSE file in the root directory of this source tree. An additional grant18521* of patent rights can be found in the PATENTS file in the same directory.18522*18523* @providesModule instantiateReactComponent18524* @typechecks static-only18525*/1852618527'use strict';1852818529var ReactCompositeComponent = require("./ReactCompositeComponent");18530var ReactEmptyComponent = require("./ReactEmptyComponent");18531var ReactNativeComponent = require("./ReactNativeComponent");1853218533var assign = require("./Object.assign");18534var invariant = require("./invariant");18535var warning = require("./warning");1853618537// To avoid a cyclic dependency, we create the final class in this module18538var ReactCompositeComponentWrapper = function() { };18539assign(18540ReactCompositeComponentWrapper.prototype,18541ReactCompositeComponent.Mixin,18542{18543_instantiateReactComponent: instantiateReactComponent18544}18545);1854618547/**18548* Check if the type reference is a known internal type. I.e. not a user18549* provided composite type.18550*18551* @param {function} type18552* @return {boolean} Returns true if this is a valid internal type.18553*/18554function isInternalComponentType(type) {18555return (18556typeof type === 'function' &&18557typeof type.prototype.mountComponent === 'function' &&18558typeof type.prototype.receiveComponent === 'function'18559);18560}1856118562/**18563* Given a ReactNode, create an instance that will actually be mounted.18564*18565* @param {ReactNode} node18566* @param {*} parentCompositeType The composite type that resolved this.18567* @return {object} A new instance of the element's constructor.18568* @protected18569*/18570function instantiateReactComponent(node, parentCompositeType) {18571var instance;1857218573if (node === null || node === false) {18574node = ReactEmptyComponent.emptyElement;18575}1857618577if (typeof node === 'object') {18578var element = node;18579if ("production" !== process.env.NODE_ENV) {18580("production" !== process.env.NODE_ENV ? warning(18581element && (typeof element.type === 'function' ||18582typeof element.type === 'string'),18583'Only functions or strings can be mounted as React components.'18584) : null);18585}1858618587// Special case string values18588if (parentCompositeType === element.type &&18589typeof element.type === 'string') {18590// Avoid recursion if the wrapper renders itself.18591instance = ReactNativeComponent.createInternalComponent(element);18592// All native components are currently wrapped in a composite so we're18593// safe to assume that this is what we should instantiate.18594} else if (isInternalComponentType(element.type)) {18595// This is temporarily available for custom components that are not string18596// represenations. I.e. ART. Once those are updated to use the string18597// representation, we can drop this code path.18598instance = new element.type(element);18599} else {18600instance = new ReactCompositeComponentWrapper();18601}18602} else if (typeof node === 'string' || typeof node === 'number') {18603instance = ReactNativeComponent.createInstanceForText(node);18604} else {18605("production" !== process.env.NODE_ENV ? invariant(18606false,18607'Encountered invalid React node of type %s',18608typeof node18609) : invariant(false));18610}1861118612if ("production" !== process.env.NODE_ENV) {18613("production" !== process.env.NODE_ENV ? warning(18614typeof instance.construct === 'function' &&18615typeof instance.mountComponent === 'function' &&18616typeof instance.receiveComponent === 'function' &&18617typeof instance.unmountComponent === 'function',18618'Only React Components can be mounted.'18619) : null);18620}1862118622// Sets up the instance. This can probably just move into the constructor now.18623instance.construct(node);1862418625// These two fields are used by the DOM and ART diffing algorithms18626// respectively. Instead of using expandos on components, we should be18627// storing the state needed by the diffing algorithms elsewhere.18628instance._mountIndex = 0;18629instance._mountImage = null;1863018631if ("production" !== process.env.NODE_ENV) {18632instance._isOwnerNecessary = false;18633instance._warnedAboutRefsInRender = false;18634}1863518636// Internal instances should fully constructed at this point, so they should18637// not get any new fields added to them at this point.18638if ("production" !== process.env.NODE_ENV) {18639if (Object.preventExtensions) {18640Object.preventExtensions(instance);18641}18642}1864318644return instance;18645}1864618647module.exports = instantiateReactComponent;186481864918650}).call(this,require("FWaASH"))18651},{"./Object.assign":27,"./ReactCompositeComponent":38,"./ReactEmptyComponent":60,"./ReactNativeComponent":74,"./invariant":136,"./warning":155,"FWaASH":1}],136:[function(require,module,exports){18652(function (process){18653/**18654* Copyright 2013-2015, Facebook, Inc.18655* All rights reserved.18656*18657* This source code is licensed under the BSD-style license found in the18658* LICENSE file in the root directory of this source tree. An additional grant18659* of patent rights can be found in the PATENTS file in the same directory.18660*18661* @providesModule invariant18662*/1866318664"use strict";1866518666/**18667* Use invariant() to assert state which your program assumes to be true.18668*18669* Provide sprintf-style format (only %s is supported) and arguments18670* to provide information about what broke and what you were18671* expecting.18672*18673* The invariant message will be stripped in production, but the invariant18674* will remain to ensure logic does not differ in production.18675*/1867618677var invariant = function(condition, format, a, b, c, d, e, f) {18678if ("production" !== process.env.NODE_ENV) {18679if (format === undefined) {18680throw new Error('invariant requires an error message argument');18681}18682}1868318684if (!condition) {18685var error;18686if (format === undefined) {18687error = new Error(18688'Minified exception occurred; use the non-minified dev environment ' +18689'for the full error message and additional helpful warnings.'18690);18691} else {18692var args = [a, b, c, d, e, f];18693var argIndex = 0;18694error = new Error(18695'Invariant Violation: ' +18696format.replace(/%s/g, function() { return args[argIndex++]; })18697);18698}1869918700error.framesToPop = 1; // we don't care about invariant's own frame18701throw error;18702}18703};1870418705module.exports = invariant;187061870718708}).call(this,require("FWaASH"))18709},{"FWaASH":1}],137:[function(require,module,exports){18710/**18711* Copyright 2013-2015, Facebook, Inc.18712* All rights reserved.18713*18714* This source code is licensed under the BSD-style license found in the18715* LICENSE file in the root directory of this source tree. An additional grant18716* of patent rights can be found in the PATENTS file in the same directory.18717*18718* @providesModule isEventSupported18719*/1872018721'use strict';1872218723var ExecutionEnvironment = require("./ExecutionEnvironment");1872418725var useHasFeature;18726if (ExecutionEnvironment.canUseDOM) {18727useHasFeature =18728document.implementation &&18729document.implementation.hasFeature &&18730// always returns true in newer browsers as per the standard.18731// @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature18732document.implementation.hasFeature('', '') !== true;18733}1873418735/**18736* Checks if an event is supported in the current execution environment.18737*18738* NOTE: This will not work correctly for non-generic events such as `change`,18739* `reset`, `load`, `error`, and `select`.18740*18741* Borrows from Modernizr.18742*18743* @param {string} eventNameSuffix Event name, e.g. "click".18744* @param {?boolean} capture Check if the capture phase is supported.18745* @return {boolean} True if the event is supported.18746* @internal18747* @license Modernizr 3.0.0pre (Custom Build) | MIT18748*/18749function isEventSupported(eventNameSuffix, capture) {18750if (!ExecutionEnvironment.canUseDOM ||18751capture && !('addEventListener' in document)) {18752return false;18753}1875418755var eventName = 'on' + eventNameSuffix;18756var isSupported = eventName in document;1875718758if (!isSupported) {18759var element = document.createElement('div');18760element.setAttribute(eventName, 'return;');18761isSupported = typeof element[eventName] === 'function';18762}1876318764if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {18765// This is the only way to test support for the `wheel` event in IE9+.18766isSupported = document.implementation.hasFeature('Events.wheel', '3.0');18767}1876818769return isSupported;18770}1877118772module.exports = isEventSupported;187731877418775},{"./ExecutionEnvironment":21}],138:[function(require,module,exports){18776/**18777* Copyright 2013-2015, Facebook, Inc.18778* All rights reserved.18779*18780* This source code is licensed under the BSD-style license found in the18781* LICENSE file in the root directory of this source tree. An additional grant18782* of patent rights can be found in the PATENTS file in the same directory.18783*18784* @providesModule isNode18785* @typechecks18786*/1878718788/**18789* @param {*} object The object to check.18790* @return {boolean} Whether or not the object is a DOM node.18791*/18792function isNode(object) {18793return !!(object && (18794((typeof Node === 'function' ? object instanceof Node : typeof object === 'object' &&18795typeof object.nodeType === 'number' &&18796typeof object.nodeName === 'string'))18797));18798}1879918800module.exports = isNode;188011880218803},{}],139:[function(require,module,exports){18804/**18805* Copyright 2013-2015, Facebook, Inc.18806* All rights reserved.18807*18808* This source code is licensed under the BSD-style license found in the18809* LICENSE file in the root directory of this source tree. An additional grant18810* of patent rights can be found in the PATENTS file in the same directory.18811*18812* @providesModule isTextInputElement18813*/1881418815'use strict';1881618817/**18818* @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary18819*/18820var supportedInputTypes = {18821'color': true,18822'date': true,18823'datetime': true,18824'datetime-local': true,18825'email': true,18826'month': true,18827'number': true,18828'password': true,18829'range': true,18830'search': true,18831'tel': true,18832'text': true,18833'time': true,18834'url': true,18835'week': true18836};1883718838function isTextInputElement(elem) {18839return elem && (18840(elem.nodeName === 'INPUT' && supportedInputTypes[elem.type] || elem.nodeName === 'TEXTAREA')18841);18842}1884318844module.exports = isTextInputElement;188451884618847},{}],140:[function(require,module,exports){18848/**18849* Copyright 2013-2015, Facebook, Inc.18850* All rights reserved.18851*18852* This source code is licensed under the BSD-style license found in the18853* LICENSE file in the root directory of this source tree. An additional grant18854* of patent rights can be found in the PATENTS file in the same directory.18855*18856* @providesModule isTextNode18857* @typechecks18858*/1885918860var isNode = require("./isNode");1886118862/**18863* @param {*} object The object to check.18864* @return {boolean} Whether or not the object is a DOM text node.18865*/18866function isTextNode(object) {18867return isNode(object) && object.nodeType == 3;18868}1886918870module.exports = isTextNode;188711887218873},{"./isNode":138}],141:[function(require,module,exports){18874(function (process){18875/**18876* Copyright 2013-2015, Facebook, Inc.18877* All rights reserved.18878*18879* This source code is licensed under the BSD-style license found in the18880* LICENSE file in the root directory of this source tree. An additional grant18881* of patent rights can be found in the PATENTS file in the same directory.18882*18883* @providesModule keyMirror18884* @typechecks static-only18885*/1888618887'use strict';1888818889var invariant = require("./invariant");1889018891/**18892* Constructs an enumeration with keys equal to their value.18893*18894* For example:18895*18896* var COLORS = keyMirror({blue: null, red: null});18897* var myColor = COLORS.blue;18898* var isColorValid = !!COLORS[myColor];18899*18900* The last line could not be performed if the values of the generated enum were18901* not equal to their keys.18902*18903* Input: {key1: val1, key2: val2}18904* Output: {key1: key1, key2: key2}18905*18906* @param {object} obj18907* @return {object}18908*/18909var keyMirror = function(obj) {18910var ret = {};18911var key;18912("production" !== process.env.NODE_ENV ? invariant(18913obj instanceof Object && !Array.isArray(obj),18914'keyMirror(...): Argument must be an object.'18915) : invariant(obj instanceof Object && !Array.isArray(obj)));18916for (key in obj) {18917if (!obj.hasOwnProperty(key)) {18918continue;18919}18920ret[key] = key;18921}18922return ret;18923};1892418925module.exports = keyMirror;189261892718928}).call(this,require("FWaASH"))18929},{"./invariant":136,"FWaASH":1}],142:[function(require,module,exports){18930/**18931* Copyright 2013-2015, Facebook, Inc.18932* All rights reserved.18933*18934* This source code is licensed under the BSD-style license found in the18935* LICENSE file in the root directory of this source tree. An additional grant18936* of patent rights can be found in the PATENTS file in the same directory.18937*18938* @providesModule keyOf18939*/1894018941/**18942* Allows extraction of a minified key. Let's the build system minify keys18943* without loosing the ability to dynamically use key strings as values18944* themselves. Pass in an object with a single key/val pair and it will return18945* you the string key of that single record. Suppose you want to grab the18946* value for a key 'className' inside of an object. Key/val minification may18947* have aliased that key to be 'xa12'. keyOf({className: null}) will return18948* 'xa12' in that case. Resolve keys you want to use once at startup time, then18949* reuse those resolutions.18950*/18951var keyOf = function(oneKeyObj) {18952var key;18953for (key in oneKeyObj) {18954if (!oneKeyObj.hasOwnProperty(key)) {18955continue;18956}18957return key;18958}18959return null;18960};189611896218963module.exports = keyOf;189641896518966},{}],143:[function(require,module,exports){18967/**18968* Copyright 2013-2015, Facebook, Inc.18969* All rights reserved.18970*18971* This source code is licensed under the BSD-style license found in the18972* LICENSE file in the root directory of this source tree. An additional grant18973* of patent rights can be found in the PATENTS file in the same directory.18974*18975* @providesModule mapObject18976*/1897718978'use strict';1897918980var hasOwnProperty = Object.prototype.hasOwnProperty;1898118982/**18983* Executes the provided `callback` once for each enumerable own property in the18984* object and constructs a new object from the results. The `callback` is18985* invoked with three arguments:18986*18987* - the property value18988* - the property name18989* - the object being traversed18990*18991* Properties that are added after the call to `mapObject` will not be visited18992* by `callback`. If the values of existing properties are changed, the value18993* passed to `callback` will be the value at the time `mapObject` visits them.18994* Properties that are deleted before being visited are not visited.18995*18996* @grep function objectMap()18997* @grep function objMap()18998*18999* @param {?object} object19000* @param {function} callback19001* @param {*} context19002* @return {?object}19003*/19004function mapObject(object, callback, context) {19005if (!object) {19006return null;19007}19008var result = {};19009for (var name in object) {19010if (hasOwnProperty.call(object, name)) {19011result[name] = callback.call(context, object[name], name, object);19012}19013}19014return result;19015}1901619017module.exports = mapObject;190181901919020},{}],144:[function(require,module,exports){19021/**19022* Copyright 2013-2015, Facebook, Inc.19023* All rights reserved.19024*19025* This source code is licensed under the BSD-style license found in the19026* LICENSE file in the root directory of this source tree. An additional grant19027* of patent rights can be found in the PATENTS file in the same directory.19028*19029* @providesModule memoizeStringOnly19030* @typechecks static-only19031*/1903219033'use strict';1903419035/**19036* Memoizes the return value of a function that accepts one string argument.19037*19038* @param {function} callback19039* @return {function}19040*/19041function memoizeStringOnly(callback) {19042var cache = {};19043return function(string) {19044if (!cache.hasOwnProperty(string)) {19045cache[string] = callback.call(this, string);19046}19047return cache[string];19048};19049}1905019051module.exports = memoizeStringOnly;190521905319054},{}],145:[function(require,module,exports){19055(function (process){19056/**19057* Copyright 2013-2015, Facebook, Inc.19058* All rights reserved.19059*19060* This source code is licensed under the BSD-style license found in the19061* LICENSE file in the root directory of this source tree. An additional grant19062* of patent rights can be found in the PATENTS file in the same directory.19063*19064* @providesModule onlyChild19065*/19066'use strict';1906719068var ReactElement = require("./ReactElement");1906919070var invariant = require("./invariant");1907119072/**19073* Returns the first child in a collection of children and verifies that there19074* is only one child in the collection. The current implementation of this19075* function assumes that a single child gets passed without a wrapper, but the19076* purpose of this helper function is to abstract away the particular structure19077* of children.19078*19079* @param {?object} children Child collection structure.19080* @return {ReactComponent} The first and only `ReactComponent` contained in the19081* structure.19082*/19083function onlyChild(children) {19084("production" !== process.env.NODE_ENV ? invariant(19085ReactElement.isValidElement(children),19086'onlyChild must be passed a children with exactly one child.'19087) : invariant(ReactElement.isValidElement(children)));19088return children;19089}1909019091module.exports = onlyChild;190921909319094}).call(this,require("FWaASH"))19095},{"./ReactElement":58,"./invariant":136,"FWaASH":1}],146:[function(require,module,exports){19096/**19097* Copyright 2013-2015, Facebook, Inc.19098* All rights reserved.19099*19100* This source code is licensed under the BSD-style license found in the19101* LICENSE file in the root directory of this source tree. An additional grant19102* of patent rights can be found in the PATENTS file in the same directory.19103*19104* @providesModule performance19105* @typechecks19106*/1910719108"use strict";1910919110var ExecutionEnvironment = require("./ExecutionEnvironment");1911119112var performance;1911319114if (ExecutionEnvironment.canUseDOM) {19115performance =19116window.performance ||19117window.msPerformance ||19118window.webkitPerformance;19119}1912019121module.exports = performance || {};191221912319124},{"./ExecutionEnvironment":21}],147:[function(require,module,exports){19125/**19126* Copyright 2013-2015, Facebook, Inc.19127* All rights reserved.19128*19129* This source code is licensed under the BSD-style license found in the19130* LICENSE file in the root directory of this source tree. An additional grant19131* of patent rights can be found in the PATENTS file in the same directory.19132*19133* @providesModule performanceNow19134* @typechecks19135*/1913619137var performance = require("./performance");1913819139/**19140* Detect if we can use `window.performance.now()` and gracefully fallback to19141* `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now19142* because of Facebook's testing infrastructure.19143*/19144if (!performance || !performance.now) {19145performance = Date;19146}1914719148var performanceNow = performance.now.bind(performance);1914919150module.exports = performanceNow;191511915219153},{"./performance":146}],148:[function(require,module,exports){19154/**19155* Copyright 2013-2015, Facebook, Inc.19156* All rights reserved.19157*19158* This source code is licensed under the BSD-style license found in the19159* LICENSE file in the root directory of this source tree. An additional grant19160* of patent rights can be found in the PATENTS file in the same directory.19161*19162* @providesModule quoteAttributeValueForBrowser19163*/1916419165'use strict';1916619167var escapeTextContentForBrowser = require("./escapeTextContentForBrowser");1916819169/**19170* Escapes attribute value to prevent scripting attacks.19171*19172* @param {*} value Value to escape.19173* @return {string} An escaped string.19174*/19175function quoteAttributeValueForBrowser(value) {19176return '"' + escapeTextContentForBrowser(value) + '"';19177}1917819179module.exports = quoteAttributeValueForBrowser;191801918119182},{"./escapeTextContentForBrowser":117}],149:[function(require,module,exports){19183/**19184* Copyright 2013-2015, Facebook, Inc.19185* All rights reserved.19186*19187* This source code is licensed under the BSD-style license found in the19188* LICENSE file in the root directory of this source tree. An additional grant19189* of patent rights can be found in the PATENTS file in the same directory.19190*19191* @providesModule setInnerHTML19192*/1919319194/* globals MSApp */1919519196'use strict';1919719198var ExecutionEnvironment = require("./ExecutionEnvironment");1919919200var WHITESPACE_TEST = /^[ \r\n\t\f]/;19201var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;1920219203/**19204* Set the innerHTML property of a node, ensuring that whitespace is preserved19205* even in IE8.19206*19207* @param {DOMElement} node19208* @param {string} html19209* @internal19210*/19211var setInnerHTML = function(node, html) {19212node.innerHTML = html;19213};1921419215// Win8 apps: Allow all html to be inserted19216if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {19217setInnerHTML = function(node, html) {19218MSApp.execUnsafeLocalFunction(function() {19219node.innerHTML = html;19220});19221};19222}1922319224if (ExecutionEnvironment.canUseDOM) {19225// IE8: When updating a just created node with innerHTML only leading19226// whitespace is removed. When updating an existing node with innerHTML19227// whitespace in root TextNodes is also collapsed.19228// @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html1922919230// Feature detection; only IE8 is known to behave improperly like this.19231var testElement = document.createElement('div');19232testElement.innerHTML = ' ';19233if (testElement.innerHTML === '') {19234setInnerHTML = function(node, html) {19235// Magic theory: IE8 supposedly differentiates between added and updated19236// nodes when processing innerHTML, innerHTML on updated nodes suffers19237// from worse whitespace behavior. Re-adding a node like this triggers19238// the initial and more favorable whitespace behavior.19239// TODO: What to do on a detached node?19240if (node.parentNode) {19241node.parentNode.replaceChild(node, node);19242}1924319244// We also implement a workaround for non-visible tags disappearing into19245// thin air on IE8, this only happens if there is no visible text19246// in-front of the non-visible tags. Piggyback on the whitespace fix19247// and simply check if any non-visible tags appear in the source.19248if (WHITESPACE_TEST.test(html) ||19249html[0] === '<' && NONVISIBLE_TEST.test(html)) {19250// Recover leading whitespace by temporarily prepending any character.19251// \uFEFF has the potential advantage of being zero-width/invisible.19252node.innerHTML = '\uFEFF' + html;1925319254// deleteData leaves an empty `TextNode` which offsets the index of all19255// children. Definitely want to avoid this.19256var textNode = node.firstChild;19257if (textNode.data.length === 1) {19258node.removeChild(textNode);19259} else {19260textNode.deleteData(0, 1);19261}19262} else {19263node.innerHTML = html;19264}19265};19266}19267}1926819269module.exports = setInnerHTML;192701927119272},{"./ExecutionEnvironment":21}],150:[function(require,module,exports){19273/**19274* Copyright 2013-2015, Facebook, Inc.19275* All rights reserved.19276*19277* This source code is licensed under the BSD-style license found in the19278* LICENSE file in the root directory of this source tree. An additional grant19279* of patent rights can be found in the PATENTS file in the same directory.19280*19281* @providesModule setTextContent19282*/1928319284'use strict';1928519286var ExecutionEnvironment = require("./ExecutionEnvironment");19287var escapeTextContentForBrowser = require("./escapeTextContentForBrowser");19288var setInnerHTML = require("./setInnerHTML");1928919290/**19291* Set the textContent property of a node, ensuring that whitespace is preserved19292* even in IE8. innerText is a poor substitute for textContent and, among many19293* issues, inserts <br> instead of the literal newline chars. innerHTML behaves19294* as it should.19295*19296* @param {DOMElement} node19297* @param {string} text19298* @internal19299*/19300var setTextContent = function(node, text) {19301node.textContent = text;19302};1930319304if (ExecutionEnvironment.canUseDOM) {19305if (!('textContent' in document.documentElement)) {19306setTextContent = function(node, text) {19307setInnerHTML(node, escapeTextContentForBrowser(text));19308};19309}19310}1931119312module.exports = setTextContent;193131931419315},{"./ExecutionEnvironment":21,"./escapeTextContentForBrowser":117,"./setInnerHTML":149}],151:[function(require,module,exports){19316/**19317* Copyright 2013-2015, Facebook, Inc.19318* All rights reserved.19319*19320* This source code is licensed under the BSD-style license found in the19321* LICENSE file in the root directory of this source tree. An additional grant19322* of patent rights can be found in the PATENTS file in the same directory.19323*19324* @providesModule shallowEqual19325*/1932619327'use strict';1932819329/**19330* Performs equality by iterating through keys on an object and returning19331* false when any key has values which are not strictly equal between19332* objA and objB. Returns true when the values of all keys are strictly equal.19333*19334* @return {boolean}19335*/19336function shallowEqual(objA, objB) {19337if (objA === objB) {19338return true;19339}19340var key;19341// Test for A's keys different from B.19342for (key in objA) {19343if (objA.hasOwnProperty(key) &&19344(!objB.hasOwnProperty(key) || objA[key] !== objB[key])) {19345return false;19346}19347}19348// Test for B's keys missing from A.19349for (key in objB) {19350if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {19351return false;19352}19353}19354return true;19355}1935619357module.exports = shallowEqual;193581935919360},{}],152:[function(require,module,exports){19361(function (process){19362/**19363* Copyright 2013-2015, Facebook, Inc.19364* All rights reserved.19365*19366* This source code is licensed under the BSD-style license found in the19367* LICENSE file in the root directory of this source tree. An additional grant19368* of patent rights can be found in the PATENTS file in the same directory.19369*19370* @providesModule shouldUpdateReactComponent19371* @typechecks static-only19372*/1937319374'use strict';1937519376var warning = require("./warning");1937719378/**19379* Given a `prevElement` and `nextElement`, determines if the existing19380* instance should be updated as opposed to being destroyed or replaced by a new19381* instance. Both arguments are elements. This ensures that this logic can19382* operate on stateless trees without any backing instance.19383*19384* @param {?object} prevElement19385* @param {?object} nextElement19386* @return {boolean} True if the existing instance should be updated.19387* @protected19388*/19389function shouldUpdateReactComponent(prevElement, nextElement) {19390if (prevElement != null && nextElement != null) {19391var prevType = typeof prevElement;19392var nextType = typeof nextElement;19393if (prevType === 'string' || prevType === 'number') {19394return (nextType === 'string' || nextType === 'number');19395} else {19396if (nextType === 'object' &&19397prevElement.type === nextElement.type &&19398prevElement.key === nextElement.key) {19399var ownersMatch = prevElement._owner === nextElement._owner;19400var prevName = null;19401var nextName = null;19402var nextDisplayName = null;19403if ("production" !== process.env.NODE_ENV) {19404if (!ownersMatch) {19405if (prevElement._owner != null &&19406prevElement._owner.getPublicInstance() != null &&19407prevElement._owner.getPublicInstance().constructor != null) {19408prevName =19409prevElement._owner.getPublicInstance().constructor.displayName;19410}19411if (nextElement._owner != null &&19412nextElement._owner.getPublicInstance() != null &&19413nextElement._owner.getPublicInstance().constructor != null) {19414nextName =19415nextElement._owner.getPublicInstance().constructor.displayName;19416}19417if (nextElement.type != null &&19418nextElement.type.displayName != null) {19419nextDisplayName = nextElement.type.displayName;19420}19421if (nextElement.type != null && typeof nextElement.type === 'string') {19422nextDisplayName = nextElement.type;19423}19424if (typeof nextElement.type !== 'string' ||19425nextElement.type === 'input' ||19426nextElement.type === 'textarea') {19427if ((prevElement._owner != null &&19428prevElement._owner._isOwnerNecessary === false) ||19429(nextElement._owner != null &&19430nextElement._owner._isOwnerNecessary === false)) {19431if (prevElement._owner != null) {19432prevElement._owner._isOwnerNecessary = true;19433}19434if (nextElement._owner != null) {19435nextElement._owner._isOwnerNecessary = true;19436}19437("production" !== process.env.NODE_ENV ? warning(19438false,19439'<%s /> is being rendered by both %s and %s using the same ' +19440'key (%s) in the same place. Currently, this means that ' +19441'they don\'t preserve state. This behavior should be very ' +19442'rare so we\'re considering deprecating it. Please contact ' +19443'the React team and explain your use case so that we can ' +19444'take that into consideration.',19445nextDisplayName || 'Unknown Component',19446prevName || '[Unknown]',19447nextName || '[Unknown]',19448prevElement.key19449) : null);19450}19451}19452}19453}19454return ownersMatch;19455}19456}19457}19458return false;19459}1946019461module.exports = shouldUpdateReactComponent;194621946319464}).call(this,require("FWaASH"))19465},{"./warning":155,"FWaASH":1}],153:[function(require,module,exports){19466(function (process){19467/**19468* Copyright 2014-2015, Facebook, Inc.19469* All rights reserved.19470*19471* This source code is licensed under the BSD-style license found in the19472* LICENSE file in the root directory of this source tree. An additional grant19473* of patent rights can be found in the PATENTS file in the same directory.19474*19475* @providesModule toArray19476* @typechecks19477*/1947819479var invariant = require("./invariant");1948019481/**19482* Convert array-like objects to arrays.19483*19484* This API assumes the caller knows the contents of the data type. For less19485* well defined inputs use createArrayFromMixed.19486*19487* @param {object|function|filelist} obj19488* @return {array}19489*/19490function toArray(obj) {19491var length = obj.length;1949219493// Some browse builtin objects can report typeof 'function' (e.g. NodeList in19494// old versions of Safari).19495("production" !== process.env.NODE_ENV ? invariant(19496!Array.isArray(obj) &&19497(typeof obj === 'object' || typeof obj === 'function'),19498'toArray: Array-like object expected'19499) : invariant(!Array.isArray(obj) &&19500(typeof obj === 'object' || typeof obj === 'function')));1950119502("production" !== process.env.NODE_ENV ? invariant(19503typeof length === 'number',19504'toArray: Object needs a length property'19505) : invariant(typeof length === 'number'));1950619507("production" !== process.env.NODE_ENV ? invariant(19508length === 0 ||19509(length - 1) in obj,19510'toArray: Object should have keys for indices'19511) : invariant(length === 0 ||19512(length - 1) in obj));1951319514// Old IE doesn't give collections access to hasOwnProperty. Assume inputs19515// without method will throw during the slice call and skip straight to the19516// fallback.19517if (obj.hasOwnProperty) {19518try {19519return Array.prototype.slice.call(obj);19520} catch (e) {19521// IE < 9 does not support Array#slice on collections objects19522}19523}1952419525// Fall back to copying key by key. This assumes all keys have a value,19526// so will not preserve sparsely populated inputs.19527var ret = Array(length);19528for (var ii = 0; ii < length; ii++) {19529ret[ii] = obj[ii];19530}19531return ret;19532}1953319534module.exports = toArray;195351953619537}).call(this,require("FWaASH"))19538},{"./invariant":136,"FWaASH":1}],154:[function(require,module,exports){19539(function (process){19540/**19541* Copyright 2013-2015, Facebook, Inc.19542* All rights reserved.19543*19544* This source code is licensed under the BSD-style license found in the19545* LICENSE file in the root directory of this source tree. An additional grant19546* of patent rights can be found in the PATENTS file in the same directory.19547*19548* @providesModule traverseAllChildren19549*/1955019551'use strict';1955219553var ReactElement = require("./ReactElement");19554var ReactFragment = require("./ReactFragment");19555var ReactInstanceHandles = require("./ReactInstanceHandles");1955619557var getIteratorFn = require("./getIteratorFn");19558var invariant = require("./invariant");19559var warning = require("./warning");1956019561var SEPARATOR = ReactInstanceHandles.SEPARATOR;19562var SUBSEPARATOR = ':';1956319564/**19565* TODO: Test that a single child and an array with one item have the same key19566* pattern.19567*/1956819569var userProvidedKeyEscaperLookup = {19570'=': '=0',19571'.': '=1',19572':': '=2'19573};1957419575var userProvidedKeyEscapeRegex = /[=.:]/g;1957619577var didWarnAboutMaps = false;1957819579function userProvidedKeyEscaper(match) {19580return userProvidedKeyEscaperLookup[match];19581}1958219583/**19584* Generate a key string that identifies a component within a set.19585*19586* @param {*} component A component that could contain a manual key.19587* @param {number} index Index that is used if a manual key is not provided.19588* @return {string}19589*/19590function getComponentKey(component, index) {19591if (component && component.key != null) {19592// Explicit key19593return wrapUserProvidedKey(component.key);19594}19595// Implicit key determined by the index in the set19596return index.toString(36);19597}1959819599/**19600* Escape a component key so that it is safe to use in a reactid.19601*19602* @param {*} key Component key to be escaped.19603* @return {string} An escaped string.19604*/19605function escapeUserProvidedKey(text) {19606return ('' + text).replace(19607userProvidedKeyEscapeRegex,19608userProvidedKeyEscaper19609);19610}1961119612/**19613* Wrap a `key` value explicitly provided by the user to distinguish it from19614* implicitly-generated keys generated by a component's index in its parent.19615*19616* @param {string} key Value of a user-provided `key` attribute19617* @return {string}19618*/19619function wrapUserProvidedKey(key) {19620return '$' + escapeUserProvidedKey(key);19621}1962219623/**19624* @param {?*} children Children tree container.19625* @param {!string} nameSoFar Name of the key path so far.19626* @param {!number} indexSoFar Number of children encountered until this point.19627* @param {!function} callback Callback to invoke with each child found.19628* @param {?*} traverseContext Used to pass information throughout the traversal19629* process.19630* @return {!number} The number of children in this subtree.19631*/19632function traverseAllChildrenImpl(19633children,19634nameSoFar,19635indexSoFar,19636callback,19637traverseContext19638) {19639var type = typeof children;1964019641if (type === 'undefined' || type === 'boolean') {19642// All of the above are perceived as null.19643children = null;19644}1964519646if (children === null ||19647type === 'string' ||19648type === 'number' ||19649ReactElement.isValidElement(children)) {19650callback(19651traverseContext,19652children,19653// If it's the only child, treat the name as if it was wrapped in an array19654// so that it's consistent if the number of children grows.19655nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar,19656indexSoFar19657);19658return 1;19659}1966019661var child, nextName, nextIndex;19662var subtreeCount = 0; // Count of children found in the current subtree.1966319664if (Array.isArray(children)) {19665for (var i = 0; i < children.length; i++) {19666child = children[i];19667nextName = (19668(nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) +19669getComponentKey(child, i)19670);19671nextIndex = indexSoFar + subtreeCount;19672subtreeCount += traverseAllChildrenImpl(19673child,19674nextName,19675nextIndex,19676callback,19677traverseContext19678);19679}19680} else {19681var iteratorFn = getIteratorFn(children);19682if (iteratorFn) {19683var iterator = iteratorFn.call(children);19684var step;19685if (iteratorFn !== children.entries) {19686var ii = 0;19687while (!(step = iterator.next()).done) {19688child = step.value;19689nextName = (19690(nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) +19691getComponentKey(child, ii++)19692);19693nextIndex = indexSoFar + subtreeCount;19694subtreeCount += traverseAllChildrenImpl(19695child,19696nextName,19697nextIndex,19698callback,19699traverseContext19700);19701}19702} else {19703if ("production" !== process.env.NODE_ENV) {19704("production" !== process.env.NODE_ENV ? warning(19705didWarnAboutMaps,19706'Using Maps as children is not yet fully supported. It is an ' +19707'experimental feature that might be removed. Convert it to a ' +19708'sequence / iterable of keyed ReactElements instead.'19709) : null);19710didWarnAboutMaps = true;19711}19712// Iterator will provide entry [k,v] tuples rather than values.19713while (!(step = iterator.next()).done) {19714var entry = step.value;19715if (entry) {19716child = entry[1];19717nextName = (19718(nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) +19719wrapUserProvidedKey(entry[0]) + SUBSEPARATOR +19720getComponentKey(child, 0)19721);19722nextIndex = indexSoFar + subtreeCount;19723subtreeCount += traverseAllChildrenImpl(19724child,19725nextName,19726nextIndex,19727callback,19728traverseContext19729);19730}19731}19732}19733} else if (type === 'object') {19734("production" !== process.env.NODE_ENV ? invariant(19735children.nodeType !== 1,19736'traverseAllChildren(...): Encountered an invalid child; DOM ' +19737'elements are not valid children of React components.'19738) : invariant(children.nodeType !== 1));19739var fragment = ReactFragment.extract(children);19740for (var key in fragment) {19741if (fragment.hasOwnProperty(key)) {19742child = fragment[key];19743nextName = (19744(nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) +19745wrapUserProvidedKey(key) + SUBSEPARATOR +19746getComponentKey(child, 0)19747);19748nextIndex = indexSoFar + subtreeCount;19749subtreeCount += traverseAllChildrenImpl(19750child,19751nextName,19752nextIndex,19753callback,19754traverseContext19755);19756}19757}19758}19759}1976019761return subtreeCount;19762}1976319764/**19765* Traverses children that are typically specified as `props.children`, but19766* might also be specified through attributes:19767*19768* - `traverseAllChildren(this.props.children, ...)`19769* - `traverseAllChildren(this.props.leftPanelChildren, ...)`19770*19771* The `traverseContext` is an optional argument that is passed through the19772* entire traversal. It can be used to store accumulations or anything else that19773* the callback might find relevant.19774*19775* @param {?*} children Children tree object.19776* @param {!function} callback To invoke upon traversing each child.19777* @param {?*} traverseContext Context for traversal.19778* @return {!number} The number of children in this subtree.19779*/19780function traverseAllChildren(children, callback, traverseContext) {19781if (children == null) {19782return 0;19783}1978419785return traverseAllChildrenImpl(children, '', 0, callback, traverseContext);19786}1978719788module.exports = traverseAllChildren;197891979019791}).call(this,require("FWaASH"))19792},{"./ReactElement":58,"./ReactFragment":64,"./ReactInstanceHandles":67,"./getIteratorFn":127,"./invariant":136,"./warning":155,"FWaASH":1}],155:[function(require,module,exports){19793(function (process){19794/**19795* Copyright 2014-2015, Facebook, Inc.19796* All rights reserved.19797*19798* This source code is licensed under the BSD-style license found in the19799* LICENSE file in the root directory of this source tree. An additional grant19800* of patent rights can be found in the PATENTS file in the same directory.19801*19802* @providesModule warning19803*/1980419805"use strict";1980619807var emptyFunction = require("./emptyFunction");1980819809/**19810* Similar to invariant but only logs a warning if the condition is not met.19811* This can be used to log issues in development environments in critical19812* paths. Removing the logging code for production environments will keep the19813* same logic and follow the same code paths.19814*/1981519816var warning = emptyFunction;1981719818if ("production" !== process.env.NODE_ENV) {19819warning = function(condition, format ) {for (var args=[],$__0=2,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);19820if (format === undefined) {19821throw new Error(19822'`warning(condition, format, ...args)` requires a warning ' +19823'message argument'19824);19825}1982619827if (format.length < 10 || /^[s\W]*$/.test(format)) {19828throw new Error(19829'The warning format should be able to uniquely identify this ' +19830'warning. Please, use a more descriptive format than: ' + format19831);19832}1983319834if (format.indexOf('Failed Composite propType: ') === 0) {19835return; // Ignore CompositeComponent proptype check.19836}1983719838if (!condition) {19839var argIndex = 0;19840var message = 'Warning: ' + format.replace(/%s/g, function() {return args[argIndex++];});19841console.warn(message);19842try {19843// --- Welcome to debugging React ---19844// This error was thrown as a convenience so that you can use this stack19845// to find the callsite that caused this warning to fire.19846throw new Error(message);19847} catch(x) {}19848}19849};19850}1985119852module.exports = warning;198531985419855}).call(this,require("FWaASH"))19856},{"./emptyFunction":115,"FWaASH":1}],"react":[function(require,module,exports){19857module.exports=require('M6d2gk');19858},{}],"M6d2gk":[function(require,module,exports){19859module.exports = require('./lib/React');198601986119862},{"./lib/React":29}],"FLHjPV":[function(require,module,exports){19863'use strict';1986419865var React = require('react');1986619867var App = React.createClass({displayName: "App",19868render: function() {19869return React.createElement("h1", null, "Hello ", this.props.name, "!");19870}19871});1987219873module.exports = App;198741987519876},{"react":"M6d2gk"}],"./src/App":[function(require,module,exports){19877module.exports=require('FLHjPV');19878},{}]},{},[])1987919880