angularjs-rails 1.2.12.1 → 1.2.13

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.12
2
+ * @license AngularJS v1.2.13
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.12
2
+ * @license AngularJS v1.2.13
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.12/' +
72
+ message = message + '\nhttp://errors.angularjs.org/1.2.13/' +
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.12
2
+ * @license AngularJS v1.2.13
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -789,7 +789,8 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
789
789
  }
790
790
  };
791
791
 
792
- angular.forEach(['enter','leave','move','addClass','removeClass'], function(method) {
792
+ angular.forEach(
793
+ ['enter','leave','move','addClass','removeClass','setClass'], function(method) {
793
794
  animate[method] = function() {
794
795
  animate.queue.push({
795
796
  event : method,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.12
2
+ * @license AngularJS v1.2.13
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.12
2
+ * @license AngularJS v1.2.13
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.12
2
+ * @license AngularJS v1.2.13
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.12
9793
+ * @license AngularJS v1.2.13
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.12/' +
9863
+ message = message + '\nhttp://errors.angularjs.org/1.2.13/' +
9864
9864
  (module ? module + '/' : '') + code;
9865
9865
  for (i = 2; i < arguments.length; i++) {
9866
9866
  message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
@@ -9952,6 +9952,7 @@ function minErr(module) {
9952
9952
  -assertNotHasOwnProperty,
9953
9953
  -getter,
9954
9954
  -getBlockElements,
9955
+ -hasOwnProperty,
9955
9956
 
9956
9957
  */
9957
9958
 
@@ -9967,7 +9968,7 @@ function minErr(module) {
9967
9968
  * @returns {string} Lowercased string.
9968
9969
  */
9969
9970
  var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};
9970
-
9971
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
9971
9972
 
9972
9973
  /**
9973
9974
  * @ngdoc function
@@ -11002,6 +11003,7 @@ function encodeUriQuery(val, pctEncodeSpaces) {
11002
11003
  <file name="index.html">
11003
11004
  <div ng-controller="ngAppDemoController">
11004
11005
  I can add: {{a}} + {{b}} = {{ a+b }}
11006
+ </div>
11005
11007
  </file>
11006
11008
  <file name="script.js">
11007
11009
  angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
@@ -11626,11 +11628,11 @@ function setupModuleLoader(window) {
11626
11628
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11627
11629
  */
11628
11630
  var version = {
11629
- full: '1.2.12', // all of these placeholder strings will be replaced by grunt's
11631
+ full: '1.2.13', // all of these placeholder strings will be replaced by grunt's
11630
11632
  major: 1, // package task
11631
11633
  minor: 2,
11632
- dot: 12,
11633
- codeName: 'cauliflower-eradication'
11634
+ dot: 13,
11635
+ codeName: 'romantic-transclusion'
11634
11636
  };
11635
11637
 
11636
11638
 
@@ -11792,7 +11794,7 @@ function publishExternalAPI(angular){
11792
11794
  * - [`after()`](http://api.jquery.com/after/)
11793
11795
  * - [`append()`](http://api.jquery.com/append/)
11794
11796
  * - [`attr()`](http://api.jquery.com/attr/)
11795
- * - [`bind()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
11797
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
11796
11798
  * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
11797
11799
  * - [`clone()`](http://api.jquery.com/clone/)
11798
11800
  * - [`contents()`](http://api.jquery.com/contents/)
@@ -11819,7 +11821,7 @@ function publishExternalAPI(angular){
11819
11821
  * - [`text()`](http://api.jquery.com/text/)
11820
11822
  * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
11821
11823
  * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
11822
- * - [`unbind()`](http://api.jquery.com/off/) - Does not support namespaces
11824
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
11823
11825
  * - [`val()`](http://api.jquery.com/val/)
11824
11826
  * - [`wrap()`](http://api.jquery.com/wrap/)
11825
11827
  *
@@ -11859,6 +11861,14 @@ var jqCache = JQLite.cache = {},
11859
11861
  ? function(element, type, fn) {element.removeEventListener(type, fn, false); }
11860
11862
  : function(element, type, fn) {element.detachEvent('on' + type, fn); });
11861
11863
 
11864
+ /*
11865
+ * !!! This is an undocumented "private" function !!!
11866
+ */
11867
+ var jqData = JQLite._data = function(node) {
11868
+ //jQuery always returns an object on cache miss
11869
+ return this.cache[node[this.expando]] || {};
11870
+ };
11871
+
11862
11872
  function jqNextId() { return ++jqId; }
11863
11873
 
11864
11874
 
@@ -13849,6 +13859,29 @@ var $AnimateProvider = ['$provide', function($provide) {
13849
13859
  done && $timeout(done, 0, false);
13850
13860
  },
13851
13861
 
13862
+ /**
13863
+ *
13864
+ * @ngdoc function
13865
+ * @name ng.$animate#setClass
13866
+ * @methodOf ng.$animate
13867
+ * @function
13868
+ * @description Adds and/or removes the given CSS classes to and from the element.
13869
+ * Once complete, the done() callback will be fired (if provided).
13870
+ * @param {jQuery/jqLite element} element the element which will it's CSS classes changed
13871
+ * removed from it
13872
+ * @param {string} add the CSS classes which will be added to the element
13873
+ * @param {string} remove the CSS class which will be removed from the element
13874
+ * @param {function=} done the callback function (if provided) that will be fired after the
13875
+ * CSS classes have been set on the element
13876
+ */
13877
+ setClass : function(element, add, remove, done) {
13878
+ forEach(element, function (element) {
13879
+ jqLiteAddClass(element, add);
13880
+ jqLiteRemoveClass(element, remove);
13881
+ });
13882
+ done && $timeout(done, 0, false);
13883
+ },
13884
+
13852
13885
  enabled : noop
13853
13886
  };
13854
13887
  }];
@@ -14991,7 +15024,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
14991
15024
  var hasDirectives = {},
14992
15025
  Suffix = 'Directive',
14993
15026
  COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,
14994
- CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/;
15027
+ CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/,
15028
+ TABLE_CONTENT_REGEXP = /^<\s*(tr|th|td|tbody)(\s+[^>]*)?>/i;
14995
15029
 
14996
15030
  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
14997
15031
  // The assumption is that future DOM event attribute names will begin with
@@ -15178,8 +15212,16 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15178
15212
  * @param {string} oldClasses The former CSS className value
15179
15213
  */
15180
15214
  $updateClass : function(newClasses, oldClasses) {
15181
- this.$removeClass(tokenDifference(oldClasses, newClasses));
15182
- this.$addClass(tokenDifference(newClasses, oldClasses));
15215
+ var toAdd = tokenDifference(newClasses, oldClasses);
15216
+ var toRemove = tokenDifference(oldClasses, newClasses);
15217
+
15218
+ if(toAdd.length === 0) {
15219
+ $animate.removeClass(this.$$element, toRemove);
15220
+ } else if(toRemove.length === 0) {
15221
+ $animate.addClass(this.$$element, toAdd);
15222
+ } else {
15223
+ $animate.setClass(this.$$element, toAdd, toRemove);
15224
+ }
15183
15225
  },
15184
15226
 
15185
15227
  /**
@@ -15631,7 +15673,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15631
15673
  templateDirective = previousCompileContext.templateDirective,
15632
15674
  nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
15633
15675
  hasTranscludeDirective = false,
15634
- hasElementTranscludeDirective = false,
15676
+ hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
15635
15677
  $compileNode = templateAttrs.$$element = jqLite(compileNode),
15636
15678
  directive,
15637
15679
  directiveName,
@@ -15732,9 +15774,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15732
15774
 
15733
15775
  if (directive.replace) {
15734
15776
  replaceDirective = directive;
15735
- $template = jqLite('<div>' +
15736
- trim(directiveValue) +
15737
- '</div>').contents();
15777
+ $template = directiveTemplateContents(directiveValue);
15738
15778
  compileNode = $template[0];
15739
15779
 
15740
15780
  if ($template.length != 1 || compileNode.nodeType !== 1) {
@@ -15805,6 +15845,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
15805
15845
 
15806
15846
  nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
15807
15847
  nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn;
15848
+ previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
15808
15849
 
15809
15850
  // might be normal or delayed nodeLinkFn depending on if templateUrl is present
15810
15851
  return nodeLinkFn;
@@ -16132,6 +16173,28 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
16132
16173
  }
16133
16174
 
16134
16175
 
16176
+ function directiveTemplateContents(template) {
16177
+ var type;
16178
+ template = trim(template);
16179
+ if ((type = TABLE_CONTENT_REGEXP.exec(template))) {
16180
+ type = type[1].toLowerCase();
16181
+ var table = jqLite('<table>' + template + '</table>'),
16182
+ tbody = table.children('tbody'),
16183
+ leaf = /(td|th)/.test(type) && table.find('tr');
16184
+ if (tbody.length && type !== 'tbody') {
16185
+ table = tbody;
16186
+ }
16187
+ if (leaf && leaf.length) {
16188
+ table = leaf;
16189
+ }
16190
+ return table.contents();
16191
+ }
16192
+ return jqLite('<div>' +
16193
+ template +
16194
+ '</div>').contents();
16195
+ }
16196
+
16197
+
16135
16198
  function compileTemplateUrl(directives, $compileNode, tAttrs,
16136
16199
  $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
16137
16200
  var linkQueue = [],
@@ -16156,7 +16219,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
16156
16219
  content = denormalizeTemplate(content);
16157
16220
 
16158
16221
  if (origAsyncDirective.replace) {
16159
- $template = jqLite('<div>' + trim(content) + '</div>').contents();
16222
+ $template = directiveTemplateContents(content);
16160
16223
  compileNode = $template[0];
16161
16224
 
16162
16225
  if ($template.length != 1 || compileNode.nodeType !== 1) {
@@ -16201,8 +16264,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
16201
16264
 
16202
16265
  if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
16203
16266
  var oldClasses = beforeTemplateLinkNode.className;
16204
- // it was cloned therefore we have to clone as well.
16205
- linkNode = jqLiteClone(compileNode);
16267
+
16268
+ if (!(previousCompileContext.hasElementTranscludeDirective &&
16269
+ origAsyncDirective.replace)) {
16270
+ // it was cloned therefore we have to clone as well.
16271
+ linkNode = jqLiteClone(compileNode);
16272
+ }
16273
+
16206
16274
  replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
16207
16275
 
16208
16276
  // Copy in CSS classes from original node
@@ -18094,7 +18162,7 @@ function $InterpolateProvider() {
18094
18162
  * @description
18095
18163
  * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
18096
18164
  *
18097
- * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change
18165
+ * Use {@link ng.$interpolateProvider#methods_endSymbol $interpolateProvider#endSymbol} to change
18098
18166
  * the symbol.
18099
18167
  *
18100
18168
  * @returns {string} start symbol.
@@ -18938,7 +19006,7 @@ function $LocationProvider(){
18938
19006
  * @eventType broadcast on root scope
18939
19007
  * @description
18940
19008
  * Broadcasted before a URL will change. This change can be prevented by calling
18941
- * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
19009
+ * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#methods_$on} for more
18942
19010
  * details about event object. Upon successful change
18943
19011
  * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.
18944
19012
  *
@@ -23858,6 +23926,15 @@ function filterFilter() {
23858
23926
  };
23859
23927
  } else {
23860
23928
  comparator = function(obj, text) {
23929
+ if (obj && text && typeof obj === 'object' && typeof text === 'object') {
23930
+ for (var objKey in obj) {
23931
+ if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&
23932
+ comparator(obj[objKey], text[objKey])) {
23933
+ return true;
23934
+ }
23935
+ }
23936
+ return false;
23937
+ }
23861
23938
  text = (''+text).toLowerCase();
23862
23939
  return (''+obj).toLowerCase().indexOf(text) > -1;
23863
23940
  };
@@ -23972,7 +24049,8 @@ function filterFilter() {
23972
24049
  return;
23973
24050
  }
23974
24051
  element(by.model('amount')).clear();
23975
- element(by.model('amount')).sendKeys('-1234'); expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
24052
+ element(by.model('amount')).sendKeys('-1234');
24053
+ expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
23976
24054
  expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)');
23977
24055
  });
23978
24056
  </doc:protractor>
@@ -25883,7 +25961,8 @@ var inputType = {
25883
25961
  'hidden': noop,
25884
25962
  'button': noop,
25885
25963
  'submit': noop,
25886
- 'reset': noop
25964
+ 'reset': noop,
25965
+ 'file': noop
25887
25966
  };
25888
25967
 
25889
25968
  // A helper function to call $setValidity and return the value / undefined,
@@ -25906,6 +25985,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
25906
25985
 
25907
25986
  element.on('compositionend', function() {
25908
25987
  composing = false;
25988
+ listener();
25909
25989
  });
25910
25990
  }
25911
25991
 
@@ -26481,6 +26561,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
26481
26561
  * You can override this for input directives whose concept of being empty is different to the
26482
26562
  * default. The `checkboxInputType` directive does this because in its case a value of `false`
26483
26563
  * implies empty.
26564
+ *
26565
+ * @param {*} value Reference to check.
26566
+ * @returns {boolean} True if `value` is empty.
26484
26567
  */
26485
26568
  this.$isEmpty = function(value) {
26486
26569
  return isUndefined(value) || value === '' || value === null || value !== value;
@@ -28042,8 +28125,8 @@ forEach(
28042
28125
  * Enables binding angular expressions to onsubmit events.
28043
28126
  *
28044
28127
  * Additionally it prevents the default action (which for form means sending the request to the
28045
- * server and reloading the current page) **but only if the form does not contain an `action`
28046
- * attribute**.
28128
+ * server and reloading the current page), but only if the form does not contain `action`,
28129
+ * `data-action`, or `x-action` attributes.
28047
28130
  *
28048
28131
  * @element form
28049
28132
  * @priority 0
@@ -29868,23 +29951,16 @@ var ngSwitchDefaultDirective = ngDirective({
29868
29951
  *
29869
29952
  */
29870
29953
  var ngTranscludeDirective = ngDirective({
29871
- controller: ['$element', '$transclude', function($element, $transclude) {
29954
+ link: function($scope, $element, $attrs, controller, $transclude) {
29872
29955
  if (!$transclude) {
29873
29956
  throw minErr('ngTransclude')('orphan',
29874
- 'Illegal use of ngTransclude directive in the template! ' +
29875
- 'No parent directive that requires a transclusion found. ' +
29876
- 'Element: {0}',
29877
- startingTag($element));
29957
+ 'Illegal use of ngTransclude directive in the template! ' +
29958
+ 'No parent directive that requires a transclusion found. ' +
29959
+ 'Element: {0}',
29960
+ startingTag($element));
29878
29961
  }
29879
-
29880
- // remember the transclusion fn but call it during linking so that we don't process transclusion before directives on
29881
- // the parent element even when the transclusion replaces the current element. (we can't use priority here because
29882
- // that applies only to compile fns and not controllers
29883
- this.$transclude = $transclude;
29884
- }],
29885
-
29886
- link: function($scope, $element, $attrs, controller) {
29887
- controller.$transclude(function(clone) {
29962
+
29963
+ $transclude(function(clone) {
29888
29964
  $element.empty();
29889
29965
  $element.append(clone);
29890
29966
  });
@@ -32800,5 +32876,5 @@ if (config.autotest) {
32800
32876
  })(window, document);
32801
32877
 
32802
32878
 
32803
- !angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide {\n display: none !important;\n}\n\nng\\:form {\n display: block;\n}\n</style>');
32879
+ !angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide {\n display: none !important;\n}\n\nng\\:form {\n display: block;\n}\n\n.ng-animate-block-transitions {\n transition:0s all!important;\n -webkit-transition:0s all!important;\n}\n</style>');
32804
32880
  !angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n/* CSS Document */\n\n/** Structure */\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n font-size: 14px;\n}\n\n#system-error {\n font-size: 1.5em;\n text-align: center;\n}\n\n#json, #xml {\n display: none;\n}\n\n#header {\n position: fixed;\n width: 100%;\n}\n\n#specs {\n padding-top: 50px;\n}\n\n#header .angular {\n font-family: Courier New, monospace;\n font-weight: bold;\n}\n\n#header h1 {\n font-weight: normal;\n float: left;\n font-size: 30px;\n line-height: 30px;\n margin: 0;\n padding: 10px 10px;\n height: 30px;\n}\n\n#application h2,\n#specs h2 {\n margin: 0;\n padding: 0.5em;\n font-size: 1.1em;\n}\n\n#status-legend {\n margin-top: 10px;\n margin-right: 10px;\n}\n\n#header,\n#application,\n.test-info,\n.test-actions li {\n overflow: hidden;\n}\n\n#application {\n margin: 10px;\n}\n\n#application iframe {\n width: 100%;\n height: 758px;\n}\n\n#application .popout {\n float: right;\n}\n\n#application iframe {\n border: none;\n}\n\n.tests li,\n.test-actions li,\n.test-it li,\n.test-it ol,\n.status-display {\n list-style-type: none;\n}\n\n.tests,\n.test-it ol,\n.status-display {\n margin: 0;\n padding: 0;\n}\n\n.test-info {\n margin-left: 1em;\n margin-top: 0.5em;\n border-radius: 8px 0 0 8px;\n -webkit-border-radius: 8px 0 0 8px;\n -moz-border-radius: 8px 0 0 8px;\n cursor: pointer;\n}\n\n.test-info:hover .test-name {\n text-decoration: underline;\n}\n\n.test-info .closed:before {\n content: \'\\25b8\\00A0\';\n}\n\n.test-info .open:before {\n content: \'\\25be\\00A0\';\n font-weight: bold;\n}\n\n.test-it ol {\n margin-left: 2.5em;\n}\n\n.status-display,\n.status-display li {\n float: right;\n}\n\n.status-display li {\n padding: 5px 10px;\n}\n\n.timer-result,\n.test-title {\n display: inline-block;\n margin: 0;\n padding: 4px;\n}\n\n.test-actions .test-title,\n.test-actions .test-result {\n display: table-cell;\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n.test-actions {\n display: table;\n}\n\n.test-actions li {\n display: table-row;\n}\n\n.timer-result {\n width: 4em;\n padding: 0 10px;\n text-align: right;\n font-family: monospace;\n}\n\n.test-it pre,\n.test-actions pre {\n clear: left;\n color: black;\n margin-left: 6em;\n}\n\n.test-describe {\n padding-bottom: 0.5em;\n}\n\n.test-describe .test-describe {\n margin: 5px 5px 10px 2em;\n}\n\n.test-actions .status-pending .test-title:before {\n content: \'\\00bb\\00A0\';\n}\n\n.scrollpane {\n max-height: 20em;\n overflow: auto;\n}\n\n/** Colors */\n\n#header {\n background-color: #F2C200;\n}\n\n#specs h2 {\n border-top: 2px solid #BABAD1;\n}\n\n#specs h2,\n#application h2 {\n background-color: #efefef;\n}\n\n#application {\n border: 1px solid #BABAD1;\n}\n\n.test-describe .test-describe {\n border-left: 1px solid #BABAD1;\n border-right: 1px solid #BABAD1;\n border-bottom: 1px solid #BABAD1;\n}\n\n.status-display {\n border: 1px solid #777;\n}\n\n.status-display .status-pending,\n.status-pending .test-info {\n background-color: #F9EEBC;\n}\n\n.status-display .status-success,\n.status-success .test-info {\n background-color: #B1D7A1;\n}\n\n.status-display .status-failure,\n.status-failure .test-info {\n background-color: #FF8286;\n}\n\n.status-display .status-error,\n.status-error .test-info {\n background-color: black;\n color: white;\n}\n\n.test-actions .status-success .test-title {\n color: #30B30A;\n}\n\n.test-actions .status-failure .test-title {\n color: #DF0000;\n}\n\n.test-actions .status-error .test-title {\n color: black;\n}\n\n.test-actions .timer-result {\n color: #888;\n}\n</style>');
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.12
2
+ * @license AngularJS v1.2.13
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.12
2
+ * @license AngularJS v1.2.13
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -68,7 +68,7 @@ function minErr(module) {
68
68
  return match;
69
69
  });
70
70
 
71
- message = message + '\nhttp://errors.angularjs.org/1.2.12/' +
71
+ message = message + '\nhttp://errors.angularjs.org/1.2.13/' +
72
72
  (module ? module + '/' : '') + code;
73
73
  for (i = 2; i < arguments.length; i++) {
74
74
  message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
@@ -160,6 +160,7 @@ function minErr(module) {
160
160
  -assertNotHasOwnProperty,
161
161
  -getter,
162
162
  -getBlockElements,
163
+ -hasOwnProperty,
163
164
 
164
165
  */
165
166
 
@@ -175,7 +176,7 @@ function minErr(module) {
175
176
  * @returns {string} Lowercased string.
176
177
  */
177
178
  var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};
178
-
179
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
179
180
 
180
181
  /**
181
182
  * @ngdoc function
@@ -1210,6 +1211,7 @@ function encodeUriQuery(val, pctEncodeSpaces) {
1210
1211
  <file name="index.html">
1211
1212
  <div ng-controller="ngAppDemoController">
1212
1213
  I can add: {{a}} + {{b}} = {{ a+b }}
1214
+ </div>
1213
1215
  </file>
1214
1216
  <file name="script.js">
1215
1217
  angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
@@ -1834,11 +1836,11 @@ function setupModuleLoader(window) {
1834
1836
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
1835
1837
  */
1836
1838
  var version = {
1837
- full: '1.2.12', // all of these placeholder strings will be replaced by grunt's
1839
+ full: '1.2.13', // all of these placeholder strings will be replaced by grunt's
1838
1840
  major: 1, // package task
1839
1841
  minor: 2,
1840
- dot: 12,
1841
- codeName: 'cauliflower-eradication'
1842
+ dot: 13,
1843
+ codeName: 'romantic-transclusion'
1842
1844
  };
1843
1845
 
1844
1846
 
@@ -2000,7 +2002,7 @@ function publishExternalAPI(angular){
2000
2002
  * - [`after()`](http://api.jquery.com/after/)
2001
2003
  * - [`append()`](http://api.jquery.com/append/)
2002
2004
  * - [`attr()`](http://api.jquery.com/attr/)
2003
- * - [`bind()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
2005
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
2004
2006
  * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
2005
2007
  * - [`clone()`](http://api.jquery.com/clone/)
2006
2008
  * - [`contents()`](http://api.jquery.com/contents/)
@@ -2027,7 +2029,7 @@ function publishExternalAPI(angular){
2027
2029
  * - [`text()`](http://api.jquery.com/text/)
2028
2030
  * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
2029
2031
  * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
2030
- * - [`unbind()`](http://api.jquery.com/off/) - Does not support namespaces
2032
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
2031
2033
  * - [`val()`](http://api.jquery.com/val/)
2032
2034
  * - [`wrap()`](http://api.jquery.com/wrap/)
2033
2035
  *
@@ -2067,6 +2069,14 @@ var jqCache = JQLite.cache = {},
2067
2069
  ? function(element, type, fn) {element.removeEventListener(type, fn, false); }
2068
2070
  : function(element, type, fn) {element.detachEvent('on' + type, fn); });
2069
2071
 
2072
+ /*
2073
+ * !!! This is an undocumented "private" function !!!
2074
+ */
2075
+ var jqData = JQLite._data = function(node) {
2076
+ //jQuery always returns an object on cache miss
2077
+ return this.cache[node[this.expando]] || {};
2078
+ };
2079
+
2070
2080
  function jqNextId() { return ++jqId; }
2071
2081
 
2072
2082
 
@@ -4057,6 +4067,29 @@ var $AnimateProvider = ['$provide', function($provide) {
4057
4067
  done && $timeout(done, 0, false);
4058
4068
  },
4059
4069
 
4070
+ /**
4071
+ *
4072
+ * @ngdoc function
4073
+ * @name ng.$animate#setClass
4074
+ * @methodOf ng.$animate
4075
+ * @function
4076
+ * @description Adds and/or removes the given CSS classes to and from the element.
4077
+ * Once complete, the done() callback will be fired (if provided).
4078
+ * @param {jQuery/jqLite element} element the element which will it's CSS classes changed
4079
+ * removed from it
4080
+ * @param {string} add the CSS classes which will be added to the element
4081
+ * @param {string} remove the CSS class which will be removed from the element
4082
+ * @param {function=} done the callback function (if provided) that will be fired after the
4083
+ * CSS classes have been set on the element
4084
+ */
4085
+ setClass : function(element, add, remove, done) {
4086
+ forEach(element, function (element) {
4087
+ jqLiteAddClass(element, add);
4088
+ jqLiteRemoveClass(element, remove);
4089
+ });
4090
+ done && $timeout(done, 0, false);
4091
+ },
4092
+
4060
4093
  enabled : noop
4061
4094
  };
4062
4095
  }];
@@ -5199,7 +5232,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
5199
5232
  var hasDirectives = {},
5200
5233
  Suffix = 'Directive',
5201
5234
  COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,
5202
- CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/;
5235
+ CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/,
5236
+ TABLE_CONTENT_REGEXP = /^<\s*(tr|th|td|tbody)(\s+[^>]*)?>/i;
5203
5237
 
5204
5238
  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
5205
5239
  // The assumption is that future DOM event attribute names will begin with
@@ -5386,8 +5420,16 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
5386
5420
  * @param {string} oldClasses The former CSS className value
5387
5421
  */
5388
5422
  $updateClass : function(newClasses, oldClasses) {
5389
- this.$removeClass(tokenDifference(oldClasses, newClasses));
5390
- this.$addClass(tokenDifference(newClasses, oldClasses));
5423
+ var toAdd = tokenDifference(newClasses, oldClasses);
5424
+ var toRemove = tokenDifference(oldClasses, newClasses);
5425
+
5426
+ if(toAdd.length === 0) {
5427
+ $animate.removeClass(this.$$element, toRemove);
5428
+ } else if(toRemove.length === 0) {
5429
+ $animate.addClass(this.$$element, toAdd);
5430
+ } else {
5431
+ $animate.setClass(this.$$element, toAdd, toRemove);
5432
+ }
5391
5433
  },
5392
5434
 
5393
5435
  /**
@@ -5839,7 +5881,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
5839
5881
  templateDirective = previousCompileContext.templateDirective,
5840
5882
  nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
5841
5883
  hasTranscludeDirective = false,
5842
- hasElementTranscludeDirective = false,
5884
+ hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
5843
5885
  $compileNode = templateAttrs.$$element = jqLite(compileNode),
5844
5886
  directive,
5845
5887
  directiveName,
@@ -5940,9 +5982,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
5940
5982
 
5941
5983
  if (directive.replace) {
5942
5984
  replaceDirective = directive;
5943
- $template = jqLite('<div>' +
5944
- trim(directiveValue) +
5945
- '</div>').contents();
5985
+ $template = directiveTemplateContents(directiveValue);
5946
5986
  compileNode = $template[0];
5947
5987
 
5948
5988
  if ($template.length != 1 || compileNode.nodeType !== 1) {
@@ -6013,6 +6053,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
6013
6053
 
6014
6054
  nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
6015
6055
  nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn;
6056
+ previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
6016
6057
 
6017
6058
  // might be normal or delayed nodeLinkFn depending on if templateUrl is present
6018
6059
  return nodeLinkFn;
@@ -6340,6 +6381,28 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
6340
6381
  }
6341
6382
 
6342
6383
 
6384
+ function directiveTemplateContents(template) {
6385
+ var type;
6386
+ template = trim(template);
6387
+ if ((type = TABLE_CONTENT_REGEXP.exec(template))) {
6388
+ type = type[1].toLowerCase();
6389
+ var table = jqLite('<table>' + template + '</table>'),
6390
+ tbody = table.children('tbody'),
6391
+ leaf = /(td|th)/.test(type) && table.find('tr');
6392
+ if (tbody.length && type !== 'tbody') {
6393
+ table = tbody;
6394
+ }
6395
+ if (leaf && leaf.length) {
6396
+ table = leaf;
6397
+ }
6398
+ return table.contents();
6399
+ }
6400
+ return jqLite('<div>' +
6401
+ template +
6402
+ '</div>').contents();
6403
+ }
6404
+
6405
+
6343
6406
  function compileTemplateUrl(directives, $compileNode, tAttrs,
6344
6407
  $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
6345
6408
  var linkQueue = [],
@@ -6364,7 +6427,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
6364
6427
  content = denormalizeTemplate(content);
6365
6428
 
6366
6429
  if (origAsyncDirective.replace) {
6367
- $template = jqLite('<div>' + trim(content) + '</div>').contents();
6430
+ $template = directiveTemplateContents(content);
6368
6431
  compileNode = $template[0];
6369
6432
 
6370
6433
  if ($template.length != 1 || compileNode.nodeType !== 1) {
@@ -6409,8 +6472,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
6409
6472
 
6410
6473
  if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
6411
6474
  var oldClasses = beforeTemplateLinkNode.className;
6412
- // it was cloned therefore we have to clone as well.
6413
- linkNode = jqLiteClone(compileNode);
6475
+
6476
+ if (!(previousCompileContext.hasElementTranscludeDirective &&
6477
+ origAsyncDirective.replace)) {
6478
+ // it was cloned therefore we have to clone as well.
6479
+ linkNode = jqLiteClone(compileNode);
6480
+ }
6481
+
6414
6482
  replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
6415
6483
 
6416
6484
  // Copy in CSS classes from original node
@@ -8302,7 +8370,7 @@ function $InterpolateProvider() {
8302
8370
  * @description
8303
8371
  * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
8304
8372
  *
8305
- * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change
8373
+ * Use {@link ng.$interpolateProvider#methods_endSymbol $interpolateProvider#endSymbol} to change
8306
8374
  * the symbol.
8307
8375
  *
8308
8376
  * @returns {string} start symbol.
@@ -9146,7 +9214,7 @@ function $LocationProvider(){
9146
9214
  * @eventType broadcast on root scope
9147
9215
  * @description
9148
9216
  * Broadcasted before a URL will change. This change can be prevented by calling
9149
- * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
9217
+ * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#methods_$on} for more
9150
9218
  * details about event object. Upon successful change
9151
9219
  * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.
9152
9220
  *
@@ -14066,6 +14134,15 @@ function filterFilter() {
14066
14134
  };
14067
14135
  } else {
14068
14136
  comparator = function(obj, text) {
14137
+ if (obj && text && typeof obj === 'object' && typeof text === 'object') {
14138
+ for (var objKey in obj) {
14139
+ if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&
14140
+ comparator(obj[objKey], text[objKey])) {
14141
+ return true;
14142
+ }
14143
+ }
14144
+ return false;
14145
+ }
14069
14146
  text = (''+text).toLowerCase();
14070
14147
  return (''+obj).toLowerCase().indexOf(text) > -1;
14071
14148
  };
@@ -14180,7 +14257,8 @@ function filterFilter() {
14180
14257
  return;
14181
14258
  }
14182
14259
  element(by.model('amount')).clear();
14183
- element(by.model('amount')).sendKeys('-1234'); expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
14260
+ element(by.model('amount')).sendKeys('-1234');
14261
+ expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
14184
14262
  expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)');
14185
14263
  });
14186
14264
  </doc:protractor>
@@ -16091,7 +16169,8 @@ var inputType = {
16091
16169
  'hidden': noop,
16092
16170
  'button': noop,
16093
16171
  'submit': noop,
16094
- 'reset': noop
16172
+ 'reset': noop,
16173
+ 'file': noop
16095
16174
  };
16096
16175
 
16097
16176
  // A helper function to call $setValidity and return the value / undefined,
@@ -16114,6 +16193,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
16114
16193
 
16115
16194
  element.on('compositionend', function() {
16116
16195
  composing = false;
16196
+ listener();
16117
16197
  });
16118
16198
  }
16119
16199
 
@@ -16689,6 +16769,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
16689
16769
  * You can override this for input directives whose concept of being empty is different to the
16690
16770
  * default. The `checkboxInputType` directive does this because in its case a value of `false`
16691
16771
  * implies empty.
16772
+ *
16773
+ * @param {*} value Reference to check.
16774
+ * @returns {boolean} True if `value` is empty.
16692
16775
  */
16693
16776
  this.$isEmpty = function(value) {
16694
16777
  return isUndefined(value) || value === '' || value === null || value !== value;
@@ -18250,8 +18333,8 @@ forEach(
18250
18333
  * Enables binding angular expressions to onsubmit events.
18251
18334
  *
18252
18335
  * Additionally it prevents the default action (which for form means sending the request to the
18253
- * server and reloading the current page) **but only if the form does not contain an `action`
18254
- * attribute**.
18336
+ * server and reloading the current page), but only if the form does not contain `action`,
18337
+ * `data-action`, or `x-action` attributes.
18255
18338
  *
18256
18339
  * @element form
18257
18340
  * @priority 0
@@ -20076,23 +20159,16 @@ var ngSwitchDefaultDirective = ngDirective({
20076
20159
  *
20077
20160
  */
20078
20161
  var ngTranscludeDirective = ngDirective({
20079
- controller: ['$element', '$transclude', function($element, $transclude) {
20162
+ link: function($scope, $element, $attrs, controller, $transclude) {
20080
20163
  if (!$transclude) {
20081
20164
  throw minErr('ngTransclude')('orphan',
20082
- 'Illegal use of ngTransclude directive in the template! ' +
20083
- 'No parent directive that requires a transclusion found. ' +
20084
- 'Element: {0}',
20085
- startingTag($element));
20165
+ 'Illegal use of ngTransclude directive in the template! ' +
20166
+ 'No parent directive that requires a transclusion found. ' +
20167
+ 'Element: {0}',
20168
+ startingTag($element));
20086
20169
  }
20087
-
20088
- // remember the transclusion fn but call it during linking so that we don't process transclusion before directives on
20089
- // the parent element even when the transclusion replaces the current element. (we can't use priority here because
20090
- // that applies only to compile fns and not controllers
20091
- this.$transclude = $transclude;
20092
- }],
20093
-
20094
- link: function($scope, $element, $attrs, controller) {
20095
- controller.$transclude(function(clone) {
20170
+
20171
+ $transclude(function(clone) {
20096
20172
  $element.empty();
20097
20173
  $element.append(clone);
20098
20174
  });
@@ -20795,4 +20871,4 @@ var styleDirective = valueFn({
20795
20871
 
20796
20872
  })(window, document);
20797
20873
 
20798
- !angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}</style>');
20874
+ !angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}</style>');