angular-gem 1.2.4 → 1.2.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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.4
2
+ * @license AngularJS v1.2.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1243,7 +1243,7 @@ angular.module('ngAnimate', ['ng'])
1243
1243
  //make the element super hidden and override any CSS style values
1244
1244
  clone.attr('style','position:absolute; top:-9999px; left:-9999px');
1245
1245
  clone.removeAttr('id');
1246
- clone.html('');
1246
+ clone.empty();
1247
1247
 
1248
1248
  forEach(oldClasses.split(' '), function(klass) {
1249
1249
  clone.removeClass(klass);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.4
2
+ * @license AngularJS v1.2.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.2.4
2
+ * @license AngularJS v1.2.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -69,7 +69,7 @@ function minErr(module) {
69
69
  return match;
70
70
  });
71
71
 
72
- message = message + '\nhttp://errors.angularjs.org/1.2.4/' +
72
+ message = message + '\nhttp://errors.angularjs.org/1.2.5/' +
73
73
  (module ? module + '/' : '') + code;
74
74
  for (i = 2; i < arguments.length; i++) {
75
75
  message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.4
2
+ * @license AngularJS v1.2.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1094,7 +1094,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1094
1094
  var definitions = [],
1095
1095
  expectations = [],
1096
1096
  responses = [],
1097
- responsesPush = angular.bind(responses, responses.push);
1097
+ responsesPush = angular.bind(responses, responses.push),
1098
+ copy = angular.copy;
1098
1099
 
1099
1100
  function createResponse(status, data, headers) {
1100
1101
  if (angular.isFunction(status)) return status;
@@ -1126,7 +1127,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
1126
1127
  function handleResponse() {
1127
1128
  var response = wrapped.response(method, url, data, headers);
1128
1129
  xhr.$$respHeaders = response[2];
1129
- callback(response[0], response[1], xhr.getAllResponseHeaders());
1130
+ callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders());
1130
1131
  }
1131
1132
 
1132
1133
  function handleTimeout() {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.4
2
+ * @license AngularJS v1.2.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -29,6 +29,25 @@ function lookupDottedPath(obj, path) {
29
29
  return obj;
30
30
  }
31
31
 
32
+ /**
33
+ * Create a shallow copy of an object and clear other fields from the destination
34
+ */
35
+ function shallowClearAndCopy(src, dst) {
36
+ dst = dst || {};
37
+
38
+ angular.forEach(dst, function(value, key){
39
+ delete dst[key];
40
+ });
41
+
42
+ for (var key in src) {
43
+ if (src.hasOwnProperty(key) && key.substr(0, 2) !== '$$') {
44
+ dst[key] = src[key];
45
+ }
46
+ }
47
+
48
+ return dst;
49
+ }
50
+
32
51
  /**
33
52
  * @ngdoc overview
34
53
  * @name ngResource
@@ -398,7 +417,7 @@ angular.module('ngResource', ['ng']).
398
417
  }
399
418
 
400
419
  function Resource(value){
401
- copy(value || {}, this);
420
+ shallowClearAndCopy(value || {}, this);
402
421
  }
403
422
 
404
423
  forEach(actions, function(action, name) {
@@ -470,7 +489,7 @@ angular.module('ngResource', ['ng']).
470
489
  if (data) {
471
490
  // Need to convert action.isArray to boolean in case it is undefined
472
491
  // jshint -W018
473
- if ( angular.isArray(data) !== (!!action.isArray) ) {
492
+ if (angular.isArray(data) !== (!!action.isArray)) {
474
493
  throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' +
475
494
  'response to contain an {0} but got an {1}',
476
495
  action.isArray?'array':'object', angular.isArray(data)?'array':'object');
@@ -482,7 +501,7 @@ angular.module('ngResource', ['ng']).
482
501
  value.push(new Resource(item));
483
502
  });
484
503
  } else {
485
- copy(data, value);
504
+ shallowClearAndCopy(data, value);
486
505
  value.$promise = promise;
487
506
  }
488
507
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.4
2
+ * @license AngularJS v1.2.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -57,13 +57,13 @@ function $RouteProvider(){
57
57
  * `$location.path` will be updated to add or drop the trailing slash to exactly match the
58
58
  * route definition.
59
59
  *
60
- * * `path` can contain named groups starting with a colon (`:name`). All characters up
60
+ * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up
61
61
  * to the next slash are matched and stored in `$routeParams` under the given `name`
62
62
  * when the route matches.
63
- * * `path` can contain named groups starting with a colon and ending with a star (`:name*`).
64
- * All characters are eagerly stored in `$routeParams` under the given `name`
63
+ * * `path` can contain named groups starting with a colon and ending with a star:
64
+ * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`
65
65
  * when the route matches.
66
- * * `path` can contain optional named groups with a question mark (`:name?`).
66
+ * * `path` can contain optional named groups with a question mark: e.g.`:name?`.
67
67
  *
68
68
  * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match
69
69
  * `/color/brown/largecode/code/with/slashs/edit` and extract:
@@ -644,6 +644,8 @@ function $RouteParamsProvider() {
644
644
  }
645
645
 
646
646
  ngRouteModule.directive('ngView', ngViewFactory);
647
+ ngRouteModule.directive('ngView', ngViewFillContentFactory);
648
+
647
649
 
648
650
  /**
649
651
  * @ngdoc directive
@@ -809,8 +811,8 @@ ngRouteModule.directive('ngView', ngViewFactory);
809
811
  * @description
810
812
  * Emitted every time the ngView content is reloaded.
811
813
  */
812
- ngViewFactory.$inject = ['$route', '$anchorScroll', '$compile', '$controller', '$animate'];
813
- function ngViewFactory( $route, $anchorScroll, $compile, $controller, $animate) {
814
+ ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];
815
+ function ngViewFactory( $route, $anchorScroll, $animate) {
814
816
  return {
815
817
  restrict: 'ECA',
816
818
  terminal: true,
@@ -842,6 +844,7 @@ function ngViewFactory( $route, $anchorScroll, $compile, $controller,
842
844
 
843
845
  if (template) {
844
846
  var newScope = scope.$new();
847
+ var current = $route.current;
845
848
 
846
849
  // Note: This will also link all children of ng-view that were contained in the original
847
850
  // html. If that content contains controllers, ... they could pollute/change the scope.
@@ -849,34 +852,18 @@ function ngViewFactory( $route, $anchorScroll, $compile, $controller,
849
852
  // Note: We can't remove them in the cloneAttchFn of $transclude as that
850
853
  // function is called before linking the content, which would apply child
851
854
  // directives to non existing elements.
852
- var clone = $transclude(newScope, angular.noop);
853
- clone.html(template);
854
- $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () {
855
- if (angular.isDefined(autoScrollExp)
856
- && (!autoScrollExp || scope.$eval(autoScrollExp))) {
857
- $anchorScroll();
858
- }
855
+ var clone = $transclude(newScope, function(clone) {
856
+ $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () {
857
+ if (angular.isDefined(autoScrollExp)
858
+ && (!autoScrollExp || scope.$eval(autoScrollExp))) {
859
+ $anchorScroll();
860
+ }
861
+ });
862
+ cleanupLastView();
859
863
  });
860
864
 
861
- cleanupLastView();
862
-
863
- var link = $compile(clone.contents()),
864
- current = $route.current;
865
-
866
- currentScope = current.scope = newScope;
867
865
  currentElement = clone;
868
-
869
- if (current.controller) {
870
- locals.$scope = currentScope;
871
- var controller = $controller(current.controller, locals);
872
- if (current.controllerAs) {
873
- currentScope[current.controllerAs] = controller;
874
- }
875
- clone.data('$ngControllerController', controller);
876
- clone.children().data('$ngControllerController', controller);
877
- }
878
-
879
- link(currentScope);
866
+ currentScope = current.scope = newScope;
880
867
  currentScope.$emit('$viewContentLoaded');
881
868
  currentScope.$eval(onloadExp);
882
869
  } else {
@@ -887,5 +874,38 @@ function ngViewFactory( $route, $anchorScroll, $compile, $controller,
887
874
  };
888
875
  }
889
876
 
877
+ // This directive is called during the $transclude call of the first `ngView` directive.
878
+ // It will replace and compile the content of the element with the loaded template.
879
+ // We need this directive so that the element content is already filled when
880
+ // the link function of another directive on the same element as ngView
881
+ // is called.
882
+ ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];
883
+ function ngViewFillContentFactory($compile, $controller, $route) {
884
+ return {
885
+ restrict: 'ECA',
886
+ priority: -400,
887
+ link: function(scope, $element) {
888
+ var current = $route.current,
889
+ locals = current.locals;
890
+
891
+ $element.html(locals.$template);
892
+
893
+ var link = $compile($element.contents());
894
+
895
+ if (current.controller) {
896
+ locals.$scope = scope;
897
+ var controller = $controller(current.controller, locals);
898
+ if (current.controllerAs) {
899
+ scope[current.controllerAs] = controller;
900
+ }
901
+ $element.data('$ngControllerController', controller);
902
+ $element.children().data('$ngControllerController', controller);
903
+ }
904
+
905
+ link(scope);
906
+ }
907
+ };
908
+ }
909
+
890
910
 
891
911
  })(window, window.angular);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.4
2
+ * @license AngularJS v1.2.5
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -9790,7 +9790,7 @@ if ( typeof module === "object" && module && typeof module.exports === "object"
9790
9790
  })( window );
9791
9791
 
9792
9792
  /**
9793
- * @license AngularJS v1.2.4
9793
+ * @license AngularJS v1.2.5
9794
9794
  * (c) 2010-2014 Google, Inc. http://angularjs.org
9795
9795
  * License: MIT
9796
9796
  */
@@ -9860,7 +9860,7 @@ function minErr(module) {
9860
9860
  return match;
9861
9861
  });
9862
9862
 
9863
- message = message + '\nhttp://errors.angularjs.org/1.2.4/' +
9863
+ message = message + '\nhttp://errors.angularjs.org/1.2.5/' +
9864
9864
  (module ? module + '/' : '') + code;
9865
9865
  for (i = 2; i < arguments.length; i++) {
9866
9866
  message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
@@ -10264,7 +10264,7 @@ function valueFn(value) {return function() {return value;};}
10264
10264
  * @param {*} value Reference to check.
10265
10265
  * @returns {boolean} True if `value` is undefined.
10266
10266
  */
10267
- function isUndefined(value){return typeof value == 'undefined';}
10267
+ function isUndefined(value){return typeof value === 'undefined';}
10268
10268
 
10269
10269
 
10270
10270
  /**
@@ -10278,7 +10278,7 @@ function isUndefined(value){return typeof value == 'undefined';}
10278
10278
  * @param {*} value Reference to check.
10279
10279
  * @returns {boolean} True if `value` is defined.
10280
10280
  */
10281
- function isDefined(value){return typeof value != 'undefined';}
10281
+ function isDefined(value){return typeof value !== 'undefined';}
10282
10282
 
10283
10283
 
10284
10284
  /**
@@ -10293,7 +10293,7 @@ function isDefined(value){return typeof value != 'undefined';}
10293
10293
  * @param {*} value Reference to check.
10294
10294
  * @returns {boolean} True if `value` is an `Object` but not `null`.
10295
10295
  */
10296
- function isObject(value){return value != null && typeof value == 'object';}
10296
+ function isObject(value){return value != null && typeof value === 'object';}
10297
10297
 
10298
10298
 
10299
10299
  /**
@@ -10307,7 +10307,7 @@ function isObject(value){return value != null && typeof value == 'object';}
10307
10307
  * @param {*} value Reference to check.
10308
10308
  * @returns {boolean} True if `value` is a `String`.
10309
10309
  */
10310
- function isString(value){return typeof value == 'string';}
10310
+ function isString(value){return typeof value === 'string';}
10311
10311
 
10312
10312
 
10313
10313
  /**
@@ -10321,7 +10321,7 @@ function isString(value){return typeof value == 'string';}
10321
10321
  * @param {*} value Reference to check.
10322
10322
  * @returns {boolean} True if `value` is a `Number`.
10323
10323
  */
10324
- function isNumber(value){return typeof value == 'number';}
10324
+ function isNumber(value){return typeof value === 'number';}
10325
10325
 
10326
10326
 
10327
10327
  /**
@@ -10336,7 +10336,7 @@ function isNumber(value){return typeof value == 'number';}
10336
10336
  * @returns {boolean} True if `value` is a `Date`.
10337
10337
  */
10338
10338
  function isDate(value){
10339
- return toString.apply(value) == '[object Date]';
10339
+ return toString.call(value) === '[object Date]';
10340
10340
  }
10341
10341
 
10342
10342
 
@@ -10352,7 +10352,7 @@ function isDate(value){
10352
10352
  * @returns {boolean} True if `value` is an `Array`.
10353
10353
  */
10354
10354
  function isArray(value) {
10355
- return toString.apply(value) == '[object Array]';
10355
+ return toString.call(value) === '[object Array]';
10356
10356
  }
10357
10357
 
10358
10358
 
@@ -10367,7 +10367,7 @@ function isArray(value) {
10367
10367
  * @param {*} value Reference to check.
10368
10368
  * @returns {boolean} True if `value` is a `Function`.
10369
10369
  */
10370
- function isFunction(value){return typeof value == 'function';}
10370
+ function isFunction(value){return typeof value === 'function';}
10371
10371
 
10372
10372
 
10373
10373
  /**
@@ -10378,7 +10378,7 @@ function isFunction(value){return typeof value == 'function';}
10378
10378
  * @returns {boolean} True if `value` is a `RegExp`.
10379
10379
  */
10380
10380
  function isRegExp(value) {
10381
- return toString.apply(value) == '[object RegExp]';
10381
+ return toString.call(value) === '[object RegExp]';
10382
10382
  }
10383
10383
 
10384
10384
 
@@ -10400,12 +10400,12 @@ function isScope(obj) {
10400
10400
 
10401
10401
 
10402
10402
  function isFile(obj) {
10403
- return toString.apply(obj) === '[object File]';
10403
+ return toString.call(obj) === '[object File]';
10404
10404
  }
10405
10405
 
10406
10406
 
10407
10407
  function isBoolean(value) {
10408
- return typeof value == 'boolean';
10408
+ return typeof value === 'boolean';
10409
10409
  }
10410
10410
 
10411
10411
 
@@ -10509,7 +10509,7 @@ function includes(array, obj) {
10509
10509
  function indexOf(array, obj) {
10510
10510
  if (array.indexOf) return array.indexOf(obj);
10511
10511
 
10512
- for ( var i = 0; i < array.length; i++) {
10512
+ for (var i = 0; i < array.length; i++) {
10513
10513
  if (obj === array[i]) return i;
10514
10514
  }
10515
10515
  return -1;
@@ -10845,7 +10845,7 @@ function startingTag(element) {
10845
10845
  try {
10846
10846
  // turns out IE does not let you set .html() on elements which
10847
10847
  // are not allowed to have children. So we just ignore it.
10848
- element.html('');
10848
+ element.empty();
10849
10849
  } catch(e) {}
10850
10850
  // As Per DOM Standards
10851
10851
  var TEXT_NODE = 3;
@@ -11559,6 +11559,7 @@ function setupModuleLoader(window) {
11559
11559
  ngHideDirective,
11560
11560
  ngIfDirective,
11561
11561
  ngIncludeDirective,
11562
+ ngIncludeFillContentDirective,
11562
11563
  ngInitDirective,
11563
11564
  ngNonBindableDirective,
11564
11565
  ngPluralizeDirective,
@@ -11620,11 +11621,11 @@ function setupModuleLoader(window) {
11620
11621
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11621
11622
  */
11622
11623
  var version = {
11623
- full: '1.2.4', // all of these placeholder strings will be replaced by grunt's
11624
+ full: '1.2.5', // all of these placeholder strings will be replaced by grunt's
11624
11625
  major: 1, // package task
11625
11626
  minor: 2,
11626
- dot: 4,
11627
- codeName: 'wormhole-baster'
11627
+ dot: 5,
11628
+ codeName: 'singularity-expansion'
11628
11629
  };
11629
11630
 
11630
11631
 
@@ -11712,6 +11713,9 @@ function publishExternalAPI(angular){
11712
11713
  ngRequired: requiredDirective,
11713
11714
  ngValue: ngValueDirective
11714
11715
  }).
11716
+ directive({
11717
+ ngInclude: ngIncludeFillContentDirective
11718
+ }).
11715
11719
  directive(ngAttributeAliasDirectives).
11716
11720
  directive(ngEventDirectives);
11717
11721
  $provide.provider({
@@ -11789,6 +11793,7 @@ function publishExternalAPI(angular){
11789
11793
  * - [`contents()`](http://api.jquery.com/contents/)
11790
11794
  * - [`css()`](http://api.jquery.com/css/)
11791
11795
  * - [`data()`](http://api.jquery.com/data/)
11796
+ * - [`empty()`](http://api.jquery.com/empty/)
11792
11797
  * - [`eq()`](http://api.jquery.com/eq/)
11793
11798
  * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
11794
11799
  * - [`hasClass()`](http://api.jquery.com/hasClass/)
@@ -12101,6 +12106,15 @@ function jqLiteInheritedData(element, name, value) {
12101
12106
  }
12102
12107
  }
12103
12108
 
12109
+ function jqLiteEmpty(element) {
12110
+ for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {
12111
+ jqLiteDealoc(childNodes[i]);
12112
+ }
12113
+ while (element.firstChild) {
12114
+ element.removeChild(element.firstChild);
12115
+ }
12116
+ }
12117
+
12104
12118
  //////////////////////////////////////////
12105
12119
  // Functions which are declared directly.
12106
12120
  //////////////////////////////////////////
@@ -12295,7 +12309,9 @@ forEach({
12295
12309
  jqLiteDealoc(childNodes[i]);
12296
12310
  }
12297
12311
  element.innerHTML = value;
12298
- }
12312
+ },
12313
+
12314
+ empty: jqLiteEmpty
12299
12315
  }, function(fn, name){
12300
12316
  /**
12301
12317
  * Properties: writes return selection, reads return first value
@@ -12305,11 +12321,13 @@ forEach({
12305
12321
 
12306
12322
  // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
12307
12323
  // in a way that survives minification.
12308
- if (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined) {
12324
+ // jqLiteEmpty takes no arguments but is a setter.
12325
+ if (fn !== jqLiteEmpty &&
12326
+ (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
12309
12327
  if (isObject(arg1)) {
12310
12328
 
12311
12329
  // we are a write, but the object properties are the key/values
12312
- for(i=0; i < this.length; i++) {
12330
+ for (i = 0; i < this.length; i++) {
12313
12331
  if (fn === jqLiteData) {
12314
12332
  // data() takes the whole object in jQuery
12315
12333
  fn(this[i], arg1);
@@ -12334,7 +12352,7 @@ forEach({
12334
12352
  }
12335
12353
  } else {
12336
12354
  // we are a write, so apply to all children
12337
- for(i=0; i < this.length; i++) {
12355
+ for (i = 0; i < this.length; i++) {
12338
12356
  fn(this[i], arg1, arg2);
12339
12357
  }
12340
12358
  // return self for chaining
@@ -12705,6 +12723,28 @@ HashMap.prototype = {
12705
12723
  * $rootScope.$digest();
12706
12724
  * });
12707
12725
  * </pre>
12726
+ *
12727
+ * Sometimes you want to get access to the injector of a currently running Angular app
12728
+ * from outside Angular. Perhaps, you want to inject and compile some markup after the
12729
+ * application has been bootstrapped. You can do this using extra `injector()` added
12730
+ * to JQuery/jqLite elements. See {@link angular.element}.
12731
+ *
12732
+ * *This is fairly rare but could be the case if a third party library is injecting the
12733
+ * markup.*
12734
+ *
12735
+ * In the following example a new block of HTML containing a `ng-controller`
12736
+ * directive is added to the end of the document body by JQuery. We then compile and link
12737
+ * it into the current AngularJS scope.
12738
+ *
12739
+ * <pre>
12740
+ * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
12741
+ * $(document.body).append($div);
12742
+ *
12743
+ * angular.element(document).injector().invoke(function($compile) {
12744
+ * var scope = angular.element($div).scope();
12745
+ * $compile($div)(scope);
12746
+ * });
12747
+ * </pre>
12708
12748
  */
12709
12749
 
12710
12750
 
@@ -13425,24 +13465,9 @@ function createInjector(modulesToLoad) {
13425
13465
  fn = fn[length];
13426
13466
  }
13427
13467
 
13428
-
13429
- // Performance optimization: http://jsperf.com/apply-vs-call-vs-invoke
13430
- switch (self ? -1 : args.length) {
13431
- case 0: return fn();
13432
- case 1: return fn(args[0]);
13433
- case 2: return fn(args[0], args[1]);
13434
- case 3: return fn(args[0], args[1], args[2]);
13435
- case 4: return fn(args[0], args[1], args[2], args[3]);
13436
- case 5: return fn(args[0], args[1], args[2], args[3], args[4]);
13437
- case 6: return fn(args[0], args[1], args[2], args[3], args[4], args[5]);
13438
- case 7: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
13439
- case 8: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
13440
- case 9: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7],
13441
- args[8]);
13442
- case 10: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7],
13443
- args[8], args[9]);
13444
- default: return fn.apply(self, args);
13445
- }
13468
+ // http://jsperf.com/angularjs-invoke-apply-vs-switch
13469
+ // #5388
13470
+ return fn.apply(self, args);
13446
13471
  }
13447
13472
 
13448
13473
  function instantiate(Type, locals) {
@@ -15628,7 +15653,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15628
15653
  });
15629
15654
  } else {
15630
15655
  $template = jqLite(jqLiteClone(compileNode)).contents();
15631
- $compileNode.html(''); // clear contents
15656
+ $compileNode.empty(); // clear contents
15632
15657
  childTranscludeFn = compile($template, transcludeFn);
15633
15658
  }
15634
15659
  }
@@ -15809,7 +15834,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15809
15834
  optional = (match[2] == '?'),
15810
15835
  mode = match[1], // @, =, or &
15811
15836
  lastValue,
15812
- parentGet, parentSet;
15837
+ parentGet, parentSet, compare;
15813
15838
 
15814
15839
  isolateScope.$$isolateBindings[scopeName] = mode + attrName;
15815
15840
 
@@ -15832,6 +15857,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15832
15857
  return;
15833
15858
  }
15834
15859
  parentGet = $parse(attrs[attrName]);
15860
+ if (parentGet.literal) {
15861
+ compare = equals;
15862
+ } else {
15863
+ compare = function(a,b) { return a === b; };
15864
+ }
15835
15865
  parentSet = parentGet.assign || function() {
15836
15866
  // reset the change, or we will throw this exception on every $digest
15837
15867
  lastValue = isolateScope[scopeName] = parentGet(scope);
@@ -15842,10 +15872,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15842
15872
  lastValue = isolateScope[scopeName] = parentGet(scope);
15843
15873
  isolateScope.$watch(function parentValueWatch() {
15844
15874
  var parentValue = parentGet(scope);
15845
-
15846
- if (parentValue !== isolateScope[scopeName]) {
15875
+ if (!compare(parentValue, isolateScope[scopeName])) {
15847
15876
  // we are out of sync and need to copy
15848
- if (parentValue !== lastValue) {
15877
+ if (!compare(parentValue, lastValue)) {
15849
15878
  // parent changed and it has precedence
15850
15879
  isolateScope[scopeName] = parentValue;
15851
15880
  } else {
@@ -15854,7 +15883,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15854
15883
  }
15855
15884
  }
15856
15885
  return lastValue = parentValue;
15857
- });
15886
+ }, null, parentGet.literal);
15858
15887
  break;
15859
15888
 
15860
15889
  case '&':
@@ -16056,7 +16085,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
16056
16085
  ? origAsyncDirective.templateUrl($compileNode, tAttrs)
16057
16086
  : origAsyncDirective.templateUrl;
16058
16087
 
16059
- $compileNode.html('');
16088
+ $compileNode.empty();
16060
16089
 
16061
16090
  $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}).
16062
16091
  success(function(content) {
@@ -20371,7 +20400,7 @@ function $ParseProvider() {
20371
20400
  *
20372
20401
  * # Differences between Kris Kowal's Q and $q
20373
20402
  *
20374
- * There are three main differences:
20403
+ * There are two main differences:
20375
20404
  *
20376
20405
  * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
20377
20406
  * mechanism in angular, which means faster propagation of resolution or rejection into your
@@ -20905,11 +20934,11 @@ function $RootScopeProvider(){
20905
20934
  * @description
20906
20935
  * Creates a new child {@link ng.$rootScope.Scope scope}.
20907
20936
  *
20908
- * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and
20909
- * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the
20910
- * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
20937
+ * The parent scope will propagate the {@link ng.$rootScope.Scope#methods_$digest $digest()} and
20938
+ * {@link ng.$rootScope.Scope#methods_$digest $digest()} events. The scope can be removed from the
20939
+ * scope hierarchy using {@link ng.$rootScope.Scope#methods_$destroy $destroy()}.
20911
20940
  *
20912
- * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
20941
+ * {@link ng.$rootScope.Scope#methods_$destroy $destroy()} must be called on a scope when it is
20913
20942
  * desired for the scope and its child scopes to be permanently detached from the parent and
20914
20943
  * thus stop participating in model change detection and listener notification by invoking.
20915
20944
  *
@@ -20962,11 +20991,11 @@ function $RootScopeProvider(){
20962
20991
  * @description
20963
20992
  * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
20964
20993
  *
20965
- * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
20994
+ * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#methods_$digest
20966
20995
  * $digest()} and should return the value that will be watched. (Since
20967
- * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the
20996
+ * {@link ng.$rootScope.Scope#methods_$digest $digest()} reruns when it detects changes the
20968
20997
  * `watchExpression` can execute multiple times per
20969
- * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)
20998
+ * {@link ng.$rootScope.Scope#methods_$digest $digest()} and should be idempotent.)
20970
20999
  * - The `listener` is called only when the value from the current `watchExpression` and the
20971
21000
  * previous call to `watchExpression` are not equal (with the exception of the initial run,
20972
21001
  * see below). The inequality is determined according to
@@ -20978,13 +21007,13 @@ function $RootScopeProvider(){
20978
21007
  * iteration limit is 10 to prevent an infinite loop deadlock.
20979
21008
  *
20980
21009
  *
20981
- * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
21010
+ * If you want to be notified whenever {@link ng.$rootScope.Scope#methods_$digest $digest} is called,
20982
21011
  * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`
20983
- * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a
21012
+ * can execute multiple times per {@link ng.$rootScope.Scope#methods_$digest $digest} cycle when a
20984
21013
  * change is detected, be prepared for multiple calls to your listener.)
20985
21014
  *
20986
21015
  * After a watcher is registered with the scope, the `listener` fn is called asynchronously
20987
- * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
21016
+ * (via {@link ng.$rootScope.Scope#methods_$evalAsync $evalAsync}) to initialize the
20988
21017
  * watcher. In rare cases, this is undesirable because the listener is called when the result
20989
21018
  * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
20990
21019
  * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
@@ -21048,7 +21077,7 @@ function $RootScopeProvider(){
21048
21077
  *
21049
21078
  *
21050
21079
  * @param {(function()|string)} watchExpression Expression that is evaluated on each
21051
- * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
21080
+ * {@link ng.$rootScope.Scope#methods_$digest $digest} cycle. A change in the return value triggers
21052
21081
  * a call to the `listener`.
21053
21082
  *
21054
21083
  * - `string`: Evaluated as {@link guide/expression expression}
@@ -21146,7 +21175,7 @@ function $RootScopeProvider(){
21146
21175
  *
21147
21176
  * @param {string|Function(scope)} obj Evaluated as {@link guide/expression expression}. The
21148
21177
  * expression value should evaluate to an object or an array which is observed on each
21149
- * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
21178
+ * {@link ng.$rootScope.Scope#methods_$digest $digest} cycle. Any shallow change within the
21150
21179
  * collection will trigger a call to the `listener`.
21151
21180
  *
21152
21181
  * @param {function(newCollection, oldCollection, scope)} listener a callback function that is
@@ -21251,9 +21280,9 @@ function $RootScopeProvider(){
21251
21280
  * @function
21252
21281
  *
21253
21282
  * @description
21254
- * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
21255
- * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
21256
- * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
21283
+ * Processes all of the {@link ng.$rootScope.Scope#methods_$watch watchers} of the current scope and
21284
+ * its children. Because a {@link ng.$rootScope.Scope#methods_$watch watcher}'s listener can change
21285
+ * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#methods_$watch watchers}
21257
21286
  * until no more listeners are firing. This means that it is possible to get into an infinite
21258
21287
  * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
21259
21288
  * iterations exceeds 10.
@@ -21261,12 +21290,12 @@ function $RootScopeProvider(){
21261
21290
  * Usually, you don't call `$digest()` directly in
21262
21291
  * {@link ng.directive:ngController controllers} or in
21263
21292
  * {@link ng.$compileProvider#methods_directive directives}.
21264
- * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
21293
+ * Instead, you should call {@link ng.$rootScope.Scope#methods_$apply $apply()} (typically from within
21265
21294
  * a {@link ng.$compileProvider#methods_directive directives}), which will force a `$digest()`.
21266
21295
  *
21267
21296
  * If you want to be notified whenever `$digest()` is called,
21268
21297
  * you can register a `watchExpression` function with
21269
- * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
21298
+ * {@link ng.$rootScope.Scope#methods_$watch $watch()} with no `listener`.
21270
21299
  *
21271
21300
  * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
21272
21301
  *
@@ -21421,7 +21450,7 @@ function $RootScopeProvider(){
21421
21450
  *
21422
21451
  * @description
21423
21452
  * Removes the current scope (and all of its children) from the parent scope. Removal implies
21424
- * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
21453
+ * that calls to {@link ng.$rootScope.Scope#methods_$digest $digest()} will no longer
21425
21454
  * propagate to the current scope and its children. Removal also implies that the current
21426
21455
  * scope is eligible for garbage collection.
21427
21456
  *
@@ -21503,7 +21532,7 @@ function $RootScopeProvider(){
21503
21532
  *
21504
21533
  * - it will execute after the function that scheduled the evaluation (preferably before DOM
21505
21534
  * rendering).
21506
- * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
21535
+ * - at least one {@link ng.$rootScope.Scope#methods_$digest $digest cycle} will be performed after
21507
21536
  * `expression` execution.
21508
21537
  *
21509
21538
  * Any exceptions from the execution of the expression are forwarded to the
@@ -21548,7 +21577,7 @@ function $RootScopeProvider(){
21548
21577
  * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
21549
21578
  * Because we are calling into the angular framework we need to perform proper scope life
21550
21579
  * cycle of {@link ng.$exceptionHandler exception handling},
21551
- * {@link ng.$rootScope.Scope#$digest executing watches}.
21580
+ * {@link ng.$rootScope.Scope#methods_$digest executing watches}.
21552
21581
  *
21553
21582
  * ## Life cycle
21554
21583
  *
@@ -21569,11 +21598,11 @@ function $RootScopeProvider(){
21569
21598
  * Scope's `$apply()` method transitions through the following stages:
21570
21599
  *
21571
21600
  * 1. The {@link guide/expression expression} is executed using the
21572
- * {@link ng.$rootScope.Scope#$eval $eval()} method.
21601
+ * {@link ng.$rootScope.Scope#methods_$eval $eval()} method.
21573
21602
  * 2. Any exceptions from the execution of the expression are forwarded to the
21574
21603
  * {@link ng.$exceptionHandler $exceptionHandler} service.
21575
- * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
21576
- * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
21604
+ * 3. The {@link ng.$rootScope.Scope#methods_$watch watch} listeners are fired immediately after the
21605
+ * expression was executed using the {@link ng.$rootScope.Scope#methods_$digest $digest()} method.
21577
21606
  *
21578
21607
  *
21579
21608
  * @param {(string|function())=} exp An angular expression to be executed.
@@ -21607,7 +21636,7 @@ function $RootScopeProvider(){
21607
21636
  * @function
21608
21637
  *
21609
21638
  * @description
21610
- * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
21639
+ * Listens on events of a given type. See {@link ng.$rootScope.Scope#methods_$emit $emit} for
21611
21640
  * discussion of event life cycle.
21612
21641
  *
21613
21642
  * The event listener function format is: `function(event, args...)`. The `event` object
@@ -21648,20 +21677,20 @@ function $RootScopeProvider(){
21648
21677
  *
21649
21678
  * @description
21650
21679
  * Dispatches an event `name` upwards through the scope hierarchy notifying the
21651
- * registered {@link ng.$rootScope.Scope#$on} listeners.
21680
+ * registered {@link ng.$rootScope.Scope#methods_$on} listeners.
21652
21681
  *
21653
21682
  * The event life cycle starts at the scope on which `$emit` was called. All
21654
- * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
21683
+ * {@link ng.$rootScope.Scope#methods_$on listeners} listening for `name` event on this scope get
21655
21684
  * notified. Afterwards, the event traverses upwards toward the root scope and calls all
21656
21685
  * registered listeners along the way. The event will stop propagating if one of the listeners
21657
21686
  * cancels it.
21658
21687
  *
21659
- * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
21688
+ * Any exception emitted from the {@link ng.$rootScope.Scope#methods_$on listeners} will be passed
21660
21689
  * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
21661
21690
  *
21662
21691
  * @param {string} name Event name to emit.
21663
21692
  * @param {...*} args Optional set of arguments which will be passed onto the event listeners.
21664
- * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
21693
+ * @return {Object} Event object (see {@link ng.$rootScope.Scope#methods_$on}).
21665
21694
  */
21666
21695
  $emit: function(name, args) {
21667
21696
  var empty = [],
@@ -21717,19 +21746,19 @@ function $RootScopeProvider(){
21717
21746
  *
21718
21747
  * @description
21719
21748
  * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
21720
- * registered {@link ng.$rootScope.Scope#$on} listeners.
21749
+ * registered {@link ng.$rootScope.Scope#methods_$on} listeners.
21721
21750
  *
21722
21751
  * The event life cycle starts at the scope on which `$broadcast` was called. All
21723
- * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
21752
+ * {@link ng.$rootScope.Scope#methods_$on listeners} listening for `name` event on this scope get
21724
21753
  * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
21725
21754
  * scope and calls all registered listeners along the way. The event cannot be canceled.
21726
21755
  *
21727
- * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
21756
+ * Any exception emitted from the {@link ng.$rootScope.Scope#methods_$on listeners} will be passed
21728
21757
  * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
21729
21758
  *
21730
21759
  * @param {string} name Event name to broadcast.
21731
21760
  * @param {...*} args Optional set of arguments which will be passed onto the event listeners.
21732
- * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
21761
+ * @return {Object} Event object, see {@link ng.$rootScope.Scope#methods_$on}
21733
21762
  */
21734
21763
  $broadcast: function(name, args) {
21735
21764
  var target = this,
@@ -24466,14 +24495,16 @@ var htmlAnchorDirective = valueFn({
24466
24495
  element.append(document.createComment('IE fix'));
24467
24496
  }
24468
24497
 
24469
- return function(scope, element) {
24470
- element.on('click', function(event){
24471
- // if we have no href url, then don't navigate anywhere.
24472
- if (!element.attr('href')) {
24473
- event.preventDefault();
24474
- }
24475
- });
24476
- };
24498
+ if (!attr.href && !attr.name) {
24499
+ return function(scope, element) {
24500
+ element.on('click', function(event){
24501
+ // if we have no href url, then don't navigate anywhere.
24502
+ if (!element.attr('href')) {
24503
+ event.preventDefault();
24504
+ }
24505
+ });
24506
+ };
24507
+ }
24477
24508
  }
24478
24509
  });
24479
24510
 
@@ -26654,7 +26685,6 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
26654
26685
  id="{{name}}"
26655
26686
  name="favorite">
26656
26687
  </label>
26657
- </span>
26658
26688
  <div>You chose {{my.favorite}}</div>
26659
26689
  </form>
26660
26690
  </doc:source>
@@ -28045,13 +28075,14 @@ var ngIfDirective = ['$animate', function($animate) {
28045
28075
  * @description
28046
28076
  * Emitted every time the ngInclude content is reloaded.
28047
28077
  */
28048
- var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animate', '$sce',
28049
- function($http, $templateCache, $anchorScroll, $compile, $animate, $sce) {
28078
+ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce',
28079
+ function($http, $templateCache, $anchorScroll, $animate, $sce) {
28050
28080
  return {
28051
28081
  restrict: 'ECA',
28052
28082
  priority: 400,
28053
28083
  terminal: true,
28054
28084
  transclude: 'element',
28085
+ controller: angular.noop,
28055
28086
  compile: function(element, attr) {
28056
28087
  var srcExp = attr.ngInclude || attr.src,
28057
28088
  onloadExp = attr.onload || '',
@@ -28085,6 +28116,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
28085
28116
  $http.get(src, {cache: $templateCache}).success(function(response) {
28086
28117
  if (thisChangeId !== changeCounter) return;
28087
28118
  var newScope = scope.$new();
28119
+ ctrl.template = response;
28088
28120
 
28089
28121
  // Note: This will also link all children of ng-include that were contained in the original
28090
28122
  // html. If that content contains controllers, ... they could pollute/change the scope.
@@ -28092,15 +28124,14 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
28092
28124
  // Note: We can't remove them in the cloneAttchFn of $transclude as that
28093
28125
  // function is called before linking the content, which would apply child
28094
28126
  // directives to non existing elements.
28095
- var clone = $transclude(newScope, noop);
28096
- cleanupLastIncludeContent();
28127
+ var clone = $transclude(newScope, function(clone) {
28128
+ cleanupLastIncludeContent();
28129
+ $animate.enter(clone, null, $element, afterAnimation);
28130
+ });
28097
28131
 
28098
28132
  currentScope = newScope;
28099
28133
  currentElement = clone;
28100
28134
 
28101
- currentElement.html(response);
28102
- $animate.enter(currentElement, null, $element, afterAnimation);
28103
- $compile(currentElement.contents())(currentScope);
28104
28135
  currentScope.$emit('$includeContentLoaded');
28105
28136
  scope.$eval(onloadExp);
28106
28137
  }).error(function() {
@@ -28109,6 +28140,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
28109
28140
  scope.$emit('$includeContentRequested');
28110
28141
  } else {
28111
28142
  cleanupLastIncludeContent();
28143
+ ctrl.template = null;
28112
28144
  }
28113
28145
  });
28114
28146
  };
@@ -28116,6 +28148,24 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
28116
28148
  };
28117
28149
  }];
28118
28150
 
28151
+ // This directive is called during the $transclude call of the first `ngInclude` directive.
28152
+ // It will replace and compile the content of the element with the loaded template.
28153
+ // We need this directive so that the element content is already filled when
28154
+ // the link function of another directive on the same element as ngInclude
28155
+ // is called.
28156
+ var ngIncludeFillContentDirective = ['$compile',
28157
+ function($compile) {
28158
+ return {
28159
+ restrict: 'ECA',
28160
+ priority: -400,
28161
+ require: 'ngInclude',
28162
+ link: function(scope, $element, $attr, ctrl) {
28163
+ $element.html(ctrl.template);
28164
+ $compile($element.contents())(scope);
28165
+ }
28166
+ };
28167
+ }];
28168
+
28119
28169
  /**
28120
28170
  * @ngdoc directive
28121
28171
  * @name ng.directive:ngInit
@@ -29162,19 +29212,26 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
29162
29212
  * @restrict EA
29163
29213
  *
29164
29214
  * @description
29165
- * The ngSwitch directive is used to conditionally swap DOM structure on your template based on a scope expression.
29166
- * Elements within ngSwitch but without ngSwitchWhen or ngSwitchDefault directives will be preserved at the location
29215
+ * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
29216
+ * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
29167
29217
  * as specified in the template.
29168
29218
  *
29169
29219
  * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
29170
- * from the template cache), ngSwitch simply choses one of the nested elements and makes it visible based on which element
29220
+ * from the template cache), `ngSwitch` simply choses one of the nested elements and makes it visible based on which element
29171
29221
  * matches the value obtained from the evaluated expression. In other words, you define a container element
29172
- * (where you place the directive), place an expression on the **on="..." attribute**
29173
- * (or the **ng-switch="..." attribute**), define any inner elements inside of the directive and place
29222
+ * (where you place the directive), place an expression on the **`on="..."` attribute**
29223
+ * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
29174
29224
  * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
29175
29225
  * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
29176
29226
  * attribute is displayed.
29177
29227
  *
29228
+ * <div class="alert alert-info">
29229
+ * Be aware that the attribute values to match against cannot be expressions. They are interpreted
29230
+ * as literal string values to match against.
29231
+ * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
29232
+ * value of the expression `$scope.someVal`.
29233
+ * </div>
29234
+
29178
29235
  * @animations
29179
29236
  * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
29180
29237
  * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
@@ -29186,6 +29243,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
29186
29243
  * <ANY ng-switch-default>...</ANY>
29187
29244
  * </ANY>
29188
29245
  *
29246
+ *
29189
29247
  * @scope
29190
29248
  * @priority 800
29191
29249
  * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.
@@ -29403,7 +29461,7 @@ var ngTranscludeDirective = ngDirective({
29403
29461
 
29404
29462
  link: function($scope, $element, $attrs, controller) {
29405
29463
  controller.$transclude(function(clone) {
29406
- $element.html('');
29464
+ $element.empty();
29407
29465
  $element.append(clone);
29408
29466
  });
29409
29467
  }
@@ -29787,13 +29845,13 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
29787
29845
  // becomes the compilation root
29788
29846
  nullOption.removeClass('ng-scope');
29789
29847
 
29790
- // we need to remove it before calling selectElement.html('') because otherwise IE will
29848
+ // we need to remove it before calling selectElement.empty() because otherwise IE will
29791
29849
  // remove the label from the element. wtf?
29792
29850
  nullOption.remove();
29793
29851
  }
29794
29852
 
29795
29853
  // clear contents, we'll add what's needed based on the model
29796
- selectElement.html('');
29854
+ selectElement.empty();
29797
29855
 
29798
29856
  selectElement.on('change', function() {
29799
29857
  scope.$apply(function() {