react-router
Advanced tools
Comparing version 1.0.0-alpha2 to 1.0.0-beta1
@@ -159,3 +159,3 @@ To illustrate the problems React Router is going to solve for you, let’s build a | ||
component: App, | ||
childRoute: [ | ||
childRoutes: [ | ||
{ path: 'about', component: About }, | ||
@@ -166,3 +166,3 @@ { path: 'inbox', component: Inbox }, | ||
React.render(<Router children={routes}/>, document.body): | ||
React.render(<Router history={HashHistory} children={routes}/>, document.body): | ||
``` | ||
@@ -169,0 +169,0 @@ |
@@ -28,4 +28,3 @@ Rendering on the server is not much different than rendering in the | ||
// server.js | ||
import { Router } from 'react-router'; | ||
import ServerHistory from 'react-router/lib/ServerHistory'; | ||
import { Router, Location } from 'react-router'; | ||
import routes from './routes'; | ||
@@ -36,7 +35,8 @@ | ||
serveNonStaticPaths((req, res) => { | ||
var history = new ServerHistory(req.path); | ||
Router.match(routes, history, (err, initialState) => { | ||
// do your own data fetching, perhaps using the branch of components | ||
// in the initialState | ||
fetchSomeData(initialState.components, (err, initialData) => { | ||
var location = new Location(req.path, req.query); | ||
Router.run(routes, location, (error, initialState, transition) => { | ||
// do your own data fetching, perhaps using the | ||
// branch of components in the initialState | ||
fetchSomeData(initialState.components, (error, initialData) => { | ||
var html = React.renderToString( | ||
@@ -43,0 +43,0 @@ <Router history={history} {...initialState}/> |
@@ -127,11 +127,11 @@ A `Route` is used to declaratively map routes to your application's | ||
### `onEnter(nextState, router)` | ||
### `onEnter(nextState, transition)` | ||
Called when a route is about to be entered. It provides the next router | ||
state and the router instance for cancelling/redirecting the transition. | ||
state and the [transition][Transition] instance for cancelling/redirecting. | ||
### `onLeave(nextState, router)` | ||
### `onLeave(nextState, transition)` | ||
Called when a route is about to be exited. It provides the next router | ||
state and the router instance for cancelling/redirecting the transition. | ||
state and the [transition][Transition] instance for cancelling/redirecting. | ||
@@ -143,2 +143,3 @@ [overview]:#TODO | ||
[history]:#TODO | ||
[Transition]:#TODO | ||
@@ -18,3 +18,3 @@ Primary component of React Router. It keeps your UI and the URL in sync. | ||
### `history` (required) | ||
### `history` | ||
@@ -33,3 +33,8 @@ The [`History`][History] the router should set up and listen for changes | ||
### `stringifyQuery(query)` | ||
A function that should be used to convert an object to a URL query string. | ||
By default, this function uses `qs.stringify(query, { arrayFormat: 'brackets' })`. | ||
#### Examples | ||
@@ -36,0 +41,0 @@ |
@@ -6,5 +6,4 @@ `Router` sets up a `History` and updates `Router` state when the | ||
```js | ||
// typical usage | ||
import BrowserHistory from 'react-router/lib/BrowserHistory'; | ||
<Router history={BrowserHistory}/> | ||
import History from 'react-router/lib/BrowserHistory'; | ||
<Router history={History}/> | ||
``` | ||
@@ -15,5 +14,3 @@ | ||
```js | ||
// note the `{ ... }` in the import statement... | ||
import { BrowserHistory } from 'react-router/lib/BrowserHistory'; | ||
// ...this gives you a class instead of a singleton instance | ||
@@ -23,5 +20,2 @@ var history = new BrowserHistory({ | ||
return customParse(string); | ||
}, | ||
stringifyQuery(obj) { | ||
return customStringify(obj); | ||
} | ||
@@ -32,2 +26,1 @@ }); | ||
``` | ||
@@ -46,6 +46,6 @@ `BrowserHistory` is a [history][Histories] implementation for DOM environments that | ||
import { Router } from 'react-router'; | ||
import BrowserHistory from 'react-router/lib/BrowserHistory'; | ||
import History from 'react-router/lib/BrowserHistory'; | ||
React.render(( | ||
<Router history={BrowserHistory}> | ||
<Router history={History}> | ||
{/* ... */} | ||
@@ -52,0 +52,0 @@ </Router> |
@@ -36,6 +36,6 @@ `HashHistory` is a [history][Histories] implementation for DOM environments that | ||
import { Router } from 'react-router'; | ||
import HashHistory from 'react-router/lib/HashHistory'; | ||
import History from 'react-router/lib/HashHistory'; | ||
React.render(( | ||
<Router history={HashHistory}> | ||
<Router history={History}> | ||
{/* ... */} | ||
@@ -49,3 +49,2 @@ </Router> | ||
```js | ||
// note the `{ ... }` syntax on the import | ||
import { HashHistory } from 'react-router/lib/HashHistory'; | ||
@@ -57,3 +56,3 @@ | ||
// use your own | ||
var history = new HashHistory({queryKey: 'k'}); | ||
var history = new HashHistory({ queryKey: 'k' }); | ||
@@ -60,0 +59,0 @@ React.render(( |
@@ -13,4 +13,6 @@ `MemoryHistory` is a [history][Histories] implementation that does not | ||
var history = new MemoryHistory([ '/', '/a/path' ]); | ||
React.render(( | ||
<Router history={MemoryHistory}> | ||
<Router history={history}> | ||
{/* ... */} | ||
@@ -21,5 +23,3 @@ </Router> | ||
[Histories]:#TODO | ||
@@ -69,3 +69,3 @@ 'use strict'; | ||
this.location = this._createLocation((0, _DOMUtils.getWindowPath)(), state, navigationType); | ||
this.location = this.createLocation((0, _DOMUtils.getWindowPath)(), state, navigationType); | ||
} | ||
@@ -122,3 +122,3 @@ }, { | ||
window.history.pushState(state, '', path); | ||
this.location = this._createLocation(path, state, _NavigationTypes2['default'].PUSH); | ||
this.location = this.createLocation(path, state, _NavigationTypes2['default'].PUSH); | ||
this._notifyChange(); | ||
@@ -138,3 +138,3 @@ } else { | ||
window.history.replaceState(state, '', path); | ||
this.location = this._createLocation(path, state, _NavigationTypes2['default'].REPLACE); | ||
this.location = this.createLocation(path, state, _NavigationTypes2['default'].REPLACE); | ||
this._notifyChange(); | ||
@@ -141,0 +141,0 @@ } else { |
@@ -10,2 +10,3 @@ 'use strict'; | ||
exports.getWindowScrollPosition = getWindowScrollPosition; | ||
exports.setWindowScrollPosition = setWindowScrollPosition; | ||
exports.supportsHistory = supportsHistory; | ||
@@ -38,2 +39,6 @@ var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); | ||
function setWindowScrollPosition(scrollX, scrollY) { | ||
window.scrollTo(scrollX, scrollY); | ||
} | ||
/** | ||
@@ -40,0 +45,0 @@ * taken from modernizr |
@@ -116,3 +116,3 @@ 'use strict'; | ||
var state = this.queryKey ? readState(path, this.queryKey) : null; | ||
this.location = this._createLocation(path, state, navigationType); | ||
this.location = this.createLocation(path, state, navigationType); | ||
} | ||
@@ -179,3 +179,3 @@ }, { | ||
this.location = this._createLocation(path, state, _NavigationTypes2['default'].PUSH); | ||
this.location = this.createLocation(path, state, _NavigationTypes2['default'].PUSH); | ||
@@ -194,3 +194,3 @@ this._notifyChange(); | ||
this.location = this._createLocation(path, state, _NavigationTypes2['default'].REPLACE); | ||
this.location = this.createLocation(path, state, _NavigationTypes2['default'].REPLACE); | ||
@@ -197,0 +197,0 @@ this._notifyChange(); |
@@ -9,4 +9,2 @@ 'use strict'; | ||
var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; desc = parent = getter = undefined; _again = false; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = 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); } } }; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
@@ -16,4 +14,2 @@ | ||
function _inherits(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 _invariant = require('invariant'); | ||
@@ -25,6 +21,2 @@ | ||
var _ChangeEmitter2 = require('./ChangeEmitter'); | ||
var _ChangeEmitter3 = _interopRequireDefault(_ChangeEmitter2); | ||
var _Location = require('./Location'); | ||
@@ -34,3 +26,3 @@ | ||
var RequiredSubclassMethods = ['pushState', 'replaceState', 'go']; | ||
var RequiredHistorySubclassMethods = ['pushState', 'replaceState', 'go']; | ||
@@ -51,3 +43,3 @@ function createRandomKey() { | ||
var History = (function (_ChangeEmitter) { | ||
var History = (function () { | ||
function History() { | ||
@@ -58,16 +50,29 @@ var options = arguments[0] === undefined ? {} : arguments[0]; | ||
_get(Object.getPrototypeOf(History.prototype), 'constructor', this).call(this); | ||
RequiredHistorySubclassMethods.forEach(function (method) { | ||
(0, _invariant2['default'])(typeof this[method] === 'function', '%s needs a "%s" method', this.constructor.name, method); | ||
}, this); | ||
this.parseQueryString = options.parseQueryString || _URLUtils.parseQueryString; | ||
this.stringifyQuery = options.stringifyQuery || _URLUtils.stringifyQuery; | ||
this.changeListeners = []; | ||
this.location = null; | ||
RequiredSubclassMethods.forEach(function (method) { | ||
(0, _invariant2['default'])(typeof this[method] === 'function', '%s needs a "%s" method', this.constructor.name, method); | ||
}, this); | ||
} | ||
_inherits(History, _ChangeEmitter); | ||
_createClass(History, [{ | ||
key: '_notifyChange', | ||
value: function _notifyChange() { | ||
for (var i = 0, len = this.changeListeners.length; i < len; ++i) this.changeListeners[i].call(this); | ||
} | ||
}, { | ||
key: 'addChangeListener', | ||
value: function addChangeListener(listener) { | ||
this.changeListeners.push(listener); | ||
} | ||
}, { | ||
key: 'removeChangeListener', | ||
value: function removeChangeListener(listener) { | ||
this.changeListeners = this.changeListeners.filter(function (li) { | ||
return li !== listener; | ||
}); | ||
} | ||
}, { | ||
key: 'back', | ||
@@ -92,4 +97,4 @@ value: function back() { | ||
}, { | ||
key: '_createLocation', | ||
value: function _createLocation(path, state, navigationType) { | ||
key: 'createLocation', | ||
value: function createLocation(path, state, navigationType) { | ||
var pathname = (0, _URLUtils.getPathname)(path); | ||
@@ -100,33 +105,8 @@ var queryString = (0, _URLUtils.getQueryString)(path); | ||
} | ||
}, { | ||
key: 'makePath', | ||
/** | ||
* Returns a full URL path from the given pathname and query. | ||
*/ | ||
value: function makePath(pathname, query) { | ||
if (query) { | ||
if (typeof query !== 'string') query = this.stringifyQuery(query); | ||
if (query !== '') return pathname + '?' + query; | ||
} | ||
return pathname; | ||
} | ||
}, { | ||
key: 'makeHref', | ||
/** | ||
* Returns a string that may safely be used to link to the given | ||
* pathname and query. | ||
*/ | ||
value: function makeHref(pathname, query) { | ||
return this.makePath(pathname, query); | ||
} | ||
}]); | ||
return History; | ||
})(_ChangeEmitter3['default']); | ||
})(); | ||
exports['default'] = History; | ||
module.exports = exports['default']; |
@@ -70,3 +70,3 @@ 'use strict'; | ||
this.location = this._createLocation(currentEntry.path, currentEntry.state); | ||
this.location = this.createLocation(currentEntry.path, currentEntry.state); | ||
} | ||
@@ -85,3 +85,3 @@ | ||
this.entries = this.entries.slice(0, this.current).concat([{ state: state, path: path }]); | ||
this.location = this._createLocation(path, state, _NavigationTypes2['default'].PUSH); | ||
this.location = this.createLocation(path, state, _NavigationTypes2['default'].PUSH); | ||
@@ -98,3 +98,3 @@ this._notifyChange(); | ||
this.entries[this.current] = { state: state, path: path }; | ||
this.location = this._createLocation(path, state, _NavigationTypes2['default'].REPLACE); | ||
this.location = this.createLocation(path, state, _NavigationTypes2['default'].REPLACE); | ||
@@ -113,3 +113,3 @@ this._notifyChange(); | ||
this.location = this._createLocation(currentEntry.path, currentEntry.state, _NavigationTypes2['default'].POP); | ||
this.location = this.createLocation(currentEntry.path, currentEntry.state, _NavigationTypes2['default'].POP); | ||
@@ -139,3 +139,3 @@ this._notifyChange(); | ||
exports.MemoryHistory = MemoryHistory; | ||
exports['default'] = MemoryHistory; | ||
exports['default'] = MemoryHistory; | ||
module.exports = exports['default']; |
@@ -18,3 +18,2 @@ 'use strict'; | ||
var _React$PropTypes = _react2['default'].PropTypes; | ||
var any = _React$PropTypes.any; | ||
var func = _React$PropTypes.func; | ||
@@ -25,3 +24,2 @@ var object = _React$PropTypes.object; | ||
var oneOfType = _React$PropTypes.oneOfType; | ||
var oneOf = _React$PropTypes.oneOf; | ||
var element = _React$PropTypes.element; | ||
@@ -37,4 +35,4 @@ | ||
var location = instanceOf(_Location2['default']); | ||
var route = any; //oneOf([object, element]); | ||
var routes = any; //oneOf([route, arrayOf(route), object]); | ||
var route = oneOfType([object, element]); | ||
var routes = oneOfType([route, arrayOf(route)]); | ||
@@ -41,0 +39,0 @@ module.exports = { |
@@ -27,4 +27,2 @@ 'use strict'; | ||
var _ActiveUtils = require('./ActiveUtils'); | ||
var _RoutingUtils = require('./RoutingUtils'); | ||
@@ -34,101 +32,101 @@ | ||
var _Location = require('./Location'); | ||
var _RouterContextMixin = require('./RouterContextMixin'); | ||
var _Location2 = _interopRequireDefault(_Location); | ||
var _RouterContextMixin2 = _interopRequireDefault(_RouterContextMixin); | ||
var _React$PropTypes = _react2['default'].PropTypes; | ||
var any = _React$PropTypes.any; | ||
var array = _React$PropTypes.array; | ||
var func = _React$PropTypes.func; | ||
var object = _React$PropTypes.object; | ||
var instanceOf = _React$PropTypes.instanceOf; | ||
var _ScrollManagementMixin = require('./ScrollManagementMixin'); | ||
var ContextMixin = { | ||
var _ScrollManagementMixin2 = _interopRequireDefault(_ScrollManagementMixin); | ||
childContextTypes: { | ||
router: object.isRequired | ||
}, | ||
var _Location = require('./Location'); | ||
getChildContext: function getChildContext() { | ||
return { | ||
router: this | ||
}; | ||
}, | ||
var _Transition = require('./Transition'); | ||
makePath: function makePath(pathname, query) { | ||
return this.props.history.makePath(pathname, query); | ||
}, | ||
var _Transition2 = _interopRequireDefault(_Transition); | ||
makeHref: function makeHref(pathname, query) { | ||
return this.props.history.makeHref(pathname, query); | ||
}, | ||
var _React$PropTypes = _react2['default'].PropTypes; | ||
var arrayOf = _React$PropTypes.arrayOf; | ||
var func = _React$PropTypes.func; | ||
var object = _React$PropTypes.object; | ||
transitionTo: function transitionTo(pathname, query) { | ||
var state = arguments[2] === undefined ? null : arguments[2]; | ||
var history = this.props.history; | ||
function runTransition(prevState, routes, location, hooks, callback) { | ||
var transition = new _Transition2['default'](); | ||
var path = this.makePath(pathname, query); | ||
if (this.nextLocation) { | ||
history.replaceState(state, path); | ||
(0, _RoutingUtils.getState)(routes, location, function (error, nextState) { | ||
if (error || nextState == null || transition.isCancelled) { | ||
callback(error, null, transition); | ||
} else { | ||
history.pushState(state, path); | ||
} | ||
}, | ||
nextState.location = location; | ||
replaceWith: function replaceWith(pathname, query) { | ||
var state = arguments[2] === undefined ? null : arguments[2]; | ||
var history = this.props.history; | ||
var transitionHooks = (0, _RoutingUtils.getTransitionHooks)(prevState, nextState); | ||
if (Array.isArray(hooks)) transitionHooks.unshift.apply(transitionHooks, hooks); | ||
var path = this.makePath(pathname, query); | ||
(0, _AsyncUtils.loopAsync)(transitionHooks.length, function (index, next, done) { | ||
transitionHooks[index](nextState, transition, function (error) { | ||
if (error || transition.isCancelled) { | ||
done(error); // No need to continue. | ||
} else { | ||
next(); | ||
} | ||
}); | ||
}, function (error) { | ||
if (error || transition.isCancelled) { | ||
callback(error, null, transition); | ||
} else { | ||
(0, _RoutingUtils.getComponents)(nextState.branch, function (error, components) { | ||
if (error || transition.isCancelled) { | ||
callback(error, null, transition); | ||
} else { | ||
nextState.components = components; | ||
callback(null, nextState, transition); | ||
} | ||
}); | ||
} | ||
}); | ||
} | ||
}); | ||
} | ||
history.replaceState(state, path); | ||
}, | ||
go: function go(n) { | ||
this.props.history.go(n); | ||
}, | ||
goBack: function goBack() { | ||
this.go(-1); | ||
}, | ||
goForward: function goForward() { | ||
this.go(1); | ||
}, | ||
isActive: function isActive(pathname, query) { | ||
var location = this.state.location; | ||
if (location == null) return false; | ||
return (0, _ActiveUtils.pathnameIsActive)(pathname, location.pathname) && (0, _ActiveUtils.queryIsActive)(query, location.query); | ||
} | ||
}; | ||
var Router = _react2['default'].createClass({ | ||
displayName: 'Router', | ||
mixins: [ContextMixin], | ||
mixins: [_RouterContextMixin2['default'], _ScrollManagementMixin2['default']], | ||
statics: { | ||
match: function match(routes, history, callback) {} | ||
/** | ||
* Runs a transition to the given location using the given routes and | ||
* transition hooks (optional) and calls callback(error, state, transition) | ||
* when finished. This is primarily useful for server-side rendering. | ||
*/ | ||
run: function run(routes, location, transitionHooks, callback) { | ||
if (typeof transitionHooks === 'function') { | ||
callback = transitionHooks; | ||
transitionHooks = null; | ||
} | ||
(0, _invariant2['default'])(typeof callback === 'function', 'Router.run needs a callback'); | ||
runTransition(null, routes, location, transitionHooks, callback); | ||
} | ||
}, | ||
propTypes: { | ||
history: _PropTypes.history.isRequired, | ||
children: _PropTypes.routes, | ||
routes: _PropTypes.routes, // Alias for children | ||
createElement: func.isRequired, | ||
onError: func.isRequired, | ||
onAbort: func, | ||
onError: func, | ||
onUpdate: func, | ||
// For server-side rendering | ||
location: any, | ||
// Client-side | ||
history: _PropTypes.history, | ||
routes: _PropTypes.routes, | ||
// Routes may also be given as children (JSX) | ||
children: _PropTypes.routes, | ||
// Server-side | ||
location: _PropTypes.location, | ||
branch: _PropTypes.routes, | ||
params: object, | ||
components: _PropTypes.components | ||
components: arrayOf(_PropTypes.components) | ||
}, | ||
@@ -138,7 +136,3 @@ | ||
return { | ||
createElement: _react.createElement, | ||
onError: function onError(error) { | ||
// Throw errors by default so we don't silently swallow them! | ||
throw error; // This error probably originated in getChildRoutes or getComponents. | ||
} | ||
createElement: _react.createElement | ||
}; | ||
@@ -149,7 +143,7 @@ }, | ||
return { | ||
isTransitioning: false, | ||
location: null, | ||
branch: null, | ||
params: null, | ||
components: null, | ||
isTransitioning: false | ||
components: null | ||
}; | ||
@@ -161,96 +155,37 @@ }, | ||
(0, _invariant2['default'])(_Location2['default'].isLocation(location), 'A <Router> needs a valid Location'); | ||
(0, _invariant2['default'])((0, _Location.isLocation)(location), 'A <Router> needs a valid Location'); | ||
this.nextLocation = location; | ||
var hooks = this.transitionHooks; | ||
if (hooks) hooks = hooks.map(function (hook) { | ||
return (0, _RoutingUtils.createTransitionHook)(hook, _this); | ||
}); | ||
this.setState({ isTransitioning: true }); | ||
this._getState(this.routes, location, function (error, state) { | ||
if (error || _this.nextLocation !== location) { | ||
_this._finishTransition(error); | ||
runTransition(this.state, this.routes, location, hooks, function (error, state, transition) { | ||
if (error) { | ||
_this.handleError(error); | ||
} else if (transition.isCancelled) { | ||
if (transition.redirectInfo) { | ||
var _transition$redirectInfo = transition.redirectInfo; | ||
var pathname = _transition$redirectInfo.pathname; | ||
var query = _transition$redirectInfo.query; | ||
var state = _transition$redirectInfo.state; | ||
_this.replaceWith(pathname, query, state); | ||
} else { | ||
(0, _invariant2['default'])(_this.state.location, 'You may not abort the initial transition'); | ||
_this.handleAbort(reason); | ||
} | ||
} else if (state == null) { | ||
(0, _warning2['default'])(false, 'Location "%s" did not match any routes', location.pathname); | ||
_this._finishTransition(); | ||
} else { | ||
state.location = location; | ||
_this._runTransitionHooks(state, function (error) { | ||
if (error || _this.nextLocation !== location) { | ||
_this._finishTransition(error); | ||
} else { | ||
_this._getComponents(state, function (error, components) { | ||
if (error || _this.nextLocation !== location) { | ||
_this._finishTransition(error); | ||
} else { | ||
state.components = components; | ||
_this._finishTransition(null, state); | ||
} | ||
}); | ||
} | ||
}); | ||
_this.setState(state, _this.props.onUpdate); | ||
} | ||
}); | ||
}, | ||
_finishTransition: function _finishTransition(error, state) { | ||
this.setState({ isTransitioning: false }); | ||
this.nextLocation = null; | ||
if (error) { | ||
this.handleError(error); | ||
} else if (state) { | ||
this.setState(state, this.props.onUpdate); | ||
this._alreadyUpdated = true; | ||
} | ||
}, | ||
_getState: function _getState(routes, location, callback) { | ||
var _props = this.props; | ||
var branch = _props.branch; | ||
var params = _props.params; | ||
if (branch && params && query) { | ||
callback(null, { branch: branch, params: params }); | ||
} else { | ||
(0, _RoutingUtils.getState)(routes, location, callback); | ||
} | ||
}, | ||
_runTransitionHooks: function _runTransitionHooks(nextState, callback) { | ||
var _this2 = this; | ||
// Run component hooks before route hooks. | ||
var hooks = this.transitionHooks.map(function (hook) { | ||
return (0, _RoutingUtils.createTransitionHook)(hook, _this2); | ||
_this.setState({ isTransitioning: false }); | ||
}); | ||
hooks.push.apply(hooks, (0, _RoutingUtils.getTransitionHooks)(this.state, nextState)); | ||
var nextLocation = this.nextLocation; | ||
(0, _AsyncUtils.loopAsync)(hooks.length, function (index, next, done) { | ||
var hook = hooks[index]; | ||
hooks[index].call(_this2, nextState, _this2, function (error) { | ||
if (error || _this2.nextLocation !== nextLocation) { | ||
done.call(_this2, error); // No need to continue. | ||
} else { | ||
next.call(_this2); | ||
} | ||
}); | ||
}, callback); | ||
}, | ||
_getComponents: function _getComponents(nextState, callback) { | ||
if (this.props.components) { | ||
callback(null, this.props.components); | ||
} else { | ||
(0, _RoutingUtils.getComponents)(nextState, callback); | ||
} | ||
}, | ||
_createElement: function _createElement(component, props) { | ||
return typeof component === 'function' ? this.props.createElement(component, props) : null; | ||
}, | ||
/** | ||
@@ -261,2 +196,4 @@ * Adds a transition hook that runs before all route hooks in a | ||
addTransitionHook: function addTransitionHook(hook) { | ||
if (!this.transitionHooks) this.transitionHooks = []; | ||
this.transitionHooks.push(hook); | ||
@@ -269,3 +206,3 @@ }, | ||
removeTransitionHook: function removeTransitionHook(hook) { | ||
this.transitionHooks = this.transitionHooks.filter(function (h) { | ||
if (this.transitionHooks) this.transitionHooks = this.transitionHooks.filter(function (h) { | ||
return h !== hook; | ||
@@ -275,19 +212,20 @@ }); | ||
/** | ||
* Cancels the current transition, preventing any subsequent transition | ||
* hooks from running and restoring the previous location. | ||
*/ | ||
cancelTransition: function cancelTransition() { | ||
(0, _invariant2['default'])(this.state.location, 'Router#cancelTransition: You may not cancel the initial transition'); | ||
if (this.nextLocation) { | ||
this.nextLocation = null; | ||
handleAbort: function handleAbort(reason) { | ||
if (this.props.onAbort) { | ||
this.props.onAbort.call(this, reason); | ||
} else { | ||
// The best we can do here is goBack so the location state reverts | ||
// to what it was. However, we also set a flag so that we know not | ||
// to run through _updateState again. | ||
// to run through _updateState again since state did not change. | ||
this._ignoreNextHistoryChange = true; | ||
this.goBack(); | ||
} | ||
}, | ||
handleError: function handleError(error) { | ||
if (this.props.onError) { | ||
this.props.onError.call(this, error); | ||
} else { | ||
(0, _warning2['default'])(false, 'Router#cancelTransition: Router is not transitioning'); | ||
// Throw errors by default so we don't silently swallow them! | ||
throw error; // This error probably originated in getChildRoutes or getComponents. | ||
} | ||
@@ -305,27 +243,27 @@ }, | ||
componentWillMount: function componentWillMount() { | ||
var _props2 = this.props; | ||
var history = _props2.history; | ||
var routes = _props2.routes; | ||
var children = _props2.children; | ||
var _props = this.props; | ||
var history = _props.history; | ||
var routes = _props.routes; | ||
var children = _props.children; | ||
var location = _props.location; | ||
var branch = _props.branch; | ||
var params = _props.params; | ||
var components = _props.components; | ||
(0, _invariant2['default'])(routes || children, 'A <Router> needs some routes'); | ||
if (history) { | ||
(0, _invariant2['default'])(routes || children, 'Client-side <Router>s need routes. Try using <Router routes> or ' + 'passing your routes as nested <Route> children'); | ||
this.routes = (0, _RouteUtils.createRoutes)(routes || children); | ||
this.transitionHooks = []; | ||
this.nextLocation = null; | ||
this.routes = (0, _RouteUtils.createRoutes)(routes || children); | ||
if (typeof history.setup === 'function') history.setup(); | ||
if (typeof history.setup === 'function') history.setup(); | ||
// We need to listen first in case we redirect immediately. | ||
if (history.addChangeListener) history.addChangeListener(this.handleHistoryChange); | ||
// We need to listen first in case we redirect immediately. | ||
if (history.addChangeListener) history.addChangeListener(this.handleHistoryChange); | ||
this._updateState(history.location); | ||
}, | ||
this._updateState(history.location); | ||
} else { | ||
(0, _invariant2['default'])(location && branch && params && components, 'Server-side <Router>s need location, branch, params, and components ' + 'props. Try using Router.run to get all the props you need'); | ||
componentDidMount: function componentDidMount() { | ||
// React doesn't fire the setState callback when we call setState | ||
// synchronously within componentWillMount, so we need this. Note | ||
// that we still only get one call to onUpdate, even if setState | ||
// was called multiple times in componentWillMount. | ||
if (this._alreadyUpdated && this.props.onUpdate) this.props.onUpdate.call(this); | ||
this.setState({ location: location, branch: branch, params: params, components: components }); | ||
} | ||
}, | ||
@@ -336,11 +274,13 @@ | ||
var currentRoutes = this.props.routes || this.props.children; | ||
var nextRoutes = nextProps.routes || nextProps.children; | ||
if (nextProps.history) { | ||
var currentRoutes = this.props.routes || this.props.children; | ||
var nextRoutes = nextProps.routes || nextProps.children; | ||
if (currentRoutes !== nextRoutes) { | ||
this.routes = (0, _RouteUtils.createRoutes)(nextRoutes); | ||
if (currentRoutes !== nextRoutes) { | ||
this.routes = (0, _RouteUtils.createRoutes)(nextRoutes); | ||
// Call this here because _updateState | ||
// uses this.routes to determine state. | ||
if (nextProps.history.location) this._updateState(nextProps.history.location); | ||
// Call this here because _updateState | ||
// uses this.routes to determine state. | ||
if (nextProps.history.location) this._updateState(nextProps.history.location); | ||
} | ||
} | ||
@@ -352,7 +292,11 @@ }, | ||
if (history.removeChangeListener) history.removeChangeListener(this.handleHistoryChange); | ||
if (history && history.removeChangeListener) history.removeChangeListener(this.handleHistoryChange); | ||
}, | ||
_createElement: function _createElement(component, props) { | ||
return typeof component === 'function' ? this.props.createElement(component, props) : null; | ||
}, | ||
render: function render() { | ||
var _this3 = this; | ||
var _this2 = this; | ||
@@ -386,3 +330,3 @@ var _state = this.state; | ||
for (var key in components) if (components.hasOwnProperty(key)) elements[key] = _this3._createElement(components[key], props); | ||
for (var key in components) if (components.hasOwnProperty(key)) elements[key] = _this2._createElement(components[key], props); | ||
@@ -392,3 +336,3 @@ return elements; | ||
return _this3._createElement(components, props); | ||
return _this2._createElement(components, props); | ||
}, element); | ||
@@ -404,6 +348,3 @@ } | ||
exports.Router = Router; | ||
exports['default'] = Router; | ||
// TODO: Mimic what we're doing in _updateState, but statically | ||
// so we can get the right props for doing server-side rendering. | ||
module.exports = exports['default']; |
@@ -7,3 +7,2 @@ 'use strict'; | ||
exports.getState = getState; | ||
exports.computeDiff = computeDiff; | ||
exports.createTransitionHook = createTransitionHook; | ||
@@ -14,4 +13,10 @@ exports.getTransitionHooks = getTransitionHooks; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } } | ||
var _invariant = require('invariant'); | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
var _RouteUtils = require('./RouteUtils'); | ||
@@ -159,3 +164,2 @@ | ||
*/ | ||
function computeDiff(prevState, nextState) { | ||
@@ -186,9 +190,9 @@ var fromRoutes = prevState && prevState.branch; | ||
function createTransitionHook(fn, context) { | ||
return function (nextState, router, callback) { | ||
return function (nextState, transition, callback) { | ||
if (fn.length > 2) { | ||
fn.call(context, nextState, router, callback); | ||
fn.call(context, nextState, transition, callback); | ||
} else { | ||
// Assume fn executes synchronously and | ||
// automatically call the callback for them. | ||
fn.call(context, nextState, router); | ||
fn.call(context, nextState, transition); | ||
callback(); | ||
@@ -212,4 +216,4 @@ } | ||
* | ||
* - route.onLeave(nextState, router[, callback ]) | ||
* - route.onEnter(nextState, router[, callback ]) | ||
* - route.onLeave(nextState, transition[, callback ]) | ||
* - route.onEnter(nextState, transition[, callback ]) | ||
* | ||
@@ -250,8 +254,2 @@ * Transition hooks run in order from the leaf route in the branch | ||
function getComponentsForRoutes(routes, callback) { | ||
(0, _AsyncUtils.mapAsync)(routes, function (route, index, callback) { | ||
getComponentsForRoute(route, callback); | ||
}, callback); | ||
} | ||
/** | ||
@@ -265,4 +263,6 @@ * Asynchronously fetches all components needed for the given router | ||
function getComponents(state, callback) { | ||
getComponentsForRoutes(state.branch, callback); | ||
function getComponents(routes, callback) { | ||
(0, _AsyncUtils.mapAsync)(routes, function (route, index, callback) { | ||
getComponentsForRoute(route, callback); | ||
}, callback); | ||
} | ||
@@ -269,0 +269,0 @@ |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactRouter=t(require("react")):e.ReactRouter=t(e.React)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(18),i=r(o);t.Router=i["default"];var a=n(13),u=r(a);t.Link=u["default"];var s=n(16),c=r(s);t.Redirect=c["default"];var l=n(17),f=r(l);t.Route=f["default"];var p=n(14),d=r(p);t.Navigation=d["default"];var h=n(21),y=r(h);t.TransitionHook=y["default"];var m=n(20),v=r(m);t.State=v["default"];var g=n(2);Object.defineProperty(t,"createRoutesFromReactChildren",{enumerable:!0,get:function(){return g.createRoutesFromReactChildren}});var b=n(3),_=r(b);t.PropTypes=_["default"];var x=r(o);t["default"]=x["default"]},function(t){t.exports=e},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return null==e||f.isValidElement(e)}function i(e){return o(e)||Array.isArray(e)&&e.every(o)}function a(e,t,n){e=e||"UnknownComponent";for(var r in t)if(t.hasOwnProperty(r)){var o=t[r](n,r,e);o instanceof Error&&h["default"](!1,o.message)}}function u(e){var t=e.type,n=l({},t.defaultProps,e.props);return t.propTypes&&a(t.displayName||t.name,t.propTypes,n),n.children&&(n.childRoutes=s(n.children),delete n.children),n}function s(e){var t=[];return p["default"].Children.forEach(e,function(e){f.isValidElement(e)&&t.push(e.type.createRouteFromReactElement?e.type.createRouteFromReactElement(e):u(e))}),t}function c(e){return i(e)?e=s(e):Array.isArray(e)||(e=[e]),e}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};t.isReactChildren=i,t.createRouteFromReactElement=u,t.createRoutesFromReactChildren=s,t.createRoutes=c;var f=n(1),p=r(f),d=n(7),h=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){return e[t]?new Error("<"+n+'> should not have a "'+t+'" prop'):void 0}var i=n(1),a=r(i),u=n(5),s=r(u),c=n(12),l=r(c),f=a["default"].PropTypes,p=f.any,d=f.func,h=f.object,y=(f.arrayOf,f.instanceOf),m=f.oneOfType,v=(f.oneOf,f.element,d),g=m([v,h]),b=y(l["default"]),_=y(s["default"]),x=p,O=p;e.exports={falsy:o,component:v,components:g,history:b,location:_,route:x,routes:O}},function(e){"use strict";var t=function(e,t,n,r,o,i,a,u){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,i,a,u],l=0;s=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return c[l++]}))}throw s.framesToPop=1,s}};e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(15),u=r(a),s=function(){function e(){var t=void 0===arguments[0]?"/":arguments[0],n=void 0===arguments[1]?null:arguments[1],r=void 0===arguments[2]?null:arguments[2],i=void 0===arguments[3]?u["default"].POP:arguments[3];o(this,e),this.pathname=t,this.query=n,this.state=r,this.navigationType=i}return i(e,null,[{key:"isLocation",value:function(t){return t instanceof e}}]),e}();t["default"]=s,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return m["default"].stringify(e,{arrayFormat:"brackets"})}function i(e){return e.replace(g,"")}function a(e){var t=e.match(g);return t?t[1]:""}function u(e){return e?e.replace(/^\/+/,""):""}function s(e){return"string"==typeof e&&"/"===e.charAt(0)}function c(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(e){return c(e).replace(/\/+/g,"/+")}function f(e){for(var t,n="",r=[],o=[],i=0,a=/:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*|\(|\)/g;t=a.exec(e);)t.index!==i&&(o.push(e.slice(i,t.index)),n+=l(e.slice(i,t.index))),t[1]?(n+="([^/?#]+)",r.push(t[1])):"*"===t[0]?(n+="(.*?)",r.push("splat")):"("===t[0]?n+="(?:":")"===t[0]&&(n+=")?"),o.push(t[0]),i=a.lastIndex;return i!==e.length&&(o.push(e.slice(i,e.length)),n+=l(e.slice(i,e.length))),{pattern:e,regexpSource:n,paramNames:r,tokens:o}}function p(e){return e in b||(b[e]=f(e)),b[e]}function d(e,t){var n=p(u(e)),r=n.regexpSource,o=n.paramNames,i=n.tokens;r+="/*";var a="*"!==i[i.length-1];a&&(r+="(.*?)");var s,c,l=t.match(new RegExp("^"+r+"$","i"));return null!=l&&(c=Array.prototype.slice.call(l,1),s=a?c.pop():t.replace(l[0],"")),{remainingPathname:s,paramNames:o,paramValues:c}}function h(e){return p(e).paramNames}Object.defineProperty(t,"__esModule",{value:!0}),t.stringifyQuery=o,t.getPathname=i,t.getQueryString=a,t.stripLeadingSlashes=u,t.isAbsolutePath=s,t.compilePattern=p,t.matchPattern=d,t.getParamNames=h;var y=n(23),m=r(y),v=m["default"].parse;t.parseQueryString=v;var g=/\?(.*)$/,b={}},function(e){"use strict";var t=!1,n=function(){};t&&(n=function(e,t,n){var r=arguments.length;n=new Array(r>2?r-2:0);for(var o=2;r>o;o++)n[o-2]=arguments[o];if(void 0===t)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(t.length<10||/^[s\W]*$/.test(t))throw new Error("The warning format should be able to uniquely identify this warning. Please, use a more descriptive format than: "+t);if(!e){var i=0,a="Warning: "+t.replace(/%s/g,function(){n[i++]});"undefined"!=typeof console&&console.error(a);try{throw new Error(a)}catch(u){}}}),e.exports=n},function(e,t){"use strict";function n(e,t,n){function r(){a=!0,n.apply(this,arguments)}function o(){a||(e>i?(i+=1,t.call(this,i-1,o,r)):r.apply(this,arguments))}var i=0,a=!1;o()}function r(e,t,n){function r(e,t,r){a||(t?(a=!0,n(t)):(i[e]=r,a=++u===o,a&&n(null,i)))}var o=e.length,i=[];if(0===o)return n(null,i);var a=!1,u=0;e.forEach(function(e,n){t(e,n,function(e,t){r(n,e,t)})})}function o(e,t,n){var o=Object.keys(e);r(o,function(n,r,o){t(e[n],o)},function(e,t){if(e)n(e);else{var r=t.reduce(function(e,t,n){return e[o[n]]=t,e},{});n(null,r)}})}Object.defineProperty(t,"__esModule",{value:!0}),t.loopAsync=n,t.mapAsync=r,t.hashAsync=o},function(e,t){t.arrayToObject=function(e){for(var t={},n=0,r=e.length;r>n;++n)"undefined"!=typeof e[n]&&(t[n]=e[n]);return t},t.merge=function(e,n){if(!n)return e;if("object"!=typeof n)return Array.isArray(e)?e.push(n):e[n]=!0,e;if("object"!=typeof e)return e=[e].concat(n);Array.isArray(e)&&!Array.isArray(n)&&(e=t.arrayToObject(e));for(var r=Object.keys(n),o=0,i=r.length;i>o;++o){var a=r[o],u=n[a];e[a]=e[a]?t.merge(e[a],u):u}return e},t.decode=function(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(t){return e}},t.compact=function(e,n){if("object"!=typeof e||null===e)return e;n=n||[];var r=n.indexOf(e);if(-1!==r)return n[r];if(n.push(e),Array.isArray(e)){for(var o=[],i=0,a=e.length;a>i;++i)"undefined"!=typeof e[i]&&o.push(e[i]);return o}var u=Object.keys(e);for(i=0,a=u.length;a>i;++i){var s=u[i];e[s]=t.compact(e[s],n)}return e},t.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},t.isBuffer=function(e){return null===e||"undefined"==typeof e?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}},function(e,t,n){"use strict";function r(e,t){return 0===i.stripLeadingSlashes(t).indexOf(i.stripLeadingSlashes(e))?!0:!1}function o(e,t){if(null==t)return null==e;if(null==e)return!0;for(var n in e)if(e.hasOwnProperty(n)&&String(e[n])!==String(t[n]))return!1;return!0}Object.defineProperty(t,"__esModule",{value:!0}),t.pathnameIsActive=r,t.queryIsActive=o;var i=n(6)},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(){n(this,e),this.changeListeners=[]}return r(e,[{key:"_notifyChange",value:function(){for(var e=0,t=this.changeListeners.length;t>e;++e)this.changeListeners[e].call(this)}},{key:"addChangeListener",value:function(e){this.changeListeners.push(e)}},{key:"removeChangeListener",value:function(e){this.changeListeners=this.changeListeners.filter(function(t){return t!==e})}}]),e}();t["default"]=o,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}function a(){return Math.random().toString(36).substr(2)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=function(e,t,n){for(var r=!0;r;){var o=e,i=t,a=n;u=c=s=void 0,r=!1;var u=Object.getOwnPropertyDescriptor(o,i);if(void 0!==u){if("value"in u)return u.value;var s=u.get;return void 0===s?void 0:s.call(a)}var c=Object.getPrototypeOf(o);if(null===c)return void 0;e=c,t=i,n=a,r=!0}},c=n(4),l=r(c),f=n(6),p=n(11),d=r(p),h=n(5),y=r(h),m=["pushState","replaceState","go"],v=function(e){function t(){var e=void 0===arguments[0]?{}:arguments[0];o(this,t),s(Object.getPrototypeOf(t.prototype),"constructor",this).call(this),this.parseQueryString=e.parseQueryString||f.parseQueryString,this.stringifyQuery=e.stringifyQuery||f.stringifyQuery,this.location=null,m.forEach(function(e){l["default"]("function"==typeof this[e],'%s needs a "%s" method',this.constructor.name,e)},this)}return i(t,e),u(t,[{key:"back",value:function(){this.go(-1)}},{key:"forward",value:function(){this.go(1)}},{key:"_createState",value:function(e){return e=e||{},e.key||(e.key=a()),e}},{key:"_createLocation",value:function(e,t,n){var r=f.getPathname(e),o=f.getQueryString(e),i=o?this.parseQueryString(o):null;return new y["default"](r,i,t,n)}},{key:"makePath",value:function(e,t){return t&&("string"!=typeof t&&(t=this.stringifyQuery(t)),""!==t)?e+"?"+t:e}},{key:"makeHref",value:function(e,t){return this.makePath(e,t)}}]),t}(d["default"]);t["default"]=v,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return 0===e.button}function i(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=n(1),s=r(u),c=s["default"].PropTypes,l=c.object,f=c.string,p=c.func,d=s["default"].createClass({displayName:"Link",contextTypes:{router:l},propTypes:{activeStyle:l,activeClassName:f,to:f.isRequired,query:l,state:l,onClick:p},getDefaultProps:function(){return{className:"",activeClassName:"active",style:{}}},handleClick:function(e){var t,n=!0;this.props.onClick&&(t=this.props.onClick(e)),!i(e)&&o(e)&&((t===!1||e.defaultPrevented===!0)&&(n=!1),e.preventDefault(),n&&this.context.router.transitionTo(this.props.to,this.props.query,this.props.state))},render:function(){var e=this.context.router,t=this.props,n=t.to,r=t.query,o=a({},this.props,{href:e.makeHref(n,r),onClick:this.handleClick});return e&&e.isActive(n,r)&&(o.activeClassName&&(o.className+=" "+o.activeClassName),o.activeStyle&&a(o.style,o.activeStyle)),s["default"].createElement("a",o)}});t.Link=d,t["default"]=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=i["default"].PropTypes.object,u={contextTypes:{router:a.isRequired}},s=["makePath","makeHref","transitionTo","replaceWith","go","goBack","goForward"];s.forEach(function(e){u[e]=function(){var t=this.context.router;return t[e].apply(t,arguments)}}),t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(22),i=r(o),a=i["default"]({PUSH:null,REPLACE:null,POP:null});t["default"]=a,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(4),u=r(a),s=n(2),c=n(3),l=i["default"].PropTypes.string,f=i["default"].createClass({displayName:"Redirect",statics:{createRouteFromReactElement:function(e){var t=s.createRouteFromReactElement(e);return t.from&&(t.path=t.from),t.onEnter=function(e,n){n.replaceWith(t.to,e.query)},t}},propTypes:{from:l,to:l.isRequired,onEnter:c.falsy,children:c.falsy},render:function(){u["default"](!1,"<Redirect> elements are for router configuration only and should not be rendered")}});t.Redirect=f,t["default"]=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(4),u=r(a),s=n(2),c=n(3),l=i["default"].PropTypes,f=l.string,p=l.bool,d=l.func,h=i["default"].createClass({displayName:"Route",statics:{createRouteFromReactElement:function(e){var t=s.createRouteFromReactElement(e);return t.handler&&(warning(!1,"<Route handler> is deprecated, use <Route component> instead"),t.component=t.handler,delete t.handler),t}},propTypes:{path:f,ignoreScrollBehavior:p,handler:c.component,component:c.component,components:c.components,getComponents:d},render:function(){u["default"](!1,"<Route> elements are for router configuration only and should not be rendered")}});t.Route=h,t["default"]=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i=n(1),a=r(i),u=n(7),s=r(u),c=n(4),l=r(c),f=n(8),p=n(2),d=n(10),h=n(19),y=n(3),m=n(5),v=r(m),g=a["default"].PropTypes,b=g.any,_=(g.array,g.func),x=g.object,O=(g.instanceOf,{childContextTypes:{router:x.isRequired},getChildContext:function(){return{router:this}},makePath:function(e,t){return this.props.history.makePath(e,t)},makeHref:function(e,t){return this.props.history.makeHref(e,t)},transitionTo:function(e,t){var n=void 0===arguments[2]?null:arguments[2],r=this.props.history,o=this.makePath(e,t);this.nextLocation?r.replaceState(n,o):r.pushState(n,o)},replaceWith:function(e,t){var n=void 0===arguments[2]?null:arguments[2],r=this.props.history,o=this.makePath(e,t);r.replaceState(n,o)},go:function(e){this.props.history.go(e)},goBack:function(){this.go(-1)},goForward:function(){this.go(1)},isActive:function(e,t){var n=this.state.location;return null==n?!1:d.pathnameIsActive(e,n.pathname)&&d.queryIsActive(t,n.query)}}),P=a["default"].createClass({displayName:"Router",mixins:[O],statics:{match:function(){}},propTypes:{history:y.history.isRequired,children:y.routes,routes:y.routes,createElement:_.isRequired,onError:_.isRequired,onUpdate:_,location:b,branch:y.routes,params:x,components:y.components},getDefaultProps:function(){return{createElement:i.createElement,onError:function(e){throw e}}},getInitialState:function(){return{location:null,branch:null,params:null,components:null,isTransitioning:!1}},_updateState:function(e){var t=this;l["default"](v["default"].isLocation(e),"A <Router> needs a valid Location"),this.nextLocation=e,this.setState({isTransitioning:!0}),this._getState(this.routes,e,function(n,r){n||t.nextLocation!==e?t._finishTransition(n):null==r?(s["default"](!1,'Location "%s" did not match any routes',e.pathname),t._finishTransition()):(r.location=e,t._runTransitionHooks(r,function(n){n||t.nextLocation!==e?t._finishTransition(n):t._getComponents(r,function(n,o){n||t.nextLocation!==e?t._finishTransition(n):(r.components=o,t._finishTransition(null,r))})}))})},_finishTransition:function(e,t){this.setState({isTransitioning:!1}),this.nextLocation=null,e?this.handleError(e):t&&(this.setState(t,this.props.onUpdate),this._alreadyUpdated=!0)},_getState:function(e,t,n){var r=this.props,o=r.branch,i=r.params;o&&i&&query?n(null,{branch:o,params:i}):h.getState(e,t,n)},_runTransitionHooks:function(e,t){var n=this,r=this.transitionHooks.map(function(e){return h.createTransitionHook(e,n)});r.push.apply(r,h.getTransitionHooks(this.state,e));var o=this.nextLocation;f.loopAsync(r.length,function(t,i,a){r[t];r[t].call(n,e,n,function(e){e||n.nextLocation!==o?a.call(n,e):i.call(n)})},t)},_getComponents:function(e,t){this.props.components?t(null,this.props.components):h.getComponents(e,t)},_createElement:function(e,t){return"function"==typeof e?this.props.createElement(e,t):null},addTransitionHook:function(e){this.transitionHooks.push(e)},removeTransitionHook:function(e){this.transitionHooks=this.transitionHooks.filter(function(t){return t!==e})},cancelTransition:function(){l["default"](this.state.location,"Router#cancelTransition: You may not cancel the initial transition"),this.nextLocation?(this.nextLocation=null,this._ignoreNextHistoryChange=!0,this.goBack()):s["default"](!1,"Router#cancelTransition: Router is not transitioning")},handleHistoryChange:function(){this._ignoreNextHistoryChange?this._ignoreNextHistoryChange=!1:this._updateState(this.props.history.location)},componentWillMount:function(){var e=this.props,t=e.history,n=e.routes,r=e.children;l["default"](n||r,"A <Router> needs some routes"),this.routes=p.createRoutes(n||r),this.transitionHooks=[],this.nextLocation=null,"function"==typeof t.setup&&t.setup(),t.addChangeListener&&t.addChangeListener(this.handleHistoryChange),this._updateState(t.location)},componentDidMount:function(){this._alreadyUpdated&&this.props.onUpdate&&this.props.onUpdate.call(this)},componentWillReceiveProps:function(e){l["default"](this.props.history===e.history,"<Router history> may not be changed");var t=this.props.routes||this.props.children,n=e.routes||e.children;t!==n&&(this.routes=p.createRoutes(n),e.history.location&&this._updateState(e.history.location))},componentWillUnmount:function(){var e=this.props.history;e.removeChangeListener&&e.removeChangeListener(this.handleHistoryChange)},render:function(){var e=this,t=this.state,n=t.location,r=t.branch,a=t.params,u=t.components,s=t.isTransitioning,c=null;return u&&(c=u.reduceRight(function(t,u,c){if(null==u)return t;var l=r[c],f=h.getRouteParams(l,a),p={location:n,params:a,route:l,routeParams:f,isTransitioning:s};if(i.isValidElement(t)?p.children=t:t&&o(p,t),"object"==typeof u){var d={};for(var y in u)u.hasOwnProperty(y)&&(d[y]=e._createElement(u[y],p));return d}return e._createElement(u,p)},c)),l["default"](null===c||c===!1||i.isValidElement(c),"The root route must render a single element"),c}});t.Router=P,t["default"]=P},function(e,t,n){"use strict";function r(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(s){o=!0,i=s}finally{try{!r&&u["return"]&&u["return"]()}finally{if(o)throw i}}return n}throw new TypeError("Invalid attempt to destructure non-iterable instance")}function o(e,t,n){e.childRoutes?n(null,e.childRoutes):e.getChildRoutes?e.getChildRoutes(t,n):n()}function i(e,t,n){e.indexRoute?n(null,e.indexRoute):e.getIndexRoute?e.getIndexRoute(n,t):n()}function a(e,t,n){return t.reduceRight(function(e,t,r){var o=n[r];return Array.isArray(e[t])?e[t].unshift(o):e[t]=t in e?[o,e[t]]:o,e},e)}function u(e,t){return a({},e,t)}function s(e,t,n,r){var s=x.matchPattern(e.path,t),l=s.remainingPathname,f=s.paramNames,p=s.paramValues,d=""===l;if(d&&e.path){var h=u(f,p),y=[e];i(e,n,function(e,t){e?r(e):(t&&y.push(t),r(null,{params:h,branch:y}))})}else null!=l?o(e,n,function(t,o){t?r(t):o?c(o,l,n,function(t,n){t?r(t):n?(a(n.params,f,p),n.branch.unshift(e),r(null,n)):r()}):r()}):r()}function c(e,t,n,r){e=_.createRoutes(e),O.loopAsync(e.length,function(r,o,i){s(e[r],t,n,function(e,t){e||t?i(e,t):o()})},r)}function l(e,t,n){c(e,x.stripLeadingSlashes(t.pathname),t.state,n)}function f(e,t,n){if(!e.path)return!1;var r=x.getParamNames(e.path);return r.some(function(e){return t.params[e]!==n.params[e]})}function p(e,t){var n,r,o=e&&e.branch,i=t.branch;return o?(n=o.filter(function(n){return-1===i.indexOf(n)||f(n,e,t)}),n.reverse(),r=i.filter(function(e){return-1===o.indexOf(e)||-1!==n.indexOf(e)})):(n=[],r=i),[n,r]}function d(e,t){return function(n,r,o){e.length>2?e.call(t,n,r,o):(e.call(t,n,r),o())}}function h(e,t){return e.reduce(function(e,n){return n[t]&&e.push(d(n[t],n)),e},[])}function y(e,t){var n=p(e,t),o=r(n,2),i=o[0],a=o[1],u=h(i,"onLeave");return u.push.apply(u,h(a,"onEnter")),u}function m(e,t){e.component||e.components?t(null,e.component||e.components):e.getComponents?e.getComponents(t):t()}function v(e,t){O.mapAsync(e,function(e,t,n){m(e,n)},t)}function g(e,t){v(e.branch,t)}function b(e,t){var n={};if(!e.path)return n;var r=x.getParamNames(e.path);for(var o in t)t.hasOwnProperty(o)&&-1!==r.indexOf(o)&&(n[o]=t[o]);return n}Object.defineProperty(t,"__esModule",{value:!0}),t.getState=l,t.computeDiff=p,t.createTransitionHook=d,t.getTransitionHooks=y,t.getComponents=g,t.getRouteParams=b;var _=n(2),x=n(6),O=n(8)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=i["default"].PropTypes.object,u={contextTypes:{router:a.isRequired}},s=["isActive"];s.forEach(function(e){u[e]=function(){var t=this.context.router;return t[e].apply(t,arguments)}}),t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(7),u=r(a),s=i["default"].PropTypes.object,c={contextTypes:{router:s.isRequired},componentDidMount:function(){u["default"]("function"==typeof this.routerWillLeave,"Components that mixin TransitionHook should have a routerWillLeave method, check %s",this.constructor.displayName||this.constructor.name),this.routerWillLeave&&this.context.router.addTransitionHook(this.routerWillLeave)},componentWillUnmount:function(){this.routerWillLeave&&this.context.router.removeTransitionHook(this.routerWillLeave)}};t["default"]=c,e.exports=t["default"]},function(e){"use strict";var t=function(e){var t,n={};if(!(e instanceof Object)||Array.isArray(e))throw new Error("keyMirror(...): Argument must be an object.");for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};e.exports=t},function(e,t,n){e.exports=n(24)},function(e,t,n){var r=n(26),o=n(25);e.exports={stringify:r,parse:o}},function(e,t,n){var r=n(9),o={delimiter:"&",depth:5,arrayLimit:20,parameterLimit:1e3};o.parseValues=function(e,t){for(var n={},o=e.split(t.delimiter,1/0===t.parameterLimit?void 0:t.parameterLimit),i=0,a=o.length;a>i;++i){var u=o[i],s=-1===u.indexOf("]=")?u.indexOf("="):u.indexOf("]=")+1;if(-1===s)n[r.decode(u)]="";else{var c=r.decode(u.slice(0,s)),l=r.decode(u.slice(s+1));if(Object.prototype.hasOwnProperty(c))continue;n[c]=n.hasOwnProperty(c)?[].concat(n[c]).concat(l):l}}return n},o.parseObject=function(e,t,n){if(!e.length)return t;var r=e.shift(),i={};if("[]"===r)i=[],i=i.concat(o.parseObject(e,t,n));else{var a="["===r[0]&&"]"===r[r.length-1]?r.slice(1,r.length-1):r,u=parseInt(a,10),s=""+u;!isNaN(u)&&r!==a&&s===a&&u>=0&&u<=n.arrayLimit?(i=[],i[u]=o.parseObject(e,t,n)):i[a]=o.parseObject(e,t,n)}return i},o.parseKeys=function(e,t,n){if(e){var r=/^([^\[\]]*)/,i=/(\[[^\[\]]*\])/g,a=r.exec(e);if(!Object.prototype.hasOwnProperty(a[1])){var u=[];a[1]&&u.push(a[1]);for(var s=0;null!==(a=i.exec(e))&&s<n.depth;)++s,Object.prototype.hasOwnProperty(a[1].replace(/\[|\]/g,""))||u.push(a[1]);return a&&u.push("["+e.slice(a.index)+"]"),o.parseObject(u,t,n)}}},e.exports=function(e,t){if(""===e||null===e||"undefined"==typeof e)return{};t=t||{},t.delimiter="string"==typeof t.delimiter||r.isRegExp(t.delimiter)?t.delimiter:o.delimiter,t.depth="number"==typeof t.depth?t.depth:o.depth,t.arrayLimit="number"==typeof t.arrayLimit?t.arrayLimit:o.arrayLimit,t.parameterLimit="number"==typeof t.parameterLimit?t.parameterLimit:o.parameterLimit;for(var n="string"==typeof e?o.parseValues(e,t):e,i={},a=Object.keys(n),u=0,s=a.length;s>u;++u){var c=a[u],l=o.parseKeys(c,n[c],t);i=r.merge(i,l)}return r.compact(i)}},function(e,t,n){var r=n(9),o={delimiter:"&",arrayPrefixGenerators:{brackets:function(e){return e+"[]"},indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}}};o.stringify=function(e,t,n){if(r.isBuffer(e)?e=e.toString():e instanceof Date?e=e.toISOString():null===e&&(e=""),"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return[encodeURIComponent(t)+"="+encodeURIComponent(e)];var i=[];if("undefined"==typeof e)return i;for(var a=Object.keys(e),u=0,s=a.length;s>u;++u){var c=a[u];i=i.concat(Array.isArray(e)?o.stringify(e[c],n(t,c),n):o.stringify(e[c],t+"["+c+"]",n))}return i},e.exports=function(e,t){t=t||{};var n="undefined"==typeof t.delimiter?o.delimiter:t.delimiter,r=[];if("object"!=typeof e||null===e)return"";var i;i=t.arrayFormat in o.arrayPrefixGenerators?t.arrayFormat:"indices"in t?t.indices?"indices":"repeat":"indices";for(var a=o.arrayPrefixGenerators[i],u=Object.keys(e),s=0,c=u.length;c>s;++s){var l=u[s];r=r.concat(o.stringify(e[l],l,a))}return r.join(n)}}])}); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactRouter=t(require("react")):e.ReactRouter=t(e.React)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(17),i=r(o);t.Router=i["default"];var a=n(13),u=r(a);t.Link=u["default"];var s=n(15),c=r(s);t.Redirect=c["default"];var l=n(16),f=r(l);t.Route=f["default"];var p=n(14),d=r(p);t.Navigation=d["default"];var h=n(23),y=r(h);t.TransitionHook=y["default"];var m=n(21),v=r(m);t.State=v["default"];var g=n(3);Object.defineProperty(t,"createRoutesFromReactChildren",{enumerable:!0,get:function(){return g.createRoutesFromReactChildren}});var b=n(4),P=r(b);t.PropTypes=P["default"];var R=r(o);t["default"]=R["default"]},function(t){t.exports=e},function(e){"use strict";var t=function(e,t,n,r,o,i,a,u){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,i,a,u],l=0;s=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return c[l++]}))}throw s.framesToPop=1,s}};e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return null==e||f.isValidElement(e)}function i(e){return o(e)||Array.isArray(e)&&e.every(o)}function a(e,t,n){e=e||"UnknownComponent";for(var r in t)if(t.hasOwnProperty(r)){var o=t[r](n,r,e);o instanceof Error&&h["default"](!1,o.message)}}function u(e){var t=e.type,n=l({},t.defaultProps,e.props);return t.propTypes&&a(t.displayName||t.name,t.propTypes,n),n.children&&(n.childRoutes=s(n.children),delete n.children),n}function s(e){var t=[];return p["default"].Children.forEach(e,function(e){f.isValidElement(e)&&t.push(e.type.createRouteFromReactElement?e.type.createRouteFromReactElement(e):u(e))}),t}function c(e){return i(e)?e=s(e):Array.isArray(e)||(e=[e]),e}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};t.isReactChildren=i,t.createRouteFromReactElement=u,t.createRoutesFromReactChildren=s,t.createRoutes=c;var f=n(1),p=r(f),d=n(7),h=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){return e[t]?new Error("<"+n+'> should not have a "'+t+'" prop'):void 0}var i=n(1),a=r(i),u=n(5),s=r(u),c=n(12),l=r(c),f=a["default"].PropTypes,p=f.func,d=f.object,h=f.arrayOf,y=f.instanceOf,m=f.oneOfType,v=f.element,g=p,b=m([g,d]),P=y(l["default"]),R=y(s["default"]),O=m([d,v]),_=m([O,h(O)]);e.exports={falsy:o,component:g,components:b,history:P,location:R,route:O,routes:_}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(9),u=r(a),s=function(){function e(){var t=void 0===arguments[0]?"/":arguments[0],n=void 0===arguments[1]?null:arguments[1],r=void 0===arguments[2]?null:arguments[2],i=void 0===arguments[3]?u["default"].POP:arguments[3];o(this,e),this.pathname=t,this.query=n,this.state=r,this.navigationType=i}return i(e,null,[{key:"isLocation",value:function(t){return t instanceof e}}]),e}();t["default"]=s,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return m["default"].stringify(e,{arrayFormat:"brackets"})}function i(e){return e.replace(g,"")}function a(e){var t=e.match(g);return t?t[1]:""}function u(e){return e?e.replace(/^\/+/,""):""}function s(e){return"string"==typeof e&&"/"===e.charAt(0)}function c(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(e){return c(e).replace(/\/+/g,"/+")}function f(e){for(var t,n="",r=[],o=[],i=0,a=/:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*|\(|\)/g;t=a.exec(e);)t.index!==i&&(o.push(e.slice(i,t.index)),n+=l(e.slice(i,t.index))),t[1]?(n+="([^/?#]+)",r.push(t[1])):"*"===t[0]?(n+="(.*?)",r.push("splat")):"("===t[0]?n+="(?:":")"===t[0]&&(n+=")?"),o.push(t[0]),i=a.lastIndex;return i!==e.length&&(o.push(e.slice(i,e.length)),n+=l(e.slice(i,e.length))),{pattern:e,regexpSource:n,paramNames:r,tokens:o}}function p(e){return e in b||(b[e]=f(e)),b[e]}function d(e,t){var n=p(u(e)),r=n.regexpSource,o=n.paramNames,i=n.tokens;r+="/*";var a="*"!==i[i.length-1];a&&(r+="(.*?)");var s,c,l=t.match(new RegExp("^"+r+"$","i"));return null!=l&&(c=Array.prototype.slice.call(l,1),s=a?c.pop():t.replace(l[0],"")),{remainingPathname:s,paramNames:o,paramValues:c}}function h(e){return p(e).paramNames}Object.defineProperty(t,"__esModule",{value:!0}),t.stringifyQuery=o,t.getPathname=i,t.getQueryString=a,t.stripLeadingSlashes=u,t.isAbsolutePath=s,t.compilePattern=p,t.matchPattern=d,t.getParamNames=h;var y=n(25),m=r(y),v=m["default"].parse;t.parseQueryString=v;var g=/\?(.*)$/,b={}},function(e){"use strict";var t=!1,n=function(){};t&&(n=function(e,t,n){var r=arguments.length;n=new Array(r>2?r-2:0);for(var o=2;r>o;o++)n[o-2]=arguments[o];if(void 0===t)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(t.length<10||/^[s\W]*$/.test(t))throw new Error("The warning format should be able to uniquely identify this warning. Please, use a more descriptive format than: "+t);if(!e){var i=0,a="Warning: "+t.replace(/%s/g,function(){n[i++]});"undefined"!=typeof console&&console.error(a);try{throw new Error(a)}catch(u){}}}),e.exports=n},function(e,t){"use strict";function n(e,t,n){function r(){a=!0,n.apply(this,arguments)}function o(){a||(e>i?(i+=1,t.call(this,i-1,o,r)):r.apply(this,arguments))}var i=0,a=!1;o()}function r(e,t,n){function r(e,t,r){a||(t?(a=!0,n(t)):(i[e]=r,a=++u===o,a&&n(null,i)))}var o=e.length,i=[];if(0===o)return n(null,i);var a=!1,u=0;e.forEach(function(e,n){t(e,n,function(e,t){r(n,e,t)})})}function o(e,t,n){var o=Object.keys(e);r(o,function(n,r,o){t(e[n],o)},function(e,t){if(e)n(e);else{var r=t.reduce(function(e,t,n){return e[o[n]]=t,e},{});n(null,r)}})}Object.defineProperty(t,"__esModule",{value:!0}),t.loopAsync=n,t.mapAsync=r,t.hashAsync=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(24),i=r(o),a=i["default"]({PUSH:null,REPLACE:null,POP:null});t["default"]=a,e.exports=t["default"]},function(e,t){t.arrayToObject=function(e){for(var t={},n=0,r=e.length;r>n;++n)"undefined"!=typeof e[n]&&(t[n]=e[n]);return t},t.merge=function(e,n){if(!n)return e;if("object"!=typeof n)return Array.isArray(e)?e.push(n):e[n]=!0,e;if("object"!=typeof e)return e=[e].concat(n);Array.isArray(e)&&!Array.isArray(n)&&(e=t.arrayToObject(e));for(var r=Object.keys(n),o=0,i=r.length;i>o;++o){var a=r[o],u=n[a];e[a]=e[a]?t.merge(e[a],u):u}return e},t.decode=function(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(t){return e}},t.compact=function(e,n){if("object"!=typeof e||null===e)return e;n=n||[];var r=n.indexOf(e);if(-1!==r)return n[r];if(n.push(e),Array.isArray(e)){for(var o=[],i=0,a=e.length;a>i;++i)"undefined"!=typeof e[i]&&o.push(e[i]);return o}var u=Object.keys(e);for(i=0,a=u.length;a>i;++i){var s=u[i];e[s]=t.compact(e[s],n)}return e},t.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},t.isBuffer=function(e){return null===e||"undefined"==typeof e?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}},function(e,t){"use strict";function n(){return decodeURI(window.location.href.split("#")[1]||"")}function r(e){window.location.replace(window.location.pathname+window.location.search+"#"+e)}function o(){return decodeURI(window.location.pathname+window.location.search)}function i(){return{scrollX:window.pageXOffset||document.documentElement.scrollLeft,scrollY:window.pageYOffset||document.documentElement.scrollTop}}function a(e,t){window.scrollTo(e,t)}function u(){var e=navigator.userAgent;return-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone")?window.history&&"pushState"in window.history:!1}Object.defineProperty(t,"__esModule",{value:!0}),t.getHashPath=n,t.replaceHashPath=r,t.getWindowPath=o,t.getWindowScrollPosition=i,t.setWindowScrollPosition=a,t.supportsHistory=u;var s=!("undefined"==typeof window||!window.document||!window.document.createElement);t.canUseDOM=s},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(){return Math.random().toString(36).substr(2)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(2),s=r(u),c=n(6),l=n(5),f=r(l),p=["pushState","replaceState","go"],d=function(){function e(){var t=void 0===arguments[0]?{}:arguments[0];o(this,e),p.forEach(function(e){s["default"]("function"==typeof this[e],'%s needs a "%s" method',this.constructor.name,e)},this),this.parseQueryString=t.parseQueryString||c.parseQueryString,this.changeListeners=[],this.location=null}return a(e,[{key:"_notifyChange",value:function(){for(var e=0,t=this.changeListeners.length;t>e;++e)this.changeListeners[e].call(this)}},{key:"addChangeListener",value:function(e){this.changeListeners.push(e)}},{key:"removeChangeListener",value:function(e){this.changeListeners=this.changeListeners.filter(function(t){return t!==e})}},{key:"back",value:function(){this.go(-1)}},{key:"forward",value:function(){this.go(1)}},{key:"_createState",value:function(e){return e=e||{},e.key||(e.key=i()),e}},{key:"createLocation",value:function(e,t,n){var r=c.getPathname(e),o=c.getQueryString(e),i=o?this.parseQueryString(o):null;return new f["default"](r,i,t,n)}}]),e}();t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return 0===e.button}function i(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=n(1),s=r(u),c=s["default"].PropTypes,l=c.object,f=c.string,p=c.func,d=s["default"].createClass({displayName:"Link",contextTypes:{router:l},propTypes:{activeStyle:l,activeClassName:f,to:f.isRequired,query:l,state:l,onClick:p},getDefaultProps:function(){return{className:"",activeClassName:"active",style:{}}},handleClick:function(e){var t,n=!0;this.props.onClick&&(t=this.props.onClick(e)),!i(e)&&o(e)&&((t===!1||e.defaultPrevented===!0)&&(n=!1),e.preventDefault(),n&&this.context.router.transitionTo(this.props.to,this.props.query,this.props.state))},render:function(){var e=this.context.router,t=this.props,n=t.to,r=t.query,o=a({},this.props,{href:e.makeHref(n,r),onClick:this.handleClick});return e&&e.isActive(n,r)&&(o.activeClassName&&(o.className+=" "+o.activeClassName),o.activeStyle&&a(o.style,o.activeStyle)),s["default"].createElement("a",o)}});t.Link=d,t["default"]=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=i["default"].PropTypes.object,u={contextTypes:{router:a.isRequired}},s=["makePath","makeHref","transitionTo","replaceWith","go","goBack","goForward"];s.forEach(function(e){u[e]=function(){var t=this.context.router;return t[e].apply(t,arguments)}}),t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(2),u=r(a),s=n(3),c=n(4),l=i["default"].PropTypes.string,f=i["default"].createClass({displayName:"Redirect",statics:{createRouteFromReactElement:function(e){var t=s.createRouteFromReactElement(e);return t.from&&(t.path=t.from),t.onEnter=function(e,n){n.replaceWith(t.to,e.query)},t}},propTypes:{from:l,to:l.isRequired,onEnter:c.falsy,children:c.falsy},render:function(){u["default"](!1,"<Redirect> elements are for router configuration only and should not be rendered")}});t.Redirect=f,t["default"]=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(2),u=r(a),s=n(3),c=n(4),l=i["default"].PropTypes,f=l.string,p=l.bool,d=l.func,h=i["default"].createClass({displayName:"Route",statics:{createRouteFromReactElement:function(e){var t=s.createRouteFromReactElement(e);return t.handler&&(warning(!1,"<Route handler> is deprecated, use <Route component> instead"),t.component=t.handler,delete t.handler),t}},propTypes:{path:f,ignoreScrollBehavior:p,handler:c.component,component:c.component,components:c.components,getComponents:d},render:function(){u["default"](!1,"<Route> elements are for router configuration only and should not be rendered")}});t.Route=h,t["default"]=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n,r,o){var i=new O["default"];h.getState(t,n,function(t,a){if(t||null==a||i.isCancelled)o(t,null,i);else{a.location=n;var u=h.getTransitionHooks(e,a);Array.isArray(r)&&u.unshift.apply(u,r),p.loopAsync(u.length,function(e,t,n){u[e](a,i,function(e){e||i.isCancelled?n(e):t()})},function(e){e||i.isCancelled?o(e,null,i):h.getComponents(a.branch,function(e,t){e||i.isCancelled?o(e,null,i):(a.components=t,o(null,a,i))})})}})}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=n(1),u=r(a),s=n(7),c=r(s),l=n(2),f=r(l),p=n(8),d=n(3),h=n(19),y=n(4),m=n(18),v=r(m),g=n(20),b=r(g),P=n(5),R=n(22),O=r(R),_=u["default"].PropTypes,w=_.arrayOf,x=_.func,k=_.object,j=u["default"].createClass({displayName:"Router",mixins:[v["default"],b["default"]],statics:{run:function(e,t,n,r){"function"==typeof n&&(r=n,n=null),f["default"]("function"==typeof r,"Router.run needs a callback"),o(null,e,t,n,r)}},propTypes:{createElement:x.isRequired,onAbort:x,onError:x,onUpdate:x,history:y.history,routes:y.routes,children:y.routes,location:y.location,branch:y.routes,params:k,components:w(y.components)},getDefaultProps:function(){return{createElement:a.createElement}},getInitialState:function(){return{isTransitioning:!1,location:null,branch:null,params:null,components:null}},_updateState:function(e){var t=this;f["default"](P.isLocation(e),"A <Router> needs a valid Location");var n=this.transitionHooks;n&&(n=n.map(function(e){return h.createTransitionHook(e,t)})),this.setState({isTransitioning:!0}),o(this.state,this.routes,e,n,function(n,r,o){if(n)t.handleError(n);else if(o.isCancelled)if(o.redirectInfo){var i=o.redirectInfo,a=i.pathname,u=i.query,r=i.state;t.replaceWith(a,u,r)}else f["default"](t.state.location,"You may not abort the initial transition"),t.handleAbort(reason);else null==r?c["default"](!1,'Location "%s" did not match any routes',e.pathname):t.setState(r,t.props.onUpdate);t.setState({isTransitioning:!1})})},addTransitionHook:function(e){this.transitionHooks||(this.transitionHooks=[]),this.transitionHooks.push(e)},removeTransitionHook:function(e){this.transitionHooks&&(this.transitionHooks=this.transitionHooks.filter(function(t){return t!==e}))},handleAbort:function(e){this.props.onAbort?this.props.onAbort.call(this,e):(this._ignoreNextHistoryChange=!0,this.goBack())},handleError:function(e){if(!this.props.onError)throw e;this.props.onError.call(this,e)},handleHistoryChange:function(){this._ignoreNextHistoryChange?this._ignoreNextHistoryChange=!1:this._updateState(this.props.history.location)},componentWillMount:function(){var e=this.props,t=e.history,n=e.routes,r=e.children,o=e.location,i=e.branch,a=e.params,u=e.components;t?(f["default"](n||r,"Client-side <Router>s need routes. Try using <Router routes> or passing your routes as nested <Route> children"),this.routes=d.createRoutes(n||r),"function"==typeof t.setup&&t.setup(),t.addChangeListener&&t.addChangeListener(this.handleHistoryChange),this._updateState(t.location)):(f["default"](o&&i&&a&&u,"Server-side <Router>s need location, branch, params, and components props. Try using Router.run to get all the props you need"),this.setState({location:o,branch:i,params:a,components:u}))},componentWillReceiveProps:function(e){if(f["default"](this.props.history===e.history,"<Router history> may not be changed"),e.history){var t=this.props.routes||this.props.children,n=e.routes||e.children;t!==n&&(this.routes=d.createRoutes(n),e.history.location&&this._updateState(e.history.location))}},componentWillUnmount:function(){var e=this.props.history;e&&e.removeChangeListener&&e.removeChangeListener(this.handleHistoryChange)},_createElement:function(e,t){return"function"==typeof e?this.props.createElement(e,t):null},render:function(){var e=this,t=this.state,n=t.location,r=t.branch,o=t.params,u=t.components,s=t.isTransitioning,c=null;return u&&(c=u.reduceRight(function(t,u,c){if(null==u)return t;var l=r[c],f=h.getRouteParams(l,o),p={location:n,params:o,route:l,routeParams:f,isTransitioning:s};if(a.isValidElement(t)?p.children=t:t&&i(p,t),"object"==typeof u){var d={};for(var y in u)u.hasOwnProperty(y)&&(d[y]=e._createElement(u[y],p));return d}return e._createElement(u,p)},c)),f["default"](null===c||c===!1||a.isValidElement(c),"The root route must render a single element"),c}});t["default"]=j,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){return 0===l.stripLeadingSlashes(t).indexOf(l.stripLeadingSlashes(e))?!0:!1}function i(e,t){if(null==t)return null==e;if(null==e)return!0;for(var n in e)if(e.hasOwnProperty(n)&&String(e[n])!==String(t[n]))return!1;return!0}Object.defineProperty(t,"__esModule",{value:!0});var a=n(1),u=r(a),s=n(2),c=r(s),l=n(6),f=u["default"].PropTypes,p=f.func,d=f.object,h={propTypes:{stringifyQuery:p.isRequired},getDefaultProps:function(){return{stringifyQuery:l.stringifyQuery}},childContextTypes:{router:d.isRequired},getChildContext:function(){return{router:this}},makePath:function(e,t){return t&&("string"!=typeof t&&(t=this.props.stringifyQuery(t)),""!==t)?e+"?"+t:e},makeHref:function(e,t){return this.makePath(e,t)},transitionTo:function(e,t){var n=void 0===arguments[2]?null:arguments[2],r=this.props.history;c["default"](r,"Router#transitionTo is client-side only (needs history)"),r.pushState(n,this.makePath(e,t))},replaceWith:function(e,t){var n=void 0===arguments[2]?null:arguments[2],r=this.props.history;c["default"](r,"Router#replaceWith is client-side only (needs history)"),r.replaceState(n,this.makePath(e,t))},go:function(e){var t=this.props.history;c["default"](t,"Router#go is client-side only (needs history)"),t.go(e)},goBack:function(){this.go(-1)},goForward:function(){this.go(1)},isActive:function(e,t){var n=this.state.location;return null==n?!1:o(e,n.pathname)&&i(t,n.query)}};t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(s){o=!0,i=s}finally{try{!r&&u["return"]&&u["return"]()}finally{if(o)throw i}}return n}throw new TypeError("Invalid attempt to destructure non-iterable instance")}function i(e,t,n){e.childRoutes?n(null,e.childRoutes):e.getChildRoutes?e.getChildRoutes(t,n):n()}function a(e,t,n){e.indexRoute?n(null,e.indexRoute):e.getIndexRoute?e.getIndexRoute(n,t):n()}function u(e,t,n){return t.reduceRight(function(e,t,r){var o=n[r];return Array.isArray(e[t])?e[t].unshift(o):e[t]=t in e?[o,e[t]]:o,e},e)}function s(e,t){return u({},e,t)}function c(e,t,n,r){var o=O.matchPattern(e.path,t),c=o.remainingPathname,f=o.paramNames,p=o.paramValues,d=""===c;if(d&&e.path){var h=s(f,p),y=[e];a(e,n,function(e,t){e?r(e):(t&&y.push(t),r(null,{params:h,branch:y}))})}else null!=c?i(e,n,function(t,o){t?r(t):o?l(o,c,n,function(t,n){t?r(t):n?(u(n.params,f,p),n.branch.unshift(e),r(null,n)):r()}):r()}):r()}function l(e,t,n,r){e=R.createRoutes(e),_.loopAsync(e.length,function(r,o,i){c(e[r],t,n,function(e,t){e||t?i(e,t):o()})},r)}function f(e,t,n){l(e,O.stripLeadingSlashes(t.pathname),t.state,n)}function p(e,t,n){if(!e.path)return!1;var r=O.getParamNames(e.path);return r.some(function(e){return t.params[e]!==n.params[e]})}function d(e,t){var n,r,o=e&&e.branch,i=t.branch;return o?(n=o.filter(function(n){return-1===i.indexOf(n)||p(n,e,t)}),n.reverse(),r=i.filter(function(e){return-1===o.indexOf(e)||-1!==n.indexOf(e)})):(n=[],r=i),[n,r]}function h(e,t){return function(n,r,o){e.length>2?e.call(t,n,r,o):(e.call(t,n,r),o())}}function y(e,t){return e.reduce(function(e,n){return n[t]&&e.push(h(n[t],n)),e},[])}function m(e,t){var n=d(e,t),r=o(n,2),i=r[0],a=r[1],u=y(i,"onLeave");return u.push.apply(u,y(a,"onEnter")),u}function v(e,t){e.component||e.components?t(null,e.component||e.components):e.getComponents?e.getComponents(t):t()}function g(e,t){_.mapAsync(e,function(e,t,n){v(e,n)},t)}function b(e,t){var n={};if(!e.path)return n;var r=O.getParamNames(e.path);for(var o in t)t.hasOwnProperty(o)&&-1!==r.indexOf(o)&&(n[o]=t[o]);return n}Object.defineProperty(t,"__esModule",{value:!0}),t.getState=f,t.createTransitionHook=h,t.getTransitionHooks=m,t.getComponents=g,t.getRouteParams=b;var P=n(2),R=(r(P),n(3)),O=n(6),_=n(8)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){return e.filter(function(e){return-1!==t.indexOf(e)})}function i(e,t){var n=e.location,r=e.branch,i=t.location,a=t.branch;if(n.pathname===i.pathname)return!1;var u=o(r,a);return u.some(function(e){return e.ignoreScrollBehavior})?!1:!0}function a(e,t,n){c.canUseDOM&&(e===f["default"].POP?c.setWindowScrollPosition(t,n):c.setWindowScrollPosition(0,0))}Object.defineProperty(t,"__esModule",{value:!0});var u=n(1),s=r(u),c=n(11),l=n(9),f=r(l),p=s["default"].PropTypes.func,d={propTypes:{shouldUpdateScrollPosition:p.isRequired,updateScrollPosition:p.isRequired},getDefaultProps:function(){return{shouldUpdateScrollPosition:i,updateScrollPosition:a}},componentDidUpdate:function(e,t){var n=this.state.location,r=n&&n.state;if(r&&this.props.shouldUpdateScrollPosition(this.state,t)){var o=r.scrollX,i=r.scrollY;null!=o&&null!=i&&this.props.updateScrollPosition(n.navigationType,o,i)}}};t["default"]=d,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=i["default"].PropTypes.object,u={contextTypes:{router:a.isRequired}},s=["isActive"];s.forEach(function(e){u[e]=function(){var t=this.context.router;return t[e].apply(t,arguments)}}),t["default"]=u,e.exports=t["default"]},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(){n(this,e),this.isCancelled=!1,this.redirectInfo=null,this.abortReason=null}return r(e,[{key:"to",value:function(e,t,n){this.redirectInfo={pathname:e,query:t,state:n},this.isCancelled=!0}},{key:"abort",value:function(e){this.abortReason=e,this.isCancelled=!0}}]),e}();t["default"]=o,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(7),u=r(a),s=i["default"].PropTypes.object,c={contextTypes:{router:s.isRequired},componentDidMount:function(){u["default"]("function"==typeof this.routerWillLeave,"Components that mixin TransitionHook should have a routerWillLeave method, check %s",this.constructor.displayName||this.constructor.name),this.routerWillLeave&&this.context.router.addTransitionHook(this.routerWillLeave)},componentWillUnmount:function(){this.routerWillLeave&&this.context.router.removeTransitionHook(this.routerWillLeave)}};t["default"]=c,e.exports=t["default"]},function(e){"use strict";var t=function(e){var t,n={};if(!(e instanceof Object)||Array.isArray(e))throw new Error("keyMirror(...): Argument must be an object.");for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};e.exports=t},function(e,t,n){e.exports=n(26)},function(e,t,n){var r=n(28),o=n(27);e.exports={stringify:r,parse:o}},function(e,t,n){var r=n(10),o={delimiter:"&",depth:5,arrayLimit:20,parameterLimit:1e3};o.parseValues=function(e,t){for(var n={},o=e.split(t.delimiter,1/0===t.parameterLimit?void 0:t.parameterLimit),i=0,a=o.length;a>i;++i){var u=o[i],s=-1===u.indexOf("]=")?u.indexOf("="):u.indexOf("]=")+1;if(-1===s)n[r.decode(u)]="";else{var c=r.decode(u.slice(0,s)),l=r.decode(u.slice(s+1));if(Object.prototype.hasOwnProperty(c))continue;n[c]=n.hasOwnProperty(c)?[].concat(n[c]).concat(l):l}}return n},o.parseObject=function(e,t,n){if(!e.length)return t;var r=e.shift(),i={};if("[]"===r)i=[],i=i.concat(o.parseObject(e,t,n));else{var a="["===r[0]&&"]"===r[r.length-1]?r.slice(1,r.length-1):r,u=parseInt(a,10),s=""+u;!isNaN(u)&&r!==a&&s===a&&u>=0&&u<=n.arrayLimit?(i=[],i[u]=o.parseObject(e,t,n)):i[a]=o.parseObject(e,t,n)}return i},o.parseKeys=function(e,t,n){if(e){var r=/^([^\[\]]*)/,i=/(\[[^\[\]]*\])/g,a=r.exec(e);if(!Object.prototype.hasOwnProperty(a[1])){var u=[];a[1]&&u.push(a[1]);for(var s=0;null!==(a=i.exec(e))&&s<n.depth;)++s,Object.prototype.hasOwnProperty(a[1].replace(/\[|\]/g,""))||u.push(a[1]);return a&&u.push("["+e.slice(a.index)+"]"),o.parseObject(u,t,n)}}},e.exports=function(e,t){if(""===e||null===e||"undefined"==typeof e)return{};t=t||{},t.delimiter="string"==typeof t.delimiter||r.isRegExp(t.delimiter)?t.delimiter:o.delimiter,t.depth="number"==typeof t.depth?t.depth:o.depth,t.arrayLimit="number"==typeof t.arrayLimit?t.arrayLimit:o.arrayLimit,t.parameterLimit="number"==typeof t.parameterLimit?t.parameterLimit:o.parameterLimit;for(var n="string"==typeof e?o.parseValues(e,t):e,i={},a=Object.keys(n),u=0,s=a.length;s>u;++u){var c=a[u],l=o.parseKeys(c,n[c],t);i=r.merge(i,l)}return r.compact(i)}},function(e,t,n){var r=n(10),o={delimiter:"&",arrayPrefixGenerators:{brackets:function(e){return e+"[]"},indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}}};o.stringify=function(e,t,n){if(r.isBuffer(e)?e=e.toString():e instanceof Date?e=e.toISOString():null===e&&(e=""),"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return[encodeURIComponent(t)+"="+encodeURIComponent(e)];var i=[];if("undefined"==typeof e)return i;for(var a=Object.keys(e),u=0,s=a.length;s>u;++u){var c=a[u];i=i.concat(Array.isArray(e)?o.stringify(e[c],n(t,c),n):o.stringify(e[c],t+"["+c+"]",n))}return i},e.exports=function(e,t){t=t||{};var n="undefined"==typeof t.delimiter?o.delimiter:t.delimiter,r=[];if("object"!=typeof e||null===e)return"";var i;i=t.arrayFormat in o.arrayPrefixGenerators?t.arrayFormat:"indices"in t?t.indices?"indices":"repeat":"indices";for(var a=o.arrayPrefixGenerators[i],u=Object.keys(e),s=0,c=u.length;c>s;++s){var l=u[s];r=r.concat(o.stringify(e[l],l,a))}return r.join(n)}}])}); |
@@ -41,3 +41,3 @@ import DOMHistory from './DOMHistory'; | ||
this.location = this._createLocation(getWindowPath(), state, navigationType); | ||
this.location = this.createLocation(getWindowPath(), state, navigationType); | ||
} | ||
@@ -90,3 +90,3 @@ | ||
window.history.pushState(state, '', path); | ||
this.location = this._createLocation(path, state, NavigationTypes.PUSH); | ||
this.location = this.createLocation(path, state, NavigationTypes.PUSH); | ||
this._notifyChange(); | ||
@@ -104,3 +104,3 @@ } else { | ||
window.history.replaceState(state, '', path); | ||
this.location = this._createLocation(path, state, NavigationTypes.REPLACE); | ||
this.location = this.createLocation(path, state, NavigationTypes.REPLACE); | ||
this._notifyChange(); | ||
@@ -107,0 +107,0 @@ } else { |
@@ -33,2 +33,6 @@ export var canUseDOM = !!( | ||
export function setWindowScrollPosition(scrollX, scrollY) { | ||
window.scrollTo(scrollX, scrollY); | ||
} | ||
/** | ||
@@ -35,0 +39,0 @@ * taken from modernizr |
@@ -85,3 +85,3 @@ import warning from 'warning'; | ||
var state = this.queryKey ? readState(path, this.queryKey) : null; | ||
this.location = this._createLocation(path, state, navigationType); | ||
this.location = this.createLocation(path, state, navigationType); | ||
} | ||
@@ -149,3 +149,3 @@ | ||
this.location = this._createLocation(path, state, NavigationTypes.PUSH); | ||
this.location = this.createLocation(path, state, NavigationTypes.PUSH); | ||
@@ -164,3 +164,3 @@ this._notifyChange(); | ||
this.location = this._createLocation(path, state, NavigationTypes.REPLACE); | ||
this.location = this.createLocation(path, state, NavigationTypes.REPLACE); | ||
@@ -167,0 +167,0 @@ this._notifyChange(); |
import invariant from 'invariant'; | ||
import { getPathname, getQueryString, parseQueryString, stringifyQuery } from './URLUtils'; | ||
import ChangeEmitter from './ChangeEmitter'; | ||
import { getPathname, getQueryString, parseQueryString } from './URLUtils'; | ||
import Location from './Location'; | ||
var RequiredSubclassMethods = [ 'pushState', 'replaceState', 'go' ]; | ||
var RequiredHistorySubclassMethods = [ 'pushState', 'replaceState', 'go' ]; | ||
@@ -21,12 +20,6 @@ function createRandomKey() { | ||
*/ | ||
class History extends ChangeEmitter { | ||
class History { | ||
constructor(options={}) { | ||
super(); | ||
this.parseQueryString = options.parseQueryString || parseQueryString; | ||
this.stringifyQuery = options.stringifyQuery || stringifyQuery; | ||
this.location = null; | ||
RequiredSubclassMethods.forEach(function (method) { | ||
RequiredHistorySubclassMethods.forEach(function (method) { | ||
invariant( | ||
@@ -38,4 +31,23 @@ typeof this[method] === 'function', | ||
}, this); | ||
this.parseQueryString = options.parseQueryString || parseQueryString; | ||
this.changeListeners = []; | ||
this.location = null; | ||
} | ||
_notifyChange() { | ||
for (var i = 0, len = this.changeListeners.length; i < len; ++i) | ||
this.changeListeners[i].call(this); | ||
} | ||
addChangeListener(listener) { | ||
this.changeListeners.push(listener); | ||
} | ||
removeChangeListener(listener) { | ||
this.changeListeners = this.changeListeners.filter(function (li) { | ||
return li !== listener; | ||
}); | ||
} | ||
back() { | ||
@@ -58,3 +70,3 @@ this.go(-1); | ||
_createLocation(path, state, navigationType) { | ||
createLocation(path, state, navigationType) { | ||
var pathname = getPathname(path); | ||
@@ -66,27 +78,4 @@ var queryString = getQueryString(path); | ||
/** | ||
* Returns a full URL path from the given pathname and query. | ||
*/ | ||
makePath(pathname, query) { | ||
if (query) { | ||
if (typeof query !== 'string') | ||
query = this.stringifyQuery(query); | ||
if (query !== '') | ||
return pathname + '?' + query; | ||
} | ||
return pathname; | ||
} | ||
/** | ||
* Returns a string that may safely be used to link to the given | ||
* pathname and query. | ||
*/ | ||
makeHref(pathname, query) { | ||
return this.makePath(pathname, query); | ||
} | ||
} | ||
export default History; |
@@ -20,3 +20,3 @@ import invariant from 'invariant'; | ||
*/ | ||
export class MemoryHistory extends History { | ||
class MemoryHistory extends History { | ||
@@ -51,3 +51,3 @@ constructor(entries, current) { | ||
this.location = this._createLocation( | ||
this.location = this.createLocation( | ||
currentEntry.path, | ||
@@ -64,3 +64,3 @@ currentEntry.state | ||
this.entries = this.entries.slice(0, this.current).concat([{ state, path }]); | ||
this.location = this._createLocation(path, state, NavigationTypes.PUSH); | ||
this.location = this.createLocation(path, state, NavigationTypes.PUSH); | ||
@@ -75,3 +75,3 @@ this._notifyChange(); | ||
this.entries[this.current] = { state, path }; | ||
this.location = this._createLocation(path, state, NavigationTypes.REPLACE); | ||
this.location = this.createLocation(path, state, NavigationTypes.REPLACE); | ||
@@ -94,3 +94,3 @@ this._notifyChange(); | ||
this.location = this._createLocation( | ||
this.location = this.createLocation( | ||
currentEntry.path, | ||
@@ -97,0 +97,0 @@ currentEntry.state, |
@@ -5,3 +5,3 @@ import React from 'react'; | ||
var { any, func, object, arrayOf, instanceOf, oneOfType, oneOf, element } = React.PropTypes; | ||
var { func, object, arrayOf, instanceOf, oneOfType, element } = React.PropTypes; | ||
@@ -17,4 +17,4 @@ function falsy(props, propName, componentName) { | ||
var location = instanceOf(Location); | ||
var route = any; //oneOf([object, element]); | ||
var routes = any; //oneOf([route, arrayOf(route), object]); | ||
var route = oneOfType([ object, element ]); | ||
var routes = oneOfType([ route, arrayOf(route) ]); | ||
@@ -21,0 +21,0 @@ module.exports = { |
@@ -6,80 +6,73 @@ import React, { createElement, isValidElement } from 'react'; | ||
import { createRoutes } from './RouteUtils'; | ||
import { pathnameIsActive, queryIsActive } from './ActiveUtils'; | ||
import { getState, getTransitionHooks, createTransitionHook, getComponents, getRouteParams } from './RoutingUtils'; | ||
import { getState, getTransitionHooks, getComponents, getRouteParams, createTransitionHook } from './RoutingUtils'; | ||
import { routes, component, components, history, location } from './PropTypes'; | ||
import Location from './Location'; | ||
import RouterContextMixin from './RouterContextMixin'; | ||
import ScrollManagementMixin from './ScrollManagementMixin'; | ||
import { isLocation } from './Location'; | ||
import Transition from './Transition'; | ||
var { any, array, func, object, instanceOf } = React.PropTypes; | ||
var { arrayOf, func, object } = React.PropTypes; | ||
var ContextMixin = { | ||
function runTransition(prevState, routes, location, hooks, callback) { | ||
var transition = new Transition; | ||
childContextTypes: { | ||
router: object.isRequired | ||
}, | ||
getState(routes, location, function (error, nextState) { | ||
if (error || nextState == null || transition.isCancelled) { | ||
callback(error, null, transition); | ||
} else { | ||
nextState.location = location; | ||
getChildContext() { | ||
return { | ||
router: this | ||
}; | ||
}, | ||
var transitionHooks = getTransitionHooks(prevState, nextState); | ||
if (Array.isArray(hooks)) | ||
transitionHooks.unshift.apply(transitionHooks, hooks); | ||
makePath(pathname, query) { | ||
return this.props.history.makePath(pathname, query); | ||
}, | ||
makeHref(pathname, query) { | ||
return this.props.history.makeHref(pathname, query); | ||
}, | ||
transitionTo(pathname, query, state=null) { | ||
var { history } = this.props; | ||
var path = this.makePath(pathname, query); | ||
if (this.nextLocation) { | ||
history.replaceState(state, path); | ||
} else { | ||
history.pushState(state, path); | ||
loopAsync(transitionHooks.length, (index, next, done) => { | ||
transitionHooks[index](nextState, transition, (error) => { | ||
if (error || transition.isCancelled) { | ||
done(error); // No need to continue. | ||
} else { | ||
next(); | ||
} | ||
}); | ||
}, function (error) { | ||
if (error || transition.isCancelled) { | ||
callback(error, null, transition); | ||
} else { | ||
getComponents(nextState.branch, function (error, components) { | ||
if (error || transition.isCancelled) { | ||
callback(error, null, transition); | ||
} else { | ||
nextState.components = components; | ||
callback(null, nextState, transition); | ||
} | ||
}); | ||
} | ||
}); | ||
} | ||
}, | ||
}); | ||
} | ||
replaceWith(pathname, query, state=null) { | ||
var { history } = this.props; | ||
var path = this.makePath(pathname, query); | ||
var Router = React.createClass({ | ||
history.replaceState(state, path); | ||
}, | ||
mixins: [ RouterContextMixin, ScrollManagementMixin ], | ||
go(n) { | ||
this.props.history.go(n); | ||
}, | ||
statics: { | ||
goBack() { | ||
this.go(-1); | ||
}, | ||
/** | ||
* Runs a transition to the given location using the given routes and | ||
* transition hooks (optional) and calls callback(error, state, transition) | ||
* when finished. This is primarily useful for server-side rendering. | ||
*/ | ||
run(routes, location, transitionHooks, callback) { | ||
if (typeof transitionHooks === 'function') { | ||
callback = transitionHooks; | ||
transitionHooks = null; | ||
} | ||
goForward() { | ||
this.go(1); | ||
}, | ||
isActive(pathname, query) { | ||
var { location } = this.state; | ||
invariant( | ||
typeof callback === 'function', | ||
'Router.run needs a callback' | ||
); | ||
if (location == null) | ||
return false; | ||
return pathnameIsActive(pathname, location.pathname) && | ||
queryIsActive(query, location.query); | ||
} | ||
}; | ||
export var Router = React.createClass({ | ||
mixins: [ ContextMixin ], | ||
statics: { | ||
match(routes, history, callback) { | ||
// TODO: Mimic what we're doing in _updateState, but statically | ||
// so we can get the right props for doing server-side rendering. | ||
runTransition(null, routes, location, transitionHooks, callback); | ||
} | ||
@@ -90,14 +83,18 @@ | ||
propTypes: { | ||
history: history.isRequired, | ||
children: routes, | ||
routes, // Alias for children | ||
createElement: func.isRequired, | ||
onError: func.isRequired, | ||
onAbort: func, | ||
onError: func, | ||
onUpdate: func, | ||
// For server-side rendering | ||
location: any, | ||
// Client-side | ||
history, | ||
routes, | ||
// Routes may also be given as children (JSX) | ||
children: routes, | ||
// Server-side | ||
location, | ||
branch: routes, | ||
params: object, | ||
components | ||
components: arrayOf(components) | ||
}, | ||
@@ -107,7 +104,3 @@ | ||
return { | ||
createElement, | ||
onError: function (error) { | ||
// Throw errors by default so we don't silently swallow them! | ||
throw error; // This error probably originated in getChildRoutes or getComponents. | ||
} | ||
createElement | ||
}; | ||
@@ -118,7 +111,7 @@ }, | ||
return { | ||
isTransitioning: false, | ||
location: null, | ||
branch: null, | ||
params: null, | ||
components: null, | ||
isTransitioning: false | ||
components: null | ||
}; | ||
@@ -129,95 +122,37 @@ }, | ||
invariant( | ||
Location.isLocation(location), | ||
isLocation(location), | ||
'A <Router> needs a valid Location' | ||
); | ||
this.nextLocation = location; | ||
var hooks = this.transitionHooks; | ||
if (hooks) | ||
hooks = hooks.map(hook => createTransitionHook(hook, this)); | ||
this.setState({ isTransitioning: true }); | ||
this._getState(this.routes, location, (error, state) => { | ||
if (error || this.nextLocation !== location) { | ||
this._finishTransition(error); | ||
runTransition(this.state, this.routes, location, hooks, (error, state, transition) => { | ||
if (error) { | ||
this.handleError(error); | ||
} else if (transition.isCancelled) { | ||
if (transition.redirectInfo) { | ||
var { pathname, query, state } = transition.redirectInfo; | ||
this.replaceWith(pathname, query, state); | ||
} else { | ||
invariant( | ||
this.state.location, | ||
'You may not abort the initial transition' | ||
); | ||
this.handleAbort(reason); | ||
} | ||
} else if (state == null) { | ||
warning(false, 'Location "%s" did not match any routes', location.pathname); | ||
this._finishTransition(); | ||
} else { | ||
state.location = location; | ||
this.setState(state, this.props.onUpdate); | ||
} | ||
this._runTransitionHooks(state, (error) => { | ||
if (error || this.nextLocation !== location) { | ||
this._finishTransition(error); | ||
} else { | ||
this._getComponents(state, (error, components) => { | ||
if (error || this.nextLocation !== location) { | ||
this._finishTransition(error); | ||
} else { | ||
state.components = components; | ||
this._finishTransition(null, state); | ||
} | ||
}); | ||
} | ||
}); | ||
} | ||
this.setState({ isTransitioning: false }); | ||
}); | ||
}, | ||
_finishTransition(error, state) { | ||
this.setState({ isTransitioning: false }); | ||
this.nextLocation = null; | ||
if (error) { | ||
this.handleError(error); | ||
} else if (state) { | ||
this.setState(state, this.props.onUpdate); | ||
this._alreadyUpdated = true; | ||
} | ||
}, | ||
_getState(routes, location, callback) { | ||
var { branch, params } = this.props; | ||
if (branch && params && query) { | ||
callback(null, { branch, params }); | ||
} else { | ||
getState(routes, location, callback); | ||
} | ||
}, | ||
_runTransitionHooks(nextState, callback) { | ||
// Run component hooks before route hooks. | ||
var hooks = this.transitionHooks.map(hook => createTransitionHook(hook, this)); | ||
hooks.push.apply( | ||
hooks, | ||
getTransitionHooks(this.state, nextState) | ||
); | ||
var nextLocation = this.nextLocation; | ||
loopAsync(hooks.length, (index, next, done) => { | ||
var hook = hooks[index]; | ||
hooks[index].call(this, nextState, this, (error) => { | ||
if (error || this.nextLocation !== nextLocation) { | ||
done.call(this, error); // No need to continue. | ||
} else { | ||
next.call(this); | ||
} | ||
}); | ||
}, callback); | ||
}, | ||
_getComponents(nextState, callback) { | ||
if (this.props.components) { | ||
callback(null, this.props.components); | ||
} else { | ||
getComponents(nextState, callback); | ||
} | ||
}, | ||
_createElement(component, props) { | ||
return typeof component === 'function' ? this.props.createElement(component, props) : null; | ||
}, | ||
/** | ||
@@ -228,2 +163,5 @@ * Adds a transition hook that runs before all route hooks in a | ||
addTransitionHook(hook) { | ||
if (!this.transitionHooks) | ||
this.transitionHooks = []; | ||
this.transitionHooks.push(hook); | ||
@@ -236,25 +174,24 @@ }, | ||
removeTransitionHook(hook) { | ||
this.transitionHooks = this.transitionHooks.filter(h => h !== hook); | ||
if (this.transitionHooks) | ||
this.transitionHooks = this.transitionHooks.filter(h => h !== hook); | ||
}, | ||
/** | ||
* Cancels the current transition, preventing any subsequent transition | ||
* hooks from running and restoring the previous location. | ||
*/ | ||
cancelTransition() { | ||
invariant( | ||
this.state.location, | ||
'Router#cancelTransition: You may not cancel the initial transition' | ||
); | ||
if (this.nextLocation) { | ||
this.nextLocation = null; | ||
handleAbort(reason) { | ||
if (this.props.onAbort) { | ||
this.props.onAbort.call(this, reason); | ||
} else { | ||
// The best we can do here is goBack so the location state reverts | ||
// to what it was. However, we also set a flag so that we know not | ||
// to run through _updateState again. | ||
// to run through _updateState again since state did not change. | ||
this._ignoreNextHistoryChange = true; | ||
this.goBack(); | ||
} | ||
}, | ||
handleError(error) { | ||
if (this.props.onError) { | ||
this.props.onError.call(this, error); | ||
} else { | ||
warning(false, 'Router#cancelTransition: Router is not transitioning'); | ||
// Throw errors by default so we don't silently swallow them! | ||
throw error; // This error probably originated in getChildRoutes or getComponents. | ||
} | ||
@@ -272,30 +209,30 @@ }, | ||
componentWillMount() { | ||
var { history, routes, children } = this.props; | ||
var { history, routes, children, location, branch, params, components } = this.props; | ||
invariant( | ||
routes || children, | ||
'A <Router> needs some routes' | ||
); | ||
if (history) { | ||
invariant( | ||
routes || children, | ||
'Client-side <Router>s need routes. Try using <Router routes> or ' + | ||
'passing your routes as nested <Route> children' | ||
); | ||
this.routes = createRoutes(routes || children); | ||
this.transitionHooks = []; | ||
this.nextLocation = null; | ||
this.routes = createRoutes(routes || children); | ||
if (typeof history.setup === 'function') | ||
history.setup(); | ||
if (typeof history.setup === 'function') | ||
history.setup(); | ||
// We need to listen first in case we redirect immediately. | ||
if (history.addChangeListener) | ||
history.addChangeListener(this.handleHistoryChange); | ||
// We need to listen first in case we redirect immediately. | ||
if (history.addChangeListener) | ||
history.addChangeListener(this.handleHistoryChange); | ||
this._updateState(history.location); | ||
}, | ||
this._updateState(history.location); | ||
} else { | ||
invariant( | ||
location && branch && params && components, | ||
'Server-side <Router>s need location, branch, params, and components ' + | ||
'props. Try using Router.run to get all the props you need' | ||
); | ||
componentDidMount() { | ||
// React doesn't fire the setState callback when we call setState | ||
// synchronously within componentWillMount, so we need this. Note | ||
// that we still only get one call to onUpdate, even if setState | ||
// was called multiple times in componentWillMount. | ||
if (this._alreadyUpdated && this.props.onUpdate) | ||
this.props.onUpdate.call(this); | ||
this.setState({ location, branch, params, components }); | ||
} | ||
}, | ||
@@ -309,12 +246,14 @@ | ||
var currentRoutes = this.props.routes || this.props.children; | ||
var nextRoutes = nextProps.routes || nextProps.children; | ||
if (nextProps.history) { | ||
var currentRoutes = this.props.routes || this.props.children; | ||
var nextRoutes = nextProps.routes || nextProps.children; | ||
if (currentRoutes !== nextRoutes) { | ||
this.routes = createRoutes(nextRoutes); | ||
if (currentRoutes !== nextRoutes) { | ||
this.routes = createRoutes(nextRoutes); | ||
// Call this here because _updateState | ||
// uses this.routes to determine state. | ||
if (nextProps.history.location) | ||
this._updateState(nextProps.history.location); | ||
// Call this here because _updateState | ||
// uses this.routes to determine state. | ||
if (nextProps.history.location) | ||
this._updateState(nextProps.history.location); | ||
} | ||
} | ||
@@ -326,6 +265,10 @@ }, | ||
if (history.removeChangeListener) | ||
if (history && history.removeChangeListener) | ||
history.removeChangeListener(this.handleHistoryChange); | ||
}, | ||
_createElement(component, props) { | ||
return typeof component === 'function' ? this.props.createElement(component, props) : null; | ||
}, | ||
render() { | ||
@@ -332,0 +275,0 @@ var { location, branch, params, components, isTransitioning } = this.state; |
@@ -0,1 +1,2 @@ | ||
import invariant from 'invariant'; | ||
import { createRoutes } from './RouteUtils'; | ||
@@ -137,3 +138,3 @@ import { getParamNames, matchPattern, stripLeadingSlashes } from './URLUtils'; | ||
*/ | ||
export function computeDiff(prevState, nextState) { | ||
function computeDiff(prevState, nextState) { | ||
var fromRoutes = prevState && prevState.branch; | ||
@@ -166,9 +167,9 @@ var toRoutes = nextState.branch; | ||
export function createTransitionHook(fn, context) { | ||
return function (nextState, router, callback) { | ||
return function (nextState, transition, callback) { | ||
if (fn.length > 2) { | ||
fn.call(context, nextState, router, callback); | ||
fn.call(context, nextState, transition, callback); | ||
} else { | ||
// Assume fn executes synchronously and | ||
// automatically call the callback for them. | ||
fn.call(context, nextState, router); | ||
fn.call(context, nextState, transition); | ||
callback(); | ||
@@ -193,4 +194,4 @@ } | ||
* | ||
* - route.onLeave(nextState, router[, callback ]) | ||
* - route.onEnter(nextState, router[, callback ]) | ||
* - route.onLeave(nextState, transition[, callback ]) | ||
* - route.onEnter(nextState, transition[, callback ]) | ||
* | ||
@@ -227,8 +228,2 @@ * Transition hooks run in order from the leaf route in the branch | ||
function getComponentsForRoutes(routes, callback) { | ||
mapAsync(routes, function (route, index, callback) { | ||
getComponentsForRoute(route, callback); | ||
}, callback); | ||
} | ||
/** | ||
@@ -241,4 +236,6 @@ * Asynchronously fetches all components needed for the given router | ||
*/ | ||
export function getComponents(state, callback) { | ||
getComponentsForRoutes(state.branch, callback); | ||
export function getComponents(routes, callback) { | ||
mapAsync(routes, function (route, index, callback) { | ||
getComponentsForRoute(route, callback); | ||
}, callback); | ||
} | ||
@@ -245,0 +242,0 @@ |
{ | ||
"name": "react-router", | ||
"version": "1.0.0-alpha2", | ||
"version": "1.0.0-beta1", | ||
"description": "A complete routing library for React.js", | ||
@@ -10,3 +10,3 @@ "main": "lib/index", | ||
}, | ||
"homepage": "https://github.com/rackt/react-router/blob/latest/README.md", | ||
"homepage": "https://rackt.github.io/react-router/", | ||
"bugs": "https://github.com/rackt/react-router/issues", | ||
@@ -13,0 +13,0 @@ "scripts": { |
[![npm package](https://img.shields.io/npm/v/react-router.svg?style=flat-square)](https://www.npmjs.org/package/react-router) | ||
[![build status](https://img.shields.io/travis/rackt/react-router/master.svg?style=flat-square)](https://travis-ci.org/rackt/react-router) | ||
[![dependency status](https://img.shields.io/david/rackt/react-router.svg?style=flat-square)](https://david-dm.org/rackt/react-router) | ||
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/rackt/react-router?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) | ||
[![Gitter](https://img.shields.io/badge/GITTER-join%20chat-1DCF73.svg?style=flat-square)](https://gitter.im/rackt/react-router?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) | ||
@@ -124,3 +124,3 @@ <img src="https://rackt.github.io/react-router/img/vertical.png" width="300"/> | ||
See more in the [overview guide](/docs/00 Guides/0 Overview.md) and [Advanced | ||
See more in the [overview guide](/doc/00 Guides/0 Overview.md) and [Advanced | ||
Usage](/doc/00 Guides/Advanced Usage.md) | ||
@@ -127,0 +127,0 @@ |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
325441
5876