angular-gem 1.3.7 → 1.3.8

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.
Files changed (27) hide show
  1. checksums.yaml +8 -8
  2. data/lib/angular-gem/version.rb +1 -1
  3. data/vendor/assets/javascripts/1.3.8/angular-animate.js +2138 -0
  4. data/vendor/assets/javascripts/1.3.8/angular-aria.js +339 -0
  5. data/vendor/assets/javascripts/1.3.8/angular-cookies.js +206 -0
  6. data/vendor/assets/javascripts/1.3.8/angular-loader.js +405 -0
  7. data/vendor/assets/javascripts/1.3.8/angular-messages.js +400 -0
  8. data/vendor/assets/javascripts/1.3.8/angular-mocks.js +2382 -0
  9. data/vendor/assets/javascripts/1.3.8/angular-resource.js +667 -0
  10. data/vendor/assets/javascripts/1.3.8/angular-route.js +995 -0
  11. data/vendor/assets/javascripts/1.3.8/angular-sanitize.js +680 -0
  12. data/vendor/assets/javascripts/1.3.8/angular-scenario.js +37424 -0
  13. data/vendor/assets/javascripts/1.3.8/angular-touch.js +622 -0
  14. data/vendor/assets/javascripts/1.3.8/angular.js +26070 -0
  15. data/vendor/assets/javascripts/angular-animate.js +3 -2
  16. data/vendor/assets/javascripts/angular-aria.js +20 -13
  17. data/vendor/assets/javascripts/angular-cookies.js +1 -1
  18. data/vendor/assets/javascripts/angular-loader.js +2 -2
  19. data/vendor/assets/javascripts/angular-messages.js +1 -1
  20. data/vendor/assets/javascripts/angular-mocks.js +15 -15
  21. data/vendor/assets/javascripts/angular-resource.js +1 -1
  22. data/vendor/assets/javascripts/angular-route.js +1 -1
  23. data/vendor/assets/javascripts/angular-sanitize.js +1 -1
  24. data/vendor/assets/javascripts/angular-scenario.js +95 -62
  25. data/vendor/assets/javascripts/angular-touch.js +1 -1
  26. data/vendor/assets/javascripts/angular.js +95 -62
  27. metadata +14 -2
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -839,7 +839,8 @@ angular.module('ngAnimate', ['ng'])
839
839
  * promise that was returned when the animation was started.
840
840
  *
841
841
  * ```js
842
- * var promise = $animate.addClass(element, 'super-long-animation').then(function() {
842
+ * var promise = $animate.addClass(element, 'super-long-animation');
843
+ * promise.then(function() {
843
844
  * //this will still be called even if cancelled
844
845
  * });
845
846
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -302,21 +302,28 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
302
302
  }
303
303
  };
304
304
  })
305
- .directive('ngClick',['$aria', function($aria) {
305
+ .directive('ngClick',['$aria', '$parse', function($aria, $parse) {
306
306
  return {
307
307
  restrict: 'A',
308
- link: function(scope, elem, attr) {
309
- if ($aria.config('tabindex') && !elem.attr('tabindex')) {
310
- elem.attr('tabindex', 0);
311
- }
308
+ compile: function(elem, attr) {
309
+ var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true);
310
+ return function(scope, elem, attr) {
311
+ if ($aria.config('tabindex') && !elem.attr('tabindex')) {
312
+ elem.attr('tabindex', 0);
313
+ }
312
314
 
313
- if ($aria.config('bindKeypress') && !elem.attr('ng-keypress')) {
314
- elem.on('keypress', function(event) {
315
- if (event.keyCode === 32 || event.keyCode === 13) {
316
- scope.$eval(attr.ngClick);
317
- }
318
- });
319
- }
315
+ if ($aria.config('bindKeypress') && !attr.ngKeypress) {
316
+ elem.on('keypress', function(event) {
317
+ if (event.keyCode === 32 || event.keyCode === 13) {
318
+ scope.$apply(callback);
319
+ }
320
+
321
+ function callback() {
322
+ fn(scope, { $event: event });
323
+ }
324
+ });
325
+ }
326
+ };
320
327
  }
321
328
  };
322
329
  }])
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -55,7 +55,7 @@ function minErr(module, ErrorConstructor) {
55
55
  return match;
56
56
  });
57
57
 
58
- message = message + '\nhttp://errors.angularjs.org/1.3.7/' +
58
+ message = message + '\nhttp://errors.angularjs.org/1.3.8/' +
59
59
  (module ? module + '/' : '') + code;
60
60
  for (i = 2; i < arguments.length; i++) {
61
61
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1283,7 +1283,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1283
1283
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1284
1284
  * and returns true if the url match the current definition.
1285
1285
  * @param {(Object|function(Object))=} headers HTTP headers.
1286
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1286
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1287
1287
  * request is handled. You can save this object for later use and invoke `respond` again in
1288
1288
  * order to change how a matched request is handled.
1289
1289
  */
@@ -1297,7 +1297,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1297
1297
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1298
1298
  * and returns true if the url match the current definition.
1299
1299
  * @param {(Object|function(Object))=} headers HTTP headers.
1300
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1300
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1301
1301
  * request is handled. You can save this object for later use and invoke `respond` again in
1302
1302
  * order to change how a matched request is handled.
1303
1303
  */
@@ -1311,7 +1311,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1311
1311
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1312
1312
  * and returns true if the url match the current definition.
1313
1313
  * @param {(Object|function(Object))=} headers HTTP headers.
1314
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1314
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1315
1315
  * request is handled. You can save this object for later use and invoke `respond` again in
1316
1316
  * order to change how a matched request is handled.
1317
1317
  */
@@ -1327,7 +1327,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1327
1327
  * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
1328
1328
  * data string and returns true if the data is as expected.
1329
1329
  * @param {(Object|function(Object))=} headers HTTP headers.
1330
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1330
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1331
1331
  * request is handled. You can save this object for later use and invoke `respond` again in
1332
1332
  * order to change how a matched request is handled.
1333
1333
  */
@@ -1343,7 +1343,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1343
1343
  * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
1344
1344
  * data string and returns true if the data is as expected.
1345
1345
  * @param {(Object|function(Object))=} headers HTTP headers.
1346
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1346
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1347
1347
  * request is handled. You can save this object for later use and invoke `respond` again in
1348
1348
  * order to change how a matched request is handled.
1349
1349
  */
@@ -1356,7 +1356,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1356
1356
  *
1357
1357
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1358
1358
  * and returns true if the url match the current definition.
1359
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1359
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1360
1360
  * request is handled. You can save this object for later use and invoke `respond` again in
1361
1361
  * order to change how a matched request is handled.
1362
1362
  */
@@ -1377,7 +1377,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1377
1377
  * is in JSON format.
1378
1378
  * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
1379
1379
  * object and returns true if the headers match the current expectation.
1380
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1380
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1381
1381
  * request is handled. You can save this object for later use and invoke `respond` again in
1382
1382
  * order to change how a matched request is handled.
1383
1383
  *
@@ -1412,7 +1412,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1412
1412
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1413
1413
  * and returns true if the url match the current definition.
1414
1414
  * @param {Object=} headers HTTP headers.
1415
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1415
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1416
1416
  * request is handled. You can save this object for later use and invoke `respond` again in
1417
1417
  * order to change how a matched request is handled. See #expect for more info.
1418
1418
  */
@@ -1426,7 +1426,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1426
1426
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1427
1427
  * and returns true if the url match the current definition.
1428
1428
  * @param {Object=} headers HTTP headers.
1429
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1429
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1430
1430
  * request is handled. You can save this object for later use and invoke `respond` again in
1431
1431
  * order to change how a matched request is handled.
1432
1432
  */
@@ -1440,7 +1440,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1440
1440
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1441
1441
  * and returns true if the url match the current definition.
1442
1442
  * @param {Object=} headers HTTP headers.
1443
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1443
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1444
1444
  * request is handled. You can save this object for later use and invoke `respond` again in
1445
1445
  * order to change how a matched request is handled.
1446
1446
  */
@@ -1457,7 +1457,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1457
1457
  * receives data string and returns true if the data is as expected, or Object if request body
1458
1458
  * is in JSON format.
1459
1459
  * @param {Object=} headers HTTP headers.
1460
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1460
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1461
1461
  * request is handled. You can save this object for later use and invoke `respond` again in
1462
1462
  * order to change how a matched request is handled.
1463
1463
  */
@@ -1474,7 +1474,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1474
1474
  * receives data string and returns true if the data is as expected, or Object if request body
1475
1475
  * is in JSON format.
1476
1476
  * @param {Object=} headers HTTP headers.
1477
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1477
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1478
1478
  * request is handled. You can save this object for later use and invoke `respond` again in
1479
1479
  * order to change how a matched request is handled.
1480
1480
  */
@@ -1491,7 +1491,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1491
1491
  * receives data string and returns true if the data is as expected, or Object if request body
1492
1492
  * is in JSON format.
1493
1493
  * @param {Object=} headers HTTP headers.
1494
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1494
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1495
1495
  * request is handled. You can save this object for later use and invoke `respond` again in
1496
1496
  * order to change how a matched request is handled.
1497
1497
  */
@@ -1504,7 +1504,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
1504
1504
  *
1505
1505
  * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
1506
1506
  * and returns true if the url match the current definition.
1507
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1507
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
1508
1508
  * request is handled. You can save this object for later use and invoke `respond` again in
1509
1509
  * order to change how a matched request is handled.
1510
1510
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.7
2
+ * @license AngularJS v1.3.8
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -9190,7 +9190,7 @@ return jQuery;
9190
9190
  }));
9191
9191
 
9192
9192
  /**
9193
- * @license AngularJS v1.3.7
9193
+ * @license AngularJS v1.3.8
9194
9194
  * (c) 2010-2014 Google, Inc. http://angularjs.org
9195
9195
  * License: MIT
9196
9196
  */
@@ -9246,7 +9246,7 @@ function minErr(module, ErrorConstructor) {
9246
9246
  return match;
9247
9247
  });
9248
9248
 
9249
- message = message + '\nhttp://errors.angularjs.org/1.3.7/' +
9249
+ message = message + '\nhttp://errors.angularjs.org/1.3.8/' +
9250
9250
  (module ? module + '/' : '') + code;
9251
9251
  for (i = 2; i < arguments.length; i++) {
9252
9252
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -9657,6 +9657,8 @@ noop.$inject = [];
9657
9657
  return (transformationFn || angular.identity)(value);
9658
9658
  };
9659
9659
  ```
9660
+ * @param {*} value to be returned.
9661
+ * @returns {*} the value passed in.
9660
9662
  */
9661
9663
  function identity($) {return $;}
9662
9664
  identity.$inject = [];
@@ -9911,7 +9913,7 @@ function arrayRemove(array, value) {
9911
9913
  * Creates a deep copy of `source`, which should be an object or an array.
9912
9914
  *
9913
9915
  * * If no destination is supplied, a copy of the object or array is created.
9914
- * * If a destination is provided, all of its elements (for array) or properties (for objects)
9916
+ * * If a destination is provided, all of its elements (for arrays) or properties (for objects)
9915
9917
  * are deleted and then all elements/properties from the source are copied to it.
9916
9918
  * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
9917
9919
  * * If `source` is identical to 'destination' an exception will be thrown.
@@ -10249,7 +10251,7 @@ function toJson(obj, pretty) {
10249
10251
  * Deserializes a JSON string.
10250
10252
  *
10251
10253
  * @param {string} json JSON string to deserialize.
10252
- * @returns {Object|Array|string|number} Deserialized thingy.
10254
+ * @returns {Object|Array|string|number} Deserialized JSON string.
10253
10255
  */
10254
10256
  function fromJson(json) {
10255
10257
  return isString(json)
@@ -10422,7 +10424,7 @@ function getNgAttribute(element, ngAttr) {
10422
10424
  * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
10423
10425
  *
10424
10426
  * You can specify an **AngularJS module** to be used as the root module for the application. This
10425
- * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and
10427
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
10426
10428
  * should contain the application code needed or have dependencies on other modules that will
10427
10429
  * contain the code. See {@link angular.module} for more information.
10428
10430
  *
@@ -10430,7 +10432,7 @@ function getNgAttribute(element, ngAttr) {
10430
10432
  * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
10431
10433
  * would not be resolved to `3`.
10432
10434
  *
10433
- * `ngApp` is the easiest, and most common, way to bootstrap an application.
10435
+ * `ngApp` is the easiest, and most common way to bootstrap an application.
10434
10436
  *
10435
10437
  <example module="ngAppDemo">
10436
10438
  <file name="index.html">
@@ -11308,11 +11310,11 @@ function toDebugString(obj) {
11308
11310
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11309
11311
  */
11310
11312
  var version = {
11311
- full: '1.3.7', // all of these placeholder strings will be replaced by grunt's
11313
+ full: '1.3.8', // all of these placeholder strings will be replaced by grunt's
11312
11314
  major: 1, // package task
11313
11315
  minor: 3,
11314
- dot: 7,
11315
- codeName: 'leaky-obstruction'
11316
+ dot: 8,
11317
+ codeName: 'prophetic-narwhal'
11316
11318
  };
11317
11319
 
11318
11320
 
@@ -25186,7 +25188,7 @@ var $compileMinErr = minErr('$compile');
25186
25188
  * @description
25187
25189
  * The `$templateRequest` service downloads the provided template using `$http` and, upon success,
25188
25190
  * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data
25189
- * of the HTTP request is empty then a `$compile` error will be thrown (the exception can be thwarted
25191
+ * of the HTTP request is empty, a `$compile` error will be thrown (the exception can be thwarted
25190
25192
  * by setting the 2nd parameter of the function to true).
25191
25193
  *
25192
25194
  * @param {string} tpl The HTTP request template URL
@@ -25746,19 +25748,26 @@ function $FilterProvider($provide) {
25746
25748
  *
25747
25749
  * Can be one of:
25748
25750
  *
25749
- * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against
25750
- * the contents of the `array`. All strings or objects with string properties in `array` that contain this string
25751
- * will be returned. The predicate can be negated by prefixing the string with `!`.
25751
+ * - `string`: The string is used for matching against the contents of the `array`. All strings or
25752
+ * objects with string properties in `array` that match this string will be returned. This also
25753
+ * applies to nested object properties.
25754
+ * The predicate can be negated by prefixing the string with `!`.
25752
25755
  *
25753
25756
  * - `Object`: A pattern object can be used to filter specific properties on objects contained
25754
25757
  * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
25755
25758
  * which have property `name` containing "M" and property `phone` containing "1". A special
25756
25759
  * property name `$` can be used (as in `{$:"text"}`) to accept a match against any
25757
- * property of the object. That's equivalent to the simple substring match with a `string`
25758
- * as described above. The predicate can be negated by prefixing the string with `!`.
25759
- * For Example `{name: "!M"}` predicate will return an array of items which have property `name`
25760
+ * property of the object or its nested object properties. That's equivalent to the simple
25761
+ * substring match with a `string` as described above. The predicate can be negated by prefixing
25762
+ * the string with `!`.
25763
+ * For example `{name: "!M"}` predicate will return an array of items which have property `name`
25760
25764
  * not containing "M".
25761
25765
  *
25766
+ * Note that a named property will match properties on the same level only, while the special
25767
+ * `$` property will match properties on the same level or deeper. E.g. an array item like
25768
+ * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but
25769
+ * **will** be matched by `{$: 'John'}`.
25770
+ *
25762
25771
  * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The
25763
25772
  * function is called for each element of `array`. The final result is an array of those
25764
25773
  * elements that the predicate returned true for.
@@ -25771,10 +25780,10 @@ function $FilterProvider($provide) {
25771
25780
  *
25772
25781
  * - `function(actual, expected)`:
25773
25782
  * The function will be given the object value and the predicate value to compare and
25774
- * should return true if the item should be included in filtered result.
25783
+ * should return true if both values should be considered equal.
25775
25784
  *
25776
- * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.
25777
- * this is essentially strict comparison of expected and actual.
25785
+ * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.
25786
+ * This is essentially strict comparison of expected and actual.
25778
25787
  *
25779
25788
  * - `false|undefined`: A short hand for a function which will look for a substring match in case
25780
25789
  * insensitive way.
@@ -25877,6 +25886,7 @@ function filterFilter() {
25877
25886
 
25878
25887
  // Helper functions for `filterFilter`
25879
25888
  function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
25889
+ var shouldMatchPrimitives = isObject(expression) && ('$' in expression);
25880
25890
  var predicateFn;
25881
25891
 
25882
25892
  if (comparator === true) {
@@ -25895,13 +25905,16 @@ function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
25895
25905
  }
25896
25906
 
25897
25907
  predicateFn = function(item) {
25908
+ if (shouldMatchPrimitives && !isObject(item)) {
25909
+ return deepCompare(item, expression.$, comparator, false);
25910
+ }
25898
25911
  return deepCompare(item, expression, comparator, matchAgainstAnyProp);
25899
25912
  };
25900
25913
 
25901
25914
  return predicateFn;
25902
25915
  }
25903
25916
 
25904
- function deepCompare(actual, expected, comparator, matchAgainstAnyProp) {
25917
+ function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
25905
25918
  var actualType = typeof actual;
25906
25919
  var expectedType = typeof expected;
25907
25920
 
@@ -25920,11 +25933,11 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp) {
25920
25933
  var key;
25921
25934
  if (matchAgainstAnyProp) {
25922
25935
  for (key in actual) {
25923
- if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator)) {
25936
+ if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) {
25924
25937
  return true;
25925
25938
  }
25926
25939
  }
25927
- return false;
25940
+ return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false);
25928
25941
  } else if (expectedType === 'object') {
25929
25942
  for (key in expected) {
25930
25943
  var expectedVal = expected[key];
@@ -25932,9 +25945,9 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp) {
25932
25945
  continue;
25933
25946
  }
25934
25947
 
25935
- var keyIsDollar = key === '$';
25936
- var actualVal = keyIsDollar ? actual : actual[key];
25937
- if (!deepCompare(actualVal, expectedVal, comparator, keyIsDollar)) {
25948
+ var matchAnyProperty = key === '$';
25949
+ var actualVal = matchAnyProperty ? actual : actual[key];
25950
+ if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) {
25938
25951
  return false;
25939
25952
  }
25940
25953
  }
@@ -26607,8 +26620,7 @@ function limitToFilter() {
26607
26620
  }
26608
26621
  }
26609
26622
 
26610
- var out = [],
26611
- i, n;
26623
+ var i, n;
26612
26624
 
26613
26625
  // if abs(limit) exceeds maximum length, trim it
26614
26626
  if (limit > input.length)
@@ -26620,15 +26632,14 @@ function limitToFilter() {
26620
26632
  i = 0;
26621
26633
  n = limit;
26622
26634
  } else {
26635
+ // zero and NaN check on limit - return empty array
26636
+ if (!limit) return [];
26637
+
26623
26638
  i = input.length + limit;
26624
26639
  n = input.length;
26625
26640
  }
26626
26641
 
26627
- for (; i < n; i++) {
26628
- out.push(input[i]);
26629
- }
26630
-
26631
- return out;
26642
+ return input.slice(i, n);
26632
26643
  };
26633
26644
  }
26634
26645
 
@@ -26762,9 +26773,7 @@ function orderByFilter($parse) {
26762
26773
  }
26763
26774
  if (predicate === '') {
26764
26775
  // Effectively no predicate was passed so we compare identity
26765
- return reverseComparator(function(a, b) {
26766
- return compare(a, b);
26767
- }, descending);
26776
+ return reverseComparator(compare, descending);
26768
26777
  }
26769
26778
  get = $parse(predicate);
26770
26779
  if (get.constant) {
@@ -26806,14 +26815,14 @@ function orderByFilter($parse) {
26806
26815
 
26807
26816
  function objectToString(value) {
26808
26817
  if (value === null) return 'null';
26809
- if (typeof value.toString === 'function') {
26810
- value = value.toString();
26811
- if (isPrimitive(value)) return value;
26812
- }
26813
26818
  if (typeof value.valueOf === 'function') {
26814
26819
  value = value.valueOf();
26815
26820
  if (isPrimitive(value)) return value;
26816
26821
  }
26822
+ if (typeof value.toString === 'function') {
26823
+ value = value.toString();
26824
+ if (isPrimitive(value)) return value;
26825
+ }
26817
26826
  return '';
26818
26827
  }
26819
26828
 
@@ -34465,14 +34474,15 @@ var ngOptionsMinErr = minErr('ngOptions');
34465
34474
  *
34466
34475
  * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
34467
34476
  * elements for the `<select>` element using the array or object obtained by evaluating the
34468
- * `ngOptions` comprehension_expression.
34477
+ * `ngOptions` comprehension expression.
34469
34478
  *
34470
34479
  * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
34471
- * similar result. However, the `ngOptions` provides some benefits such as reducing memory and
34480
+ * similar result. However, `ngOptions` provides some benefits such as reducing memory and
34472
34481
  * increasing speed by not creating a new scope for each repeated instance, as well as providing
34473
- * more flexibility in how the `select`'s model is assigned via `select as`. `ngOptions` should be
34474
- * used when the `select` model needs to be bound to a non-string value. This is because an option
34475
- * element can only be bound to string values at present.
34482
+ * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
34483
+ * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound
34484
+ * to a non-string value. This is because an option element can only be bound to string values at
34485
+ * present.
34476
34486
  *
34477
34487
  * When an item in the `<select>` menu is selected, the array element or object property
34478
34488
  * represented by the selected option will be bound to the model identified by the `ngModel`
@@ -34487,28 +34497,51 @@ var ngOptionsMinErr = minErr('ngOptions');
34487
34497
  * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
34488
34498
  * </div>
34489
34499
  *
34490
- * ## `select as`
34500
+ * ## `select` **`as`**
34491
34501
  *
34492
- * Using `select as` will bind the result of the `select as` expression to the model, but
34502
+ * Using `select` **`as`** will bind the result of the `select` expression to the model, but
34493
34503
  * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
34494
- * or property name (for object data sources) of the value within the collection. If a `track by` expression
34504
+ * or property name (for object data sources) of the value within the collection. If a **`track by`** expression
34495
34505
  * is used, the result of that expression will be set as the value of the `option` and `select` elements.
34496
34506
  *
34497
- * ### `select as` with `track by`
34498
- *
34499
- * Using `select as` together with `track by` is not recommended. Reasoning:
34500
- *
34501
- * - Example: &lt;select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected"&gt;
34502
- * values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItem'}}],
34503
- * $scope.selected = {name: 'aSubItem'};
34504
- * - track by is always applied to `value`, with the purpose of preserving the selection,
34505
- * (to `item` in this case)
34506
- * - to calculate whether an item is selected we do the following:
34507
- * 1. apply `track by` to the values in the array, e.g.
34508
- * In the example: [1,2]
34509
- * 2. apply `track by` to the already selected value in `ngModel`:
34510
- * In the example: this is not possible, as `track by` refers to `item.id`, but the selected
34511
- * value from `ngModel` is `{name: aSubItem}`.
34507
+ *
34508
+ * ### `select` **`as`** and **`track by`**
34509
+ *
34510
+ * <div class="alert alert-warning">
34511
+ * Do not use `select` **`as`** and **`track by`** in the same expression. They are not designed to work together.
34512
+ * </div>
34513
+ *
34514
+ * Consider the following example:
34515
+ *
34516
+ * ```html
34517
+ * <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
34518
+ * ```
34519
+ *
34520
+ * ```js
34521
+ * $scope.values = [{
34522
+ * id: 1,
34523
+ * label: 'aLabel',
34524
+ * subItem: { name: 'aSubItem' }
34525
+ * }, {
34526
+ * id: 2,
34527
+ * label: 'bLabel',
34528
+ * subItem: { name: 'bSubItem' }
34529
+ * }];
34530
+ *
34531
+ * $scope.selected = { name: 'aSubItem' };
34532
+ * ```
34533
+ *
34534
+ * With the purpose of preserving the selection, the **`track by`** expression is always applied to the element
34535
+ * of the data source (to `item` in this example). To calculate whether an element is selected, we do the
34536
+ * following:
34537
+ *
34538
+ * 1. Apply **`track by`** to the elements in the array. In the example: `[1, 2]`
34539
+ * 2. Apply **`track by`** to the already selected value in `ngModel`.
34540
+ * In the example: this is not possible as **`track by`** refers to `item.id`, but the selected
34541
+ * value from `ngModel` is `{name: 'aSubItem'}`, so the **`track by`** expression is applied to
34542
+ * a wrong object, the selected element can't be found, `<select>` is always reset to the "not
34543
+ * selected" option.
34544
+ *
34512
34545
  *
34513
34546
  * @param {string} ngModel Assignable angular expression to data-bind to.
34514
34547
  * @param {string=} name Property name of the form under which the control is published.