7
7
*
8
8
*/
9
9
angular . module ( 'ui.bootstrap.carousel' , [ ] )
10
- . controller ( 'CarouselController' , [ '$scope' , '$element' , '$interval' , '$animate' , function ( $scope , $element , $interval , $animate ) {
10
+ . constant ( 'ANIMATE_CSS' , angular . version . minor >= 4 )
11
+ . controller ( 'CarouselController' , [ '$scope' , '$element' , '$interval' , '$animate' , 'ANIMATE_CSS' , function ( $scope , $element , $interval , $animate , ANIMATE_CSS ) {
11
12
var self = this ,
12
13
slides = self . slides = $scope . slides = [ ] ,
13
14
NO_TRANSITION = 'uib-noTransition' ,
@@ -40,9 +41,18 @@ angular.module('ui.bootstrap.carousel', [])
40
41
slide . $element ) {
41
42
slide . $element . data ( SLIDE_DIRECTION , slide . direction ) ;
42
43
$scope . $currentTransition = true ;
43
- slide . $element . one ( '$animate:close' , function closeFn ( ) {
44
- $scope . $currentTransition = null ;
45
- } ) ;
44
+ if ( ANIMATE_CSS ) {
45
+ $animate . on ( 'addClass' , slide . $element , function ( element , phase ) {
46
+ $scope . $currentTransition = null ;
47
+ if ( ! $scope . $currentTransition ) {
48
+ $animate . off ( 'addClass' , element ) ;
49
+ }
50
+ } ) ;
51
+ } else {
52
+ slide . $element . one ( '$animate:close' , function closeFn ( ) {
53
+ $scope . $currentTransition = null ;
54
+ } ) ;
55
+ }
46
56
}
47
57
48
58
self . currentSlide = slide ;
@@ -316,10 +326,18 @@ function CarouselDemoCtrl($scope) {
316
326
} )
317
327
318
328
. animation ( '.item' , [
319
- '$animate' ,
320
- function ( $animate ) {
329
+ '$injector' , '$ animate' , 'ANIMATE_CSS ',
330
+ function ( $injector , $ animate, ANIMATE_CSS ) {
321
331
var NO_TRANSITION = 'uib-noTransition' ,
322
- SLIDE_DIRECTION = 'uib-slideDirection' ;
332
+ SLIDE_DIRECTION = 'uib-slideDirection' ,
333
+ $animateCss = ANIMATE_CSS ? $injector . get ( '$animateCss' ) : null ;
334
+
335
+ function removeClass ( element , className , callback ) {
336
+ element . removeClass ( className ) ;
337
+ if ( callback ) {
338
+ callback ( ) ;
339
+ }
340
+ }
323
341
324
342
return {
325
343
beforeAddClass : function ( element , className , done ) {
@@ -329,13 +347,22 @@ function ($animate) {
329
347
var stopped = false ;
330
348
var direction = element . data ( SLIDE_DIRECTION ) ;
331
349
var directionClass = direction == 'next' ? 'left' : 'right' ;
350
+ var removeClassFn = removeClass . bind ( this , element ,
351
+ directionClass + ' ' + direction , done ) ;
332
352
element . addClass ( direction ) ;
333
- $animate . addClass ( element , directionClass ) . then ( function ( ) {
334
- if ( ! stopped ) {
335
- element . removeClass ( directionClass + ' ' + direction ) ;
336
- }
337
- done ( ) ;
338
- } ) ;
353
+
354
+ if ( $animateCss ) {
355
+ $animateCss ( element , { addClass : directionClass } )
356
+ . start ( )
357
+ . done ( removeClassFn ) ;
358
+ } else {
359
+ $animate . addClass ( element , directionClass ) . then ( function ( ) {
360
+ if ( ! stopped ) {
361
+ removeClassFn ( ) ;
362
+ }
363
+ done ( ) ;
364
+ } ) ;
365
+ }
339
366
340
367
return function ( ) {
341
368
stopped = true ;
@@ -345,17 +372,25 @@ function ($animate) {
345
372
} ,
346
373
beforeRemoveClass : function ( element , className , done ) {
347
374
// Due to transclusion, noTransition property is on parent's scope
348
- if ( className == 'active' && element . parent ( ) &&
375
+ if ( className === 'active' && element . parent ( ) &&
349
376
! element . parent ( ) . data ( NO_TRANSITION ) ) {
350
377
var stopped = false ;
351
378
var direction = element . data ( SLIDE_DIRECTION ) ;
352
379
var directionClass = direction == 'next' ? 'left' : 'right' ;
353
- $animate . addClass ( element , directionClass ) . then ( function ( ) {
354
- if ( ! stopped ) {
355
- element . removeClass ( directionClass ) ;
356
- }
357
- done ( ) ;
358
- } ) ;
380
+ var removeClassFn = removeClass . bind ( this , element , directionClass , done ) ;
381
+
382
+ if ( $animateCss ) {
383
+ $animateCss ( element , { addClass : directionClass } )
384
+ . start ( )
385
+ . done ( removeClassFn ) ;
386
+ } else {
387
+ $animate . addClass ( element , directionClass ) . then ( function ( ) {
388
+ if ( ! stopped ) {
389
+ removeClassFn ( ) ;
390
+ }
391
+ done ( ) ;
392
+ } ) ;
393
+ }
359
394
return function ( ) {
360
395
stopped = true ;
361
396
} ;
0 commit comments