angularjs-rails 1.3.9 → 1.3.10

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 +4 -4
  2. data/lib/angularjs-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/angular-animate.js +2 -2
  4. data/vendor/assets/javascripts/angular-aria.js +1 -1
  5. data/vendor/assets/javascripts/angular-cookies.js +1 -1
  6. data/vendor/assets/javascripts/angular-loader.js +2 -2
  7. data/vendor/assets/javascripts/angular-messages.js +2 -2
  8. data/vendor/assets/javascripts/angular-mocks.js +1 -1
  9. data/vendor/assets/javascripts/angular-resource.js +1 -1
  10. data/vendor/assets/javascripts/angular-route.js +1 -1
  11. data/vendor/assets/javascripts/angular-sanitize.js +1 -1
  12. data/vendor/assets/javascripts/angular-scenario.js +69 -37
  13. data/vendor/assets/javascripts/angular-touch.js +1 -1
  14. data/vendor/assets/javascripts/angular.js +69 -37
  15. data/vendor/assets/javascripts/unstable/angular-animate.js +2 -2
  16. data/vendor/assets/javascripts/unstable/angular-aria.js +1 -1
  17. data/vendor/assets/javascripts/unstable/angular-cookies.js +1 -1
  18. data/vendor/assets/javascripts/unstable/angular-loader.js +2 -2
  19. data/vendor/assets/javascripts/unstable/angular-messages.js +2 -2
  20. data/vendor/assets/javascripts/unstable/angular-mocks.js +1 -1
  21. data/vendor/assets/javascripts/unstable/angular-resource.js +1 -1
  22. data/vendor/assets/javascripts/unstable/angular-route.js +1 -1
  23. data/vendor/assets/javascripts/unstable/angular-sanitize.js +1 -1
  24. data/vendor/assets/javascripts/unstable/angular-scenario.js +69 -37
  25. data/vendor/assets/javascripts/unstable/angular-touch.js +1 -1
  26. data/vendor/assets/javascripts/unstable/angular.js +69 -37
  27. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05f8f0b0cff989012a66f467a4ba91c17d7fbd79
4
- data.tar.gz: 18f0e5d4335c0d4ef0beeb57fac047d93c798aea
3
+ metadata.gz: 5a121dbbf6f1ca3f7e7398f18c2dc67475ef4747
4
+ data.tar.gz: 4156411033215270bb5a45f65efd6b5e92cc3ae3
5
5
  SHA512:
6
- metadata.gz: 10bb41b16d31def6e4864f8bedf7298a55422e3d67a64697fcaf9279d66073348c1e72e17bfc29c95af85e8352bd294abcda7ac8af7b7e9316303156797c0748
7
- data.tar.gz: b4a73b0b17b0e6dd54519f83cfb89cc4b6c8b12cd000af4895f4e9f8c50e8ef4571384f6b92e25f63c15b361123dc23465676a53611c65cbed9b193631a81d68
6
+ metadata.gz: b1d0ecd81cd37e143a25d9a1dbfff375a89b4e0eede79dcfecf37bc0539a685d97d125bdfb647046d0211ca1c509fdd7abb52f3399f7594945b14c9b8549d167
7
+ data.tar.gz: 27032be69e3320d65b331e8e93a265201d1b81060a4648919d620eb9d862fa5ede2fd1d3dffabd3e6c1d9b7883794a49cdd57ad731dd28cd28683df58306f7f9
@@ -1,6 +1,6 @@
1
1
  module AngularJS
2
2
  module Rails
3
- VERSION = "1.3.9"
4
- UNSTABLE_VERSION = "1.3.9"
3
+ VERSION = "1.3.10"
4
+ UNSTABLE_VERSION = "1.3.10"
5
5
  end
6
6
  end
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.9
2
+ * @license AngularJS v1.3.10
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1875,7 +1875,7 @@ angular.module('ngAnimate', ['ng'])
1875
1875
  return;
1876
1876
  }
1877
1877
 
1878
- if (!staggerTime && styles) {
1878
+ if (!staggerTime && styles && Object.keys(styles).length > 0) {
1879
1879
  if (!timings.transitionDuration) {
1880
1880
  element.css('transition', timings.animationDuration + 's linear all');
1881
1881
  appliedStyles.push('transition');
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.9
2
+ * @license AngularJS v1.3.10
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.9
2
+ * @license AngularJS v1.3.10
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.9
2
+ * @license AngularJS v1.3.10
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.9/' +
58
+ message = message + '\nhttp://errors.angularjs.org/1.3.10/' +
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.9
2
+ * @license AngularJS v1.3.10
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -178,7 +178,7 @@ angular.module('ngMessages', [])
178
178
  * at a time and this depends on the prioritization of the messages within the template. (This can
179
179
  * be changed by using the ng-messages-multiple on the directive container.)
180
180
  *
181
- * A remote template can also be used to promote message reuseability and messages can also be
181
+ * A remote template can also be used to promote message reusability and messages can also be
182
182
  * overridden.
183
183
  *
184
184
  * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.9
2
+ * @license AngularJS v1.3.10
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.9
2
+ * @license AngularJS v1.3.10
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.9
2
+ * @license AngularJS v1.3.10
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.9
2
+ * @license AngularJS v1.3.10
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.9
9193
+ * @license AngularJS v1.3.10
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.9/' +
9249
+ message = message + '\nhttp://errors.angularjs.org/1.3.10/' +
9250
9250
  (module ? module + '/' : '') + code;
9251
9251
  for (i = 2; i < arguments.length; i++) {
9252
9252
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -10594,7 +10594,7 @@ function angularInit(element, bootstrap) {
10594
10594
  * @param {DOMElement} element DOM element which is the root of angular application.
10595
10595
  * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
10596
10596
  * Each item in the array should be the name of a predefined module or a (DI annotated)
10597
- * function that will be invoked by the injector as a run block.
10597
+ * function that will be invoked by the injector as a `config` block.
10598
10598
  * See: {@link angular.module modules}
10599
10599
  * @param {Object=} config an object for defining configuration options for the application. The
10600
10600
  * following keys are supported:
@@ -11310,11 +11310,11 @@ function toDebugString(obj) {
11310
11310
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11311
11311
  */
11312
11312
  var version = {
11313
- full: '1.3.9', // all of these placeholder strings will be replaced by grunt's
11313
+ full: '1.3.10', // all of these placeholder strings will be replaced by grunt's
11314
11314
  major: 1, // package task
11315
11315
  minor: 3,
11316
- dot: 9,
11317
- codeName: 'multidimensional-awareness'
11316
+ dot: 10,
11317
+ codeName: 'heliotropic-sundial'
11318
11318
  };
11319
11319
 
11320
11320
 
@@ -13378,7 +13378,7 @@ function createInjector(modulesToLoad, strictDi) {
13378
13378
  // Check if Type is annotated and use just the given function at n-1 as parameter
13379
13379
  // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
13380
13380
  // Object creation: http://jsperf.com/create-constructor/2
13381
- var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);
13381
+ var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
13382
13382
  var returnedValue = invoke(Type, instance, locals, serviceName);
13383
13383
 
13384
13384
  return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
@@ -16357,6 +16357,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
16357
16357
 
16358
16358
  // use class as directive
16359
16359
  className = node.className;
16360
+ if (isObject(className)) {
16361
+ // Maybe SVGAnimatedString
16362
+ className = className.animVal;
16363
+ }
16360
16364
  if (isString(className) && className !== '') {
16361
16365
  while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
16362
16366
  nName = directiveNormalize(match[2]);
@@ -17623,7 +17627,7 @@ function $ControllerProvider() {
17623
17627
  // Object creation: http://jsperf.com/create-constructor/2
17624
17628
  var controllerPrototype = (isArray(expression) ?
17625
17629
  expression[expression.length - 1] : expression).prototype;
17626
- instance = Object.create(controllerPrototype);
17630
+ instance = Object.create(controllerPrototype || null);
17627
17631
 
17628
17632
  if (identifier) {
17629
17633
  addIdentifier(locals, identifier, instance, constructor || expression.name);
@@ -23692,7 +23696,7 @@ function $RootScopeProvider() {
23692
23696
  * @kind function
23693
23697
  *
23694
23698
  * @description
23695
- * Schedule the invokation of $apply to occur at a later time. The actual time difference
23699
+ * Schedule the invocation of $apply to occur at a later time. The actual time difference
23696
23700
  * varies across browsers, but is typically around ~10 milliseconds.
23697
23701
  *
23698
23702
  * This can be used to queue up multiple expressions which need to be evaluated in the same
@@ -25202,8 +25206,7 @@ var $compileMinErr = minErr('$compile');
25202
25206
  function $TemplateRequestProvider() {
25203
25207
  this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {
25204
25208
  function handleRequestFn(tpl, ignoreRequestError) {
25205
- var self = handleRequestFn;
25206
- self.totalPendingRequests++;
25209
+ handleRequestFn.totalPendingRequests++;
25207
25210
 
25208
25211
  var transformResponse = $http.defaults && $http.defaults.transformResponse;
25209
25212
 
@@ -25221,13 +25224,14 @@ function $TemplateRequestProvider() {
25221
25224
  };
25222
25225
 
25223
25226
  return $http.get(tpl, httpOptions)
25227
+ .finally(function() {
25228
+ handleRequestFn.totalPendingRequests--;
25229
+ })
25224
25230
  .then(function(response) {
25225
- self.totalPendingRequests--;
25226
25231
  return response.data;
25227
25232
  }, handleError);
25228
25233
 
25229
25234
  function handleError(resp) {
25230
- self.totalPendingRequests--;
25231
25235
  if (!ignoreRequestError) {
25232
25236
  throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
25233
25237
  }
@@ -26317,7 +26321,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d
26317
26321
  * * `'m'`: Minute in hour (0-59)
26318
26322
  * * `'ss'`: Second in minute, padded (00-59)
26319
26323
  * * `'s'`: Second in minute (0-59)
26320
- * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
26324
+ * * `'sss'`: Millisecond in second, padded (000-999)
26321
26325
  * * `'a'`: AM/PM marker
26322
26326
  * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
26323
26327
  * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year
@@ -27453,6 +27457,9 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
27453
27457
  forEach(form.$error, function(value, name) {
27454
27458
  form.$setValidity(name, null, control);
27455
27459
  });
27460
+ forEach(form.$$success, function(value, name) {
27461
+ form.$setValidity(name, null, control);
27462
+ });
27456
27463
 
27457
27464
  arrayRemove(controls, control);
27458
27465
  };
@@ -27470,23 +27477,23 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
27470
27477
  addSetValidityMethod({
27471
27478
  ctrl: this,
27472
27479
  $element: element,
27473
- set: function(object, property, control) {
27480
+ set: function(object, property, controller) {
27474
27481
  var list = object[property];
27475
27482
  if (!list) {
27476
- object[property] = [control];
27483
+ object[property] = [controller];
27477
27484
  } else {
27478
- var index = list.indexOf(control);
27485
+ var index = list.indexOf(controller);
27479
27486
  if (index === -1) {
27480
- list.push(control);
27487
+ list.push(controller);
27481
27488
  }
27482
27489
  }
27483
27490
  },
27484
- unset: function(object, property, control) {
27491
+ unset: function(object, property, controller) {
27485
27492
  var list = object[property];
27486
27493
  if (!list) {
27487
27494
  return;
27488
27495
  }
27489
- arrayRemove(list, control);
27496
+ arrayRemove(list, controller);
27490
27497
  if (list.length === 0) {
27491
27498
  delete object[property];
27492
27499
  }
@@ -29831,8 +29838,9 @@ function classDirective(name, selector) {
29831
29838
  * new classes are added.
29832
29839
  *
29833
29840
  * @animations
29834
- * add - happens just before the class is applied to the element
29835
- * remove - happens just before the class is removed from the element
29841
+ * **add** - happens just before the class is applied to the elements
29842
+ *
29843
+ * **remove** - happens just before the class is removed from the element
29836
29844
  *
29837
29845
  * @element ANY
29838
29846
  * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
@@ -31298,7 +31306,7 @@ var ngIfDirective = ['$animate', function($animate) {
31298
31306
  * @name ngInclude#$includeContentError
31299
31307
  * @eventType emit on the scope ngInclude was declared in
31300
31308
  * @description
31301
- * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)
31309
+ * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299)
31302
31310
  *
31303
31311
  * @param {Object} angularEvent Synthetic event object.
31304
31312
  * @param {String} src URL of content to load.
@@ -32855,22 +32863,22 @@ function addSetValidityMethod(context) {
32855
32863
 
32856
32864
  ctrl.$setValidity = setValidity;
32857
32865
 
32858
- function setValidity(validationErrorKey, state, options) {
32866
+ function setValidity(validationErrorKey, state, controller) {
32859
32867
  if (state === undefined) {
32860
- createAndSet('$pending', validationErrorKey, options);
32868
+ createAndSet('$pending', validationErrorKey, controller);
32861
32869
  } else {
32862
- unsetAndCleanup('$pending', validationErrorKey, options);
32870
+ unsetAndCleanup('$pending', validationErrorKey, controller);
32863
32871
  }
32864
32872
  if (!isBoolean(state)) {
32865
- unset(ctrl.$error, validationErrorKey, options);
32866
- unset(ctrl.$$success, validationErrorKey, options);
32873
+ unset(ctrl.$error, validationErrorKey, controller);
32874
+ unset(ctrl.$$success, validationErrorKey, controller);
32867
32875
  } else {
32868
32876
  if (state) {
32869
- unset(ctrl.$error, validationErrorKey, options);
32870
- set(ctrl.$$success, validationErrorKey, options);
32877
+ unset(ctrl.$error, validationErrorKey, controller);
32878
+ set(ctrl.$$success, validationErrorKey, controller);
32871
32879
  } else {
32872
- set(ctrl.$error, validationErrorKey, options);
32873
- unset(ctrl.$$success, validationErrorKey, options);
32880
+ set(ctrl.$error, validationErrorKey, controller);
32881
+ unset(ctrl.$$success, validationErrorKey, controller);
32874
32882
  }
32875
32883
  }
32876
32884
  if (ctrl.$pending) {
@@ -32898,20 +32906,21 @@ function addSetValidityMethod(context) {
32898
32906
  } else {
32899
32907
  combinedState = null;
32900
32908
  }
32909
+
32901
32910
  toggleValidationCss(validationErrorKey, combinedState);
32902
32911
  parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
32903
32912
  }
32904
32913
 
32905
- function createAndSet(name, value, options) {
32914
+ function createAndSet(name, value, controller) {
32906
32915
  if (!ctrl[name]) {
32907
32916
  ctrl[name] = {};
32908
32917
  }
32909
- set(ctrl[name], value, options);
32918
+ set(ctrl[name], value, controller);
32910
32919
  }
32911
32920
 
32912
- function unsetAndCleanup(name, value, options) {
32921
+ function unsetAndCleanup(name, value, controller) {
32913
32922
  if (ctrl[name]) {
32914
- unset(ctrl[name], value, options);
32923
+ unset(ctrl[name], value, controller);
32915
32924
  }
32916
32925
  if (isObjectEmpty(ctrl[name])) {
32917
32926
  ctrl[name] = undefined;
@@ -33230,6 +33239,29 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
33230
33239
  * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
33231
33240
  * This may be useful when, for instance, nesting ngRepeats.
33232
33241
  *
33242
+ * # Iterating over object properties
33243
+ *
33244
+ * It is possible to get `ngRepeat` to iterate over the properties of an object using the following
33245
+ * syntax:
33246
+ *
33247
+ * ```js
33248
+ * <div ng-repeat="(key, value) in myObj"> ... </div>
33249
+ * ```
33250
+ *
33251
+ * You need to be aware that the JavaScript specification does not define what order
33252
+ * it will return the keys for an object. In order to have a guaranteed deterministic order
33253
+ * for the keys, Angular versions up to and including 1.3 **sort the keys alphabetically**.
33254
+ *
33255
+ * If this is not desired, the recommended workaround is to convert your object into an array
33256
+ * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could
33257
+ * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter)
33258
+ * or implement a `$watch` on the object yourself.
33259
+ *
33260
+ * In version 1.4 we will remove the sorting, since it seems that browsers generally follow the
33261
+ * strategy of providing keys in the order in which they were defined, although there are exceptions
33262
+ * when keys are deleted and reinstated.
33263
+ *
33264
+ *
33233
33265
  * # Special repeat start and end points
33234
33266
  * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
33235
33267
  * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
@@ -33474,7 +33506,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
33474
33506
  var keyIdentifier = match[2];
33475
33507
 
33476
33508
  if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
33477
- /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(aliasAs))) {
33509
+ /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) {
33478
33510
  throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
33479
33511
  aliasAs);
33480
33512
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.9
2
+ * @license AngularJS v1.3.10
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.9
2
+ * @license AngularJS v1.3.10
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -54,7 +54,7 @@ function minErr(module, ErrorConstructor) {
54
54
  return match;
55
55
  });
56
56
 
57
- message = message + '\nhttp://errors.angularjs.org/1.3.9/' +
57
+ message = message + '\nhttp://errors.angularjs.org/1.3.10/' +
58
58
  (module ? module + '/' : '') + code;
59
59
  for (i = 2; i < arguments.length; i++) {
60
60
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -1402,7 +1402,7 @@ function angularInit(element, bootstrap) {
1402
1402
  * @param {DOMElement} element DOM element which is the root of angular application.
1403
1403
  * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
1404
1404
  * Each item in the array should be the name of a predefined module or a (DI annotated)
1405
- * function that will be invoked by the injector as a run block.
1405
+ * function that will be invoked by the injector as a `config` block.
1406
1406
  * See: {@link angular.module modules}
1407
1407
  * @param {Object=} config an object for defining configuration options for the application. The
1408
1408
  * following keys are supported:
@@ -2118,11 +2118,11 @@ function toDebugString(obj) {
2118
2118
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
2119
2119
  */
2120
2120
  var version = {
2121
- full: '1.3.9', // all of these placeholder strings will be replaced by grunt's
2121
+ full: '1.3.10', // all of these placeholder strings will be replaced by grunt's
2122
2122
  major: 1, // package task
2123
2123
  minor: 3,
2124
- dot: 9,
2125
- codeName: 'multidimensional-awareness'
2124
+ dot: 10,
2125
+ codeName: 'heliotropic-sundial'
2126
2126
  };
2127
2127
 
2128
2128
 
@@ -4186,7 +4186,7 @@ function createInjector(modulesToLoad, strictDi) {
4186
4186
  // Check if Type is annotated and use just the given function at n-1 as parameter
4187
4187
  // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
4188
4188
  // Object creation: http://jsperf.com/create-constructor/2
4189
- var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);
4189
+ var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
4190
4190
  var returnedValue = invoke(Type, instance, locals, serviceName);
4191
4191
 
4192
4192
  return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
@@ -7165,6 +7165,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
7165
7165
 
7166
7166
  // use class as directive
7167
7167
  className = node.className;
7168
+ if (isObject(className)) {
7169
+ // Maybe SVGAnimatedString
7170
+ className = className.animVal;
7171
+ }
7168
7172
  if (isString(className) && className !== '') {
7169
7173
  while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
7170
7174
  nName = directiveNormalize(match[2]);
@@ -8431,7 +8435,7 @@ function $ControllerProvider() {
8431
8435
  // Object creation: http://jsperf.com/create-constructor/2
8432
8436
  var controllerPrototype = (isArray(expression) ?
8433
8437
  expression[expression.length - 1] : expression).prototype;
8434
- instance = Object.create(controllerPrototype);
8438
+ instance = Object.create(controllerPrototype || null);
8435
8439
 
8436
8440
  if (identifier) {
8437
8441
  addIdentifier(locals, identifier, instance, constructor || expression.name);
@@ -14500,7 +14504,7 @@ function $RootScopeProvider() {
14500
14504
  * @kind function
14501
14505
  *
14502
14506
  * @description
14503
- * Schedule the invokation of $apply to occur at a later time. The actual time difference
14507
+ * Schedule the invocation of $apply to occur at a later time. The actual time difference
14504
14508
  * varies across browsers, but is typically around ~10 milliseconds.
14505
14509
  *
14506
14510
  * This can be used to queue up multiple expressions which need to be evaluated in the same
@@ -16010,8 +16014,7 @@ var $compileMinErr = minErr('$compile');
16010
16014
  function $TemplateRequestProvider() {
16011
16015
  this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {
16012
16016
  function handleRequestFn(tpl, ignoreRequestError) {
16013
- var self = handleRequestFn;
16014
- self.totalPendingRequests++;
16017
+ handleRequestFn.totalPendingRequests++;
16015
16018
 
16016
16019
  var transformResponse = $http.defaults && $http.defaults.transformResponse;
16017
16020
 
@@ -16029,13 +16032,14 @@ function $TemplateRequestProvider() {
16029
16032
  };
16030
16033
 
16031
16034
  return $http.get(tpl, httpOptions)
16035
+ .finally(function() {
16036
+ handleRequestFn.totalPendingRequests--;
16037
+ })
16032
16038
  .then(function(response) {
16033
- self.totalPendingRequests--;
16034
16039
  return response.data;
16035
16040
  }, handleError);
16036
16041
 
16037
16042
  function handleError(resp) {
16038
- self.totalPendingRequests--;
16039
16043
  if (!ignoreRequestError) {
16040
16044
  throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
16041
16045
  }
@@ -17125,7 +17129,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d
17125
17129
  * * `'m'`: Minute in hour (0-59)
17126
17130
  * * `'ss'`: Second in minute, padded (00-59)
17127
17131
  * * `'s'`: Second in minute (0-59)
17128
- * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
17132
+ * * `'sss'`: Millisecond in second, padded (000-999)
17129
17133
  * * `'a'`: AM/PM marker
17130
17134
  * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
17131
17135
  * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year
@@ -18261,6 +18265,9 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
18261
18265
  forEach(form.$error, function(value, name) {
18262
18266
  form.$setValidity(name, null, control);
18263
18267
  });
18268
+ forEach(form.$$success, function(value, name) {
18269
+ form.$setValidity(name, null, control);
18270
+ });
18264
18271
 
18265
18272
  arrayRemove(controls, control);
18266
18273
  };
@@ -18278,23 +18285,23 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
18278
18285
  addSetValidityMethod({
18279
18286
  ctrl: this,
18280
18287
  $element: element,
18281
- set: function(object, property, control) {
18288
+ set: function(object, property, controller) {
18282
18289
  var list = object[property];
18283
18290
  if (!list) {
18284
- object[property] = [control];
18291
+ object[property] = [controller];
18285
18292
  } else {
18286
- var index = list.indexOf(control);
18293
+ var index = list.indexOf(controller);
18287
18294
  if (index === -1) {
18288
- list.push(control);
18295
+ list.push(controller);
18289
18296
  }
18290
18297
  }
18291
18298
  },
18292
- unset: function(object, property, control) {
18299
+ unset: function(object, property, controller) {
18293
18300
  var list = object[property];
18294
18301
  if (!list) {
18295
18302
  return;
18296
18303
  }
18297
- arrayRemove(list, control);
18304
+ arrayRemove(list, controller);
18298
18305
  if (list.length === 0) {
18299
18306
  delete object[property];
18300
18307
  }
@@ -20639,8 +20646,9 @@ function classDirective(name, selector) {
20639
20646
  * new classes are added.
20640
20647
  *
20641
20648
  * @animations
20642
- * add - happens just before the class is applied to the element
20643
- * remove - happens just before the class is removed from the element
20649
+ * **add** - happens just before the class is applied to the elements
20650
+ *
20651
+ * **remove** - happens just before the class is removed from the element
20644
20652
  *
20645
20653
  * @element ANY
20646
20654
  * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
@@ -22106,7 +22114,7 @@ var ngIfDirective = ['$animate', function($animate) {
22106
22114
  * @name ngInclude#$includeContentError
22107
22115
  * @eventType emit on the scope ngInclude was declared in
22108
22116
  * @description
22109
- * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)
22117
+ * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299)
22110
22118
  *
22111
22119
  * @param {Object} angularEvent Synthetic event object.
22112
22120
  * @param {String} src URL of content to load.
@@ -23663,22 +23671,22 @@ function addSetValidityMethod(context) {
23663
23671
 
23664
23672
  ctrl.$setValidity = setValidity;
23665
23673
 
23666
- function setValidity(validationErrorKey, state, options) {
23674
+ function setValidity(validationErrorKey, state, controller) {
23667
23675
  if (state === undefined) {
23668
- createAndSet('$pending', validationErrorKey, options);
23676
+ createAndSet('$pending', validationErrorKey, controller);
23669
23677
  } else {
23670
- unsetAndCleanup('$pending', validationErrorKey, options);
23678
+ unsetAndCleanup('$pending', validationErrorKey, controller);
23671
23679
  }
23672
23680
  if (!isBoolean(state)) {
23673
- unset(ctrl.$error, validationErrorKey, options);
23674
- unset(ctrl.$$success, validationErrorKey, options);
23681
+ unset(ctrl.$error, validationErrorKey, controller);
23682
+ unset(ctrl.$$success, validationErrorKey, controller);
23675
23683
  } else {
23676
23684
  if (state) {
23677
- unset(ctrl.$error, validationErrorKey, options);
23678
- set(ctrl.$$success, validationErrorKey, options);
23685
+ unset(ctrl.$error, validationErrorKey, controller);
23686
+ set(ctrl.$$success, validationErrorKey, controller);
23679
23687
  } else {
23680
- set(ctrl.$error, validationErrorKey, options);
23681
- unset(ctrl.$$success, validationErrorKey, options);
23688
+ set(ctrl.$error, validationErrorKey, controller);
23689
+ unset(ctrl.$$success, validationErrorKey, controller);
23682
23690
  }
23683
23691
  }
23684
23692
  if (ctrl.$pending) {
@@ -23706,20 +23714,21 @@ function addSetValidityMethod(context) {
23706
23714
  } else {
23707
23715
  combinedState = null;
23708
23716
  }
23717
+
23709
23718
  toggleValidationCss(validationErrorKey, combinedState);
23710
23719
  parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
23711
23720
  }
23712
23721
 
23713
- function createAndSet(name, value, options) {
23722
+ function createAndSet(name, value, controller) {
23714
23723
  if (!ctrl[name]) {
23715
23724
  ctrl[name] = {};
23716
23725
  }
23717
- set(ctrl[name], value, options);
23726
+ set(ctrl[name], value, controller);
23718
23727
  }
23719
23728
 
23720
- function unsetAndCleanup(name, value, options) {
23729
+ function unsetAndCleanup(name, value, controller) {
23721
23730
  if (ctrl[name]) {
23722
- unset(ctrl[name], value, options);
23731
+ unset(ctrl[name], value, controller);
23723
23732
  }
23724
23733
  if (isObjectEmpty(ctrl[name])) {
23725
23734
  ctrl[name] = undefined;
@@ -24038,6 +24047,29 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
24038
24047
  * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
24039
24048
  * This may be useful when, for instance, nesting ngRepeats.
24040
24049
  *
24050
+ * # Iterating over object properties
24051
+ *
24052
+ * It is possible to get `ngRepeat` to iterate over the properties of an object using the following
24053
+ * syntax:
24054
+ *
24055
+ * ```js
24056
+ * <div ng-repeat="(key, value) in myObj"> ... </div>
24057
+ * ```
24058
+ *
24059
+ * You need to be aware that the JavaScript specification does not define what order
24060
+ * it will return the keys for an object. In order to have a guaranteed deterministic order
24061
+ * for the keys, Angular versions up to and including 1.3 **sort the keys alphabetically**.
24062
+ *
24063
+ * If this is not desired, the recommended workaround is to convert your object into an array
24064
+ * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could
24065
+ * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter)
24066
+ * or implement a `$watch` on the object yourself.
24067
+ *
24068
+ * In version 1.4 we will remove the sorting, since it seems that browsers generally follow the
24069
+ * strategy of providing keys in the order in which they were defined, although there are exceptions
24070
+ * when keys are deleted and reinstated.
24071
+ *
24072
+ *
24041
24073
  * # Special repeat start and end points
24042
24074
  * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
24043
24075
  * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
@@ -24282,7 +24314,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
24282
24314
  var keyIdentifier = match[2];
24283
24315
 
24284
24316
  if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
24285
- /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(aliasAs))) {
24317
+ /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) {
24286
24318
  throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
24287
24319
  aliasAs);
24288
24320
  }