angularjs-rails 1.2.4 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7464ee812eb37b7b320da7b9f1bbcfd9a39c31d0
4
- data.tar.gz: 1ac57e83a6f1cbc43110e0c868b00246508c6c04
3
+ metadata.gz: 0d8933c1324250cfba866c3dd12c3c9054aac5c7
4
+ data.tar.gz: 677f8bbe17a31cbdff41ee78325f5e319dc826de
5
5
  SHA512:
6
- metadata.gz: 9eba877ece40de60cae7aba754d76cc8764e7d2465c2f1445dab8ddbf3ac61bcf01ff8e4c612346fe5188b383ef08472cf642648de665f39a8db0ba55d5af2e7
7
- data.tar.gz: 2c41860d1aae295a2a6fabcd301930271d1b3462102cbc15c5acb652e382c374300d4a5054c34c2d9cd2e9e075169755b8b4ad5b32c3eba669080b4d9f550f14
6
+ metadata.gz: 1ddb02111fef232c6770f9c475cb2316b6f7681701d13eb99613c0886e384173d9773f215e0f2a9b4959e129719a4c608eedaa071fd79719d34c40ef342aed01
7
+ data.tar.gz: 1e767d36276b0b61e9b17b7fc5b359806a9acf8a2775e8c5dbce67b5e9694a866da24aba72b09724460ee9ced3e2ad37f75da384234e457d3d3e4138f4c7aebe
@@ -1,6 +1,6 @@
1
1
  module AngularJS
2
2
  module Rails
3
- VERSION = "1.2.4"
3
+ VERSION = "1.2.5"
4
4
  UNSTABLE_VERSION = "1.1.5"
5
5
  end
6
6
  end
@@ -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() {