From c14f9b6d06a714899b2828503073bdf0dab136d6 Mon Sep 17 00:00:00 2001 From: Jonathan Lehman Date: Thu, 30 Apr 2015 19:23:09 -0400 Subject: [PATCH] Exclude react from build --- dist/alt-with-addons.js | 26036 +++------------------------------- dist/alt-with-addons.min.js | 22 +- dist/alt.js | 123 +- dist/alt.min.js | 2 +- webpack.config.js | 11 +- 5 files changed, 1926 insertions(+), 24268 deletions(-) diff --git a/dist/alt-with-addons.js b/dist/alt-with-addons.js index f21fc93b..6c3ebbd1 100644 --- a/dist/alt-with-addons.js +++ b/dist/alt-with-addons.js @@ -1,13 +1,13 @@ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("react")); + module.exports = factory(require("react"), require("react/addons")); else if(typeof define === 'function' && define.amd) - define(["react"], factory); + define(["react", "react/addons"], factory); else if(typeof exports === 'object') - exports["alt"] = factory(require("react")); + exports["alt"] = factory(require("react"), require("react/addons")); else - root["alt"] = factory(root["React"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_104__) { + root["alt"] = factory(root["react"], root["react/addons"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_17__, __WEBPACK_EXTERNAL_MODULE_30__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; @@ -75,546 +75,11 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(109); + module.exports = __webpack_require__(22); /***/ }, /* 1 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule invariant - */ - - "use strict"; - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - var invariant = function(condition, format, a, b, c, d, e, f) { - if ("production" !== (undefined)) { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error( - 'Minified exception occurred; use the non-minified dev environment ' + - 'for the full error message and additional helpful warnings.' - ); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error( - 'Invariant Violation: ' + - format.replace(/%s/g, function() { return args[argIndex++]; }) - ); - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } - }; - - module.exports = invariant; - - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule Object.assign - */ - - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign - - 'use strict'; - - function assign(target, sources) { - if (target == null) { - throw new TypeError('Object.assign target cannot be null or undefined'); - } - - var to = Object(target); - var hasOwnProperty = Object.prototype.hasOwnProperty; - - for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { - var nextSource = arguments[nextIndex]; - if (nextSource == null) { - continue; - } - - var from = Object(nextSource); - - // We don't currently support accessors nor proxies. Therefore this - // copy cannot throw. If we ever supported this then we must handle - // exceptions and side-effects. We don't support symbols so they won't - // be transferred. - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - } - - return to; - } - - module.exports = assign; - - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactElement - */ - - 'use strict'; - - var ReactContext = __webpack_require__(58); - var ReactCurrentOwner = __webpack_require__(17); - - var assign = __webpack_require__(2); - var warning = __webpack_require__(4); - - var RESERVED_PROPS = { - key: true, - ref: true - }; - - /** - * Warn for mutations. - * - * @internal - * @param {object} object - * @param {string} key - */ - function defineWarningProperty(object, key) { - Object.defineProperty(object, key, { - - configurable: false, - enumerable: true, - - get: function() { - if (!this._store) { - return null; - } - return this._store[key]; - }, - - set: function(value) { - ("production" !== (undefined) ? warning( - false, - 'Don\'t set the %s property of the React element. Instead, ' + - 'specify the correct value when initially creating the element.', - key - ) : null); - this._store[key] = value; - } - - }); - } - - /** - * This is updated to true if the membrane is successfully created. - */ - var useMutationMembrane = false; - - /** - * Warn for mutations. - * - * @internal - * @param {object} element - */ - function defineMutationMembrane(prototype) { - try { - var pseudoFrozenProperties = { - props: true - }; - for (var key in pseudoFrozenProperties) { - defineWarningProperty(prototype, key); - } - useMutationMembrane = true; - } catch (x) { - // IE will fail on defineProperty - } - } - - /** - * Base constructor for all React elements. This is only used to make this - * work with a dynamic instanceof check. Nothing should live on this prototype. - * - * @param {*} type - * @param {string|object} ref - * @param {*} key - * @param {*} props - * @internal - */ - var ReactElement = function(type, key, ref, owner, context, props) { - // Built-in properties that belong on the element - this.type = type; - this.key = key; - this.ref = ref; - - // Record the component responsible for creating this element. - this._owner = owner; - - // TODO: Deprecate withContext, and then the context becomes accessible - // through the owner. - this._context = context; - - if ("production" !== (undefined)) { - // The validation flag and props are currently mutative. We put them on - // an external backing store so that we can freeze the whole object. - // This can be replaced with a WeakMap once they are implemented in - // commonly used development environments. - this._store = {props: props, originalProps: assign({}, props)}; - - // To make comparing ReactElements easier for testing purposes, we make - // the validation flag non-enumerable (where possible, which should - // include every environment we run tests in), so the test framework - // ignores it. - try { - Object.defineProperty(this._store, 'validated', { - configurable: false, - enumerable: false, - writable: true - }); - } catch (x) { - } - this._store.validated = false; - - // We're not allowed to set props directly on the object so we early - // return and rely on the prototype membrane to forward to the backing - // store. - if (useMutationMembrane) { - Object.freeze(this); - return; - } - } - - this.props = props; - }; - - // We intentionally don't expose the function on the constructor property. - // ReactElement should be indistinguishable from a plain object. - ReactElement.prototype = { - _isReactElement: true - }; - - if ("production" !== (undefined)) { - defineMutationMembrane(ReactElement.prototype); - } - - ReactElement.createElement = function(type, config, children) { - var propName; - - // Reserved names are extracted - var props = {}; - - var key = null; - var ref = null; - - if (config != null) { - ref = config.ref === undefined ? null : config.ref; - key = config.key === undefined ? null : '' + config.key; - // Remaining properties are added to a new props object - for (propName in config) { - if (config.hasOwnProperty(propName) && - !RESERVED_PROPS.hasOwnProperty(propName)) { - props[propName] = config[propName]; - } - } - } - - // Children can be more than one argument, and those are transferred onto - // the newly allocated props object. - var childrenLength = arguments.length - 2; - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 2]; - } - props.children = childArray; - } - - // Resolve default props - if (type && type.defaultProps) { - var defaultProps = type.defaultProps; - for (propName in defaultProps) { - if (typeof props[propName] === 'undefined') { - props[propName] = defaultProps[propName]; - } - } - } - - return new ReactElement( - type, - key, - ref, - ReactCurrentOwner.current, - ReactContext.current, - props - ); - }; - - ReactElement.createFactory = function(type) { - var factory = ReactElement.createElement.bind(null, type); - // Expose the type on the factory and the prototype so that it can be - // easily accessed on elements. E.g. .type === Foo.type. - // This should not be named `constructor` since this may not be the function - // that created the element, and it may not even be a constructor. - // Legacy hook TODO: Warn if this is accessed - factory.type = type; - return factory; - }; - - ReactElement.cloneAndReplaceProps = function(oldElement, newProps) { - var newElement = new ReactElement( - oldElement.type, - oldElement.key, - oldElement.ref, - oldElement._owner, - oldElement._context, - newProps - ); - - if ("production" !== (undefined)) { - // If the key on the original is valid, then the clone is valid - newElement._store.validated = oldElement._store.validated; - } - return newElement; - }; - - ReactElement.cloneElement = function(element, config, children) { - var propName; - - // Original props are copied - var props = assign({}, element.props); - - // Reserved names are extracted - var key = element.key; - var ref = element.ref; - - // Owner will be preserved, unless ref is overridden - var owner = element._owner; - - if (config != null) { - if (config.ref !== undefined) { - // Silently steal the ref from the parent. - ref = config.ref; - owner = ReactCurrentOwner.current; - } - if (config.key !== undefined) { - key = '' + config.key; - } - // Remaining properties override existing props - for (propName in config) { - if (config.hasOwnProperty(propName) && - !RESERVED_PROPS.hasOwnProperty(propName)) { - props[propName] = config[propName]; - } - } - } - - // Children can be more than one argument, and those are transferred onto - // the newly allocated props object. - var childrenLength = arguments.length - 2; - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 2]; - } - props.children = childArray; - } - - return new ReactElement( - element.type, - key, - ref, - owner, - element._context, - props - ); - }; - - /** - * @param {?object} object - * @return {boolean} True if `object` is a valid component. - * @final - */ - ReactElement.isValidElement = function(object) { - // ReactTestUtils is often used outside of beforeEach where as React is - // within it. This leads to two different instances of React on the same - // page. To identify a element from a different React instance we use - // a flag instead of an instanceof check. - var isElement = !!(object && object._isReactElement); - // if (isElement && !(object instanceof ReactElement)) { - // This is an indicator that you're using multiple versions of React at the - // same time. This will screw with ownership and stuff. Fix it, please. - // TODO: We could possibly warn here. - // } - return isElement; - }; - - module.exports = ReactElement; - - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule warning - */ - - "use strict"; - - var emptyFunction = __webpack_require__(13); - - /** - * Similar to invariant but only logs a warning if the condition is not met. - * This can be used to log issues in development environments in critical - * paths. Removing the logging code for production environments will keep the - * same logic and follow the same code paths. - */ - - var warning = emptyFunction; - - if ("production" !== (undefined)) { - warning = function(condition, format ) {for (var args=[],$__0=2,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]); - if (format === undefined) { - throw new Error( - '`warning(condition, format, ...args)` requires a warning ' + - 'message argument' - ); - } - - if (format.length < 10 || /^[s\W]*$/.test(format)) { - throw new Error( - 'The warning format should be able to uniquely identify this ' + - 'warning. Please, use a more descriptive format than: ' + format - ); - } - - if (format.indexOf('Failed Composite propType: ') === 0) { - return; // Ignore CompositeComponent proptype check. - } - - if (!condition) { - var argIndex = 0; - var message = 'Warning: ' + format.replace(/%s/g, function() {return args[argIndex++];}); - console.warn(message); - try { - // --- Welcome to debugging React --- - // This error was thrown as a convenience so that you can use this stack - // to find the callsite that caused this warning to fire. - throw new Error(message); - } catch(x) {} - } - }; - } - - module.exports = warning; - - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ExecutionEnvironment - */ - - /*jslint evil: true */ - - "use strict"; - - var canUseDOM = !!( - (typeof window !== 'undefined' && - window.document && window.document.createElement) - ); - - /** - * Simple, lightweight module assisting with the detection and context of - * Worker. Helps avoid circular dependencies and allows code to reason about - * whether or not they are in a Worker, even if they never include the main - * `ReactWorker` dependency. - */ - var ExecutionEnvironment = { - - canUseDOM: canUseDOM, - - canUseWorkers: typeof Worker !== 'undefined', - - canUseEventListeners: - canUseDOM && !!(window.addEventListener || window.attachEvent), - - canUseViewport: canUseDOM && !!window.screen, - - isInWorker: !canUseDOM // For now, this is true - might change in the future. - - }; - - module.exports = ExecutionEnvironment; - - -/***/ }, -/* 6 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -625,7 +90,7 @@ return /******/ (function(modules) { // webpackBootstrap var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - var _Symbol = __webpack_require__(9); + var _Symbol = __webpack_require__(3); var _Symbol2 = _interopRequireDefault(_Symbol); @@ -678,7 +143,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.STATE_CONTAINER = STATE_CONTAINER; /***/ }, -/* 7 */ +/* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -714,83 +179,7 @@ return /******/ (function(modules) { // webpackBootstrap } /***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule EventConstants - */ - - 'use strict'; - - var keyMirror = __webpack_require__(34); - - var PropagationPhases = keyMirror({bubbled: null, captured: null}); - - /** - * Types of raw signals from the browser caught at the top level. - */ - var topLevelTypes = keyMirror({ - topBlur: null, - topChange: null, - topClick: null, - topCompositionEnd: null, - topCompositionStart: null, - topCompositionUpdate: null, - topContextMenu: null, - topCopy: null, - topCut: null, - topDoubleClick: null, - topDrag: null, - topDragEnd: null, - topDragEnter: null, - topDragExit: null, - topDragLeave: null, - topDragOver: null, - topDragStart: null, - topDrop: null, - topError: null, - topFocus: null, - topInput: null, - topKeyDown: null, - topKeyPress: null, - topKeyUp: null, - topLoad: null, - topMouseDown: null, - topMouseMove: null, - topMouseOut: null, - topMouseOver: null, - topMouseUp: null, - topPaste: null, - topReset: null, - topScroll: null, - topSelectionChange: null, - topSubmit: null, - topTextInput: null, - topTouchCancel: null, - topTouchEnd: null, - topTouchMove: null, - topTouchStart: null, - topWheel: null - }); - - var EventConstants = { - topLevelTypes: topLevelTypes, - PropagationPhases: PropagationPhases - }; - - module.exports = EventConstants; - - -/***/ }, -/* 9 */ +/* 3 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -946,24216 +335,2549 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 10 */ +/* 4 */ /***/ function(module, exports, __webpack_require__) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactClass - */ - 'use strict'; - var ReactComponent = __webpack_require__(78); - var ReactCurrentOwner = __webpack_require__(17); - var ReactElement = __webpack_require__(3); - var ReactErrorUtils = __webpack_require__(148); - var ReactInstanceMap = __webpack_require__(24); - var ReactLifeCycle = __webpack_require__(60); - var ReactPropTypeLocations = __webpack_require__(61); - var ReactPropTypeLocationNames = __webpack_require__(38); - var ReactUpdateQueue = __webpack_require__(62); + Object.defineProperty(exports, '__esModule', { + value: true + }); + exports.getInternalMethods = getInternalMethods; + exports.warn = warn; + exports.uid = uid; + exports.formatAsConstant = formatAsConstant; + exports.dispatchIdentity = dispatchIdentity; + /* istanbul ignore next */ + function NoopClass() {} - var assign = __webpack_require__(2); - var invariant = __webpack_require__(1); - var keyMirror = __webpack_require__(34); - var keyOf = __webpack_require__(14); - var warning = __webpack_require__(4); + var builtIns = Object.getOwnPropertyNames(NoopClass); + var builtInProto = Object.getOwnPropertyNames(NoopClass.prototype); - var MIXINS_KEY = keyOf({mixins: null}); + function getInternalMethods(Obj, isProto) { + var excluded = isProto ? builtInProto : builtIns; + var obj = isProto ? Obj.prototype : Obj; + return Object.getOwnPropertyNames(obj).reduce(function (value, m) { + if (excluded.indexOf(m) !== -1) { + return value; + } - /** - * Policies that describe methods in `ReactClassInterface`. - */ - var SpecPolicy = keyMirror({ - /** - * These methods may be defined only once by the class specification or mixin. - */ - DEFINE_ONCE: null, - /** - * These methods may be defined by both the class specification and mixins. - * Subsequent definitions will be chained. These methods must return void. - */ - DEFINE_MANY: null, - /** - * These methods are overriding the base class. - */ - OVERRIDE_BASE: null, - /** - * These methods are similar to DEFINE_MANY, except we assume they return - * objects. We try to merge the keys of the return values of all the mixed in - * functions. If there is a key conflict we throw. - */ - DEFINE_MANY_MERGED: null - }); + value[m] = obj[m]; + return value; + }, {}); + } + + function warn(msg) { + /* istanbul ignore else */ + if (typeof console !== 'undefined') { + console.warn(new ReferenceError(msg)); + } + } + + function uid(container, name) { + var count = 0; + var key = name; + while (Object.hasOwnProperty.call(container, key)) { + key = name + String(++count); + } + return key; + } + + function formatAsConstant(name) { + return name.replace(/[a-z]([A-Z])/g, function (i) { + return '' + i[0] + '_' + i[1].toLowerCase(); + }).toUpperCase(); + } + + function dispatchIdentity(x) { + for (var _len = arguments.length, a = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + a[_key - 1] = arguments[_key]; + } + + this.dispatch(a.length ? [x].concat(a) : x); + } +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { - var injectedMixins = []; + 'use strict'; /** - * Composite components are higher-level components that compose other composite - * or native components. + * Representation of a single EventEmitter function. * - * To create a new type of `ReactClass`, pass a specification of - * your new class to `React.createClass`. The only requirement of your class - * specification is that you implement a `render` method. + * @param {Function} fn Event handler to be called. + * @param {Mixed} context Context for function execution. + * @param {Boolean} once Only emit once + * @api private + */ + function EE(fn, context, once) { + this.fn = fn; + this.context = context; + this.once = once || false; + } + + /** + * Minimal EventEmitter interface that is molded against the Node.js + * EventEmitter interface. * - * var MyComponent = React.createClass({ - * render: function() { - * return
Hello World
; - * } - * }); + * @constructor + * @api public + */ + function EventEmitter() { /* Nothing to set */ } + + /** + * Holds the assigned EventEmitters by name. * - * The class specification supports a specific protocol of methods that have - * special meaning (e.g. `render`). See `ReactClassInterface` for - * more the comprehensive protocol. Any other properties and methods in the - * class specification will available on the prototype. + * @type {Object} + * @private + */ + EventEmitter.prototype._events = undefined; + + /** + * Return a list of assigned event listeners. * - * @interface ReactClassInterface - * @internal + * @param {String} event The events that should be listed. + * @returns {Array} + * @api public */ - var ReactClassInterface = { + EventEmitter.prototype.listeners = function listeners(event) { + if (!this._events || !this._events[event]) return []; + if (this._events[event].fn) return [this._events[event].fn]; - /** - * An array of Mixin objects to include when defining your component. - * - * @type {array} - * @optional - */ - mixins: SpecPolicy.DEFINE_MANY, + for (var i = 0, l = this._events[event].length, ee = new Array(l); i < l; i++) { + ee[i] = this._events[event][i].fn; + } - /** - * An object containing properties and methods that should be defined on - * the component's constructor instead of its prototype (static methods). - * - * @type {object} - * @optional - */ - statics: SpecPolicy.DEFINE_MANY, + return ee; + }; - /** - * Definition of prop types for this component. - * - * @type {object} - * @optional - */ - propTypes: SpecPolicy.DEFINE_MANY, + /** + * Emit an event to all registered event listeners. + * + * @param {String} event The name of the event. + * @returns {Boolean} Indication if we've emitted an event. + * @api public + */ + EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { + if (!this._events || !this._events[event]) return false; - /** - * Definition of context types for this component. - * - * @type {object} - * @optional - */ - contextTypes: SpecPolicy.DEFINE_MANY, + var listeners = this._events[event] + , len = arguments.length + , args + , i; - /** - * Definition of context types this component sets for its children. - * - * @type {object} - * @optional - */ - childContextTypes: SpecPolicy.DEFINE_MANY, + if ('function' === typeof listeners.fn) { + if (listeners.once) this.removeListener(event, listeners.fn, true); - // ==== Definition methods ==== + switch (len) { + case 1: return listeners.fn.call(listeners.context), true; + case 2: return listeners.fn.call(listeners.context, a1), true; + case 3: return listeners.fn.call(listeners.context, a1, a2), true; + case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; + case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; + case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; + } - /** - * Invoked when the component is mounted. Values in the mapping will be set on - * `this.props` if that prop is not specified (i.e. using an `in` check). - * - * This method is invoked before `getInitialState` and therefore cannot rely - * on `this.state` or use `this.setState`. - * - * @return {object} - * @optional - */ - getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED, + for (i = 1, args = new Array(len -1); i < len; i++) { + args[i - 1] = arguments[i]; + } - /** - * Invoked once before the component is mounted. The return value will be used - * as the initial value of `this.state`. - * - * getInitialState: function() { - * return { - * isOn: false, - * fooBaz: new BazFoo() - * } - * } - * - * @return {object} - * @optional - */ - getInitialState: SpecPolicy.DEFINE_MANY_MERGED, + listeners.fn.apply(listeners.context, args); + } else { + var length = listeners.length + , j; - /** - * @return {object} - * @optional - */ - getChildContext: SpecPolicy.DEFINE_MANY_MERGED, + for (i = 0; i < length; i++) { + if (listeners[i].once) this.removeListener(event, listeners[i].fn, true); - /** - * Uses props from `this.props` and state from `this.state` to render the - * structure of the component. - * - * No guarantees are made about when or how often this method is invoked, so - * it must not have side effects. - * - * render: function() { - * var name = this.props.name; - * return
Hello, {name}!
; - * } - * - * @return {ReactComponent} - * @nosideeffects - * @required - */ - render: SpecPolicy.DEFINE_ONCE, + switch (len) { + case 1: listeners[i].fn.call(listeners[i].context); break; + case 2: listeners[i].fn.call(listeners[i].context, a1); break; + case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; + default: + if (!args) for (j = 1, args = new Array(len -1); j < len; j++) { + args[j - 1] = arguments[j]; + } + listeners[i].fn.apply(listeners[i].context, args); + } + } + } + return true; + }; - // ==== Delegate methods ==== + /** + * Register a new EventListener for the given event. + * + * @param {String} event Name of the event. + * @param {Functon} fn Callback function. + * @param {Mixed} context The context of the function. + * @api public + */ + EventEmitter.prototype.on = function on(event, fn, context) { + var listener = new EE(fn, context || this); - /** - * Invoked when the component is initially created and about to be mounted. - * This may have side effects, but any external subscriptions or data created - * by this method must be cleaned up in `componentWillUnmount`. - * - * @optional - */ - componentWillMount: SpecPolicy.DEFINE_MANY, + if (!this._events) this._events = {}; + if (!this._events[event]) this._events[event] = listener; + else { + if (!this._events[event].fn) this._events[event].push(listener); + else this._events[event] = [ + this._events[event], listener + ]; + } - /** - * Invoked when the component has been mounted and has a DOM representation. - * However, there is no guarantee that the DOM node is in the document. - * - * Use this as an opportunity to operate on the DOM when the component has - * been mounted (initialized and rendered) for the first time. - * - * @param {DOMElement} rootNode DOM element representing the component. - * @optional - */ - componentDidMount: SpecPolicy.DEFINE_MANY, - - /** - * Invoked before the component receives new props. - * - * Use this as an opportunity to react to a prop transition by updating the - * state using `this.setState`. Current props are accessed via `this.props`. - * - * componentWillReceiveProps: function(nextProps, nextContext) { - * this.setState({ - * likesIncreasing: nextProps.likeCount > this.props.likeCount - * }); - * } - * - * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop - * transition may cause a state change, but the opposite is not true. If you - * need it, you are probably looking for `componentWillUpdate`. - * - * @param {object} nextProps - * @optional - */ - componentWillReceiveProps: SpecPolicy.DEFINE_MANY, - - /** - * Invoked while deciding if the component should be updated as a result of - * receiving new props, state and/or context. - * - * Use this as an opportunity to `return false` when you're certain that the - * transition to the new props/state/context will not require a component - * update. - * - * shouldComponentUpdate: function(nextProps, nextState, nextContext) { - * return !equal(nextProps, this.props) || - * !equal(nextState, this.state) || - * !equal(nextContext, this.context); - * } - * - * @param {object} nextProps - * @param {?object} nextState - * @param {?object} nextContext - * @return {boolean} True if the component should update. - * @optional - */ - shouldComponentUpdate: SpecPolicy.DEFINE_ONCE, - - /** - * Invoked when the component is about to update due to a transition from - * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` - * and `nextContext`. - * - * Use this as an opportunity to perform preparation before an update occurs. - * - * NOTE: You **cannot** use `this.setState()` in this method. - * - * @param {object} nextProps - * @param {?object} nextState - * @param {?object} nextContext - * @param {ReactReconcileTransaction} transaction - * @optional - */ - componentWillUpdate: SpecPolicy.DEFINE_MANY, - - /** - * Invoked when the component's DOM representation has been updated. - * - * Use this as an opportunity to operate on the DOM when the component has - * been updated. - * - * @param {object} prevProps - * @param {?object} prevState - * @param {?object} prevContext - * @param {DOMElement} rootNode DOM element representing the component. - * @optional - */ - componentDidUpdate: SpecPolicy.DEFINE_MANY, - - /** - * Invoked when the component is about to be removed from its parent and have - * its DOM representation destroyed. - * - * Use this as an opportunity to deallocate any external resources. - * - * NOTE: There is no `componentDidUnmount` since your component will have been - * destroyed by that point. - * - * @optional - */ - componentWillUnmount: SpecPolicy.DEFINE_MANY, - - - - // ==== Advanced methods ==== - - /** - * Updates the component's currently mounted DOM representation. - * - * By default, this implements React's rendering and reconciliation algorithm. - * Sophisticated clients may wish to override this. - * - * @param {ReactReconcileTransaction} transaction - * @internal - * @overridable - */ - updateComponent: SpecPolicy.OVERRIDE_BASE - - }; + return this; + }; /** - * Mapping from class specification keys to special processing functions. + * Add an EventListener that's only called once. * - * Although these are declared like instance properties in the specification - * when defining classes using `React.createClass`, they are actually static - * and are accessible on the constructor instead of the prototype. Despite - * being static, they must be defined outside of the "statics" key under - * which all other static methods are defined. + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} context The context of the function. + * @api public */ - var RESERVED_SPEC_KEYS = { - displayName: function(Constructor, displayName) { - Constructor.displayName = displayName; - }, - mixins: function(Constructor, mixins) { - if (mixins) { - for (var i = 0; i < mixins.length; i++) { - mixSpecIntoComponent(Constructor, mixins[i]); - } - } - }, - childContextTypes: function(Constructor, childContextTypes) { - if ("production" !== (undefined)) { - validateTypeDef( - Constructor, - childContextTypes, - ReactPropTypeLocations.childContext - ); - } - Constructor.childContextTypes = assign( - {}, - Constructor.childContextTypes, - childContextTypes - ); - }, - contextTypes: function(Constructor, contextTypes) { - if ("production" !== (undefined)) { - validateTypeDef( - Constructor, - contextTypes, - ReactPropTypeLocations.context - ); - } - Constructor.contextTypes = assign( - {}, - Constructor.contextTypes, - contextTypes - ); - }, - /** - * Special case getDefaultProps which should move into statics but requires - * automatic merging. - */ - getDefaultProps: function(Constructor, getDefaultProps) { - if (Constructor.getDefaultProps) { - Constructor.getDefaultProps = createMergedResultFunction( - Constructor.getDefaultProps, - getDefaultProps - ); - } else { - Constructor.getDefaultProps = getDefaultProps; - } - }, - propTypes: function(Constructor, propTypes) { - if ("production" !== (undefined)) { - validateTypeDef( - Constructor, - propTypes, - ReactPropTypeLocations.prop - ); - } - Constructor.propTypes = assign( - {}, - Constructor.propTypes, - propTypes - ); - }, - statics: function(Constructor, statics) { - mixStaticSpecIntoComponent(Constructor, statics); - } - }; - - function validateTypeDef(Constructor, typeDef, location) { - for (var propName in typeDef) { - if (typeDef.hasOwnProperty(propName)) { - // use a warning instead of an invariant so components - // don't show up in prod but not in __DEV__ - ("production" !== (undefined) ? warning( - typeof typeDef[propName] === 'function', - '%s: %s type `%s` is invalid; it must be a function, usually from ' + - 'React.PropTypes.', - Constructor.displayName || 'ReactClass', - ReactPropTypeLocationNames[location], - propName - ) : null); - } - } - } + EventEmitter.prototype.once = function once(event, fn, context) { + var listener = new EE(fn, context || this, true); - function validateMethodOverride(proto, name) { - var specPolicy = ReactClassInterface.hasOwnProperty(name) ? - ReactClassInterface[name] : - null; - - // Disallow overriding of base class methods unless explicitly allowed. - if (ReactClassMixin.hasOwnProperty(name)) { - ("production" !== (undefined) ? invariant( - specPolicy === SpecPolicy.OVERRIDE_BASE, - 'ReactClassInterface: You are attempting to override ' + - '`%s` from your class specification. Ensure that your method names ' + - 'do not overlap with React methods.', - name - ) : invariant(specPolicy === SpecPolicy.OVERRIDE_BASE)); + if (!this._events) this._events = {}; + if (!this._events[event]) this._events[event] = listener; + else { + if (!this._events[event].fn) this._events[event].push(listener); + else this._events[event] = [ + this._events[event], listener + ]; } - // Disallow defining methods more than once unless explicitly allowed. - if (proto.hasOwnProperty(name)) { - ("production" !== (undefined) ? invariant( - specPolicy === SpecPolicy.DEFINE_MANY || - specPolicy === SpecPolicy.DEFINE_MANY_MERGED, - 'ReactClassInterface: You are attempting to define ' + - '`%s` on your component more than once. This conflict may be due ' + - 'to a mixin.', - name - ) : invariant(specPolicy === SpecPolicy.DEFINE_MANY || - specPolicy === SpecPolicy.DEFINE_MANY_MERGED)); - } - } + return this; + }; /** - * Mixin helper which handles policy validation and reserved - * specification keys when building React classses. + * Remove event listeners. + * + * @param {String} event The event we want to remove. + * @param {Function} fn The listener that we need to find. + * @param {Boolean} once Only remove once listeners. + * @api public */ - function mixSpecIntoComponent(Constructor, spec) { - if (!spec) { - return; - } - - ("production" !== (undefined) ? invariant( - typeof spec !== 'function', - 'ReactClass: You\'re attempting to ' + - 'use a component class as a mixin. Instead, just use a regular object.' - ) : invariant(typeof spec !== 'function')); - ("production" !== (undefined) ? invariant( - !ReactElement.isValidElement(spec), - 'ReactClass: You\'re attempting to ' + - 'use a component as a mixin. Instead, just use a regular object.' - ) : invariant(!ReactElement.isValidElement(spec))); - - var proto = Constructor.prototype; - - // By handling mixins before any other properties, we ensure the same - // chaining order is applied to methods with DEFINE_MANY policy, whether - // mixins are listed before or after these methods in the spec. - if (spec.hasOwnProperty(MIXINS_KEY)) { - RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); - } + EventEmitter.prototype.removeListener = function removeListener(event, fn, once) { + if (!this._events || !this._events[event]) return this; - for (var name in spec) { - if (!spec.hasOwnProperty(name)) { - continue; - } + var listeners = this._events[event] + , events = []; - if (name === MIXINS_KEY) { - // We have already handled mixins in a special case above - continue; + if (fn) { + if (listeners.fn && (listeners.fn !== fn || (once && !listeners.once))) { + events.push(listeners); } - - var property = spec[name]; - validateMethodOverride(proto, name); - - if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { - RESERVED_SPEC_KEYS[name](Constructor, property); - } else { - // Setup methods on prototype: - // The following member methods should not be automatically bound: - // 1. Expected ReactClass methods (in the "interface"). - // 2. Overridden methods (that were mixed in). - var isReactClassMethod = - ReactClassInterface.hasOwnProperty(name); - var isAlreadyDefined = proto.hasOwnProperty(name); - var markedDontBind = property && property.__reactDontBind; - var isFunction = typeof property === 'function'; - var shouldAutoBind = - isFunction && - !isReactClassMethod && - !isAlreadyDefined && - !markedDontBind; - - if (shouldAutoBind) { - if (!proto.__reactAutoBindMap) { - proto.__reactAutoBindMap = {}; - } - proto.__reactAutoBindMap[name] = property; - proto[name] = property; - } else { - if (isAlreadyDefined) { - var specPolicy = ReactClassInterface[name]; - - // These cases should already be caught by validateMethodOverride - ("production" !== (undefined) ? invariant( - isReactClassMethod && ( - (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY) - ), - 'ReactClass: Unexpected spec policy %s for key %s ' + - 'when mixing in component specs.', - specPolicy, - name - ) : invariant(isReactClassMethod && ( - (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY) - ))); - - // For methods which are defined more than once, call the existing - // methods before calling the new property, merging if appropriate. - if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) { - proto[name] = createMergedResultFunction(proto[name], property); - } else if (specPolicy === SpecPolicy.DEFINE_MANY) { - proto[name] = createChainedFunction(proto[name], property); - } - } else { - proto[name] = property; - if ("production" !== (undefined)) { - // Add verbose displayName to the function, which helps when looking - // at profiling tools. - if (typeof property === 'function' && spec.displayName) { - proto[name].displayName = spec.displayName + '_' + name; - } - } - } + if (!listeners.fn) for (var i = 0, length = listeners.length; i < length; i++) { + if (listeners[i].fn !== fn || (once && !listeners[i].once)) { + events.push(listeners[i]); } } } - } - - function mixStaticSpecIntoComponent(Constructor, statics) { - if (!statics) { - return; - } - for (var name in statics) { - var property = statics[name]; - if (!statics.hasOwnProperty(name)) { - continue; - } - - var isReserved = name in RESERVED_SPEC_KEYS; - ("production" !== (undefined) ? invariant( - !isReserved, - 'ReactClass: You are attempting to define a reserved ' + - 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + - 'as an instance property instead; it will still be accessible on the ' + - 'constructor.', - name - ) : invariant(!isReserved)); - - var isInherited = name in Constructor; - ("production" !== (undefined) ? invariant( - !isInherited, - 'ReactClass: You are attempting to define ' + - '`%s` on your component more than once. This conflict may be ' + - 'due to a mixin.', - name - ) : invariant(!isInherited)); - Constructor[name] = property; - } - } - /** - * Merge two objects, but throw if both contain the same key. - * - * @param {object} one The first object, which is mutated. - * @param {object} two The second object - * @return {object} one after it has been mutated to contain everything in two. - */ - function mergeIntoWithNoDuplicateKeys(one, two) { - ("production" !== (undefined) ? invariant( - one && two && typeof one === 'object' && typeof two === 'object', - 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.' - ) : invariant(one && two && typeof one === 'object' && typeof two === 'object')); - - for (var key in two) { - if (two.hasOwnProperty(key)) { - ("production" !== (undefined) ? invariant( - one[key] === undefined, - 'mergeIntoWithNoDuplicateKeys(): ' + - 'Tried to merge two objects with the same key: `%s`. This conflict ' + - 'may be due to a mixin; in particular, this may be caused by two ' + - 'getInitialState() or getDefaultProps() methods returning objects ' + - 'with clashing keys.', - key - ) : invariant(one[key] === undefined)); - one[key] = two[key]; - } + // + // Reset the array, or remove it completely if we have no more listeners. + // + if (events.length) { + this._events[event] = events.length === 1 ? events[0] : events; + } else { + delete this._events[event]; } - return one; - } - - /** - * Creates a function that invokes two functions and merges their return values. - * - * @param {function} one Function to invoke first. - * @param {function} two Function to invoke second. - * @return {function} Function that invokes the two argument functions. - * @private - */ - function createMergedResultFunction(one, two) { - return function mergedResult() { - var a = one.apply(this, arguments); - var b = two.apply(this, arguments); - if (a == null) { - return b; - } else if (b == null) { - return a; - } - var c = {}; - mergeIntoWithNoDuplicateKeys(c, a); - mergeIntoWithNoDuplicateKeys(c, b); - return c; - }; - } - /** - * Creates a function that invokes two functions and ignores their return vales. - * - * @param {function} one Function to invoke first. - * @param {function} two Function to invoke second. - * @return {function} Function that invokes the two argument functions. - * @private - */ - function createChainedFunction(one, two) { - return function chainedFunction() { - one.apply(this, arguments); - two.apply(this, arguments); - }; - } + return this; + }; /** - * Binds a method to the component. + * Remove all listeners or only the listeners for the specified event. * - * @param {object} component Component whose method is going to be bound. - * @param {function} method Method to be bound. - * @return {function} The bound method. + * @param {String} event The event want to remove all listeners for. + * @api public */ - function bindAutoBindMethod(component, method) { - var boundMethod = method.bind(component); - if ("production" !== (undefined)) { - boundMethod.__reactBoundContext = component; - boundMethod.__reactBoundMethod = method; - boundMethod.__reactBoundArguments = null; - var componentName = component.constructor.displayName; - var _bind = boundMethod.bind; - /* eslint-disable block-scoped-var, no-undef */ - boundMethod.bind = function(newThis ) {for (var args=[],$__0=1,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]); - // User is trying to bind() an autobound method; we effectively will - // ignore the value of "this" that the user is trying to use, so - // let's warn. - if (newThis !== component && newThis !== null) { - ("production" !== (undefined) ? warning( - false, - 'bind(): React component methods may only be bound to the ' + - 'component instance. See %s', - componentName - ) : null); - } else if (!args.length) { - ("production" !== (undefined) ? warning( - false, - 'bind(): You are binding a component method to the component. ' + - 'React does this for you automatically in a high-performance ' + - 'way, so you can safely remove this call. See %s', - componentName - ) : null); - return boundMethod; - } - var reboundMethod = _bind.apply(boundMethod, arguments); - reboundMethod.__reactBoundContext = component; - reboundMethod.__reactBoundMethod = method; - reboundMethod.__reactBoundArguments = args; - return reboundMethod; - /* eslint-enable */ - }; - } - return boundMethod; - } + EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { + if (!this._events) return this; - /** - * Binds all auto-bound methods in a component. - * - * @param {object} component Component whose method is going to be bound. - */ - function bindAutoBindMethods(component) { - for (var autoBindKey in component.__reactAutoBindMap) { - if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) { - var method = component.__reactAutoBindMap[autoBindKey]; - component[autoBindKey] = bindAutoBindMethod( - component, - ReactErrorUtils.guard( - method, - component.constructor.displayName + '.' + autoBindKey - ) - ); - } - } - } + if (event) delete this._events[event]; + else this._events = {}; - var typeDeprecationDescriptor = { - enumerable: false, - get: function() { - var displayName = this.displayName || this.name || 'Component'; - ("production" !== (undefined) ? warning( - false, - '%s.type is deprecated. Use %s directly to access the class.', - displayName, - displayName - ) : null); - Object.defineProperty(this, 'type', { - value: this - }); - return this; - } + return this; }; - /** - * Add more to the ReactClass base class. These are all legacy features and - * therefore not already part of the modern ReactComponent. - */ - var ReactClassMixin = { - - /** - * TODO: This will be deprecated because state should always keep a consistent - * type signature and the only use case for this, is to avoid that. - */ - replaceState: function(newState, callback) { - ReactUpdateQueue.enqueueReplaceState(this, newState); - if (callback) { - ReactUpdateQueue.enqueueCallback(this, callback); - } - }, - - /** - * Checks whether or not this composite component is mounted. - * @return {boolean} True if mounted, false otherwise. - * @protected - * @final - */ - isMounted: function() { - if ("production" !== (undefined)) { - var owner = ReactCurrentOwner.current; - if (owner !== null) { - ("production" !== (undefined) ? warning( - owner._warnedAboutRefsInRender, - '%s is accessing isMounted inside its render() function. ' + - 'render() should be a pure function of props and state. It should ' + - 'never access something that requires stale data from the previous ' + - 'render, such as refs. Move this logic to componentDidMount and ' + - 'componentDidUpdate instead.', - owner.getName() || 'A component' - ) : null); - owner._warnedAboutRefsInRender = true; - } - } - var internalInstance = ReactInstanceMap.get(this); - return ( - internalInstance && - internalInstance !== ReactLifeCycle.currentlyMountingInstance - ); - }, - - /** - * Sets a subset of the props. - * - * @param {object} partialProps Subset of the next props. - * @param {?function} callback Called after props are updated. - * @final - * @public - * @deprecated - */ - setProps: function(partialProps, callback) { - ReactUpdateQueue.enqueueSetProps(this, partialProps); - if (callback) { - ReactUpdateQueue.enqueueCallback(this, callback); - } - }, + // + // Alias methods names because people roll like that. + // + EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + EventEmitter.prototype.addListener = EventEmitter.prototype.on; - /** - * Replace all the props. - * - * @param {object} newProps Subset of the next props. - * @param {?function} callback Called after props are updated. - * @final - * @public - * @deprecated - */ - replaceProps: function(newProps, callback) { - ReactUpdateQueue.enqueueReplaceProps(this, newProps); - if (callback) { - ReactUpdateQueue.enqueueCallback(this, callback); - } - } + // + // This function doesn't apply anymore. + // + EventEmitter.prototype.setMaxListeners = function setMaxListeners() { + return this; }; - var ReactClassComponent = function() {}; - assign( - ReactClassComponent.prototype, - ReactComponent.prototype, - ReactClassMixin - ); - - /** - * Module for creating composite components. - * - * @class ReactClass - */ - var ReactClass = { + // + // Expose the module. + // + EventEmitter.EventEmitter = EventEmitter; + EventEmitter.EventEmitter2 = EventEmitter; + EventEmitter.EventEmitter3 = EventEmitter; - /** - * Creates a composite component class given a class specification. - * - * @param {object} spec Class specification (which must define `render`). - * @return {function} Component constructor function. - * @public - */ - createClass: function(spec) { - var Constructor = function(props, context) { - // This constructor is overridden by mocks. The argument is used - // by mocks to assert on what gets mounted. - - if ("production" !== (undefined)) { - ("production" !== (undefined) ? warning( - this instanceof Constructor, - 'Something is calling a React component directly. Use a factory or ' + - 'JSX instead. See: http://fb.me/react-legacyfactory' - ) : null); - } + // + // Expose the module. + // + module.exports = EventEmitter; - // Wire up auto-binding - if (this.__reactAutoBindMap) { - bindAutoBindMethods(this); - } - this.props = props; - this.context = context; - this.state = null; - - // ReactClasses doesn't have constructors. Instead, they use the - // getInitialState and componentWillMount methods for initialization. - - var initialState = this.getInitialState ? this.getInitialState() : null; - if ("production" !== (undefined)) { - // We allow auto-mocks to proceed as if they're returning null. - if (typeof initialState === 'undefined' && - this.getInitialState._isMockFunction) { - // This is probably bad practice. Consider warning here and - // deprecating this convenience. - initialState = null; - } - } - ("production" !== (undefined) ? invariant( - typeof initialState === 'object' && !Array.isArray(initialState), - '%s.getInitialState(): must return an object or null', - Constructor.displayName || 'ReactCompositeComponent' - ) : invariant(typeof initialState === 'object' && !Array.isArray(initialState))); +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { - this.state = initialState; - }; - Constructor.prototype = new ReactClassComponent(); - Constructor.prototype.constructor = Constructor; + 'use strict'; - injectedMixins.forEach( - mixSpecIntoComponent.bind(null, Constructor) - ); + Object.defineProperty(exports, '__esModule', { + value: true + }); - mixSpecIntoComponent(Constructor, spec); + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - // Initialize the defaultProps property after all mixins have been merged - if (Constructor.getDefaultProps) { - Constructor.defaultProps = Constructor.getDefaultProps(); - } + var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - if ("production" !== (undefined)) { - // This is a tag to indicate that the use of these method names is ok, - // since it's used with createClass. If it's not, then it's likely a - // mistake so we'll warn you to use the static property, property - // initializer or constructor respectively. - if (Constructor.getDefaultProps) { - Constructor.getDefaultProps.isReactClassApproved = {}; - } - if (Constructor.prototype.getInitialState) { - Constructor.prototype.getInitialState.isReactClassApproved = {}; - } - } + var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - ("production" !== (undefined) ? invariant( - Constructor.prototype.render, - 'createClass(...): Class specification must implement a `render` method.' - ) : invariant(Constructor.prototype.render)); - - if ("production" !== (undefined)) { - ("production" !== (undefined) ? warning( - !Constructor.prototype.componentShouldUpdate, - '%s has a method called ' + - 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + - 'The name is phrased as a question because the function is ' + - 'expected to return a value.', - spec.displayName || 'A component' - ) : null); - } + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - // Reduce time spent doing lookups by setting these on the prototype. - for (var methodName in ReactClassInterface) { - if (!Constructor.prototype[methodName]) { - Constructor.prototype[methodName] = null; - } - } + exports['default'] = makeAction; - // Legacy hook - Constructor.type = Constructor; - if ("production" !== (undefined)) { - try { - Object.defineProperty(Constructor, 'type', typeDeprecationDescriptor); - } catch (x) { - // IE will fail on defineProperty (es5-shim/sham too) - } - } + var _Symbol = __webpack_require__(3); - return Constructor; - }, + var _Symbol2 = _interopRequireDefault(_Symbol); - injection: { - injectMixin: function(mixin) { - injectedMixins.push(mixin); - } - } + var _import = __webpack_require__(1); - }; + var Sym = _interopRequireWildcard(_import); - module.exports = ReactClass; + var _import2 = __webpack_require__(4); + var utils = _interopRequireWildcard(_import2); -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactUpdates - */ - - 'use strict'; + var AltAction = (function () { + function AltAction(alt, name, action, actions, actionDetails) { + _classCallCheck(this, AltAction); - var CallbackQueue = __webpack_require__(52); - var PooledClass = __webpack_require__(15); - var ReactCurrentOwner = __webpack_require__(17); - var ReactPerf = __webpack_require__(18); - var ReactReconciler = __webpack_require__(29); - var Transaction = __webpack_require__(40); - - var assign = __webpack_require__(2); - var invariant = __webpack_require__(1); - var warning = __webpack_require__(4); - - var dirtyComponents = []; - var asapCallbackQueue = CallbackQueue.getPooled(); - var asapEnqueued = false; - - var batchingStrategy = null; - - function ensureInjected() { - ("production" !== (undefined) ? invariant( - ReactUpdates.ReactReconcileTransaction && batchingStrategy, - 'ReactUpdates: must inject a reconcile transaction class and batching ' + - 'strategy' - ) : invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy)); - } + this[Sym.ACTION_UID] = name; + this[Sym.ACTION_HANDLER] = action.bind(this); + this.actions = actions; + this.actionDetails = actionDetails; + this.alt = alt; + } - var NESTED_UPDATES = { - initialize: function() { - this.dirtyComponentsLength = dirtyComponents.length; - }, - close: function() { - if (this.dirtyComponentsLength !== dirtyComponents.length) { - // Additional updates were enqueued by componentDidUpdate handlers or - // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run - // these new updates so that if A's componentDidUpdate calls setState on - // B, B will update before the callback A's updater provided when calling - // setState. - dirtyComponents.splice(0, this.dirtyComponentsLength); - flushBatchedUpdates(); - } else { - dirtyComponents.length = 0; + _createClass(AltAction, [{ + key: 'dispatch', + value: function dispatch(data) { + this.alt.dispatch(this[Sym.ACTION_UID], data, this.actionDetails); } - } - }; + }]); - var UPDATE_QUEUEING = { - initialize: function() { - this.callbackQueue.reset(); - }, - close: function() { - this.callbackQueue.notifyAll(); - } - }; + return AltAction; + })(); - var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING]; + function makeAction(alt, namespace, name, implementation, obj) { + // make sure each Symbol is unique + var actionId = utils.uid(alt[Sym.ACTIONS_REGISTRY], '' + namespace + '.' + name); + alt[Sym.ACTIONS_REGISTRY][actionId] = 1; + var actionSymbol = _Symbol2['default']['for']('alt/' + actionId); - function ReactUpdatesFlushTransaction() { - this.reinitializeTransaction(); - this.dirtyComponentsLength = null; - this.callbackQueue = CallbackQueue.getPooled(); - this.reconcileTransaction = - ReactUpdates.ReactReconcileTransaction.getPooled(); - } + var data = { + namespace: namespace, + name: name, + id: actionId, + symbol: actionSymbol + }; - assign( - ReactUpdatesFlushTransaction.prototype, - Transaction.Mixin, { - getTransactionWrappers: function() { - return TRANSACTION_WRAPPERS; - }, + // Wrap the action so we can provide a dispatch method + var newAction = new AltAction(alt, actionSymbol, implementation, obj, data); - destructor: function() { - this.dirtyComponentsLength = null; - CallbackQueue.release(this.callbackQueue); - this.callbackQueue = null; - ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction); - this.reconcileTransaction = null; - }, + // the action itself + var action = newAction[Sym.ACTION_HANDLER]; + action.defer = function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } - perform: function(method, scope, a) { - // Essentially calls `this.reconcileTransaction.perform(method, scope, a)` - // with this transaction's wrappers around it. - return Transaction.Mixin.perform.call( - this, - this.reconcileTransaction.perform, - this.reconcileTransaction, - method, - scope, - a - ); - } - }); + setTimeout(function () { + newAction[Sym.ACTION_HANDLER].apply(null, args); + }); + }; + action[Sym.ACTION_KEY] = actionSymbol; + action.data = data; - PooledClass.addPoolingTo(ReactUpdatesFlushTransaction); + // ensure each reference is unique in the namespace + var container = alt.actions[namespace]; + var id = utils.uid(container, name); + container[id] = action; - function batchedUpdates(callback, a, b, c, d) { - ensureInjected(); - batchingStrategy.batchedUpdates(callback, a, b, c, d); + return action; } - /** - * Array comparator for ReactComponents by mount ordering. - * - * @param {ReactComponent} c1 first component you're comparing - * @param {ReactComponent} c2 second component you're comparing - * @return {number} Return value usable by Array.prototype.sort(). - */ - function mountOrderComparator(c1, c2) { - return c1._mountOrder - c2._mountOrder; - } + module.exports = exports['default']; - function runBatchedUpdates(transaction) { - var len = transaction.dirtyComponentsLength; - ("production" !== (undefined) ? invariant( - len === dirtyComponents.length, - 'Expected flush transaction\'s stored dirty-components length (%s) to ' + - 'match dirty-components array length (%s).', - len, - dirtyComponents.length - ) : invariant(len === dirtyComponents.length)); - - // Since reconciling a component higher in the owner hierarchy usually (not - // always -- see shouldComponentUpdate()) will reconcile children, reconcile - // them before their children by sorting the array. - dirtyComponents.sort(mountOrderComparator); - - for (var i = 0; i < len; i++) { - // If a component is unmounted before pending changes apply, it will still - // be here, but we assume that it has cleared its _pendingCallbacks and - // that performUpdateIfNecessary is a noop. - var component = dirtyComponents[i]; - - // If performUpdateIfNecessary happens to enqueue any new updates, we - // shouldn't execute the callbacks until the next render happens, so - // stash the callbacks first - var callbacks = component._pendingCallbacks; - component._pendingCallbacks = null; - - ReactReconciler.performUpdateIfNecessary( - component, - transaction.reconcileTransaction - ); +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { - if (callbacks) { - for (var j = 0; j < callbacks.length; j++) { - transaction.callbackQueue.enqueue( - callbacks[j], - component.getPublicInstance() - ); - } - } - } - } + 'use strict'; - var flushBatchedUpdates = function() { - // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents - // array and perform any updates enqueued by mount-ready handlers (i.e., - // componentDidUpdate) but we need to check here too in order to catch - // updates enqueued by setState callbacks and asap calls. - while (dirtyComponents.length || asapEnqueued) { - if (dirtyComponents.length) { - var transaction = ReactUpdatesFlushTransaction.getPooled(); - transaction.perform(runBatchedUpdates, null, transaction); - ReactUpdatesFlushTransaction.release(transaction); - } + Object.defineProperty(exports, '__esModule', { + value: true + }); - if (asapEnqueued) { - asapEnqueued = false; - var queue = asapCallbackQueue; - asapCallbackQueue = CallbackQueue.getPooled(); - queue.notifyAll(); - CallbackQueue.release(queue); - } - } - }; - flushBatchedUpdates = ReactPerf.measure( - 'ReactUpdates', - 'flushBatchedUpdates', - flushBatchedUpdates - ); + var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - /** - * Mark a component as needing a rerender, adding an optional callback to a - * list of functions which will be executed once the rerender occurs. - */ - function enqueueUpdate(component) { - ensureInjected(); - - // Various parts of our code (such as ReactCompositeComponent's - // _renderValidatedComponent) assume that calls to render aren't nested; - // verify that that's the case. (This is called by each top-level update - // function, like setProps, setState, forceUpdate, etc.; creation and - // destruction of top-level components is guarded in ReactMount.) - ("production" !== (undefined) ? warning( - ReactCurrentOwner.current == null, - 'enqueueUpdate(): Render methods should be a pure function of props ' + - 'and state; triggering nested component updates from render is not ' + - 'allowed. If necessary, trigger nested updates in ' + - 'componentDidUpdate.' - ) : null); - - if (!batchingStrategy.isBatchingUpdates) { - batchingStrategy.batchedUpdates(enqueueUpdate, component); - return; - } + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - dirtyComponents.push(component); - } + var _bind = Function.prototype.bind; - /** - * Enqueue a callback to be run at the end of the current batching cycle. Throws - * if no updates are currently being performed. - */ - function asap(callback, context) { - ("production" !== (undefined) ? invariant( - batchingStrategy.isBatchingUpdates, - 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + - 'updates are not being batched.' - ) : invariant(batchingStrategy.isBatchingUpdates)); - asapCallbackQueue.enqueue(callback, context); - asapEnqueued = true; - } + var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { desc = parent = getter = undefined; _again = false; var object = _x3, + property = _x4, + receiver = _x5; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - var ReactUpdatesInjection = { - injectReconcileTransaction: function(ReconcileTransaction) { - ("production" !== (undefined) ? invariant( - ReconcileTransaction, - 'ReactUpdates: must provide a reconcile transaction class' - ) : invariant(ReconcileTransaction)); - ReactUpdates.ReactReconcileTransaction = ReconcileTransaction; - }, + var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }; - injectBatchingStrategy: function(_batchingStrategy) { - ("production" !== (undefined) ? invariant( - _batchingStrategy, - 'ReactUpdates: must provide a batching strategy' - ) : invariant(_batchingStrategy)); - ("production" !== (undefined) ? invariant( - typeof _batchingStrategy.batchedUpdates === 'function', - 'ReactUpdates: must provide a batchedUpdates() function' - ) : invariant(typeof _batchingStrategy.batchedUpdates === 'function')); - ("production" !== (undefined) ? invariant( - typeof _batchingStrategy.isBatchingUpdates === 'boolean', - 'ReactUpdates: must provide an isBatchingUpdates boolean attribute' - ) : invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean')); - batchingStrategy = _batchingStrategy; - } - }; + var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - var ReactUpdates = { - /** - * React references `ReactReconcileTransaction` using this property in order - * to allow dependency injection. - * - * @internal - */ - ReactReconcileTransaction: null, + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - batchedUpdates: batchedUpdates, - enqueueUpdate: enqueueUpdate, - flushBatchedUpdates: flushBatchedUpdates, - injection: ReactUpdatesInjection, - asap: asap - }; + var _Dispatcher = __webpack_require__(12); - module.exports = ReactUpdates; + var _import = __webpack_require__(11); + var StateFunctions = _interopRequireWildcard(_import); -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { + var _import2 = __webpack_require__(1); - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactMount - */ + var Sym = _interopRequireWildcard(_import2); - 'use strict'; + var _import3 = __webpack_require__(2); - var DOMProperty = __webpack_require__(21); - var ReactBrowserEventEmitter = __webpack_require__(22); - var ReactCurrentOwner = __webpack_require__(17); - var ReactElement = __webpack_require__(3); - var ReactElementValidator = __webpack_require__(32); - var ReactEmptyComponent = __webpack_require__(36); - var ReactInstanceHandles = __webpack_require__(23); - var ReactInstanceMap = __webpack_require__(24); - var ReactMarkupChecksum = __webpack_require__(84); - var ReactPerf = __webpack_require__(18); - var ReactReconciler = __webpack_require__(29); - var ReactUpdateQueue = __webpack_require__(62); - var ReactUpdates = __webpack_require__(11); - - var emptyObject = __webpack_require__(41); - var containsNode = __webpack_require__(92); - var getReactRootElementInContainer = __webpack_require__(188); - var instantiateReactComponent = __webpack_require__(68); - var invariant = __webpack_require__(1); - var setInnerHTML = __webpack_require__(70); - var shouldUpdateReactComponent = __webpack_require__(71); - var warning = __webpack_require__(4); - - var SEPARATOR = ReactInstanceHandles.SEPARATOR; - - var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME; - var nodeCache = {}; - - var ELEMENT_NODE_TYPE = 1; - var DOC_NODE_TYPE = 9; - - /** Mapping from reactRootID to React component instance. */ - var instancesByReactRootID = {}; - - /** Mapping from reactRootID to `container` nodes. */ - var containersByReactRootID = {}; - - if ("production" !== (undefined)) { - /** __DEV__-only mapping from reactRootID to root elements. */ - var rootElementsByReactRootID = {}; - } + var fn = _interopRequireWildcard(_import3); - // Used to store breadth-first search state in findComponentRoot. - var findComponentRootReusableArray = []; + var _import4 = __webpack_require__(10); - /** - * Finds the index of the first character - * that's not common between the two given strings. - * - * @return {number} the index of the character where the strings diverge - */ - function firstDifferenceIndex(string1, string2) { - var minLen = Math.min(string1.length, string2.length); - for (var i = 0; i < minLen; i++) { - if (string1.charAt(i) !== string2.charAt(i)) { - return i; - } - } - return string1.length === string2.length ? -1 : minLen; - } + var store = _interopRequireWildcard(_import4); - /** - * @param {DOMElement} container DOM element that may contain a React component. - * @return {?string} A "reactRoot" ID, if a React component is rendered. - */ - function getReactRootID(container) { - var rootElement = getReactRootElementInContainer(container); - return rootElement && ReactMount.getID(rootElement); - } + var _import5 = __webpack_require__(4); - /** - * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form - * element can return its control whose name or ID equals ATTR_NAME. All - * DOM nodes support `getAttributeNode` but this can also get called on - * other objects so just return '' if we're given something other than a - * DOM node (such as window). - * - * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node. - * @return {string} ID of the supplied `domNode`. - */ - function getID(node) { - var id = internalGetID(node); - if (id) { - if (nodeCache.hasOwnProperty(id)) { - var cached = nodeCache[id]; - if (cached !== node) { - ("production" !== (undefined) ? invariant( - !isValid(cached, id), - 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', - ATTR_NAME, id - ) : invariant(!isValid(cached, id))); - - nodeCache[id] = node; - } - } else { - nodeCache[id] = node; - } - } + var utils = _interopRequireWildcard(_import5); - return id; - } + var _makeAction = __webpack_require__(6); - function internalGetID(node) { - // If node is something like a window, document, or text node, none of - // which support attributes or a .getAttribute method, gracefully return - // the empty string, as if the attribute were missing. - return node && node.getAttribute && node.getAttribute(ATTR_NAME) || ''; - } + var _makeAction2 = _interopRequireDefault(_makeAction); - /** - * Sets the React-specific ID of the given node. - * - * @param {DOMElement} node The DOM node whose ID will be set. - * @param {string} id The value of the ID attribute. - */ - function setID(node, id) { - var oldID = internalGetID(node); - if (oldID !== id) { - delete nodeCache[oldID]; - } - node.setAttribute(ATTR_NAME, id); - nodeCache[id] = node; - } + var Alt = (function () { + function Alt() { + var config = arguments[0] === undefined ? {} : arguments[0]; - /** - * Finds the node with the supplied React-generated DOM ID. - * - * @param {string} id A React-generated DOM ID. - * @return {DOMElement} DOM node with the suppled `id`. - * @internal - */ - function getNode(id) { - if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { - nodeCache[id] = ReactMount.findReactNodeByID(id); - } - return nodeCache[id]; - } + _classCallCheck(this, Alt); - /** - * Finds the node with the supplied public React instance. - * - * @param {*} instance A public React instance. - * @return {?DOMElement} DOM node with the suppled `id`. - * @internal - */ - function getNodeFromInstance(instance) { - var id = ReactInstanceMap.get(instance)._rootNodeID; - if (ReactEmptyComponent.isNullComponentID(id)) { - return null; - } - if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { - nodeCache[id] = ReactMount.findReactNodeByID(id); + this.config = config; + this.serialize = config.serialize || JSON.stringify; + this.deserialize = config.deserialize || JSON.parse; + this.dispatcher = config.dispatcher || new _Dispatcher.Dispatcher(); + this.actions = { global: {} }; + this.stores = {}; + this.storeTransforms = config.storeTransforms || []; + this[Sym.ACTIONS_REGISTRY] = {}; + this[Sym.INIT_SNAPSHOT] = {}; + this[Sym.LAST_SNAPSHOT] = {}; } - return nodeCache[id]; - } - /** - * A node is "valid" if it is contained by a currently mounted container. - * - * This means that the node does not have to be contained by a document in - * order to be considered valid. - * - * @param {?DOMElement} node The candidate DOM node. - * @param {string} id The expected ID of the node. - * @return {boolean} Whether the node is contained by a mounted container. - */ - function isValid(node, id) { - if (node) { - ("production" !== (undefined) ? invariant( - internalGetID(node) === id, - 'ReactMount: Unexpected modification of `%s`', - ATTR_NAME - ) : invariant(internalGetID(node) === id)); - - var container = ReactMount.findReactContainerForID(id); - if (container && containsNode(container, node)) { - return true; + _createClass(Alt, [{ + key: 'dispatch', + value: function dispatch(action, data, details) { + this.dispatcher.dispatch({ action: action, data: data, details: details }); } - } + }, { + key: 'createUnsavedStore', + value: function createUnsavedStore(StoreModel) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - return false; - } + var key = StoreModel.displayName || ''; + store.createStoreConfig(this.config, StoreModel); + var Store = store.transformStore(this.storeTransforms, StoreModel); - /** - * Causes the cache to forget about one React-specific ID. - * - * @param {string} id The ID to forget. - */ - function purgeID(id) { - delete nodeCache[id]; - } + return fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); + } + }, { + key: 'createStore', + value: function createStore(StoreModel, iden) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } - var deepestNodeSoFar = null; - function findDeepestCachedAncestorImpl(ancestorID) { - var ancestor = nodeCache[ancestorID]; - if (ancestor && isValid(ancestor, ancestorID)) { - deepestNodeSoFar = ancestor; - } else { - // This node isn't populated in the cache, so presumably none of its - // descendants are. Break out of the loop. - return false; - } - } + var key = iden || StoreModel.displayName || StoreModel.name || ''; + store.createStoreConfig(this.config, StoreModel); + var Store = store.transformStore(this.storeTransforms, StoreModel); - /** - * Return the deepest cached node whose ID is a prefix of `targetID`. - */ - function findDeepestCachedAncestor(targetID) { - deepestNodeSoFar = null; - ReactInstanceHandles.traverseAncestors( - targetID, - findDeepestCachedAncestorImpl - ); - - var foundNode = deepestNodeSoFar; - deepestNodeSoFar = null; - return foundNode; - } + if (this.stores[key] || !key) { + if (this.stores[key]) { + utils.warn('A store named ' + key + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store'); + } else { + utils.warn('Store name was not specified'); + } - /** - * Mounts this component and inserts it into the DOM. - * - * @param {ReactComponent} componentInstance The instance to mount. - * @param {string} rootID DOM ID of the root node. - * @param {DOMElement} container DOM element to mount into. - * @param {ReactReconcileTransaction} transaction - * @param {boolean} shouldReuseMarkup If true, do not insert markup - */ - function mountComponentIntoNode( - componentInstance, - rootID, - container, - transaction, - shouldReuseMarkup) { - var markup = ReactReconciler.mountComponent( - componentInstance, rootID, transaction, emptyObject - ); - componentInstance._isTopLevel = true; - ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup); - } + key = utils.uid(this.stores, key); + } - /** - * Batched mount. - * - * @param {ReactComponent} componentInstance The instance to mount. - * @param {string} rootID DOM ID of the root node. - * @param {DOMElement} container DOM element to mount into. - * @param {boolean} shouldReuseMarkup If true, do not insert markup - */ - function batchedMountComponentIntoNode( - componentInstance, - rootID, - container, - shouldReuseMarkup) { - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(); - transaction.perform( - mountComponentIntoNode, - null, - componentInstance, - rootID, - container, - transaction, - shouldReuseMarkup - ); - ReactUpdates.ReactReconcileTransaction.release(transaction); - } + var storeInstance = fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - /** - * Mounting is the process of initializing a React component by creating its - * representative DOM elements and inserting them into a supplied `container`. - * Any prior content inside `container` is destroyed in the process. - * - * ReactMount.render( - * component, - * document.getElementById('container') - * ); - * - *
<-- Supplied `container`. - *
<-- Rendered reactRoot of React - * // ... component. - *
- *
- * - * Inside of `container`, the first element rendered is the "reactRoot". - */ - var ReactMount = { - /** Exposed for debugging purposes **/ - _instancesByReactRootID: instancesByReactRootID, + this.stores[key] = storeInstance; + StateFunctions.saveInitialSnapshot(this, key); - /** - * This is a hook provided to support rendering React components while - * ensuring that the apparent scroll position of its `container` does not - * change. - * - * @param {DOMElement} container The `container` being rendered into. - * @param {function} renderCallback This must be called once to do the render. - */ - scrollMonitor: function(container, renderCallback) { - renderCallback(); - }, + return storeInstance; + } + }, { + key: 'generateActions', + value: function generateActions() { + for (var _len3 = arguments.length, actionNames = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + actionNames[_key3] = arguments[_key3]; + } - /** - * Take a component that's already mounted into the DOM and replace its props - * @param {ReactComponent} prevComponent component instance already in the DOM - * @param {ReactElement} nextElement component instance to render - * @param {DOMElement} container container to render into - * @param {?function} callback function triggered on completion - */ - _updateRootComponent: function( - prevComponent, - nextElement, - container, - callback) { - if ("production" !== (undefined)) { - ReactElementValidator.checkAndWarnForMutatedProps(nextElement); + var actions = { name: 'global' }; + return this.createActions(actionNames.reduce(function (obj, action) { + obj[action] = utils.dispatchIdentity; + return obj; + }, actions)); } + }, { + key: 'createAction', + value: function createAction(name, implementation, obj) { + return _makeAction2['default'](this, 'global', name, implementation, obj); + } + }, { + key: 'createActions', + value: function createActions(ActionsClass) { + var _this2 = this; - ReactMount.scrollMonitor(container, function() { - ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement); - if (callback) { - ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback); + for (var _len4 = arguments.length, argsForConstructor = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { + argsForConstructor[_key4 - 2] = arguments[_key4]; } - }); - if ("production" !== (undefined)) { - // Record the root element in case it later gets transplanted. - rootElementsByReactRootID[getReactRootID(container)] = - getReactRootElementInContainer(container); - } + var exportObj = arguments[1] === undefined ? {} : arguments[1]; - return prevComponent; - }, + var actions = {}; + var key = utils.uid(this[Sym.ACTIONS_REGISTRY], ActionsClass.displayName || ActionsClass.name || 'Unknown'); - /** - * Register a component into the instance map and starts scroll value - * monitoring - * @param {ReactComponent} nextComponent component instance to render - * @param {DOMElement} container container to render into - * @return {string} reactRoot ID prefix - */ - _registerComponent: function(nextComponent, container) { - ("production" !== (undefined) ? invariant( - container && ( - (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE) - ), - '_registerComponent(...): Target container is not a DOM element.' - ) : invariant(container && ( - (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE) - ))); - - ReactBrowserEventEmitter.ensureScrollValueMonitoring(); - - var reactRootID = ReactMount.registerContainer(container); - instancesByReactRootID[reactRootID] = nextComponent; - return reactRootID; - }, + if (fn.isFunction(ActionsClass)) { + (function () { + fn.assign(actions, utils.getInternalMethods(ActionsClass, true)); - /** - * Render a new component into the DOM. - * @param {ReactElement} nextElement element to render - * @param {DOMElement} container container to render into - * @param {boolean} shouldReuseMarkup if we should skip the markup insertion - * @return {ReactComponent} nextComponent - */ - _renderNewRootComponent: function( - nextElement, - container, - shouldReuseMarkup - ) { - // Various parts of our code (such as ReactCompositeComponent's - // _renderValidatedComponent) assume that calls to render aren't nested; - // verify that that's the case. - ("production" !== (undefined) ? warning( - ReactCurrentOwner.current == null, - '_renderNewRootComponent(): Render methods should be a pure function ' + - 'of props and state; triggering nested component updates from ' + - 'render is not allowed. If necessary, trigger nested updates in ' + - 'componentDidUpdate.' - ) : null); - - var componentInstance = instantiateReactComponent(nextElement, null); - var reactRootID = ReactMount._registerComponent( - componentInstance, - container - ); + var ActionsGenerator = (function (_ActionsClass) { + function ActionsGenerator() { + for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } - // The initial render is synchronous but any updates that happen during - // rendering, in componentWillMount or componentDidMount, will be batched - // according to the current batching strategy. + _classCallCheck(this, ActionsGenerator); - ReactUpdates.batchedUpdates( - batchedMountComponentIntoNode, - componentInstance, - reactRootID, - container, - shouldReuseMarkup - ); + _get(Object.getPrototypeOf(ActionsGenerator.prototype), 'constructor', this).apply(this, args); + } - if ("production" !== (undefined)) { - // Record the root element in case it later gets transplanted. - rootElementsByReactRootID[reactRootID] = - getReactRootElementInContainer(container); - } + _inherits(ActionsGenerator, _ActionsClass); - return componentInstance; - }, + _createClass(ActionsGenerator, [{ + key: 'generateActions', + value: function generateActions() { + for (var _len6 = arguments.length, actionNames = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + actionNames[_key6] = arguments[_key6]; + } - /** - * Renders a React component into the DOM in the supplied `container`. - * - * If the React component was previously rendered into `container`, this will - * perform an update on it and only mutate the DOM as necessary to reflect the - * latest React component. - * - * @param {ReactElement} nextElement Component element to render. - * @param {DOMElement} container DOM element to render into. - * @param {?function} callback function triggered on completion - * @return {ReactComponent} Component instance rendered in `container`. - */ - render: function(nextElement, container, callback) { - ("production" !== (undefined) ? invariant( - ReactElement.isValidElement(nextElement), - 'React.render(): Invalid component element.%s', - ( - typeof nextElement === 'string' ? - ' Instead of passing an element string, make sure to instantiate ' + - 'it by passing it to React.createElement.' : - typeof nextElement === 'function' ? - ' Instead of passing a component class, make sure to instantiate ' + - 'it by passing it to React.createElement.' : - // Check if it quacks like an element - nextElement != null && nextElement.props !== undefined ? - ' This may be caused by unintentionally loading two independent ' + - 'copies of React.' : - '' - ) - ) : invariant(ReactElement.isValidElement(nextElement))); - - var prevComponent = instancesByReactRootID[getReactRootID(container)]; - - if (prevComponent) { - var prevElement = prevComponent._currentElement; - if (shouldUpdateReactComponent(prevElement, nextElement)) { - return ReactMount._updateRootComponent( - prevComponent, - nextElement, - container, - callback - ).getPublicInstance(); - } else { - ReactMount.unmountComponentAtNode(container); - } - } + actionNames.forEach(function (actionName) { + actions[actionName] = utils.dispatchIdentity; + }); + } + }]); - var reactRootElement = getReactRootElementInContainer(container); - var containerHasReactMarkup = - reactRootElement && ReactMount.isRenderedByReact(reactRootElement); - - if ("production" !== (undefined)) { - if (!containerHasReactMarkup || reactRootElement.nextSibling) { - var rootElementSibling = reactRootElement; - while (rootElementSibling) { - if (ReactMount.isRenderedByReact(rootElementSibling)) { - ("production" !== (undefined) ? warning( - false, - 'render(): Target node has markup rendered by React, but there ' + - 'are unrelated nodes as well. This is most commonly caused by ' + - 'white-space inserted around server-rendered markup.' - ) : null); - break; - } + return ActionsGenerator; + })(ActionsClass); - rootElementSibling = rootElementSibling.nextSibling; - } + fn.assign(actions, new (_bind.apply(ActionsGenerator, [null].concat(argsForConstructor)))()); + })(); + } else { + fn.assign(actions, ActionsClass); } - } - - var shouldReuseMarkup = containerHasReactMarkup && !prevComponent; - var component = ReactMount._renderNewRootComponent( - nextElement, - container, - shouldReuseMarkup - ).getPublicInstance(); - if (callback) { - callback.call(component); - } - return component; - }, + this.actions[key] = this.actions[key] || {}; - /** - * Constructs a component instance of `constructor` with `initialProps` and - * renders it into the supplied `container`. - * - * @param {function} constructor React component constructor. - * @param {?object} props Initial props of the component instance. - * @param {DOMElement} container DOM element to render into. - * @return {ReactComponent} Component instance rendered in `container`. - */ - constructAndRenderComponent: function(constructor, props, container) { - var element = ReactElement.createElement(constructor, props); - return ReactMount.render(element, container); - }, + fn.eachObject(function (actionName, action) { + if (!fn.isFunction(action)) { + return; + } - /** - * Constructs a component instance of `constructor` with `initialProps` and - * renders it into a container node identified by supplied `id`. - * - * @param {function} componentConstructor React component constructor - * @param {?object} props Initial props of the component instance. - * @param {string} id ID of the DOM element to render into. - * @return {ReactComponent} Component instance rendered in the container node. - */ - constructAndRenderComponentByID: function(constructor, props, id) { - var domNode = document.getElementById(id); - ("production" !== (undefined) ? invariant( - domNode, - 'Tried to get element with id of "%s" but it is not present on the page.', - id - ) : invariant(domNode)); - return ReactMount.constructAndRenderComponent(constructor, props, domNode); - }, + // create the action + exportObj[actionName] = _makeAction2['default'](_this2, key, actionName, action, exportObj); - /** - * Registers a container node into which React components will be rendered. - * This also creates the "reactRoot" ID that will be assigned to the element - * rendered within. - * - * @param {DOMElement} container DOM element to register as a container. - * @return {string} The "reactRoot" ID of elements rendered within. - */ - registerContainer: function(container) { - var reactRootID = getReactRootID(container); - if (reactRootID) { - // If one exists, make sure it is a valid "reactRoot" ID. - reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID); - } - if (!reactRootID) { - // No valid "reactRoot" ID found, create one. - reactRootID = ReactInstanceHandles.createReactRootID(); + // generate a constant + var constant = utils.formatAsConstant(actionName); + exportObj[constant] = exportObj[actionName][Sym.ACTION_KEY]; + }, [actions]); + return exportObj; } - containersByReactRootID[reactRootID] = container; - return reactRootID; - }, + }, { + key: 'takeSnapshot', + value: function takeSnapshot() { + for (var _len7 = arguments.length, storeNames = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + storeNames[_key7] = arguments[_key7]; + } - /** - * Unmounts and destroys the React component rendered in the `container`. - * - * @param {DOMElement} container DOM element containing a React component. - * @return {boolean} True if a component was found in and unmounted from - * `container` - */ - unmountComponentAtNode: function(container) { - // Various parts of our code (such as ReactCompositeComponent's - // _renderValidatedComponent) assume that calls to render aren't nested; - // verify that that's the case. (Strictly speaking, unmounting won't cause a - // render but we still don't expect to be in a render call here.) - ("production" !== (undefined) ? warning( - ReactCurrentOwner.current == null, - 'unmountComponentAtNode(): Render methods should be a pure function of ' + - 'props and state; triggering nested component updates from render is ' + - 'not allowed. If necessary, trigger nested updates in ' + - 'componentDidUpdate.' - ) : null); - - ("production" !== (undefined) ? invariant( - container && ( - (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE) - ), - 'unmountComponentAtNode(...): Target container is not a DOM element.' - ) : invariant(container && ( - (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE) - ))); - - var reactRootID = getReactRootID(container); - var component = instancesByReactRootID[reactRootID]; - if (!component) { - return false; + var state = StateFunctions.snapshot(this, storeNames); + fn.assign(this[Sym.LAST_SNAPSHOT], state); + return this.serialize(state); } - ReactMount.unmountComponentFromNode(component, container); - delete instancesByReactRootID[reactRootID]; - delete containersByReactRootID[reactRootID]; - if ("production" !== (undefined)) { - delete rootElementsByReactRootID[reactRootID]; + }, { + key: 'rollback', + value: function rollback() { + StateFunctions.setAppState(this, this.serialize(this[Sym.LAST_SNAPSHOT]), function (storeInst) { + storeInst[Sym.LIFECYCLE].emit('rollback'); + storeInst.emitChange(); + }); } - return true; - }, + }, { + key: 'recycle', + value: function recycle() { + for (var _len8 = arguments.length, storeNames = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { + storeNames[_key8] = arguments[_key8]; + } - /** - * Unmounts a component and removes it from the DOM. - * - * @param {ReactComponent} instance React component instance. - * @param {DOMElement} container DOM element to unmount from. - * @final - * @internal - * @see {ReactMount.unmountComponentAtNode} - */ - unmountComponentFromNode: function(instance, container) { - ReactReconciler.unmountComponent(instance); + var initialSnapshot = storeNames.length ? StateFunctions.filterSnapshots(this, this[Sym.INIT_SNAPSHOT], storeNames) : this[Sym.INIT_SNAPSHOT]; - if (container.nodeType === DOC_NODE_TYPE) { - container = container.documentElement; + StateFunctions.setAppState(this, this.serialize(initialSnapshot), function (storeInst) { + storeInst[Sym.LIFECYCLE].emit('init'); + storeInst.emitChange(); + }); } - - // http://jsperf.com/emptying-a-node - while (container.lastChild) { - container.removeChild(container.lastChild); + }, { + key: 'flush', + value: function flush() { + var state = this.serialize(StateFunctions.snapshot(this)); + this.recycle(); + return state; } - }, - - /** - * Finds the container DOM element that contains React component to which the - * supplied DOM `id` belongs. - * - * @param {string} id The ID of an element rendered by a React component. - * @return {?DOMElement} DOM element that contains the `id`. - */ - findReactContainerForID: function(id) { - var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id); - var container = containersByReactRootID[reactRootID]; - - if ("production" !== (undefined)) { - var rootElement = rootElementsByReactRootID[reactRootID]; - if (rootElement && rootElement.parentNode !== container) { - ("production" !== (undefined) ? invariant( - // Call internalGetID here because getID calls isValid which calls - // findReactContainerForID (this function). - internalGetID(rootElement) === reactRootID, - 'ReactMount: Root element ID differed from reactRootID.' - ) : invariant(// Call internalGetID here because getID calls isValid which calls - // findReactContainerForID (this function). - internalGetID(rootElement) === reactRootID)); - - var containerChild = container.firstChild; - if (containerChild && - reactRootID === internalGetID(containerChild)) { - // If the container has a new child with the same ID as the old - // root element, then rootElementsByReactRootID[reactRootID] is - // just stale and needs to be updated. The case that deserves a - // warning is when the container is empty. - rootElementsByReactRootID[reactRootID] = containerChild; - } else { - ("production" !== (undefined) ? warning( - false, - 'ReactMount: Root element has been removed from its original ' + - 'container. New container:', rootElement.parentNode - ) : null); - } + }, { + key: 'bootstrap', + value: function bootstrap(data) { + StateFunctions.setAppState(this, data, function (storeInst) { + storeInst[Sym.LIFECYCLE].emit('bootstrap'); + storeInst.emitChange(); + }); + } + }, { + key: 'prepare', + value: function prepare(storeInst, payload) { + var data = {}; + if (!storeInst.displayName) { + throw new ReferenceError('Store provided does not have a name'); } + data[storeInst.displayName] = payload; + return this.serialize(data); } + }, { + key: 'addActions', - return container; - }, + // Instance type methods for injecting alt into your application as context - /** - * Finds an element rendered by React with the supplied ID. - * - * @param {string} id ID of a DOM node in the React component. - * @return {DOMElement} Root DOM node of the React component. - */ - findReactNodeByID: function(id) { - var reactRoot = ReactMount.findReactContainerForID(id); - return ReactMount.findComponentRoot(reactRoot, id); - }, + value: function addActions(name, ActionsClass) { + for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { + args[_key9 - 2] = arguments[_key9]; + } - /** - * True if the supplied `node` is rendered by React. - * - * @param {*} node DOM Element to check. - * @return {boolean} True if the DOM Element appears to be rendered by React. - * @internal - */ - isRenderedByReact: function(node) { - if (node.nodeType !== 1) { - // Not a DOMElement, therefore not a React component - return false; + this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) : this.createActions.apply(this, [ActionsClass].concat(args)); } - var id = ReactMount.getID(node); - return id ? id.charAt(0) === SEPARATOR : false; - }, - - /** - * Traverses up the ancestors of the supplied node to find a node that is a - * DOM representation of a React component. - * - * @param {*} node - * @return {?DOMEventTarget} - * @internal - */ - getFirstReactDOM: function(node) { - var current = node; - while (current && current.parentNode !== current) { - if (ReactMount.isRenderedByReact(current)) { - return current; + }, { + key: 'addStore', + value: function addStore(name, StoreModel) { + for (var _len10 = arguments.length, args = Array(_len10 > 2 ? _len10 - 2 : 0), _key10 = 2; _key10 < _len10; _key10++) { + args[_key10 - 2] = arguments[_key10]; } - current = current.parentNode; + + this.createStore.apply(this, [StoreModel, name].concat(args)); } - return null; - }, + }, { + key: 'getActions', + value: function getActions(name) { + return this.actions[name]; + } + }, { + key: 'getStore', + value: function getStore(name) { + return this.stores[name]; + } + }]); - /** - * Finds a node with the supplied `targetID` inside of the supplied - * `ancestorNode`. Exploits the ID naming scheme to perform the search - * quickly. - * - * @param {DOMEventTarget} ancestorNode Search from this root. - * @pararm {string} targetID ID of the DOM representation of the component. - * @return {DOMEventTarget} DOM node with the supplied `targetID`. - * @internal - */ - findComponentRoot: function(ancestorNode, targetID) { - var firstChildren = findComponentRootReusableArray; - var childIndex = 0; - - var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode; - - firstChildren[0] = deepestAncestor.firstChild; - firstChildren.length = 1; - - while (childIndex < firstChildren.length) { - var child = firstChildren[childIndex++]; - var targetChild; - - while (child) { - var childID = ReactMount.getID(child); - if (childID) { - // Even if we find the node we're looking for, we finish looping - // through its siblings to ensure they're cached so that we don't have - // to revisit this node again. Otherwise, we make n^2 calls to getID - // when visiting the many children of a single node in order. - - if (targetID === childID) { - targetChild = child; - } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) { - // If we find a child whose ID is an ancestor of the given ID, - // then we can be sure that we only want to search the subtree - // rooted at this child, so we can throw out the rest of the - // search state. - firstChildren.length = childIndex = 0; - firstChildren.push(child.firstChild); - } + return Alt; + })(); - } else { - // If this child had no ID, then there's a chance that it was - // injected automatically by the browser, as when a `` - // element sprouts an extra `` child as a side effect of - // `.innerHTML` parsing. Optimistically continue down this - // branch, but not before examining the other siblings. - firstChildren.push(child.firstChild); - } + exports['default'] = Alt; + module.exports = exports['default']; - child = child.nextSibling; - } +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { - if (targetChild) { - // Emptying firstChildren/findComponentRootReusableArray is - // not necessary for correctness, but it helps the GC reclaim - // any nodes that were left at the end of the search. - firstChildren.length = 0; + 'use strict'; - return targetChild; - } - } + Object.defineProperty(exports, '__esModule', { + value: true + }); - firstChildren.length = 0; - - ("production" !== (undefined) ? invariant( - false, - 'findComponentRoot(..., %s): Unable to find element. This probably ' + - 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + - 'usually due to forgetting a when using tables, nesting tags ' + - 'like ,

, or , or using non-SVG elements in an ' + - 'parent. ' + - 'Try inspecting the child nodes of the element with React ID `%s`.', - targetID, - ReactMount.getID(ancestorNode) - ) : invariant(false)); - }, + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - _mountImageIntoNode: function(markup, container, shouldReuseMarkup) { - ("production" !== (undefined) ? invariant( - container && ( - (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE) - ), - 'mountComponentIntoNode(...): Target container is not valid.' - ) : invariant(container && ( - (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE) - ))); - - if (shouldReuseMarkup) { - var rootElement = getReactRootElementInContainer(container); - if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) { - return; - } else { - var checksum = rootElement.getAttribute( - ReactMarkupChecksum.CHECKSUM_ATTR_NAME - ); - rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - var rootMarkup = rootElement.outerHTML; - rootElement.setAttribute( - ReactMarkupChecksum.CHECKSUM_ATTR_NAME, - checksum - ); + var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - var diffIndex = firstDifferenceIndex(markup, rootMarkup); - var difference = ' (client) ' + - markup.substring(diffIndex - 20, diffIndex + 20) + - '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20); - - ("production" !== (undefined) ? invariant( - container.nodeType !== DOC_NODE_TYPE, - 'You\'re trying to render a component to the document using ' + - 'server rendering but the checksum was invalid. This usually ' + - 'means you rendered a different component type or props on ' + - 'the client from the one on the server, or your render() ' + - 'methods are impure. React cannot handle this case due to ' + - 'cross-browser quirks by rendering at the document root. You ' + - 'should look for environment dependent code in your components ' + - 'and ensure the props are the same client and server side:\n%s', - difference - ) : invariant(container.nodeType !== DOC_NODE_TYPE)); - - if ("production" !== (undefined)) { - ("production" !== (undefined) ? warning( - false, - 'React attempted to reuse markup in a container but the ' + - 'checksum was invalid. This generally means that you are ' + - 'using server rendering and the markup generated on the ' + - 'server was not what the client was expecting. React injected ' + - 'new markup to compensate which works but you have lost many ' + - 'of the benefits of server rendering. Instead, figure out ' + - 'why the markup being generated is different on the client ' + - 'or server:\n%s', - difference - ) : null); - } - } - } + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - ("production" !== (undefined) ? invariant( - container.nodeType !== DOC_NODE_TYPE, - 'You\'re trying to render a component to the document but ' + - 'you didn\'t use server rendering. We can\'t do this ' + - 'without using server rendering due to cross-browser quirks. ' + - 'See React.renderToString() for server rendering.' - ) : invariant(container.nodeType !== DOC_NODE_TYPE)); + var _EventEmitter = __webpack_require__(5); - setInnerHTML(container, markup); - }, + var _EventEmitter2 = _interopRequireDefault(_EventEmitter); - /** - * React ID utilities. - */ + var _Symbol = __webpack_require__(3); - getReactRootID: getReactRootID, + var _Symbol2 = _interopRequireDefault(_Symbol); - getID: getID, + var _import = __webpack_require__(1); - setID: setID, + var Sym = _interopRequireWildcard(_import); - getNode: getNode, + var _import2 = __webpack_require__(2); - getNodeFromInstance: getNodeFromInstance, + var fn = _interopRequireWildcard(_import2); - purgeID: purgeID - }; - - ReactPerf.measureMethods(ReactMount, 'ReactMount', { - _renderNewRootComponent: '_renderNewRootComponent', - _mountImageIntoNode: '_mountImageIntoNode' - }); + // event emitter instance + var EE = _Symbol2['default'](); - module.exports = ReactMount; + var AltStore = (function () { + function AltStore(alt, model, state, StoreModel) { + var _this = this; + _classCallCheck(this, AltStore); -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { + this[EE] = new _EventEmitter2['default'](); + this[Sym.LIFECYCLE] = model[Sym.LIFECYCLE]; + this[Sym.STATE_CONTAINER] = state || model; - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule emptyFunction - */ + this._storeName = model._storeName; + this.boundListeners = model[Sym.ALL_LISTENERS]; + this.StoreModel = StoreModel; - function makeEmptyFunction(arg) { - return function() { - return arg; - }; - } + fn.assign(this, model[Sym.PUBLIC_METHODS]); - /** - * This function accepts and discards inputs; it has no side effects. This is - * primarily useful idiomatically for overridable function endpoints which - * always need to be callable, since JS lacks a null-call idiom ala Cocoa. - */ - function emptyFunction() {} + // Register dispatcher + this.dispatchToken = alt.dispatcher.register(function (payload) { + _this[Sym.LIFECYCLE].emit('beforeEach', payload, _this[Sym.STATE_CONTAINER]); - emptyFunction.thatReturns = makeEmptyFunction; - emptyFunction.thatReturnsFalse = makeEmptyFunction(false); - emptyFunction.thatReturnsTrue = makeEmptyFunction(true); - emptyFunction.thatReturnsNull = makeEmptyFunction(null); - emptyFunction.thatReturnsThis = function() { return this; }; - emptyFunction.thatReturnsArgument = function(arg) { return arg; }; + if (model[Sym.LISTENERS][payload.action]) { + var result = false; - module.exports = emptyFunction; + try { + result = model[Sym.LISTENERS][payload.action](payload.data); + } catch (e) { + if (model[Sym.HANDLING_ERRORS]) { + _this[Sym.LIFECYCLE].emit('error', e, payload, _this[Sym.STATE_CONTAINER]); + } else { + throw e; + } + } + if (result !== false) { + _this.emitChange(); + } + } -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { + _this[Sym.LIFECYCLE].emit('afterEach', payload, _this[Sym.STATE_CONTAINER]); + }); - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule keyOf - */ + this[Sym.LIFECYCLE].emit('init'); + } - /** - * Allows extraction of a minified key. Let's the build system minify keys - * without loosing the ability to dynamically use key strings as values - * themselves. Pass in an object with a single key/val pair and it will return - * you the string key of that single record. Suppose you want to grab the - * value for a key 'className' inside of an object. Key/val minification may - * have aliased that key to be 'xa12'. keyOf({className: null}) will return - * 'xa12' in that case. Resolve keys you want to use once at startup time, then - * reuse those resolutions. - */ - var keyOf = function(oneKeyObj) { - var key; - for (key in oneKeyObj) { - if (!oneKeyObj.hasOwnProperty(key)) { - continue; + _createClass(AltStore, [{ + key: 'getEventEmitter', + value: function getEventEmitter() { + return this[EE]; } - return key; - } - return null; - }; + }, { + key: 'emitChange', + value: function emitChange() { + this[EE].emit('change', this[Sym.STATE_CONTAINER]); + } + }, { + key: 'listen', + value: function listen(cb) { + var _this2 = this; + this[EE].on('change', cb); + return function () { + return _this2.unlisten(cb); + }; + } + }, { + key: 'unlisten', + value: function unlisten(cb) { + this[Sym.LIFECYCLE].emit('unlisten'); + this[EE].removeListener('change', cb); + } + }, { + key: 'getState', + value: function getState() { + return this.StoreModel.config.getState.call(this, this[Sym.STATE_CONTAINER]); + } + }]); - module.exports = keyOf; + return AltStore; + })(); + exports['default'] = AltStore; + module.exports = exports['default']; /***/ }, -/* 15 */ +/* 9 */ /***/ function(module, exports, __webpack_require__) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule PooledClass - */ - 'use strict'; - var invariant = __webpack_require__(1); + Object.defineProperty(exports, '__esModule', { + value: true + }); - /** - * Static poolers. Several custom versions for each potential number of - * arguments. A completely generic pooler is easy to implement, but would - * require accessing the `arguments` object. In each of these, `this` refers to - * the Class itself, not an instance. If any others are needed, simply add them - * here, or in their own files. - */ - var oneArgumentPooler = function(copyFieldsFrom) { - var Klass = this; - if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); - Klass.call(instance, copyFieldsFrom); - return instance; - } else { - return new Klass(copyFieldsFrom); - } - }; + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - var twoArgumentPooler = function(a1, a2) { - var Klass = this; - if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); - Klass.call(instance, a1, a2); - return instance; - } else { - return new Klass(a1, a2); - } - }; + var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - var threeArgumentPooler = function(a1, a2, a3) { - var Klass = this; - if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); - Klass.call(instance, a1, a2, a3); - return instance; - } else { - return new Klass(a1, a2, a3); - } - }; + var _Symbol = __webpack_require__(3); - var fiveArgumentPooler = function(a1, a2, a3, a4, a5) { - var Klass = this; - if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); - Klass.call(instance, a1, a2, a3, a4, a5); - return instance; - } else { - return new Klass(a1, a2, a3, a4, a5); - } - }; + var _Symbol2 = _interopRequireDefault(_Symbol); - var standardReleaser = function(instance) { - var Klass = this; - ("production" !== (undefined) ? invariant( - instance instanceof Klass, - 'Trying to release an instance into a pool of a different type.' - ) : invariant(instance instanceof Klass)); - if (instance.destructor) { - instance.destructor(); - } - if (Klass.instancePool.length < Klass.poolSize) { - Klass.instancePool.push(instance); - } - }; + var _import = __webpack_require__(1); - var DEFAULT_POOL_SIZE = 10; - var DEFAULT_POOLER = oneArgumentPooler; + var Sym = _interopRequireWildcard(_import); - /** - * Augments `CopyConstructor` to be a poolable class, augmenting only the class - * itself (statically) not adding any prototypical fields. Any CopyConstructor - * you give this may have a `poolSize` property, and will look for a - * prototypical `destructor` on instances (optional). - * - * @param {Function} CopyConstructor Constructor that can be used to reset. - * @param {Function} pooler Customizable pooler. - */ - var addPoolingTo = function(CopyConstructor, pooler) { - var NewKlass = CopyConstructor; - NewKlass.instancePool = []; - NewKlass.getPooled = pooler || DEFAULT_POOLER; - if (!NewKlass.poolSize) { - NewKlass.poolSize = DEFAULT_POOL_SIZE; - } - NewKlass.release = standardReleaser; - return NewKlass; - }; + var _import2 = __webpack_require__(2); - var PooledClass = { - addPoolingTo: addPoolingTo, - oneArgumentPooler: oneArgumentPooler, - twoArgumentPooler: twoArgumentPooler, - threeArgumentPooler: threeArgumentPooler, - fiveArgumentPooler: fiveArgumentPooler - }; + var fn = _interopRequireWildcard(_import2); - module.exports = PooledClass; + var StoreMixin = { + waitFor: function waitFor() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + if (!sources.length) { + throw new ReferenceError('Dispatch tokens not provided'); + } -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { + var sourcesArray = sources; + if (sources.length === 1) { + sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; + } - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactBrowserComponentMixin - */ + var tokens = sourcesArray.map(function (source) { + return source.dispatchToken || source; + }); - 'use strict'; + this.dispatcher.waitFor(tokens); + }, - var findDOMNode = __webpack_require__(93); + exportPublicMethods: function exportPublicMethods(methods) { + var _this = this; - var ReactBrowserComponentMixin = { - /** - * Returns the DOM node rendered by this component. - * - * @return {DOMElement} The root node of this component. - * @final - * @protected - */ - getDOMNode: function() { - return findDOMNode(this); - } - }; + fn.eachObject(function (methodName, value) { + if (!fn.isFunction(value)) { + throw new TypeError('exportPublicMethods expects a function'); + } - module.exports = ReactBrowserComponentMixin; + _this[Sym.PUBLIC_METHODS][methodName] = value; + }, [methods]); + }, + emitChange: function emitChange() { + this.getInstance().emitChange(); + }, -/***/ }, -/* 17 */ -/***/ function(module, exports, __webpack_require__) { + on: function on(lifecycleEvent, handler) { + if (lifecycleEvent === 'error') { + this[Sym.HANDLING_ERRORS] = true; + } + this[Sym.LIFECYCLE].on(lifecycleEvent, handler.bind(this)); + }, - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactCurrentOwner - */ + bindAction: function bindAction(symbol, handler) { + if (!symbol) { + throw new ReferenceError('Invalid action reference passed in'); + } + if (!fn.isFunction(handler)) { + throw new TypeError('bindAction expects a function'); + } - 'use strict'; + if (handler.length > 1) { + throw new TypeError('Action handler in store ' + this._storeName + ' for ' + ('' + (symbol[Sym.ACTION_KEY] || symbol).toString() + ' was defined with ') + 'two parameters. Only a single parameter is passed through the ' + 'dispatcher, did you mean to pass in an Object instead?'); + } - /** - * Keeps track of the current owner. - * - * The current owner is the component who should own any components that are - * currently being constructed. - * - * The depth indicate how many composite components are above this render level. - */ - var ReactCurrentOwner = { + // You can pass in the constant or the function itself + var key = symbol[Sym.ACTION_KEY] ? symbol[Sym.ACTION_KEY] : symbol; + this[Sym.LISTENERS][key] = handler.bind(this); + this[Sym.ALL_LISTENERS].push(_Symbol2['default'].keyFor(key)); + }, - /** - * @internal - * @type {ReactComponent} - */ - current: null + bindActions: function bindActions(actions) { + var _this2 = this; - }; + fn.eachObject(function (action, symbol) { + var matchFirstCharacter = /./; + var assumedEventHandler = action.replace(matchFirstCharacter, function (x) { + return 'on' + x[0].toUpperCase(); + }); + var handler = null; - module.exports = ReactCurrentOwner; + if (_this2[action] && _this2[assumedEventHandler]) { + // If you have both action and onAction + throw new ReferenceError('You have multiple action handlers bound to an action: ' + ('' + action + ' and ' + assumedEventHandler)); + } else if (_this2[action]) { + // action + handler = _this2[action]; + } else if (_this2[assumedEventHandler]) { + // onAction + handler = _this2[assumedEventHandler]; + } + if (handler) { + _this2.bindAction(symbol, handler); + } + }, [actions]); + }, -/***/ }, -/* 18 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactPerf - * @typechecks static-only - */ - - 'use strict'; - - /** - * ReactPerf is a general AOP system designed to measure performance. This - * module only has the hooks: see ReactDefaultPerf for the analysis tool. - */ - var ReactPerf = { - /** - * Boolean to enable/disable measurement. Set to false by default to prevent - * accidental logging and perf loss. - */ - enableMeasure: false, + bindListeners: function bindListeners(obj) { + var _this3 = this; - /** - * Holds onto the measure function in use. By default, don't measure - * anything, but we'll override this if we inject a measure function. - */ - storedMeasure: _noMeasure, + fn.eachObject(function (methodName, symbol) { + var listener = _this3[methodName]; - /** - * @param {object} object - * @param {string} objectName - * @param {object} methodNames - */ - measureMethods: function(object, objectName, methodNames) { - if ("production" !== (undefined)) { - for (var key in methodNames) { - if (!methodNames.hasOwnProperty(key)) { - continue; - } - object[key] = ReactPerf.measure( - objectName, - methodNames[key], - object[key] - ); + if (!listener) { + throw new ReferenceError('' + methodName + ' defined but does not exist in ' + _this3._storeName); } - } - }, - /** - * Use this to wrap methods you want to measure. Zero overhead in production. - * - * @param {string} objName - * @param {string} fnName - * @param {function} func - * @return {function} - */ - measure: function(objName, fnName, func) { - if ("production" !== (undefined)) { - var measuredFunc = null; - var wrapper = function() { - if (ReactPerf.enableMeasure) { - if (!measuredFunc) { - measuredFunc = ReactPerf.storedMeasure(objName, fnName, func); - } - return measuredFunc.apply(this, arguments); - } - return func.apply(this, arguments); - }; - wrapper.displayName = objName + '_' + fnName; - return wrapper; - } - return func; - }, - - injection: { - /** - * @param {function} measure - */ - injectMeasure: function(measure) { - ReactPerf.storedMeasure = measure; - } + if (Array.isArray(symbol)) { + symbol.forEach(function (action) { + _this3.bindAction(action, listener); + }); + } else { + _this3.bindAction(symbol, listener); + } + }, [obj]); } }; - /** - * Simply passes through the measured function, without measuring it. - * - * @param {string} objName - * @param {string} fnName - * @param {function} func - * @return {function} - */ - function _noMeasure(objName, fnName, func) { - return func; - } - - module.exports = ReactPerf; - + exports['default'] = StoreMixin; + module.exports = exports['default']; /***/ }, -/* 19 */ +/* 10 */ /***/ function(module, exports, __webpack_require__) { - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule SyntheticEvent - * @typechecks static-only - */ - 'use strict'; - var PooledClass = __webpack_require__(15); - - var assign = __webpack_require__(2); - var emptyFunction = __webpack_require__(13); - var getEventTarget = __webpack_require__(67); - - /** - * @interface Event - * @see http://www.w3.org/TR/DOM-Level-3-Events/ - */ - var EventInterface = { - type: null, - target: getEventTarget, - // currentTarget is set when dispatching; no use in copying it here - currentTarget: emptyFunction.thatReturnsNull, - eventPhase: null, - bubbles: null, - cancelable: null, - timeStamp: function(event) { - return event.timeStamp || Date.now(); - }, - defaultPrevented: null, - isTrusted: null - }; + Object.defineProperty(exports, '__esModule', { + value: true + }); - /** - * Synthetic events are dispatched by event plugins, typically in response to a - * top-level event delegation handler. - * - * These systems should generally use pooling to reduce the frequency of garbage - * collection. The system should check `isPersistent` to determine whether the - * event should be released into the pool after being dispatched. Users that - * need a persisted event should invoke `persist`. - * - * Synthetic events (and subclasses) implement the DOM Level 3 Events API by - * normalizing browser quirks. Subclasses do not necessarily have to implement a - * DOM interface; custom application-specific events can also subclass this. - * - * @param {object} dispatchConfig Configuration used to dispatch this event. - * @param {string} dispatchMarker Marker identifying the event target. - * @param {object} nativeEvent Native browser event. - */ - function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) { - this.dispatchConfig = dispatchConfig; - this.dispatchMarker = dispatchMarker; - this.nativeEvent = nativeEvent; - - var Interface = this.constructor.Interface; - for (var propName in Interface) { - if (!Interface.hasOwnProperty(propName)) { - continue; - } - var normalize = Interface[propName]; - if (normalize) { - this[propName] = normalize(nativeEvent); - } else { - this[propName] = nativeEvent[propName]; - } - } + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - var defaultPrevented = nativeEvent.defaultPrevented != null ? - nativeEvent.defaultPrevented : - nativeEvent.returnValue === false; - if (defaultPrevented) { - this.isDefaultPrevented = emptyFunction.thatReturnsTrue; - } else { - this.isDefaultPrevented = emptyFunction.thatReturnsFalse; - } - this.isPropagationStopped = emptyFunction.thatReturnsFalse; - } + var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - assign(SyntheticEvent.prototype, { + var _bind = Function.prototype.bind; - preventDefault: function() { - this.defaultPrevented = true; - var event = this.nativeEvent; - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } - this.isDefaultPrevented = emptyFunction.thatReturnsTrue; - }, + var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - stopPropagation: function() { - var event = this.nativeEvent; - if (event.stopPropagation) { - event.stopPropagation(); - } else { - event.cancelBubble = true; - } - this.isPropagationStopped = emptyFunction.thatReturnsTrue; - }, + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { desc = parent = getter = undefined; _again = false; var object = _x, + property = _x2, + receiver = _x3; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - /** - * We release all dispatched `SyntheticEvent`s after each event loop, adding - * them back into the pool. This allows a way to hold onto a reference that - * won't be added back into the pool. - */ - persist: function() { - this.isPersistent = emptyFunction.thatReturnsTrue; - }, + var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }; - /** - * Checks if this event should be released back into the pool. - * - * @return {boolean} True if this should not be released, false otherwise. - */ - isPersistent: emptyFunction.thatReturnsFalse, + exports.createStoreConfig = createStoreConfig; + exports.transformStore = transformStore; + exports.createStoreFromObject = createStoreFromObject; + exports.createStoreFromClass = createStoreFromClass; - /** - * `PooledClass` looks for `destructor` on each instance it releases. - */ - destructor: function() { - var Interface = this.constructor.Interface; - for (var propName in Interface) { - this[propName] = null; - } - this.dispatchConfig = null; - this.dispatchMarker = null; - this.nativeEvent = null; - } + var _EventEmitter = __webpack_require__(5); - }); + var _EventEmitter2 = _interopRequireDefault(_EventEmitter); - SyntheticEvent.Interface = EventInterface; + var _import = __webpack_require__(1); - /** - * Helper to reduce boilerplate when creating subclasses. - * - * @param {function} Class - * @param {?object} Interface - */ - SyntheticEvent.augmentClass = function(Class, Interface) { - var Super = this; + var Sym = _interopRequireWildcard(_import); - var prototype = Object.create(Super.prototype); - assign(prototype, Class.prototype); - Class.prototype = prototype; - Class.prototype.constructor = Class; + var _import2 = __webpack_require__(4); - Class.Interface = assign({}, Super.Interface, Interface); - Class.augmentClass = Super.augmentClass; + var utils = _interopRequireWildcard(_import2); - PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler); - }; + var _import3 = __webpack_require__(2); - PooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler); + var fn = _interopRequireWildcard(_import3); - module.exports = SyntheticEvent; + var _AltStore = __webpack_require__(8); + var _AltStore2 = _interopRequireDefault(_AltStore); -/***/ }, -/* 20 */ -/***/ function(module, exports, __webpack_require__) { + var _StoreMixin = __webpack_require__(9); - 'use strict'; + var _StoreMixin2 = _interopRequireDefault(_StoreMixin); - Object.defineProperty(exports, '__esModule', { - value: true - }); - exports.getInternalMethods = getInternalMethods; - exports.warn = warn; - exports.uid = uid; - exports.formatAsConstant = formatAsConstant; - exports.dispatchIdentity = dispatchIdentity; - /* istanbul ignore next */ - function NoopClass() {} + function doSetState(store, storeInstance, state) { + if (!state) { + return; + } - var builtIns = Object.getOwnPropertyNames(NoopClass); - var builtInProto = Object.getOwnPropertyNames(NoopClass.prototype); + var config = storeInstance.StoreModel.config; - function getInternalMethods(Obj, isProto) { - var excluded = isProto ? builtInProto : builtIns; - var obj = isProto ? Obj.prototype : Obj; - return Object.getOwnPropertyNames(obj).reduce(function (value, m) { - if (excluded.indexOf(m) !== -1) { - return value; - } + var nextState = fn.isFunction(state) ? state(storeInstance[Sym.STATE_CONTAINER]) : state; - value[m] = obj[m]; - return value; - }, {}); - } + storeInstance[Sym.STATE_CONTAINER] = config.setState.call(store, storeInstance[Sym.STATE_CONTAINER], nextState); - function warn(msg) { - /* istanbul ignore else */ - if (typeof console !== 'undefined') { - console.warn(new ReferenceError(msg)); + if (!store.alt.dispatcher.isDispatching()) { + store.emitChange(); } } - function uid(container, name) { - var count = 0; - var key = name; - while (Object.hasOwnProperty.call(container, key)) { - key = name + String(++count); - } - return key; - } + function createPrototype(proto, alt, key, extras) { + proto[Sym.ALL_LISTENERS] = []; + proto[Sym.LIFECYCLE] = new _EventEmitter2['default'](); + proto[Sym.LISTENERS] = {}; + proto[Sym.PUBLIC_METHODS] = {}; - function formatAsConstant(name) { - return name.replace(/[a-z]([A-Z])/g, function (i) { - return '' + i[0] + '_' + i[1].toLowerCase(); - }).toUpperCase(); + return fn.assign(proto, _StoreMixin2['default'], { + _storeName: key, + alt: alt, + dispatcher: alt.dispatcher + }, extras); } - function dispatchIdentity(x) { - for (var _len = arguments.length, a = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - a[_key - 1] = arguments[_key]; - } + function createStoreConfig(globalConfig, StoreModel) { + StoreModel.config = fn.assign({ + getState: function getState(state) { + return fn.assign({}, state); + }, + setState: fn.assign + }, globalConfig, StoreModel.config); + } - this.dispatch(a.length ? [x].concat(a) : x); + function transformStore(transforms, StoreModel) { + return transforms.reduce(function (Store, transform) { + return transform(Store); + }, StoreModel); } -/***/ }, -/* 21 */ -/***/ function(module, exports, __webpack_require__) { + function createStoreFromObject(alt, StoreModel, key) { + var storeInstance = undefined; - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule DOMProperty - * @typechecks static-only - */ + var StoreProto = createPrototype({}, alt, key, fn.assign({ + getInstance: function getInstance() { + return storeInstance; + }, + setState: function setState(nextState) { + doSetState(this, storeInstance, nextState); + } + }, StoreModel)); - /*jslint bitwise: true */ + // bind the store listeners + /* istanbul ignore else */ + if (StoreProto.bindListeners) { + _StoreMixin2['default'].bindListeners.call(StoreProto, StoreProto.bindListeners); + } - 'use strict'; + // bind the lifecycle events + /* istanbul ignore else */ + if (StoreProto.lifecycle) { + fn.eachObject(function (eventName, event) { + _StoreMixin2['default'].on.call(StoreProto, eventName, event); + }, [StoreProto.lifecycle]); + } - var invariant = __webpack_require__(1); + // create the instance and fn.assign the public methods to the instance + storeInstance = fn.assign(new _AltStore2['default'](alt, StoreProto, StoreProto.state, StoreModel), StoreProto.publicMethods, { displayName: key }); - function checkMask(value, bitmask) { - return (value & bitmask) === bitmask; + return storeInstance; } - var DOMPropertyInjection = { - /** - * Mapping from normalized, camelcased property names to a configuration that - * specifies how the associated DOM property should be accessed or rendered. - */ - MUST_USE_ATTRIBUTE: 0x1, - MUST_USE_PROPERTY: 0x2, - HAS_SIDE_EFFECTS: 0x4, - HAS_BOOLEAN_VALUE: 0x8, - HAS_NUMERIC_VALUE: 0x10, - HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10, - HAS_OVERLOADED_BOOLEAN_VALUE: 0x40, + function createStoreFromClass(alt, StoreModel, key) { + for (var _len = arguments.length, argsForClass = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + argsForClass[_key - 3] = arguments[_key]; + } - /** - * Inject some specialized knowledge about the DOM. This takes a config object - * with the following properties: - * - * isCustomAttribute: function that given an attribute name will return true - * if it can be inserted into the DOM verbatim. Useful for data-* or aria-* - * attributes where it's impossible to enumerate all of the possible - * attribute names, - * - * Properties: object mapping DOM property name to one of the - * DOMPropertyInjection constants or null. If your attribute isn't in here, - * it won't get written to the DOM. - * - * DOMAttributeNames: object mapping React attribute name to the DOM - * attribute name. Attribute names not specified use the **lowercase** - * normalized name. - * - * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties. - * Property names not specified use the normalized name. - * - * DOMMutationMethods: Properties that require special mutation methods. If - * `value` is undefined, the mutation method should unset the property. - * - * @param {object} domPropertyConfig the config as described above. - */ - injectDOMPropertyConfig: function(domPropertyConfig) { - var Properties = domPropertyConfig.Properties || {}; - var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {}; - var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {}; - var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {}; - - if (domPropertyConfig.isCustomAttribute) { - DOMProperty._isCustomAttributeFunctions.push( - domPropertyConfig.isCustomAttribute - ); - } - - for (var propName in Properties) { - ("production" !== (undefined) ? invariant( - !DOMProperty.isStandardName.hasOwnProperty(propName), - 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + - '\'%s\' which has already been injected. You may be accidentally ' + - 'injecting the same DOM property config twice, or you may be ' + - 'injecting two configs that have conflicting property names.', - propName - ) : invariant(!DOMProperty.isStandardName.hasOwnProperty(propName))); - - DOMProperty.isStandardName[propName] = true; - - var lowerCased = propName.toLowerCase(); - DOMProperty.getPossibleStandardName[lowerCased] = propName; - - if (DOMAttributeNames.hasOwnProperty(propName)) { - var attributeName = DOMAttributeNames[propName]; - DOMProperty.getPossibleStandardName[attributeName] = propName; - DOMProperty.getAttributeName[propName] = attributeName; - } else { - DOMProperty.getAttributeName[propName] = lowerCased; - } + var storeInstance = undefined; + var config = StoreModel.config; - DOMProperty.getPropertyName[propName] = - DOMPropertyNames.hasOwnProperty(propName) ? - DOMPropertyNames[propName] : - propName; + // Creating a class here so we don't overload the provided store's + // prototype with the mixin behaviour and I'm extending from StoreModel + // so we can inherit any extensions from the provided store. - if (DOMMutationMethods.hasOwnProperty(propName)) { - DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName]; - } else { - DOMProperty.getMutationMethod[propName] = null; + var Store = (function (_StoreModel) { + function Store() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; } - var propConfig = Properties[propName]; - DOMProperty.mustUseAttribute[propName] = - checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE); - DOMProperty.mustUseProperty[propName] = - checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY); - DOMProperty.hasSideEffects[propName] = - checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS); - DOMProperty.hasBooleanValue[propName] = - checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE); - DOMProperty.hasNumericValue[propName] = - checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE); - DOMProperty.hasPositiveNumericValue[propName] = - checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE); - DOMProperty.hasOverloadedBooleanValue[propName] = - checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE); - - ("production" !== (undefined) ? invariant( - !DOMProperty.mustUseAttribute[propName] || - !DOMProperty.mustUseProperty[propName], - 'DOMProperty: Cannot require using both attribute and property: %s', - propName - ) : invariant(!DOMProperty.mustUseAttribute[propName] || - !DOMProperty.mustUseProperty[propName])); - ("production" !== (undefined) ? invariant( - DOMProperty.mustUseProperty[propName] || - !DOMProperty.hasSideEffects[propName], - 'DOMProperty: Properties that have side effects must use property: %s', - propName - ) : invariant(DOMProperty.mustUseProperty[propName] || - !DOMProperty.hasSideEffects[propName])); - ("production" !== (undefined) ? invariant( - !!DOMProperty.hasBooleanValue[propName] + - !!DOMProperty.hasNumericValue[propName] + - !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1, - 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + - 'numeric value, but not a combination: %s', - propName - ) : invariant(!!DOMProperty.hasBooleanValue[propName] + - !!DOMProperty.hasNumericValue[propName] + - !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1)); + _classCallCheck(this, Store); + + _get(Object.getPrototypeOf(Store.prototype), 'constructor', this).apply(this, args); } - } - }; - var defaultValueCache = {}; - /** - * DOMProperty exports lookup objects that can be used like functions: - * - * > DOMProperty.isValid['id'] - * true - * > DOMProperty.isValid['foobar'] - * undefined - * - * Although this may be confusing, it performs better in general. - * - * @see http://jsperf.com/key-exists - * @see http://jsperf.com/key-missing - */ - var DOMProperty = { + _inherits(Store, _StoreModel); - ID_ATTRIBUTE_NAME: 'data-reactid', + return Store; + })(StoreModel); - /** - * Checks whether a property name is a standard property. - * @type {Object} - */ - isStandardName: {}, + createPrototype(Store.prototype, alt, key, { + getInstance: function getInstance() { + return storeInstance; + }, + setState: function setState(nextState) { + doSetState(this, storeInstance, nextState); + } + }); - /** - * Mapping from lowercase property names to the properly cased version, used - * to warn in the case of missing properties. - * @type {Object} - */ - getPossibleStandardName: {}, + var store = new (_bind.apply(Store, [null].concat(argsForClass)))(); - /** - * Mapping from normalized names to attribute names that differ. Attribute - * names are used when rendering markup or with `*Attribute()`. - * @type {Object} - */ - getAttributeName: {}, + if (config.bindListeners) { + store.bindListeners(config.bindListeners); + } - /** - * Mapping from normalized names to properties on DOM node instances. - * (This includes properties that mutate due to external factors.) - * @type {Object} - */ - getPropertyName: {}, + storeInstance = fn.assign(new _AltStore2['default'](alt, store, store[alt.config.stateKey] || store[config.stateKey] || null, StoreModel), utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }); - /** - * Mapping from normalized names to mutation methods. This will only exist if - * mutation cannot be set simply by the property or `setAttribute()`. - * @type {Object} - */ - getMutationMethod: {}, + return storeInstance; + } - /** - * Whether the property must be accessed and mutated as an object property. - * @type {Object} - */ - mustUseAttribute: {}, +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { - /** - * Whether the property must be accessed and mutated using `*Attribute()`. - * (This includes anything that fails ` in `.) - * @type {Object} - */ - mustUseProperty: {}, + 'use strict'; - /** - * Whether or not setting a value causes side effects such as triggering - * resources to be loaded or text selection changes. We must ensure that - * the value is only set if it has changed. - * @type {Object} - */ - hasSideEffects: {}, + Object.defineProperty(exports, '__esModule', { + value: true + }); - /** - * Whether the property should be removed when set to a falsey value. - * @type {Object} - */ - hasBooleanValue: {}, + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - /** - * Whether the property must be numeric or parse as a - * numeric and should be removed when set to a falsey value. - * @type {Object} - */ - hasNumericValue: {}, + exports.setAppState = setAppState; + exports.snapshot = snapshot; + exports.saveInitialSnapshot = saveInitialSnapshot; + exports.filterSnapshots = filterSnapshots; - /** - * Whether the property must be positive numeric or parse as a positive - * numeric and should be removed when set to a falsey value. - * @type {Object} - */ - hasPositiveNumericValue: {}, + var _import = __webpack_require__(1); - /** - * Whether the property can be used as a flag as well as with a value. Removed - * when strictly equal to false; present without a value when strictly equal - * to true; present with a value otherwise. - * @type {Object} - */ - hasOverloadedBooleanValue: {}, + var Sym = _interopRequireWildcard(_import); - /** - * All of the isCustomAttribute() functions that have been injected. - */ - _isCustomAttributeFunctions: [], + var _import2 = __webpack_require__(2); - /** - * Checks whether a property name is a custom attribute. - * @method - */ - isCustomAttribute: function(attributeName) { - for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) { - var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i]; - if (isCustomAttributeFn(attributeName)) { - return true; + var fn = _interopRequireWildcard(_import2); + + function setAppState(instance, data, onStore) { + var obj = instance.deserialize(data); + fn.eachObject(function (key, value) { + var store = instance.stores[key]; + if (store) { + var config = store.StoreModel.config; + + if (config.onDeserialize) { + obj[key] = config.onDeserialize(value) || value; } + fn.assign(store[Sym.STATE_CONTAINER], obj[key]); + onStore(store); } - return false; - }, + }, [obj]); + } - /** - * Returns the default property value for a DOM property (i.e., not an - * attribute). Most default values are '' or false, but not all. Worse yet, - * some (in particular, `type`) vary depending on the type of element. - * - * TODO: Is it better to grab all the possible properties when creating an - * element to avoid having to create the same element twice? - */ - getDefaultValueForProperty: function(nodeName, prop) { - var nodeDefaults = defaultValueCache[nodeName]; - var testElement; - if (!nodeDefaults) { - defaultValueCache[nodeName] = nodeDefaults = {}; - } - if (!(prop in nodeDefaults)) { - testElement = document.createElement(nodeName); - nodeDefaults[prop] = testElement[prop]; - } - return nodeDefaults[prop]; - }, + function snapshot(instance) { + var storeNames = arguments[1] === undefined ? [] : arguments[1]; - injection: DOMPropertyInjection - }; + var stores = storeNames.length ? storeNames : Object.keys(instance.stores); + return stores.reduce(function (obj, storeHandle) { + var storeName = storeHandle.displayName || storeHandle; + var store = instance.stores[storeName]; + var config = store.StoreModel.config; + + store[Sym.LIFECYCLE].emit('snapshot'); + var customSnapshot = config.onSerialize && config.onSerialize(store[Sym.STATE_CONTAINER]); + obj[storeName] = customSnapshot ? customSnapshot : store.getState(); + return obj; + }, {}); + } - module.exports = DOMProperty; + function saveInitialSnapshot(instance, key) { + var state = instance.deserialize(instance.serialize(instance.stores[key][Sym.STATE_CONTAINER])); + instance[Sym.INIT_SNAPSHOT][key] = state; + instance[Sym.LAST_SNAPSHOT][key] = state; + } + function filterSnapshots(instance, state, stores) { + return stores.reduce(function (obj, store) { + var storeName = store.displayName || store; + if (!state[storeName]) { + throw new ReferenceError('' + storeName + ' is not a valid store'); + } + obj[storeName] = state[storeName]; + return obj; + }, {}); + } /***/ }, -/* 22 */ +/* 12 */ /***/ function(module, exports, __webpack_require__) { /** - * Copyright 2013-2015, Facebook, Inc. + * Copyright (c) 2014-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactBrowserEventEmitter - * @typechecks static-only - */ - - 'use strict'; - - var EventConstants = __webpack_require__(8); - var EventPluginHub = __webpack_require__(25); - var EventPluginRegistry = __webpack_require__(76); - var ReactEventEmitterMixin = __webpack_require__(149); - var ViewportMetrics = __webpack_require__(90); - - var assign = __webpack_require__(2); - var isEventSupported = __webpack_require__(69); - - /** - * Summary of `ReactBrowserEventEmitter` event handling: - * - * - Top-level delegation is used to trap most native browser events. This - * may only occur in the main thread and is the responsibility of - * ReactEventListener, which is injected and can therefore support pluggable - * event sources. This is the only work that occurs in the main thread. - * - * - We normalize and de-duplicate events to account for browser quirks. This - * may be done in the worker thread. - * - * - Forward these native events (with the associated top-level type used to - * trap it) to `EventPluginHub`, which in turn will ask plugins if they want - * to extract any synthetic events. - * - * - The `EventPluginHub` will then process each event by annotating them with - * "dispatches", a sequence of listeners and IDs that care about that event. - * - * - The `EventPluginHub` then dispatches the events. - * - * Overview of React and the event system: - * - * +------------+ . - * | DOM | . - * +------------+ . - * | . - * v . - * +------------+ . - * | ReactEvent | . - * | Listener | . - * +------------+ . +-----------+ - * | . +--------+|SimpleEvent| - * | . | |Plugin | - * +-----|------+ . v +-----------+ - * | | | . +--------------+ +------------+ - * | +-----------.--->|EventPluginHub| | Event | - * | | . | | +-----------+ | Propagators| - * | ReactEvent | . | | |TapEvent | |------------| - * | Emitter | . | |<---+|Plugin | |other plugin| - * | | . | | +-----------+ | utilities | - * | +-----------.--->| | +------------+ - * | | | . +--------------+ - * +-----|------+ . ^ +-----------+ - * | . | |Enter/Leave| - * + . +-------+|Plugin | - * +-------------+ . +-----------+ - * | application | . - * |-------------| . - * | | . - * | | . - * +-------------+ . - * . - * React Core . General Purpose Event Plugin System - */ - - var alreadyListeningTo = {}; - var isMonitoringScrollValue = false; - var reactTopListenersCounter = 0; - - // For events like 'submit' which don't consistently bubble (which we trap at a - // lower node than `document`), binding at `document` would cause duplicate - // events so we don't include them here - var topEventMapping = { - topBlur: 'blur', - topChange: 'change', - topClick: 'click', - topCompositionEnd: 'compositionend', - topCompositionStart: 'compositionstart', - topCompositionUpdate: 'compositionupdate', - topContextMenu: 'contextmenu', - topCopy: 'copy', - topCut: 'cut', - topDoubleClick: 'dblclick', - topDrag: 'drag', - topDragEnd: 'dragend', - topDragEnter: 'dragenter', - topDragExit: 'dragexit', - topDragLeave: 'dragleave', - topDragOver: 'dragover', - topDragStart: 'dragstart', - topDrop: 'drop', - topFocus: 'focus', - topInput: 'input', - topKeyDown: 'keydown', - topKeyPress: 'keypress', - topKeyUp: 'keyup', - topMouseDown: 'mousedown', - topMouseMove: 'mousemove', - topMouseOut: 'mouseout', - topMouseOver: 'mouseover', - topMouseUp: 'mouseup', - topPaste: 'paste', - topScroll: 'scroll', - topSelectionChange: 'selectionchange', - topTextInput: 'textInput', - topTouchCancel: 'touchcancel', - topTouchEnd: 'touchend', - topTouchMove: 'touchmove', - topTouchStart: 'touchstart', - topWheel: 'wheel' - }; - - /** - * To ensure no conflicts with other potential React instances on the page - */ - var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2); - - function getListeningForDocument(mountAt) { - // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty` - // directly. - if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) { - mountAt[topListenersIDKey] = reactTopListenersCounter++; - alreadyListeningTo[mountAt[topListenersIDKey]] = {}; - } - return alreadyListeningTo[mountAt[topListenersIDKey]]; - } - - /** - * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For - * example: - * - * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction); - * - * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'. - * - * @internal */ - var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, { - - /** - * Injectable event backend - */ - ReactEventListener: null, - - injection: { - /** - * @param {object} ReactEventListener - */ - injectReactEventListener: function(ReactEventListener) { - ReactEventListener.setHandleTopLevel( - ReactBrowserEventEmitter.handleTopLevel - ); - ReactBrowserEventEmitter.ReactEventListener = ReactEventListener; - } - }, - - /** - * Sets whether or not any created callbacks should be enabled. - * - * @param {boolean} enabled True if callbacks should be enabled. - */ - setEnabled: function(enabled) { - if (ReactBrowserEventEmitter.ReactEventListener) { - ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled); - } - }, - - /** - * @return {boolean} True if callbacks are enabled. - */ - isEnabled: function() { - return !!( - (ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled()) - ); - }, - - /** - * We listen for bubbled touch events on the document object. - * - * Firefox v8.01 (and possibly others) exhibited strange behavior when - * mounting `onmousemove` events at some node that was not the document - * element. The symptoms were that if your mouse is not moving over something - * contained within that mount point (for example on the background) the - * top-level listeners for `onmousemove` won't be called. However, if you - * register the `mousemove` on the document object, then it will of course - * catch all `mousemove`s. This along with iOS quirks, justifies restricting - * top-level listeners to the document object only, at least for these - * movement types of events and possibly all events. - * - * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html - * - * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but - * they bubble to document. - * - * @param {string} registrationName Name of listener (e.g. `onClick`). - * @param {object} contentDocumentHandle Document which owns the container - */ - listenTo: function(registrationName, contentDocumentHandle) { - var mountAt = contentDocumentHandle; - var isListening = getListeningForDocument(mountAt); - var dependencies = EventPluginRegistry. - registrationNameDependencies[registrationName]; - - var topLevelTypes = EventConstants.topLevelTypes; - for (var i = 0, l = dependencies.length; i < l; i++) { - var dependency = dependencies[i]; - if (!( - (isListening.hasOwnProperty(dependency) && isListening[dependency]) - )) { - if (dependency === topLevelTypes.topWheel) { - if (isEventSupported('wheel')) { - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelTypes.topWheel, - 'wheel', - mountAt - ); - } else if (isEventSupported('mousewheel')) { - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelTypes.topWheel, - 'mousewheel', - mountAt - ); - } else { - // Firefox needs to capture a different mouse scroll event. - // @see http://www.quirksmode.org/dom/events/tests/scroll.html - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelTypes.topWheel, - 'DOMMouseScroll', - mountAt - ); - } - } else if (dependency === topLevelTypes.topScroll) { - - if (isEventSupported('scroll', true)) { - ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent( - topLevelTypes.topScroll, - 'scroll', - mountAt - ); - } else { - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelTypes.topScroll, - 'scroll', - ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE - ); - } - } else if (dependency === topLevelTypes.topFocus || - dependency === topLevelTypes.topBlur) { - - if (isEventSupported('focus', true)) { - ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent( - topLevelTypes.topFocus, - 'focus', - mountAt - ); - ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent( - topLevelTypes.topBlur, - 'blur', - mountAt - ); - } else if (isEventSupported('focusin')) { - // IE has `focusin` and `focusout` events which bubble. - // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelTypes.topFocus, - 'focusin', - mountAt - ); - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelTypes.topBlur, - 'focusout', - mountAt - ); - } - - // to make sure blur and focus event listeners are only attached once - isListening[topLevelTypes.topBlur] = true; - isListening[topLevelTypes.topFocus] = true; - } else if (topEventMapping.hasOwnProperty(dependency)) { - ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - dependency, - topEventMapping[dependency], - mountAt - ); - } - - isListening[dependency] = true; - } - } - }, - - trapBubbledEvent: function(topLevelType, handlerBaseName, handle) { - return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent( - topLevelType, - handlerBaseName, - handle - ); - }, - - trapCapturedEvent: function(topLevelType, handlerBaseName, handle) { - return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent( - topLevelType, - handlerBaseName, - handle - ); - }, - - /** - * Listens to window scroll and resize events. We cache scroll values so that - * application code can access them without triggering reflows. - * - * NOTE: Scroll events do not bubble. - * - * @see http://www.quirksmode.org/dom/events/scroll.html - */ - ensureScrollValueMonitoring: function() { - if (!isMonitoringScrollValue) { - var refresh = ViewportMetrics.refreshScrollValues; - ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh); - isMonitoringScrollValue = true; - } - }, - - eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs, - - registrationNameModules: EventPluginHub.registrationNameModules, - - putListener: EventPluginHub.putListener, - - getListener: EventPluginHub.getListener, - - deleteListener: EventPluginHub.deleteListener, - deleteAllListeners: EventPluginHub.deleteAllListeners - - }); - - module.exports = ReactBrowserEventEmitter; + module.exports.Dispatcher = __webpack_require__(13) /***/ }, -/* 23 */ +/* 13 */ /***/ function(module, exports, __webpack_require__) { - /** - * Copyright 2013-2015, Facebook, Inc. + /* + * Copyright (c) 2014, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactInstanceHandles - * @typechecks static-only + * @providesModule Dispatcher + * @typechecks */ - 'use strict'; - - var ReactRootIndex = __webpack_require__(88); - - var invariant = __webpack_require__(1); + "use strict"; - var SEPARATOR = '.'; - var SEPARATOR_LENGTH = SEPARATOR.length; + var invariant = __webpack_require__(14); - /** - * Maximum depth of traversals before we consider the possibility of a bad ID. - */ - var MAX_TREE_DEPTH = 100; + var _lastID = 1; + var _prefix = 'ID_'; /** - * Creates a DOM ID prefix to use when mounting React components. + * Dispatcher is used to broadcast payloads to registered callbacks. This is + * different from generic pub-sub systems in two ways: * - * @param {number} index A unique integer - * @return {string} React root ID. - * @internal - */ - function getReactRootIDString(index) { - return SEPARATOR + index.toString(36); - } - - /** - * Checks if a character in the supplied ID is a separator or the end. + * 1) Callbacks are not subscribed to particular events. Every payload is + * dispatched to every registered callback. + * 2) Callbacks can be deferred in whole or part until other callbacks have + * been executed. * - * @param {string} id A React DOM ID. - * @param {number} index Index of the character to check. - * @return {boolean} True if the character is a separator or end of the ID. - * @private - */ - function isBoundary(id, index) { - return id.charAt(index) === SEPARATOR || index === id.length; - } - - /** - * Checks if the supplied string is a valid React DOM ID. + * For example, consider this hypothetical flight destination form, which + * selects a default city when a country is selected: * - * @param {string} id A React DOM ID, maybe. - * @return {boolean} True if the string is a valid React DOM ID. - * @private - */ - function isValidID(id) { - return id === '' || ( - id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR - ); - } - - /** - * Checks if the first ID is an ancestor of or equal to the second ID. + * var flightDispatcher = new Dispatcher(); * - * @param {string} ancestorID - * @param {string} descendantID - * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`. - * @internal - */ - function isAncestorIDOf(ancestorID, descendantID) { - return ( - descendantID.indexOf(ancestorID) === 0 && - isBoundary(descendantID, ancestorID.length) - ); - } - - /** - * Gets the parent ID of the supplied React DOM ID, `id`. + * // Keeps track of which country is selected + * var CountryStore = {country: null}; * - * @param {string} id ID of a component. - * @return {string} ID of the parent, or an empty string. - * @private - */ - function getParentID(id) { - return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : ''; - } - - /** - * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the - * supplied `destinationID`. If they are equal, the ID is returned. + * // Keeps track of which city is selected + * var CityStore = {city: null}; * - * @param {string} ancestorID ID of an ancestor node of `destinationID`. - * @param {string} destinationID ID of the destination node. - * @return {string} Next ID on the path from `ancestorID` to `destinationID`. - * @private - */ - function getNextDescendantID(ancestorID, destinationID) { - ("production" !== (undefined) ? invariant( - isValidID(ancestorID) && isValidID(destinationID), - 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', - ancestorID, - destinationID - ) : invariant(isValidID(ancestorID) && isValidID(destinationID))); - ("production" !== (undefined) ? invariant( - isAncestorIDOf(ancestorID, destinationID), - 'getNextDescendantID(...): React has made an invalid assumption about ' + - 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', - ancestorID, - destinationID - ) : invariant(isAncestorIDOf(ancestorID, destinationID))); - if (ancestorID === destinationID) { - return ancestorID; - } - // Skip over the ancestor and the immediate separator. Traverse until we hit - // another separator or we reach the end of `destinationID`. - var start = ancestorID.length + SEPARATOR_LENGTH; - var i; - for (i = start; i < destinationID.length; i++) { - if (isBoundary(destinationID, i)) { - break; - } - } - return destinationID.substr(0, i); - } - - /** - * Gets the nearest common ancestor ID of two IDs. + * // Keeps track of the base flight price of the selected city + * var FlightPriceStore = {price: null} * - * Using this ID scheme, the nearest common ancestor ID is the longest common - * prefix of the two IDs that immediately preceded a "marker" in both strings. + * When a user changes the selected city, we dispatch the payload: * - * @param {string} oneID - * @param {string} twoID - * @return {string} Nearest common ancestor ID, or the empty string if none. - * @private - */ - function getFirstCommonAncestorID(oneID, twoID) { - var minLength = Math.min(oneID.length, twoID.length); - if (minLength === 0) { - return ''; - } - var lastCommonMarkerIndex = 0; - // Use `<=` to traverse until the "EOL" of the shorter string. - for (var i = 0; i <= minLength; i++) { - if (isBoundary(oneID, i) && isBoundary(twoID, i)) { - lastCommonMarkerIndex = i; - } else if (oneID.charAt(i) !== twoID.charAt(i)) { - break; - } - } - var longestCommonID = oneID.substr(0, lastCommonMarkerIndex); - ("production" !== (undefined) ? invariant( - isValidID(longestCommonID), - 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', - oneID, - twoID, - longestCommonID - ) : invariant(isValidID(longestCommonID))); - return longestCommonID; - } - - /** - * Traverses the parent path between two IDs (either up or down). The IDs must - * not be the same, and there must exist a parent path between them. If the - * callback returns `false`, traversal is stopped. + * flightDispatcher.dispatch({ + * actionType: 'city-update', + * selectedCity: 'paris' + * }); * - * @param {?string} start ID at which to start traversal. - * @param {?string} stop ID at which to end traversal. - * @param {function} cb Callback to invoke each ID with. - * @param {?boolean} skipFirst Whether or not to skip the first node. - * @param {?boolean} skipLast Whether or not to skip the last node. - * @private - */ - function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) { - start = start || ''; - stop = stop || ''; - ("production" !== (undefined) ? invariant( - start !== stop, - 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', - start - ) : invariant(start !== stop)); - var traverseUp = isAncestorIDOf(stop, start); - ("production" !== (undefined) ? invariant( - traverseUp || isAncestorIDOf(start, stop), - 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + - 'not have a parent path.', - start, - stop - ) : invariant(traverseUp || isAncestorIDOf(start, stop))); - // Traverse from `start` to `stop` one depth at a time. - var depth = 0; - var traverse = traverseUp ? getParentID : getNextDescendantID; - for (var id = start; /* until break */; id = traverse(id, stop)) { - var ret; - if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) { - ret = cb(id, traverseUp, arg); - } - if (ret === false || id === stop) { - // Only break //after// visiting `stop`. - break; - } - ("production" !== (undefined) ? invariant( - depth++ < MAX_TREE_DEPTH, - 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + - 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', - start, stop - ) : invariant(depth++ < MAX_TREE_DEPTH)); - } - } - - /** - * Manages the IDs assigned to DOM representations of React components. This - * uses a specific scheme in order to traverse the DOM efficiently (e.g. in - * order to simulate events). + * This payload is digested by `CityStore`: + * + * flightDispatcher.register(function(payload) { + * if (payload.actionType === 'city-update') { + * CityStore.city = payload.selectedCity; + * } + * }); + * + * When the user selects a country, we dispatch the payload: + * + * flightDispatcher.dispatch({ + * actionType: 'country-update', + * selectedCountry: 'australia' + * }); + * + * This payload is digested by both stores: + * + * CountryStore.dispatchToken = flightDispatcher.register(function(payload) { + * if (payload.actionType === 'country-update') { + * CountryStore.country = payload.selectedCountry; + * } + * }); + * + * When the callback to update `CountryStore` is registered, we save a reference + * to the returned token. Using this token with `waitFor()`, we can guarantee + * that `CountryStore` is updated before the callback that updates `CityStore` + * needs to query its data. + * + * CityStore.dispatchToken = flightDispatcher.register(function(payload) { + * if (payload.actionType === 'country-update') { + * // `CountryStore.country` may not be updated. + * flightDispatcher.waitFor([CountryStore.dispatchToken]); + * // `CountryStore.country` is now guaranteed to be updated. + * + * // Select the default city for the new country + * CityStore.city = getDefaultCityForCountry(CountryStore.country); + * } + * }); + * + * The usage of `waitFor()` can be chained, for example: + * + * FlightPriceStore.dispatchToken = + * flightDispatcher.register(function(payload) { + * switch (payload.actionType) { + * case 'country-update': + * flightDispatcher.waitFor([CityStore.dispatchToken]); + * FlightPriceStore.price = + * getFlightPriceStore(CountryStore.country, CityStore.city); + * break; + * + * case 'city-update': + * FlightPriceStore.price = + * FlightPriceStore(CountryStore.country, CityStore.city); + * break; + * } + * }); * - * @internal + * The `country-update` payload will be guaranteed to invoke the stores' + * registered callbacks in order: `CountryStore`, `CityStore`, then + * `FlightPriceStore`. */ - var ReactInstanceHandles = { + + function Dispatcher() { + this.$Dispatcher_callbacks = {}; + this.$Dispatcher_isPending = {}; + this.$Dispatcher_isHandled = {}; + this.$Dispatcher_isDispatching = false; + this.$Dispatcher_pendingPayload = null; + } /** - * Constructs a React root ID - * @return {string} A React root ID. + * Registers a callback to be invoked with every dispatched payload. Returns + * a token that can be used with `waitFor()`. + * + * @param {function} callback + * @return {string} */ - createReactRootID: function() { - return getReactRootIDString(ReactRootIndex.createReactRootIndex()); - }, + Dispatcher.prototype.register=function(callback) { + var id = _prefix + _lastID++; + this.$Dispatcher_callbacks[id] = callback; + return id; + }; /** - * Constructs a React ID by joining a root ID with a name. + * Removes a callback based on its token. * - * @param {string} rootID Root ID of a parent component. - * @param {string} name A component's name (as flattened children). - * @return {string} A React ID. - * @internal + * @param {string} id */ - createReactID: function(rootID, name) { - return rootID + name; - }, + Dispatcher.prototype.unregister=function(id) { + invariant( + this.$Dispatcher_callbacks[id], + 'Dispatcher.unregister(...): `%s` does not map to a registered callback.', + id + ); + delete this.$Dispatcher_callbacks[id]; + }; /** - * Gets the DOM ID of the React component that is the root of the tree that - * contains the React component with the supplied DOM ID. + * Waits for the callbacks specified to be invoked before continuing execution + * of the current callback. This method should only be used by a callback in + * response to a dispatched payload. * - * @param {string} id DOM ID of a React component. - * @return {?string} DOM ID of the React component that is the root. - * @internal + * @param {array} ids */ - getReactRootIDFromNodeID: function(id) { - if (id && id.charAt(0) === SEPARATOR && id.length > 1) { - var index = id.indexOf(SEPARATOR, 1); - return index > -1 ? id.substr(0, index) : id; + Dispatcher.prototype.waitFor=function(ids) { + invariant( + this.$Dispatcher_isDispatching, + 'Dispatcher.waitFor(...): Must be invoked while dispatching.' + ); + for (var ii = 0; ii < ids.length; ii++) { + var id = ids[ii]; + if (this.$Dispatcher_isPending[id]) { + invariant( + this.$Dispatcher_isHandled[id], + 'Dispatcher.waitFor(...): Circular dependency detected while ' + + 'waiting for `%s`.', + id + ); + continue; + } + invariant( + this.$Dispatcher_callbacks[id], + 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.', + id + ); + this.$Dispatcher_invokeCallback(id); } - return null; - }, + }; /** - * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that - * should would receive a `mouseEnter` or `mouseLeave` event. - * - * NOTE: Does not invoke the callback on the nearest common ancestor because - * nothing "entered" or "left" that element. + * Dispatches a payload to all registered callbacks. * - * @param {string} leaveID ID being left. - * @param {string} enterID ID being entered. - * @param {function} cb Callback to invoke on each entered/left ID. - * @param {*} upArg Argument to invoke the callback with on left IDs. - * @param {*} downArg Argument to invoke the callback with on entered IDs. - * @internal + * @param {object} payload */ - traverseEnterLeave: function(leaveID, enterID, cb, upArg, downArg) { - var ancestorID = getFirstCommonAncestorID(leaveID, enterID); - if (ancestorID !== leaveID) { - traverseParentPath(leaveID, ancestorID, cb, upArg, false, true); - } - if (ancestorID !== enterID) { - traverseParentPath(ancestorID, enterID, cb, downArg, true, false); + Dispatcher.prototype.dispatch=function(payload) { + invariant( + !this.$Dispatcher_isDispatching, + 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.' + ); + this.$Dispatcher_startDispatching(payload); + try { + for (var id in this.$Dispatcher_callbacks) { + if (this.$Dispatcher_isPending[id]) { + continue; + } + this.$Dispatcher_invokeCallback(id); + } + } finally { + this.$Dispatcher_stopDispatching(); } - }, + }; /** - * Simulates the traversal of a two-phase, capture/bubble event dispatch. - * - * NOTE: This traversal happens on IDs without touching the DOM. + * Is this Dispatcher currently dispatching. * - * @param {string} targetID ID of the target node. - * @param {function} cb Callback to invoke. - * @param {*} arg Argument to invoke the callback with. - * @internal + * @return {boolean} */ - traverseTwoPhase: function(targetID, cb, arg) { - if (targetID) { - traverseParentPath('', targetID, cb, arg, true, false); - traverseParentPath(targetID, '', cb, arg, false, true); - } - }, + Dispatcher.prototype.isDispatching=function() { + return this.$Dispatcher_isDispatching; + }; /** - * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For - * example, passing `.0.$row-0.1` would result in `cb` getting called - * with `.0`, `.0.$row-0`, and `.0.$row-0.1`. - * - * NOTE: This traversal happens on IDs without touching the DOM. + * Call the callback stored with the given id. Also do some internal + * bookkeeping. * - * @param {string} targetID ID of the target node. - * @param {function} cb Callback to invoke. - * @param {*} arg Argument to invoke the callback with. + * @param {string} id * @internal */ - traverseAncestors: function(targetID, cb, arg) { - traverseParentPath('', targetID, cb, arg, true, false); - }, + Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) { + this.$Dispatcher_isPending[id] = true; + this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload); + this.$Dispatcher_isHandled[id] = true; + }; /** - * Exposed for unit testing. - * @private + * Set up bookkeeping needed when dispatching. + * + * @param {object} payload + * @internal */ - _getFirstCommonAncestorID: getFirstCommonAncestorID, + Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) { + for (var id in this.$Dispatcher_callbacks) { + this.$Dispatcher_isPending[id] = false; + this.$Dispatcher_isHandled[id] = false; + } + this.$Dispatcher_pendingPayload = payload; + this.$Dispatcher_isDispatching = true; + }; /** - * Exposed for unit testing. - * @private + * Clear bookkeeping used for dispatching. + * + * @internal */ - _getNextDescendantID: getNextDescendantID, - - isAncestorIDOf: isAncestorIDOf, - - SEPARATOR: SEPARATOR + Dispatcher.prototype.$Dispatcher_stopDispatching=function() { + this.$Dispatcher_pendingPayload = null; + this.$Dispatcher_isDispatching = false; + }; - }; - module.exports = ReactInstanceHandles; + module.exports = Dispatcher; /***/ }, -/* 24 */ +/* 14 */ /***/ function(module, exports, __webpack_require__) { /** - * Copyright 2013-2015, Facebook, Inc. + * Copyright (c) 2014, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * @providesModule ReactInstanceMap + * @providesModule invariant */ - 'use strict'; + "use strict"; /** - * `ReactInstanceMap` maintains a mapping from a public facing stateful - * instance (key) and the internal representation (value). This allows public - * methods to accept the user facing instance as an argument and map them back - * to internal methods. + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. */ - // TODO: Replace this with ES6: var ReactInstanceMap = new Map(); - var ReactInstanceMap = { + var invariant = function(condition, format, a, b, c, d, e, f) { + if (false) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } - /** - * This API should be called `delete` but we'd have to make sure to always - * transform these to strings for IE support. When this transform is fully - * supported we can rename it. - */ - remove: function(key) { - key._reactInternalInstance = undefined; - }, - - get: function(key) { - return key._reactInternalInstance; - }, - - has: function(key) { - return key._reactInternalInstance !== undefined; - }, + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + 'Invariant Violation: ' + + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + } - set: function(key, value) { - key._reactInternalInstance = value; + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; } - }; - module.exports = ReactInstanceMap; + module.exports = invariant; /***/ }, -/* 25 */ +/* 15 */ /***/ function(module, exports, __webpack_require__) { + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = makeFinalStore; /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. + * makeFinalStore(alt: AltInstance): AltStore * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. + * > Creates a `FinalStore` which is a store like any other except that it + * waits for all other stores in your alt instance to emit a change before it + * emits a change itself. + * + * Want to know when a particular dispatch has completed? This is the util + * you want. + * + * Good for: taking a snapshot and persisting it somewhere, saving data from + * a set of stores, syncing data, etc. * - * @providesModule EventPluginHub + * Usage: + * + * ```js + * var FinalStore = makeFinalStore(alt); + * + * FinalStore.listen(function () { + * // all stores have now changed + * }); + * ``` */ - 'use strict'; + function FinalStore() { + var _this = this; + + this.dispatcher.register(function (payload) { + var stores = Object.keys(_this.alt.stores).reduce(function (arr, store) { + arr.push(_this.alt.stores[store].dispatchToken); + return arr; + }, []); - var EventPluginRegistry = __webpack_require__(76); - var EventPluginUtils = __webpack_require__(53); + _this.waitFor(stores); + _this.setState({ payload: payload }); + _this.emitChange(); + }); + } - var accumulateInto = __webpack_require__(63); - var forEachAccumulated = __webpack_require__(64); - var invariant = __webpack_require__(1); + function makeFinalStore(alt) { + return alt.FinalStore ? alt.FinalStore : alt.FinalStore = alt.createUnsavedStore(FinalStore); + } - /** - * Internal store for event listeners - */ - var listenerBank = {}; + module.exports = exports["default"]; - /** - * Internal queue of events that have accumulated their dispatches and are - * waiting to have their dispatches executed. - */ - var eventQueue = null; +/***/ }, +/* 16 */ +2, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { - /** - * Dispatches an event and releases it back into the pool, unless persistent. - * - * @param {?object} event Synthetic event to be dispatched. - * @private - */ - var executeDispatchesAndRelease = function(event) { - if (event) { - var executeDispatch = EventPluginUtils.executeDispatch; - // Plugins can provide custom behavior when dispatching events. - var PluginModule = EventPluginRegistry.getPluginModuleForEvent(event); - if (PluginModule && PluginModule.executeDispatch) { - executeDispatch = PluginModule.executeDispatch; - } - EventPluginUtils.executeDispatchesInOrder(event, executeDispatch); + module.exports = __WEBPACK_EXTERNAL_MODULE_17__; - if (!event.isPersistent()) { - event.constructor.release(event); - } - } - }; +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { - /** - * - `InstanceHandle`: [required] Module that performs logical traversals of DOM - * hierarchy given ids of the logical DOM elements involved. - */ - var InstanceHandle = null; - - function validateInstanceHandle() { - var valid = - InstanceHandle && - InstanceHandle.traverseTwoPhase && - InstanceHandle.traverseEnterLeave; - ("production" !== (undefined) ? invariant( - valid, - 'InstanceHandle not injected before use!' - ) : invariant(valid)); - } + 'use strict'; + + module.exports = __webpack_require__(19); + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { /** - * This is a unified interface for event plugins to be installed and configured. + * AltContainer. + * + * There are many ways to use AltContainer. + * + * Using the `stores` prop. + * + * + * children get this.props.FooStore.storeData + * * - * Event plugins can implement the following properties: + * You can also pass in functions. + * + * + * children get this.props.FooStore.storeData + * + * + * Using the `store` prop. + * + * + * children get this.props.storeData + * + * + * Passing in `flux` because you're using alt instances + * + * + * children get this.props.flux + * * - * `extractEvents` {function(string, DOMEventTarget, string, object): *} - * Required. When a top-level event is fired, this method is expected to - * extract synthetic events that will in turn be queued and dispatched. + * Using a custom render function. * - * `eventTypes` {object} - * Optional, plugins that fire events must publish a mapping of registration - * names that are used to register listeners. Values of this mapping must - * be objects that contain `registrationName` or `phasedRegistrationNames`. + * ; + * }} + * /> * - * `executeDispatch` {function(object, function, string)} - * Optional, allows plugins to override how an event gets dispatched. By - * default, the listener is simply invoked. + * Using the `transform` prop. * - * Each plugin that is injected into `EventsPluginHub` is immediately operable. + * + * children get this.props.products + * * - * @public + * Full docs available at http://goatslacker.github.io/alt/ */ - var EventPluginHub = { - - /** - * Methods for injecting dependencies. - */ - injection: { - - /** - * @param {object} InjectedMount - * @public - */ - injectMount: EventPluginUtils.injection.injectMount, - - /** - * @param {object} InjectedInstanceHandle - * @public - */ - injectInstanceHandle: function(InjectedInstanceHandle) { - InstanceHandle = InjectedInstanceHandle; - if ("production" !== (undefined)) { - validateInstanceHandle(); - } - }, + 'use strict'; - getInstanceHandle: function() { - if ("production" !== (undefined)) { - validateInstanceHandle(); - } - return InstanceHandle; - }, + var React = __webpack_require__(30); + var mixinContainer = __webpack_require__(20); + var assign = __webpack_require__(16).assign; - /** - * @param {array} InjectedEventPluginOrder - * @public - */ - injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder, + var AltContainer = React.createClass(assign({ + displayName: 'AltContainer', - /** - * @param {object} injectedNamesToPlugins Map from names to plugin modules. - */ - injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName + render: function render() { + return this.altRender('div'); + } + }, mixinContainer(React))); - }, + module.exports = AltContainer; - eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs, +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { - registrationNameModules: EventPluginRegistry.registrationNameModules, + 'use strict'; - /** - * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent. - * - * @param {string} id ID of the DOM element. - * @param {string} registrationName Name of listener (e.g. `onClick`). - * @param {?function} listener The callback to store. - */ - putListener: function(id, registrationName, listener) { - ("production" !== (undefined) ? invariant( - !listener || typeof listener === 'function', - 'Expected %s listener to be a function, instead got type %s', - registrationName, typeof listener - ) : invariant(!listener || typeof listener === 'function')); - - var bankForRegistrationName = - listenerBank[registrationName] || (listenerBank[registrationName] = {}); - bankForRegistrationName[id] = listener; - }, + var Subscribe = __webpack_require__(21); + var assign = __webpack_require__(16).assign; - /** - * @param {string} id ID of the DOM element. - * @param {string} registrationName Name of listener (e.g. `onClick`). - * @return {?function} The stored callback. - */ - getListener: function(id, registrationName) { - var bankForRegistrationName = listenerBank[registrationName]; - return bankForRegistrationName && bankForRegistrationName[id]; - }, + function id(it) { + return it; + } - /** - * Deletes a listener from the registration bank. - * - * @param {string} id ID of the DOM element. - * @param {string} registrationName Name of listener (e.g. `onClick`). - */ - deleteListener: function(id, registrationName) { - var bankForRegistrationName = listenerBank[registrationName]; - if (bankForRegistrationName) { - delete bankForRegistrationName[id]; - } - }, + function getStateFromStore(store, props) { + return typeof store === 'function' ? store(props).value : store.getState(); + } - /** - * Deletes all listeners for the DOM element with the supplied ID. - * - * @param {string} id ID of the DOM element. - */ - deleteAllListeners: function(id) { - for (var registrationName in listenerBank) { - delete listenerBank[registrationName][id]; - } - }, + function getStateFromKey(actions, props) { + return typeof actions === 'function' ? actions(props) : actions; + } - /** - * Allows registered plugins an opportunity to extract events from top-level - * native browser events. - * - * @param {string} topLevelType Record from `EventConstants`. - * @param {DOMEventTarget} topLevelTarget The listening component root node. - * @param {string} topLevelTargetID ID of `topLevelTarget`. - * @param {object} nativeEvent Native browser event. - * @return {*} An accumulation of synthetic events. - * @internal - */ - extractEvents: function( - topLevelType, - topLevelTarget, - topLevelTargetID, - nativeEvent) { - var events; - var plugins = EventPluginRegistry.plugins; - for (var i = 0, l = plugins.length; i < l; i++) { - // Not every plugin in the ordering may be loaded at runtime. - var possiblePlugin = plugins[i]; - if (possiblePlugin) { - var extractedEvents = possiblePlugin.extractEvents( - topLevelType, - topLevelTarget, - topLevelTargetID, - nativeEvent - ); - if (extractedEvents) { - events = accumulateInto(events, extractedEvents); - } - } - } - return events; - }, + function mixinContainer(React) { + var cloneWithProps = React.addons.cloneWithProps; - /** - * Enqueues a synthetic event that should be dispatched when - * `processEventQueue` is invoked. - * - * @param {*} events An accumulation of synthetic events. - * @internal - */ - enqueueEvents: function(events) { - if (events) { - eventQueue = accumulateInto(eventQueue, events); - } - }, + return { + contextTypes: { + flux: React.PropTypes.object + }, - /** - * Dispatches all synthetic events on the event queue. - * - * @internal - */ - processEventQueue: function() { - // Set `eventQueue` to null before processing it so that we can tell if more - // events get enqueued while processing. - var processingEventQueue = eventQueue; - eventQueue = null; - forEachAccumulated(processingEventQueue, executeDispatchesAndRelease); - ("production" !== (undefined) ? invariant( - !eventQueue, - 'processEventQueue(): Additional events were enqueued while processing ' + - 'an event queue. Support for this has not yet been implemented.' - ) : invariant(!eventQueue)); - }, + childContextTypes: { + flux: React.PropTypes.object + }, - /** - * These are needed for tests only. Do not use! - */ - __purge: function() { - listenerBank = {}; - }, + getChildContext: function getChildContext() { + var flux = this.props.flux || this.context.flux; + return flux ? { flux: flux } : {}; + }, - __getListenerBank: function() { - return listenerBank; - } + getInitialState: function getInitialState() { + if (this.props.stores && this.props.store) { + throw new ReferenceError('Cannot define both store and stores'); + } - }; + return this.reduceState(this.props); + }, - module.exports = EventPluginHub; + componentWillReceiveProps: function componentWillReceiveProps(nextProps) { + this.destroySubscriptions(); + this.setState(this.reduceState(nextProps)); + this.registerStores(nextProps); + }, + componentDidMount: function componentDidMount() { + this.registerStores(this.props); + }, -/***/ }, -/* 26 */ -/***/ function(module, exports, __webpack_require__) { + componentWillUnmount: function componentWillUnmount() { + this.destroySubscriptions(); + }, - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule EventPropagators - */ - - 'use strict'; - - var EventConstants = __webpack_require__(8); - var EventPluginHub = __webpack_require__(25); - - var accumulateInto = __webpack_require__(63); - var forEachAccumulated = __webpack_require__(64); - - var PropagationPhases = EventConstants.PropagationPhases; - var getListener = EventPluginHub.getListener; - - /** - * Some event types have a notion of different registration names for different - * "phases" of propagation. This finds listeners by a given phase. - */ - function listenerAtPhase(id, event, propagationPhase) { - var registrationName = - event.dispatchConfig.phasedRegistrationNames[propagationPhase]; - return getListener(id, registrationName); - } - - /** - * Tags a `SyntheticEvent` with dispatched listeners. Creating this function - * here, allows us to not have to bind or create functions for each event. - * Mutating the event's members allows us to not have to create a wrapping - * "dispatch" object that pairs the event with the listener. - */ - function accumulateDirectionalDispatches(domID, upwards, event) { - if ("production" !== (undefined)) { - if (!domID) { - throw new Error('Dispatching id must not be null'); - } - } - var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured; - var listener = listenerAtPhase(domID, event, phase); - if (listener) { - event._dispatchListeners = - accumulateInto(event._dispatchListeners, listener); - event._dispatchIDs = accumulateInto(event._dispatchIDs, domID); - } - } - - /** - * Collect dispatches (must be entirely collected before dispatching - see unit - * tests). Lazily allocate the array to conserve memory. We must loop through - * each event and perform the traversal for each one. We can not perform a - * single traversal for the entire collection of events because each event may - * have a different target. - */ - function accumulateTwoPhaseDispatchesSingle(event) { - if (event && event.dispatchConfig.phasedRegistrationNames) { - EventPluginHub.injection.getInstanceHandle().traverseTwoPhase( - event.dispatchMarker, - accumulateDirectionalDispatches, - event - ); - } - } - - - /** - * Accumulates without regard to direction, does not look for phased - * registration names. Same as `accumulateDirectDispatchesSingle` but without - * requiring that the `dispatchMarker` be the same as the dispatched ID. - */ - function accumulateDispatches(id, ignoredDirection, event) { - if (event && event.dispatchConfig.registrationName) { - var registrationName = event.dispatchConfig.registrationName; - var listener = getListener(id, registrationName); - if (listener) { - event._dispatchListeners = - accumulateInto(event._dispatchListeners, listener); - event._dispatchIDs = accumulateInto(event._dispatchIDs, id); - } - } - } - - /** - * Accumulates dispatches on an `SyntheticEvent`, but only for the - * `dispatchMarker`. - * @param {SyntheticEvent} event - */ - function accumulateDirectDispatchesSingle(event) { - if (event && event.dispatchConfig.registrationName) { - accumulateDispatches(event.dispatchMarker, null, event); - } - } - - function accumulateTwoPhaseDispatches(events) { - forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle); - } - - function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) { - EventPluginHub.injection.getInstanceHandle().traverseEnterLeave( - fromID, - toID, - accumulateDispatches, - leave, - enter - ); - } - - - function accumulateDirectDispatches(events) { - forEachAccumulated(events, accumulateDirectDispatchesSingle); - } - - - - /** - * A small set of propagation patterns, each of which will accept a small amount - * of information, and generate a set of "dispatch ready event objects" - which - * are sets of events that have already been annotated with a set of dispatched - * listener functions/ids. The API is designed this way to discourage these - * propagation strategies from actually executing the dispatches, since we - * always want to collect the entire set of dispatches before executing event a - * single one. - * - * @constructor EventPropagators - */ - var EventPropagators = { - accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches, - accumulateDirectDispatches: accumulateDirectDispatches, - accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches - }; + registerStores: function registerStores(props) { + var stores = props.stores; + Subscribe.create(this); - module.exports = EventPropagators; + if (props.store) { + this.addSubscription(props.store); + } else if (props.stores) { + if (Array.isArray(stores)) { + stores.forEach(function (store) { + this.addSubscription(store); + }, this); + } else { + Object.keys(stores).forEach(function (formatter) { + this.addSubscription(stores[formatter]); + }, this); + } + } + }, + destroySubscriptions: function destroySubscriptions() { + Subscribe.destroy(this); + }, -/***/ }, -/* 27 */ -/***/ function(module, exports, __webpack_require__) { + getStateFromStores: function getStateFromStores(props) { + var stores = props.stores; + if (props.store) { + return getStateFromStore(props.store, props); + } else if (props.stores) { + // If you pass in an array of stores then we are just listening to them + // it should be an object then the state is added to the key specified + if (!Array.isArray(stores)) { + return Object.keys(stores).reduce(function (obj, key) { + obj[key] = getStateFromStore(stores[key], props); + return obj; + }, {}); + } + } else { + return {}; + } + }, - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule React - */ + getStateFromActions: function getStateFromActions(props) { + if (props.actions) { + return getStateFromKey(props.actions, props); + } else { + return {}; + } + }, - /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/ + getInjected: function getInjected(props) { + if (props.inject) { + return Object.keys(props.inject).reduce(function (obj, key) { + obj[key] = getStateFromKey(props.inject[key], props); + return obj; + }, {}); + } else { + return {}; + } + }, - 'use strict'; + reduceState: function reduceState(props) { + return assign({}, this.getStateFromStores(props), this.getStateFromActions(props), this.getInjected(props)); + }, - var EventPluginUtils = __webpack_require__(53); - var ReactChildren = __webpack_require__(77); - var ReactComponent = __webpack_require__(78); - var ReactClass = __webpack_require__(10); - var ReactContext = __webpack_require__(58); - var ReactCurrentOwner = __webpack_require__(17); - var ReactElement = __webpack_require__(3); - var ReactElementValidator = __webpack_require__(32); - var ReactDOM = __webpack_require__(135); - var ReactDOMTextComponent = __webpack_require__(81); - var ReactDefaultInjection = __webpack_require__(146); - var ReactInstanceHandles = __webpack_require__(23); - var ReactMount = __webpack_require__(12); - var ReactPerf = __webpack_require__(18); - var ReactPropTypes = __webpack_require__(86); - var ReactReconciler = __webpack_require__(29); - var ReactServerRendering = __webpack_require__(158); - - var assign = __webpack_require__(2); - var findDOMNode = __webpack_require__(93); - var onlyChild = __webpack_require__(101); - - ReactDefaultInjection.inject(); - - var createElement = ReactElement.createElement; - var createFactory = ReactElement.createFactory; - var cloneElement = ReactElement.cloneElement; - - if ("production" !== (undefined)) { - createElement = ReactElementValidator.createElement; - createFactory = ReactElementValidator.createFactory; - cloneElement = ReactElementValidator.cloneElement; - } + addSubscription: function addSubscription(store) { + if (typeof store === 'function') { + Subscribe.add(this, store(this.props).store, this.altSetState); + } else { + Subscribe.add(this, store, this.altSetState); + } + }, - var render = ReactPerf.measure('React', 'render', ReactMount.render); + altSetState: function altSetState() { + this.setState(this.reduceState(this.props)); + }, - var React = { - Children: { - map: ReactChildren.map, - forEach: ReactChildren.forEach, - count: ReactChildren.count, - only: onlyChild - }, - Component: ReactComponent, - DOM: ReactDOM, - PropTypes: ReactPropTypes, - initializeTouchEvents: function(shouldUseTouch) { - EventPluginUtils.useTouchEvents = shouldUseTouch; - }, - createClass: ReactClass.createClass, - createElement: createElement, - cloneElement: cloneElement, - createFactory: createFactory, - createMixin: function(mixin) { - // Currently a noop. Will be used to validate and trace mixins. - return mixin; - }, - constructAndRenderComponent: ReactMount.constructAndRenderComponent, - constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID, - findDOMNode: findDOMNode, - render: render, - renderToString: ReactServerRendering.renderToString, - renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup, - unmountComponentAtNode: ReactMount.unmountComponentAtNode, - isValidElement: ReactElement.isValidElement, - withContext: ReactContext.withContext, - - // Hook for JSX spread, don't use this for anything else. - __spread: assign - }; + getProps: function getProps() { + var flux = this.props.flux || this.context.flux; + var transform = typeof this.props.transform === 'function' ? this.props.transform : id; + return transform(assign(flux ? { flux: flux } : {}, this.state)); + }, - // Inject the runtime into a devtools global hook regardless of browser. - // Allows for debugging when the hook is injected on the page. - if ( - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') { - __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ - CurrentOwner: ReactCurrentOwner, - InstanceHandles: ReactInstanceHandles, - Mount: ReactMount, - Reconciler: ReactReconciler, - TextComponent: ReactDOMTextComponent - }); - } + shouldComponentUpdate: function shouldComponentUpdate() { + return this.props.shouldComponentUpdate ? this.props.shouldComponentUpdate(this.getProps()) : true; + }, - if ("production" !== (undefined)) { - var ExecutionEnvironment = __webpack_require__(5); - if (ExecutionEnvironment.canUseDOM && window.top === window.self) { - - // If we're in Chrome, look for the devtools marker and provide a download - // link if not installed. - if (navigator.userAgent.indexOf('Chrome') > -1) { - if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { - console.debug( - 'Download the React DevTools for a better development experience: ' + - 'http://fb.me/react-devtools' - ); + altRender: function altRender(Node) { + var children = this.props.children; + // Custom rendering function + if (typeof this.props.render === 'function') { + return this.props.render(this.getProps()); + } else if (this.props.component) { + return React.createElement(this.props.component, this.getProps()); } - } - - var expectedFeatures = [ - // shims - Array.isArray, - Array.prototype.every, - Array.prototype.forEach, - Array.prototype.indexOf, - Array.prototype.map, - Date.now, - Function.prototype.bind, - Object.keys, - String.prototype.split, - String.prototype.trim, - - // shams - Object.create, - Object.freeze - ]; - for (var i = 0; i < expectedFeatures.length; i++) { - if (!expectedFeatures[i]) { - console.error( - 'One or more ES5 shim/shams expected by React are not available: ' + - 'http://fb.me/react-warning-polyfills' - ); - break; + // Does not wrap child in a div if we don't have to. + if (Array.isArray(children)) { + return React.createElement(Node, null, children.map(function (child, i) { + return cloneWithProps(child, assign({ key: i }, this.getProps())); + }, this)); + } else if (children) { + return cloneWithProps(children, this.getProps()); + } else { + return React.createElement(Node, this.getProps()); } } - } + }; } - React.version = '0.13.2'; - - module.exports = React; - + module.exports = mixinContainer; /***/ }, -/* 28 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { - /** - * Copyright 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactFragment - */ - 'use strict'; + var Symbol = __webpack_require__(3); + var MIXIN_REGISTRY = Symbol('alt store listeners'); - var ReactElement = __webpack_require__(3); - - var warning = __webpack_require__(4); - - /** - * We used to allow keyed objects to serve as a collection of ReactElements, - * or nested sets. This allowed us a way to explicitly key a set a fragment of - * components. This is now being replaced with an opaque data structure. - * The upgrade path is to call React.addons.createFragment({ key: value }) to - * create a keyed fragment. The resulting data structure is opaque, for now. - */ - - if ("production" !== (undefined)) { - var fragmentKey = '_reactFragment'; - var didWarnKey = '_reactDidWarn'; - var canWarnForReactFragment = false; - - try { - // Feature test. Don't even try to issue this warning if we can't use - // enumerable: false. - - var dummy = function() { - return 1; - }; - - Object.defineProperty( - {}, - fragmentKey, - {enumerable: false, value: true} - ); + var Subscribe = { + create: function create(context) { + context[MIXIN_REGISTRY] = context[MIXIN_REGISTRY] || []; + }, - Object.defineProperty( - {}, - 'key', - {enumerable: true, get: dummy} - ); + add: function add(context, store, handler) { + context[MIXIN_REGISTRY].push({ store: store, handler: handler }); + store.listen(handler); + }, - canWarnForReactFragment = true; - } catch (x) { } - - var proxyPropertyAccessWithWarning = function(obj, key) { - Object.defineProperty(obj, key, { - enumerable: true, - get: function() { - ("production" !== (undefined) ? warning( - this[didWarnKey], - 'A ReactFragment is an opaque type. Accessing any of its ' + - 'properties is deprecated. Pass it to one of the React.Children ' + - 'helpers.' - ) : null); - this[didWarnKey] = true; - return this[fragmentKey][key]; - }, - set: function(value) { - ("production" !== (undefined) ? warning( - this[didWarnKey], - 'A ReactFragment is an immutable opaque type. Mutating its ' + - 'properties is deprecated.' - ) : null); - this[didWarnKey] = true; - this[fragmentKey][key] = value; - } + destroy: function destroy(context) { + context[MIXIN_REGISTRY].forEach(function (x) { + x.store.unlisten(x.handler); }); - }; - - var issuedWarnings = {}; - - var didWarnForFragment = function(fragment) { - // We use the keys and the type of the value as a heuristic to dedupe the - // warning to avoid spamming too much. - var fragmentCacheKey = ''; - for (var key in fragment) { - fragmentCacheKey += key + ':' + (typeof fragment[key]) + ','; - } - var alreadyWarnedOnce = !!issuedWarnings[fragmentCacheKey]; - issuedWarnings[fragmentCacheKey] = true; - return alreadyWarnedOnce; - }; - } - - var ReactFragment = { - // Wrap a keyed object in an opaque proxy that warns you if you access any - // of its properties. - create: function(object) { - if ("production" !== (undefined)) { - if (typeof object !== 'object' || !object || Array.isArray(object)) { - ("production" !== (undefined) ? warning( - false, - 'React.addons.createFragment only accepts a single object.', - object - ) : null); - return object; - } - if (ReactElement.isValidElement(object)) { - ("production" !== (undefined) ? warning( - false, - 'React.addons.createFragment does not accept a ReactElement ' + - 'without a wrapper object.' - ) : null); - return object; - } - if (canWarnForReactFragment) { - var proxy = {}; - Object.defineProperty(proxy, fragmentKey, { - enumerable: false, - value: object - }); - Object.defineProperty(proxy, didWarnKey, { - writable: true, - enumerable: false, - value: false - }); - for (var key in object) { - proxyPropertyAccessWithWarning(proxy, key); - } - Object.preventExtensions(proxy); - return proxy; - } - } - return object; - }, - // Extract the original keyed object from the fragment opaque type. Warn if - // a plain object is passed here. - extract: function(fragment) { - if ("production" !== (undefined)) { - if (canWarnForReactFragment) { - if (!fragment[fragmentKey]) { - ("production" !== (undefined) ? warning( - didWarnForFragment(fragment), - 'Any use of a keyed object should be wrapped in ' + - 'React.addons.createFragment(object) before being passed as a ' + - 'child.' - ) : null); - return fragment; - } - return fragment[fragmentKey]; - } - } - return fragment; + context[MIXIN_REGISTRY] = []; }, - // Check if this is a fragment and if so, extract the keyed object. If it - // is a fragment-like object, warn that it should be wrapped. Ignore if we - // can't determine what kind of object this is. - extractIfFragment: function(fragment) { - if ("production" !== (undefined)) { - if (canWarnForReactFragment) { - // If it is the opaque type, return the keyed object. - if (fragment[fragmentKey]) { - return fragment[fragmentKey]; - } - // Otherwise, check each property if it has an element, if it does - // it is probably meant as a fragment, so we can warn early. Defer, - // the warning to extract. - for (var key in fragment) { - if (fragment.hasOwnProperty(key) && - ReactElement.isValidElement(fragment[key])) { - // This looks like a fragment object, we should provide an - // early warning. - return ReactFragment.extract(fragment); - } - } - } - } - return fragment; + + listeners: function listeners(context) { + return context[MIXIN_REGISTRY]; } }; - module.exports = ReactFragment; - + module.exports = Subscribe; /***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactReconciler - */ - - 'use strict'; - - var ReactRef = __webpack_require__(157); - var ReactElementValidator = __webpack_require__(32); - - /** - * Helper to call ReactRef.attachRefs with this composite component, split out - * to avoid allocations in the transaction mount-ready queue. - */ - function attachRefs() { - ReactRef.attachRefs(this, this._currentElement); - } - - var ReactReconciler = { - - /** - * Initializes the component, renders markup, and registers event listeners. - * - * @param {ReactComponent} internalInstance - * @param {string} rootID DOM ID of the root node. - * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction - * @return {?string} Rendered markup to be inserted into the DOM. - * @final - * @internal - */ - mountComponent: function(internalInstance, rootID, transaction, context) { - var markup = internalInstance.mountComponent(rootID, transaction, context); - if ("production" !== (undefined)) { - ReactElementValidator.checkAndWarnForMutatedProps( - internalInstance._currentElement - ); - } - transaction.getReactMountReady().enqueue(attachRefs, internalInstance); - return markup; - }, - - /** - * Releases any resources allocated by `mountComponent`. - * - * @final - * @internal - */ - unmountComponent: function(internalInstance) { - ReactRef.detachRefs(internalInstance, internalInstance._currentElement); - internalInstance.unmountComponent(); - }, - - /** - * Update a component using a new element. - * - * @param {ReactComponent} internalInstance - * @param {ReactElement} nextElement - * @param {ReactReconcileTransaction} transaction - * @param {object} context - * @internal - */ - receiveComponent: function( - internalInstance, nextElement, transaction, context - ) { - var prevElement = internalInstance._currentElement; - - if (nextElement === prevElement && nextElement._owner != null) { - // Since elements are immutable after the owner is rendered, - // we can do a cheap identity compare here to determine if this is a - // superfluous reconcile. It's possible for state to be mutable but such - // change should trigger an update of the owner which would recreate - // the element. We explicitly check for the existence of an owner since - // it's possible for an element created outside a composite to be - // deeply mutated and reused. - return; - } - - if ("production" !== (undefined)) { - ReactElementValidator.checkAndWarnForMutatedProps(nextElement); - } - - var refsChanged = ReactRef.shouldUpdateRefs( - prevElement, - nextElement - ); - - if (refsChanged) { - ReactRef.detachRefs(internalInstance, prevElement); - } - - internalInstance.receiveComponent(nextElement, transaction, context); - - if (refsChanged) { - transaction.getReactMountReady().enqueue(attachRefs, internalInstance); - } - }, - - /** - * Flush any dirty changes in a component. - * - * @param {ReactComponent} internalInstance - * @param {ReactReconcileTransaction} transaction - * @internal - */ - performUpdateIfNecessary: function( - internalInstance, - transaction - ) { - internalInstance.performUpdateIfNecessary(transaction); - } - - }; - - module.exports = ReactReconciler; - - -/***/ }, -/* 30 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - /** - * Representation of a single EventEmitter function. - * - * @param {Function} fn Event handler to be called. - * @param {Mixed} context Context for function execution. - * @param {Boolean} once Only emit once - * @api private - */ - function EE(fn, context, once) { - this.fn = fn; - this.context = context; - this.once = once || false; - } - - /** - * Minimal EventEmitter interface that is molded against the Node.js - * EventEmitter interface. - * - * @constructor - * @api public - */ - function EventEmitter() { /* Nothing to set */ } - - /** - * Holds the assigned EventEmitters by name. - * - * @type {Object} - * @private - */ - EventEmitter.prototype._events = undefined; - - /** - * Return a list of assigned event listeners. - * - * @param {String} event The events that should be listed. - * @returns {Array} - * @api public - */ - EventEmitter.prototype.listeners = function listeners(event) { - if (!this._events || !this._events[event]) return []; - if (this._events[event].fn) return [this._events[event].fn]; - - for (var i = 0, l = this._events[event].length, ee = new Array(l); i < l; i++) { - ee[i] = this._events[event][i].fn; - } - - return ee; - }; - - /** - * Emit an event to all registered event listeners. - * - * @param {String} event The name of the event. - * @returns {Boolean} Indication if we've emitted an event. - * @api public - */ - EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { - if (!this._events || !this._events[event]) return false; - - var listeners = this._events[event] - , len = arguments.length - , args - , i; - - if ('function' === typeof listeners.fn) { - if (listeners.once) this.removeListener(event, listeners.fn, true); - - switch (len) { - case 1: return listeners.fn.call(listeners.context), true; - case 2: return listeners.fn.call(listeners.context, a1), true; - case 3: return listeners.fn.call(listeners.context, a1, a2), true; - case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; - case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; - case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; - } - - for (i = 1, args = new Array(len -1); i < len; i++) { - args[i - 1] = arguments[i]; - } - - listeners.fn.apply(listeners.context, args); - } else { - var length = listeners.length - , j; - - for (i = 0; i < length; i++) { - if (listeners[i].once) this.removeListener(event, listeners[i].fn, true); - - switch (len) { - case 1: listeners[i].fn.call(listeners[i].context); break; - case 2: listeners[i].fn.call(listeners[i].context, a1); break; - case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; - default: - if (!args) for (j = 1, args = new Array(len -1); j < len; j++) { - args[j - 1] = arguments[j]; - } - - listeners[i].fn.apply(listeners[i].context, args); - } - } - } - - return true; - }; - - /** - * Register a new EventListener for the given event. - * - * @param {String} event Name of the event. - * @param {Functon} fn Callback function. - * @param {Mixed} context The context of the function. - * @api public - */ - EventEmitter.prototype.on = function on(event, fn, context) { - var listener = new EE(fn, context || this); - - if (!this._events) this._events = {}; - if (!this._events[event]) this._events[event] = listener; - else { - if (!this._events[event].fn) this._events[event].push(listener); - else this._events[event] = [ - this._events[event], listener - ]; - } - - return this; - }; - - /** - * Add an EventListener that's only called once. - * - * @param {String} event Name of the event. - * @param {Function} fn Callback function. - * @param {Mixed} context The context of the function. - * @api public - */ - EventEmitter.prototype.once = function once(event, fn, context) { - var listener = new EE(fn, context || this, true); - - if (!this._events) this._events = {}; - if (!this._events[event]) this._events[event] = listener; - else { - if (!this._events[event].fn) this._events[event].push(listener); - else this._events[event] = [ - this._events[event], listener - ]; - } - - return this; - }; - - /** - * Remove event listeners. - * - * @param {String} event The event we want to remove. - * @param {Function} fn The listener that we need to find. - * @param {Boolean} once Only remove once listeners. - * @api public - */ - EventEmitter.prototype.removeListener = function removeListener(event, fn, once) { - if (!this._events || !this._events[event]) return this; - - var listeners = this._events[event] - , events = []; - - if (fn) { - if (listeners.fn && (listeners.fn !== fn || (once && !listeners.once))) { - events.push(listeners); - } - if (!listeners.fn) for (var i = 0, length = listeners.length; i < length; i++) { - if (listeners[i].fn !== fn || (once && !listeners[i].once)) { - events.push(listeners[i]); - } - } - } - - // - // Reset the array, or remove it completely if we have no more listeners. - // - if (events.length) { - this._events[event] = events.length === 1 ? events[0] : events; - } else { - delete this._events[event]; - } - - return this; - }; - - /** - * Remove all listeners or only the listeners for the specified event. - * - * @param {String} event The event want to remove all listeners for. - * @api public - */ - EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { - if (!this._events) return this; - - if (event) delete this._events[event]; - else this._events = {}; - - return this; - }; - - // - // Alias methods names because people roll like that. - // - EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - EventEmitter.prototype.addListener = EventEmitter.prototype.on; - - // - // This function doesn't apply anymore. - // - EventEmitter.prototype.setMaxListeners = function setMaxListeners() { - return this; - }; - - // - // Expose the module. - // - EventEmitter.EventEmitter = EventEmitter; - EventEmitter.EventEmitter2 = EventEmitter; - EventEmitter.EventEmitter3 = EventEmitter; - - // - // Expose the module. - // - module.exports = EventEmitter; - - -/***/ }, -/* 31 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule DOMPropertyOperations - * @typechecks static-only - */ - - 'use strict'; - - var DOMProperty = __webpack_require__(21); - - var quoteAttributeValueForBrowser = __webpack_require__(198); - var warning = __webpack_require__(4); - - function shouldIgnoreValue(name, value) { - return value == null || - (DOMProperty.hasBooleanValue[name] && !value) || - (DOMProperty.hasNumericValue[name] && isNaN(value)) || - (DOMProperty.hasPositiveNumericValue[name] && (value < 1)) || - (DOMProperty.hasOverloadedBooleanValue[name] && value === false); - } - - if ("production" !== (undefined)) { - var reactProps = { - children: true, - dangerouslySetInnerHTML: true, - key: true, - ref: true - }; - var warnedProperties = {}; - - var warnUnknownProperty = function(name) { - if (reactProps.hasOwnProperty(name) && reactProps[name] || - warnedProperties.hasOwnProperty(name) && warnedProperties[name]) { - return; - } - - warnedProperties[name] = true; - var lowerCasedName = name.toLowerCase(); - - // data-* attributes should be lowercase; suggest the lowercase version - var standardName = ( - DOMProperty.isCustomAttribute(lowerCasedName) ? - lowerCasedName : - DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? - DOMProperty.getPossibleStandardName[lowerCasedName] : - null - ); - - // For now, only warn when we have a suggested correction. This prevents - // logging too much when using transferPropsTo. - ("production" !== (undefined) ? warning( - standardName == null, - 'Unknown DOM property %s. Did you mean %s?', - name, - standardName - ) : null); - - }; - } - - /** - * Operations for dealing with DOM properties. - */ - var DOMPropertyOperations = { - - /** - * Creates markup for the ID property. - * - * @param {string} id Unescaped ID. - * @return {string} Markup string. - */ - createMarkupForID: function(id) { - return DOMProperty.ID_ATTRIBUTE_NAME + '=' + - quoteAttributeValueForBrowser(id); - }, - - /** - * Creates markup for a property. - * - * @param {string} name - * @param {*} value - * @return {?string} Markup string, or null if the property was invalid. - */ - createMarkupForProperty: function(name, value) { - if (DOMProperty.isStandardName.hasOwnProperty(name) && - DOMProperty.isStandardName[name]) { - if (shouldIgnoreValue(name, value)) { - return ''; - } - var attributeName = DOMProperty.getAttributeName[name]; - if (DOMProperty.hasBooleanValue[name] || - (DOMProperty.hasOverloadedBooleanValue[name] && value === true)) { - return attributeName; - } - return attributeName + '=' + quoteAttributeValueForBrowser(value); - } else if (DOMProperty.isCustomAttribute(name)) { - if (value == null) { - return ''; - } - return name + '=' + quoteAttributeValueForBrowser(value); - } else if ("production" !== (undefined)) { - warnUnknownProperty(name); - } - return null; - }, - - /** - * Sets the value for a property on a node. - * - * @param {DOMElement} node - * @param {string} name - * @param {*} value - */ - setValueForProperty: function(node, name, value) { - if (DOMProperty.isStandardName.hasOwnProperty(name) && - DOMProperty.isStandardName[name]) { - var mutationMethod = DOMProperty.getMutationMethod[name]; - if (mutationMethod) { - mutationMethod(node, value); - } else if (shouldIgnoreValue(name, value)) { - this.deleteValueForProperty(node, name); - } else if (DOMProperty.mustUseAttribute[name]) { - // `setAttribute` with objects becomes only `[object]` in IE8/9, - // ('' + value) makes it output the correct toString()-value. - node.setAttribute(DOMProperty.getAttributeName[name], '' + value); - } else { - var propName = DOMProperty.getPropertyName[name]; - // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the - // property type before comparing; only `value` does and is string. - if (!DOMProperty.hasSideEffects[name] || - ('' + node[propName]) !== ('' + value)) { - // Contrary to `setAttribute`, object properties are properly - // `toString`ed by IE8/9. - node[propName] = value; - } - } - } else if (DOMProperty.isCustomAttribute(name)) { - if (value == null) { - node.removeAttribute(name); - } else { - node.setAttribute(name, '' + value); - } - } else if ("production" !== (undefined)) { - warnUnknownProperty(name); - } - }, - - /** - * Deletes the value for a property on a node. - * - * @param {DOMElement} node - * @param {string} name - */ - deleteValueForProperty: function(node, name) { - if (DOMProperty.isStandardName.hasOwnProperty(name) && - DOMProperty.isStandardName[name]) { - var mutationMethod = DOMProperty.getMutationMethod[name]; - if (mutationMethod) { - mutationMethod(node, undefined); - } else if (DOMProperty.mustUseAttribute[name]) { - node.removeAttribute(DOMProperty.getAttributeName[name]); - } else { - var propName = DOMProperty.getPropertyName[name]; - var defaultValue = DOMProperty.getDefaultValueForProperty( - node.nodeName, - propName - ); - if (!DOMProperty.hasSideEffects[name] || - ('' + node[propName]) !== defaultValue) { - node[propName] = defaultValue; - } - } - } else if (DOMProperty.isCustomAttribute(name)) { - node.removeAttribute(name); - } else if ("production" !== (undefined)) { - warnUnknownProperty(name); - } - } - - }; - - module.exports = DOMPropertyOperations; - - -/***/ }, -/* 32 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactElementValidator - */ - - /** - * ReactElementValidator provides a wrapper around a element factory - * which validates the props passed to the element. This is intended to be - * used only in DEV and could be replaced by a static type checker for languages - * that support it. - */ - - 'use strict'; - - var ReactElement = __webpack_require__(3); - var ReactFragment = __webpack_require__(28); - var ReactPropTypeLocations = __webpack_require__(61); - var ReactPropTypeLocationNames = __webpack_require__(38); - var ReactCurrentOwner = __webpack_require__(17); - var ReactNativeComponent = __webpack_require__(37); - - var getIteratorFn = __webpack_require__(96); - var invariant = __webpack_require__(1); - var warning = __webpack_require__(4); - - function getDeclarationErrorAddendum() { - if (ReactCurrentOwner.current) { - var name = ReactCurrentOwner.current.getName(); - if (name) { - return ' Check the render method of `' + name + '`.'; - } - } - return ''; - } - - /** - * Warn if there's no key explicitly set on dynamic arrays of children or - * object keys are not valid. This allows us to keep track of children between - * updates. - */ - var ownerHasKeyUseWarning = {}; - - var loggedTypeFailures = {}; - - var NUMERIC_PROPERTY_REGEX = /^\d+$/; - - /** - * Gets the instance's name for use in warnings. - * - * @internal - * @return {?string} Display name or undefined - */ - function getName(instance) { - var publicInstance = instance && instance.getPublicInstance(); - if (!publicInstance) { - return undefined; - } - var constructor = publicInstance.constructor; - if (!constructor) { - return undefined; - } - return constructor.displayName || constructor.name || undefined; - } - - /** - * Gets the current owner's displayName for use in warnings. - * - * @internal - * @return {?string} Display name or undefined - */ - function getCurrentOwnerDisplayName() { - var current = ReactCurrentOwner.current; - return ( - current && getName(current) || undefined - ); - } - - /** - * Warn if the element doesn't have an explicit key assigned to it. - * This element is in an array. The array could grow and shrink or be - * reordered. All children that haven't already been validated are required to - * have a "key" property assigned to it. - * - * @internal - * @param {ReactElement} element Element that requires a key. - * @param {*} parentType element's parent's type. - */ - function validateExplicitKey(element, parentType) { - if (element._store.validated || element.key != null) { - return; - } - element._store.validated = true; - - warnAndMonitorForKeyUse( - 'Each child in an array or iterator should have a unique "key" prop.', - element, - parentType - ); - } - - /** - * Warn if the key is being defined as an object property but has an incorrect - * value. - * - * @internal - * @param {string} name Property name of the key. - * @param {ReactElement} element Component that requires a key. - * @param {*} parentType element's parent's type. - */ - function validatePropertyKey(name, element, parentType) { - if (!NUMERIC_PROPERTY_REGEX.test(name)) { - return; - } - warnAndMonitorForKeyUse( - 'Child objects should have non-numeric keys so ordering is preserved.', - element, - parentType - ); - } - - /** - * Shared warning and monitoring code for the key warnings. - * - * @internal - * @param {string} message The base warning that gets output. - * @param {ReactElement} element Component that requires a key. - * @param {*} parentType element's parent's type. - */ - function warnAndMonitorForKeyUse(message, element, parentType) { - var ownerName = getCurrentOwnerDisplayName(); - var parentName = typeof parentType === 'string' ? - parentType : parentType.displayName || parentType.name; - - var useName = ownerName || parentName; - var memoizer = ownerHasKeyUseWarning[message] || ( - (ownerHasKeyUseWarning[message] = {}) - ); - if (memoizer.hasOwnProperty(useName)) { - return; - } - memoizer[useName] = true; - - var parentOrOwnerAddendum = - ownerName ? (" Check the render method of " + ownerName + ".") : - parentName ? (" Check the React.render call using <" + parentName + ">.") : - ''; - - // Usually the current owner is the offender, but if it accepts children as a - // property, it may be the creator of the child that's responsible for - // assigning it a key. - var childOwnerAddendum = ''; - if (element && - element._owner && - element._owner !== ReactCurrentOwner.current) { - // Name of the component that originally created this child. - var childOwnerName = getName(element._owner); - - childOwnerAddendum = (" It was passed a child from " + childOwnerName + "."); - } - - ("production" !== (undefined) ? warning( - false, - message + '%s%s See http://fb.me/react-warning-keys for more information.', - parentOrOwnerAddendum, - childOwnerAddendum - ) : null); - } - - /** - * Ensure that every element either is passed in a static location, in an - * array with an explicit keys property defined, or in an object literal - * with valid key property. - * - * @internal - * @param {ReactNode} node Statically passed child of any type. - * @param {*} parentType node's parent's type. - */ - function validateChildKeys(node, parentType) { - if (Array.isArray(node)) { - for (var i = 0; i < node.length; i++) { - var child = node[i]; - if (ReactElement.isValidElement(child)) { - validateExplicitKey(child, parentType); - } - } - } else if (ReactElement.isValidElement(node)) { - // This element was passed in a valid location. - node._store.validated = true; - } else if (node) { - var iteratorFn = getIteratorFn(node); - // Entry iterators provide implicit keys. - if (iteratorFn) { - if (iteratorFn !== node.entries) { - var iterator = iteratorFn.call(node); - var step; - while (!(step = iterator.next()).done) { - if (ReactElement.isValidElement(step.value)) { - validateExplicitKey(step.value, parentType); - } - } - } - } else if (typeof node === 'object') { - var fragment = ReactFragment.extractIfFragment(node); - for (var key in fragment) { - if (fragment.hasOwnProperty(key)) { - validatePropertyKey(key, fragment[key], parentType); - } - } - } - } - } - - /** - * Assert that the props are valid - * - * @param {string} componentName Name of the component for error messages. - * @param {object} propTypes Map of prop name to a ReactPropType - * @param {object} props - * @param {string} location e.g. "prop", "context", "child context" - * @private - */ - function checkPropTypes(componentName, propTypes, props, location) { - for (var propName in propTypes) { - if (propTypes.hasOwnProperty(propName)) { - var error; - // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - ("production" !== (undefined) ? invariant( - typeof propTypes[propName] === 'function', - '%s: %s type `%s` is invalid; it must be a function, usually from ' + - 'React.PropTypes.', - componentName || 'React class', - ReactPropTypeLocationNames[location], - propName - ) : invariant(typeof propTypes[propName] === 'function')); - error = propTypes[propName](props, propName, componentName, location); - } catch (ex) { - error = ex; - } - if (error instanceof Error && !(error.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error.message] = true; - - var addendum = getDeclarationErrorAddendum(this); - ("production" !== (undefined) ? warning(false, 'Failed propType: %s%s', error.message, addendum) : null); - } - } - } - } - - var warnedPropsMutations = {}; - - /** - * Warn about mutating props when setting `propName` on `element`. - * - * @param {string} propName The string key within props that was set - * @param {ReactElement} element - */ - function warnForPropsMutation(propName, element) { - var type = element.type; - var elementName = typeof type === 'string' ? type : type.displayName; - var ownerName = element._owner ? - element._owner.getPublicInstance().constructor.displayName : null; - - var warningKey = propName + '|' + elementName + '|' + ownerName; - if (warnedPropsMutations.hasOwnProperty(warningKey)) { - return; - } - warnedPropsMutations[warningKey] = true; - - var elementInfo = ''; - if (elementName) { - elementInfo = ' <' + elementName + ' />'; - } - var ownerInfo = ''; - if (ownerName) { - ownerInfo = ' The element was created by ' + ownerName + '.'; - } - - ("production" !== (undefined) ? warning( - false, - 'Don\'t set .props.%s of the React component%s. Instead, specify the ' + - 'correct value when initially creating the element or use ' + - 'React.cloneElement to make a new element with updated props.%s', - propName, - elementInfo, - ownerInfo - ) : null); - } - - // Inline Object.is polyfill - function is(a, b) { - if (a !== a) { - // NaN - return b !== b; - } - if (a === 0 && b === 0) { - // +-0 - return 1 / a === 1 / b; - } - return a === b; - } - - /** - * Given an element, check if its props have been mutated since element - * creation (or the last call to this function). In particular, check if any - * new props have been added, which we can't directly catch by defining warning - * properties on the props object. - * - * @param {ReactElement} element - */ - function checkAndWarnForMutatedProps(element) { - if (!element._store) { - // Element was created using `new ReactElement` directly or with - // `ReactElement.createElement`; skip mutation checking - return; - } - - var originalProps = element._store.originalProps; - var props = element.props; - - for (var propName in props) { - if (props.hasOwnProperty(propName)) { - if (!originalProps.hasOwnProperty(propName) || - !is(originalProps[propName], props[propName])) { - warnForPropsMutation(propName, element); - - // Copy over the new value so that the two props objects match again - originalProps[propName] = props[propName]; - } - } - } - } - - /** - * Given an element, validate that its props follow the propTypes definition, - * provided by the type. - * - * @param {ReactElement} element - */ - function validatePropTypes(element) { - if (element.type == null) { - // This has already warned. Don't throw. - return; - } - // Extract the component class from the element. Converts string types - // to a composite class which may have propTypes. - // TODO: Validating a string's propTypes is not decoupled from the - // rendering target which is problematic. - var componentClass = ReactNativeComponent.getComponentClassForElement( - element - ); - var name = componentClass.displayName || componentClass.name; - if (componentClass.propTypes) { - checkPropTypes( - name, - componentClass.propTypes, - element.props, - ReactPropTypeLocations.prop - ); - } - if (typeof componentClass.getDefaultProps === 'function') { - ("production" !== (undefined) ? warning( - componentClass.getDefaultProps.isReactClassApproved, - 'getDefaultProps is only used on classic React.createClass ' + - 'definitions. Use a static property named `defaultProps` instead.' - ) : null); - } - } - - var ReactElementValidator = { - - checkAndWarnForMutatedProps: checkAndWarnForMutatedProps, - - createElement: function(type, props, children) { - // We warn in this case but don't throw. We expect the element creation to - // succeed and there will likely be errors in render. - ("production" !== (undefined) ? warning( - type != null, - 'React.createElement: type should not be null or undefined. It should ' + - 'be a string (for DOM elements) or a ReactClass (for composite ' + - 'components).' - ) : null); - - var element = ReactElement.createElement.apply(this, arguments); - - // The result can be nullish if a mock or a custom function is used. - // TODO: Drop this when these are no longer allowed as the type argument. - if (element == null) { - return element; - } - - for (var i = 2; i < arguments.length; i++) { - validateChildKeys(arguments[i], type); - } - - validatePropTypes(element); - - return element; - }, - - createFactory: function(type) { - var validatedFactory = ReactElementValidator.createElement.bind( - null, - type - ); - // Legacy hook TODO: Warn if this is accessed - validatedFactory.type = type; - - if ("production" !== (undefined)) { - try { - Object.defineProperty( - validatedFactory, - 'type', - { - enumerable: false, - get: function() { - ("production" !== (undefined) ? warning( - false, - 'Factory.type is deprecated. Access the class directly ' + - 'before passing it to createFactory.' - ) : null); - Object.defineProperty(this, 'type', { - value: type - }); - return type; - } - } - ); - } catch (x) { - // IE will fail on defineProperty (es5-shim/sham too) - } - } - - - return validatedFactory; - }, - - cloneElement: function(element, props, children) { - var newElement = ReactElement.cloneElement.apply(this, arguments); - for (var i = 2; i < arguments.length; i++) { - validateChildKeys(arguments[i], newElement.type); - } - validatePropTypes(newElement); - return newElement; - } - - }; - - module.exports = ReactElementValidator; - - -/***/ }, -/* 33 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule SyntheticUIEvent - * @typechecks static-only - */ - - 'use strict'; - - var SyntheticEvent = __webpack_require__(19); - - var getEventTarget = __webpack_require__(67); - - /** - * @interface UIEvent - * @see http://www.w3.org/TR/DOM-Level-3-Events/ - */ - var UIEventInterface = { - view: function(event) { - if (event.view) { - return event.view; - } - - var target = getEventTarget(event); - if (target != null && target.window === target) { - // target is a window object - return target; - } - - var doc = target.ownerDocument; - // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. - if (doc) { - return doc.defaultView || doc.parentWindow; - } else { - return window; - } - }, - detail: function(event) { - return event.detail || 0; - } - }; - - /** - * @param {object} dispatchConfig Configuration used to dispatch this event. - * @param {string} dispatchMarker Marker identifying the event target. - * @param {object} nativeEvent Native browser event. - * @extends {SyntheticEvent} - */ - function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) { - SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent); - } - - SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface); - - module.exports = SyntheticUIEvent; - - -/***/ }, -/* 34 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule keyMirror - * @typechecks static-only - */ - - 'use strict'; - - var invariant = __webpack_require__(1); - - /** - * Constructs an enumeration with keys equal to their value. - * - * For example: - * - * var COLORS = keyMirror({blue: null, red: null}); - * var myColor = COLORS.blue; - * var isColorValid = !!COLORS[myColor]; - * - * The last line could not be performed if the values of the generated enum were - * not equal to their keys. - * - * Input: {key1: val1, key2: val2} - * Output: {key1: key1, key2: key2} - * - * @param {object} obj - * @return {object} - */ - var keyMirror = function(obj) { - var ret = {}; - var key; - ("production" !== (undefined) ? invariant( - obj instanceof Object && !Array.isArray(obj), - 'keyMirror(...): Argument must be an object.' - ) : invariant(obj instanceof Object && !Array.isArray(obj))); - for (key in obj) { - if (!obj.hasOwnProperty(key)) { - continue; - } - ret[key] = key; - } - return ret; - }; - - module.exports = keyMirror; - - -/***/ }, -/* 35 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule AutoFocusMixin - * @typechecks static-only - */ - - 'use strict'; - - var focusNode = __webpack_require__(94); - - var AutoFocusMixin = { - componentDidMount: function() { - if (this.props.autoFocus) { - focusNode(this.getDOMNode()); - } - } - }; - - module.exports = AutoFocusMixin; - - -/***/ }, -/* 36 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactEmptyComponent - */ - - 'use strict'; - - var ReactElement = __webpack_require__(3); - var ReactInstanceMap = __webpack_require__(24); - - var invariant = __webpack_require__(1); - - var component; - // This registry keeps track of the React IDs of the components that rendered to - // `null` (in reality a placeholder such as `noscript`) - var nullComponentIDsRegistry = {}; - - var ReactEmptyComponentInjection = { - injectEmptyComponent: function(emptyComponent) { - component = ReactElement.createFactory(emptyComponent); - } - }; - - var ReactEmptyComponentType = function() {}; - ReactEmptyComponentType.prototype.componentDidMount = function() { - var internalInstance = ReactInstanceMap.get(this); - // TODO: Make sure we run these methods in the correct order, we shouldn't - // need this check. We're going to assume if we're here it means we ran - // componentWillUnmount already so there is no internal instance (it gets - // removed as part of the unmounting process). - if (!internalInstance) { - return; - } - registerNullComponentID(internalInstance._rootNodeID); - }; - ReactEmptyComponentType.prototype.componentWillUnmount = function() { - var internalInstance = ReactInstanceMap.get(this); - // TODO: Get rid of this check. See TODO in componentDidMount. - if (!internalInstance) { - return; - } - deregisterNullComponentID(internalInstance._rootNodeID); - }; - ReactEmptyComponentType.prototype.render = function() { - ("production" !== (undefined) ? invariant( - component, - 'Trying to return null from a render, but no null placeholder component ' + - 'was injected.' - ) : invariant(component)); - return component(); - }; - - var emptyElement = ReactElement.createElement(ReactEmptyComponentType); - - /** - * Mark the component as having rendered to null. - * @param {string} id Component's `_rootNodeID`. - */ - function registerNullComponentID(id) { - nullComponentIDsRegistry[id] = true; - } - - /** - * Unmark the component as having rendered to null: it renders to something now. - * @param {string} id Component's `_rootNodeID`. - */ - function deregisterNullComponentID(id) { - delete nullComponentIDsRegistry[id]; - } - - /** - * @param {string} id Component's `_rootNodeID`. - * @return {boolean} True if the component is rendered to null. - */ - function isNullComponentID(id) { - return !!nullComponentIDsRegistry[id]; - } - - var ReactEmptyComponent = { - emptyElement: emptyElement, - injection: ReactEmptyComponentInjection, - isNullComponentID: isNullComponentID - }; - - module.exports = ReactEmptyComponent; - - -/***/ }, -/* 37 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactNativeComponent - */ - - 'use strict'; - - var assign = __webpack_require__(2); - var invariant = __webpack_require__(1); - - var autoGenerateWrapperClass = null; - var genericComponentClass = null; - // This registry keeps track of wrapper classes around native tags - var tagToComponentClass = {}; - var textComponentClass = null; - - var ReactNativeComponentInjection = { - // This accepts a class that receives the tag string. This is a catch all - // that can render any kind of tag. - injectGenericComponentClass: function(componentClass) { - genericComponentClass = componentClass; - }, - // This accepts a text component class that takes the text string to be - // rendered as props. - injectTextComponentClass: function(componentClass) { - textComponentClass = componentClass; - }, - // This accepts a keyed object with classes as values. Each key represents a - // tag. That particular tag will use this class instead of the generic one. - injectComponentClasses: function(componentClasses) { - assign(tagToComponentClass, componentClasses); - }, - // Temporary hack since we expect DOM refs to behave like composites, - // for this release. - injectAutoWrapper: function(wrapperFactory) { - autoGenerateWrapperClass = wrapperFactory; - } - }; - - /** - * Get a composite component wrapper class for a specific tag. - * - * @param {ReactElement} element The tag for which to get the class. - * @return {function} The React class constructor function. - */ - function getComponentClassForElement(element) { - if (typeof element.type === 'function') { - return element.type; - } - var tag = element.type; - var componentClass = tagToComponentClass[tag]; - if (componentClass == null) { - tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag); - } - return componentClass; - } - - /** - * Get a native internal component class for a specific tag. - * - * @param {ReactElement} element The element to create. - * @return {function} The internal class constructor function. - */ - function createInternalComponent(element) { - ("production" !== (undefined) ? invariant( - genericComponentClass, - 'There is no registered component for the tag %s', - element.type - ) : invariant(genericComponentClass)); - return new genericComponentClass(element.type, element.props); - } - - /** - * @param {ReactText} text - * @return {ReactComponent} - */ - function createInstanceForText(text) { - return new textComponentClass(text); - } - - /** - * @param {ReactComponent} component - * @return {boolean} - */ - function isTextComponent(component) { - return component instanceof textComponentClass; - } - - var ReactNativeComponent = { - getComponentClassForElement: getComponentClassForElement, - createInternalComponent: createInternalComponent, - createInstanceForText: createInstanceForText, - isTextComponent: isTextComponent, - injection: ReactNativeComponentInjection - }; - - module.exports = ReactNativeComponent; - - -/***/ }, -/* 38 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactPropTypeLocationNames - */ - - 'use strict'; - - var ReactPropTypeLocationNames = {}; - - if ("production" !== (undefined)) { - ReactPropTypeLocationNames = { - prop: 'prop', - context: 'context', - childContext: 'child context' - }; - } - - module.exports = ReactPropTypeLocationNames; - - -/***/ }, -/* 39 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule SyntheticMouseEvent - * @typechecks static-only - */ - - 'use strict'; - - var SyntheticUIEvent = __webpack_require__(33); - var ViewportMetrics = __webpack_require__(90); - - var getEventModifierState = __webpack_require__(66); - - /** - * @interface MouseEvent - * @see http://www.w3.org/TR/DOM-Level-3-Events/ - */ - var MouseEventInterface = { - screenX: null, - screenY: null, - clientX: null, - clientY: null, - ctrlKey: null, - shiftKey: null, - altKey: null, - metaKey: null, - getModifierState: getEventModifierState, - button: function(event) { - // Webkit, Firefox, IE9+ - // which: 1 2 3 - // button: 0 1 2 (standard) - var button = event.button; - if ('which' in event) { - return button; - } - // IE<9 - // which: undefined - // button: 0 0 0 - // button: 1 4 2 (onmouseup) - return button === 2 ? 2 : button === 4 ? 1 : 0; - }, - buttons: null, - relatedTarget: function(event) { - return event.relatedTarget || ( - ((event.fromElement === event.srcElement ? event.toElement : event.fromElement)) - ); - }, - // "Proprietary" Interface. - pageX: function(event) { - return 'pageX' in event ? - event.pageX : - event.clientX + ViewportMetrics.currentScrollLeft; - }, - pageY: function(event) { - return 'pageY' in event ? - event.pageY : - event.clientY + ViewportMetrics.currentScrollTop; - } - }; - - /** - * @param {object} dispatchConfig Configuration used to dispatch this event. - * @param {string} dispatchMarker Marker identifying the event target. - * @param {object} nativeEvent Native browser event. - * @extends {SyntheticUIEvent} - */ - function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) { - SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent); - } - - SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface); - - module.exports = SyntheticMouseEvent; - - -/***/ }, -/* 40 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule Transaction - */ - - 'use strict'; - - var invariant = __webpack_require__(1); - - /** - * `Transaction` creates a black box that is able to wrap any method such that - * certain invariants are maintained before and after the method is invoked - * (Even if an exception is thrown while invoking the wrapped method). Whoever - * instantiates a transaction can provide enforcers of the invariants at - * creation time. The `Transaction` class itself will supply one additional - * automatic invariant for you - the invariant that any transaction instance - * should not be run while it is already being run. You would typically create a - * single instance of a `Transaction` for reuse multiple times, that potentially - * is used to wrap several different methods. Wrappers are extremely simple - - * they only require implementing two methods. - * - *

-	 *                       wrappers (injected at creation time)
-	 *                                      +        +
-	 *                                      |        |
-	 *                    +-----------------|--------|--------------+
-	 *                    |                 v        |              |
-	 *                    |      +---------------+   |              |
-	 *                    |   +--|    wrapper1   |---|----+         |
-	 *                    |   |  +---------------+   v    |         |
-	 *                    |   |          +-------------+  |         |
-	 *                    |   |     +----|   wrapper2  |--------+   |
-	 *                    |   |     |    +-------------+  |     |   |
-	 *                    |   |     |                     |     |   |
-	 *                    |   v     v                     v     v   | wrapper
-	 *                    | +---+ +---+   +---------+   +---+ +---+ | invariants
-	 * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained
-	 * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
-	 *                    | |   | |   |   |         |   |   | |   | |
-	 *                    | |   | |   |   |         |   |   | |   | |
-	 *                    | |   | |   |   |         |   |   | |   | |
-	 *                    | +---+ +---+   +---------+   +---+ +---+ |
-	 *                    |  initialize                    close    |
-	 *                    +-----------------------------------------+
-	 * 
- * - * Use cases: - * - Preserving the input selection ranges before/after reconciliation. - * Restoring selection even in the event of an unexpected error. - * - Deactivating events while rearranging the DOM, preventing blurs/focuses, - * while guaranteeing that afterwards, the event system is reactivated. - * - Flushing a queue of collected DOM mutations to the main UI thread after a - * reconciliation takes place in a worker thread. - * - Invoking any collected `componentDidUpdate` callbacks after rendering new - * content. - * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue - * to preserve the `scrollTop` (an automatic scroll aware DOM). - * - (Future use case): Layout calculations before and after DOM updates. - * - * Transactional plugin API: - * - A module that has an `initialize` method that returns any precomputation. - * - and a `close` method that accepts the precomputation. `close` is invoked - * when the wrapped process is completed, or has failed. - * - * @param {Array} transactionWrapper Wrapper modules - * that implement `initialize` and `close`. - * @return {Transaction} Single transaction for reuse in thread. - * - * @class Transaction - */ - var Mixin = { - /** - * Sets up this instance so that it is prepared for collecting metrics. Does - * so such that this setup method may be used on an instance that is already - * initialized, in a way that does not consume additional memory upon reuse. - * That can be useful if you decide to make your subclass of this mixin a - * "PooledClass". - */ - reinitializeTransaction: function() { - this.transactionWrappers = this.getTransactionWrappers(); - if (!this.wrapperInitData) { - this.wrapperInitData = []; - } else { - this.wrapperInitData.length = 0; - } - this._isInTransaction = false; - }, - - _isInTransaction: false, - - /** - * @abstract - * @return {Array} Array of transaction wrappers. - */ - getTransactionWrappers: null, - - isInTransaction: function() { - return !!this._isInTransaction; - }, - - /** - * Executes the function within a safety window. Use this for the top level - * methods that result in large amounts of computation/mutations that would - * need to be safety checked. - * - * @param {function} method Member of scope to call. - * @param {Object} scope Scope to invoke from. - * @param {Object?=} args... Arguments to pass to the method (optional). - * Helps prevent need to bind in many cases. - * @return Return value from `method`. - */ - perform: function(method, scope, a, b, c, d, e, f) { - ("production" !== (undefined) ? invariant( - !this.isInTransaction(), - 'Transaction.perform(...): Cannot initialize a transaction when there ' + - 'is already an outstanding transaction.' - ) : invariant(!this.isInTransaction())); - var errorThrown; - var ret; - try { - this._isInTransaction = true; - // Catching errors makes debugging more difficult, so we start with - // errorThrown set to true before setting it to false after calling - // close -- if it's still set to true in the finally block, it means - // one of these calls threw. - errorThrown = true; - this.initializeAll(0); - ret = method.call(scope, a, b, c, d, e, f); - errorThrown = false; - } finally { - try { - if (errorThrown) { - // If `method` throws, prefer to show that stack trace over any thrown - // by invoking `closeAll`. - try { - this.closeAll(0); - } catch (err) { - } - } else { - // Since `method` didn't throw, we don't want to silence the exception - // here. - this.closeAll(0); - } - } finally { - this._isInTransaction = false; - } - } - return ret; - }, - - initializeAll: function(startIndex) { - var transactionWrappers = this.transactionWrappers; - for (var i = startIndex; i < transactionWrappers.length; i++) { - var wrapper = transactionWrappers[i]; - try { - // Catching errors makes debugging more difficult, so we start with the - // OBSERVED_ERROR state before overwriting it with the real return value - // of initialize -- if it's still set to OBSERVED_ERROR in the finally - // block, it means wrapper.initialize threw. - this.wrapperInitData[i] = Transaction.OBSERVED_ERROR; - this.wrapperInitData[i] = wrapper.initialize ? - wrapper.initialize.call(this) : - null; - } finally { - if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) { - // The initializer for wrapper i threw an error; initialize the - // remaining wrappers but silence any exceptions from them to ensure - // that the first error is the one to bubble up. - try { - this.initializeAll(i + 1); - } catch (err) { - } - } - } - } - }, - - /** - * Invokes each of `this.transactionWrappers.close[i]` functions, passing into - * them the respective return values of `this.transactionWrappers.init[i]` - * (`close`rs that correspond to initializers that failed will not be - * invoked). - */ - closeAll: function(startIndex) { - ("production" !== (undefined) ? invariant( - this.isInTransaction(), - 'Transaction.closeAll(): Cannot close transaction when none are open.' - ) : invariant(this.isInTransaction())); - var transactionWrappers = this.transactionWrappers; - for (var i = startIndex; i < transactionWrappers.length; i++) { - var wrapper = transactionWrappers[i]; - var initData = this.wrapperInitData[i]; - var errorThrown; - try { - // Catching errors makes debugging more difficult, so we start with - // errorThrown set to true before setting it to false after calling - // close -- if it's still set to true in the finally block, it means - // wrapper.close threw. - errorThrown = true; - if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) { - wrapper.close.call(this, initData); - } - errorThrown = false; - } finally { - if (errorThrown) { - // The closer for wrapper i threw an error; close the remaining - // wrappers but silence any exceptions from them to ensure that the - // first error is the one to bubble up. - try { - this.closeAll(i + 1); - } catch (e) { - } - } - } - } - this.wrapperInitData.length = 0; - } - }; - - var Transaction = { - - Mixin: Mixin, - - /** - * Token to look for to determine if an error occured. - */ - OBSERVED_ERROR: {} - - }; - - module.exports = Transaction; - - -/***/ }, -/* 41 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule emptyObject - */ - - "use strict"; - - var emptyObject = {}; - - if ("production" !== (undefined)) { - Object.freeze(emptyObject); - } - - module.exports = emptyObject; - - -/***/ }, -/* 42 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule escapeTextContentForBrowser - */ - - 'use strict'; - - var ESCAPE_LOOKUP = { - '&': '&', - '>': '>', - '<': '<', - '"': '"', - '\'': ''' - }; - - var ESCAPE_REGEX = /[&><"']/g; - - function escaper(match) { - return ESCAPE_LOOKUP[match]; - } - - /** - * Escapes text to prevent scripting attacks. - * - * @param {*} text Text value to escape. - * @return {string} An escaped string. - */ - function escapeTextContentForBrowser(text) { - return ('' + text).replace(ESCAPE_REGEX, escaper); - } - - module.exports = escapeTextContentForBrowser; - - -/***/ }, -/* 43 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - - var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - - var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - exports['default'] = makeAction; - - var _Symbol = __webpack_require__(9); - - var _Symbol2 = _interopRequireDefault(_Symbol); - - var _import = __webpack_require__(6); - - var Sym = _interopRequireWildcard(_import); - - var _import2 = __webpack_require__(20); - - var utils = _interopRequireWildcard(_import2); - - var AltAction = (function () { - function AltAction(alt, name, action, actions, actionDetails) { - _classCallCheck(this, AltAction); - - this[Sym.ACTION_UID] = name; - this[Sym.ACTION_HANDLER] = action.bind(this); - this.actions = actions; - this.actionDetails = actionDetails; - this.alt = alt; - } - - _createClass(AltAction, [{ - key: 'dispatch', - value: function dispatch(data) { - this.alt.dispatch(this[Sym.ACTION_UID], data, this.actionDetails); - } - }]); - - return AltAction; - })(); - - function makeAction(alt, namespace, name, implementation, obj) { - // make sure each Symbol is unique - var actionId = utils.uid(alt[Sym.ACTIONS_REGISTRY], '' + namespace + '.' + name); - alt[Sym.ACTIONS_REGISTRY][actionId] = 1; - var actionSymbol = _Symbol2['default']['for']('alt/' + actionId); - - var data = { - namespace: namespace, - name: name, - id: actionId, - symbol: actionSymbol - }; - - // Wrap the action so we can provide a dispatch method - var newAction = new AltAction(alt, actionSymbol, implementation, obj, data); - - // the action itself - var action = newAction[Sym.ACTION_HANDLER]; - action.defer = function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - setTimeout(function () { - newAction[Sym.ACTION_HANDLER].apply(null, args); - }); - }; - action[Sym.ACTION_KEY] = actionSymbol; - action.data = data; - - // ensure each reference is unique in the namespace - var container = alt.actions[namespace]; - var id = utils.uid(container, name); - container[id] = action; - - return action; - } - - module.exports = exports['default']; - -/***/ }, -/* 44 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - - var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - - var _bind = Function.prototype.bind; - - var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { desc = parent = getter = undefined; _again = false; var object = _x3, - property = _x4, - receiver = _x5; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - - var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }; - - var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - var _Dispatcher = __webpack_require__(49); - - var _import = __webpack_require__(48); - - var StateFunctions = _interopRequireWildcard(_import); - - var _import2 = __webpack_require__(6); - - var Sym = _interopRequireWildcard(_import2); - - var _import3 = __webpack_require__(7); - - var fn = _interopRequireWildcard(_import3); - - var _import4 = __webpack_require__(47); - - var store = _interopRequireWildcard(_import4); - - var _import5 = __webpack_require__(20); - - var utils = _interopRequireWildcard(_import5); - - var _makeAction = __webpack_require__(43); - - var _makeAction2 = _interopRequireDefault(_makeAction); - - var Alt = (function () { - function Alt() { - var config = arguments[0] === undefined ? {} : arguments[0]; - - _classCallCheck(this, Alt); - - this.config = config; - this.serialize = config.serialize || JSON.stringify; - this.deserialize = config.deserialize || JSON.parse; - this.dispatcher = config.dispatcher || new _Dispatcher.Dispatcher(); - this.actions = { global: {} }; - this.stores = {}; - this.storeTransforms = config.storeTransforms || []; - this[Sym.ACTIONS_REGISTRY] = {}; - this[Sym.INIT_SNAPSHOT] = {}; - this[Sym.LAST_SNAPSHOT] = {}; - } - - _createClass(Alt, [{ - key: 'dispatch', - value: function dispatch(action, data, details) { - this.dispatcher.dispatch({ action: action, data: data, details: details }); - } - }, { - key: 'createUnsavedStore', - value: function createUnsavedStore(StoreModel) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var key = StoreModel.displayName || ''; - store.createStoreConfig(this.config, StoreModel); - var Store = store.transformStore(this.storeTransforms, StoreModel); - - return fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - } - }, { - key: 'createStore', - value: function createStore(StoreModel, iden) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } - - var key = iden || StoreModel.displayName || StoreModel.name || ''; - store.createStoreConfig(this.config, StoreModel); - var Store = store.transformStore(this.storeTransforms, StoreModel); - - if (this.stores[key] || !key) { - if (this.stores[key]) { - utils.warn('A store named ' + key + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store'); - } else { - utils.warn('Store name was not specified'); - } - - key = utils.uid(this.stores, key); - } - - var storeInstance = fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - - this.stores[key] = storeInstance; - StateFunctions.saveInitialSnapshot(this, key); - - return storeInstance; - } - }, { - key: 'generateActions', - value: function generateActions() { - for (var _len3 = arguments.length, actionNames = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - actionNames[_key3] = arguments[_key3]; - } - - var actions = { name: 'global' }; - return this.createActions(actionNames.reduce(function (obj, action) { - obj[action] = utils.dispatchIdentity; - return obj; - }, actions)); - } - }, { - key: 'createAction', - value: function createAction(name, implementation, obj) { - return _makeAction2['default'](this, 'global', name, implementation, obj); - } - }, { - key: 'createActions', - value: function createActions(ActionsClass) { - var _this2 = this; - - for (var _len4 = arguments.length, argsForConstructor = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { - argsForConstructor[_key4 - 2] = arguments[_key4]; - } - - var exportObj = arguments[1] === undefined ? {} : arguments[1]; - - var actions = {}; - var key = utils.uid(this[Sym.ACTIONS_REGISTRY], ActionsClass.displayName || ActionsClass.name || 'Unknown'); - - if (fn.isFunction(ActionsClass)) { - (function () { - fn.assign(actions, utils.getInternalMethods(ActionsClass, true)); - - var ActionsGenerator = (function (_ActionsClass) { - function ActionsGenerator() { - for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - _classCallCheck(this, ActionsGenerator); - - _get(Object.getPrototypeOf(ActionsGenerator.prototype), 'constructor', this).apply(this, args); - } - - _inherits(ActionsGenerator, _ActionsClass); - - _createClass(ActionsGenerator, [{ - key: 'generateActions', - value: function generateActions() { - for (var _len6 = arguments.length, actionNames = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { - actionNames[_key6] = arguments[_key6]; - } - - actionNames.forEach(function (actionName) { - actions[actionName] = utils.dispatchIdentity; - }); - } - }]); - - return ActionsGenerator; - })(ActionsClass); - - fn.assign(actions, new (_bind.apply(ActionsGenerator, [null].concat(argsForConstructor)))()); - })(); - } else { - fn.assign(actions, ActionsClass); - } - - this.actions[key] = this.actions[key] || {}; - - fn.eachObject(function (actionName, action) { - if (!fn.isFunction(action)) { - return; - } - - // create the action - exportObj[actionName] = _makeAction2['default'](_this2, key, actionName, action, exportObj); - - // generate a constant - var constant = utils.formatAsConstant(actionName); - exportObj[constant] = exportObj[actionName][Sym.ACTION_KEY]; - }, [actions]); - return exportObj; - } - }, { - key: 'takeSnapshot', - value: function takeSnapshot() { - for (var _len7 = arguments.length, storeNames = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - storeNames[_key7] = arguments[_key7]; - } - - var state = StateFunctions.snapshot(this, storeNames); - fn.assign(this[Sym.LAST_SNAPSHOT], state); - return this.serialize(state); - } - }, { - key: 'rollback', - value: function rollback() { - StateFunctions.setAppState(this, this.serialize(this[Sym.LAST_SNAPSHOT]), function (storeInst) { - storeInst[Sym.LIFECYCLE].emit('rollback'); - storeInst.emitChange(); - }); - } - }, { - key: 'recycle', - value: function recycle() { - for (var _len8 = arguments.length, storeNames = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - storeNames[_key8] = arguments[_key8]; - } - - var initialSnapshot = storeNames.length ? StateFunctions.filterSnapshots(this, this[Sym.INIT_SNAPSHOT], storeNames) : this[Sym.INIT_SNAPSHOT]; - - StateFunctions.setAppState(this, this.serialize(initialSnapshot), function (storeInst) { - storeInst[Sym.LIFECYCLE].emit('init'); - storeInst.emitChange(); - }); - } - }, { - key: 'flush', - value: function flush() { - var state = this.serialize(StateFunctions.snapshot(this)); - this.recycle(); - return state; - } - }, { - key: 'bootstrap', - value: function bootstrap(data) { - StateFunctions.setAppState(this, data, function (storeInst) { - storeInst[Sym.LIFECYCLE].emit('bootstrap'); - storeInst.emitChange(); - }); - } - }, { - key: 'prepare', - value: function prepare(storeInst, payload) { - var data = {}; - if (!storeInst.displayName) { - throw new ReferenceError('Store provided does not have a name'); - } - data[storeInst.displayName] = payload; - return this.serialize(data); - } - }, { - key: 'addActions', - - // Instance type methods for injecting alt into your application as context - - value: function addActions(name, ActionsClass) { - for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { - args[_key9 - 2] = arguments[_key9]; - } - - this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) : this.createActions.apply(this, [ActionsClass].concat(args)); - } - }, { - key: 'addStore', - value: function addStore(name, StoreModel) { - for (var _len10 = arguments.length, args = Array(_len10 > 2 ? _len10 - 2 : 0), _key10 = 2; _key10 < _len10; _key10++) { - args[_key10 - 2] = arguments[_key10]; - } - - this.createStore.apply(this, [StoreModel, name].concat(args)); - } - }, { - key: 'getActions', - value: function getActions(name) { - return this.actions[name]; - } - }, { - key: 'getStore', - value: function getStore(name) { - return this.stores[name]; - } - }]); - - return Alt; - })(); - - exports['default'] = Alt; - module.exports = exports['default']; - -/***/ }, -/* 45 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - - var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - - var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - var _EventEmitter = __webpack_require__(30); - - var _EventEmitter2 = _interopRequireDefault(_EventEmitter); - - var _Symbol = __webpack_require__(9); - - var _Symbol2 = _interopRequireDefault(_Symbol); - - var _import = __webpack_require__(6); - - var Sym = _interopRequireWildcard(_import); - - var _import2 = __webpack_require__(7); - - var fn = _interopRequireWildcard(_import2); - - // event emitter instance - var EE = _Symbol2['default'](); - - var AltStore = (function () { - function AltStore(alt, model, state, StoreModel) { - var _this = this; - - _classCallCheck(this, AltStore); - - this[EE] = new _EventEmitter2['default'](); - this[Sym.LIFECYCLE] = model[Sym.LIFECYCLE]; - this[Sym.STATE_CONTAINER] = state || model; - - this._storeName = model._storeName; - this.boundListeners = model[Sym.ALL_LISTENERS]; - this.StoreModel = StoreModel; - - fn.assign(this, model[Sym.PUBLIC_METHODS]); - - // Register dispatcher - this.dispatchToken = alt.dispatcher.register(function (payload) { - _this[Sym.LIFECYCLE].emit('beforeEach', payload, _this[Sym.STATE_CONTAINER]); - - if (model[Sym.LISTENERS][payload.action]) { - var result = false; - - try { - result = model[Sym.LISTENERS][payload.action](payload.data); - } catch (e) { - if (model[Sym.HANDLING_ERRORS]) { - _this[Sym.LIFECYCLE].emit('error', e, payload, _this[Sym.STATE_CONTAINER]); - } else { - throw e; - } - } - - if (result !== false) { - _this.emitChange(); - } - } - - _this[Sym.LIFECYCLE].emit('afterEach', payload, _this[Sym.STATE_CONTAINER]); - }); - - this[Sym.LIFECYCLE].emit('init'); - } - - _createClass(AltStore, [{ - key: 'getEventEmitter', - value: function getEventEmitter() { - return this[EE]; - } - }, { - key: 'emitChange', - value: function emitChange() { - this[EE].emit('change', this[Sym.STATE_CONTAINER]); - } - }, { - key: 'listen', - value: function listen(cb) { - var _this2 = this; - - this[EE].on('change', cb); - return function () { - return _this2.unlisten(cb); - }; - } - }, { - key: 'unlisten', - value: function unlisten(cb) { - this[Sym.LIFECYCLE].emit('unlisten'); - this[EE].removeListener('change', cb); - } - }, { - key: 'getState', - value: function getState() { - return this.StoreModel.config.getState.call(this, this[Sym.STATE_CONTAINER]); - } - }]); - - return AltStore; - })(); - - exports['default'] = AltStore; - module.exports = exports['default']; - -/***/ }, -/* 46 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - - var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - - var _Symbol = __webpack_require__(9); - - var _Symbol2 = _interopRequireDefault(_Symbol); - - var _import = __webpack_require__(6); - - var Sym = _interopRequireWildcard(_import); - - var _import2 = __webpack_require__(7); - - var fn = _interopRequireWildcard(_import2); - - var StoreMixin = { - waitFor: function waitFor() { - for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { - sources[_key] = arguments[_key]; - } - - if (!sources.length) { - throw new ReferenceError('Dispatch tokens not provided'); - } - - var sourcesArray = sources; - if (sources.length === 1) { - sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; - } - - var tokens = sourcesArray.map(function (source) { - return source.dispatchToken || source; - }); - - this.dispatcher.waitFor(tokens); - }, - - exportPublicMethods: function exportPublicMethods(methods) { - var _this = this; - - fn.eachObject(function (methodName, value) { - if (!fn.isFunction(value)) { - throw new TypeError('exportPublicMethods expects a function'); - } - - _this[Sym.PUBLIC_METHODS][methodName] = value; - }, [methods]); - }, - - emitChange: function emitChange() { - this.getInstance().emitChange(); - }, - - on: function on(lifecycleEvent, handler) { - if (lifecycleEvent === 'error') { - this[Sym.HANDLING_ERRORS] = true; - } - this[Sym.LIFECYCLE].on(lifecycleEvent, handler.bind(this)); - }, - - bindAction: function bindAction(symbol, handler) { - if (!symbol) { - throw new ReferenceError('Invalid action reference passed in'); - } - if (!fn.isFunction(handler)) { - throw new TypeError('bindAction expects a function'); - } - - if (handler.length > 1) { - throw new TypeError('Action handler in store ' + this._storeName + ' for ' + ('' + (symbol[Sym.ACTION_KEY] || symbol).toString() + ' was defined with ') + 'two parameters. Only a single parameter is passed through the ' + 'dispatcher, did you mean to pass in an Object instead?'); - } - - // You can pass in the constant or the function itself - var key = symbol[Sym.ACTION_KEY] ? symbol[Sym.ACTION_KEY] : symbol; - this[Sym.LISTENERS][key] = handler.bind(this); - this[Sym.ALL_LISTENERS].push(_Symbol2['default'].keyFor(key)); - }, - - bindActions: function bindActions(actions) { - var _this2 = this; - - fn.eachObject(function (action, symbol) { - var matchFirstCharacter = /./; - var assumedEventHandler = action.replace(matchFirstCharacter, function (x) { - return 'on' + x[0].toUpperCase(); - }); - var handler = null; - - if (_this2[action] && _this2[assumedEventHandler]) { - // If you have both action and onAction - throw new ReferenceError('You have multiple action handlers bound to an action: ' + ('' + action + ' and ' + assumedEventHandler)); - } else if (_this2[action]) { - // action - handler = _this2[action]; - } else if (_this2[assumedEventHandler]) { - // onAction - handler = _this2[assumedEventHandler]; - } - - if (handler) { - _this2.bindAction(symbol, handler); - } - }, [actions]); - }, - - bindListeners: function bindListeners(obj) { - var _this3 = this; - - fn.eachObject(function (methodName, symbol) { - var listener = _this3[methodName]; - - if (!listener) { - throw new ReferenceError('' + methodName + ' defined but does not exist in ' + _this3._storeName); - } - - if (Array.isArray(symbol)) { - symbol.forEach(function (action) { - _this3.bindAction(action, listener); - }); - } else { - _this3.bindAction(symbol, listener); - } - }, [obj]); - } - }; - - exports['default'] = StoreMixin; - module.exports = exports['default']; - -/***/ }, -/* 47 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - - var _interopRequireDefault = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; - - var _bind = Function.prototype.bind; - - var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; - - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { desc = parent = getter = undefined; _again = false; var object = _x, - property = _x2, - receiver = _x3; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - - var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }; - - exports.createStoreConfig = createStoreConfig; - exports.transformStore = transformStore; - exports.createStoreFromObject = createStoreFromObject; - exports.createStoreFromClass = createStoreFromClass; - - var _EventEmitter = __webpack_require__(30); - - var _EventEmitter2 = _interopRequireDefault(_EventEmitter); - - var _import = __webpack_require__(6); - - var Sym = _interopRequireWildcard(_import); - - var _import2 = __webpack_require__(20); - - var utils = _interopRequireWildcard(_import2); - - var _import3 = __webpack_require__(7); - - var fn = _interopRequireWildcard(_import3); - - var _AltStore = __webpack_require__(45); - - var _AltStore2 = _interopRequireDefault(_AltStore); - - var _StoreMixin = __webpack_require__(46); - - var _StoreMixin2 = _interopRequireDefault(_StoreMixin); - - function doSetState(store, storeInstance, state) { - if (!state) { - return; - } - - var config = storeInstance.StoreModel.config; - - var nextState = fn.isFunction(state) ? state(storeInstance[Sym.STATE_CONTAINER]) : state; - - storeInstance[Sym.STATE_CONTAINER] = config.setState.call(store, storeInstance[Sym.STATE_CONTAINER], nextState); - - if (!store.alt.dispatcher.isDispatching()) { - store.emitChange(); - } - } - - function createPrototype(proto, alt, key, extras) { - proto[Sym.ALL_LISTENERS] = []; - proto[Sym.LIFECYCLE] = new _EventEmitter2['default'](); - proto[Sym.LISTENERS] = {}; - proto[Sym.PUBLIC_METHODS] = {}; - - return fn.assign(proto, _StoreMixin2['default'], { - _storeName: key, - alt: alt, - dispatcher: alt.dispatcher - }, extras); - } - - function createStoreConfig(globalConfig, StoreModel) { - StoreModel.config = fn.assign({ - getState: function getState(state) { - return fn.assign({}, state); - }, - setState: fn.assign - }, globalConfig, StoreModel.config); - } - - function transformStore(transforms, StoreModel) { - return transforms.reduce(function (Store, transform) { - return transform(Store); - }, StoreModel); - } - - function createStoreFromObject(alt, StoreModel, key) { - var storeInstance = undefined; - - var StoreProto = createPrototype({}, alt, key, fn.assign({ - getInstance: function getInstance() { - return storeInstance; - }, - setState: function setState(nextState) { - doSetState(this, storeInstance, nextState); - } - }, StoreModel)); - - // bind the store listeners - /* istanbul ignore else */ - if (StoreProto.bindListeners) { - _StoreMixin2['default'].bindListeners.call(StoreProto, StoreProto.bindListeners); - } - - // bind the lifecycle events - /* istanbul ignore else */ - if (StoreProto.lifecycle) { - fn.eachObject(function (eventName, event) { - _StoreMixin2['default'].on.call(StoreProto, eventName, event); - }, [StoreProto.lifecycle]); - } - - // create the instance and fn.assign the public methods to the instance - storeInstance = fn.assign(new _AltStore2['default'](alt, StoreProto, StoreProto.state, StoreModel), StoreProto.publicMethods, { displayName: key }); - - return storeInstance; - } - - function createStoreFromClass(alt, StoreModel, key) { - for (var _len = arguments.length, argsForClass = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - argsForClass[_key - 3] = arguments[_key]; - } - - var storeInstance = undefined; - var config = StoreModel.config; - - // Creating a class here so we don't overload the provided store's - // prototype with the mixin behaviour and I'm extending from StoreModel - // so we can inherit any extensions from the provided store. - - var Store = (function (_StoreModel) { - function Store() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - _classCallCheck(this, Store); - - _get(Object.getPrototypeOf(Store.prototype), 'constructor', this).apply(this, args); - } - - _inherits(Store, _StoreModel); - - return Store; - })(StoreModel); - - createPrototype(Store.prototype, alt, key, { - getInstance: function getInstance() { - return storeInstance; - }, - setState: function setState(nextState) { - doSetState(this, storeInstance, nextState); - } - }); - - var store = new (_bind.apply(Store, [null].concat(argsForClass)))(); - - if (config.bindListeners) { - store.bindListeners(config.bindListeners); - } - - storeInstance = fn.assign(new _AltStore2['default'](alt, store, store[alt.config.stateKey] || store[config.stateKey] || null, StoreModel), utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }); - - return storeInstance; - } - -/***/ }, -/* 48 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }; - - exports.setAppState = setAppState; - exports.snapshot = snapshot; - exports.saveInitialSnapshot = saveInitialSnapshot; - exports.filterSnapshots = filterSnapshots; - - var _import = __webpack_require__(6); - - var Sym = _interopRequireWildcard(_import); - - var _import2 = __webpack_require__(7); - - var fn = _interopRequireWildcard(_import2); - - function setAppState(instance, data, onStore) { - var obj = instance.deserialize(data); - fn.eachObject(function (key, value) { - var store = instance.stores[key]; - if (store) { - var config = store.StoreModel.config; - - if (config.onDeserialize) { - obj[key] = config.onDeserialize(value) || value; - } - fn.assign(store[Sym.STATE_CONTAINER], obj[key]); - onStore(store); - } - }, [obj]); - } - - function snapshot(instance) { - var storeNames = arguments[1] === undefined ? [] : arguments[1]; - - var stores = storeNames.length ? storeNames : Object.keys(instance.stores); - return stores.reduce(function (obj, storeHandle) { - var storeName = storeHandle.displayName || storeHandle; - var store = instance.stores[storeName]; - var config = store.StoreModel.config; - - store[Sym.LIFECYCLE].emit('snapshot'); - var customSnapshot = config.onSerialize && config.onSerialize(store[Sym.STATE_CONTAINER]); - obj[storeName] = customSnapshot ? customSnapshot : store.getState(); - return obj; - }, {}); - } - - function saveInitialSnapshot(instance, key) { - var state = instance.deserialize(instance.serialize(instance.stores[key][Sym.STATE_CONTAINER])); - instance[Sym.INIT_SNAPSHOT][key] = state; - instance[Sym.LAST_SNAPSHOT][key] = state; - } - - function filterSnapshots(instance, state, stores) { - return stores.reduce(function (obj, store) { - var storeName = store.displayName || store; - if (!state[storeName]) { - throw new ReferenceError('' + storeName + ' is not a valid store'); - } - obj[storeName] = state[storeName]; - return obj; - }, {}); - } - -/***/ }, -/* 49 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright (c) 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - - module.exports.Dispatcher = __webpack_require__(50) - - -/***/ }, -/* 50 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule Dispatcher - * @typechecks - */ - - "use strict"; - - var invariant = __webpack_require__(51); - - var _lastID = 1; - var _prefix = 'ID_'; - - /** - * Dispatcher is used to broadcast payloads to registered callbacks. This is - * different from generic pub-sub systems in two ways: - * - * 1) Callbacks are not subscribed to particular events. Every payload is - * dispatched to every registered callback. - * 2) Callbacks can be deferred in whole or part until other callbacks have - * been executed. - * - * For example, consider this hypothetical flight destination form, which - * selects a default city when a country is selected: - * - * var flightDispatcher = new Dispatcher(); - * - * // Keeps track of which country is selected - * var CountryStore = {country: null}; - * - * // Keeps track of which city is selected - * var CityStore = {city: null}; - * - * // Keeps track of the base flight price of the selected city - * var FlightPriceStore = {price: null} - * - * When a user changes the selected city, we dispatch the payload: - * - * flightDispatcher.dispatch({ - * actionType: 'city-update', - * selectedCity: 'paris' - * }); - * - * This payload is digested by `CityStore`: - * - * flightDispatcher.register(function(payload) { - * if (payload.actionType === 'city-update') { - * CityStore.city = payload.selectedCity; - * } - * }); - * - * When the user selects a country, we dispatch the payload: - * - * flightDispatcher.dispatch({ - * actionType: 'country-update', - * selectedCountry: 'australia' - * }); - * - * This payload is digested by both stores: - * - * CountryStore.dispatchToken = flightDispatcher.register(function(payload) { - * if (payload.actionType === 'country-update') { - * CountryStore.country = payload.selectedCountry; - * } - * }); - * - * When the callback to update `CountryStore` is registered, we save a reference - * to the returned token. Using this token with `waitFor()`, we can guarantee - * that `CountryStore` is updated before the callback that updates `CityStore` - * needs to query its data. - * - * CityStore.dispatchToken = flightDispatcher.register(function(payload) { - * if (payload.actionType === 'country-update') { - * // `CountryStore.country` may not be updated. - * flightDispatcher.waitFor([CountryStore.dispatchToken]); - * // `CountryStore.country` is now guaranteed to be updated. - * - * // Select the default city for the new country - * CityStore.city = getDefaultCityForCountry(CountryStore.country); - * } - * }); - * - * The usage of `waitFor()` can be chained, for example: - * - * FlightPriceStore.dispatchToken = - * flightDispatcher.register(function(payload) { - * switch (payload.actionType) { - * case 'country-update': - * flightDispatcher.waitFor([CityStore.dispatchToken]); - * FlightPriceStore.price = - * getFlightPriceStore(CountryStore.country, CityStore.city); - * break; - * - * case 'city-update': - * FlightPriceStore.price = - * FlightPriceStore(CountryStore.country, CityStore.city); - * break; - * } - * }); - * - * The `country-update` payload will be guaranteed to invoke the stores' - * registered callbacks in order: `CountryStore`, `CityStore`, then - * `FlightPriceStore`. - */ - - function Dispatcher() { - this.$Dispatcher_callbacks = {}; - this.$Dispatcher_isPending = {}; - this.$Dispatcher_isHandled = {}; - this.$Dispatcher_isDispatching = false; - this.$Dispatcher_pendingPayload = null; - } - - /** - * Registers a callback to be invoked with every dispatched payload. Returns - * a token that can be used with `waitFor()`. - * - * @param {function} callback - * @return {string} - */ - Dispatcher.prototype.register=function(callback) { - var id = _prefix + _lastID++; - this.$Dispatcher_callbacks[id] = callback; - return id; - }; - - /** - * Removes a callback based on its token. - * - * @param {string} id - */ - Dispatcher.prototype.unregister=function(id) { - invariant( - this.$Dispatcher_callbacks[id], - 'Dispatcher.unregister(...): `%s` does not map to a registered callback.', - id - ); - delete this.$Dispatcher_callbacks[id]; - }; - - /** - * Waits for the callbacks specified to be invoked before continuing execution - * of the current callback. This method should only be used by a callback in - * response to a dispatched payload. - * - * @param {array} ids - */ - Dispatcher.prototype.waitFor=function(ids) { - invariant( - this.$Dispatcher_isDispatching, - 'Dispatcher.waitFor(...): Must be invoked while dispatching.' - ); - for (var ii = 0; ii < ids.length; ii++) { - var id = ids[ii]; - if (this.$Dispatcher_isPending[id]) { - invariant( - this.$Dispatcher_isHandled[id], - 'Dispatcher.waitFor(...): Circular dependency detected while ' + - 'waiting for `%s`.', - id - ); - continue; - } - invariant( - this.$Dispatcher_callbacks[id], - 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.', - id - ); - this.$Dispatcher_invokeCallback(id); - } - }; - - /** - * Dispatches a payload to all registered callbacks. - * - * @param {object} payload - */ - Dispatcher.prototype.dispatch=function(payload) { - invariant( - !this.$Dispatcher_isDispatching, - 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.' - ); - this.$Dispatcher_startDispatching(payload); - try { - for (var id in this.$Dispatcher_callbacks) { - if (this.$Dispatcher_isPending[id]) { - continue; - } - this.$Dispatcher_invokeCallback(id); - } - } finally { - this.$Dispatcher_stopDispatching(); - } - }; - - /** - * Is this Dispatcher currently dispatching. - * - * @return {boolean} - */ - Dispatcher.prototype.isDispatching=function() { - return this.$Dispatcher_isDispatching; - }; - - /** - * Call the callback stored with the given id. Also do some internal - * bookkeeping. - * - * @param {string} id - * @internal - */ - Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) { - this.$Dispatcher_isPending[id] = true; - this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload); - this.$Dispatcher_isHandled[id] = true; - }; - - /** - * Set up bookkeeping needed when dispatching. - * - * @param {object} payload - * @internal - */ - Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) { - for (var id in this.$Dispatcher_callbacks) { - this.$Dispatcher_isPending[id] = false; - this.$Dispatcher_isHandled[id] = false; - } - this.$Dispatcher_pendingPayload = payload; - this.$Dispatcher_isDispatching = true; - }; - - /** - * Clear bookkeeping used for dispatching. - * - * @internal - */ - Dispatcher.prototype.$Dispatcher_stopDispatching=function() { - this.$Dispatcher_pendingPayload = null; - this.$Dispatcher_isDispatching = false; - }; - - - module.exports = Dispatcher; - - -/***/ }, -/* 51 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule invariant - */ - - "use strict"; - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - var invariant = function(condition, format, a, b, c, d, e, f) { - if (false) { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error( - 'Minified exception occurred; use the non-minified dev environment ' + - 'for the full error message and additional helpful warnings.' - ); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error( - 'Invariant Violation: ' + - format.replace(/%s/g, function() { return args[argIndex++]; }) - ); - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } - }; - - module.exports = invariant; - - -/***/ }, -/* 52 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule CallbackQueue - */ - - 'use strict'; - - var PooledClass = __webpack_require__(15); - - var assign = __webpack_require__(2); - var invariant = __webpack_require__(1); - - /** - * A specialized pseudo-event module to help keep track of components waiting to - * be notified when their DOM representations are available for use. - * - * This implements `PooledClass`, so you should never need to instantiate this. - * Instead, use `CallbackQueue.getPooled()`. - * - * @class ReactMountReady - * @implements PooledClass - * @internal - */ - function CallbackQueue() { - this._callbacks = null; - this._contexts = null; - } - - assign(CallbackQueue.prototype, { - - /** - * Enqueues a callback to be invoked when `notifyAll` is invoked. - * - * @param {function} callback Invoked when `notifyAll` is invoked. - * @param {?object} context Context to call `callback` with. - * @internal - */ - enqueue: function(callback, context) { - this._callbacks = this._callbacks || []; - this._contexts = this._contexts || []; - this._callbacks.push(callback); - this._contexts.push(context); - }, - - /** - * Invokes all enqueued callbacks and clears the queue. This is invoked after - * the DOM representation of a component has been created or updated. - * - * @internal - */ - notifyAll: function() { - var callbacks = this._callbacks; - var contexts = this._contexts; - if (callbacks) { - ("production" !== (undefined) ? invariant( - callbacks.length === contexts.length, - 'Mismatched list of contexts in callback queue' - ) : invariant(callbacks.length === contexts.length)); - this._callbacks = null; - this._contexts = null; - for (var i = 0, l = callbacks.length; i < l; i++) { - callbacks[i].call(contexts[i]); - } - callbacks.length = 0; - contexts.length = 0; - } - }, - - /** - * Resets the internal queue. - * - * @internal - */ - reset: function() { - this._callbacks = null; - this._contexts = null; - }, - - /** - * `PooledClass` looks for this. - */ - destructor: function() { - this.reset(); - } - - }); - - PooledClass.addPoolingTo(CallbackQueue); - - module.exports = CallbackQueue; - - -/***/ }, -/* 53 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule EventPluginUtils - */ - - 'use strict'; - - var EventConstants = __webpack_require__(8); - - var invariant = __webpack_require__(1); - - /** - * Injected dependencies: - */ - - /** - * - `Mount`: [required] Module that can convert between React dom IDs and - * actual node references. - */ - var injection = { - Mount: null, - injectMount: function(InjectedMount) { - injection.Mount = InjectedMount; - if ("production" !== (undefined)) { - ("production" !== (undefined) ? invariant( - InjectedMount && InjectedMount.getNode, - 'EventPluginUtils.injection.injectMount(...): Injected Mount module ' + - 'is missing getNode.' - ) : invariant(InjectedMount && InjectedMount.getNode)); - } - } - }; - - var topLevelTypes = EventConstants.topLevelTypes; - - function isEndish(topLevelType) { - return topLevelType === topLevelTypes.topMouseUp || - topLevelType === topLevelTypes.topTouchEnd || - topLevelType === topLevelTypes.topTouchCancel; - } - - function isMoveish(topLevelType) { - return topLevelType === topLevelTypes.topMouseMove || - topLevelType === topLevelTypes.topTouchMove; - } - function isStartish(topLevelType) { - return topLevelType === topLevelTypes.topMouseDown || - topLevelType === topLevelTypes.topTouchStart; - } - - - var validateEventDispatches; - if ("production" !== (undefined)) { - validateEventDispatches = function(event) { - var dispatchListeners = event._dispatchListeners; - var dispatchIDs = event._dispatchIDs; - - var listenersIsArr = Array.isArray(dispatchListeners); - var idsIsArr = Array.isArray(dispatchIDs); - var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0; - var listenersLen = listenersIsArr ? - dispatchListeners.length : - dispatchListeners ? 1 : 0; - - ("production" !== (undefined) ? invariant( - idsIsArr === listenersIsArr && IDsLen === listenersLen, - 'EventPluginUtils: Invalid `event`.' - ) : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen)); - }; - } - - /** - * Invokes `cb(event, listener, id)`. Avoids using call if no scope is - * provided. The `(listener,id)` pair effectively forms the "dispatch" but are - * kept separate to conserve memory. - */ - function forEachEventDispatch(event, cb) { - var dispatchListeners = event._dispatchListeners; - var dispatchIDs = event._dispatchIDs; - if ("production" !== (undefined)) { - validateEventDispatches(event); - } - if (Array.isArray(dispatchListeners)) { - for (var i = 0; i < dispatchListeners.length; i++) { - if (event.isPropagationStopped()) { - break; - } - // Listeners and IDs are two parallel arrays that are always in sync. - cb(event, dispatchListeners[i], dispatchIDs[i]); - } - } else if (dispatchListeners) { - cb(event, dispatchListeners, dispatchIDs); - } - } - - /** - * Default implementation of PluginModule.executeDispatch(). - * @param {SyntheticEvent} SyntheticEvent to handle - * @param {function} Application-level callback - * @param {string} domID DOM id to pass to the callback. - */ - function executeDispatch(event, listener, domID) { - event.currentTarget = injection.Mount.getNode(domID); - var returnValue = listener(event, domID); - event.currentTarget = null; - return returnValue; - } - - /** - * Standard/simple iteration through an event's collected dispatches. - */ - function executeDispatchesInOrder(event, cb) { - forEachEventDispatch(event, cb); - event._dispatchListeners = null; - event._dispatchIDs = null; - } - - /** - * Standard/simple iteration through an event's collected dispatches, but stops - * at the first dispatch execution returning true, and returns that id. - * - * @return id of the first dispatch execution who's listener returns true, or - * null if no listener returned true. - */ - function executeDispatchesInOrderStopAtTrueImpl(event) { - var dispatchListeners = event._dispatchListeners; - var dispatchIDs = event._dispatchIDs; - if ("production" !== (undefined)) { - validateEventDispatches(event); - } - if (Array.isArray(dispatchListeners)) { - for (var i = 0; i < dispatchListeners.length; i++) { - if (event.isPropagationStopped()) { - break; - } - // Listeners and IDs are two parallel arrays that are always in sync. - if (dispatchListeners[i](event, dispatchIDs[i])) { - return dispatchIDs[i]; - } - } - } else if (dispatchListeners) { - if (dispatchListeners(event, dispatchIDs)) { - return dispatchIDs; - } - } - return null; - } - - /** - * @see executeDispatchesInOrderStopAtTrueImpl - */ - function executeDispatchesInOrderStopAtTrue(event) { - var ret = executeDispatchesInOrderStopAtTrueImpl(event); - event._dispatchIDs = null; - event._dispatchListeners = null; - return ret; - } - - /** - * Execution of a "direct" dispatch - there must be at most one dispatch - * accumulated on the event or it is considered an error. It doesn't really make - * sense for an event with multiple dispatches (bubbled) to keep track of the - * return values at each dispatch execution, but it does tend to make sense when - * dealing with "direct" dispatches. - * - * @return The return value of executing the single dispatch. - */ - function executeDirectDispatch(event) { - if ("production" !== (undefined)) { - validateEventDispatches(event); - } - var dispatchListener = event._dispatchListeners; - var dispatchID = event._dispatchIDs; - ("production" !== (undefined) ? invariant( - !Array.isArray(dispatchListener), - 'executeDirectDispatch(...): Invalid `event`.' - ) : invariant(!Array.isArray(dispatchListener))); - var res = dispatchListener ? - dispatchListener(event, dispatchID) : - null; - event._dispatchListeners = null; - event._dispatchIDs = null; - return res; - } - - /** - * @param {SyntheticEvent} event - * @return {bool} True iff number of dispatches accumulated is greater than 0. - */ - function hasDispatches(event) { - return !!event._dispatchListeners; - } - - /** - * General utilities that are useful in creating custom Event Plugins. - */ - var EventPluginUtils = { - isEndish: isEndish, - isMoveish: isMoveish, - isStartish: isStartish, - - executeDirectDispatch: executeDirectDispatch, - executeDispatch: executeDispatch, - executeDispatchesInOrder: executeDispatchesInOrder, - executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue, - hasDispatches: hasDispatches, - injection: injection, - useTouchEvents: false - }; - - module.exports = EventPluginUtils; - - -/***/ }, -/* 54 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule LinkedValueUtils - * @typechecks static-only - */ - - 'use strict'; - - var ReactPropTypes = __webpack_require__(86); - - var invariant = __webpack_require__(1); - - var hasReadOnlyValue = { - 'button': true, - 'checkbox': true, - 'image': true, - 'hidden': true, - 'radio': true, - 'reset': true, - 'submit': true - }; - - function _assertSingleLink(input) { - ("production" !== (undefined) ? invariant( - input.props.checkedLink == null || input.props.valueLink == null, - 'Cannot provide a checkedLink and a valueLink. If you want to use ' + - 'checkedLink, you probably don\'t want to use valueLink and vice versa.' - ) : invariant(input.props.checkedLink == null || input.props.valueLink == null)); - } - function _assertValueLink(input) { - _assertSingleLink(input); - ("production" !== (undefined) ? invariant( - input.props.value == null && input.props.onChange == null, - 'Cannot provide a valueLink and a value or onChange event. If you want ' + - 'to use value or onChange, you probably don\'t want to use valueLink.' - ) : invariant(input.props.value == null && input.props.onChange == null)); - } - - function _assertCheckedLink(input) { - _assertSingleLink(input); - ("production" !== (undefined) ? invariant( - input.props.checked == null && input.props.onChange == null, - 'Cannot provide a checkedLink and a checked property or onChange event. ' + - 'If you want to use checked or onChange, you probably don\'t want to ' + - 'use checkedLink' - ) : invariant(input.props.checked == null && input.props.onChange == null)); - } - - /** - * @param {SyntheticEvent} e change event to handle - */ - function _handleLinkedValueChange(e) { - /*jshint validthis:true */ - this.props.valueLink.requestChange(e.target.value); - } - - /** - * @param {SyntheticEvent} e change event to handle - */ - function _handleLinkedCheckChange(e) { - /*jshint validthis:true */ - this.props.checkedLink.requestChange(e.target.checked); - } - - /** - * Provide a linked `value` attribute for controlled forms. You should not use - * this outside of the ReactDOM controlled form components. - */ - var LinkedValueUtils = { - Mixin: { - propTypes: { - value: function(props, propName, componentName) { - if (!props[propName] || - hasReadOnlyValue[props.type] || - props.onChange || - props.readOnly || - props.disabled) { - return null; - } - return new Error( - 'You provided a `value` prop to a form field without an ' + - '`onChange` handler. This will render a read-only field. If ' + - 'the field should be mutable use `defaultValue`. Otherwise, ' + - 'set either `onChange` or `readOnly`.' - ); - }, - checked: function(props, propName, componentName) { - if (!props[propName] || - props.onChange || - props.readOnly || - props.disabled) { - return null; - } - return new Error( - 'You provided a `checked` prop to a form field without an ' + - '`onChange` handler. This will render a read-only field. If ' + - 'the field should be mutable use `defaultChecked`. Otherwise, ' + - 'set either `onChange` or `readOnly`.' - ); - }, - onChange: ReactPropTypes.func - } - }, - - /** - * @param {ReactComponent} input Form component - * @return {*} current value of the input either from value prop or link. - */ - getValue: function(input) { - if (input.props.valueLink) { - _assertValueLink(input); - return input.props.valueLink.value; - } - return input.props.value; - }, - - /** - * @param {ReactComponent} input Form component - * @return {*} current checked status of the input either from checked prop - * or link. - */ - getChecked: function(input) { - if (input.props.checkedLink) { - _assertCheckedLink(input); - return input.props.checkedLink.value; - } - return input.props.checked; - }, - - /** - * @param {ReactComponent} input Form component - * @return {function} change callback either from onChange prop or link. - */ - getOnChange: function(input) { - if (input.props.valueLink) { - _assertValueLink(input); - return _handleLinkedValueChange; - } else if (input.props.checkedLink) { - _assertCheckedLink(input); - return _handleLinkedCheckChange; - } - return input.props.onChange; - } - }; - - module.exports = LinkedValueUtils; - - -/***/ }, -/* 55 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule LocalEventTrapMixin - */ - - 'use strict'; - - var ReactBrowserEventEmitter = __webpack_require__(22); - - var accumulateInto = __webpack_require__(63); - var forEachAccumulated = __webpack_require__(64); - var invariant = __webpack_require__(1); - - function remove(event) { - event.remove(); - } - - var LocalEventTrapMixin = { - trapBubbledEvent:function(topLevelType, handlerBaseName) { - ("production" !== (undefined) ? invariant(this.isMounted(), 'Must be mounted to trap events') : invariant(this.isMounted())); - // If a component renders to null or if another component fatals and causes - // the state of the tree to be corrupted, `node` here can be null. - var node = this.getDOMNode(); - ("production" !== (undefined) ? invariant( - node, - 'LocalEventTrapMixin.trapBubbledEvent(...): Requires node to be rendered.' - ) : invariant(node)); - var listener = ReactBrowserEventEmitter.trapBubbledEvent( - topLevelType, - handlerBaseName, - node - ); - this._localEventListeners = - accumulateInto(this._localEventListeners, listener); - }, - - // trapCapturedEvent would look nearly identical. We don't implement that - // method because it isn't currently needed. - - componentWillUnmount:function() { - if (this._localEventListeners) { - forEachAccumulated(this._localEventListeners, remove); - } - } - }; - - module.exports = LocalEventTrapMixin; - - -/***/ }, -/* 56 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactComponentBrowserEnvironment - */ - - /*jslint evil: true */ - - 'use strict'; - - var ReactDOMIDOperations = __webpack_require__(80); - var ReactMount = __webpack_require__(12); - - /** - * Abstracts away all functionality of the reconciler that requires knowledge of - * the browser context. TODO: These callers should be refactored to avoid the - * need for this injection. - */ - var ReactComponentBrowserEnvironment = { - - processChildrenUpdates: - ReactDOMIDOperations.dangerouslyProcessChildrenUpdates, - - replaceNodeWithMarkupByID: - ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID, - - /** - * If a particular environment requires that some resources be cleaned up, - * specify this in the injected Mixin. In the DOM, we would likely want to - * purge any cached node ID lookups. - * - * @private - */ - unmountIDFromEnvironment: function(rootNodeID) { - ReactMount.purgeID(rootNodeID); - } - - }; - - module.exports = ReactComponentBrowserEnvironment; - - -/***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactComponentEnvironment - */ - - 'use strict'; - - var invariant = __webpack_require__(1); - - var injected = false; - - var ReactComponentEnvironment = { - - /** - * Optionally injectable environment dependent cleanup hook. (server vs. - * browser etc). Example: A browser system caches DOM nodes based on component - * ID and must remove that cache entry when this instance is unmounted. - */ - unmountIDFromEnvironment: null, - - /** - * Optionally injectable hook for swapping out mount images in the middle of - * the tree. - */ - replaceNodeWithMarkupByID: null, - - /** - * Optionally injectable hook for processing a queue of child updates. Will - * later move into MultiChildComponents. - */ - processChildrenUpdates: null, - - injection: { - injectEnvironment: function(environment) { - ("production" !== (undefined) ? invariant( - !injected, - 'ReactCompositeComponent: injectEnvironment() can only be called once.' - ) : invariant(!injected)); - ReactComponentEnvironment.unmountIDFromEnvironment = - environment.unmountIDFromEnvironment; - ReactComponentEnvironment.replaceNodeWithMarkupByID = - environment.replaceNodeWithMarkupByID; - ReactComponentEnvironment.processChildrenUpdates = - environment.processChildrenUpdates; - injected = true; - } - } - - }; - - module.exports = ReactComponentEnvironment; - - -/***/ }, -/* 58 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactContext - */ - - 'use strict'; - - var assign = __webpack_require__(2); - var emptyObject = __webpack_require__(41); - var warning = __webpack_require__(4); - - var didWarn = false; - - /** - * Keeps track of the current context. - * - * The context is automatically passed down the component ownership hierarchy - * and is accessible via `this.context` on ReactCompositeComponents. - */ - var ReactContext = { - - /** - * @internal - * @type {object} - */ - current: emptyObject, - - /** - * Temporarily extends the current context while executing scopedCallback. - * - * A typical use case might look like - * - * render: function() { - * var children = ReactContext.withContext({foo: 'foo'}, () => ( - * - * )); - * return
{children}
; - * } - * - * @param {object} newContext New context to merge into the existing context - * @param {function} scopedCallback Callback to run with the new context - * @return {ReactComponent|array} - */ - withContext: function(newContext, scopedCallback) { - if ("production" !== (undefined)) { - ("production" !== (undefined) ? warning( - didWarn, - 'withContext is deprecated and will be removed in a future version. ' + - 'Use a wrapper component with getChildContext instead.' - ) : null); - - didWarn = true; - } - - var result; - var previousContext = ReactContext.current; - ReactContext.current = assign({}, previousContext, newContext); - try { - result = scopedCallback(); - } finally { - ReactContext.current = previousContext; - } - return result; - } - - }; - - module.exports = ReactContext; - - -/***/ }, -/* 59 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule ReactDOMComponent - * @typechecks static-only - */ - - /* global hasOwnProperty:true */ - - 'use strict'; - - var CSSPropertyOperations = __webpack_require__(75); - var DOMProperty = __webpack_require__(21); - var DOMPropertyOperations = __webpack_require__(31); - var ReactBrowserEventEmitter = __webpack_require__(22); - var ReactComponentBrowserEnvironment = - __webpack_require__(56); - var ReactMount = __webpack_require__(12); - var ReactMultiChild = __webpack_require__(153); - var ReactPerf = __webpack_require__(18); - - var assign = __webpack_require__(2); - var escapeTextContentForBrowser = __webpack_require__(42); - var invariant = __webpack_require__(1); - var isEventSupported = __webpack_require__(69); - var keyOf = __webpack_require__(14); - var warning = __webpack_require__(4); - - var deleteListener = ReactBrowserEventEmitter.deleteListener; - var listenTo = ReactBrowserEventEmitter.listenTo; - var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules; - - // For quickly matching children type, to test if can be treated as content. - var CONTENT_TYPES = {'string': true, 'number': true}; - - var STYLE = keyOf({style: null}); - - var ELEMENT_NODE_TYPE = 1; - - /** - * Optionally injectable operations for mutating the DOM - */ - var BackendIDOperations = null; - - /** - * @param {?object} props - */ - function assertValidProps(props) { - if (!props) { - return; - } - // Note the use of `==` which checks for null or undefined. - if (props.dangerouslySetInnerHTML != null) { - ("production" !== (undefined) ? invariant( - props.children == null, - 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.' - ) : invariant(props.children == null)); - ("production" !== (undefined) ? invariant( - props.dangerouslySetInnerHTML.__html != null, - '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + - 'Please visit http://fb.me/react-invariant-dangerously-set-inner-html ' + - 'for more information.' - ) : invariant(props.dangerouslySetInnerHTML.__html != null)); - } - if ("production" !== (undefined)) { - ("production" !== (undefined) ? warning( - props.innerHTML == null, - 'Directly setting property `innerHTML` is not permitted. ' + - 'For more information, lookup documentation on `dangerouslySetInnerHTML`.' - ) : null); - ("production" !== (undefined) ? warning( - !props.contentEditable || props.children == null, - 'A component is `contentEditable` and contains `children` managed by ' + - 'React. It is now your responsibility to guarantee that none of ' + - 'those nodes are unexpectedly modified or duplicated. This is ' + - 'probably not intentional.' - ) : null); - } - ("production" !== (undefined) ? invariant( - props.style == null || typeof props.style === 'object', - 'The `style` prop expects a mapping from style properties to values, ' + - 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + - 'using JSX.' - ) : invariant(props.style == null || typeof props.style === 'object')); - } - - function putListener(id, registrationName, listener, transaction) { - if ("production" !== (undefined)) { - // IE8 has no API for event capturing and the `onScroll` event doesn't - // bubble. - ("production" !== (undefined) ? warning( - registrationName !== 'onScroll' || isEventSupported('scroll', true), - 'This browser doesn\'t support the `onScroll` event' - ) : null); - } - var container = ReactMount.findReactContainerForID(id); - if (container) { - var doc = container.nodeType === ELEMENT_NODE_TYPE ? - container.ownerDocument : - container; - listenTo(registrationName, doc); - } - transaction.getPutListenerQueue().enqueuePutListener( - id, - registrationName, - listener - ); - } - - // For HTML, certain tags should omit their close tag. We keep a whitelist for - // those special cased tags. - - var omittedCloseTags = { - 'area': true, - 'base': true, - 'br': true, - 'col': true, - 'embed': true, - 'hr': true, - 'img': true, - 'input': true, - 'keygen': true, - 'link': true, - 'meta': true, - 'param': true, - 'source': true, - 'track': true, - 'wbr': true - // NOTE: menuitem's close tag should be omitted, but that causes problems. - }; - - // We accept any tag to be rendered but since this gets injected into abitrary - // HTML, we want to make sure that it's a safe tag. - // http://www.w3.org/TR/REC-xml/#NT-Name - - var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset - var validatedTagCache = {}; - var hasOwnProperty = {}.hasOwnProperty; - - function validateDangerousTag(tag) { - if (!hasOwnProperty.call(validatedTagCache, tag)) { - ("production" !== (undefined) ? invariant(VALID_TAG_REGEX.test(tag), 'Invalid tag: %s', tag) : invariant(VALID_TAG_REGEX.test(tag))); - validatedTagCache[tag] = true; - } - } - - /** - * Creates a new React class that is idempotent and capable of containing other - * React components. It accepts event listeners and DOM properties that are - * valid according to `DOMProperty`. - * - * - Event listeners: `onClick`, `onMouseDown`, etc. - * - DOM properties: `className`, `name`, `title`, etc. - * - * The `style` property functions differently from the DOM API. It accepts an - * object mapping of style properties to values. - * - * @constructor ReactDOMComponent - * @extends ReactMultiChild - */ - function ReactDOMComponent(tag) { - validateDangerousTag(tag); - this._tag = tag; - this._renderedChildren = null; - this._previousStyleCopy = null; - this._rootNodeID = null; - } - - ReactDOMComponent.displayName = 'ReactDOMComponent'; - - ReactDOMComponent.Mixin = { - - construct: function(element) { - this._currentElement = element; - }, - - /** - * Generates root tag markup then recurses. This method has side effects and - * is not idempotent. - * - * @internal - * @param {string} rootID The root DOM ID for this node. - * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction - * @return {string} The computed markup. - */ - mountComponent: function(rootID, transaction, context) { - this._rootNodeID = rootID; - assertValidProps(this._currentElement.props); - var closeTag = omittedCloseTags[this._tag] ? '' : ''; - return ( - this._createOpenTagMarkupAndPutListeners(transaction) + - this._createContentMarkup(transaction, context) + - closeTag - ); - }, - - /** - * Creates markup for the open tag and all attributes. - * - * This method has side effects because events get registered. - * - * Iterating over object properties is faster than iterating over arrays. - * @see http://jsperf.com/obj-vs-arr-iteration - * - * @private - * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction - * @return {string} Markup of opening tag. - */ - _createOpenTagMarkupAndPutListeners: function(transaction) { - var props = this._currentElement.props; - var ret = '<' + this._tag; - - for (var propKey in props) { - if (!props.hasOwnProperty(propKey)) { - continue; - } - var propValue = props[propKey]; - if (propValue == null) { - continue; - } - if (registrationNameModules.hasOwnProperty(propKey)) { - putListener(this._rootNodeID, propKey, propValue, transaction); - } else { - if (propKey === STYLE) { - if (propValue) { - propValue = this._previousStyleCopy = assign({}, props.style); - } - propValue = CSSPropertyOperations.createMarkupForStyles(propValue); - } - var markup = - DOMPropertyOperations.createMarkupForProperty(propKey, propValue); - if (markup) { - ret += ' ' + markup; - } - } - } - - // For static pages, no need to put React ID and checksum. Saves lots of - // bytes. - if (transaction.renderToStaticMarkup) { - return ret + '>'; - } - - var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID); - return ret + ' ' + markupForID + '>'; - }, - - /** - * Creates markup for the content between the tags. - * - * @private - * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction - * @param {object} context - * @return {string} Content markup. - */ - _createContentMarkup: function(transaction, context) { - var prefix = ''; - if (this._tag === 'listing' || - this._tag === 'pre' || - this._tag === 'textarea') { - // Add an initial newline because browsers ignore the first newline in - // a ,
, or