angularjs-rails 1.2.12.1 → 1.2.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>');