angular-gem 1.3.4 → 1.3.5

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.5/angular-animate.js +2136 -0
  4. data/vendor/assets/javascripts/1.3.5/angular-aria.js +321 -0
  5. data/vendor/assets/javascripts/1.3.5/angular-cookies.js +206 -0
  6. data/vendor/assets/javascripts/1.3.5/angular-loader.js +405 -0
  7. data/vendor/assets/javascripts/1.3.5/angular-messages.js +400 -0
  8. data/vendor/assets/javascripts/1.3.5/angular-mocks.js +2380 -0
  9. data/vendor/assets/javascripts/1.3.5/angular-resource.js +667 -0
  10. data/vendor/assets/javascripts/1.3.5/angular-route.js +996 -0
  11. data/vendor/assets/javascripts/1.3.5/angular-sanitize.js +678 -0
  12. data/vendor/assets/javascripts/1.3.5/angular-scenario.js +37271 -0
  13. data/vendor/assets/javascripts/1.3.5/angular-touch.js +622 -0
  14. data/vendor/assets/javascripts/1.3.5/angular.js +25917 -0
  15. data/vendor/assets/javascripts/angular-animate.js +1 -1
  16. data/vendor/assets/javascripts/angular-aria.js +1 -1
  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 +4 -4
  21. data/vendor/assets/javascripts/angular-resource.js +1 -1
  22. data/vendor/assets/javascripts/angular-route.js +2 -2
  23. data/vendor/assets/javascripts/angular-sanitize.js +2 -2
  24. data/vendor/assets/javascripts/angular-scenario.js +39 -37
  25. data/vendor/assets/javascripts/angular-touch.js +1 -1
  26. data/vendor/assets/javascripts/angular.js +39 -37
  27. metadata +14 -2
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.4
2
+ * @license AngularJS v1.3.5
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.4
2
+ * @license AngularJS v1.3.5
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.4
2
+ * @license AngularJS v1.3.5
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.4
2
+ * @license AngularJS v1.3.5
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.4/' +
58
+ message = message + '\nhttp://errors.angularjs.org/1.3.5/' +
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.4
2
+ * @license AngularJS v1.3.5
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.4
2
+ * @license AngularJS v1.3.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1149,7 +1149,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1149
1149
  return function() {
1150
1150
  return angular.isNumber(status)
1151
1151
  ? [status, data, headers, statusText]
1152
- : [200, status, data];
1152
+ : [200, status, data, headers];
1153
1153
  };
1154
1154
  }
1155
1155
 
@@ -2054,7 +2054,7 @@ angular.mock.e2e.$httpBackendDecorator =
2054
2054
  *
2055
2055
  * In addition to all the regular `Scope` methods, the following helper methods are available:
2056
2056
  */
2057
- angular.mock.$RootScopeDecorator = function($delegate) {
2057
+ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
2058
2058
 
2059
2059
  var $rootScopePrototype = Object.getPrototypeOf($delegate);
2060
2060
 
@@ -2126,7 +2126,7 @@ angular.mock.$RootScopeDecorator = function($delegate) {
2126
2126
 
2127
2127
  return count;
2128
2128
  }
2129
- };
2129
+ }];
2130
2130
 
2131
2131
 
2132
2132
  if (window.jasmine || window.mocha) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.4
2
+ * @license AngularJS v1.3.5
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.4
2
+ * @license AngularJS v1.3.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -180,7 +180,7 @@ function $RouteProvider() {
180
180
  * @description
181
181
  *
182
182
  * A boolean property indicating if routes defined
183
- * using this provider should be matched using a case sensitive
183
+ * using this provider should be matched using a case insensitive
184
184
  * algorithm. Defaults to `false`.
185
185
  */
186
186
  this.caseInsensitiveMatch = false;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.4
2
+ * @license AngularJS v1.3.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -666,7 +666,7 @@ angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
666
666
  '" ');
667
667
  }
668
668
  html.push('href="',
669
- url.replace('"', '&quot;'),
669
+ url.replace(/"/g, '&quot;'),
670
670
  '">');
671
671
  addText(text);
672
672
  html.push('</a>');
@@ -9190,7 +9190,7 @@ return jQuery;
9190
9190
  }));
9191
9191
 
9192
9192
  /**
9193
- * @license AngularJS v1.3.4
9193
+ * @license AngularJS v1.3.5
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.4/' +
9249
+ message = message + '\nhttp://errors.angularjs.org/1.3.5/' +
9250
9250
  (module ? module + '/' : '') + code;
9251
9251
  for (i = 2; i < arguments.length; i++) {
9252
9252
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -9418,8 +9418,8 @@ if ('i' !== 'I'.toLowerCase()) {
9418
9418
  }
9419
9419
 
9420
9420
 
9421
- var /** holds major version number for IE or NaN for real browsers */
9422
- msie,
9421
+ var
9422
+ msie, // holds major version number for IE, or NaN if UA is not IE.
9423
9423
  jqLite, // delay binding since jQuery could be loaded after us.
9424
9424
  jQuery, // delay binding
9425
9425
  slice = [].slice,
@@ -11292,11 +11292,11 @@ function toDebugString(obj) {
11292
11292
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11293
11293
  */
11294
11294
  var version = {
11295
- full: '1.3.4', // all of these placeholder strings will be replaced by grunt's
11295
+ full: '1.3.5', // all of these placeholder strings will be replaced by grunt's
11296
11296
  major: 1, // package task
11297
11297
  minor: 3,
11298
- dot: 4,
11299
- codeName: 'highfalutin-petroglyph'
11298
+ dot: 5,
11299
+ codeName: 'cybernetic-mercantilism'
11300
11300
  };
11301
11301
 
11302
11302
 
@@ -15659,7 +15659,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15659
15659
  * Retrieves or overrides the default regular expression that is used for whitelisting of safe
15660
15660
  * urls during a[href] sanitization.
15661
15661
  *
15662
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
15662
+ * The sanitization is a security measure aimed at preventing XSS attacks via html links.
15663
15663
  *
15664
15664
  * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
15665
15665
  * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
@@ -15726,7 +15726,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15726
15726
  * * `ng-binding` CSS class
15727
15727
  * * `$binding` data property containing an array of the binding expressions
15728
15728
  *
15729
- * You may want to use this in production for a significant performance boost. See
15729
+ * You may want to disable this in production for a significant performance boost. See
15730
15730
  * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
15731
15731
  *
15732
15732
  * The default value is true.
@@ -18283,12 +18283,14 @@ function $HttpProvider() {
18283
18283
  * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
18284
18284
  * transform function or an array of such functions. The transform function takes the http
18285
18285
  * request body and headers and returns its transformed (typically serialized) version.
18286
- * See {@link #overriding-the-default-transformations-per-request Overriding the Default Transformations}
18286
+ * See {@link ng.$http#overriding-the-default-transformations-per-request
18287
+ * Overriding the Default Transformations}
18287
18288
  * - **transformResponse** –
18288
18289
  * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
18289
18290
  * transform function or an array of such functions. The transform function takes the http
18290
18291
  * response body and headers and returns its transformed (typically deserialized) version.
18291
- * See {@link #overriding-the-default-transformations-per-request Overriding the Default Transformations}
18292
+ * See {@link ng.$http#overriding-the-default-transformations-per-request
18293
+ * Overriding the Default Transformations}
18292
18294
  * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
18293
18295
  * GET request, otherwise if a cache instance built with
18294
18296
  * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
@@ -18938,7 +18940,9 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
18938
18940
 
18939
18941
  function completeRequest(callback, status, response, headersString, statusText) {
18940
18942
  // cancel timeout and subsequent timeout promise resolution
18941
- timeoutId && $browserDefer.cancel(timeoutId);
18943
+ if (timeoutId !== undefined) {
18944
+ $browserDefer.cancel(timeoutId);
18945
+ }
18942
18946
  jsonpDone = xhr = null;
18943
18947
 
18944
18948
  callback(status, response, headersString, statusText);
@@ -21420,13 +21424,13 @@ Parser.prototype = {
21420
21424
  ensureSafeObject(context, expressionText);
21421
21425
  ensureSafeFunction(fn, expressionText);
21422
21426
 
21423
- // IE stupidity! (IE doesn't have apply for some native functions)
21427
+ // IE doesn't have apply for some native functions
21424
21428
  var v = fn.apply
21425
21429
  ? fn.apply(context, args)
21426
21430
  : fn(args[0], args[1], args[2], args[3], args[4]);
21427
21431
 
21428
21432
  return ensureSafeObject(v, expressionText);
21429
- };
21433
+ };
21430
21434
  },
21431
21435
 
21432
21436
  // This is used with json array declaration
@@ -25108,14 +25112,9 @@ function $TemplateRequestProvider() {
25108
25112
  var transformResponse = $http.defaults && $http.defaults.transformResponse;
25109
25113
 
25110
25114
  if (isArray(transformResponse)) {
25111
- var original = transformResponse;
25112
- transformResponse = [];
25113
- for (var i = 0; i < original.length; ++i) {
25114
- var transformer = original[i];
25115
- if (transformer !== defaultHttpResponseTransform) {
25116
- transformResponse.push(transformer);
25117
- }
25118
- }
25115
+ transformResponse = transformResponse.filter(function(transformer) {
25116
+ return transformer !== defaultHttpResponseTransform;
25117
+ });
25119
25118
  } else if (transformResponse === defaultHttpResponseTransform) {
25120
25119
  transformResponse = null;
25121
25120
  }
@@ -25133,12 +25132,12 @@ function $TemplateRequestProvider() {
25133
25132
  return html;
25134
25133
  }, handleError);
25135
25134
 
25136
- function handleError() {
25135
+ function handleError(resp) {
25137
25136
  self.totalPendingRequests--;
25138
25137
  if (!ignoreRequestError) {
25139
25138
  throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
25140
25139
  }
25141
- return $q.reject();
25140
+ return $q.reject(resp);
25142
25141
  }
25143
25142
  }
25144
25143
 
@@ -26774,9 +26773,8 @@ var htmlAnchorDirective = valueFn({
26774
26773
  * make the link go to the wrong URL if the user clicks it before
26775
26774
  * Angular has a chance to replace the `{{hash}}` markup with its
26776
26775
  * value. Until Angular replaces the markup the link will be broken
26777
- * and will most likely return a 404 error.
26778
- *
26779
- * The `ngHref` directive solves this problem.
26776
+ * and will most likely return a 404 error. The `ngHref` directive
26777
+ * solves this problem.
26780
26778
  *
26781
26779
  * The wrong way to write it:
26782
26780
  * ```html
@@ -34328,7 +34326,6 @@ var scriptDirective = ['$templateCache', function($templateCache) {
34328
34326
  compile: function(element, attr) {
34329
34327
  if (attr.type == 'text/ng-template') {
34330
34328
  var templateUrl = attr.id,
34331
- // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent
34332
34329
  text = element[0].text;
34333
34330
 
34334
34331
  $templateCache.put(templateUrl, text);
@@ -34549,7 +34546,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
34549
34546
  self.removeOption = function(value) {
34550
34547
  if (this.hasOption(value)) {
34551
34548
  delete optionsMap[value];
34552
- if (ngModelCtrl.$viewValue == value) {
34549
+ if (ngModelCtrl.$viewValue === value) {
34553
34550
  this.renderUnknownOption(value);
34554
34551
  }
34555
34552
  }
@@ -35016,18 +35013,23 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
35016
35013
  updateLabelMap(labelMap, option.label, false);
35017
35014
  option.element.remove();
35018
35015
  }
35019
- forEach(labelMap, function(count, label) {
35020
- if (count > 0) {
35021
- selectCtrl.addOption(label);
35022
- } else if (count < 0) {
35023
- selectCtrl.removeOption(label);
35024
- }
35025
- });
35026
35016
  }
35027
35017
  // remove any excessive OPTGROUPs from select
35028
35018
  while (optionGroupsCache.length > groupIndex) {
35029
- optionGroupsCache.pop()[0].element.remove();
35019
+ // remove all the labels in the option group
35020
+ optionGroup = optionGroupsCache.pop();
35021
+ for (index = 1; index < optionGroup.length; ++index) {
35022
+ updateLabelMap(labelMap, optionGroup[index].label, false);
35023
+ }
35024
+ optionGroup[0].element.remove();
35030
35025
  }
35026
+ forEach(labelMap, function(count, label) {
35027
+ if (count > 0) {
35028
+ selectCtrl.addOption(label);
35029
+ } else if (count < 0) {
35030
+ selectCtrl.removeOption(label);
35031
+ }
35032
+ });
35031
35033
  }
35032
35034
  }
35033
35035
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.4
2
+ * @license AngularJS v1.3.5
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.4
2
+ * @license AngularJS v1.3.5
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.4/' +
57
+ message = message + '\nhttp://errors.angularjs.org/1.3.5/' +
58
58
  (module ? module + '/' : '') + code;
59
59
  for (i = 2; i < arguments.length; i++) {
60
60
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -226,8 +226,8 @@ if ('i' !== 'I'.toLowerCase()) {
226
226
  }
227
227
 
228
228
 
229
- var /** holds major version number for IE or NaN for real browsers */
230
- msie,
229
+ var
230
+ msie, // holds major version number for IE, or NaN if UA is not IE.
231
231
  jqLite, // delay binding since jQuery could be loaded after us.
232
232
  jQuery, // delay binding
233
233
  slice = [].slice,
@@ -2100,11 +2100,11 @@ function toDebugString(obj) {
2100
2100
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
2101
2101
  */
2102
2102
  var version = {
2103
- full: '1.3.4', // all of these placeholder strings will be replaced by grunt's
2103
+ full: '1.3.5', // all of these placeholder strings will be replaced by grunt's
2104
2104
  major: 1, // package task
2105
2105
  minor: 3,
2106
- dot: 4,
2107
- codeName: 'highfalutin-petroglyph'
2106
+ dot: 5,
2107
+ codeName: 'cybernetic-mercantilism'
2108
2108
  };
2109
2109
 
2110
2110
 
@@ -6467,7 +6467,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
6467
6467
  * Retrieves or overrides the default regular expression that is used for whitelisting of safe
6468
6468
  * urls during a[href] sanitization.
6469
6469
  *
6470
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
6470
+ * The sanitization is a security measure aimed at preventing XSS attacks via html links.
6471
6471
  *
6472
6472
  * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
6473
6473
  * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
@@ -6534,7 +6534,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
6534
6534
  * * `ng-binding` CSS class
6535
6535
  * * `$binding` data property containing an array of the binding expressions
6536
6536
  *
6537
- * You may want to use this in production for a significant performance boost. See
6537
+ * You may want to disable this in production for a significant performance boost. See
6538
6538
  * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
6539
6539
  *
6540
6540
  * The default value is true.
@@ -9091,12 +9091,14 @@ function $HttpProvider() {
9091
9091
  * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
9092
9092
  * transform function or an array of such functions. The transform function takes the http
9093
9093
  * request body and headers and returns its transformed (typically serialized) version.
9094
- * See {@link #overriding-the-default-transformations-per-request Overriding the Default Transformations}
9094
+ * See {@link ng.$http#overriding-the-default-transformations-per-request
9095
+ * Overriding the Default Transformations}
9095
9096
  * - **transformResponse** –
9096
9097
  * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
9097
9098
  * transform function or an array of such functions. The transform function takes the http
9098
9099
  * response body and headers and returns its transformed (typically deserialized) version.
9099
- * See {@link #overriding-the-default-transformations-per-request Overriding the Default Transformations}
9100
+ * See {@link ng.$http#overriding-the-default-transformations-per-request
9101
+ * Overriding the Default Transformations}
9100
9102
  * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
9101
9103
  * GET request, otherwise if a cache instance built with
9102
9104
  * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
@@ -9746,7 +9748,9 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
9746
9748
 
9747
9749
  function completeRequest(callback, status, response, headersString, statusText) {
9748
9750
  // cancel timeout and subsequent timeout promise resolution
9749
- timeoutId && $browserDefer.cancel(timeoutId);
9751
+ if (timeoutId !== undefined) {
9752
+ $browserDefer.cancel(timeoutId);
9753
+ }
9750
9754
  jsonpDone = xhr = null;
9751
9755
 
9752
9756
  callback(status, response, headersString, statusText);
@@ -12228,13 +12232,13 @@ Parser.prototype = {
12228
12232
  ensureSafeObject(context, expressionText);
12229
12233
  ensureSafeFunction(fn, expressionText);
12230
12234
 
12231
- // IE stupidity! (IE doesn't have apply for some native functions)
12235
+ // IE doesn't have apply for some native functions
12232
12236
  var v = fn.apply
12233
12237
  ? fn.apply(context, args)
12234
12238
  : fn(args[0], args[1], args[2], args[3], args[4]);
12235
12239
 
12236
12240
  return ensureSafeObject(v, expressionText);
12237
- };
12241
+ };
12238
12242
  },
12239
12243
 
12240
12244
  // This is used with json array declaration
@@ -15916,14 +15920,9 @@ function $TemplateRequestProvider() {
15916
15920
  var transformResponse = $http.defaults && $http.defaults.transformResponse;
15917
15921
 
15918
15922
  if (isArray(transformResponse)) {
15919
- var original = transformResponse;
15920
- transformResponse = [];
15921
- for (var i = 0; i < original.length; ++i) {
15922
- var transformer = original[i];
15923
- if (transformer !== defaultHttpResponseTransform) {
15924
- transformResponse.push(transformer);
15925
- }
15926
- }
15923
+ transformResponse = transformResponse.filter(function(transformer) {
15924
+ return transformer !== defaultHttpResponseTransform;
15925
+ });
15927
15926
  } else if (transformResponse === defaultHttpResponseTransform) {
15928
15927
  transformResponse = null;
15929
15928
  }
@@ -15941,12 +15940,12 @@ function $TemplateRequestProvider() {
15941
15940
  return html;
15942
15941
  }, handleError);
15943
15942
 
15944
- function handleError() {
15943
+ function handleError(resp) {
15945
15944
  self.totalPendingRequests--;
15946
15945
  if (!ignoreRequestError) {
15947
15946
  throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
15948
15947
  }
15949
- return $q.reject();
15948
+ return $q.reject(resp);
15950
15949
  }
15951
15950
  }
15952
15951
 
@@ -17582,9 +17581,8 @@ var htmlAnchorDirective = valueFn({
17582
17581
  * make the link go to the wrong URL if the user clicks it before
17583
17582
  * Angular has a chance to replace the `{{hash}}` markup with its
17584
17583
  * value. Until Angular replaces the markup the link will be broken
17585
- * and will most likely return a 404 error.
17586
- *
17587
- * The `ngHref` directive solves this problem.
17584
+ * and will most likely return a 404 error. The `ngHref` directive
17585
+ * solves this problem.
17588
17586
  *
17589
17587
  * The wrong way to write it:
17590
17588
  * ```html
@@ -25136,7 +25134,6 @@ var scriptDirective = ['$templateCache', function($templateCache) {
25136
25134
  compile: function(element, attr) {
25137
25135
  if (attr.type == 'text/ng-template') {
25138
25136
  var templateUrl = attr.id,
25139
- // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent
25140
25137
  text = element[0].text;
25141
25138
 
25142
25139
  $templateCache.put(templateUrl, text);
@@ -25357,7 +25354,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
25357
25354
  self.removeOption = function(value) {
25358
25355
  if (this.hasOption(value)) {
25359
25356
  delete optionsMap[value];
25360
- if (ngModelCtrl.$viewValue == value) {
25357
+ if (ngModelCtrl.$viewValue === value) {
25361
25358
  this.renderUnknownOption(value);
25362
25359
  }
25363
25360
  }
@@ -25824,18 +25821,23 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
25824
25821
  updateLabelMap(labelMap, option.label, false);
25825
25822
  option.element.remove();
25826
25823
  }
25827
- forEach(labelMap, function(count, label) {
25828
- if (count > 0) {
25829
- selectCtrl.addOption(label);
25830
- } else if (count < 0) {
25831
- selectCtrl.removeOption(label);
25832
- }
25833
- });
25834
25824
  }
25835
25825
  // remove any excessive OPTGROUPs from select
25836
25826
  while (optionGroupsCache.length > groupIndex) {
25837
- optionGroupsCache.pop()[0].element.remove();
25827
+ // remove all the labels in the option group
25828
+ optionGroup = optionGroupsCache.pop();
25829
+ for (index = 1; index < optionGroup.length; ++index) {
25830
+ updateLabelMap(labelMap, optionGroup[index].label, false);
25831
+ }
25832
+ optionGroup[0].element.remove();
25838
25833
  }
25834
+ forEach(labelMap, function(count, label) {
25835
+ if (count > 0) {
25836
+ selectCtrl.addOption(label);
25837
+ } else if (count < 0) {
25838
+ selectCtrl.removeOption(label);
25839
+ }
25840
+ });
25839
25841
  }
25840
25842
  }
25841
25843
  }