angular-gem 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.
- data/lib/angular-gem/version.rb +1 -1
- data/vendor/assets/javascripts/1.2.7/angular-animate.js +1380 -0
- data/vendor/assets/javascripts/1.2.7/angular-cookies.js +202 -0
- data/vendor/assets/javascripts/1.2.7/angular-loader.js +410 -0
- data/vendor/assets/javascripts/1.2.7/angular-mocks.js +2120 -0
- data/vendor/assets/javascripts/1.2.7/angular-resource.js +594 -0
- data/vendor/assets/javascripts/1.2.7/angular-route.js +911 -0
- data/vendor/assets/javascripts/1.2.7/angular-sanitize.js +622 -0
- data/vendor/assets/javascripts/1.2.7/angular-scenario.js +32594 -0
- data/vendor/assets/javascripts/1.2.7/angular-touch.js +563 -0
- data/vendor/assets/javascripts/1.2.7/angular.js +20588 -0
- data/vendor/assets/javascripts/angular-animate.js +8 -3
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-mocks.js +5 -1
- data/vendor/assets/javascripts/angular-resource.js +2 -2
- data/vendor/assets/javascripts/angular-route.js +2 -2
- data/vendor/assets/javascripts/angular-sanitize.js +2 -2
- data/vendor/assets/javascripts/angular-scenario.js +97 -47
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +95 -46
- metadata +11 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
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
|
-
|
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 + '
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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 (
|
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.
|
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:
|
11630
|
-
codeName: '
|
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
|
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
|
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
|
-
|
17668
|
+
function createXhr(method) {
|
17669
|
+
// IE8 doesn't support PATCH method, but the ActiveX object does
|
17660
17670
|
/* global ActiveXObject */
|
17661
|
-
|
17662
|
-
|
17663
|
-
|
17664
|
-
|
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,
|
17696
|
+
return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
|
17688
17697
|
}];
|
17689
17698
|
}
|
17690
17699
|
|
17691
|
-
function createHttpBackend($browser,
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
}
|
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
|
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(
|
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(
|
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(
|
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
|
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*(
|
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[
|
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
|
-
|
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 = [];
|