UNPKG

webappengine

Version:

A web application platform that can host multiple web apps running with Node.js.

1,578 lines (1,270 loc) 102 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react")); else if(typeof define === 'function' && define.amd) define(["react"], factory); else if(typeof exports === 'object') exports["ReactRouter"] = factory(require("react")); else root["ReactRouter"] = factory(root["React"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_21__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.DefaultRoute = __webpack_require__(1); exports.Link = __webpack_require__(2); exports.NotFoundRoute = __webpack_require__(3); exports.Redirect = __webpack_require__(4); exports.Route = __webpack_require__(5); exports.ActiveHandler = __webpack_require__(6); exports.RouteHandler = exports.ActiveHandler; exports.HashLocation = __webpack_require__(7); exports.HistoryLocation = __webpack_require__(8); exports.RefreshLocation = __webpack_require__(9); exports.StaticLocation = __webpack_require__(10); exports.TestLocation = __webpack_require__(11); exports.ImitateBrowserBehavior = __webpack_require__(12); exports.ScrollToTopBehavior = __webpack_require__(13); exports.History = __webpack_require__(14); exports.Navigation = __webpack_require__(15); exports.State = __webpack_require__(16); exports.createRoute = __webpack_require__(17).createRoute; exports.createDefaultRoute = __webpack_require__(17).createDefaultRoute; exports.createNotFoundRoute = __webpack_require__(17).createNotFoundRoute; exports.createRedirect = __webpack_require__(17).createRedirect; exports.createRoutesFromReactChildren = __webpack_require__(18); exports.create = __webpack_require__(19); exports.run = __webpack_require__(20); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; 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 PropTypes = __webpack_require__(22); var RouteHandler = __webpack_require__(6); var Route = __webpack_require__(5); /** * A <DefaultRoute> component is a special kind of <Route> that * renders when its parent matches but none of its siblings do. * Only one such route may be used at any given level in the * route hierarchy. */ var DefaultRoute = (function (_Route) { function DefaultRoute() { _classCallCheck(this, DefaultRoute); if (_Route != null) { _Route.apply(this, arguments); } } _inherits(DefaultRoute, _Route); return DefaultRoute; })(Route); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 DefaultRoute.propTypes = { name: PropTypes.string, path: PropTypes.falsy, children: PropTypes.falsy, handler: PropTypes.func.isRequired }; DefaultRoute.defaultProps = { handler: RouteHandler }; module.exports = DefaultRoute; /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; 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 _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 React = __webpack_require__(21); var assign = __webpack_require__(33); var PropTypes = __webpack_require__(22); function isLeftClickEvent(event) { return event.button === 0; } function isModifiedEvent(event) { return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); } /** * <Link> components are used to create an <a> element that links to a route. * When that route is active, the link gets an "active" class name (or the * value of its `activeClassName` prop). * * For example, assuming you have the following route: * * <Route name="showPost" path="/posts/:postID" handler={Post}/> * * You could use the following component to link to that route: * * <Link to="showPost" params={{ postID: "123" }} /> * * In addition to params, links may pass along query string parameters * using the `query` prop. * * <Link to="showPost" params={{ postID: "123" }} query={{ show:true }}/> */ var Link = (function (_React$Component) { function Link() { _classCallCheck(this, Link); if (_React$Component != null) { _React$Component.apply(this, arguments); } } _inherits(Link, _React$Component); _createClass(Link, [{ key: 'handleClick', value: function handleClick(event) { var allowTransition = true; var clickResult; if (this.props.onClick) clickResult = this.props.onClick(event); if (isModifiedEvent(event) || !isLeftClickEvent(event)) { return; }if (clickResult === false || event.defaultPrevented === true) allowTransition = false; event.preventDefault(); if (allowTransition) this.context.router.transitionTo(this.props.to, this.props.params, this.props.query); } }, { key: 'getHref', /** * Returns the value of the "href" attribute to use on the DOM element. */ value: function getHref() { return this.context.router.makeHref(this.props.to, this.props.params, this.props.query); } }, { key: 'getClassName', /** * Returns the value of the "class" attribute to use on the DOM element, which contains * the value of the activeClassName property when this <Link> is active. */ value: function getClassName() { var className = this.props.className; if (this.getActiveState()) className += ' ' + this.props.activeClassName; return className; } }, { key: 'getActiveState', value: function getActiveState() { return this.context.router.isActive(this.props.to, this.props.params, this.props.query); } }, { key: 'render', value: function render() { var props = assign({}, this.props, { href: this.getHref(), className: this.getClassName(), onClick: this.handleClick.bind(this) }); if (props.activeStyle && this.getActiveState()) props.style = props.activeStyle; return React.DOM.a(props, this.props.children); } }]); return Link; })(React.Component); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 Link.contextTypes = { router: PropTypes.router.isRequired }; Link.propTypes = { activeClassName: PropTypes.string.isRequired, to: PropTypes.oneOfType([PropTypes.string, PropTypes.route]).isRequired, params: PropTypes.object, query: PropTypes.object, activeStyle: PropTypes.object, onClick: PropTypes.func }; Link.defaultProps = { activeClassName: 'active', className: '' }; module.exports = Link; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; 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 PropTypes = __webpack_require__(22); var RouteHandler = __webpack_require__(6); var Route = __webpack_require__(5); /** * A <NotFoundRoute> is a special kind of <Route> that * renders when the beginning of its parent's path matches * but none of its siblings do, including any <DefaultRoute>. * Only one such route may be used at any given level in the * route hierarchy. */ var NotFoundRoute = (function (_Route) { function NotFoundRoute() { _classCallCheck(this, NotFoundRoute); if (_Route != null) { _Route.apply(this, arguments); } } _inherits(NotFoundRoute, _Route); return NotFoundRoute; })(Route); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 NotFoundRoute.propTypes = { name: PropTypes.string, path: PropTypes.falsy, children: PropTypes.falsy, handler: PropTypes.func.isRequired }; NotFoundRoute.defaultProps = { handler: RouteHandler }; module.exports = NotFoundRoute; /***/ }, /* 4 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; 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 PropTypes = __webpack_require__(22); var Route = __webpack_require__(5); /** * A <Redirect> component is a special kind of <Route> that always * redirects to another route when it matches. */ var Redirect = (function (_Route) { function Redirect() { _classCallCheck(this, Redirect); if (_Route != null) { _Route.apply(this, arguments); } } _inherits(Redirect, _Route); return Redirect; })(Route); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 Redirect.propTypes = { path: PropTypes.string, from: PropTypes.string, // Alias for path. to: PropTypes.string, handler: PropTypes.falsy }; // Redirects should not have a default handler Redirect.defaultProps = {}; module.exports = Redirect; /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; 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 _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 React = __webpack_require__(21); var invariant = __webpack_require__(34); var PropTypes = __webpack_require__(22); var RouteHandler = __webpack_require__(6); /** * <Route> components specify components that are rendered to the page when the * URL matches a given pattern. * * Routes are arranged in a nested tree structure. When a new URL is requested, * the tree is searched depth-first to find a route whose path matches the URL. * When one is found, all routes in the tree that lead to it are considered * "active" and their components are rendered into the DOM, nested in the same * order as they are in the tree. * * The preferred way to configure a router is using JSX. The XML-like syntax is * a great way to visualize how routes are laid out in an application. * * var routes = [ * <Route handler={App}> * <Route name="login" handler={Login}/> * <Route name="logout" handler={Logout}/> * <Route name="about" handler={About}/> * </Route> * ]; * * Router.run(routes, function (Handler) { * React.render(<Handler/>, document.body); * }); * * Handlers for Route components that contain children can render their active * child route using a <RouteHandler> element. * * var App = React.createClass({ * render: function () { * return ( * <div class="application"> * <RouteHandler/> * </div> * ); * } * }); * * If no handler is provided for the route, it will render a matched child route. */ var Route = (function (_React$Component) { function Route() { _classCallCheck(this, Route); if (_React$Component != null) { _React$Component.apply(this, arguments); } } _inherits(Route, _React$Component); _createClass(Route, [{ key: 'render', value: function render() { invariant(false, '%s elements are for router configuration only and should not be rendered', this.constructor.name); } }]); return Route; })(React.Component); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 Route.propTypes = { name: PropTypes.string, path: PropTypes.string, handler: PropTypes.func, ignoreScrollBehavior: PropTypes.bool }; Route.defaultProps = { handler: RouteHandler }; module.exports = Route; /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; 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 _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 React = __webpack_require__(21); var ContextWrapper = __webpack_require__(23); var assign = __webpack_require__(33); var PropTypes = __webpack_require__(22); var REF_NAME = '__routeHandler__'; /** * A <RouteHandler> component renders the active child route handler * when routes are nested. */ var RouteHandler = (function (_React$Component) { function RouteHandler() { _classCallCheck(this, RouteHandler); if (_React$Component != null) { _React$Component.apply(this, arguments); } } _inherits(RouteHandler, _React$Component); _createClass(RouteHandler, [{ key: 'getChildContext', value: function getChildContext() { return { routeDepth: this.context.routeDepth + 1 }; } }, { key: 'componentDidMount', value: function componentDidMount() { this._updateRouteComponent(this.refs[REF_NAME]); } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { this._updateRouteComponent(this.refs[REF_NAME]); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this._updateRouteComponent(null); } }, { key: '_updateRouteComponent', value: function _updateRouteComponent(component) { this.context.router.setRouteComponentAtDepth(this.getRouteDepth(), component); } }, { key: 'getRouteDepth', value: function getRouteDepth() { return this.context.routeDepth; } }, { key: 'createChildRouteHandler', value: function createChildRouteHandler(props) { var route = this.context.router.getRouteAtDepth(this.getRouteDepth()); if (route == null) { return null; }var childProps = assign({}, props || this.props, { ref: REF_NAME, params: this.context.router.getCurrentParams(), query: this.context.router.getCurrentQuery() }); return React.createElement(route.handler, childProps); } }, { key: 'render', value: function render() { var handler = this.createChildRouteHandler(); // <script/> for things like <CSSTransitionGroup/> that don't like null return handler ? React.createElement( ContextWrapper, null, handler ) : React.createElement('script', null); } }]); return RouteHandler; })(React.Component); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 RouteHandler.contextTypes = { routeDepth: PropTypes.number.isRequired, router: PropTypes.router.isRequired }; RouteHandler.childContextTypes = { routeDepth: PropTypes.number.isRequired }; module.exports = RouteHandler; /***/ }, /* 7 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var LocationActions = __webpack_require__(24); var History = __webpack_require__(14); var _listeners = []; var _isListening = false; var _actionType; function notifyChange(type) { if (type === LocationActions.PUSH) History.length += 1; var change = { path: HashLocation.getCurrentPath(), type: type }; _listeners.forEach(function (listener) { listener.call(HashLocation, change); }); } function ensureSlash() { var path = HashLocation.getCurrentPath(); if (path.charAt(0) === '/') { return true; }HashLocation.replace('/' + path); return false; } function onHashChange() { if (ensureSlash()) { // If we don't have an _actionType then all we know is the hash // changed. It was probably caused by the user clicking the Back // button, but may have also been the Forward button or manual // manipulation. So just guess 'pop'. var curActionType = _actionType; _actionType = null; notifyChange(curActionType || LocationActions.POP); } } /** * A Location that uses `window.location.hash`. */ var HashLocation = { addChangeListener: function addChangeListener(listener) { _listeners.push(listener); // Do this BEFORE listening for hashchange. ensureSlash(); if (!_isListening) { if (window.addEventListener) { window.addEventListener('hashchange', onHashChange, false); } else { window.attachEvent('onhashchange', onHashChange); } _isListening = true; } }, removeChangeListener: function removeChangeListener(listener) { _listeners = _listeners.filter(function (l) { return l !== listener; }); if (_listeners.length === 0) { if (window.removeEventListener) { window.removeEventListener('hashchange', onHashChange, false); } else { window.removeEvent('onhashchange', onHashChange); } _isListening = false; } }, push: function push(path) { _actionType = LocationActions.PUSH; window.location.hash = path; }, replace: function replace(path) { _actionType = LocationActions.REPLACE; window.location.replace(window.location.pathname + window.location.search + '#' + path); }, pop: function pop() { _actionType = LocationActions.POP; History.back(); }, getCurrentPath: function getCurrentPath() { return decodeURI( // We can't use window.location.hash here because it's not // consistent across browsers - Firefox will pre-decode it! window.location.href.split('#')[1] || ''); }, toString: function toString() { return '<HashLocation>'; } }; module.exports = HashLocation; /***/ }, /* 8 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var LocationActions = __webpack_require__(24); var History = __webpack_require__(14); var _listeners = []; var _isListening = false; function notifyChange(type) { var change = { path: HistoryLocation.getCurrentPath(), type: type }; _listeners.forEach(function (listener) { listener.call(HistoryLocation, change); }); } function onPopState(event) { if (event.state === undefined) { return; } // Ignore extraneous popstate events in WebKit. notifyChange(LocationActions.POP); } /** * A Location that uses HTML5 history. */ var HistoryLocation = { addChangeListener: function addChangeListener(listener) { _listeners.push(listener); if (!_isListening) { if (window.addEventListener) { window.addEventListener('popstate', onPopState, false); } else { window.attachEvent('onpopstate', onPopState); } _isListening = true; } }, removeChangeListener: function removeChangeListener(listener) { _listeners = _listeners.filter(function (l) { return l !== listener; }); if (_listeners.length === 0) { if (window.addEventListener) { window.removeEventListener('popstate', onPopState, false); } else { window.removeEvent('onpopstate', onPopState); } _isListening = false; } }, push: function push(path) { window.history.pushState({ path: path }, '', path); History.length += 1; notifyChange(LocationActions.PUSH); }, replace: function replace(path) { window.history.replaceState({ path: path }, '', path); notifyChange(LocationActions.REPLACE); }, pop: History.back, getCurrentPath: function getCurrentPath() { return decodeURI(window.location.pathname + window.location.search); }, toString: function toString() { return '<HistoryLocation>'; } }; module.exports = HistoryLocation; /***/ }, /* 9 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var HistoryLocation = __webpack_require__(8); var History = __webpack_require__(14); /** * A Location that uses full page refreshes. This is used as * the fallback for HistoryLocation in browsers that do not * support the HTML5 history API. */ var RefreshLocation = { push: function push(path) { window.location = path; }, replace: function replace(path) { window.location.replace(path); }, pop: History.back, getCurrentPath: HistoryLocation.getCurrentPath, toString: function toString() { return '<RefreshLocation>'; } }; module.exports = RefreshLocation; /***/ }, /* 10 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; 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 invariant = __webpack_require__(34); function throwCannotModify() { invariant(false, 'You cannot modify a static location'); } /** * A location that only ever contains a single path. Useful in * stateless environments like servers where there is no path history, * only the path that was used in the request. */ var StaticLocation = (function () { function StaticLocation(path) { _classCallCheck(this, StaticLocation); this.path = path; } _createClass(StaticLocation, [{ key: 'getCurrentPath', value: function getCurrentPath() { return this.path; } }, { key: 'toString', value: function toString() { return '<StaticLocation path="' + this.path + '">'; } }]); return StaticLocation; })(); // TODO: Include these in the above class definition // once we can use ES7 property initializers. // https://github.com/babel/babel/issues/619 StaticLocation.prototype.push = throwCannotModify; StaticLocation.prototype.replace = throwCannotModify; StaticLocation.prototype.pop = throwCannotModify; module.exports = StaticLocation; /***/ }, /* 11 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; 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 invariant = __webpack_require__(34); var LocationActions = __webpack_require__(24); var History = __webpack_require__(14); /** * A location that is convenient for testing and does not require a DOM. */ var TestLocation = (function () { function TestLocation(history) { _classCallCheck(this, TestLocation); this.history = history || []; this.listeners = []; this._updateHistoryLength(); } _createClass(TestLocation, [{ key: 'needsDOM', get: function () { return false; } }, { key: '_updateHistoryLength', value: function _updateHistoryLength() { History.length = this.history.length; } }, { key: '_notifyChange', value: function _notifyChange(type) { var change = { path: this.getCurrentPath(), type: type }; for (var i = 0, len = this.listeners.length; i < len; ++i) this.listeners[i].call(this, change); } }, { key: 'addChangeListener', value: function addChangeListener(listener) { this.listeners.push(listener); } }, { key: 'removeChangeListener', value: function removeChangeListener(listener) { this.listeners = this.listeners.filter(function (l) { return l !== listener; }); } }, { key: 'push', value: function push(path) { this.history.push(path); this._updateHistoryLength(); this._notifyChange(LocationActions.PUSH); } }, { key: 'replace', value: function replace(path) { invariant(this.history.length, 'You cannot replace the current path with no history'); this.history[this.history.length - 1] = path; this._notifyChange(LocationActions.REPLACE); } }, { key: 'pop', value: function pop() { this.history.pop(); this._updateHistoryLength(); this._notifyChange(LocationActions.POP); } }, { key: 'getCurrentPath', value: function getCurrentPath() { return this.history[this.history.length - 1]; } }, { key: 'toString', value: function toString() { return '<TestLocation>'; } }]); return TestLocation; })(); module.exports = TestLocation; /***/ }, /* 12 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var LocationActions = __webpack_require__(24); /** * A scroll behavior that attempts to imitate the default behavior * of modern browsers. */ var ImitateBrowserBehavior = { updateScrollPosition: function updateScrollPosition(position, actionType) { switch (actionType) { case LocationActions.PUSH: case LocationActions.REPLACE: window.scrollTo(0, 0); break; case LocationActions.POP: if (position) { window.scrollTo(position.x, position.y); } else { window.scrollTo(0, 0); } break; } } }; module.exports = ImitateBrowserBehavior; /***/ }, /* 13 */ /***/ function(module, exports, __webpack_require__) { /** * A scroll behavior that always scrolls to the top of the page * after a transition. */ "use strict"; var ScrollToTopBehavior = { updateScrollPosition: function updateScrollPosition() { window.scrollTo(0, 0); } }; module.exports = ScrollToTopBehavior; /***/ }, /* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var invariant = __webpack_require__(34); var canUseDOM = __webpack_require__(35).canUseDOM; var History = { /** * The current number of entries in the history. * * Note: This property is read-only. */ length: 1, /** * Sends the browser back one entry in the history. */ back: function back() { invariant(canUseDOM, 'Cannot use History.back without a DOM'); // Do this first so that History.length will // be accurate in location change listeners. History.length -= 1; window.history.back(); } }; module.exports = History; /***/ }, /* 15 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var PropTypes = __webpack_require__(22); /** * A mixin for components that modify the URL. * * Example: * * var MyLink = React.createClass({ * mixins: [ Router.Navigation ], * handleClick(event) { * event.preventDefault(); * this.transitionTo('aRoute', { the: 'params' }, { the: 'query' }); * }, * render() { * return ( * <a onClick={this.handleClick}>Click me!</a> * ); * } * }); */ var Navigation = { contextTypes: { router: PropTypes.router.isRequired }, /** * Returns an absolute URL path created from the given route * name, URL parameters, and query values. */ makePath: function makePath(to, params, query) { return this.context.router.makePath(to, params, query); }, /** * Returns a string that may safely be used as the href of a * link to the route with the given name. */ makeHref: function makeHref(to, params, query) { return this.context.router.makeHref(to, params, query); }, /** * Transitions to the URL specified in the arguments by pushing * a new URL onto the history stack. */ transitionTo: function transitionTo(to, params, query) { this.context.router.transitionTo(to, params, query); }, /** * Transitions to the URL specified in the arguments by replacing * the current URL in the history stack. */ replaceWith: function replaceWith(to, params, query) { this.context.router.replaceWith(to, params, query); }, /** * Transitions to the previous URL. */ goBack: function goBack() { return this.context.router.goBack(); } }; module.exports = Navigation; /***/ }, /* 16 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var PropTypes = __webpack_require__(22); /** * A mixin for components that need to know the path, routes, URL * params and query that are currently active. * * Example: * * var AboutLink = React.createClass({ * mixins: [ Router.State ], * render() { * var className = this.props.className; * * if (this.isActive('about')) * className += ' is-active'; * * return React.DOM.a({ className: className }, this.props.children); * } * }); */ var State = { contextTypes: { router: PropTypes.router.isRequired }, /** * Returns the current URL path. */ getPath: function getPath() { return this.context.router.getCurrentPath(); }, /** * Returns the current URL path without the query string. */ getPathname: function getPathname() { return this.context.router.getCurrentPathname(); }, /** * Returns an object of the URL params that are currently active. */ getParams: function getParams() { return this.context.router.getCurrentParams(); }, /** * Returns an object of the query params that are currently active. */ getQuery: function getQuery() { return this.context.router.getCurrentQuery(); }, /** * Returns an array of the routes that are currently active. */ getRoutes: function getRoutes() { return this.context.router.getCurrentRoutes(); }, /** * A helper method to determine if a given route, params, and query * are active. */ isActive: function isActive(to, params, query) { return this.context.router.isActive(to, params, query); } }; module.exports = State; /***/ }, /* 17 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; 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 assign = __webpack_require__(33); var invariant = __webpack_require__(34); var warning = __webpack_require__(36); var PathUtils = __webpack_require__(25); var _currentRoute; var Route = (function () { function Route(name, path, ignoreScrollBehavior, isDefault, isNotFound, onEnter, onLeave, handler) { _classCallCheck(this, Route); this.name = name; this.path = path; this.paramNames = PathUtils.extractParamNames(this.path); this.ignoreScrollBehavior = !!ignoreScrollBehavior; this.isDefault = !!isDefault; this.isNotFound = !!isNotFound; this.onEnter = onEnter; this.onLeave = onLeave; this.handler = handler; } _createClass(Route, [{ key: 'appendChild', /** * Appends the given route to this route's child routes. */ value: function appendChild(route) { invariant(route instanceof Route, 'route.appendChild must use a valid Route'); if (!this.childRoutes) this.childRoutes = []; this.childRoutes.push(route); } }, { key: 'toString', value: function toString() { var string = '<Route'; if (this.name) string += ' name="' + this.name + '"'; string += ' path="' + this.path + '">'; return string; } }], [{ key: 'createRoute', /** * Creates and returns a new route. Options may be a URL pathname string * with placeholders for named params or an object with any of the following * properties: * * - name The name of the route. This is used to lookup a * route relative to its parent route and should be * unique among all child routes of the same parent * - path A URL pathname string with optional placeholders * that specify the names of params to extract from * the URL when the path matches. Defaults to `/${name}` * when there is a name given, or the path of the parent * route, or / * - ignoreScrollBehavior True to make this route (and all descendants) ignore * the scroll behavior of the router * - isDefault True to make this route the default route among all * its siblings * - isNotFound True to make this route the "not found" route among * all its siblings * - onEnter A transition hook that will be called when the * router is going to enter this route * - onLeave A transition hook that will be called when the * router is going to leave this route * - handler A React component that will be rendered when * this route is active * - parentRoute The parent route to use for this route. This option * is automatically supplied when creating routes inside * the callback to another invocation of createRoute. You * only ever need to use this when declaring routes * independently of one another to manually piece together * the route hierarchy * * The callback may be used to structure your route hierarchy. Any call to * createRoute, createDefaultRoute, createNotFoundRoute, or createRedirect * inside the callback automatically uses this route as its parent. */ value: function createRoute(options, callback) { options = options || {}; if (typeof options === 'string') options = { path: options }; var parentRoute = _currentRoute; if (parentRoute) { warning(options.parentRoute == null || options.parentRoute === parentRoute, 'You should not use parentRoute with createRoute inside another route\'s child callback; it is ignored'); } else { parentRoute = options.parentRoute; } var name = options.name; var path = options.path || name; if (path && !(options.isDefault || options.isNotFound)) { if (PathUtils.isAbsolute(path)) { if (parentRoute) { invariant(path === parentRoute.path || parentRoute.paramNames.length === 0, 'You cannot nest path "%s" inside "%s"; the parent requires URL parameters', path, parentRoute.path); } } else if (parentRoute) { // Relative paths extend their parent. path = PathUtils.join(parentRoute.path, path); } else { path = '/' + path; } } else { path = parentRoute ? parentRoute.path : '/'; } if (options.isNotFound && !/\*$/.test(path)) path += '*'; // Auto-append * to the path of not found routes. var route = new Route(name, path, options.ignoreScrollBehavior, options.isDefault, options.isNotFound, options.onEnter, options.onLeave, options.handler); if (parentRoute) { if (route.isDefault) { invariant(parentRoute.defaultRoute == null, '%s may not have more than one default route', parentRoute); parentRoute.defaultRoute = route; } else if (route.isNotFound) { invariant(parentRoute.notFoundRoute == null, '%s may not have more than one not found route', parentRoute); parentRoute.notFoundRoute = route; } parentRoute.appendChild(route); } // Any routes created in the callback // use this route as their parent. if (typeof callback === 'function') { var currentRoute = _currentRoute; _currentRoute = route; callback.call(route, route); _currentRoute = currentRoute; } return route; } }, { key: 'createDefaultRoute', /** * Creates and returns a route that is rendered when its parent matches * the current URL. */ value: function createDefaultRoute(options) { return Route.createRoute(assign({}, options, { isDefault: true })); } }, { key: 'createNotFoundRoute', /** * Creates and returns a route that is rendered when its parent matches * the current URL but none of its siblings do. */ value: function createNotFoundRoute(options) { return Route.createRoute(assign({}, options, { isNotFound: true })); } }, { key: 'createRedirect', /** * Creates and returns a route that automatically redirects the transition * to another route. In addition to the normal options to createRoute, this * function accepts the following options: * * - from An alias for the `path` option. Defaults to * * - to The path/route/route name to redirect to * - params The params to use in the redirect URL. Defaults * to using the current params * - query The query to use in the redirect URL. Defaults * to using the current query */ value: function createRedirect(options) { return Route.createRoute(assign({}, options, { path: options.path || options.from || '*', onEnter: function onEnter(transition, params, query) { transition.redirect(options.to, options.params || params, options.query || query); } })); } }]); return Route; })(); module.exports = Route; /***/ }, /* 18 */ /***/ function(module, exports, __webpack_require__) { /* jshint -W084 */ 'use strict'; var React = __webpack_require__(21); var assign = __webpack_require__(33); var warning = __webpack_require__(36); var DefaultRoute = __webpack_require__(1); var NotFoundRoute = __webpack_require__(3); var Redirect = __webpack_require__(4); var Route = __webpack_require__(17); function checkPropTypes(componentName, propTypes, props) { componentName = componentName || 'UnknownComponent'; for (var propName in propTypes) { if (propTypes.hasOwnProperty(propName)) { var error = propTypes[propName](props, propName, componentName); if (error instanceof Error) warning(false, error.message); } } } function createRouteOptions(props) { var options = assign({}, props); var handler = options.handler; if (handler) { options.onEnter = handler.willTransitionTo; options.onLeave = handler.willTransitionFrom; } return options; } function createRouteFromReactElement(element) { if (!React.isValidElement(element)) { return; }var type = element.type; var props = assign({}, type.defaultProps, element.props); if (type.propTypes) checkPropTypes(type.displayName, type.propTypes, props); if (type === DefaultRoute) { return Route.createDefaultRoute(createRouteOptions(props)); }if (type === NotFoundRoute) { return Route.createNotFoundRoute(createRouteOptions(props)); }if (type === Redirect) { return Route.createRedirect(createRouteOptions(props)); }return Route.createRoute(createRouteOptions(props), function () { if (props.children) createRoutesFromReactChildren(props.children); }); } /** * Creates and returns an array of routes created from the given * ReactChildren, all of which should be one of <Route>, <DefaultRoute>, * <NotFoundRoute>, or <Redirect>, e.g.: * * var { createRoutesFromReactChildren, Route, Redirect } = require('react-router'); * * var routes = createRoutesFromReactChildren( * <Route path="/" handler={App}> * <Route name="user" path="/user/:userId" handler={User}> * <Route name="task" path="tasks/:taskId" handler={Task}/> * <Redirect from="todos/:taskId" to="task"/> * </Route> * </Route> * ); */ function createRoutesFromReactChildren(children) { var routes = []; React.Children.forEach(children, function (child) { if (child = createRouteFromReactElement(child)) routes.push(child); }); return routes; } module.exports = createRoutesFromReactChildren; /***/ }, /* 19 */ /***/ function(module, exports, __webpack_require__) { /* jshint -W058 */ 'use strict'; var React = __webpack_require__(21); var warning = __webpack_require__(36); var invariant = __webpack_require__(34); var canUseDOM = __webpack_require__(35).canUseDOM; var LocationActions = __webpack_require__(24); var ImitateBrowserBehavior = __webpack_require__(12); var HashLocation = __webpack_require__(7); var HistoryLocation = __webpack_require__(8); var RefreshLocation = __webpack_require__(9); var StaticLocation = __webpack_require__(10); var ScrollHistory = __webpack_require__(26); var createRoutesFromReactChildren = __webpack_require__(18); var isReactChildren = __webpack_require__(27); var Transition = __webpack_require__(28); var PropTypes = __webpack_require__(22); var Redirect = __webpack_require__(29); var History = __webpack_require__(14); var Cancellation = __webpack_require__(30); var Match = __webpack_require__(31); var Route = __webpack_require__(17); var supportsHistory = __webpack_require__(32); var PathUtils = __webpack_require__(25); /** * The default location for new routers. */ var DEFAULT_LOCATION = canUseDOM ? HashLocation : '/'; /** * The default scroll behavior for new routers. */ var DEFAULT_SCROLL_BEHAVIOR = canUseDOM ? ImitateBrowserBehavior : null; function hasProperties(object, properties) { for (var propertyName in properties) if (properties.hasOwnProperty(propertyName) && object[propertyName] !== properties[propertyName]) { return false; }return true; } function hasMatch(routes, route, prevParams, nextParams, prevQuery, nextQuery) { return routes.some(function (r) { if (r !== route) return false; var paramNames = route.paramNames; var paramName; // Ensure that all params the route cares about did not change. for (var i = 0, len = paramNames.length; i < len; ++i) { paramName = paramNames[i]; if (nextParams[paramName] !== prevParams[paramName]) return fal