sequenceserver 1.1.0.beta → 1.1.0.beta2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sequenceserver might be problematic. Click here for more details.

Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -7
  3. data/README.md +9 -11
  4. data/Rakefile +2 -15
  5. data/lib/sequenceserver/database.rb +7 -1
  6. data/lib/sequenceserver/routes.rb +5 -2
  7. data/lib/sequenceserver/version.rb +1 -1
  8. data/lib/sequenceserver.rb +3 -1
  9. data/package.json +2 -3
  10. data/public/config.js +0 -7
  11. data/public/css/sequenceserver.css +8 -17
  12. data/public/css/sequenceserver.min.css +2 -2
  13. data/public/js/report.js +62 -45
  14. data/public/js/search.js +24 -17
  15. data/public/js/sequenceserver.js +23 -60
  16. data/public/sequenceserver-report.min.js +17 -0
  17. data/public/sequenceserver-search.min.js +11 -0
  18. data/sequenceserver.gemspec +5 -5
  19. data/spec/capybara_spec.rb +3 -3
  20. data/spec/sequence_spec.rb +2 -2
  21. data/views/layout.erb +1 -13
  22. data/views/report.erb +13 -0
  23. data/views/search.erb +45 -0
  24. metadata +26 -92
  25. data/public/css/sequenceserver.min.css.gz +0 -0
  26. data/public/sequenceserver.min.js +0 -26
  27. data/public/sequenceserver.min.js.gz +0 -0
  28. data/public/vendor/npm/object-assign@2.1.1/.jspm-hash +0 -1
  29. data/public/vendor/npm/object-assign@2.1.1/.jspm.json +0 -72
  30. data/public/vendor/npm/object-assign@2.1.1/index.js +0 -27
  31. data/public/vendor/npm/object-assign@2.1.1/package.json +0 -38
  32. data/public/vendor/npm/object-assign@2.1.1.js +0 -1
  33. data/public/vendor/npm/qs@2.4.1/.jshintignore +0 -1
  34. data/public/vendor/npm/qs@2.4.1/.jshintrc +0 -10
  35. data/public/vendor/npm/qs@2.4.1/.jspm-hash +0 -1
  36. data/public/vendor/npm/qs@2.4.1/.jspm.json +0 -61
  37. data/public/vendor/npm/qs@2.4.1/.npmignore +0 -18
  38. data/public/vendor/npm/qs@2.4.1/.travis.yml +0 -6
  39. data/public/vendor/npm/qs@2.4.1/CHANGELOG.md +0 -68
  40. data/public/vendor/npm/qs@2.4.1/CONTRIBUTING.md +0 -1
  41. data/public/vendor/npm/qs@2.4.1/LICENSE +0 -28
  42. data/public/vendor/npm/qs@2.4.1/Makefile +0 -8
  43. data/public/vendor/npm/qs@2.4.1/README.md +0 -233
  44. data/public/vendor/npm/qs@2.4.1/index.js +0 -2
  45. data/public/vendor/npm/qs@2.4.1/lib/index.js +0 -8
  46. data/public/vendor/npm/qs@2.4.1/lib/parse.js +0 -100
  47. data/public/vendor/npm/qs@2.4.1/lib/stringify.js +0 -67
  48. data/public/vendor/npm/qs@2.4.1/lib/utils.js +0 -132
  49. data/public/vendor/npm/qs@2.4.1/lib.js +0 -2
  50. data/public/vendor/npm/qs@2.4.1/package.json +0 -29
  51. data/public/vendor/npm/qs@2.4.1/test/parse.js +0 -359
  52. data/public/vendor/npm/qs@2.4.1.js +0 -1
  53. data/public/vendor/npm/react-router@0.13.3/.jspm-hash +0 -1
  54. data/public/vendor/npm/react-router@0.13.3/.jspm.json +0 -70
  55. data/public/vendor/npm/react-router@0.13.3/README.md +0 -140
  56. data/public/vendor/npm/react-router@0.13.3/lib/Cancellation.js +0 -9
  57. data/public/vendor/npm/react-router@0.13.3/lib/History.js +0 -31
  58. data/public/vendor/npm/react-router@0.13.3/lib/Match.js +0 -80
  59. data/public/vendor/npm/react-router@0.13.3/lib/Navigation.js +0 -22
  60. data/public/vendor/npm/react-router@0.13.3/lib/PathUtils.js +0 -154
  61. data/public/vendor/npm/react-router@0.13.3/lib/PropTypes.js +0 -15
  62. data/public/vendor/npm/react-router@0.13.3/lib/Redirect.js +0 -12
  63. data/public/vendor/npm/react-router@0.13.3/lib/Route.js +0 -133
  64. data/public/vendor/npm/react-router@0.13.3/lib/ScrollHistory.js +0 -53
  65. data/public/vendor/npm/react-router@0.13.3/lib/State.js +0 -25
  66. data/public/vendor/npm/react-router@0.13.3/lib/TestUtils.js +0 -102
  67. data/public/vendor/npm/react-router@0.13.3/lib/Transition.js +0 -58
  68. data/public/vendor/npm/react-router@0.13.3/lib/actions/LocationActions.js +0 -25
  69. data/public/vendor/npm/react-router@0.13.3/lib/behaviors/ImitateBrowserBehavior.js +0 -19
  70. data/public/vendor/npm/react-router@0.13.3/lib/behaviors/ScrollToTopBehavior.js +0 -15
  71. data/public/vendor/npm/react-router@0.13.3/lib/components/ActiveHandler.js +0 -111
  72. data/public/vendor/npm/react-router@0.13.3/lib/components/ContextWrapper.js +0 -39
  73. data/public/vendor/npm/react-router@0.13.3/lib/components/DefaultRoute.js +0 -41
  74. data/public/vendor/npm/react-router@0.13.3/lib/components/Link.js +0 -119
  75. data/public/vendor/npm/react-router@0.13.3/lib/components/NotFoundRoute.js +0 -41
  76. data/public/vendor/npm/react-router@0.13.3/lib/components/Redirect.js +0 -40
  77. data/public/vendor/npm/react-router@0.13.3/lib/components/Route.js +0 -67
  78. data/public/vendor/npm/react-router@0.13.3/lib/components/RouteHandler.js +0 -111
  79. data/public/vendor/npm/react-router@0.13.3/lib/createRouter.js +0 -329
  80. data/public/vendor/npm/react-router@0.13.3/lib/createRoutesFromReactChildren.js +0 -59
  81. data/public/vendor/npm/react-router@0.13.3/lib/getWindowScrollPosition.js +0 -19
  82. data/public/vendor/npm/react-router@0.13.3/lib/index.js +0 -26
  83. data/public/vendor/npm/react-router@0.13.3/lib/isReactChildren.js +0 -14
  84. data/public/vendor/npm/react-router@0.13.3/lib/locations/HashLocation.js +0 -79
  85. data/public/vendor/npm/react-router@0.13.3/lib/locations/HistoryLocation.js +0 -64
  86. data/public/vendor/npm/react-router@0.13.3/lib/locations/RefreshLocation.js +0 -18
  87. data/public/vendor/npm/react-router@0.13.3/lib/locations/StaticLocation.js +0 -50
  88. data/public/vendor/npm/react-router@0.13.3/lib/locations/TestLocation.js +0 -104
  89. data/public/vendor/npm/react-router@0.13.3/lib/runRouter.js +0 -16
  90. data/public/vendor/npm/react-router@0.13.3/lib/supportsHistory.js +0 -17
  91. data/public/vendor/npm/react-router@0.13.3/lib.js +0 -2
  92. data/public/vendor/npm/react-router@0.13.3/package.json +0 -36
  93. data/public/vendor/npm/react-router@0.13.3/umd/ReactRouter.js +0 -3388
  94. data/public/vendor/npm/react-router@0.13.3/umd/ReactRouter.min.js +0 -8
@@ -1,3388 +0,0 @@
1
- /* */
2
- "format cjs";
3
- (function webpackUniversalModuleDefinition(root, factory) {
4
- if(typeof exports === 'object' && typeof module === 'object')
5
- module.exports = factory(require("react"));
6
- else if(typeof define === 'function' && define.amd)
7
- define(["react"], factory);
8
- else if(typeof exports === 'object')
9
- exports["ReactRouter"] = factory(require("react"));
10
- else
11
- root["ReactRouter"] = factory(root["React"]);
12
- })(this, function(__WEBPACK_EXTERNAL_MODULE_21__) {
13
- return /******/ (function(modules) { // webpackBootstrap
14
- /******/ // The module cache
15
- /******/ var installedModules = {};
16
- /******/
17
- /******/ // The require function
18
- /******/ function __webpack_require__(moduleId) {
19
- /******/
20
- /******/ // Check if module is in cache
21
- /******/ if(installedModules[moduleId])
22
- /******/ return installedModules[moduleId].exports;
23
- /******/
24
- /******/ // Create a new module (and put it into the cache)
25
- /******/ var module = installedModules[moduleId] = {
26
- /******/ exports: {},
27
- /******/ id: moduleId,
28
- /******/ loaded: false
29
- /******/ };
30
- /******/
31
- /******/ // Execute the module function
32
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
33
- /******/
34
- /******/ // Flag the module as loaded
35
- /******/ module.loaded = true;
36
- /******/
37
- /******/ // Return the exports of the module
38
- /******/ return module.exports;
39
- /******/ }
40
- /******/
41
- /******/
42
- /******/ // expose the modules object (__webpack_modules__)
43
- /******/ __webpack_require__.m = modules;
44
- /******/
45
- /******/ // expose the module cache
46
- /******/ __webpack_require__.c = installedModules;
47
- /******/
48
- /******/ // __webpack_public_path__
49
- /******/ __webpack_require__.p = "";
50
- /******/
51
- /******/ // Load entry module and return exports
52
- /******/ return __webpack_require__(0);
53
- /******/ })
54
- /************************************************************************/
55
- /******/ ([
56
- /* 0 */
57
- /***/ function(module, exports, __webpack_require__) {
58
-
59
- 'use strict';
60
-
61
- exports.DefaultRoute = __webpack_require__(1);
62
- exports.Link = __webpack_require__(2);
63
- exports.NotFoundRoute = __webpack_require__(3);
64
- exports.Redirect = __webpack_require__(4);
65
- exports.Route = __webpack_require__(5);
66
- exports.ActiveHandler = __webpack_require__(6);
67
- exports.RouteHandler = exports.ActiveHandler;
68
-
69
- exports.HashLocation = __webpack_require__(7);
70
- exports.HistoryLocation = __webpack_require__(8);
71
- exports.RefreshLocation = __webpack_require__(9);
72
- exports.StaticLocation = __webpack_require__(10);
73
- exports.TestLocation = __webpack_require__(11);
74
-
75
- exports.ImitateBrowserBehavior = __webpack_require__(12);
76
- exports.ScrollToTopBehavior = __webpack_require__(13);
77
-
78
- exports.History = __webpack_require__(14);
79
- exports.Navigation = __webpack_require__(15);
80
- exports.State = __webpack_require__(16);
81
-
82
- exports.createRoute = __webpack_require__(17).createRoute;
83
- exports.createDefaultRoute = __webpack_require__(17).createDefaultRoute;
84
- exports.createNotFoundRoute = __webpack_require__(17).createNotFoundRoute;
85
- exports.createRedirect = __webpack_require__(17).createRedirect;
86
- exports.createRoutesFromReactChildren = __webpack_require__(18);
87
-
88
- exports.create = __webpack_require__(19);
89
- exports.run = __webpack_require__(20);
90
-
91
- /***/ },
92
- /* 1 */
93
- /***/ function(module, exports, __webpack_require__) {
94
-
95
- 'use strict';
96
-
97
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
98
-
99
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
100
-
101
- var PropTypes = __webpack_require__(22);
102
- var RouteHandler = __webpack_require__(6);
103
- var Route = __webpack_require__(5);
104
-
105
- /**
106
- * A <DefaultRoute> component is a special kind of <Route> that
107
- * renders when its parent matches but none of its siblings do.
108
- * Only one such route may be used at any given level in the
109
- * route hierarchy.
110
- */
111
-
112
- var DefaultRoute = (function (_Route) {
113
- function DefaultRoute() {
114
- _classCallCheck(this, DefaultRoute);
115
-
116
- if (_Route != null) {
117
- _Route.apply(this, arguments);
118
- }
119
- }
120
-
121
- _inherits(DefaultRoute, _Route);
122
-
123
- return DefaultRoute;
124
- })(Route);
125
-
126
- // TODO: Include these in the above class definition
127
- // once we can use ES7 property initializers.
128
- // https://github.com/babel/babel/issues/619
129
-
130
- DefaultRoute.propTypes = {
131
- name: PropTypes.string,
132
- path: PropTypes.falsy,
133
- children: PropTypes.falsy,
134
- handler: PropTypes.func.isRequired
135
- };
136
-
137
- DefaultRoute.defaultProps = {
138
- handler: RouteHandler
139
- };
140
-
141
- module.exports = DefaultRoute;
142
-
143
- /***/ },
144
- /* 2 */
145
- /***/ function(module, exports, __webpack_require__) {
146
-
147
- 'use strict';
148
-
149
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
150
-
151
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
152
-
153
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
154
-
155
- var React = __webpack_require__(21);
156
- var assign = __webpack_require__(33);
157
- var PropTypes = __webpack_require__(22);
158
-
159
- function isLeftClickEvent(event) {
160
- return event.button === 0;
161
- }
162
-
163
- function isModifiedEvent(event) {
164
- return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
165
- }
166
-
167
- /**
168
- * <Link> components are used to create an <a> element that links to a route.
169
- * When that route is active, the link gets an "active" class name (or the
170
- * value of its `activeClassName` prop).
171
- *
172
- * For example, assuming you have the following route:
173
- *
174
- * <Route name="showPost" path="/posts/:postID" handler={Post}/>
175
- *
176
- * You could use the following component to link to that route:
177
- *
178
- * <Link to="showPost" params={{ postID: "123" }} />
179
- *
180
- * In addition to params, links may pass along query string parameters
181
- * using the `query` prop.
182
- *
183
- * <Link to="showPost" params={{ postID: "123" }} query={{ show:true }}/>
184
- */
185
-
186
- var Link = (function (_React$Component) {
187
- function Link() {
188
- _classCallCheck(this, Link);
189
-
190
- if (_React$Component != null) {
191
- _React$Component.apply(this, arguments);
192
- }
193
- }
194
-
195
- _inherits(Link, _React$Component);
196
-
197
- _createClass(Link, [{
198
- key: 'handleClick',
199
- value: function handleClick(event) {
200
- var allowTransition = true;
201
- var clickResult;
202
-
203
- if (this.props.onClick) clickResult = this.props.onClick(event);
204
-
205
- if (isModifiedEvent(event) || !isLeftClickEvent(event)) {
206
- return;
207
- }if (clickResult === false || event.defaultPrevented === true) allowTransition = false;
208
-
209
- event.preventDefault();
210
-
211
- if (allowTransition) this.context.router.transitionTo(this.props.to, this.props.params, this.props.query);
212
- }
213
- }, {
214
- key: 'getHref',
215
-
216
- /**
217
- * Returns the value of the "href" attribute to use on the DOM element.
218
- */
219
- value: function getHref() {
220
- return this.context.router.makeHref(this.props.to, this.props.params, this.props.query);
221
- }
222
- }, {
223
- key: 'getClassName',
224
-
225
- /**
226
- * Returns the value of the "class" attribute to use on the DOM element, which contains
227
- * the value of the activeClassName property when this <Link> is active.
228
- */
229
- value: function getClassName() {
230
- var className = this.props.className;
231
-
232
- if (this.getActiveState()) className += ' ' + this.props.activeClassName;
233
-
234
- return className;
235
- }
236
- }, {
237
- key: 'getActiveState',
238
- value: function getActiveState() {
239
- return this.context.router.isActive(this.props.to, this.props.params, this.props.query);
240
- }
241
- }, {
242
- key: 'render',
243
- value: function render() {
244
- var props = assign({}, this.props, {
245
- href: this.getHref(),
246
- className: this.getClassName(),
247
- onClick: this.handleClick.bind(this)
248
- });
249
-
250
- if (props.activeStyle && this.getActiveState()) props.style = props.activeStyle;
251
-
252
- return React.DOM.a(props, this.props.children);
253
- }
254
- }]);
255
-
256
- return Link;
257
- })(React.Component);
258
-
259
- // TODO: Include these in the above class definition
260
- // once we can use ES7 property initializers.
261
- // https://github.com/babel/babel/issues/619
262
-
263
- Link.contextTypes = {
264
- router: PropTypes.router.isRequired
265
- };
266
-
267
- Link.propTypes = {
268
- activeClassName: PropTypes.string.isRequired,
269
- to: PropTypes.oneOfType([PropTypes.string, PropTypes.route]).isRequired,
270
- params: PropTypes.object,
271
- query: PropTypes.object,
272
- activeStyle: PropTypes.object,
273
- onClick: PropTypes.func
274
- };
275
-
276
- Link.defaultProps = {
277
- activeClassName: 'active',
278
- className: ''
279
- };
280
-
281
- module.exports = Link;
282
-
283
- /***/ },
284
- /* 3 */
285
- /***/ function(module, exports, __webpack_require__) {
286
-
287
- 'use strict';
288
-
289
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
290
-
291
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
292
-
293
- var PropTypes = __webpack_require__(22);
294
- var RouteHandler = __webpack_require__(6);
295
- var Route = __webpack_require__(5);
296
-
297
- /**
298
- * A <NotFoundRoute> is a special kind of <Route> that
299
- * renders when the beginning of its parent's path matches
300
- * but none of its siblings do, including any <DefaultRoute>.
301
- * Only one such route may be used at any given level in the
302
- * route hierarchy.
303
- */
304
-
305
- var NotFoundRoute = (function (_Route) {
306
- function NotFoundRoute() {
307
- _classCallCheck(this, NotFoundRoute);
308
-
309
- if (_Route != null) {
310
- _Route.apply(this, arguments);
311
- }
312
- }
313
-
314
- _inherits(NotFoundRoute, _Route);
315
-
316
- return NotFoundRoute;
317
- })(Route);
318
-
319
- // TODO: Include these in the above class definition
320
- // once we can use ES7 property initializers.
321
- // https://github.com/babel/babel/issues/619
322
-
323
- NotFoundRoute.propTypes = {
324
- name: PropTypes.string,
325
- path: PropTypes.falsy,
326
- children: PropTypes.falsy,
327
- handler: PropTypes.func.isRequired
328
- };
329
-
330
- NotFoundRoute.defaultProps = {
331
- handler: RouteHandler
332
- };
333
-
334
- module.exports = NotFoundRoute;
335
-
336
- /***/ },
337
- /* 4 */
338
- /***/ function(module, exports, __webpack_require__) {
339
-
340
- 'use strict';
341
-
342
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
343
-
344
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
345
-
346
- var PropTypes = __webpack_require__(22);
347
- var Route = __webpack_require__(5);
348
-
349
- /**
350
- * A <Redirect> component is a special kind of <Route> that always
351
- * redirects to another route when it matches.
352
- */
353
-
354
- var Redirect = (function (_Route) {
355
- function Redirect() {
356
- _classCallCheck(this, Redirect);
357
-
358
- if (_Route != null) {
359
- _Route.apply(this, arguments);
360
- }
361
- }
362
-
363
- _inherits(Redirect, _Route);
364
-
365
- return Redirect;
366
- })(Route);
367
-
368
- // TODO: Include these in the above class definition
369
- // once we can use ES7 property initializers.
370
- // https://github.com/babel/babel/issues/619
371
-
372
- Redirect.propTypes = {
373
- path: PropTypes.string,
374
- from: PropTypes.string, // Alias for path.
375
- to: PropTypes.string,
376
- handler: PropTypes.falsy
377
- };
378
-
379
- // Redirects should not have a default handler
380
- Redirect.defaultProps = {};
381
-
382
- module.exports = Redirect;
383
-
384
- /***/ },
385
- /* 5 */
386
- /***/ function(module, exports, __webpack_require__) {
387
-
388
- 'use strict';
389
-
390
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
391
-
392
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
393
-
394
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
395
-
396
- var React = __webpack_require__(21);
397
- var invariant = __webpack_require__(34);
398
- var PropTypes = __webpack_require__(22);
399
- var RouteHandler = __webpack_require__(6);
400
-
401
- /**
402
- * <Route> components specify components that are rendered to the page when the
403
- * URL matches a given pattern.
404
- *
405
- * Routes are arranged in a nested tree structure. When a new URL is requested,
406
- * the tree is searched depth-first to find a route whose path matches the URL.
407
- * When one is found, all routes in the tree that lead to it are considered
408
- * "active" and their components are rendered into the DOM, nested in the same
409
- * order as they are in the tree.
410
- *
411
- * The preferred way to configure a router is using JSX. The XML-like syntax is
412
- * a great way to visualize how routes are laid out in an application.
413
- *
414
- * var routes = [
415
- * <Route handler={App}>
416
- * <Route name="login" handler={Login}/>
417
- * <Route name="logout" handler={Logout}/>
418
- * <Route name="about" handler={About}/>
419
- * </Route>
420
- * ];
421
- *
422
- * Router.run(routes, function (Handler) {
423
- * React.render(<Handler/>, document.body);
424
- * });
425
- *
426
- * Handlers for Route components that contain children can render their active
427
- * child route using a <RouteHandler> element.
428
- *
429
- * var App = React.createClass({
430
- * render: function () {
431
- * return (
432
- * <div class="application">
433
- * <RouteHandler/>
434
- * </div>
435
- * );
436
- * }
437
- * });
438
- *
439
- * If no handler is provided for the route, it will render a matched child route.
440
- */
441
-
442
- var Route = (function (_React$Component) {
443
- function Route() {
444
- _classCallCheck(this, Route);
445
-
446
- if (_React$Component != null) {
447
- _React$Component.apply(this, arguments);
448
- }
449
- }
450
-
451
- _inherits(Route, _React$Component);
452
-
453
- _createClass(Route, [{
454
- key: 'render',
455
- value: function render() {
456
- invariant(false, '%s elements are for router configuration only and should not be rendered', this.constructor.name);
457
- }
458
- }]);
459
-
460
- return Route;
461
- })(React.Component);
462
-
463
- // TODO: Include these in the above class definition
464
- // once we can use ES7 property initializers.
465
- // https://github.com/babel/babel/issues/619
466
-
467
- Route.propTypes = {
468
- name: PropTypes.string,
469
- path: PropTypes.string,
470
- handler: PropTypes.func,
471
- ignoreScrollBehavior: PropTypes.bool
472
- };
473
-
474
- Route.defaultProps = {
475
- handler: RouteHandler
476
- };
477
-
478
- module.exports = Route;
479
-
480
- /***/ },
481
- /* 6 */
482
- /***/ function(module, exports, __webpack_require__) {
483
-
484
- 'use strict';
485
-
486
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
487
-
488
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
489
-
490
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
491
-
492
- var React = __webpack_require__(21);
493
- var ContextWrapper = __webpack_require__(23);
494
- var assign = __webpack_require__(33);
495
- var PropTypes = __webpack_require__(22);
496
-
497
- var REF_NAME = '__routeHandler__';
498
-
499
- /**
500
- * A <RouteHandler> component renders the active child route handler
501
- * when routes are nested.
502
- */
503
-
504
- var RouteHandler = (function (_React$Component) {
505
- function RouteHandler() {
506
- _classCallCheck(this, RouteHandler);
507
-
508
- if (_React$Component != null) {
509
- _React$Component.apply(this, arguments);
510
- }
511
- }
512
-
513
- _inherits(RouteHandler, _React$Component);
514
-
515
- _createClass(RouteHandler, [{
516
- key: 'getChildContext',
517
- value: function getChildContext() {
518
- return {
519
- routeDepth: this.context.routeDepth + 1
520
- };
521
- }
522
- }, {
523
- key: 'componentDidMount',
524
- value: function componentDidMount() {
525
- this._updateRouteComponent(this.refs[REF_NAME]);
526
- }
527
- }, {
528
- key: 'componentDidUpdate',
529
- value: function componentDidUpdate() {
530
- this._updateRouteComponent(this.refs[REF_NAME]);
531
- }
532
- }, {
533
- key: 'componentWillUnmount',
534
- value: function componentWillUnmount() {
535
- this._updateRouteComponent(null);
536
- }
537
- }, {
538
- key: '_updateRouteComponent',
539
- value: function _updateRouteComponent(component) {
540
- this.context.router.setRouteComponentAtDepth(this.getRouteDepth(), component);
541
- }
542
- }, {
543
- key: 'getRouteDepth',
544
- value: function getRouteDepth() {
545
- return this.context.routeDepth;
546
- }
547
- }, {
548
- key: 'createChildRouteHandler',
549
- value: function createChildRouteHandler(props) {
550
- var route = this.context.router.getRouteAtDepth(this.getRouteDepth());
551
-
552
- if (route == null) {
553
- return null;
554
- }var childProps = assign({}, props || this.props, {
555
- ref: REF_NAME,
556
- params: this.context.router.getCurrentParams(),
557
- query: this.context.router.getCurrentQuery()
558
- });
559
-
560
- return React.createElement(route.handler, childProps);
561
- }
562
- }, {
563
- key: 'render',
564
- value: function render() {
565
- var handler = this.createChildRouteHandler();
566
- // <script/> for things like <CSSTransitionGroup/> that don't like null
567
- return handler ? React.createElement(
568
- ContextWrapper,
569
- null,
570
- handler
571
- ) : React.createElement('script', null);
572
- }
573
- }]);
574
-
575
- return RouteHandler;
576
- })(React.Component);
577
-
578
- // TODO: Include these in the above class definition
579
- // once we can use ES7 property initializers.
580
- // https://github.com/babel/babel/issues/619
581
-
582
- RouteHandler.contextTypes = {
583
- routeDepth: PropTypes.number.isRequired,
584
- router: PropTypes.router.isRequired
585
- };
586
-
587
- RouteHandler.childContextTypes = {
588
- routeDepth: PropTypes.number.isRequired
589
- };
590
-
591
- module.exports = RouteHandler;
592
-
593
- /***/ },
594
- /* 7 */
595
- /***/ function(module, exports, __webpack_require__) {
596
-
597
- 'use strict';
598
-
599
- var LocationActions = __webpack_require__(24);
600
- var History = __webpack_require__(14);
601
-
602
- var _listeners = [];
603
- var _isListening = false;
604
- var _actionType;
605
-
606
- function notifyChange(type) {
607
- if (type === LocationActions.PUSH) History.length += 1;
608
-
609
- var change = {
610
- path: HashLocation.getCurrentPath(),
611
- type: type
612
- };
613
-
614
- _listeners.forEach(function (listener) {
615
- listener.call(HashLocation, change);
616
- });
617
- }
618
-
619
- function ensureSlash() {
620
- var path = HashLocation.getCurrentPath();
621
-
622
- if (path.charAt(0) === '/') {
623
- return true;
624
- }HashLocation.replace('/' + path);
625
-
626
- return false;
627
- }
628
-
629
- function onHashChange() {
630
- if (ensureSlash()) {
631
- // If we don't have an _actionType then all we know is the hash
632
- // changed. It was probably caused by the user clicking the Back
633
- // button, but may have also been the Forward button or manual
634
- // manipulation. So just guess 'pop'.
635
- var curActionType = _actionType;
636
- _actionType = null;
637
- notifyChange(curActionType || LocationActions.POP);
638
- }
639
- }
640
-
641
- /**
642
- * A Location that uses `window.location.hash`.
643
- */
644
- var HashLocation = {
645
-
646
- addChangeListener: function addChangeListener(listener) {
647
- _listeners.push(listener);
648
-
649
- // Do this BEFORE listening for hashchange.
650
- ensureSlash();
651
-
652
- if (!_isListening) {
653
- if (window.addEventListener) {
654
- window.addEventListener('hashchange', onHashChange, false);
655
- } else {
656
- window.attachEvent('onhashchange', onHashChange);
657
- }
658
-
659
- _isListening = true;
660
- }
661
- },
662
-
663
- removeChangeListener: function removeChangeListener(listener) {
664
- _listeners = _listeners.filter(function (l) {
665
- return l !== listener;
666
- });
667
-
668
- if (_listeners.length === 0) {
669
- if (window.removeEventListener) {
670
- window.removeEventListener('hashchange', onHashChange, false);
671
- } else {
672
- window.removeEvent('onhashchange', onHashChange);
673
- }
674
-
675
- _isListening = false;
676
- }
677
- },
678
-
679
- push: function push(path) {
680
- _actionType = LocationActions.PUSH;
681
- window.location.hash = path;
682
- },
683
-
684
- replace: function replace(path) {
685
- _actionType = LocationActions.REPLACE;
686
- window.location.replace(window.location.pathname + window.location.search + '#' + path);
687
- },
688
-
689
- pop: function pop() {
690
- _actionType = LocationActions.POP;
691
- History.back();
692
- },
693
-
694
- getCurrentPath: function getCurrentPath() {
695
- return decodeURI(
696
- // We can't use window.location.hash here because it's not
697
- // consistent across browsers - Firefox will pre-decode it!
698
- window.location.href.split('#')[1] || '');
699
- },
700
-
701
- toString: function toString() {
702
- return '<HashLocation>';
703
- }
704
-
705
- };
706
-
707
- module.exports = HashLocation;
708
-
709
- /***/ },
710
- /* 8 */
711
- /***/ function(module, exports, __webpack_require__) {
712
-
713
- 'use strict';
714
-
715
- var LocationActions = __webpack_require__(24);
716
- var History = __webpack_require__(14);
717
-
718
- var _listeners = [];
719
- var _isListening = false;
720
-
721
- function notifyChange(type) {
722
- var change = {
723
- path: HistoryLocation.getCurrentPath(),
724
- type: type
725
- };
726
-
727
- _listeners.forEach(function (listener) {
728
- listener.call(HistoryLocation, change);
729
- });
730
- }
731
-
732
- function onPopState(event) {
733
- if (event.state === undefined) {
734
- return;
735
- } // Ignore extraneous popstate events in WebKit.
736
-
737
- notifyChange(LocationActions.POP);
738
- }
739
-
740
- /**
741
- * A Location that uses HTML5 history.
742
- */
743
- var HistoryLocation = {
744
-
745
- addChangeListener: function addChangeListener(listener) {
746
- _listeners.push(listener);
747
-
748
- if (!_isListening) {
749
- if (window.addEventListener) {
750
- window.addEventListener('popstate', onPopState, false);
751
- } else {
752
- window.attachEvent('onpopstate', onPopState);
753
- }
754
-
755
- _isListening = true;
756
- }
757
- },
758
-
759
- removeChangeListener: function removeChangeListener(listener) {
760
- _listeners = _listeners.filter(function (l) {
761
- return l !== listener;
762
- });
763
-
764
- if (_listeners.length === 0) {
765
- if (window.addEventListener) {
766
- window.removeEventListener('popstate', onPopState, false);
767
- } else {
768
- window.removeEvent('onpopstate', onPopState);
769
- }
770
-
771
- _isListening = false;
772
- }
773
- },
774
-
775
- push: function push(path) {
776
- window.history.pushState({ path: path }, '', path);
777
- History.length += 1;
778
- notifyChange(LocationActions.PUSH);
779
- },
780
-
781
- replace: function replace(path) {
782
- window.history.replaceState({ path: path }, '', path);
783
- notifyChange(LocationActions.REPLACE);
784
- },
785
-
786
- pop: History.back,
787
-
788
- getCurrentPath: function getCurrentPath() {
789
- return decodeURI(window.location.pathname + window.location.search);
790
- },
791
-
792
- toString: function toString() {
793
- return '<HistoryLocation>';
794
- }
795
-
796
- };
797
-
798
- module.exports = HistoryLocation;
799
-
800
- /***/ },
801
- /* 9 */
802
- /***/ function(module, exports, __webpack_require__) {
803
-
804
- 'use strict';
805
-
806
- var HistoryLocation = __webpack_require__(8);
807
- var History = __webpack_require__(14);
808
-
809
- /**
810
- * A Location that uses full page refreshes. This is used as
811
- * the fallback for HistoryLocation in browsers that do not
812
- * support the HTML5 history API.
813
- */
814
- var RefreshLocation = {
815
-
816
- push: function push(path) {
817
- window.location = path;
818
- },
819
-
820
- replace: function replace(path) {
821
- window.location.replace(path);
822
- },
823
-
824
- pop: History.back,
825
-
826
- getCurrentPath: HistoryLocation.getCurrentPath,
827
-
828
- toString: function toString() {
829
- return '<RefreshLocation>';
830
- }
831
-
832
- };
833
-
834
- module.exports = RefreshLocation;
835
-
836
- /***/ },
837
- /* 10 */
838
- /***/ function(module, exports, __webpack_require__) {
839
-
840
- 'use strict';
841
-
842
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
843
-
844
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
845
-
846
- var invariant = __webpack_require__(34);
847
-
848
- function throwCannotModify() {
849
- invariant(false, 'You cannot modify a static location');
850
- }
851
-
852
- /**
853
- * A location that only ever contains a single path. Useful in
854
- * stateless environments like servers where there is no path history,
855
- * only the path that was used in the request.
856
- */
857
-
858
- var StaticLocation = (function () {
859
- function StaticLocation(path) {
860
- _classCallCheck(this, StaticLocation);
861
-
862
- this.path = path;
863
- }
864
-
865
- _createClass(StaticLocation, [{
866
- key: 'getCurrentPath',
867
- value: function getCurrentPath() {
868
- return this.path;
869
- }
870
- }, {
871
- key: 'toString',
872
- value: function toString() {
873
- return '<StaticLocation path="' + this.path + '">';
874
- }
875
- }]);
876
-
877
- return StaticLocation;
878
- })();
879
-
880
- // TODO: Include these in the above class definition
881
- // once we can use ES7 property initializers.
882
- // https://github.com/babel/babel/issues/619
883
-
884
- StaticLocation.prototype.push = throwCannotModify;
885
- StaticLocation.prototype.replace = throwCannotModify;
886
- StaticLocation.prototype.pop = throwCannotModify;
887
-
888
- module.exports = StaticLocation;
889
-
890
- /***/ },
891
- /* 11 */
892
- /***/ function(module, exports, __webpack_require__) {
893
-
894
- 'use strict';
895
-
896
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
897
-
898
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
899
-
900
- var invariant = __webpack_require__(34);
901
- var LocationActions = __webpack_require__(24);
902
- var History = __webpack_require__(14);
903
-
904
- /**
905
- * A location that is convenient for testing and does not require a DOM.
906
- */
907
-
908
- var TestLocation = (function () {
909
- function TestLocation(history) {
910
- _classCallCheck(this, TestLocation);
911
-
912
- this.history = history || [];
913
- this.listeners = [];
914
- this._updateHistoryLength();
915
- }
916
-
917
- _createClass(TestLocation, [{
918
- key: 'needsDOM',
919
- get: function () {
920
- return false;
921
- }
922
- }, {
923
- key: '_updateHistoryLength',
924
- value: function _updateHistoryLength() {
925
- History.length = this.history.length;
926
- }
927
- }, {
928
- key: '_notifyChange',
929
- value: function _notifyChange(type) {
930
- var change = {
931
- path: this.getCurrentPath(),
932
- type: type
933
- };
934
-
935
- for (var i = 0, len = this.listeners.length; i < len; ++i) this.listeners[i].call(this, change);
936
- }
937
- }, {
938
- key: 'addChangeListener',
939
- value: function addChangeListener(listener) {
940
- this.listeners.push(listener);
941
- }
942
- }, {
943
- key: 'removeChangeListener',
944
- value: function removeChangeListener(listener) {
945
- this.listeners = this.listeners.filter(function (l) {
946
- return l !== listener;
947
- });
948
- }
949
- }, {
950
- key: 'push',
951
- value: function push(path) {
952
- this.history.push(path);
953
- this._updateHistoryLength();
954
- this._notifyChange(LocationActions.PUSH);
955
- }
956
- }, {
957
- key: 'replace',
958
- value: function replace(path) {
959
- invariant(this.history.length, 'You cannot replace the current path with no history');
960
-
961
- this.history[this.history.length - 1] = path;
962
-
963
- this._notifyChange(LocationActions.REPLACE);
964
- }
965
- }, {
966
- key: 'pop',
967
- value: function pop() {
968
- this.history.pop();
969
- this._updateHistoryLength();
970
- this._notifyChange(LocationActions.POP);
971
- }
972
- }, {
973
- key: 'getCurrentPath',
974
- value: function getCurrentPath() {
975
- return this.history[this.history.length - 1];
976
- }
977
- }, {
978
- key: 'toString',
979
- value: function toString() {
980
- return '<TestLocation>';
981
- }
982
- }]);
983
-
984
- return TestLocation;
985
- })();
986
-
987
- module.exports = TestLocation;
988
-
989
- /***/ },
990
- /* 12 */
991
- /***/ function(module, exports, __webpack_require__) {
992
-
993
- 'use strict';
994
-
995
- var LocationActions = __webpack_require__(24);
996
-
997
- /**
998
- * A scroll behavior that attempts to imitate the default behavior
999
- * of modern browsers.
1000
- */
1001
- var ImitateBrowserBehavior = {
1002
-
1003
- updateScrollPosition: function updateScrollPosition(position, actionType) {
1004
- switch (actionType) {
1005
- case LocationActions.PUSH:
1006
- case LocationActions.REPLACE:
1007
- window.scrollTo(0, 0);
1008
- break;
1009
- case LocationActions.POP:
1010
- if (position) {
1011
- window.scrollTo(position.x, position.y);
1012
- } else {
1013
- window.scrollTo(0, 0);
1014
- }
1015
- break;
1016
- }
1017
- }
1018
-
1019
- };
1020
-
1021
- module.exports = ImitateBrowserBehavior;
1022
-
1023
- /***/ },
1024
- /* 13 */
1025
- /***/ function(module, exports, __webpack_require__) {
1026
-
1027
- /**
1028
- * A scroll behavior that always scrolls to the top of the page
1029
- * after a transition.
1030
- */
1031
- "use strict";
1032
-
1033
- var ScrollToTopBehavior = {
1034
-
1035
- updateScrollPosition: function updateScrollPosition() {
1036
- window.scrollTo(0, 0);
1037
- }
1038
-
1039
- };
1040
-
1041
- module.exports = ScrollToTopBehavior;
1042
-
1043
- /***/ },
1044
- /* 14 */
1045
- /***/ function(module, exports, __webpack_require__) {
1046
-
1047
- 'use strict';
1048
-
1049
- var invariant = __webpack_require__(34);
1050
- var canUseDOM = __webpack_require__(35).canUseDOM;
1051
-
1052
- var History = {
1053
-
1054
- /**
1055
- * The current number of entries in the history.
1056
- *
1057
- * Note: This property is read-only.
1058
- */
1059
- length: 1,
1060
-
1061
- /**
1062
- * Sends the browser back one entry in the history.
1063
- */
1064
- back: function back() {
1065
- invariant(canUseDOM, 'Cannot use History.back without a DOM');
1066
-
1067
- // Do this first so that History.length will
1068
- // be accurate in location change listeners.
1069
- History.length -= 1;
1070
-
1071
- window.history.back();
1072
- }
1073
-
1074
- };
1075
-
1076
- module.exports = History;
1077
-
1078
- /***/ },
1079
- /* 15 */
1080
- /***/ function(module, exports, __webpack_require__) {
1081
-
1082
- 'use strict';
1083
-
1084
- var PropTypes = __webpack_require__(22);
1085
-
1086
- /**
1087
- * A mixin for components that modify the URL.
1088
- *
1089
- * Example:
1090
- *
1091
- * var MyLink = React.createClass({
1092
- * mixins: [ Router.Navigation ],
1093
- * handleClick(event) {
1094
- * event.preventDefault();
1095
- * this.transitionTo('aRoute', { the: 'params' }, { the: 'query' });
1096
- * },
1097
- * render() {
1098
- * return (
1099
- * <a onClick={this.handleClick}>Click me!</a>
1100
- * );
1101
- * }
1102
- * });
1103
- */
1104
- var Navigation = {
1105
-
1106
- contextTypes: {
1107
- router: PropTypes.router.isRequired
1108
- },
1109
-
1110
- /**
1111
- * Returns an absolute URL path created from the given route
1112
- * name, URL parameters, and query values.
1113
- */
1114
- makePath: function makePath(to, params, query) {
1115
- return this.context.router.makePath(to, params, query);
1116
- },
1117
-
1118
- /**
1119
- * Returns a string that may safely be used as the href of a
1120
- * link to the route with the given name.
1121
- */
1122
- makeHref: function makeHref(to, params, query) {
1123
- return this.context.router.makeHref(to, params, query);
1124
- },
1125
-
1126
- /**
1127
- * Transitions to the URL specified in the arguments by pushing
1128
- * a new URL onto the history stack.
1129
- */
1130
- transitionTo: function transitionTo(to, params, query) {
1131
- this.context.router.transitionTo(to, params, query);
1132
- },
1133
-
1134
- /**
1135
- * Transitions to the URL specified in the arguments by replacing
1136
- * the current URL in the history stack.
1137
- */
1138
- replaceWith: function replaceWith(to, params, query) {
1139
- this.context.router.replaceWith(to, params, query);
1140
- },
1141
-
1142
- /**
1143
- * Transitions to the previous URL.
1144
- */
1145
- goBack: function goBack() {
1146
- return this.context.router.goBack();
1147
- }
1148
-
1149
- };
1150
-
1151
- module.exports = Navigation;
1152
-
1153
- /***/ },
1154
- /* 16 */
1155
- /***/ function(module, exports, __webpack_require__) {
1156
-
1157
- 'use strict';
1158
-
1159
- var PropTypes = __webpack_require__(22);
1160
-
1161
- /**
1162
- * A mixin for components that need to know the path, routes, URL
1163
- * params and query that are currently active.
1164
- *
1165
- * Example:
1166
- *
1167
- * var AboutLink = React.createClass({
1168
- * mixins: [ Router.State ],
1169
- * render() {
1170
- * var className = this.props.className;
1171
- *
1172
- * if (this.isActive('about'))
1173
- * className += ' is-active';
1174
- *
1175
- * return React.DOM.a({ className: className }, this.props.children);
1176
- * }
1177
- * });
1178
- */
1179
- var State = {
1180
-
1181
- contextTypes: {
1182
- router: PropTypes.router.isRequired
1183
- },
1184
-
1185
- /**
1186
- * Returns the current URL path.
1187
- */
1188
- getPath: function getPath() {
1189
- return this.context.router.getCurrentPath();
1190
- },
1191
-
1192
- /**
1193
- * Returns the current URL path without the query string.
1194
- */
1195
- getPathname: function getPathname() {
1196
- return this.context.router.getCurrentPathname();
1197
- },
1198
-
1199
- /**
1200
- * Returns an object of the URL params that are currently active.
1201
- */
1202
- getParams: function getParams() {
1203
- return this.context.router.getCurrentParams();
1204
- },
1205
-
1206
- /**
1207
- * Returns an object of the query params that are currently active.
1208
- */
1209
- getQuery: function getQuery() {
1210
- return this.context.router.getCurrentQuery();
1211
- },
1212
-
1213
- /**
1214
- * Returns an array of the routes that are currently active.
1215
- */
1216
- getRoutes: function getRoutes() {
1217
- return this.context.router.getCurrentRoutes();
1218
- },
1219
-
1220
- /**
1221
- * A helper method to determine if a given route, params, and query
1222
- * are active.
1223
- */
1224
- isActive: function isActive(to, params, query) {
1225
- return this.context.router.isActive(to, params, query);
1226
- }
1227
-
1228
- };
1229
-
1230
- module.exports = State;
1231
-
1232
- /***/ },
1233
- /* 17 */
1234
- /***/ function(module, exports, __webpack_require__) {
1235
-
1236
- 'use strict';
1237
-
1238
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
1239
-
1240
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
1241
-
1242
- var assign = __webpack_require__(33);
1243
- var invariant = __webpack_require__(34);
1244
- var warning = __webpack_require__(36);
1245
- var PathUtils = __webpack_require__(25);
1246
-
1247
- var _currentRoute;
1248
-
1249
- var Route = (function () {
1250
- function Route(name, path, ignoreScrollBehavior, isDefault, isNotFound, onEnter, onLeave, handler) {
1251
- _classCallCheck(this, Route);
1252
-
1253
- this.name = name;
1254
- this.path = path;
1255
- this.paramNames = PathUtils.extractParamNames(this.path);
1256
- this.ignoreScrollBehavior = !!ignoreScrollBehavior;
1257
- this.isDefault = !!isDefault;
1258
- this.isNotFound = !!isNotFound;
1259
- this.onEnter = onEnter;
1260
- this.onLeave = onLeave;
1261
- this.handler = handler;
1262
- }
1263
-
1264
- _createClass(Route, [{
1265
- key: 'appendChild',
1266
-
1267
- /**
1268
- * Appends the given route to this route's child routes.
1269
- */
1270
- value: function appendChild(route) {
1271
- invariant(route instanceof Route, 'route.appendChild must use a valid Route');
1272
-
1273
- if (!this.childRoutes) this.childRoutes = [];
1274
-
1275
- this.childRoutes.push(route);
1276
- }
1277
- }, {
1278
- key: 'toString',
1279
- value: function toString() {
1280
- var string = '<Route';
1281
-
1282
- if (this.name) string += ' name="' + this.name + '"';
1283
-
1284
- string += ' path="' + this.path + '">';
1285
-
1286
- return string;
1287
- }
1288
- }], [{
1289
- key: 'createRoute',
1290
-
1291
- /**
1292
- * Creates and returns a new route. Options may be a URL pathname string
1293
- * with placeholders for named params or an object with any of the following
1294
- * properties:
1295
- *
1296
- * - name The name of the route. This is used to lookup a
1297
- * route relative to its parent route and should be
1298
- * unique among all child routes of the same parent
1299
- * - path A URL pathname string with optional placeholders
1300
- * that specify the names of params to extract from
1301
- * the URL when the path matches. Defaults to `/${name}`
1302
- * when there is a name given, or the path of the parent
1303
- * route, or /
1304
- * - ignoreScrollBehavior True to make this route (and all descendants) ignore
1305
- * the scroll behavior of the router
1306
- * - isDefault True to make this route the default route among all
1307
- * its siblings
1308
- * - isNotFound True to make this route the "not found" route among
1309
- * all its siblings
1310
- * - onEnter A transition hook that will be called when the
1311
- * router is going to enter this route
1312
- * - onLeave A transition hook that will be called when the
1313
- * router is going to leave this route
1314
- * - handler A React component that will be rendered when
1315
- * this route is active
1316
- * - parentRoute The parent route to use for this route. This option
1317
- * is automatically supplied when creating routes inside
1318
- * the callback to another invocation of createRoute. You
1319
- * only ever need to use this when declaring routes
1320
- * independently of one another to manually piece together
1321
- * the route hierarchy
1322
- *
1323
- * The callback may be used to structure your route hierarchy. Any call to
1324
- * createRoute, createDefaultRoute, createNotFoundRoute, or createRedirect
1325
- * inside the callback automatically uses this route as its parent.
1326
- */
1327
- value: function createRoute(options, callback) {
1328
- options = options || {};
1329
-
1330
- if (typeof options === 'string') options = { path: options };
1331
-
1332
- var parentRoute = _currentRoute;
1333
-
1334
- if (parentRoute) {
1335
- warning(options.parentRoute == null || options.parentRoute === parentRoute, 'You should not use parentRoute with createRoute inside another route\'s child callback; it is ignored');
1336
- } else {
1337
- parentRoute = options.parentRoute;
1338
- }
1339
-
1340
- var name = options.name;
1341
- var path = options.path || name;
1342
-
1343
- if (path && !(options.isDefault || options.isNotFound)) {
1344
- if (PathUtils.isAbsolute(path)) {
1345
- if (parentRoute) {
1346
- invariant(path === parentRoute.path || parentRoute.paramNames.length === 0, 'You cannot nest path "%s" inside "%s"; the parent requires URL parameters', path, parentRoute.path);
1347
- }
1348
- } else if (parentRoute) {
1349
- // Relative paths extend their parent.
1350
- path = PathUtils.join(parentRoute.path, path);
1351
- } else {
1352
- path = '/' + path;
1353
- }
1354
- } else {
1355
- path = parentRoute ? parentRoute.path : '/';
1356
- }
1357
-
1358
- if (options.isNotFound && !/\*$/.test(path)) path += '*'; // Auto-append * to the path of not found routes.
1359
-
1360
- var route = new Route(name, path, options.ignoreScrollBehavior, options.isDefault, options.isNotFound, options.onEnter, options.onLeave, options.handler);
1361
-
1362
- if (parentRoute) {
1363
- if (route.isDefault) {
1364
- invariant(parentRoute.defaultRoute == null, '%s may not have more than one default route', parentRoute);
1365
-
1366
- parentRoute.defaultRoute = route;
1367
- } else if (route.isNotFound) {
1368
- invariant(parentRoute.notFoundRoute == null, '%s may not have more than one not found route', parentRoute);
1369
-
1370
- parentRoute.notFoundRoute = route;
1371
- }
1372
-
1373
- parentRoute.appendChild(route);
1374
- }
1375
-
1376
- // Any routes created in the callback
1377
- // use this route as their parent.
1378
- if (typeof callback === 'function') {
1379
- var currentRoute = _currentRoute;
1380
- _currentRoute = route;
1381
- callback.call(route, route);
1382
- _currentRoute = currentRoute;
1383
- }
1384
-
1385
- return route;
1386
- }
1387
- }, {
1388
- key: 'createDefaultRoute',
1389
-
1390
- /**
1391
- * Creates and returns a route that is rendered when its parent matches
1392
- * the current URL.
1393
- */
1394
- value: function createDefaultRoute(options) {
1395
- return Route.createRoute(assign({}, options, { isDefault: true }));
1396
- }
1397
- }, {
1398
- key: 'createNotFoundRoute',
1399
-
1400
- /**
1401
- * Creates and returns a route that is rendered when its parent matches
1402
- * the current URL but none of its siblings do.
1403
- */
1404
- value: function createNotFoundRoute(options) {
1405
- return Route.createRoute(assign({}, options, { isNotFound: true }));
1406
- }
1407
- }, {
1408
- key: 'createRedirect',
1409
-
1410
- /**
1411
- * Creates and returns a route that automatically redirects the transition
1412
- * to another route. In addition to the normal options to createRoute, this
1413
- * function accepts the following options:
1414
- *
1415
- * - from An alias for the `path` option. Defaults to *
1416
- * - to The path/route/route name to redirect to
1417
- * - params The params to use in the redirect URL. Defaults
1418
- * to using the current params
1419
- * - query The query to use in the redirect URL. Defaults
1420
- * to using the current query
1421
- */
1422
- value: function createRedirect(options) {
1423
- return Route.createRoute(assign({}, options, {
1424
- path: options.path || options.from || '*',
1425
- onEnter: function onEnter(transition, params, query) {
1426
- transition.redirect(options.to, options.params || params, options.query || query);
1427
- }
1428
- }));
1429
- }
1430
- }]);
1431
-
1432
- return Route;
1433
- })();
1434
-
1435
- module.exports = Route;
1436
-
1437
- /***/ },
1438
- /* 18 */
1439
- /***/ function(module, exports, __webpack_require__) {
1440
-
1441
- /* jshint -W084 */
1442
- 'use strict';
1443
-
1444
- var React = __webpack_require__(21);
1445
- var assign = __webpack_require__(33);
1446
- var warning = __webpack_require__(36);
1447
- var DefaultRoute = __webpack_require__(1);
1448
- var NotFoundRoute = __webpack_require__(3);
1449
- var Redirect = __webpack_require__(4);
1450
- var Route = __webpack_require__(17);
1451
-
1452
- function checkPropTypes(componentName, propTypes, props) {
1453
- componentName = componentName || 'UnknownComponent';
1454
-
1455
- for (var propName in propTypes) {
1456
- if (propTypes.hasOwnProperty(propName)) {
1457
- var error = propTypes[propName](props, propName, componentName);
1458
-
1459
- if (error instanceof Error) warning(false, error.message);
1460
- }
1461
- }
1462
- }
1463
-
1464
- function createRouteOptions(props) {
1465
- var options = assign({}, props);
1466
- var handler = options.handler;
1467
-
1468
- if (handler) {
1469
- options.onEnter = handler.willTransitionTo;
1470
- options.onLeave = handler.willTransitionFrom;
1471
- }
1472
-
1473
- return options;
1474
- }
1475
-
1476
- function createRouteFromReactElement(element) {
1477
- if (!React.isValidElement(element)) {
1478
- return;
1479
- }var type = element.type;
1480
- var props = assign({}, type.defaultProps, element.props);
1481
-
1482
- if (type.propTypes) checkPropTypes(type.displayName, type.propTypes, props);
1483
-
1484
- if (type === DefaultRoute) {
1485
- return Route.createDefaultRoute(createRouteOptions(props));
1486
- }if (type === NotFoundRoute) {
1487
- return Route.createNotFoundRoute(createRouteOptions(props));
1488
- }if (type === Redirect) {
1489
- return Route.createRedirect(createRouteOptions(props));
1490
- }return Route.createRoute(createRouteOptions(props), function () {
1491
- if (props.children) createRoutesFromReactChildren(props.children);
1492
- });
1493
- }
1494
-
1495
- /**
1496
- * Creates and returns an array of routes created from the given
1497
- * ReactChildren, all of which should be one of <Route>, <DefaultRoute>,
1498
- * <NotFoundRoute>, or <Redirect>, e.g.:
1499
- *
1500
- * var { createRoutesFromReactChildren, Route, Redirect } = require('react-router');
1501
- *
1502
- * var routes = createRoutesFromReactChildren(
1503
- * <Route path="/" handler={App}>
1504
- * <Route name="user" path="/user/:userId" handler={User}>
1505
- * <Route name="task" path="tasks/:taskId" handler={Task}/>
1506
- * <Redirect from="todos/:taskId" to="task"/>
1507
- * </Route>
1508
- * </Route>
1509
- * );
1510
- */
1511
- function createRoutesFromReactChildren(children) {
1512
- var routes = [];
1513
-
1514
- React.Children.forEach(children, function (child) {
1515
- if (child = createRouteFromReactElement(child)) routes.push(child);
1516
- });
1517
-
1518
- return routes;
1519
- }
1520
-
1521
- module.exports = createRoutesFromReactChildren;
1522
-
1523
- /***/ },
1524
- /* 19 */
1525
- /***/ function(module, exports, __webpack_require__) {
1526
-
1527
- /* jshint -W058 */
1528
- 'use strict';
1529
-
1530
- var React = __webpack_require__(21);
1531
- var warning = __webpack_require__(36);
1532
- var invariant = __webpack_require__(34);
1533
- var canUseDOM = __webpack_require__(35).canUseDOM;
1534
- var LocationActions = __webpack_require__(24);
1535
- var ImitateBrowserBehavior = __webpack_require__(12);
1536
- var HashLocation = __webpack_require__(7);
1537
- var HistoryLocation = __webpack_require__(8);
1538
- var RefreshLocation = __webpack_require__(9);
1539
- var StaticLocation = __webpack_require__(10);
1540
- var ScrollHistory = __webpack_require__(26);
1541
- var createRoutesFromReactChildren = __webpack_require__(18);
1542
- var isReactChildren = __webpack_require__(27);
1543
- var Transition = __webpack_require__(28);
1544
- var PropTypes = __webpack_require__(22);
1545
- var Redirect = __webpack_require__(29);
1546
- var History = __webpack_require__(14);
1547
- var Cancellation = __webpack_require__(30);
1548
- var Match = __webpack_require__(31);
1549
- var Route = __webpack_require__(17);
1550
- var supportsHistory = __webpack_require__(32);
1551
- var PathUtils = __webpack_require__(25);
1552
-
1553
- /**
1554
- * The default location for new routers.
1555
- */
1556
- var DEFAULT_LOCATION = canUseDOM ? HashLocation : '/';
1557
-
1558
- /**
1559
- * The default scroll behavior for new routers.
1560
- */
1561
- var DEFAULT_SCROLL_BEHAVIOR = canUseDOM ? ImitateBrowserBehavior : null;
1562
-
1563
- function hasProperties(object, properties) {
1564
- for (var propertyName in properties) if (properties.hasOwnProperty(propertyName) && object[propertyName] !== properties[propertyName]) {
1565
- return false;
1566
- }return true;
1567
- }
1568
-
1569
- function hasMatch(routes, route, prevParams, nextParams, prevQuery, nextQuery) {
1570
- return routes.some(function (r) {
1571
- if (r !== route) return false;
1572
-
1573
- var paramNames = route.paramNames;
1574
- var paramName;
1575
-
1576
- // Ensure that all params the route cares about did not change.
1577
- for (var i = 0, len = paramNames.length; i < len; ++i) {
1578
- paramName = paramNames[i];
1579
-
1580
- if (nextParams[paramName] !== prevParams[paramName]) return false;
1581
- }
1582
-
1583
- // Ensure the query hasn't changed.
1584
- return hasProperties(prevQuery, nextQuery) && hasProperties(nextQuery, prevQuery);
1585
- });
1586
- }
1587
-
1588
- function addRoutesToNamedRoutes(routes, namedRoutes) {
1589
- var route;
1590
- for (var i = 0, len = routes.length; i < len; ++i) {
1591
- route = routes[i];
1592
-
1593
- if (route.name) {
1594
- invariant(namedRoutes[route.name] == null, 'You may not have more than one route named "%s"', route.name);
1595
-
1596
- namedRoutes[route.name] = route;
1597
- }
1598
-
1599
- if (route.childRoutes) addRoutesToNamedRoutes(route.childRoutes, namedRoutes);
1600
- }
1601
- }
1602
-
1603
- function routeIsActive(activeRoutes, routeName) {
1604
- return activeRoutes.some(function (route) {
1605
- return route.name === routeName;
1606
- });
1607
- }
1608
-
1609
- function paramsAreActive(activeParams, params) {
1610
- for (var property in params) if (String(activeParams[property]) !== String(params[property])) {
1611
- return false;
1612
- }return true;
1613
- }
1614
-
1615
- function queryIsActive(activeQuery, query) {
1616
- for (var property in query) if (String(activeQuery[property]) !== String(query[property])) {
1617
- return false;
1618
- }return true;
1619
- }
1620
-
1621
- /**
1622
- * Creates and returns a new router using the given options. A router
1623
- * is a ReactComponent class that knows how to react to changes in the
1624
- * URL and keep the contents of the page in sync.
1625
- *
1626
- * Options may be any of the following:
1627
- *
1628
- * - routes (required) The route config
1629
- * - location The location to use. Defaults to HashLocation when
1630
- * the DOM is available, "/" otherwise
1631
- * - scrollBehavior The scroll behavior to use. Defaults to ImitateBrowserBehavior
1632
- * when the DOM is available, null otherwise
1633
- * - onError A function that is used to handle errors
1634
- * - onAbort A function that is used to handle aborted transitions
1635
- *
1636
- * When rendering in a server-side environment, the location should simply
1637
- * be the URL path that was used in the request, including the query string.
1638
- */
1639
- function createRouter(options) {
1640
- options = options || {};
1641
-
1642
- if (isReactChildren(options)) options = { routes: options };
1643
-
1644
- var mountedComponents = [];
1645
- var location = options.location || DEFAULT_LOCATION;
1646
- var scrollBehavior = options.scrollBehavior || DEFAULT_SCROLL_BEHAVIOR;
1647
- var state = {};
1648
- var nextState = {};
1649
- var pendingTransition = null;
1650
- var dispatchHandler = null;
1651
-
1652
- if (typeof location === 'string') location = new StaticLocation(location);
1653
-
1654
- if (location instanceof StaticLocation) {
1655
- warning(!canUseDOM || ("production") === 'test', 'You should not use a static location in a DOM environment because ' + 'the router will not be kept in sync with the current URL');
1656
- } else {
1657
- invariant(canUseDOM || location.needsDOM === false, 'You cannot use %s without a DOM', location);
1658
- }
1659
-
1660
- // Automatically fall back to full page refreshes in
1661
- // browsers that don't support the HTML history API.
1662
- if (location === HistoryLocation && !supportsHistory()) location = RefreshLocation;
1663
-
1664
- var Router = React.createClass({
1665
-
1666
- displayName: 'Router',
1667
-
1668
- statics: {
1669
-
1670
- isRunning: false,
1671
-
1672
- cancelPendingTransition: function cancelPendingTransition() {
1673
- if (pendingTransition) {
1674
- pendingTransition.cancel();
1675
- pendingTransition = null;
1676
- }
1677
- },
1678
-
1679
- clearAllRoutes: function clearAllRoutes() {
1680
- Router.cancelPendingTransition();
1681
- Router.namedRoutes = {};
1682
- Router.routes = [];
1683
- },
1684
-
1685
- /**
1686
- * Adds routes to this router from the given children object (see ReactChildren).
1687
- */
1688
- addRoutes: function addRoutes(routes) {
1689
- if (isReactChildren(routes)) routes = createRoutesFromReactChildren(routes);
1690
-
1691
- addRoutesToNamedRoutes(routes, Router.namedRoutes);
1692
-
1693
- Router.routes.push.apply(Router.routes, routes);
1694
- },
1695
-
1696
- /**
1697
- * Replaces routes of this router from the given children object (see ReactChildren).
1698
- */
1699
- replaceRoutes: function replaceRoutes(routes) {
1700
- Router.clearAllRoutes();
1701
- Router.addRoutes(routes);
1702
- Router.refresh();
1703
- },
1704
-
1705
- /**
1706
- * Performs a match of the given path against this router and returns an object
1707
- * with the { routes, params, pathname, query } that match. Returns null if no
1708
- * match can be made.
1709
- */
1710
- match: function match(path) {
1711
- return Match.findMatch(Router.routes, path);
1712
- },
1713
-
1714
- /**
1715
- * Returns an absolute URL path created from the given route
1716
- * name, URL parameters, and query.
1717
- */
1718
- makePath: function makePath(to, params, query) {
1719
- var path;
1720
- if (PathUtils.isAbsolute(to)) {
1721
- path = to;
1722
- } else {
1723
- var route = to instanceof Route ? to : Router.namedRoutes[to];
1724
-
1725
- invariant(route instanceof Route, 'Cannot find a route named "%s"', to);
1726
-
1727
- path = route.path;
1728
- }
1729
-
1730
- return PathUtils.withQuery(PathUtils.injectParams(path, params), query);
1731
- },
1732
-
1733
- /**
1734
- * Returns a string that may safely be used as the href of a link
1735
- * to the route with the given name, URL parameters, and query.
1736
- */
1737
- makeHref: function makeHref(to, params, query) {
1738
- var path = Router.makePath(to, params, query);
1739
- return location === HashLocation ? '#' + path : path;
1740
- },
1741
-
1742
- /**
1743
- * Transitions to the URL specified in the arguments by pushing
1744
- * a new URL onto the history stack.
1745
- */
1746
- transitionTo: function transitionTo(to, params, query) {
1747
- var path = Router.makePath(to, params, query);
1748
-
1749
- if (pendingTransition) {
1750
- // Replace so pending location does not stay in history.
1751
- location.replace(path);
1752
- } else {
1753
- location.push(path);
1754
- }
1755
- },
1756
-
1757
- /**
1758
- * Transitions to the URL specified in the arguments by replacing
1759
- * the current URL in the history stack.
1760
- */
1761
- replaceWith: function replaceWith(to, params, query) {
1762
- location.replace(Router.makePath(to, params, query));
1763
- },
1764
-
1765
- /**
1766
- * Transitions to the previous URL if one is available. Returns true if the
1767
- * router was able to go back, false otherwise.
1768
- *
1769
- * Note: The router only tracks history entries in your application, not the
1770
- * current browser session, so you can safely call this function without guarding
1771
- * against sending the user back to some other site. However, when using
1772
- * RefreshLocation (which is the fallback for HistoryLocation in browsers that
1773
- * don't support HTML5 history) this method will *always* send the client back
1774
- * because we cannot reliably track history length.
1775
- */
1776
- goBack: function goBack() {
1777
- if (History.length > 1 || location === RefreshLocation) {
1778
- location.pop();
1779
- return true;
1780
- }
1781
-
1782
- warning(false, 'goBack() was ignored because there is no router history');
1783
-
1784
- return false;
1785
- },
1786
-
1787
- handleAbort: options.onAbort || function (abortReason) {
1788
- if (location instanceof StaticLocation) throw new Error('Unhandled aborted transition! Reason: ' + abortReason);
1789
-
1790
- if (abortReason instanceof Cancellation) {
1791
- return;
1792
- } else if (abortReason instanceof Redirect) {
1793
- location.replace(Router.makePath(abortReason.to, abortReason.params, abortReason.query));
1794
- } else {
1795
- location.pop();
1796
- }
1797
- },
1798
-
1799
- handleError: options.onError || function (error) {
1800
- // Throw so we don't silently swallow async errors.
1801
- throw error; // This error probably originated in a transition hook.
1802
- },
1803
-
1804
- handleLocationChange: function handleLocationChange(change) {
1805
- Router.dispatch(change.path, change.type);
1806
- },
1807
-
1808
- /**
1809
- * Performs a transition to the given path and calls callback(error, abortReason)
1810
- * when the transition is finished. If both arguments are null the router's state
1811
- * was updated. Otherwise the transition did not complete.
1812
- *
1813
- * In a transition, a router first determines which routes are involved by beginning
1814
- * with the current route, up the route tree to the first parent route that is shared
1815
- * with the destination route, and back down the tree to the destination route. The
1816
- * willTransitionFrom hook is invoked on all route handlers we're transitioning away
1817
- * from, in reverse nesting order. Likewise, the willTransitionTo hook is invoked on
1818
- * all route handlers we're transitioning to.
1819
- *
1820
- * Both willTransitionFrom and willTransitionTo hooks may either abort or redirect the
1821
- * transition. To resolve asynchronously, they may use the callback argument. If no
1822
- * hooks wait, the transition is fully synchronous.
1823
- */
1824
- dispatch: function dispatch(path, action) {
1825
- Router.cancelPendingTransition();
1826
-
1827
- var prevPath = state.path;
1828
- var isRefreshing = action == null;
1829
-
1830
- if (prevPath === path && !isRefreshing) {
1831
- return;
1832
- } // Nothing to do!
1833
-
1834
- // Record the scroll position as early as possible to
1835
- // get it before browsers try update it automatically.
1836
- if (prevPath && action === LocationActions.PUSH) Router.recordScrollPosition(prevPath);
1837
-
1838
- var match = Router.match(path);
1839
-
1840
- warning(match != null, 'No route matches path "%s". Make sure you have <Route path="%s"> somewhere in your routes', path, path);
1841
-
1842
- if (match == null) match = {};
1843
-
1844
- var prevRoutes = state.routes || [];
1845
- var prevParams = state.params || {};
1846
- var prevQuery = state.query || {};
1847
-
1848
- var nextRoutes = match.routes || [];
1849
- var nextParams = match.params || {};
1850
- var nextQuery = match.query || {};
1851
-
1852
- var fromRoutes, toRoutes;
1853
- if (prevRoutes.length) {
1854
- fromRoutes = prevRoutes.filter(function (route) {
1855
- return !hasMatch(nextRoutes, route, prevParams, nextParams, prevQuery, nextQuery);
1856
- });
1857
-
1858
- toRoutes = nextRoutes.filter(function (route) {
1859
- return !hasMatch(prevRoutes, route, prevParams, nextParams, prevQuery, nextQuery);
1860
- });
1861
- } else {
1862
- fromRoutes = [];
1863
- toRoutes = nextRoutes;
1864
- }
1865
-
1866
- var transition = new Transition(path, Router.replaceWith.bind(Router, path));
1867
- pendingTransition = transition;
1868
-
1869
- var fromComponents = mountedComponents.slice(prevRoutes.length - fromRoutes.length);
1870
-
1871
- Transition.from(transition, fromRoutes, fromComponents, function (error) {
1872
- if (error || transition.abortReason) return dispatchHandler.call(Router, error, transition); // No need to continue.
1873
-
1874
- Transition.to(transition, toRoutes, nextParams, nextQuery, function (error) {
1875
- dispatchHandler.call(Router, error, transition, {
1876
- path: path,
1877
- action: action,
1878
- pathname: match.pathname,
1879
- routes: nextRoutes,
1880
- params: nextParams,
1881
- query: nextQuery
1882
- });
1883
- });
1884
- });
1885
- },
1886
-
1887
- /**
1888
- * Starts this router and calls callback(router, state) when the route changes.
1889
- *
1890
- * If the router's location is static (i.e. a URL path in a server environment)
1891
- * the callback is called only once. Otherwise, the location should be one of the
1892
- * Router.*Location objects (e.g. Router.HashLocation or Router.HistoryLocation).
1893
- */
1894
- run: function run(callback) {
1895
- invariant(!Router.isRunning, 'Router is already running');
1896
-
1897
- dispatchHandler = function (error, transition, newState) {
1898
- if (error) Router.handleError(error);
1899
-
1900
- if (pendingTransition !== transition) return;
1901
-
1902
- pendingTransition = null;
1903
-
1904
- if (transition.abortReason) {
1905
- Router.handleAbort(transition.abortReason);
1906
- } else {
1907
- callback.call(Router, Router, nextState = newState);
1908
- }
1909
- };
1910
-
1911
- if (!(location instanceof StaticLocation)) {
1912
- if (location.addChangeListener) location.addChangeListener(Router.handleLocationChange);
1913
-
1914
- Router.isRunning = true;
1915
- }
1916
-
1917
- // Bootstrap using the current path.
1918
- Router.refresh();
1919
- },
1920
-
1921
- refresh: function refresh() {
1922
- Router.dispatch(location.getCurrentPath(), null);
1923
- },
1924
-
1925
- stop: function stop() {
1926
- Router.cancelPendingTransition();
1927
-
1928
- if (location.removeChangeListener) location.removeChangeListener(Router.handleLocationChange);
1929
-
1930
- Router.isRunning = false;
1931
- },
1932
-
1933
- getLocation: function getLocation() {
1934
- return location;
1935
- },
1936
-
1937
- getScrollBehavior: function getScrollBehavior() {
1938
- return scrollBehavior;
1939
- },
1940
-
1941
- getRouteAtDepth: function getRouteAtDepth(routeDepth) {
1942
- var routes = state.routes;
1943
- return routes && routes[routeDepth];
1944
- },
1945
-
1946
- setRouteComponentAtDepth: function setRouteComponentAtDepth(routeDepth, component) {
1947
- mountedComponents[routeDepth] = component;
1948
- },
1949
-
1950
- /**
1951
- * Returns the current URL path + query string.
1952
- */
1953
- getCurrentPath: function getCurrentPath() {
1954
- return state.path;
1955
- },
1956
-
1957
- /**
1958
- * Returns the current URL path without the query string.
1959
- */
1960
- getCurrentPathname: function getCurrentPathname() {
1961
- return state.pathname;
1962
- },
1963
-
1964
- /**
1965
- * Returns an object of the currently active URL parameters.
1966
- */
1967
- getCurrentParams: function getCurrentParams() {
1968
- return state.params;
1969
- },
1970
-
1971
- /**
1972
- * Returns an object of the currently active query parameters.
1973
- */
1974
- getCurrentQuery: function getCurrentQuery() {
1975
- return state.query;
1976
- },
1977
-
1978
- /**
1979
- * Returns an array of the currently active routes.
1980
- */
1981
- getCurrentRoutes: function getCurrentRoutes() {
1982
- return state.routes;
1983
- },
1984
-
1985
- /**
1986
- * Returns true if the given route, params, and query are active.
1987
- */
1988
- isActive: function isActive(to, params, query) {
1989
- if (PathUtils.isAbsolute(to)) {
1990
- return to === state.path;
1991
- }return routeIsActive(state.routes, to) && paramsAreActive(state.params, params) && (query == null || queryIsActive(state.query, query));
1992
- }
1993
-
1994
- },
1995
-
1996
- mixins: [ScrollHistory],
1997
-
1998
- propTypes: {
1999
- children: PropTypes.falsy
2000
- },
2001
-
2002
- childContextTypes: {
2003
- routeDepth: PropTypes.number.isRequired,
2004
- router: PropTypes.router.isRequired
2005
- },
2006
-
2007
- getChildContext: function getChildContext() {
2008
- return {
2009
- routeDepth: 1,
2010
- router: Router
2011
- };
2012
- },
2013
-
2014
- getInitialState: function getInitialState() {
2015
- return state = nextState;
2016
- },
2017
-
2018
- componentWillReceiveProps: function componentWillReceiveProps() {
2019
- this.setState(state = nextState);
2020
- },
2021
-
2022
- componentWillUnmount: function componentWillUnmount() {
2023
- Router.stop();
2024
- },
2025
-
2026
- render: function render() {
2027
- var route = Router.getRouteAtDepth(0);
2028
- return route ? React.createElement(route.handler, this.props) : null;
2029
- }
2030
-
2031
- });
2032
-
2033
- Router.clearAllRoutes();
2034
-
2035
- if (options.routes) Router.addRoutes(options.routes);
2036
-
2037
- return Router;
2038
- }
2039
-
2040
- module.exports = createRouter;
2041
-
2042
- /***/ },
2043
- /* 20 */
2044
- /***/ function(module, exports, __webpack_require__) {
2045
-
2046
- 'use strict';
2047
-
2048
- var createRouter = __webpack_require__(19);
2049
-
2050
- /**
2051
- * A high-level convenience method that creates, configures, and
2052
- * runs a router in one shot. The method signature is:
2053
- *
2054
- * Router.run(routes[, location ], callback);
2055
- *
2056
- * Using `window.location.hash` to manage the URL, you could do:
2057
- *
2058
- * Router.run(routes, function (Handler) {
2059
- * React.render(<Handler/>, document.body);
2060
- * });
2061
- *
2062
- * Using HTML5 history and a custom "cursor" prop:
2063
- *
2064
- * Router.run(routes, Router.HistoryLocation, function (Handler) {
2065
- * React.render(<Handler cursor={cursor}/>, document.body);
2066
- * });
2067
- *
2068
- * Returns the newly created router.
2069
- *
2070
- * Note: If you need to specify further options for your router such
2071
- * as error/abort handling or custom scroll behavior, use Router.create
2072
- * instead.
2073
- *
2074
- * var router = Router.create(options);
2075
- * router.run(function (Handler) {
2076
- * // ...
2077
- * });
2078
- */
2079
- function runRouter(routes, location, callback) {
2080
- if (typeof location === 'function') {
2081
- callback = location;
2082
- location = null;
2083
- }
2084
-
2085
- var router = createRouter({
2086
- routes: routes,
2087
- location: location
2088
- });
2089
-
2090
- router.run(callback);
2091
-
2092
- return router;
2093
- }
2094
-
2095
- module.exports = runRouter;
2096
-
2097
- /***/ },
2098
- /* 21 */
2099
- /***/ function(module, exports, __webpack_require__) {
2100
-
2101
- module.exports = __WEBPACK_EXTERNAL_MODULE_21__;
2102
-
2103
- /***/ },
2104
- /* 22 */
2105
- /***/ function(module, exports, __webpack_require__) {
2106
-
2107
- 'use strict';
2108
-
2109
- var assign = __webpack_require__(33);
2110
- var ReactPropTypes = __webpack_require__(21).PropTypes;
2111
- var Route = __webpack_require__(17);
2112
-
2113
- var PropTypes = assign({}, ReactPropTypes, {
2114
-
2115
- /**
2116
- * Indicates that a prop should be falsy.
2117
- */
2118
- falsy: function falsy(props, propName, componentName) {
2119
- if (props[propName]) {
2120
- return new Error('<' + componentName + '> should not have a "' + propName + '" prop');
2121
- }
2122
- },
2123
-
2124
- /**
2125
- * Indicates that a prop should be a Route object.
2126
- */
2127
- route: ReactPropTypes.instanceOf(Route),
2128
-
2129
- /**
2130
- * Indicates that a prop should be a Router object.
2131
- */
2132
- //router: ReactPropTypes.instanceOf(Router) // TODO
2133
- router: ReactPropTypes.func
2134
-
2135
- });
2136
-
2137
- module.exports = PropTypes;
2138
-
2139
- /***/ },
2140
- /* 23 */
2141
- /***/ function(module, exports, __webpack_require__) {
2142
-
2143
- 'use strict';
2144
-
2145
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
2146
-
2147
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
2148
-
2149
- var _inherits = function (subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
2150
-
2151
- /**
2152
- * This component is necessary to get around a context warning
2153
- * present in React 0.13.0. It sovles this by providing a separation
2154
- * between the "owner" and "parent" contexts.
2155
- */
2156
-
2157
- var React = __webpack_require__(21);
2158
-
2159
- var ContextWrapper = (function (_React$Component) {
2160
- function ContextWrapper() {
2161
- _classCallCheck(this, ContextWrapper);
2162
-
2163
- if (_React$Component != null) {
2164
- _React$Component.apply(this, arguments);
2165
- }
2166
- }
2167
-
2168
- _inherits(ContextWrapper, _React$Component);
2169
-
2170
- _createClass(ContextWrapper, [{
2171
- key: 'render',
2172
- value: function render() {
2173
- return this.props.children;
2174
- }
2175
- }]);
2176
-
2177
- return ContextWrapper;
2178
- })(React.Component);
2179
-
2180
- module.exports = ContextWrapper;
2181
-
2182
- /***/ },
2183
- /* 24 */
2184
- /***/ function(module, exports, __webpack_require__) {
2185
-
2186
- /**
2187
- * Actions that modify the URL.
2188
- */
2189
- 'use strict';
2190
-
2191
- var LocationActions = {
2192
-
2193
- /**
2194
- * Indicates a new location is being pushed to the history stack.
2195
- */
2196
- PUSH: 'push',
2197
-
2198
- /**
2199
- * Indicates the current location should be replaced.
2200
- */
2201
- REPLACE: 'replace',
2202
-
2203
- /**
2204
- * Indicates the most recent entry should be removed from the history stack.
2205
- */
2206
- POP: 'pop'
2207
-
2208
- };
2209
-
2210
- module.exports = LocationActions;
2211
-
2212
- /***/ },
2213
- /* 25 */
2214
- /***/ function(module, exports, __webpack_require__) {
2215
-
2216
- 'use strict';
2217
-
2218
- var invariant = __webpack_require__(34);
2219
- var assign = __webpack_require__(38);
2220
- var qs = __webpack_require__(39);
2221
-
2222
- var paramCompileMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*.()\[\]\\+|{}^$]/g;
2223
- var paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?]?)|[*]/g;
2224
- var paramInjectTrailingSlashMatcher = /\/\/\?|\/\?\/|\/\?/g;
2225
- var queryMatcher = /\?(.*)$/;
2226
-
2227
- var _compiledPatterns = {};
2228
-
2229
- function compilePattern(pattern) {
2230
- if (!(pattern in _compiledPatterns)) {
2231
- var paramNames = [];
2232
- var source = pattern.replace(paramCompileMatcher, function (match, paramName) {
2233
- if (paramName) {
2234
- paramNames.push(paramName);
2235
- return '([^/?#]+)';
2236
- } else if (match === '*') {
2237
- paramNames.push('splat');
2238
- return '(.*?)';
2239
- } else {
2240
- return '\\' + match;
2241
- }
2242
- });
2243
-
2244
- _compiledPatterns[pattern] = {
2245
- matcher: new RegExp('^' + source + '$', 'i'),
2246
- paramNames: paramNames
2247
- };
2248
- }
2249
-
2250
- return _compiledPatterns[pattern];
2251
- }
2252
-
2253
- var PathUtils = {
2254
-
2255
- /**
2256
- * Returns true if the given path is absolute.
2257
- */
2258
- isAbsolute: function isAbsolute(path) {
2259
- return path.charAt(0) === '/';
2260
- },
2261
-
2262
- /**
2263
- * Joins two URL paths together.
2264
- */
2265
- join: function join(a, b) {
2266
- return a.replace(/\/*$/, '/') + b;
2267
- },
2268
-
2269
- /**
2270
- * Returns an array of the names of all parameters in the given pattern.
2271
- */
2272
- extractParamNames: function extractParamNames(pattern) {
2273
- return compilePattern(pattern).paramNames;
2274
- },
2275
-
2276
- /**
2277
- * Extracts the portions of the given URL path that match the given pattern
2278
- * and returns an object of param name => value pairs. Returns null if the
2279
- * pattern does not match the given path.
2280
- */
2281
- extractParams: function extractParams(pattern, path) {
2282
- var _compilePattern = compilePattern(pattern);
2283
-
2284
- var matcher = _compilePattern.matcher;
2285
- var paramNames = _compilePattern.paramNames;
2286
-
2287
- var match = path.match(matcher);
2288
-
2289
- if (!match) {
2290
- return null;
2291
- }var params = {};
2292
-
2293
- paramNames.forEach(function (paramName, index) {
2294
- params[paramName] = match[index + 1];
2295
- });
2296
-
2297
- return params;
2298
- },
2299
-
2300
- /**
2301
- * Returns a version of the given route path with params interpolated. Throws
2302
- * if there is a dynamic segment of the route path for which there is no param.
2303
- */
2304
- injectParams: function injectParams(pattern, params) {
2305
- params = params || {};
2306
-
2307
- var splatIndex = 0;
2308
-
2309
- return pattern.replace(paramInjectMatcher, function (match, paramName) {
2310
- paramName = paramName || 'splat';
2311
-
2312
- // If param is optional don't check for existence
2313
- if (paramName.slice(-1) === '?') {
2314
- paramName = paramName.slice(0, -1);
2315
-
2316
- if (params[paramName] == null) return '';
2317
- } else {
2318
- invariant(params[paramName] != null, 'Missing "%s" parameter for path "%s"', paramName, pattern);
2319
- }
2320
-
2321
- var segment;
2322
- if (paramName === 'splat' && Array.isArray(params[paramName])) {
2323
- segment = params[paramName][splatIndex++];
2324
-
2325
- invariant(segment != null, 'Missing splat # %s for path "%s"', splatIndex, pattern);
2326
- } else {
2327
- segment = params[paramName];
2328
- }
2329
-
2330
- return segment;
2331
- }).replace(paramInjectTrailingSlashMatcher, '/');
2332
- },
2333
-
2334
- /**
2335
- * Returns an object that is the result of parsing any query string contained
2336
- * in the given path, null if the path contains no query string.
2337
- */
2338
- extractQuery: function extractQuery(path) {
2339
- var match = path.match(queryMatcher);
2340
- return match && qs.parse(match[1]);
2341
- },
2342
-
2343
- /**
2344
- * Returns a version of the given path without the query string.
2345
- */
2346
- withoutQuery: function withoutQuery(path) {
2347
- return path.replace(queryMatcher, '');
2348
- },
2349
-
2350
- /**
2351
- * Returns a version of the given path with the parameters in the given
2352
- * query merged into the query string.
2353
- */
2354
- withQuery: function withQuery(path, query) {
2355
- var existingQuery = PathUtils.extractQuery(path);
2356
-
2357
- if (existingQuery) query = query ? assign(existingQuery, query) : existingQuery;
2358
-
2359
- var queryString = qs.stringify(query, { arrayFormat: 'brackets' });
2360
-
2361
- if (queryString) {
2362
- return PathUtils.withoutQuery(path) + '?' + queryString;
2363
- }return PathUtils.withoutQuery(path);
2364
- }
2365
-
2366
- };
2367
-
2368
- module.exports = PathUtils;
2369
-
2370
- /***/ },
2371
- /* 26 */
2372
- /***/ function(module, exports, __webpack_require__) {
2373
-
2374
- 'use strict';
2375
-
2376
- var invariant = __webpack_require__(34);
2377
- var canUseDOM = __webpack_require__(35).canUseDOM;
2378
- var getWindowScrollPosition = __webpack_require__(37);
2379
-
2380
- function shouldUpdateScroll(state, prevState) {
2381
- if (!prevState) {
2382
- return true;
2383
- } // Don't update scroll position when only the query has changed.
2384
- if (state.pathname === prevState.pathname) {
2385
- return false;
2386
- }var routes = state.routes;
2387
- var prevRoutes = prevState.routes;
2388
-
2389
- var sharedAncestorRoutes = routes.filter(function (route) {
2390
- return prevRoutes.indexOf(route) !== -1;
2391
- });
2392
-
2393
- return !sharedAncestorRoutes.some(function (route) {
2394
- return route.ignoreScrollBehavior;
2395
- });
2396
- }
2397
-
2398
- /**
2399
- * Provides the router with the ability to manage window scroll position
2400
- * according to its scroll behavior.
2401
- */
2402
- var ScrollHistory = {
2403
-
2404
- statics: {
2405
-
2406
- /**
2407
- * Records curent scroll position as the last known position for the given URL path.
2408
- */
2409
- recordScrollPosition: function recordScrollPosition(path) {
2410
- if (!this.scrollHistory) this.scrollHistory = {};
2411
-
2412
- this.scrollHistory[path] = getWindowScrollPosition();
2413
- },
2414
-
2415
- /**
2416
- * Returns the last known scroll position for the given URL path.
2417
- */
2418
- getScrollPosition: function getScrollPosition(path) {
2419
- if (!this.scrollHistory) this.scrollHistory = {};
2420
-
2421
- return this.scrollHistory[path] || null;
2422
- }
2423
-
2424
- },
2425
-
2426
- componentWillMount: function componentWillMount() {
2427
- invariant(this.constructor.getScrollBehavior() == null || canUseDOM, 'Cannot use scroll behavior without a DOM');
2428
- },
2429
-
2430
- componentDidMount: function componentDidMount() {
2431
- this._updateScroll();
2432
- },
2433
-
2434
- componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
2435
- this._updateScroll(prevState);
2436
- },
2437
-
2438
- _updateScroll: function _updateScroll(prevState) {
2439
- if (!shouldUpdateScroll(this.state, prevState)) {
2440
- return;
2441
- }var scrollBehavior = this.constructor.getScrollBehavior();
2442
-
2443
- if (scrollBehavior) scrollBehavior.updateScrollPosition(this.constructor.getScrollPosition(this.state.path), this.state.action);
2444
- }
2445
-
2446
- };
2447
-
2448
- module.exports = ScrollHistory;
2449
-
2450
- /***/ },
2451
- /* 27 */
2452
- /***/ function(module, exports, __webpack_require__) {
2453
-
2454
- 'use strict';
2455
-
2456
- var React = __webpack_require__(21);
2457
-
2458
- function isValidChild(object) {
2459
- return object == null || React.isValidElement(object);
2460
- }
2461
-
2462
- function isReactChildren(object) {
2463
- return isValidChild(object) || Array.isArray(object) && object.every(isValidChild);
2464
- }
2465
-
2466
- module.exports = isReactChildren;
2467
-
2468
- /***/ },
2469
- /* 28 */
2470
- /***/ function(module, exports, __webpack_require__) {
2471
-
2472
- /* jshint -W058 */
2473
-
2474
- 'use strict';
2475
-
2476
- var Cancellation = __webpack_require__(30);
2477
- var Redirect = __webpack_require__(29);
2478
-
2479
- /**
2480
- * Encapsulates a transition to a given path.
2481
- *
2482
- * The willTransitionTo and willTransitionFrom handlers receive
2483
- * an instance of this class as their first argument.
2484
- */
2485
- function Transition(path, retry) {
2486
- this.path = path;
2487
- this.abortReason = null;
2488
- // TODO: Change this to router.retryTransition(transition)
2489
- this.retry = retry.bind(this);
2490
- }
2491
-
2492
- Transition.prototype.abort = function (reason) {
2493
- if (this.abortReason == null) this.abortReason = reason || 'ABORT';
2494
- };
2495
-
2496
- Transition.prototype.redirect = function (to, params, query) {
2497
- this.abort(new Redirect(to, params, query));
2498
- };
2499
-
2500
- Transition.prototype.cancel = function () {
2501
- this.abort(new Cancellation());
2502
- };
2503
-
2504
- Transition.from = function (transition, routes, components, callback) {
2505
- routes.reduce(function (callback, route, index) {
2506
- return function (error) {
2507
- if (error || transition.abortReason) {
2508
- callback(error);
2509
- } else if (route.onLeave) {
2510
- try {
2511
- route.onLeave(transition, components[index], callback);
2512
-
2513
- // If there is no callback in the argument list, call it automatically.
2514
- if (route.onLeave.length < 3) callback();
2515
- } catch (e) {
2516
- callback(e);
2517
- }
2518
- } else {
2519
- callback();
2520
- }
2521
- };
2522
- }, callback)();
2523
- };
2524
-
2525
- Transition.to = function (transition, routes, params, query, callback) {
2526
- routes.reduceRight(function (callback, route) {
2527
- return function (error) {
2528
- if (error || transition.abortReason) {
2529
- callback(error);
2530
- } else if (route.onEnter) {
2531
- try {
2532
- route.onEnter(transition, params, query, callback);
2533
-
2534
- // If there is no callback in the argument list, call it automatically.
2535
- if (route.onEnter.length < 4) callback();
2536
- } catch (e) {
2537
- callback(e);
2538
- }
2539
- } else {
2540
- callback();
2541
- }
2542
- };
2543
- }, callback)();
2544
- };
2545
-
2546
- module.exports = Transition;
2547
-
2548
- /***/ },
2549
- /* 29 */
2550
- /***/ function(module, exports, __webpack_require__) {
2551
-
2552
- /**
2553
- * Encapsulates a redirect to the given route.
2554
- */
2555
- "use strict";
2556
-
2557
- function Redirect(to, params, query) {
2558
- this.to = to;
2559
- this.params = params;
2560
- this.query = query;
2561
- }
2562
-
2563
- module.exports = Redirect;
2564
-
2565
- /***/ },
2566
- /* 30 */
2567
- /***/ function(module, exports, __webpack_require__) {
2568
-
2569
- /**
2570
- * Represents a cancellation caused by navigating away
2571
- * before the previous transition has fully resolved.
2572
- */
2573
- "use strict";
2574
-
2575
- function Cancellation() {}
2576
-
2577
- module.exports = Cancellation;
2578
-
2579
- /***/ },
2580
- /* 31 */
2581
- /***/ function(module, exports, __webpack_require__) {
2582
-
2583
- 'use strict';
2584
-
2585
- var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
2586
-
2587
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
2588
-
2589
- /* jshint -W084 */
2590
- var PathUtils = __webpack_require__(25);
2591
-
2592
- function deepSearch(route, pathname, query) {
2593
- // Check the subtree first to find the most deeply-nested match.
2594
- var childRoutes = route.childRoutes;
2595
- if (childRoutes) {
2596
- var match, childRoute;
2597
- for (var i = 0, len = childRoutes.length; i < len; ++i) {
2598
- childRoute = childRoutes[i];
2599
-
2600
- if (childRoute.isDefault || childRoute.isNotFound) continue; // Check these in order later.
2601
-
2602
- if (match = deepSearch(childRoute, pathname, query)) {
2603
- // A route in the subtree matched! Add this route and we're done.
2604
- match.routes.unshift(route);
2605
- return match;
2606
- }
2607
- }
2608
- }
2609
-
2610
- // No child routes matched; try the default route.
2611
- var defaultRoute = route.defaultRoute;
2612
- if (defaultRoute && (params = PathUtils.extractParams(defaultRoute.path, pathname))) {
2613
- return new Match(pathname, params, query, [route, defaultRoute]);
2614
- } // Does the "not found" route match?
2615
- var notFoundRoute = route.notFoundRoute;
2616
- if (notFoundRoute && (params = PathUtils.extractParams(notFoundRoute.path, pathname))) {
2617
- return new Match(pathname, params, query, [route, notFoundRoute]);
2618
- } // Last attempt: check this route.
2619
- var params = PathUtils.extractParams(route.path, pathname);
2620
- if (params) {
2621
- return new Match(pathname, params, query, [route]);
2622
- }return null;
2623
- }
2624
-
2625
- var Match = (function () {
2626
- function Match(pathname, params, query, routes) {
2627
- _classCallCheck(this, Match);
2628
-
2629
- this.pathname = pathname;
2630
- this.params = params;
2631
- this.query = query;
2632
- this.routes = routes;
2633
- }
2634
-
2635
- _createClass(Match, null, [{
2636
- key: 'findMatch',
2637
-
2638
- /**
2639
- * Attempts to match depth-first a route in the given route's
2640
- * subtree against the given path and returns the match if it
2641
- * succeeds, null if no match can be made.
2642
- */
2643
- value: function findMatch(routes, path) {
2644
- var pathname = PathUtils.withoutQuery(path);
2645
- var query = PathUtils.extractQuery(path);
2646
- var match = null;
2647
-
2648
- for (var i = 0, len = routes.length; match == null && i < len; ++i) match = deepSearch(routes[i], pathname, query);
2649
-
2650
- return match;
2651
- }
2652
- }]);
2653
-
2654
- return Match;
2655
- })();
2656
-
2657
- module.exports = Match;
2658
-
2659
- /***/ },
2660
- /* 32 */
2661
- /***/ function(module, exports, __webpack_require__) {
2662
-
2663
- 'use strict';
2664
-
2665
- function supportsHistory() {
2666
- /*! taken from modernizr
2667
- * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
2668
- * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
2669
- * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586
2670
- */
2671
- var ua = navigator.userAgent;
2672
- if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {
2673
- return false;
2674
- }
2675
- return window.history && 'pushState' in window.history;
2676
- }
2677
-
2678
- module.exports = supportsHistory;
2679
-
2680
- /***/ },
2681
- /* 33 */
2682
- /***/ function(module, exports, __webpack_require__) {
2683
-
2684
- /**
2685
- * Copyright 2014-2015, Facebook, Inc.
2686
- * All rights reserved.
2687
- *
2688
- * This source code is licensed under the BSD-style license found in the
2689
- * LICENSE file in the root directory of this source tree. An additional grant
2690
- * of patent rights can be found in the PATENTS file in the same directory.
2691
- *
2692
- * @providesModule Object.assign
2693
- */
2694
-
2695
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign
2696
-
2697
- 'use strict';
2698
-
2699
- function assign(target, sources) {
2700
- if (target == null) {
2701
- throw new TypeError('Object.assign target cannot be null or undefined');
2702
- }
2703
-
2704
- var to = Object(target);
2705
- var hasOwnProperty = Object.prototype.hasOwnProperty;
2706
-
2707
- for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {
2708
- var nextSource = arguments[nextIndex];
2709
- if (nextSource == null) {
2710
- continue;
2711
- }
2712
-
2713
- var from = Object(nextSource);
2714
-
2715
- // We don't currently support accessors nor proxies. Therefore this
2716
- // copy cannot throw. If we ever supported this then we must handle
2717
- // exceptions and side-effects. We don't support symbols so they won't
2718
- // be transferred.
2719
-
2720
- for (var key in from) {
2721
- if (hasOwnProperty.call(from, key)) {
2722
- to[key] = from[key];
2723
- }
2724
- }
2725
- }
2726
-
2727
- return to;
2728
- }
2729
-
2730
- module.exports = assign;
2731
-
2732
- /***/ },
2733
- /* 34 */
2734
- /***/ function(module, exports, __webpack_require__) {
2735
-
2736
- /**
2737
- * Copyright 2013-2015, Facebook, Inc.
2738
- * All rights reserved.
2739
- *
2740
- * This source code is licensed under the BSD-style license found in the
2741
- * LICENSE file in the root directory of this source tree. An additional grant
2742
- * of patent rights can be found in the PATENTS file in the same directory.
2743
- *
2744
- * @providesModule invariant
2745
- */
2746
-
2747
- "use strict";
2748
-
2749
- /**
2750
- * Use invariant() to assert state which your program assumes to be true.
2751
- *
2752
- * Provide sprintf-style format (only %s is supported) and arguments
2753
- * to provide information about what broke and what you were
2754
- * expecting.
2755
- *
2756
- * The invariant message will be stripped in production, but the invariant
2757
- * will remain to ensure logic does not differ in production.
2758
- */
2759
-
2760
- var invariant = function invariant(condition, format, a, b, c, d, e, f) {
2761
- if (false) {
2762
- if (format === undefined) {
2763
- throw new Error("invariant requires an error message argument");
2764
- }
2765
- }
2766
-
2767
- if (!condition) {
2768
- var error;
2769
- if (format === undefined) {
2770
- error = new Error("Minified exception occurred; use the non-minified dev environment " + "for the full error message and additional helpful warnings.");
2771
- } else {
2772
- var args = [a, b, c, d, e, f];
2773
- var argIndex = 0;
2774
- error = new Error("Invariant Violation: " + format.replace(/%s/g, function () {
2775
- return args[argIndex++];
2776
- }));
2777
- }
2778
-
2779
- error.framesToPop = 1; // we don't care about invariant's own frame
2780
- throw error;
2781
- }
2782
- };
2783
-
2784
- module.exports = invariant;
2785
-
2786
- /***/ },
2787
- /* 35 */
2788
- /***/ function(module, exports, __webpack_require__) {
2789
-
2790
- /**
2791
- * Copyright 2013-2015, Facebook, Inc.
2792
- * All rights reserved.
2793
- *
2794
- * This source code is licensed under the BSD-style license found in the
2795
- * LICENSE file in the root directory of this source tree. An additional grant
2796
- * of patent rights can be found in the PATENTS file in the same directory.
2797
- *
2798
- * @providesModule ExecutionEnvironment
2799
- */
2800
-
2801
- /*jslint evil: true */
2802
-
2803
- 'use strict';
2804
-
2805
- var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
2806
-
2807
- /**
2808
- * Simple, lightweight module assisting with the detection and context of
2809
- * Worker. Helps avoid circular dependencies and allows code to reason about
2810
- * whether or not they are in a Worker, even if they never include the main
2811
- * `ReactWorker` dependency.
2812
- */
2813
- var ExecutionEnvironment = {
2814
-
2815
- canUseDOM: canUseDOM,
2816
-
2817
- canUseWorkers: typeof Worker !== 'undefined',
2818
-
2819
- canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),
2820
-
2821
- canUseViewport: canUseDOM && !!window.screen,
2822
-
2823
- isInWorker: !canUseDOM // For now, this is true - might change in the future.
2824
-
2825
- };
2826
-
2827
- module.exports = ExecutionEnvironment;
2828
-
2829
- /***/ },
2830
- /* 36 */
2831
- /***/ function(module, exports, __webpack_require__) {
2832
-
2833
- /**
2834
- * Copyright 2014-2015, Facebook, Inc.
2835
- * All rights reserved.
2836
- *
2837
- * This source code is licensed under the BSD-style license found in the
2838
- * LICENSE file in the root directory of this source tree. An additional grant
2839
- * of patent rights can be found in the PATENTS file in the same directory.
2840
- *
2841
- * @providesModule warning
2842
- */
2843
-
2844
- "use strict";
2845
-
2846
- var emptyFunction = __webpack_require__(40);
2847
-
2848
- /**
2849
- * Similar to invariant but only logs a warning if the condition is not met.
2850
- * This can be used to log issues in development environments in critical
2851
- * paths. Removing the logging code for production environments will keep the
2852
- * same logic and follow the same code paths.
2853
- */
2854
-
2855
- var warning = emptyFunction;
2856
-
2857
- if (false) {
2858
- warning = function (condition, format) {
2859
- for (var args = [], $__0 = 2, $__1 = arguments.length; $__0 < $__1; $__0++) args.push(arguments[$__0]);
2860
- if (format === undefined) {
2861
- throw new Error("`warning(condition, format, ...args)` requires a warning " + "message argument");
2862
- }
2863
-
2864
- if (format.length < 10 || /^[s\W]*$/.test(format)) {
2865
- throw new Error("The warning format should be able to uniquely identify this " + "warning. Please, use a more descriptive format than: " + format);
2866
- }
2867
-
2868
- if (format.indexOf("Failed Composite propType: ") === 0) {
2869
- return; // Ignore CompositeComponent proptype check.
2870
- }
2871
-
2872
- if (!condition) {
2873
- var argIndex = 0;
2874
- var message = "Warning: " + format.replace(/%s/g, function () {
2875
- return args[argIndex++];
2876
- });
2877
- console.warn(message);
2878
- try {
2879
- // --- Welcome to debugging React ---
2880
- // This error was thrown as a convenience so that you can use this stack
2881
- // to find the callsite that caused this warning to fire.
2882
- throw new Error(message);
2883
- } catch (x) {}
2884
- }
2885
- };
2886
- }
2887
-
2888
- module.exports = warning;
2889
-
2890
- /***/ },
2891
- /* 37 */
2892
- /***/ function(module, exports, __webpack_require__) {
2893
-
2894
- 'use strict';
2895
-
2896
- var invariant = __webpack_require__(34);
2897
- var canUseDOM = __webpack_require__(35).canUseDOM;
2898
-
2899
- /**
2900
- * Returns the current scroll position of the window as { x, y }.
2901
- */
2902
- function getWindowScrollPosition() {
2903
- invariant(canUseDOM, 'Cannot get current scroll position without a DOM');
2904
-
2905
- return {
2906
- x: window.pageXOffset || document.documentElement.scrollLeft,
2907
- y: window.pageYOffset || document.documentElement.scrollTop
2908
- };
2909
- }
2910
-
2911
- module.exports = getWindowScrollPosition;
2912
-
2913
- /***/ },
2914
- /* 38 */
2915
- /***/ function(module, exports, __webpack_require__) {
2916
-
2917
- 'use strict';
2918
-
2919
- function ToObject(val) {
2920
- if (val == null) {
2921
- throw new TypeError('Object.assign cannot be called with null or undefined');
2922
- }
2923
-
2924
- return Object(val);
2925
- }
2926
-
2927
- module.exports = Object.assign || function (target, source) {
2928
- var from;
2929
- var keys;
2930
- var to = ToObject(target);
2931
-
2932
- for (var s = 1; s < arguments.length; s++) {
2933
- from = arguments[s];
2934
- keys = Object.keys(Object(from));
2935
-
2936
- for (var i = 0; i < keys.length; i++) {
2937
- to[keys[i]] = from[keys[i]];
2938
- }
2939
- }
2940
-
2941
- return to;
2942
- };
2943
-
2944
- /***/ },
2945
- /* 39 */
2946
- /***/ function(module, exports, __webpack_require__) {
2947
-
2948
- 'use strict';
2949
-
2950
- module.exports = __webpack_require__(41);
2951
-
2952
- /***/ },
2953
- /* 40 */
2954
- /***/ function(module, exports, __webpack_require__) {
2955
-
2956
- /**
2957
- * Copyright 2013-2015, Facebook, Inc.
2958
- * All rights reserved.
2959
- *
2960
- * This source code is licensed under the BSD-style license found in the
2961
- * LICENSE file in the root directory of this source tree. An additional grant
2962
- * of patent rights can be found in the PATENTS file in the same directory.
2963
- *
2964
- * @providesModule emptyFunction
2965
- */
2966
-
2967
- "use strict";
2968
-
2969
- function makeEmptyFunction(arg) {
2970
- return function () {
2971
- return arg;
2972
- };
2973
- }
2974
-
2975
- /**
2976
- * This function accepts and discards inputs; it has no side effects. This is
2977
- * primarily useful idiomatically for overridable function endpoints which
2978
- * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
2979
- */
2980
- function emptyFunction() {}
2981
-
2982
- emptyFunction.thatReturns = makeEmptyFunction;
2983
- emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
2984
- emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
2985
- emptyFunction.thatReturnsNull = makeEmptyFunction(null);
2986
- emptyFunction.thatReturnsThis = function () {
2987
- return this;
2988
- };
2989
- emptyFunction.thatReturnsArgument = function (arg) {
2990
- return arg;
2991
- };
2992
-
2993
- module.exports = emptyFunction;
2994
-
2995
- /***/ },
2996
- /* 41 */
2997
- /***/ function(module, exports, __webpack_require__) {
2998
-
2999
- // Load modules
3000
-
3001
- 'use strict';
3002
-
3003
- var Stringify = __webpack_require__(42);
3004
- var Parse = __webpack_require__(43);
3005
-
3006
- // Declare internals
3007
-
3008
- var internals = {};
3009
-
3010
- module.exports = {
3011
- stringify: Stringify,
3012
- parse: Parse
3013
- };
3014
-
3015
- /***/ },
3016
- /* 42 */
3017
- /***/ function(module, exports, __webpack_require__) {
3018
-
3019
- // Load modules
3020
-
3021
- 'use strict';
3022
-
3023
- var Utils = __webpack_require__(44);
3024
-
3025
- // Declare internals
3026
-
3027
- var internals = {
3028
- delimiter: '&',
3029
- arrayPrefixGenerators: {
3030
- brackets: function brackets(prefix, key) {
3031
- return prefix + '[]';
3032
- },
3033
- indices: function indices(prefix, key) {
3034
- return prefix + '[' + key + ']';
3035
- },
3036
- repeat: function repeat(prefix, key) {
3037
- return prefix;
3038
- }
3039
- }
3040
- };
3041
-
3042
- internals.stringify = function (obj, prefix, generateArrayPrefix) {
3043
-
3044
- if (Utils.isBuffer(obj)) {
3045
- obj = obj.toString();
3046
- } else if (obj instanceof Date) {
3047
- obj = obj.toISOString();
3048
- } else if (obj === null) {
3049
- obj = '';
3050
- }
3051
-
3052
- if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {
3053
-
3054
- return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)];
3055
- }
3056
-
3057
- var values = [];
3058
-
3059
- if (typeof obj === 'undefined') {
3060
- return values;
3061
- }
3062
-
3063
- var objKeys = Object.keys(obj);
3064
- for (var i = 0, il = objKeys.length; i < il; ++i) {
3065
- var key = objKeys[i];
3066
- if (Array.isArray(obj)) {
3067
- values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix));
3068
- } else {
3069
- values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix));
3070
- }
3071
- }
3072
-
3073
- return values;
3074
- };
3075
-
3076
- module.exports = function (obj, options) {
3077
-
3078
- options = options || {};
3079
- var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
3080
-
3081
- var keys = [];
3082
-
3083
- if (typeof obj !== 'object' || obj === null) {
3084
-
3085
- return '';
3086
- }
3087
-
3088
- var arrayFormat;
3089
- if (options.arrayFormat in internals.arrayPrefixGenerators) {
3090
- arrayFormat = options.arrayFormat;
3091
- } else if ('indices' in options) {
3092
- arrayFormat = options.indices ? 'indices' : 'repeat';
3093
- } else {
3094
- arrayFormat = 'indices';
3095
- }
3096
-
3097
- var generateArrayPrefix = internals.arrayPrefixGenerators[arrayFormat];
3098
-
3099
- var objKeys = Object.keys(obj);
3100
- for (var i = 0, il = objKeys.length; i < il; ++i) {
3101
- var key = objKeys[i];
3102
- keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix));
3103
- }
3104
-
3105
- return keys.join(delimiter);
3106
- };
3107
-
3108
- /***/ },
3109
- /* 43 */
3110
- /***/ function(module, exports, __webpack_require__) {
3111
-
3112
- // Load modules
3113
-
3114
- 'use strict';
3115
-
3116
- var Utils = __webpack_require__(44);
3117
-
3118
- // Declare internals
3119
-
3120
- var internals = {
3121
- delimiter: '&',
3122
- depth: 5,
3123
- arrayLimit: 20,
3124
- parameterLimit: 1000
3125
- };
3126
-
3127
- internals.parseValues = function (str, options) {
3128
-
3129
- var obj = {};
3130
- var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);
3131
-
3132
- for (var i = 0, il = parts.length; i < il; ++i) {
3133
- var part = parts[i];
3134
- var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;
3135
-
3136
- if (pos === -1) {
3137
- obj[Utils.decode(part)] = '';
3138
- } else {
3139
- var key = Utils.decode(part.slice(0, pos));
3140
- var val = Utils.decode(part.slice(pos + 1));
3141
-
3142
- if (Object.prototype.hasOwnProperty(key)) {
3143
- continue;
3144
- }
3145
-
3146
- if (!obj.hasOwnProperty(key)) {
3147
- obj[key] = val;
3148
- } else {
3149
- obj[key] = [].concat(obj[key]).concat(val);
3150
- }
3151
- }
3152
- }
3153
-
3154
- return obj;
3155
- };
3156
-
3157
- internals.parseObject = function (chain, val, options) {
3158
-
3159
- if (!chain.length) {
3160
- return val;
3161
- }
3162
-
3163
- var root = chain.shift();
3164
-
3165
- var obj = {};
3166
- if (root === '[]') {
3167
- obj = [];
3168
- obj = obj.concat(internals.parseObject(chain, val, options));
3169
- } else {
3170
- var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;
3171
- var index = parseInt(cleanRoot, 10);
3172
- var indexString = '' + index;
3173
- if (!isNaN(index) && root !== cleanRoot && indexString === cleanRoot && index >= 0 && index <= options.arrayLimit) {
3174
-
3175
- obj = [];
3176
- obj[index] = internals.parseObject(chain, val, options);
3177
- } else {
3178
- obj[cleanRoot] = internals.parseObject(chain, val, options);
3179
- }
3180
- }
3181
-
3182
- return obj;
3183
- };
3184
-
3185
- internals.parseKeys = function (key, val, options) {
3186
-
3187
- if (!key) {
3188
- return;
3189
- }
3190
-
3191
- // The regex chunks
3192
-
3193
- var parent = /^([^\[\]]*)/;
3194
- var child = /(\[[^\[\]]*\])/g;
3195
-
3196
- // Get the parent
3197
-
3198
- var segment = parent.exec(key);
3199
-
3200
- // Don't allow them to overwrite object prototype properties
3201
-
3202
- if (Object.prototype.hasOwnProperty(segment[1])) {
3203
- return;
3204
- }
3205
-
3206
- // Stash the parent if it exists
3207
-
3208
- var keys = [];
3209
- if (segment[1]) {
3210
- keys.push(segment[1]);
3211
- }
3212
-
3213
- // Loop through children appending to the array until we hit depth
3214
-
3215
- var i = 0;
3216
- while ((segment = child.exec(key)) !== null && i < options.depth) {
3217
-
3218
- ++i;
3219
- if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) {
3220
- keys.push(segment[1]);
3221
- }
3222
- }
3223
-
3224
- // If there's a remainder, just add whatever is left
3225
-
3226
- if (segment) {
3227
- keys.push('[' + key.slice(segment.index) + ']');
3228
- }
3229
-
3230
- return internals.parseObject(keys, val, options);
3231
- };
3232
-
3233
- module.exports = function (str, options) {
3234
-
3235
- if (str === '' || str === null || typeof str === 'undefined') {
3236
-
3237
- return {};
3238
- }
3239
-
3240
- options = options || {};
3241
- options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;
3242
- options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;
3243
- options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;
3244
- options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;
3245
-
3246
- var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;
3247
- var obj = {};
3248
-
3249
- // Iterate over the keys and setup the new object
3250
-
3251
- var keys = Object.keys(tempObj);
3252
- for (var i = 0, il = keys.length; i < il; ++i) {
3253
- var key = keys[i];
3254
- var newObj = internals.parseKeys(key, tempObj[key], options);
3255
- obj = Utils.merge(obj, newObj);
3256
- }
3257
-
3258
- return Utils.compact(obj);
3259
- };
3260
-
3261
- /***/ },
3262
- /* 44 */
3263
- /***/ function(module, exports, __webpack_require__) {
3264
-
3265
- // Load modules
3266
-
3267
- // Declare internals
3268
-
3269
- 'use strict';
3270
-
3271
- var internals = {};
3272
-
3273
- exports.arrayToObject = function (source) {
3274
-
3275
- var obj = {};
3276
- for (var i = 0, il = source.length; i < il; ++i) {
3277
- if (typeof source[i] !== 'undefined') {
3278
-
3279
- obj[i] = source[i];
3280
- }
3281
- }
3282
-
3283
- return obj;
3284
- };
3285
-
3286
- exports.merge = function (target, source) {
3287
-
3288
- if (!source) {
3289
- return target;
3290
- }
3291
-
3292
- if (typeof source !== 'object') {
3293
- if (Array.isArray(target)) {
3294
- target.push(source);
3295
- } else {
3296
- target[source] = true;
3297
- }
3298
-
3299
- return target;
3300
- }
3301
-
3302
- if (typeof target !== 'object') {
3303
- target = [target].concat(source);
3304
- return target;
3305
- }
3306
-
3307
- if (Array.isArray(target) && !Array.isArray(source)) {
3308
-
3309
- target = exports.arrayToObject(target);
3310
- }
3311
-
3312
- var keys = Object.keys(source);
3313
- for (var k = 0, kl = keys.length; k < kl; ++k) {
3314
- var key = keys[k];
3315
- var value = source[key];
3316
-
3317
- if (!target[key]) {
3318
- target[key] = value;
3319
- } else {
3320
- target[key] = exports.merge(target[key], value);
3321
- }
3322
- }
3323
-
3324
- return target;
3325
- };
3326
-
3327
- exports.decode = function (str) {
3328
-
3329
- try {
3330
- return decodeURIComponent(str.replace(/\+/g, ' '));
3331
- } catch (e) {
3332
- return str;
3333
- }
3334
- };
3335
-
3336
- exports.compact = function (obj, refs) {
3337
-
3338
- if (typeof obj !== 'object' || obj === null) {
3339
-
3340
- return obj;
3341
- }
3342
-
3343
- refs = refs || [];
3344
- var lookup = refs.indexOf(obj);
3345
- if (lookup !== -1) {
3346
- return refs[lookup];
3347
- }
3348
-
3349
- refs.push(obj);
3350
-
3351
- if (Array.isArray(obj)) {
3352
- var compacted = [];
3353
-
3354
- for (var i = 0, il = obj.length; i < il; ++i) {
3355
- if (typeof obj[i] !== 'undefined') {
3356
- compacted.push(obj[i]);
3357
- }
3358
- }
3359
-
3360
- return compacted;
3361
- }
3362
-
3363
- var keys = Object.keys(obj);
3364
- for (i = 0, il = keys.length; i < il; ++i) {
3365
- var key = keys[i];
3366
- obj[key] = exports.compact(obj[key], refs);
3367
- }
3368
-
3369
- return obj;
3370
- };
3371
-
3372
- exports.isRegExp = function (obj) {
3373
- return Object.prototype.toString.call(obj) === '[object RegExp]';
3374
- };
3375
-
3376
- exports.isBuffer = function (obj) {
3377
-
3378
- if (obj === null || typeof obj === 'undefined') {
3379
-
3380
- return false;
3381
- }
3382
-
3383
- return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
3384
- };
3385
-
3386
- /***/ }
3387
- /******/ ])
3388
- });