angularjs-rails 1.5.5 → 1.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/angularjs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-animate.js +4 -3
- data/vendor/assets/javascripts/angular-aria.js +4 -4
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-message-format.js +1 -1
- data/vendor/assets/javascripts/angular-messages.js +3 -1
- data/vendor/assets/javascripts/angular-mocks.js +121 -15
- data/vendor/assets/javascripts/angular-parse-ext.js +1 -1
- data/vendor/assets/javascripts/angular-resource.js +1 -1
- data/vendor/assets/javascripts/angular-route.js +37 -30
- data/vendor/assets/javascripts/angular-sanitize.js +3 -3
- data/vendor/assets/javascripts/angular-scenario.js +3012 -2204
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +260 -105
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fd8e2e16b8ebda15c495c475a65babe97a3ca80
|
4
|
+
data.tar.gz: b60430a0cf9ce45eee59dcc1221e4aa262bb251d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e6d584b32cc754efce07c4d98c05339ab63711d2555a0e3e7d0fb7980755810d457911993bf23bcca343bcdaf7475c6278b7df5cda3742f095178196aa4d87a
|
7
|
+
data.tar.gz: e8f6d1cf263c659e0a3e307cef9219f31297060e1fca9f3a4d354d6b349d90e6c93fa5a71f92490dd722733007ad87d6593279b9507a3623b0edae9de7dc887f
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.5.
|
2
|
+
* @license AngularJS v1.5.6
|
3
3
|
* (c) 2010-2016 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -132,7 +132,7 @@ function stripCommentsFromElement(element) {
|
|
132
132
|
if (element instanceof jqLite) {
|
133
133
|
switch (element.length) {
|
134
134
|
case 0:
|
135
|
-
return
|
135
|
+
return element;
|
136
136
|
break;
|
137
137
|
|
138
138
|
case 1:
|
@@ -3243,7 +3243,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
3243
3243
|
}
|
3244
3244
|
|
3245
3245
|
function update(element) {
|
3246
|
-
getRunner(element)
|
3246
|
+
var runner = getRunner(element);
|
3247
|
+
if (runner) runner.setHost(newRunner);
|
3247
3248
|
}
|
3248
3249
|
}
|
3249
3250
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.5.
|
2
|
+
* @license AngularJS v1.5.6
|
3
3
|
* (c) 2010-2016 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -32,7 +32,7 @@
|
|
32
32
|
* | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |
|
33
33
|
* | {@link ng.directive:ngRequired ngRequired} | aria-required
|
34
34
|
* | {@link ng.directive:ngChecked ngChecked} | aria-checked
|
35
|
-
* | {@link ng.directive:ngReadonly ngReadonly} | aria-readonly
|
35
|
+
* | {@link ng.directive:ngReadonly ngReadonly} | aria-readonly |
|
36
36
|
* | {@link ng.directive:ngValue ngValue} | aria-checked |
|
37
37
|
* | {@link ng.directive:ngShow ngShow} | aria-hidden |
|
38
38
|
* | {@link ng.directive:ngHide ngHide} | aria-hidden |
|
@@ -43,7 +43,7 @@
|
|
43
43
|
* Find out more information about each directive by reading the
|
44
44
|
* {@link guide/accessibility ngAria Developer Guide}.
|
45
45
|
*
|
46
|
-
* ##Example
|
46
|
+
* ## Example
|
47
47
|
* Using ngDisabled with ngAria:
|
48
48
|
* ```html
|
49
49
|
* <md-checkbox ng-disabled="disabled">
|
@@ -53,7 +53,7 @@
|
|
53
53
|
* <md-checkbox ng-disabled="disabled" aria-disabled="true">
|
54
54
|
* ```
|
55
55
|
*
|
56
|
-
* ##Disabling Attributes
|
56
|
+
* ## Disabling Attributes
|
57
57
|
* It's possible to disable individual attributes added by ngAria with the
|
58
58
|
* {@link ngAria.$ariaProvider#config config} method. For more details, see the
|
59
59
|
* {@link guide/accessibility Developer Guide}.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.5.
|
2
|
+
* @license AngularJS v1.5.6
|
3
3
|
* (c) 2010-2016 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -87,7 +87,7 @@ function minErr(module, ErrorConstructor) {
|
|
87
87
|
return match;
|
88
88
|
});
|
89
89
|
|
90
|
-
message += '\nhttp://errors.angularjs.org/1.5.
|
90
|
+
message += '\nhttp://errors.angularjs.org/1.5.6/' +
|
91
91
|
(module ? module + '/' : '') + code;
|
92
92
|
|
93
93
|
for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.5.
|
2
|
+
* @license AngularJS v1.5.6
|
3
3
|
* (c) 2010-2016 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -555,6 +555,8 @@ angular.module('ngMessages', [])
|
|
555
555
|
link: function($scope, element, attrs) {
|
556
556
|
var src = attrs.ngMessagesInclude || attrs.src;
|
557
557
|
$templateRequest(src).then(function(html) {
|
558
|
+
if ($scope.$$destroyed) return;
|
559
|
+
|
558
560
|
$compile(html)($scope, function(contents) {
|
559
561
|
element.after(contents);
|
560
562
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.5.
|
2
|
+
* @license AngularJS v1.5.6
|
3
3
|
* (c) 2010-2016 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -13,6 +13,7 @@
|
|
13
13
|
* @description
|
14
14
|
*
|
15
15
|
* Namespace from 'angular-mocks.js' which contains testing related code.
|
16
|
+
*
|
16
17
|
*/
|
17
18
|
angular.mock = {};
|
18
19
|
|
@@ -24,7 +25,7 @@ angular.mock = {};
|
|
24
25
|
* @description
|
25
26
|
* This service is a mock implementation of {@link ng.$browser}. It provides fake
|
26
27
|
* implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
|
27
|
-
* cookies, etc
|
28
|
+
* cookies, etc.
|
28
29
|
*
|
29
30
|
* The api of this service is the same as that of the real {@link ng.$browser $browser}, except
|
30
31
|
* that there are several helper methods available which can be used in tests.
|
@@ -226,13 +227,13 @@ angular.mock.$ExceptionHandlerProvider = function() {
|
|
226
227
|
* @param {string} mode Mode of operation, defaults to `rethrow`.
|
227
228
|
*
|
228
229
|
* - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
|
229
|
-
*
|
230
|
-
*
|
231
|
-
*
|
230
|
+
* mode stores an array of errors in `$exceptionHandler.errors`, to allow later assertion of
|
231
|
+
* them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
|
232
|
+
* {@link ngMock.$log#reset reset()}.
|
232
233
|
* - `rethrow`: If any errors are passed to the handler in tests, it typically means that there
|
233
|
-
*
|
234
|
-
*
|
235
|
-
*
|
234
|
+
* is a bug in the application or test, so this mock will make these tests fail. For any
|
235
|
+
* implementations that expect exceptions to be thrown, the `rethrow` mode will also maintain
|
236
|
+
* a log of thrown errors in `$exceptionHandler.errors`.
|
236
237
|
*/
|
237
238
|
this.mode = function(mode) {
|
238
239
|
|
@@ -766,6 +767,8 @@ angular.mock.TzDate.prototype = Date.prototype;
|
|
766
767
|
* @description
|
767
768
|
* Mock implementation of the {@link ng.$animate `$animate`} service. Exposes two additional methods
|
768
769
|
* for testing animations.
|
770
|
+
*
|
771
|
+
* You need to require the `ngAnimateMock` module in your test suite for instance `beforeEach(module('ngAnimateMock'))`
|
769
772
|
*/
|
770
773
|
angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
|
771
774
|
|
@@ -1003,8 +1006,10 @@ angular.mock.dump = function(object) {
|
|
1003
1006
|
* Fake HTTP backend implementation suitable for unit testing applications that use the
|
1004
1007
|
* {@link ng.$http $http service}.
|
1005
1008
|
*
|
1006
|
-
*
|
1009
|
+
* <div class="alert alert-info">
|
1010
|
+
* **Note**: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
|
1007
1011
|
* development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
|
1012
|
+
* </div>
|
1008
1013
|
*
|
1009
1014
|
* During unit testing, we want our unit tests to run quickly and have no external dependencies so
|
1010
1015
|
* we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or
|
@@ -1396,7 +1401,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
|
|
1396
1401
|
// if $browser specified, we do auto flush all requests
|
1397
1402
|
($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
|
1398
1403
|
} else if (definition.passThrough) {
|
1399
|
-
$delegate(method, url, data, callback, headers, timeout, withCredentials, responseType);
|
1404
|
+
$delegate(method, url, data, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers);
|
1400
1405
|
} else throw new Error('No response defined !');
|
1401
1406
|
return;
|
1402
1407
|
}
|
@@ -1875,6 +1880,15 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
|
|
1875
1880
|
|
1876
1881
|
function MockHttpExpectation(method, url, data, headers, keys) {
|
1877
1882
|
|
1883
|
+
function getUrlParams(u) {
|
1884
|
+
var params = u.slice(u.indexOf('?') + 1).split('&');
|
1885
|
+
return params.sort();
|
1886
|
+
}
|
1887
|
+
|
1888
|
+
function compareUrl(u) {
|
1889
|
+
return (url.slice(0, url.indexOf('?')) == u.slice(0, u.indexOf('?')) && getUrlParams(url).join() == getUrlParams(u).join());
|
1890
|
+
}
|
1891
|
+
|
1878
1892
|
this.data = data;
|
1879
1893
|
this.headers = headers;
|
1880
1894
|
|
@@ -1890,7 +1904,7 @@ function MockHttpExpectation(method, url, data, headers, keys) {
|
|
1890
1904
|
if (!url) return true;
|
1891
1905
|
if (angular.isFunction(url.test)) return url.test(u);
|
1892
1906
|
if (angular.isFunction(url)) return url(u);
|
1893
|
-
return url == u;
|
1907
|
+
return (url == u || compareUrl(u));
|
1894
1908
|
};
|
1895
1909
|
|
1896
1910
|
this.matchHeaders = function(h) {
|
@@ -2255,6 +2269,34 @@ angular.mock.$ComponentControllerProvider = ['$compileProvider', function($compi
|
|
2255
2269
|
*
|
2256
2270
|
* <div doc-module-components="ngMock"></div>
|
2257
2271
|
*
|
2272
|
+
* @installation
|
2273
|
+
*
|
2274
|
+
* First, download the file:
|
2275
|
+
* * [Google CDN](https://developers.google.com/speed/libraries/devguide#angularjs) e.g.
|
2276
|
+
* `"//ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-mocks.js"`
|
2277
|
+
* * [NPM](https://www.npmjs.com/) e.g. `npm install angular-mocks@X.Y.Z`
|
2278
|
+
* * [Bower](http://bower.io) e.g. `bower install angular-mocks@X.Y.Z`
|
2279
|
+
* * [code.angularjs.org](https://code.angularjs.org/) (discouraged for production use) e.g.
|
2280
|
+
* `"//code.angularjs.org/X.Y.Z/angular-mocks.js"`
|
2281
|
+
*
|
2282
|
+
* where X.Y.Z is the AngularJS version you are running.
|
2283
|
+
*
|
2284
|
+
* Then, configure your test runner to load `angular-mocks.js` after `angular.js`.
|
2285
|
+
* This example uses <a href="http://karma-runner.github.io/">Karma</a>:
|
2286
|
+
*
|
2287
|
+
* ```
|
2288
|
+
* config.set({
|
2289
|
+
* files: [
|
2290
|
+
* 'build/angular.js', // and other module files you need
|
2291
|
+
* 'build/angular-mocks.js',
|
2292
|
+
* '<path/to/application/files>',
|
2293
|
+
* '<path/to/spec/files>'
|
2294
|
+
* ]
|
2295
|
+
* });
|
2296
|
+
* ```
|
2297
|
+
*
|
2298
|
+
* Including the `angular-mocks.js` file automatically adds the `ngMock` module, so your tests
|
2299
|
+
* are ready to go!
|
2258
2300
|
*/
|
2259
2301
|
angular.module('ngMock', ['ng']).provider({
|
2260
2302
|
$browser: angular.mock.$BrowserProvider,
|
@@ -2294,8 +2336,10 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
|
|
2294
2336
|
* Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
|
2295
2337
|
* applications that use the {@link ng.$http $http service}.
|
2296
2338
|
*
|
2297
|
-
*
|
2339
|
+
* <div class="alert alert-info">
|
2340
|
+
* **Note**: For fake http backend implementation suitable for unit testing please see
|
2298
2341
|
* {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
|
2342
|
+
* </div>
|
2299
2343
|
*
|
2300
2344
|
* This implementation can be used to respond with static or dynamic responses via the `when` api
|
2301
2345
|
* and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
|
@@ -2316,9 +2360,9 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
|
|
2316
2360
|
* on the `ngMockE2E` and your application modules and defines the fake backend:
|
2317
2361
|
*
|
2318
2362
|
* ```js
|
2319
|
-
* myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
|
2363
|
+
* var myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
|
2320
2364
|
* myAppDev.run(function($httpBackend) {
|
2321
|
-
* phones = [{name: 'phone1'}, {name: 'phone2'}];
|
2365
|
+
* var phones = [{name: 'phone1'}, {name: 'phone2'}];
|
2322
2366
|
*
|
2323
2367
|
* // returns the current list of phones
|
2324
2368
|
* $httpBackend.whenGET('/phones').respond(phones);
|
@@ -2329,12 +2373,74 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
|
|
2329
2373
|
* phones.push(phone);
|
2330
2374
|
* return [200, phone, {}];
|
2331
2375
|
* });
|
2332
|
-
* $httpBackend.whenGET(/^\/templates\//).passThrough();
|
2376
|
+
* $httpBackend.whenGET(/^\/templates\//).passThrough(); // Requests for templare are handled by the real server
|
2333
2377
|
* //...
|
2334
2378
|
* });
|
2335
2379
|
* ```
|
2336
2380
|
*
|
2337
2381
|
* Afterwards, bootstrap your app with this new module.
|
2382
|
+
*
|
2383
|
+
* ## Example
|
2384
|
+
* <example name="httpbackend-e2e-testing" module="myAppE2E" deps="angular-mocks.js">
|
2385
|
+
* <file name="app.js">
|
2386
|
+
* var myApp = angular.module('myApp', []);
|
2387
|
+
*
|
2388
|
+
* myApp.controller('main', function($http) {
|
2389
|
+
* var ctrl = this;
|
2390
|
+
*
|
2391
|
+
* ctrl.phones = [];
|
2392
|
+
* ctrl.newPhone = {
|
2393
|
+
* name: ''
|
2394
|
+
* };
|
2395
|
+
*
|
2396
|
+
* ctrl.getPhones = function() {
|
2397
|
+
* $http.get('/phones').then(function(response) {
|
2398
|
+
* ctrl.phones = response.data;
|
2399
|
+
* });
|
2400
|
+
* };
|
2401
|
+
*
|
2402
|
+
* ctrl.addPhone = function(phone) {
|
2403
|
+
* $http.post('/phones', phone).then(function() {
|
2404
|
+
* ctrl.newPhone = {name: ''};
|
2405
|
+
* return ctrl.getPhones();
|
2406
|
+
* });
|
2407
|
+
* };
|
2408
|
+
*
|
2409
|
+
* ctrl.getPhones();
|
2410
|
+
* });
|
2411
|
+
* </file>
|
2412
|
+
* <file name="e2e.js">
|
2413
|
+
* var myAppDev = angular.module('myAppE2E', ['myApp', 'ngMockE2E']);
|
2414
|
+
*
|
2415
|
+
* myAppDev.run(function($httpBackend) {
|
2416
|
+
* var phones = [{name: 'phone1'}, {name: 'phone2'}];
|
2417
|
+
*
|
2418
|
+
* // returns the current list of phones
|
2419
|
+
* $httpBackend.whenGET('/phones').respond(phones);
|
2420
|
+
*
|
2421
|
+
* // adds a new phone to the phones array
|
2422
|
+
* $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
|
2423
|
+
* var phone = angular.fromJson(data);
|
2424
|
+
* phones.push(phone);
|
2425
|
+
* return [200, phone, {}];
|
2426
|
+
* });
|
2427
|
+
* });
|
2428
|
+
* </file>
|
2429
|
+
* <file name="index.html">
|
2430
|
+
* <div ng-controller="main as $ctrl">
|
2431
|
+
* <form name="newPhoneForm" ng-submit="$ctrl.addPhone($ctrl.newPhone)">
|
2432
|
+
* <input type="text" ng-model="$ctrl.newPhone.name">
|
2433
|
+
* <input type="submit" value="Add Phone">
|
2434
|
+
* </form>
|
2435
|
+
* <h1>Phones</h1>
|
2436
|
+
* <ul>
|
2437
|
+
* <li ng-repeat="phone in $ctrl.phones">{{phone.name}}</li>
|
2438
|
+
* </ul>
|
2439
|
+
* </div>
|
2440
|
+
* </file>
|
2441
|
+
* </example>
|
2442
|
+
*
|
2443
|
+
*
|
2338
2444
|
*/
|
2339
2445
|
|
2340
2446
|
/**
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.5.
|
2
|
+
* @license AngularJS v1.5.6
|
3
3
|
* (c) 2010-2016 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -604,35 +604,7 @@ function $RouteProvider() {
|
|
604
604
|
}
|
605
605
|
|
606
606
|
$q.when(nextRoute).
|
607
|
-
then(
|
608
|
-
if (nextRoute) {
|
609
|
-
var locals = angular.extend({}, nextRoute.resolve),
|
610
|
-
template, templateUrl;
|
611
|
-
|
612
|
-
angular.forEach(locals, function(value, key) {
|
613
|
-
locals[key] = angular.isString(value) ?
|
614
|
-
$injector.get(value) : $injector.invoke(value, null, null, key);
|
615
|
-
});
|
616
|
-
|
617
|
-
if (angular.isDefined(template = nextRoute.template)) {
|
618
|
-
if (angular.isFunction(template)) {
|
619
|
-
template = template(nextRoute.params);
|
620
|
-
}
|
621
|
-
} else if (angular.isDefined(templateUrl = nextRoute.templateUrl)) {
|
622
|
-
if (angular.isFunction(templateUrl)) {
|
623
|
-
templateUrl = templateUrl(nextRoute.params);
|
624
|
-
}
|
625
|
-
if (angular.isDefined(templateUrl)) {
|
626
|
-
nextRoute.loadedTemplateUrl = $sce.valueOf(templateUrl);
|
627
|
-
template = $templateRequest(templateUrl);
|
628
|
-
}
|
629
|
-
}
|
630
|
-
if (angular.isDefined(template)) {
|
631
|
-
locals['$template'] = template;
|
632
|
-
}
|
633
|
-
return $q.all(locals);
|
634
|
-
}
|
635
|
-
}).
|
607
|
+
then(resolveLocals).
|
636
608
|
then(function(locals) {
|
637
609
|
// after route change
|
638
610
|
if (nextRoute == $route.current) {
|
@@ -650,6 +622,41 @@ function $RouteProvider() {
|
|
650
622
|
}
|
651
623
|
}
|
652
624
|
|
625
|
+
function resolveLocals(route) {
|
626
|
+
if (route) {
|
627
|
+
var locals = angular.extend({}, route.resolve);
|
628
|
+
angular.forEach(locals, function(value, key) {
|
629
|
+
locals[key] = angular.isString(value) ?
|
630
|
+
$injector.get(value) :
|
631
|
+
$injector.invoke(value, null, null, key);
|
632
|
+
});
|
633
|
+
var template = getTemplateFor(route);
|
634
|
+
if (angular.isDefined(template)) {
|
635
|
+
locals['$template'] = template;
|
636
|
+
}
|
637
|
+
return $q.all(locals);
|
638
|
+
}
|
639
|
+
}
|
640
|
+
|
641
|
+
|
642
|
+
function getTemplateFor(route) {
|
643
|
+
var template, templateUrl;
|
644
|
+
if (angular.isDefined(template = route.template)) {
|
645
|
+
if (angular.isFunction(template)) {
|
646
|
+
template = template(route.params);
|
647
|
+
}
|
648
|
+
} else if (angular.isDefined(templateUrl = route.templateUrl)) {
|
649
|
+
if (angular.isFunction(templateUrl)) {
|
650
|
+
templateUrl = templateUrl(route.params);
|
651
|
+
}
|
652
|
+
if (angular.isDefined(templateUrl)) {
|
653
|
+
route.loadedTemplateUrl = $sce.valueOf(templateUrl);
|
654
|
+
template = $templateRequest(templateUrl);
|
655
|
+
}
|
656
|
+
}
|
657
|
+
return template;
|
658
|
+
}
|
659
|
+
|
653
660
|
|
654
661
|
/**
|
655
662
|
* @returns {Object} the current active route, by matching it against the URL
|