@@ -8,39 +8,43 @@ angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition'])
8
8
var initialAnimSkip = true ;
9
9
var currentTransition ;
10
10
11
- function resetCurrentTransition ( ) {
12
- currentTransition = undefined ;
13
- }
14
-
15
11
function doTransition ( change ) {
12
+ var newTransition = $transition ( element , change ) ;
16
13
if ( currentTransition ) {
17
14
currentTransition . cancel ( ) ;
18
15
}
19
- ( currentTransition = $transition ( element , change ) ) . then ( resetCurrentTransition , resetCurrentTransition ) ;
20
- return currentTransition ;
16
+ currentTransition = newTransition ;
17
+ newTransition . then ( newTransitionDone , newTransitionDone ) ;
18
+ return newTransition ;
19
+
20
+ function newTransitionDone ( ) {
21
+ // Make sure it's this transition, otherwise, leave it alone.
22
+ if ( currentTransition === newTransition ) {
23
+ currentTransition = undefined ;
24
+ }
25
+ }
21
26
}
22
27
23
28
function expand ( ) {
24
29
if ( initialAnimSkip ) {
25
30
initialAnimSkip = false ;
26
- element . removeClass ( 'collapsing' ) ;
27
- element . addClass ( 'collapse in' ) ;
28
- element . css ( { height : 'auto' } ) ;
31
+ expandDone ( ) ;
29
32
} else {
30
33
element . removeClass ( 'collapse' ) . addClass ( 'collapsing' ) ;
31
- doTransition ( { height : element [ 0 ] . scrollHeight + 'px' } ) . then ( function ( ) {
32
- element . removeClass ( 'collapsing' ) ;
33
- element . addClass ( 'collapse in' ) ;
34
- element . css ( { height : 'auto' } ) ;
35
- } ) ;
34
+ doTransition ( { height : element [ 0 ] . scrollHeight + 'px' } ) . then ( expandDone ) ;
36
35
}
37
36
}
38
37
38
+ function expandDone ( ) {
39
+ element . removeClass ( 'collapsing' ) ;
40
+ element . addClass ( 'collapse in' ) ;
41
+ element . css ( { height : 'auto' } ) ;
42
+ }
43
+
39
44
function collapse ( ) {
40
45
if ( initialAnimSkip ) {
41
46
initialAnimSkip = false ;
42
- element . removeClass ( 'collapsing' ) ;
43
- element . addClass ( 'collapse' ) ;
47
+ collapseDone ( ) ;
44
48
element . css ( { height : 0 } ) ;
45
49
} else {
46
50
// CSS transitions don't work with height: auto, so we have to manually change the height to a specific value
@@ -50,13 +54,15 @@ angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition'])
50
54
51
55
element . removeClass ( 'collapse in' ) . addClass ( 'collapsing' ) ;
52
56
53
- doTransition ( { height : 0 } ) . then ( function ( ) {
54
- element . removeClass ( 'collapsing' ) ;
55
- element . addClass ( 'collapse' ) ;
56
- } ) ;
57
+ doTransition ( { height : 0 } ) . then ( collapseDone ) ;
57
58
}
58
59
}
59
60
61
+ function collapseDone ( ) {
62
+ element . removeClass ( 'collapsing' ) ;
63
+ element . addClass ( 'collapse' ) ;
64
+ }
65
+
60
66
scope . $watch ( attrs . collapse , function ( shouldCollapse ) {
61
67
if ( shouldCollapse ) {
62
68
collapse ( ) ;
0 commit comments