]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
carousel: correctly reset when the slide event is prevented 10327/head
authorRoland Warmerdam <rowno@webspirited.com>
Sat, 31 Aug 2013 06:03:09 +0000 (18:03 +1200)
committerRoland Warmerdam <rowno@webspirited.com>
Sat, 31 Aug 2013 06:03:09 +0000 (18:03 +1200)
js/carousel.js
js/tests/unit/carousel.js

index d8c4c243caa153204bfa6447c8731bec63422dda..08d53b893d94f2468f152a7391556d871004c19e 100644 (file)
       $next = this.$element.find('.item')[fallback]()
     }
 
-    this.sliding = true
-
-    isCycling && this.pause()
+    if ($next.hasClass('active')) return
 
     var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
+    this.$element.trigger(e)
+    if (e.isDefaultPrevented()) return
 
-    if ($next.hasClass('active')) return
+    this.sliding = true
+
+    isCycling && this.pause()
 
     if (this.$indicators.length) {
       this.$indicators.find('.active').removeClass('active')
     }
 
     if ($.support.transition && this.$element.hasClass('slide')) {
-      this.$element.trigger(e)
-      if (e.isDefaultPrevented()) return
       $next.addClass(type)
       $next[0].offsetWidth // force reflow
       $active.addClass(direction)
         })
         .emulateTransitionEnd(600)
     } else {
-      this.$element.trigger(e)
-      if (e.isDefaultPrevented()) return
       $active.removeClass('active')
       $next.addClass('active')
       this.sliding = false
index badf0886d312305df38f0eced86cf95efff2e481..e1e34afaf68ec57645a477c43c33502f61cbe060 100644 (file)
@@ -16,7 +16,7 @@ $(function () {
         ok($(document.body).carousel()[0] == document.body, 'document.body returned')
       })
 
-      test("should not fire sliden when slide is prevented", function () {
+      test("should not fire slid when slide is prevented", function () {
         $.support.transition = false
         stop()
         $('<div class="carousel"/>')
@@ -31,6 +31,29 @@ $(function () {
           .carousel('next')
       })
 
+      test("should reset when slide is prevented", function () {
+        var template = '<div id="carousel-example-generic" class="carousel slide"><ol class="carousel-indicators"><li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li><li data-target="#carousel-example-generic" data-slide-to="1"></li><li data-target="#carousel-example-generic" data-slide-to="2"></li></ol><div class="carousel-inner"><div class="item active"><div class="carousel-caption"></div></div><div class="item"><div class="carousel-caption"></div></div><div class="item"><div class="carousel-caption"></div></div></div><a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"></a><a class="right carousel-control" href="#carousel-example-generic" data-slide="next"></a></div>'
+        var $carousel = $(template)
+        $.support.transition = false
+        stop()
+        $carousel.one('slide.bs.carousel', function (e) {
+          e.preventDefault()
+          setTimeout(function () {
+            ok($carousel.find('.item:eq(0)').is('.active'))
+            ok($carousel.find('.carousel-indicators li:eq(0)').is('.active'))
+            $carousel.carousel('next')
+          }, 1);
+        })
+        $carousel.one('slid.bs.carousel', function () {
+          setTimeout(function () {
+            ok($carousel.find('.item:eq(1)').is('.active'))
+            ok($carousel.find('.carousel-indicators li:eq(1)').is('.active'))
+            start()
+          }, 1);
+        })
+        $carousel.carousel('next')
+      })
+
       test("should fire slide event with direction", function () {
         var template = '<div id="myCarousel" class="carousel slide"><div class="carousel-inner"><div class="item active"><img alt=""><div class="carousel-caption"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class="left carousel-control" href="#myCarousel" data-slide="prev">&lsaquo;</a><a class="right carousel-control" href="#myCarousel" data-slide="next">&rsaquo;</a></div>'
         $.support.transition = false