angularjs-rails 1.2.25 → 1.2.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/angularjs-rails/version.rb +2 -2
- data/vendor/assets/javascripts/angular-animate.js +1 -1
- 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 +1 -1
- data/vendor/assets/javascripts/angular-resource.js +1 -1
- data/vendor/assets/javascripts/angular-route.js +1 -4
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +30 -24
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +30 -24
- data/vendor/assets/javascripts/unstable/angular-animate.js +109 -46
- data/vendor/assets/javascripts/unstable/angular-aria.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-loader.js +2 -2
- data/vendor/assets/javascripts/unstable/angular-messages.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-mocks.js +15 -4
- data/vendor/assets/javascripts/unstable/angular-resource.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-route.js +69 -43
- data/vendor/assets/javascripts/unstable/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-scenario.js +1152 -591
- data/vendor/assets/javascripts/unstable/angular-touch.js +1 -1
- data/vendor/assets/javascripts/unstable/angular.js +1092 -509
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edc80934126c7bb8e08926262373f206bddf9ad0
|
4
|
+
data.tar.gz: 22c50ed2a0f707116afb01e01b7e0290565bebf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10b94b7f399eef907f3cbbef83bc0ffe1f961334b23b9d498f03f9a213d91577b47cc92f883efe2da1ab762728dbb478ac09845d477ad850f8e1ccf46c04f236
|
7
|
+
data.tar.gz: 7c4af8a50c83d720781394c49862756896832d3c5dcd66b0eced5934ae95f3ffce1b17cdbb437bc636da2a590c9dccbcb8ce20e78fae3a4c89047b65d390fac4
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.26
|
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.26/' +
|
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.26
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -270,9 +270,6 @@ function $RouteProvider(){
|
|
270
270
|
* This example shows how changing the URL hash causes the `$route` to match a route against the
|
271
271
|
* URL, and the `ngView` pulls in the partial.
|
272
272
|
*
|
273
|
-
* Note that this example is using {@link ng.directive:script inlined templates}
|
274
|
-
* to get it working on jsfiddle as well.
|
275
|
-
*
|
276
273
|
* <example name="$route-service" module="ngRouteExample"
|
277
274
|
* deps="angular-route.js" fixBase="true">
|
278
275
|
* <file name="index.html">
|
@@ -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.26
|
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.26/' +
|
9864
9864
|
(module ? module + '/' : '') + code;
|
9865
9865
|
for (i = 2; i < arguments.length; i++) {
|
9866
9866
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -10209,7 +10209,7 @@ function setHashKey(obj, h) {
|
|
10209
10209
|
* @kind function
|
10210
10210
|
*
|
10211
10211
|
* @description
|
10212
|
-
* Extends the destination object `dst` by copying
|
10212
|
+
* Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
|
10213
10213
|
* to `dst`. You can specify multiple `src` objects.
|
10214
10214
|
*
|
10215
10215
|
* @param {Object} dst Destination object.
|
@@ -11779,11 +11779,11 @@ function setupModuleLoader(window) {
|
|
11779
11779
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
11780
11780
|
*/
|
11781
11781
|
var version = {
|
11782
|
-
full: '1.2.
|
11782
|
+
full: '1.2.26', // all of these placeholder strings will be replaced by grunt's
|
11783
11783
|
major: 1, // package task
|
11784
11784
|
minor: 2,
|
11785
|
-
dot:
|
11786
|
-
codeName: '
|
11785
|
+
dot: 26,
|
11786
|
+
codeName: 'captivating-disinterest'
|
11787
11787
|
};
|
11788
11788
|
|
11789
11789
|
|
@@ -15321,7 +15321,7 @@ function $TemplateCacheProvider() {
|
|
15321
15321
|
* }
|
15322
15322
|
* ```
|
15323
15323
|
*
|
15324
|
-
*
|
15324
|
+
* ## Example
|
15325
15325
|
*
|
15326
15326
|
* <div class="alert alert-warning">
|
15327
15327
|
* **Note**: Typically directives are registered with `module.directive`. The example below is
|
@@ -17829,12 +17829,13 @@ function $HttpProvider() {
|
|
17829
17829
|
expect(data.getText()).toMatch(/Hello, \$http!/);
|
17830
17830
|
});
|
17831
17831
|
|
17832
|
-
|
17833
|
-
|
17834
|
-
|
17835
|
-
|
17836
|
-
|
17837
|
-
|
17832
|
+
// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
|
17833
|
+
// it('should make a JSONP request to angularjs.org', function() {
|
17834
|
+
// sampleJsonpBtn.click();
|
17835
|
+
// fetchBtn.click();
|
17836
|
+
// expect(status.getText()).toMatch('200');
|
17837
|
+
// expect(data.getText()).toMatch(/Super Hero!/);
|
17838
|
+
// });
|
17838
17839
|
|
17839
17840
|
it('should make JSONP request to invalid URL and invoke the error handler',
|
17840
17841
|
function() {
|
@@ -25177,9 +25178,9 @@ var uppercaseFilter = valueFn(uppercase);
|
|
25177
25178
|
}]);
|
25178
25179
|
</script>
|
25179
25180
|
<div ng-controller="ExampleController">
|
25180
|
-
Limit {{numbers}} to: <input type="
|
25181
|
+
Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit">
|
25181
25182
|
<p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
|
25182
|
-
Limit {{letters}} to: <input type="
|
25183
|
+
Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit">
|
25183
25184
|
<p>Output letters: {{ letters | limitTo:letterLimit }}</p>
|
25184
25185
|
</div>
|
25185
25186
|
</file>
|
@@ -25196,14 +25197,15 @@ var uppercaseFilter = valueFn(uppercase);
|
|
25196
25197
|
expect(limitedLetters.getText()).toEqual('Output letters: abc');
|
25197
25198
|
});
|
25198
25199
|
|
25199
|
-
|
25200
|
-
|
25201
|
-
|
25202
|
-
|
25203
|
-
|
25204
|
-
|
25205
|
-
|
25206
|
-
|
25200
|
+
// There is a bug in safari and protractor that doesn't like the minus key
|
25201
|
+
// it('should update the output when -3 is entered', function() {
|
25202
|
+
// numLimitInput.clear();
|
25203
|
+
// numLimitInput.sendKeys('-3');
|
25204
|
+
// letterLimitInput.clear();
|
25205
|
+
// letterLimitInput.sendKeys('-3');
|
25206
|
+
// expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
|
25207
|
+
// expect(limitedLetters.getText()).toEqual('Output letters: ghi');
|
25208
|
+
// });
|
25207
25209
|
|
25208
25210
|
it('should not exceed the maximum size of input array', function() {
|
25209
25211
|
numLimitInput.clear();
|
@@ -28605,6 +28607,7 @@ var ngCloakDirective = ngDirective({
|
|
28605
28607
|
*
|
28606
28608
|
* @element ANY
|
28607
28609
|
* @scope
|
28610
|
+
* @priority 500
|
28608
28611
|
* @param {expression} ngController Name of a globally accessible constructor function or an
|
28609
28612
|
* {@link guide/expression expression} that on the current scope evaluates to a
|
28610
28613
|
* constructor function. The controller instance can be published into a scope property
|
@@ -31717,6 +31720,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
31717
31720
|
id: option.id,
|
31718
31721
|
selected: option.selected
|
31719
31722
|
});
|
31723
|
+
selectCtrl.addOption(option.label, element);
|
31720
31724
|
if (lastElement) {
|
31721
31725
|
lastElement.after(element);
|
31722
31726
|
} else {
|
@@ -31728,7 +31732,9 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
31728
31732
|
// remove any excessive OPTIONs in a group
|
31729
31733
|
index++; // increment since the existingOptions[0] is parent element not OPTION
|
31730
31734
|
while(existingOptions.length > index) {
|
31731
|
-
existingOptions.pop()
|
31735
|
+
option = existingOptions.pop();
|
31736
|
+
selectCtrl.removeOption(option.label);
|
31737
|
+
option.element.remove();
|
31732
31738
|
}
|
31733
31739
|
}
|
31734
31740
|
// remove any excessive OPTGROUPs from select
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.26
|
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.
|
71
|
+
message = message + '\nhttp://errors.angularjs.org/1.2.26/' +
|
72
72
|
(module ? module + '/' : '') + code;
|
73
73
|
for (i = 2; i < arguments.length; i++) {
|
74
74
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -417,7 +417,7 @@ function setHashKey(obj, h) {
|
|
417
417
|
* @kind function
|
418
418
|
*
|
419
419
|
* @description
|
420
|
-
* Extends the destination object `dst` by copying
|
420
|
+
* Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
|
421
421
|
* to `dst`. You can specify multiple `src` objects.
|
422
422
|
*
|
423
423
|
* @param {Object} dst Destination object.
|
@@ -1987,11 +1987,11 @@ function setupModuleLoader(window) {
|
|
1987
1987
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
1988
1988
|
*/
|
1989
1989
|
var version = {
|
1990
|
-
full: '1.2.
|
1990
|
+
full: '1.2.26', // all of these placeholder strings will be replaced by grunt's
|
1991
1991
|
major: 1, // package task
|
1992
1992
|
minor: 2,
|
1993
|
-
dot:
|
1994
|
-
codeName: '
|
1993
|
+
dot: 26,
|
1994
|
+
codeName: 'captivating-disinterest'
|
1995
1995
|
};
|
1996
1996
|
|
1997
1997
|
|
@@ -5529,7 +5529,7 @@ function $TemplateCacheProvider() {
|
|
5529
5529
|
* }
|
5530
5530
|
* ```
|
5531
5531
|
*
|
5532
|
-
*
|
5532
|
+
* ## Example
|
5533
5533
|
*
|
5534
5534
|
* <div class="alert alert-warning">
|
5535
5535
|
* **Note**: Typically directives are registered with `module.directive`. The example below is
|
@@ -8037,12 +8037,13 @@ function $HttpProvider() {
|
|
8037
8037
|
expect(data.getText()).toMatch(/Hello, \$http!/);
|
8038
8038
|
});
|
8039
8039
|
|
8040
|
-
|
8041
|
-
|
8042
|
-
|
8043
|
-
|
8044
|
-
|
8045
|
-
|
8040
|
+
// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
|
8041
|
+
// it('should make a JSONP request to angularjs.org', function() {
|
8042
|
+
// sampleJsonpBtn.click();
|
8043
|
+
// fetchBtn.click();
|
8044
|
+
// expect(status.getText()).toMatch('200');
|
8045
|
+
// expect(data.getText()).toMatch(/Super Hero!/);
|
8046
|
+
// });
|
8046
8047
|
|
8047
8048
|
it('should make JSONP request to invalid URL and invoke the error handler',
|
8048
8049
|
function() {
|
@@ -15385,9 +15386,9 @@ var uppercaseFilter = valueFn(uppercase);
|
|
15385
15386
|
}]);
|
15386
15387
|
</script>
|
15387
15388
|
<div ng-controller="ExampleController">
|
15388
|
-
Limit {{numbers}} to: <input type="
|
15389
|
+
Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit">
|
15389
15390
|
<p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
|
15390
|
-
Limit {{letters}} to: <input type="
|
15391
|
+
Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit">
|
15391
15392
|
<p>Output letters: {{ letters | limitTo:letterLimit }}</p>
|
15392
15393
|
</div>
|
15393
15394
|
</file>
|
@@ -15404,14 +15405,15 @@ var uppercaseFilter = valueFn(uppercase);
|
|
15404
15405
|
expect(limitedLetters.getText()).toEqual('Output letters: abc');
|
15405
15406
|
});
|
15406
15407
|
|
15407
|
-
|
15408
|
-
|
15409
|
-
|
15410
|
-
|
15411
|
-
|
15412
|
-
|
15413
|
-
|
15414
|
-
|
15408
|
+
// There is a bug in safari and protractor that doesn't like the minus key
|
15409
|
+
// it('should update the output when -3 is entered', function() {
|
15410
|
+
// numLimitInput.clear();
|
15411
|
+
// numLimitInput.sendKeys('-3');
|
15412
|
+
// letterLimitInput.clear();
|
15413
|
+
// letterLimitInput.sendKeys('-3');
|
15414
|
+
// expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
|
15415
|
+
// expect(limitedLetters.getText()).toEqual('Output letters: ghi');
|
15416
|
+
// });
|
15415
15417
|
|
15416
15418
|
it('should not exceed the maximum size of input array', function() {
|
15417
15419
|
numLimitInput.clear();
|
@@ -18813,6 +18815,7 @@ var ngCloakDirective = ngDirective({
|
|
18813
18815
|
*
|
18814
18816
|
* @element ANY
|
18815
18817
|
* @scope
|
18818
|
+
* @priority 500
|
18816
18819
|
* @param {expression} ngController Name of a globally accessible constructor function or an
|
18817
18820
|
* {@link guide/expression expression} that on the current scope evaluates to a
|
18818
18821
|
* constructor function. The controller instance can be published into a scope property
|
@@ -21925,6 +21928,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
21925
21928
|
id: option.id,
|
21926
21929
|
selected: option.selected
|
21927
21930
|
});
|
21931
|
+
selectCtrl.addOption(option.label, element);
|
21928
21932
|
if (lastElement) {
|
21929
21933
|
lastElement.after(element);
|
21930
21934
|
} else {
|
@@ -21936,7 +21940,9 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
21936
21940
|
// remove any excessive OPTIONs in a group
|
21937
21941
|
index++; // increment since the existingOptions[0] is parent element not OPTION
|
21938
21942
|
while(existingOptions.length > index) {
|
21939
|
-
existingOptions.pop()
|
21943
|
+
option = existingOptions.pop();
|
21944
|
+
selectCtrl.removeOption(option.label);
|
21945
|
+
option.element.remove();
|
21940
21946
|
}
|
21941
21947
|
}
|
21942
21948
|
// remove any excessive OPTGROUPs from select
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.0-rc.
|
2
|
+
* @license AngularJS v1.3.0-rc.5
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -227,7 +227,7 @@
|
|
227
227
|
*
|
228
228
|
* ### CSS Staggering Animations
|
229
229
|
* A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a
|
230
|
-
* curtain-like effect. The ngAnimate module
|
230
|
+
* curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be
|
231
231
|
* performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for
|
232
232
|
* the animation. The style property expected within the stagger class can either be a **transition-delay** or an
|
233
233
|
* **animation-delay** property (or both if your animation contains both transitions and keyframe animations).
|
@@ -383,6 +383,7 @@ angular.module('ngAnimate', ['ng'])
|
|
383
383
|
var forEach = angular.forEach;
|
384
384
|
var selectors = $animateProvider.$$selectors;
|
385
385
|
var isArray = angular.isArray;
|
386
|
+
var isString = angular.isString;
|
386
387
|
|
387
388
|
var ELEMENT_NODE = 1;
|
388
389
|
var NG_ANIMATE_STATE = '$$ngAnimateState';
|
@@ -473,34 +474,32 @@ angular.module('ngAnimate', ['ng'])
|
|
473
474
|
return defer.promise;
|
474
475
|
}
|
475
476
|
|
477
|
+
function parseAnimateOptions(options) {
|
478
|
+
// some plugin code may still be passing in the callback
|
479
|
+
// function as the last param for the $animate methods so
|
480
|
+
// it's best to only allow string or array values for now
|
481
|
+
if (isArray(options)) return options;
|
482
|
+
if (isString(options)) return [options];
|
483
|
+
}
|
484
|
+
|
476
485
|
function resolveElementClasses(element, cache, runningAnimations) {
|
477
486
|
runningAnimations = runningAnimations || {};
|
478
|
-
var map = {};
|
479
|
-
|
480
|
-
forEach(cache.add, function(className) {
|
481
|
-
if (className && className.length) {
|
482
|
-
map[className] = map[className] || 0;
|
483
|
-
map[className]++;
|
484
|
-
}
|
485
|
-
});
|
486
|
-
|
487
|
-
forEach(cache.remove, function(className) {
|
488
|
-
if (className && className.length) {
|
489
|
-
map[className] = map[className] || 0;
|
490
|
-
map[className]--;
|
491
|
-
}
|
492
|
-
});
|
493
487
|
|
494
|
-
var lookup =
|
488
|
+
var lookup = {};
|
495
489
|
forEach(runningAnimations, function(data, selector) {
|
496
490
|
forEach(selector.split(' '), function(s) {
|
497
491
|
lookup[s]=data;
|
498
492
|
});
|
499
493
|
});
|
500
494
|
|
495
|
+
var hasClasses = Object.create(null);
|
496
|
+
forEach((element.attr('class') || '').split(/\s+/), function(className) {
|
497
|
+
hasClasses[className] = true;
|
498
|
+
});
|
499
|
+
|
501
500
|
var toAdd = [], toRemove = [];
|
502
|
-
forEach(
|
503
|
-
var hasClass =
|
501
|
+
forEach(cache.classes, function(status, className) {
|
502
|
+
var hasClass = hasClasses[className];
|
504
503
|
var matchingAnimation = lookup[className] || {};
|
505
504
|
|
506
505
|
// When addClass and removeClass is called then $animate will check to
|
@@ -511,12 +510,12 @@ angular.module('ngAnimate', ['ng'])
|
|
511
510
|
// Once an animation is allowed then the code will also check to see if
|
512
511
|
// there exists any on-going animation that is already adding or remvoing
|
513
512
|
// the matching CSS class.
|
514
|
-
if (status
|
513
|
+
if (status === false) {
|
515
514
|
//does it have the class or will it have the class
|
516
515
|
if (hasClass || matchingAnimation.event == 'addClass') {
|
517
516
|
toRemove.push(className);
|
518
517
|
}
|
519
|
-
} else if (status
|
518
|
+
} else if (status === true) {
|
520
519
|
//is the class missing or will it be removed?
|
521
520
|
if (!hasClass || matchingAnimation.event == 'removeClass') {
|
522
521
|
toAdd.push(className);
|
@@ -800,7 +799,8 @@ angular.module('ngAnimate', ['ng'])
|
|
800
799
|
* @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation
|
801
800
|
* @return {Promise} the animation callback promise
|
802
801
|
*/
|
803
|
-
enter : function(element, parentElement, afterElement) {
|
802
|
+
enter : function(element, parentElement, afterElement, options) {
|
803
|
+
options = parseAnimateOptions(options);
|
804
804
|
element = angular.element(element);
|
805
805
|
parentElement = prepareElement(parentElement);
|
806
806
|
afterElement = prepareElement(afterElement);
|
@@ -808,7 +808,7 @@ angular.module('ngAnimate', ['ng'])
|
|
808
808
|
classBasedAnimationsBlocked(element, true);
|
809
809
|
$delegate.enter(element, parentElement, afterElement);
|
810
810
|
return runAnimationPostDigest(function(done) {
|
811
|
-
return performAnimation('enter', 'ng-enter', stripCommentsFromElement(element), parentElement, afterElement, noop, done);
|
811
|
+
return performAnimation('enter', 'ng-enter', stripCommentsFromElement(element), parentElement, afterElement, noop, options, done);
|
812
812
|
});
|
813
813
|
},
|
814
814
|
|
@@ -842,16 +842,16 @@ angular.module('ngAnimate', ['ng'])
|
|
842
842
|
* @param {DOMElement} element the element that will be the focus of the leave animation
|
843
843
|
* @return {Promise} the animation callback promise
|
844
844
|
*/
|
845
|
-
leave : function(element) {
|
845
|
+
leave : function(element, options) {
|
846
|
+
options = parseAnimateOptions(options);
|
846
847
|
element = angular.element(element);
|
847
848
|
|
848
849
|
cancelChildAnimations(element);
|
849
850
|
classBasedAnimationsBlocked(element, true);
|
850
|
-
this.enabled(false, element);
|
851
851
|
return runAnimationPostDigest(function(done) {
|
852
852
|
return performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() {
|
853
853
|
$delegate.leave(element);
|
854
|
-
}, done);
|
854
|
+
}, options, done);
|
855
855
|
});
|
856
856
|
},
|
857
857
|
|
@@ -888,7 +888,8 @@ angular.module('ngAnimate', ['ng'])
|
|
888
888
|
* @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation
|
889
889
|
* @return {Promise} the animation callback promise
|
890
890
|
*/
|
891
|
-
move : function(element, parentElement, afterElement) {
|
891
|
+
move : function(element, parentElement, afterElement, options) {
|
892
|
+
options = parseAnimateOptions(options);
|
892
893
|
element = angular.element(element);
|
893
894
|
parentElement = prepareElement(parentElement);
|
894
895
|
afterElement = prepareElement(afterElement);
|
@@ -897,7 +898,7 @@ angular.module('ngAnimate', ['ng'])
|
|
897
898
|
classBasedAnimationsBlocked(element, true);
|
898
899
|
$delegate.move(element, parentElement, afterElement);
|
899
900
|
return runAnimationPostDigest(function(done) {
|
900
|
-
return performAnimation('move', 'ng-move', stripCommentsFromElement(element), parentElement, afterElement, noop, done);
|
901
|
+
return performAnimation('move', 'ng-move', stripCommentsFromElement(element), parentElement, afterElement, noop, options, done);
|
901
902
|
});
|
902
903
|
},
|
903
904
|
|
@@ -930,8 +931,8 @@ angular.module('ngAnimate', ['ng'])
|
|
930
931
|
* @param {string} className the CSS class that will be added to the element and then animated
|
931
932
|
* @return {Promise} the animation callback promise
|
932
933
|
*/
|
933
|
-
addClass : function(element, className) {
|
934
|
-
return this.setClass(element, className, []);
|
934
|
+
addClass : function(element, className, options) {
|
935
|
+
return this.setClass(element, className, [], options);
|
935
936
|
},
|
936
937
|
|
937
938
|
/**
|
@@ -963,8 +964,8 @@ angular.module('ngAnimate', ['ng'])
|
|
963
964
|
* @param {string} className the CSS class that will be animated and then removed from the element
|
964
965
|
* @return {Promise} the animation callback promise
|
965
966
|
*/
|
966
|
-
removeClass : function(element, className) {
|
967
|
-
return this.setClass(element, [], className);
|
967
|
+
removeClass : function(element, className, options) {
|
968
|
+
return this.setClass(element, [], className, options);
|
968
969
|
},
|
969
970
|
|
970
971
|
/**
|
@@ -994,33 +995,68 @@ angular.module('ngAnimate', ['ng'])
|
|
994
995
|
* CSS classes have been set on the element
|
995
996
|
* @return {Promise} the animation callback promise
|
996
997
|
*/
|
997
|
-
setClass : function(element, add, remove) {
|
998
|
+
setClass : function(element, add, remove, options) {
|
999
|
+
options = parseAnimateOptions(options);
|
1000
|
+
|
998
1001
|
var STORAGE_KEY = '$$animateClasses';
|
999
1002
|
element = angular.element(element);
|
1000
1003
|
element = stripCommentsFromElement(element);
|
1001
1004
|
|
1002
1005
|
if (classBasedAnimationsBlocked(element)) {
|
1003
|
-
|
1006
|
+
// TODO(@caitp/@matsko): Don't use private/undocumented API here --- we should not be
|
1007
|
+
// changing the DOM synchronously in this case. The `true` parameter must eventually be
|
1008
|
+
// removed.
|
1009
|
+
return $delegate.setClass(element, add, remove, true);
|
1010
|
+
}
|
1011
|
+
|
1012
|
+
// we're using a combined array for both the add and remove
|
1013
|
+
// operations since the ORDER OF addClass and removeClass matters
|
1014
|
+
var classes, cache = element.data(STORAGE_KEY);
|
1015
|
+
var hasCache = !!cache;
|
1016
|
+
if (!cache) {
|
1017
|
+
cache = {};
|
1018
|
+
cache.classes = {};
|
1004
1019
|
}
|
1020
|
+
classes = cache.classes;
|
1005
1021
|
|
1006
1022
|
add = isArray(add) ? add : add.split(' ');
|
1023
|
+
forEach(add, function(c) {
|
1024
|
+
if (c && c.length) {
|
1025
|
+
classes[c] = true;
|
1026
|
+
}
|
1027
|
+
});
|
1028
|
+
|
1007
1029
|
remove = isArray(remove) ? remove : remove.split(' ');
|
1030
|
+
forEach(remove, function(c) {
|
1031
|
+
if (c && c.length) {
|
1032
|
+
classes[c] = false;
|
1033
|
+
}
|
1034
|
+
});
|
1008
1035
|
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1036
|
+
if (hasCache) {
|
1037
|
+
if (options && cache.options) {
|
1038
|
+
cache.options = cache.options.concat(options);
|
1039
|
+
}
|
1013
1040
|
|
1014
1041
|
//the digest cycle will combine all the animations into one function
|
1015
1042
|
return cache.promise;
|
1016
1043
|
} else {
|
1017
1044
|
element.data(STORAGE_KEY, cache = {
|
1018
|
-
|
1019
|
-
|
1045
|
+
classes : classes,
|
1046
|
+
options : options
|
1020
1047
|
});
|
1021
1048
|
}
|
1022
1049
|
|
1023
1050
|
return cache.promise = runAnimationPostDigest(function(done) {
|
1051
|
+
var parentElement = element.parent();
|
1052
|
+
var elementNode = extractElementNode(element);
|
1053
|
+
var parentNode = elementNode.parentNode;
|
1054
|
+
// TODO(matsko): move this code into the animationsDisabled() function once #8092 is fixed
|
1055
|
+
if (!parentNode || parentNode['$$NG_REMOVED'] || elementNode['$$NG_REMOVED']) {
|
1056
|
+
done();
|
1057
|
+
return;
|
1058
|
+
}
|
1059
|
+
|
1024
1060
|
var cache = element.data(STORAGE_KEY);
|
1025
1061
|
element.removeData(STORAGE_KEY);
|
1026
1062
|
|
@@ -1028,9 +1064,10 @@ angular.module('ngAnimate', ['ng'])
|
|
1028
1064
|
var classes = resolveElementClasses(element, cache, state.active);
|
1029
1065
|
return !classes
|
1030
1066
|
? done()
|
1031
|
-
: performAnimation('setClass', classes, element,
|
1032
|
-
$delegate
|
1033
|
-
|
1067
|
+
: performAnimation('setClass', classes, element, parentElement, null, function() {
|
1068
|
+
if (classes[0]) $delegate.$$addClassImmediately(element, classes[0]);
|
1069
|
+
if (classes[1]) $delegate.$$removeClassImmediately(element, classes[1]);
|
1070
|
+
}, cache.options, done);
|
1034
1071
|
});
|
1035
1072
|
},
|
1036
1073
|
|
@@ -1092,7 +1129,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1092
1129
|
CSS code. Element, parentElement and afterElement are provided DOM elements for the animation
|
1093
1130
|
and the onComplete callback will be fired once the animation is fully complete.
|
1094
1131
|
*/
|
1095
|
-
function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) {
|
1132
|
+
function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, options, doneCallback) {
|
1096
1133
|
|
1097
1134
|
var noopCancel = noop;
|
1098
1135
|
var runner = animationRunner(element, animationEvent, className);
|
@@ -1200,6 +1237,11 @@ angular.module('ngAnimate', ['ng'])
|
|
1200
1237
|
//the ng-animate class does nothing, but it's here to allow for
|
1201
1238
|
//parent animations to find and cancel child animations when needed
|
1202
1239
|
element.addClass(NG_ANIMATE_CLASS_NAME);
|
1240
|
+
if (isArray(options)) {
|
1241
|
+
forEach(options, function(className) {
|
1242
|
+
element.addClass(className);
|
1243
|
+
});
|
1244
|
+
}
|
1203
1245
|
|
1204
1246
|
var localAnimationCount = globalAnimationCounter++;
|
1205
1247
|
totalActiveAnimations++;
|
@@ -1269,8 +1311,15 @@ angular.module('ngAnimate', ['ng'])
|
|
1269
1311
|
function closeAnimation() {
|
1270
1312
|
if (!closeAnimation.hasBeenRun) {
|
1271
1313
|
closeAnimation.hasBeenRun = true;
|
1314
|
+
if (isArray(options)) {
|
1315
|
+
forEach(options, function(className) {
|
1316
|
+
element.removeClass(className);
|
1317
|
+
});
|
1318
|
+
}
|
1319
|
+
|
1272
1320
|
var data = element.data(NG_ANIMATE_STATE);
|
1273
1321
|
if (data) {
|
1322
|
+
|
1274
1323
|
/* only structural animations wait for reflow before removing an
|
1275
1324
|
animation, but class-based animations don't. An example of this
|
1276
1325
|
failing would be when a parent HTML tag has a ng-class attribute
|
@@ -1425,6 +1474,16 @@ angular.module('ngAnimate', ['ng'])
|
|
1425
1474
|
var parentCounter = 0;
|
1426
1475
|
var animationReflowQueue = [];
|
1427
1476
|
var cancelAnimationReflow;
|
1477
|
+
function clearCacheAfterReflow() {
|
1478
|
+
if (!cancelAnimationReflow) {
|
1479
|
+
cancelAnimationReflow = $$animateReflow(function() {
|
1480
|
+
animationReflowQueue = [];
|
1481
|
+
cancelAnimationReflow = null;
|
1482
|
+
lookupCache = {};
|
1483
|
+
});
|
1484
|
+
}
|
1485
|
+
}
|
1486
|
+
|
1428
1487
|
function afterReflow(element, callback) {
|
1429
1488
|
if (cancelAnimationReflow) {
|
1430
1489
|
cancelAnimationReflow();
|
@@ -1525,7 +1584,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1525
1584
|
|
1526
1585
|
function parseMaxTime(str) {
|
1527
1586
|
var maxValue = 0;
|
1528
|
-
var values =
|
1587
|
+
var values = isString(str) ?
|
1529
1588
|
str.split(/\s*,\s*/) :
|
1530
1589
|
[];
|
1531
1590
|
forEach(values, function(value) {
|
@@ -1770,6 +1829,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1770
1829
|
//to perform at all
|
1771
1830
|
var preReflowCancellation = animateBefore(animationEvent, element, className);
|
1772
1831
|
if (!preReflowCancellation) {
|
1832
|
+
clearCacheAfterReflow();
|
1773
1833
|
animationComplete();
|
1774
1834
|
return;
|
1775
1835
|
}
|
@@ -1826,6 +1886,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1826
1886
|
afterReflow(element, animationCompleted);
|
1827
1887
|
return cancellationMethod;
|
1828
1888
|
}
|
1889
|
+
clearCacheAfterReflow();
|
1829
1890
|
animationCompleted();
|
1830
1891
|
},
|
1831
1892
|
|
@@ -1835,6 +1896,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1835
1896
|
afterReflow(element, animationCompleted);
|
1836
1897
|
return cancellationMethod;
|
1837
1898
|
}
|
1899
|
+
clearCacheAfterReflow();
|
1838
1900
|
animationCompleted();
|
1839
1901
|
},
|
1840
1902
|
|
@@ -1844,6 +1906,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1844
1906
|
afterReflow(element, animationCompleted);
|
1845
1907
|
return cancellationMethod;
|
1846
1908
|
}
|
1909
|
+
clearCacheAfterReflow();
|
1847
1910
|
animationCompleted();
|
1848
1911
|
},
|
1849
1912
|
|