angularjs-rails 1.2.6 → 1.2.7

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.
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