angularjs-rails 1.2.6 → 1.2.7

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: bc56ac22062a8c136ecb9f7b07f8c54d0f48a70e
4
- data.tar.gz: 4e331e06924e8274c7f21027dfcdd4cd237ea3ce
3
+ metadata.gz: 9d9ac90904b1e170ac32c2d76876dd40aa82cbf0
4
+ data.tar.gz: 44e31d21d4fb9ebf89e7b862f1bb577459ca1b6d
5
5
  SHA512:
6
- metadata.gz: d027dd3efdd99229f00f3d0634922f483528fe3f0ebb524b0bd52b75a0d2b4df629718b0def626204ae310038ee210070d8a96dcc96fc4541b7ac737e463fc8d
7
- data.tar.gz: 6fb1639521fcc3a058b61f693a19b8ed12f84f48847d85edf4ef7f3cc0499da861a4da8725e276cbb4c7ddead2d5e29c2bf754b38491f9936bdad4830212f0b7
6
+ metadata.gz: 64e6a0c25a45fd978306e1121ca67cfc63af74d3d8bbcf45c9f00b722380737363f52eff40caed62760ff0ae88c5b4d56e0f1924f77fb1310ab843d77e969e19
7
+ data.tar.gz: 194046bb67a6b5fb4c97ced2a850bda0cd5cd9ac948172a50963743e97c2f74d920921fec493a4c4d060d2adbd1a28e948820872430aebdb50e4d5ef3be901fa
@@ -1,6 +1,6 @@
1
1
  module AngularJS
2
2
  module Rails
3
- VERSION = "1.2.6"
3
+ VERSION = "1.2.7"
4
4
  UNSTABLE_VERSION = "1.1.5"
5
5
  end
6
6
  end
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.6
2
+ * @license AngularJS v1.2.7
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -616,9 +616,14 @@ angular.module('ngAnimate', ['ng'])
616
616
  }
617
617
 
618
618
  var animations = [];
619
+
619
620
  //only add animations if the currently running animation is not structural
620
621
  //or if there is no animation running at all
621
- if(!ngAnimateState.running || !(isClassBased && ngAnimateState.structural)) {
622
+ var allowAnimations = isClassBased ?
623
+ !ngAnimateState.disabled && (!ngAnimateState.running || !ngAnimateState.structural) :
624
+ true;
625
+
626
+ if(allowAnimations) {
622
627
  forEach(matches, function(animation) {
623
628
  //add the animation to the queue to if it is allowed to be cancelled
624
629
  if(!animation.allowCancel || animation.allowCancel(element, animationEvent, className)) {
@@ -1147,7 +1152,7 @@ angular.module('ngAnimate', ['ng'])
1147
1152
  var propertyStyle = timings.transitionPropertyStyle;
1148
1153
  if(propertyStyle.indexOf('all') == -1) {
1149
1154
  style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';';
1150
- style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + 's;';
1155
+ style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';';
1151
1156
  appliedStyles.push(CSS_PREFIX + 'transition-property');
1152
1157
  appliedStyles.push(CSS_PREFIX + 'transition-duration');
1153
1158
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.6
2
+ * @license AngularJS v1.2.7
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.6
2
+ * @license AngularJS v1.2.7
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.6/' +
72
+ message = message + '\nhttp://errors.angularjs.org/1.2.7/' +
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.6
2
+ * @license AngularJS v1.2.7
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1579,6 +1579,10 @@ function MockHttpExpectation(method, url, data, headers) {
1579
1579
  };
1580
1580
  }
1581
1581
 
1582
+ function createMockXhr() {
1583
+ return new MockXhr();
1584
+ }
1585
+
1582
1586
  function MockXhr() {
1583
1587
 
1584
1588
  // hack for testing $http, $httpBackend
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.6
2
+ * @license AngularJS v1.2.7
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -406,7 +406,7 @@ angular.module('ngResource', ['ng']).
406
406
  });
407
407
 
408
408
  // strip trailing slashes and set the url
409
- url = url.replace(/\/+$/, '');
409
+ url = url.replace(/\/+$/, '') || '/';
410
410
  // then replace collapse `/.` if found in the last URL path segment before the query
411
411
  // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
412
412
  url = url.replace(/\/\.(?=\w+($|\?))/, '.');
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.6
2
+ * @license AngularJS v1.2.7
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -842,7 +842,7 @@ function ngViewFactory( $route, $anchorScroll, $animate) {
842
842
  var locals = $route.current && $route.current.locals,
843
843
  template = locals && locals.$template;
844
844
 
845
- if (template) {
845
+ if (angular.isDefined(template)) {
846
846
  var newScope = scope.$new();
847
847
  var current = $route.current;
848
848
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.6
2
+ * @license AngularJS v1.2.7
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -211,7 +211,7 @@ var validAttrs = angular.extend({}, uriAttrs, makeMap(
211
211
  'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+
212
212
  'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+
213
213
  'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+
214
- 'scope,scrolling,shape,span,start,summary,target,title,type,'+
214
+ 'scope,scrolling,shape,size,span,start,summary,target,title,type,'+
215
215
  'valign,value,vspace,width'));
216
216
 
217
217
  function makeMap(str) {
@@ -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.6
9793
+ * @license AngularJS v1.2.7
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.6/' +
9863
+ message = message + '\nhttp://errors.angularjs.org/1.2.7/' +
9864
9864
  (module ? module + '/' : '') + code;
9865
9865
  for (i = 2; i < arguments.length; i++) {
9866
9866
  message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
@@ -10830,7 +10830,9 @@ function fromJson(json) {
10830
10830
 
10831
10831
 
10832
10832
  function toBoolean(value) {
10833
- if (value && value.length !== 0) {
10833
+ if (typeof value === 'function') {
10834
+ value = true;
10835
+ } else if (value && value.length !== 0) {
10834
10836
  var v = lowercase("" + value);
10835
10837
  value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
10836
10838
  } else {
@@ -11623,11 +11625,11 @@ function setupModuleLoader(window) {
11623
11625
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11624
11626
  */
11625
11627
  var version = {
11626
- full: '1.2.6', // all of these placeholder strings will be replaced by grunt's
11628
+ full: '1.2.7', // all of these placeholder strings will be replaced by grunt's
11627
11629
  major: 1, // package task
11628
11630
  minor: 2,
11629
- dot: 6,
11630
- codeName: 'taco-salsafication'
11631
+ dot: 7,
11632
+ codeName: 'emoji-clairvoyance'
11631
11633
  };
11632
11634
 
11633
11635
 
@@ -13455,6 +13457,11 @@ function createInjector(modulesToLoad) {
13455
13457
  path.unshift(serviceName);
13456
13458
  cache[serviceName] = INSTANTIATING;
13457
13459
  return cache[serviceName] = factory(serviceName);
13460
+ } catch (err) {
13461
+ if (cache[serviceName] === INSTANTIATING) {
13462
+ delete cache[serviceName];
13463
+ }
13464
+ throw err;
13458
13465
  } finally {
13459
13466
  path.shift();
13460
13467
  }
@@ -13989,8 +13996,9 @@ function Browser(window, document, $log, $sniffer) {
13989
13996
  * @param {boolean=} replace Should new url replace current history record ?
13990
13997
  */
13991
13998
  self.url = function(url, replace) {
13992
- // Android Browser BFCache causes location reference to become stale.
13999
+ // Android Browser BFCache causes location, history reference to become stale.
13993
14000
  if (location !== window.location) location = window.location;
14001
+ if (history !== window.history) history = window.history;
13994
14002
 
13995
14003
  // setter
13996
14004
  if (url) {
@@ -14042,7 +14050,7 @@ function Browser(window, document, $log, $sniffer) {
14042
14050
  * @description
14043
14051
  * Register callback function that will be called, when url changes.
14044
14052
  *
14045
- * It's only called when the url is changed by outside of angular:
14053
+ * It's only called when the url is changed from outside of angular:
14046
14054
  * - user types different url into address bar
14047
14055
  * - user clicks on history (forward/back) button
14048
14056
  * - user clicks on a link
@@ -14084,7 +14092,7 @@ function Browser(window, document, $log, $sniffer) {
14084
14092
  /**
14085
14093
  * @name ng.$browser#baseHref
14086
14094
  * @methodOf ng.$browser
14087
- *
14095
+ *
14088
14096
  * @description
14089
14097
  * Returns current <base href>
14090
14098
  * (always relative - without domain)
@@ -14093,7 +14101,7 @@ function Browser(window, document, $log, $sniffer) {
14093
14101
  */
14094
14102
  self.baseHref = function() {
14095
14103
  var href = baseElement.attr('href');
14096
- return href ? href.replace(/^https?\:\/\/[^\/]*/, '') : '';
14104
+ return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
14097
14105
  };
14098
14106
 
14099
14107
  //////////////////////////////////////////////////////////////
@@ -14115,13 +14123,13 @@ function Browser(window, document, $log, $sniffer) {
14115
14123
  * It is not meant to be used directly, use the $cookie service instead.
14116
14124
  *
14117
14125
  * The return values vary depending on the arguments that the method was called with as follows:
14118
- *
14126
+ *
14119
14127
  * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
14120
14128
  * it
14121
14129
  * - cookies(name, value) -> set name to value, if value is undefined delete the cookie
14122
14130
  * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
14123
14131
  * way)
14124
- *
14132
+ *
14125
14133
  * @returns {Object} Hash of all cookies (if called without any parameter)
14126
14134
  */
14127
14135
  self.cookies = function(name, value) {
@@ -14499,7 +14507,7 @@ function $TemplateCacheProvider() {
14499
14507
  * @function
14500
14508
  *
14501
14509
  * @description
14502
- * Compiles a piece of HTML string or DOM into a template and produces a template function, which
14510
+ * Compiles an HTML string or DOM into a template and produces a template function, which
14503
14511
  * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
14504
14512
  *
14505
14513
  * The compilation is a process of walking the DOM tree and matching DOM elements to
@@ -16841,7 +16849,7 @@ function $HttpProvider() {
16841
16849
  * will result in the success callback being called. Note that if the response is a redirect,
16842
16850
  * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
16843
16851
  * called for such responses.
16844
- *
16852
+ *
16845
16853
  * # Calling $http from outside AngularJS
16846
16854
  * The `$http` service will not actually send the request until the next `$digest()` is
16847
16855
  * executed. Normally this is not an issue, since almost all the time your call to `$http` will
@@ -17028,19 +17036,20 @@ function $HttpProvider() {
17028
17036
  * return responseOrNewPromise
17029
17037
  * }
17030
17038
  * return $q.reject(rejection);
17031
- * };
17032
- * }
17039
+ * }
17040
+ * };
17033
17041
  * });
17034
17042
  *
17035
17043
  * $httpProvider.interceptors.push('myHttpInterceptor');
17036
17044
  *
17037
17045
  *
17038
- * // register the interceptor via an anonymous factory
17046
+ * // alternatively, register the interceptor via an anonymous factory
17039
17047
  * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
17040
17048
  * return {
17041
17049
  * 'request': function(config) {
17042
17050
  * // same as above
17043
17051
  * },
17052
+ *
17044
17053
  * 'response': function(response) {
17045
17054
  * // same as above
17046
17055
  * }
@@ -17656,13 +17665,13 @@ function $HttpProvider() {
17656
17665
  }];
17657
17666
  }
17658
17667
 
17659
- var XHR = window.XMLHttpRequest || function() {
17668
+ function createXhr(method) {
17669
+ // IE8 doesn't support PATCH method, but the ActiveX object does
17660
17670
  /* global ActiveXObject */
17661
- try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {}
17662
- try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {}
17663
- try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {}
17664
- throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest.");
17665
- };
17671
+ return (msie <= 8 && lowercase(method) === 'patch')
17672
+ ? new ActiveXObject('Microsoft.XMLHTTP')
17673
+ : new window.XMLHttpRequest();
17674
+ }
17666
17675
 
17667
17676
 
17668
17677
  /**
@@ -17684,11 +17693,11 @@ var XHR = window.XMLHttpRequest || function() {
17684
17693
  */
17685
17694
  function $HttpBackendProvider() {
17686
17695
  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
17687
- return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, $document[0]);
17696
+ return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
17688
17697
  }];
17689
17698
  }
17690
17699
 
17691
- function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument) {
17700
+ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
17692
17701
  var ABORTED = -1;
17693
17702
 
17694
17703
  // TODO(vojta): fix the signature
@@ -17713,7 +17722,9 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument)
17713
17722
  delete callbacks[callbackId];
17714
17723
  });
17715
17724
  } else {
17716
- var xhr = new XHR();
17725
+
17726
+ var xhr = createXhr(method);
17727
+
17717
17728
  xhr.open(method, url, true);
17718
17729
  forEach(headers, function(value, key) {
17719
17730
  if (isDefined(value)) {
@@ -17725,7 +17736,14 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument)
17725
17736
  // response is in the cache. the promise api will ensure that to the app code the api is
17726
17737
  // always async
17727
17738
  xhr.onreadystatechange = function() {
17728
- if (xhr.readyState == 4) {
17739
+ // onreadystatechange might by called multiple times with readyState === 4 on mobile webkit caused by
17740
+ // xhrs that are resolved while the app is in the background (see #5426).
17741
+ // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before
17742
+ // continuing
17743
+ //
17744
+ // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and
17745
+ // Safari respectively.
17746
+ if (xhr && xhr.readyState == 4) {
17729
17747
  var responseHeaders = null,
17730
17748
  response = null;
17731
17749
 
@@ -18972,16 +18990,17 @@ function $LocationProvider(){
18972
18990
  // update $location when $browser url changes
18973
18991
  $browser.onUrlChange(function(newUrl) {
18974
18992
  if ($location.absUrl() != newUrl) {
18975
- if ($rootScope.$broadcast('$locationChangeStart', newUrl,
18976
- $location.absUrl()).defaultPrevented) {
18977
- $browser.url($location.absUrl());
18978
- return;
18979
- }
18980
18993
  $rootScope.$evalAsync(function() {
18981
18994
  var oldUrl = $location.absUrl();
18982
18995
 
18983
18996
  $location.$$parse(newUrl);
18984
- afterLocationChange(oldUrl);
18997
+ if ($rootScope.$broadcast('$locationChangeStart', newUrl,
18998
+ oldUrl).defaultPrevented) {
18999
+ $location.$$parse(oldUrl);
19000
+ $browser.url(oldUrl);
19001
+ } else {
19002
+ afterLocationChange(oldUrl);
19003
+ }
18985
19004
  });
18986
19005
  if (!$rootScope.$$phase) $rootScope.$digest();
18987
19006
  }
@@ -21091,6 +21110,7 @@ function $RootScopeProvider(){
21091
21110
  this.$$asyncQueue = [];
21092
21111
  this.$$postDigestQueue = [];
21093
21112
  this.$$listeners = {};
21113
+ this.$$listenerCount = {};
21094
21114
  this.$$isolateBindings = {};
21095
21115
  }
21096
21116
 
@@ -21150,6 +21170,7 @@ function $RootScopeProvider(){
21150
21170
  }
21151
21171
  child['this'] = child;
21152
21172
  child.$$listeners = {};
21173
+ child.$$listenerCount = {};
21153
21174
  child.$parent = this;
21154
21175
  child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null;
21155
21176
  child.$$prevSibling = this.$$childTail;
@@ -21309,6 +21330,7 @@ function $RootScopeProvider(){
21309
21330
 
21310
21331
  return function() {
21311
21332
  arrayRemove(array, watcher);
21333
+ lastDirtyWatch = null;
21312
21334
  };
21313
21335
  },
21314
21336
 
@@ -21654,6 +21676,8 @@ function $RootScopeProvider(){
21654
21676
  this.$$destroyed = true;
21655
21677
  if (this === $rootScope) return;
21656
21678
 
21679
+ forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));
21680
+
21657
21681
  if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
21658
21682
  if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
21659
21683
  if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
@@ -21843,8 +21867,18 @@ function $RootScopeProvider(){
21843
21867
  }
21844
21868
  namedListeners.push(listener);
21845
21869
 
21870
+ var current = this;
21871
+ do {
21872
+ if (!current.$$listenerCount[name]) {
21873
+ current.$$listenerCount[name] = 0;
21874
+ }
21875
+ current.$$listenerCount[name]++;
21876
+ } while ((current = current.$parent));
21877
+
21878
+ var self = this;
21846
21879
  return function() {
21847
21880
  namedListeners[indexOf(namedListeners, listener)] = null;
21881
+ decrementListenerCount(self, 1, name);
21848
21882
  };
21849
21883
  },
21850
21884
 
@@ -21956,8 +21990,7 @@ function $RootScopeProvider(){
21956
21990
  listeners, i, length;
21957
21991
 
21958
21992
  //down while you can, then up and next sibling or up and next sibling until back at root
21959
- do {
21960
- current = next;
21993
+ while ((current = next)) {
21961
21994
  event.currentScope = current;
21962
21995
  listeners = current.$$listeners[name] || [];
21963
21996
  for (i=0, length = listeners.length; i<length; i++) {
@@ -21979,12 +22012,14 @@ function $RootScopeProvider(){
21979
22012
  // Insanity Warning: scope depth-first traversal
21980
22013
  // yes, this code is a bit crazy, but it works and we have tests to prove it!
21981
22014
  // this piece should be kept in sync with the traversal in $digest
21982
- if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
22015
+ // (though it differs due to having the extra check for $$listenerCount)
22016
+ if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
22017
+ (current !== target && current.$$nextSibling)))) {
21983
22018
  while(current !== target && !(next = current.$$nextSibling)) {
21984
22019
  current = current.$parent;
21985
22020
  }
21986
22021
  }
21987
- } while ((current = next));
22022
+ }
21988
22023
 
21989
22024
  return event;
21990
22025
  }
@@ -22013,6 +22048,16 @@ function $RootScopeProvider(){
22013
22048
  return fn;
22014
22049
  }
22015
22050
 
22051
+ function decrementListenerCount(current, count, name) {
22052
+ do {
22053
+ current.$$listenerCount[name] -= count;
22054
+
22055
+ if (current.$$listenerCount[name] === 0) {
22056
+ delete current.$$listenerCount[name];
22057
+ }
22058
+ } while ((current = current.$parent));
22059
+ }
22060
+
22016
22061
  /**
22017
22062
  * function used as an initial value for watchers.
22018
22063
  * because it's unique we can easily tell it apart from other values
@@ -23231,7 +23276,7 @@ function $SnifferProvider() {
23231
23276
  // http://code.google.com/p/android/issues/detail?id=17471
23232
23277
  // https://github.com/angular/angular.js/issues/904
23233
23278
 
23234
- // older webit browser (533.9) on Boxee box has exactly the same problem as Android has
23279
+ // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
23235
23280
  // so let's not use the history API also
23236
23281
  // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
23237
23282
  // jshint -W018
@@ -23653,21 +23698,21 @@ function $FilterProvider($provide) {
23653
23698
  * property of the object. That's equivalent to the simple substring match with a `string`
23654
23699
  * as described above.
23655
23700
  *
23656
- * - `function`: A predicate function can be used to write arbitrary filters. The function is
23701
+ * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is
23657
23702
  * called for each element of `array`. The final result is an array of those elements that
23658
23703
  * the predicate returned true for.
23659
23704
  *
23660
- * @param {function(expected, actual)|true|undefined} comparator Comparator which is used in
23705
+ * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
23661
23706
  * determining if the expected value (from the filter expression) and actual value (from
23662
23707
  * the object in the array) should be considered a match.
23663
23708
  *
23664
23709
  * Can be one of:
23665
23710
  *
23666
- * - `function(expected, actual)`:
23711
+ * - `function(actual, expected)`:
23667
23712
  * The function will be given the object value and the predicate value to compare and
23668
23713
  * should return true if the item should be included in filtered result.
23669
23714
  *
23670
- * - `true`: A shorthand for `function(expected, actual) { return angular.equals(expected, actual)}`.
23715
+ * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.
23671
23716
  * this is essentially strict comparison of expected and actual.
23672
23717
  *
23673
23718
  * - `false|undefined`: A short hand for a function which will look for a substring match in case
@@ -25772,9 +25817,13 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
25772
25817
  }
25773
25818
 
25774
25819
  if (ctrl.$viewValue !== value) {
25775
- scope.$apply(function() {
25820
+ if (scope.$$phase) {
25776
25821
  ctrl.$setViewValue(value);
25777
- });
25822
+ } else {
25823
+ scope.$apply(function() {
25824
+ ctrl.$setViewValue(value);
25825
+ });
25826
+ }
25778
25827
  }
25779
25828
  };
25780
25829
 
@@ -28853,7 +28902,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
28853
28902
  $$tlb: true,
28854
28903
  link: function($scope, $element, $attr, ctrl, $transclude){
28855
28904
  var expression = $attr.ngRepeat;
28856
- var match = expression.match(/^\s*(.+)\s+in\s+([\r\n\s\S]*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),
28905
+ var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
28857
28906
  trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,
28858
28907
  lhs, rhs, valueIdentifier, keyIdentifier,
28859
28908
  hashFnLocals = {$id: hashKey};
@@ -28865,7 +28914,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
28865
28914
 
28866
28915
  lhs = match[1];
28867
28916
  rhs = match[2];
28868
- trackByExp = match[4];
28917
+ trackByExp = match[3];
28869
28918
 
28870
28919
  if (trackByExp) {
28871
28920
  trackByExpGetter = $parse(trackByExp);
@@ -30554,7 +30603,8 @@ function callerFile(offset) {
30554
30603
  * To work around this we instead use our own handler that fires a real event.
30555
30604
  */
30556
30605
  (function(fn){
30557
- var parentTrigger = fn.trigger;
30606
+ // We need a handle to the original trigger function for input tests.
30607
+ var parentTrigger = fn._originalTrigger = fn.trigger;
30558
30608
  fn.trigger = function(type) {
30559
30609
  if (/(click|change|keydown|blur|input|mousedown|mouseup)/.test(type)) {
30560
30610
  var processDefaults = [];
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.6
2
+ * @license AngularJS v1.2.7
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.6
2
+ * @license AngularJS v1.2.7
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.6/' +
71
+ message = message + '\nhttp://errors.angularjs.org/1.2.7/' +
72
72
  (module ? module + '/' : '') + code;
73
73
  for (i = 2; i < arguments.length; i++) {
74
74
  message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
@@ -1038,7 +1038,9 @@ function fromJson(json) {
1038
1038
 
1039
1039
 
1040
1040
  function toBoolean(value) {
1041
- if (value && value.length !== 0) {
1041
+ if (typeof value === 'function') {
1042
+ value = true;
1043
+ } else if (value && value.length !== 0) {
1042
1044
  var v = lowercase("" + value);
1043
1045
  value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
1044
1046
  } else {
@@ -1831,11 +1833,11 @@ function setupModuleLoader(window) {
1831
1833
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
1832
1834
  */
1833
1835
  var version = {
1834
- full: '1.2.6', // all of these placeholder strings will be replaced by grunt's
1836
+ full: '1.2.7', // all of these placeholder strings will be replaced by grunt's
1835
1837
  major: 1, // package task
1836
1838
  minor: 2,
1837
- dot: 6,
1838
- codeName: 'taco-salsafication'
1839
+ dot: 7,
1840
+ codeName: 'emoji-clairvoyance'
1839
1841
  };
1840
1842
 
1841
1843
 
@@ -3663,6 +3665,11 @@ function createInjector(modulesToLoad) {
3663
3665
  path.unshift(serviceName);
3664
3666
  cache[serviceName] = INSTANTIATING;
3665
3667
  return cache[serviceName] = factory(serviceName);
3668
+ } catch (err) {
3669
+ if (cache[serviceName] === INSTANTIATING) {
3670
+ delete cache[serviceName];
3671
+ }
3672
+ throw err;
3666
3673
  } finally {
3667
3674
  path.shift();
3668
3675
  }
@@ -4197,8 +4204,9 @@ function Browser(window, document, $log, $sniffer) {
4197
4204
  * @param {boolean=} replace Should new url replace current history record ?
4198
4205
  */
4199
4206
  self.url = function(url, replace) {
4200
- // Android Browser BFCache causes location reference to become stale.
4207
+ // Android Browser BFCache causes location, history reference to become stale.
4201
4208
  if (location !== window.location) location = window.location;
4209
+ if (history !== window.history) history = window.history;
4202
4210
 
4203
4211
  // setter
4204
4212
  if (url) {
@@ -4250,7 +4258,7 @@ function Browser(window, document, $log, $sniffer) {
4250
4258
  * @description
4251
4259
  * Register callback function that will be called, when url changes.
4252
4260
  *
4253
- * It's only called when the url is changed by outside of angular:
4261
+ * It's only called when the url is changed from outside of angular:
4254
4262
  * - user types different url into address bar
4255
4263
  * - user clicks on history (forward/back) button
4256
4264
  * - user clicks on a link
@@ -4292,7 +4300,7 @@ function Browser(window, document, $log, $sniffer) {
4292
4300
  /**
4293
4301
  * @name ng.$browser#baseHref
4294
4302
  * @methodOf ng.$browser
4295
- *
4303
+ *
4296
4304
  * @description
4297
4305
  * Returns current <base href>
4298
4306
  * (always relative - without domain)
@@ -4301,7 +4309,7 @@ function Browser(window, document, $log, $sniffer) {
4301
4309
  */
4302
4310
  self.baseHref = function() {
4303
4311
  var href = baseElement.attr('href');
4304
- return href ? href.replace(/^https?\:\/\/[^\/]*/, '') : '';
4312
+ return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
4305
4313
  };
4306
4314
 
4307
4315
  //////////////////////////////////////////////////////////////
@@ -4323,13 +4331,13 @@ function Browser(window, document, $log, $sniffer) {
4323
4331
  * It is not meant to be used directly, use the $cookie service instead.
4324
4332
  *
4325
4333
  * The return values vary depending on the arguments that the method was called with as follows:
4326
- *
4334
+ *
4327
4335
  * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
4328
4336
  * it
4329
4337
  * - cookies(name, value) -> set name to value, if value is undefined delete the cookie
4330
4338
  * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
4331
4339
  * way)
4332
- *
4340
+ *
4333
4341
  * @returns {Object} Hash of all cookies (if called without any parameter)
4334
4342
  */
4335
4343
  self.cookies = function(name, value) {
@@ -4707,7 +4715,7 @@ function $TemplateCacheProvider() {
4707
4715
  * @function
4708
4716
  *
4709
4717
  * @description
4710
- * Compiles a piece of HTML string or DOM into a template and produces a template function, which
4718
+ * Compiles an HTML string or DOM into a template and produces a template function, which
4711
4719
  * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
4712
4720
  *
4713
4721
  * The compilation is a process of walking the DOM tree and matching DOM elements to
@@ -7049,7 +7057,7 @@ function $HttpProvider() {
7049
7057
  * will result in the success callback being called. Note that if the response is a redirect,
7050
7058
  * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
7051
7059
  * called for such responses.
7052
- *
7060
+ *
7053
7061
  * # Calling $http from outside AngularJS
7054
7062
  * The `$http` service will not actually send the request until the next `$digest()` is
7055
7063
  * executed. Normally this is not an issue, since almost all the time your call to `$http` will
@@ -7236,19 +7244,20 @@ function $HttpProvider() {
7236
7244
  * return responseOrNewPromise
7237
7245
  * }
7238
7246
  * return $q.reject(rejection);
7239
- * };
7240
- * }
7247
+ * }
7248
+ * };
7241
7249
  * });
7242
7250
  *
7243
7251
  * $httpProvider.interceptors.push('myHttpInterceptor');
7244
7252
  *
7245
7253
  *
7246
- * // register the interceptor via an anonymous factory
7254
+ * // alternatively, register the interceptor via an anonymous factory
7247
7255
  * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
7248
7256
  * return {
7249
7257
  * 'request': function(config) {
7250
7258
  * // same as above
7251
7259
  * },
7260
+ *
7252
7261
  * 'response': function(response) {
7253
7262
  * // same as above
7254
7263
  * }
@@ -7864,13 +7873,13 @@ function $HttpProvider() {
7864
7873
  }];
7865
7874
  }
7866
7875
 
7867
- var XHR = window.XMLHttpRequest || function() {
7876
+ function createXhr(method) {
7877
+ // IE8 doesn't support PATCH method, but the ActiveX object does
7868
7878
  /* global ActiveXObject */
7869
- try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {}
7870
- try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {}
7871
- try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {}
7872
- throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest.");
7873
- };
7879
+ return (msie <= 8 && lowercase(method) === 'patch')
7880
+ ? new ActiveXObject('Microsoft.XMLHTTP')
7881
+ : new window.XMLHttpRequest();
7882
+ }
7874
7883
 
7875
7884
 
7876
7885
  /**
@@ -7892,11 +7901,11 @@ var XHR = window.XMLHttpRequest || function() {
7892
7901
  */
7893
7902
  function $HttpBackendProvider() {
7894
7903
  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
7895
- return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, $document[0]);
7904
+ return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
7896
7905
  }];
7897
7906
  }
7898
7907
 
7899
- function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument) {
7908
+ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
7900
7909
  var ABORTED = -1;
7901
7910
 
7902
7911
  // TODO(vojta): fix the signature
@@ -7921,7 +7930,9 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument)
7921
7930
  delete callbacks[callbackId];
7922
7931
  });
7923
7932
  } else {
7924
- var xhr = new XHR();
7933
+
7934
+ var xhr = createXhr(method);
7935
+
7925
7936
  xhr.open(method, url, true);
7926
7937
  forEach(headers, function(value, key) {
7927
7938
  if (isDefined(value)) {
@@ -7933,7 +7944,14 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument)
7933
7944
  // response is in the cache. the promise api will ensure that to the app code the api is
7934
7945
  // always async
7935
7946
  xhr.onreadystatechange = function() {
7936
- if (xhr.readyState == 4) {
7947
+ // onreadystatechange might by called multiple times with readyState === 4 on mobile webkit caused by
7948
+ // xhrs that are resolved while the app is in the background (see #5426).
7949
+ // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before
7950
+ // continuing
7951
+ //
7952
+ // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and
7953
+ // Safari respectively.
7954
+ if (xhr && xhr.readyState == 4) {
7937
7955
  var responseHeaders = null,
7938
7956
  response = null;
7939
7957
 
@@ -9180,16 +9198,17 @@ function $LocationProvider(){
9180
9198
  // update $location when $browser url changes
9181
9199
  $browser.onUrlChange(function(newUrl) {
9182
9200
  if ($location.absUrl() != newUrl) {
9183
- if ($rootScope.$broadcast('$locationChangeStart', newUrl,
9184
- $location.absUrl()).defaultPrevented) {
9185
- $browser.url($location.absUrl());
9186
- return;
9187
- }
9188
9201
  $rootScope.$evalAsync(function() {
9189
9202
  var oldUrl = $location.absUrl();
9190
9203
 
9191
9204
  $location.$$parse(newUrl);
9192
- afterLocationChange(oldUrl);
9205
+ if ($rootScope.$broadcast('$locationChangeStart', newUrl,
9206
+ oldUrl).defaultPrevented) {
9207
+ $location.$$parse(oldUrl);
9208
+ $browser.url(oldUrl);
9209
+ } else {
9210
+ afterLocationChange(oldUrl);
9211
+ }
9193
9212
  });
9194
9213
  if (!$rootScope.$$phase) $rootScope.$digest();
9195
9214
  }
@@ -11299,6 +11318,7 @@ function $RootScopeProvider(){
11299
11318
  this.$$asyncQueue = [];
11300
11319
  this.$$postDigestQueue = [];
11301
11320
  this.$$listeners = {};
11321
+ this.$$listenerCount = {};
11302
11322
  this.$$isolateBindings = {};
11303
11323
  }
11304
11324
 
@@ -11358,6 +11378,7 @@ function $RootScopeProvider(){
11358
11378
  }
11359
11379
  child['this'] = child;
11360
11380
  child.$$listeners = {};
11381
+ child.$$listenerCount = {};
11361
11382
  child.$parent = this;
11362
11383
  child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null;
11363
11384
  child.$$prevSibling = this.$$childTail;
@@ -11517,6 +11538,7 @@ function $RootScopeProvider(){
11517
11538
 
11518
11539
  return function() {
11519
11540
  arrayRemove(array, watcher);
11541
+ lastDirtyWatch = null;
11520
11542
  };
11521
11543
  },
11522
11544
 
@@ -11862,6 +11884,8 @@ function $RootScopeProvider(){
11862
11884
  this.$$destroyed = true;
11863
11885
  if (this === $rootScope) return;
11864
11886
 
11887
+ forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));
11888
+
11865
11889
  if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
11866
11890
  if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
11867
11891
  if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
@@ -12051,8 +12075,18 @@ function $RootScopeProvider(){
12051
12075
  }
12052
12076
  namedListeners.push(listener);
12053
12077
 
12078
+ var current = this;
12079
+ do {
12080
+ if (!current.$$listenerCount[name]) {
12081
+ current.$$listenerCount[name] = 0;
12082
+ }
12083
+ current.$$listenerCount[name]++;
12084
+ } while ((current = current.$parent));
12085
+
12086
+ var self = this;
12054
12087
  return function() {
12055
12088
  namedListeners[indexOf(namedListeners, listener)] = null;
12089
+ decrementListenerCount(self, 1, name);
12056
12090
  };
12057
12091
  },
12058
12092
 
@@ -12164,8 +12198,7 @@ function $RootScopeProvider(){
12164
12198
  listeners, i, length;
12165
12199
 
12166
12200
  //down while you can, then up and next sibling or up and next sibling until back at root
12167
- do {
12168
- current = next;
12201
+ while ((current = next)) {
12169
12202
  event.currentScope = current;
12170
12203
  listeners = current.$$listeners[name] || [];
12171
12204
  for (i=0, length = listeners.length; i<length; i++) {
@@ -12187,12 +12220,14 @@ function $RootScopeProvider(){
12187
12220
  // Insanity Warning: scope depth-first traversal
12188
12221
  // yes, this code is a bit crazy, but it works and we have tests to prove it!
12189
12222
  // this piece should be kept in sync with the traversal in $digest
12190
- if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
12223
+ // (though it differs due to having the extra check for $$listenerCount)
12224
+ if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
12225
+ (current !== target && current.$$nextSibling)))) {
12191
12226
  while(current !== target && !(next = current.$$nextSibling)) {
12192
12227
  current = current.$parent;
12193
12228
  }
12194
12229
  }
12195
- } while ((current = next));
12230
+ }
12196
12231
 
12197
12232
  return event;
12198
12233
  }
@@ -12221,6 +12256,16 @@ function $RootScopeProvider(){
12221
12256
  return fn;
12222
12257
  }
12223
12258
 
12259
+ function decrementListenerCount(current, count, name) {
12260
+ do {
12261
+ current.$$listenerCount[name] -= count;
12262
+
12263
+ if (current.$$listenerCount[name] === 0) {
12264
+ delete current.$$listenerCount[name];
12265
+ }
12266
+ } while ((current = current.$parent));
12267
+ }
12268
+
12224
12269
  /**
12225
12270
  * function used as an initial value for watchers.
12226
12271
  * because it's unique we can easily tell it apart from other values
@@ -13439,7 +13484,7 @@ function $SnifferProvider() {
13439
13484
  // http://code.google.com/p/android/issues/detail?id=17471
13440
13485
  // https://github.com/angular/angular.js/issues/904
13441
13486
 
13442
- // older webit browser (533.9) on Boxee box has exactly the same problem as Android has
13487
+ // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
13443
13488
  // so let's not use the history API also
13444
13489
  // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
13445
13490
  // jshint -W018
@@ -13861,21 +13906,21 @@ function $FilterProvider($provide) {
13861
13906
  * property of the object. That's equivalent to the simple substring match with a `string`
13862
13907
  * as described above.
13863
13908
  *
13864
- * - `function`: A predicate function can be used to write arbitrary filters. The function is
13909
+ * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is
13865
13910
  * called for each element of `array`. The final result is an array of those elements that
13866
13911
  * the predicate returned true for.
13867
13912
  *
13868
- * @param {function(expected, actual)|true|undefined} comparator Comparator which is used in
13913
+ * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
13869
13914
  * determining if the expected value (from the filter expression) and actual value (from
13870
13915
  * the object in the array) should be considered a match.
13871
13916
  *
13872
13917
  * Can be one of:
13873
13918
  *
13874
- * - `function(expected, actual)`:
13919
+ * - `function(actual, expected)`:
13875
13920
  * The function will be given the object value and the predicate value to compare and
13876
13921
  * should return true if the item should be included in filtered result.
13877
13922
  *
13878
- * - `true`: A shorthand for `function(expected, actual) { return angular.equals(expected, actual)}`.
13923
+ * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.
13879
13924
  * this is essentially strict comparison of expected and actual.
13880
13925
  *
13881
13926
  * - `false|undefined`: A short hand for a function which will look for a substring match in case
@@ -15980,9 +16025,13 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
15980
16025
  }
15981
16026
 
15982
16027
  if (ctrl.$viewValue !== value) {
15983
- scope.$apply(function() {
16028
+ if (scope.$$phase) {
15984
16029
  ctrl.$setViewValue(value);
15985
- });
16030
+ } else {
16031
+ scope.$apply(function() {
16032
+ ctrl.$setViewValue(value);
16033
+ });
16034
+ }
15986
16035
  }
15987
16036
  };
15988
16037
 
@@ -19061,7 +19110,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
19061
19110
  $$tlb: true,
19062
19111
  link: function($scope, $element, $attr, ctrl, $transclude){
19063
19112
  var expression = $attr.ngRepeat;
19064
- var match = expression.match(/^\s*(.+)\s+in\s+([\r\n\s\S]*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),
19113
+ var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
19065
19114
  trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,
19066
19115
  lhs, rhs, valueIdentifier, keyIdentifier,
19067
19116
  hashFnLocals = {$id: hashKey};
@@ -19073,7 +19122,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
19073
19122
 
19074
19123
  lhs = match[1];
19075
19124
  rhs = match[2];
19076
- trackByExp = match[4];
19125
+ trackByExp = match[3];
19077
19126
 
19078
19127
  if (trackByExp) {
19079
19128
  trackByExpGetter = $parse(trackByExp);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: angularjs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hirav Gandhi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-30 00:00:00.000000000 Z
11
+ date: 2014-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake