From bccc2cb7191eb54a4d67563625a748d7ecd381d4 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sat, 24 Mar 2012 18:20:09 -0700 Subject: [PATCH] add preventDefault support for all inital event types (show, close, hide, etc.) + fix small bug with scrollspy.last --- docs/assets/bootstrap.zip | Bin 56207 -> 56306 bytes docs/assets/js/bootstrap-alert.js | 9 +++++---- docs/assets/js/bootstrap-carousel.js | 7 +++++-- docs/assets/js/bootstrap-collapse.js | 12 ++++++----- docs/assets/js/bootstrap-scrollspy.js | 4 ++-- docs/assets/js/bootstrap-tab.js | 10 ++++++--- js/bootstrap-alert.js | 9 +++++---- js/bootstrap-carousel.js | 7 +++++-- js/bootstrap-collapse.js | 12 ++++++----- js/bootstrap-scrollspy.js | 4 ++-- js/bootstrap-tab.js | 10 ++++++--- js/tests/index.html | 2 ++ js/tests/unit/bootstrap-alert.js | 15 ++++++++++++++ js/tests/unit/bootstrap-carousel.js | 28 ++++++++++++++++++++++++++ js/tests/unit/bootstrap-collapse.js | 15 ++++++++++++++ js/tests/unit/bootstrap-tab.js | 16 +++++++++++++++ 16 files changed, 128 insertions(+), 32 deletions(-) create mode 100644 js/tests/unit/bootstrap-carousel.js diff --git a/docs/assets/bootstrap.zip b/docs/assets/bootstrap.zip index 8ad9a0695f35dbc9fc933318dd661d1ed85f5cac..594fb24db8cf2d9287ba4f0559891cbf0e78c526 100644 GIT binary patch delta 15076 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 delta 14982 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 diff --git a/docs/assets/js/bootstrap-alert.js b/docs/assets/js/bootstrap-alert.js index d17f44e150..7a1607da15 100644 --- a/docs/assets/js/bootstrap-alert.js +++ b/docs/assets/js/bootstrap-alert.js @@ -45,15 +45,16 @@ } $parent = $(selector) - $parent.trigger('close') e && e.preventDefault() $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - $parent - .trigger('close') - .removeClass('in') + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') function removeElement() { $parent diff --git a/docs/assets/js/bootstrap-carousel.js b/docs/assets/js/bootstrap-carousel.js index 7db5bea333..8ce7418d22 100644 --- a/docs/assets/js/bootstrap-carousel.js +++ b/docs/assets/js/bootstrap-carousel.js @@ -86,6 +86,7 @@ , direction = type == 'next' ? 'left' : 'right' , fallback = type == 'next' ? 'first' : 'last' , that = this + , e = $.Event('slide') this.sliding = true @@ -96,11 +97,12 @@ if ($next.hasClass('active')) return 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) $next.addClass(direction) - this.$element.trigger('slide') this.$element.one($.support.transition.end, function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) @@ -108,7 +110,8 @@ setTimeout(function () { that.$element.trigger('slid') }, 0) }) } else { - this.$element.trigger('slide') + this.$element.trigger(e) + if (e.isDefaultPrevented()) return $active.removeClass('active') $next.addClass('active') this.sliding = false diff --git a/docs/assets/js/bootstrap-collapse.js b/docs/assets/js/bootstrap-collapse.js index 16b91eb244..478eea3912 100644 --- a/docs/assets/js/bootstrap-collapse.js +++ b/docs/assets/js/bootstrap-collapse.js @@ -61,7 +61,7 @@ } this.$element[dimension](0) - this.transition('addClass', 'show', 'shown') + this.transition('addClass', $.Event('show'), 'shown') this.$element[dimension](this.$element[0][scroll]) } @@ -70,7 +70,7 @@ if (this.transitioning) return dimension = this.dimension() this.reset(this.$element[dimension]()) - this.transition('removeClass', 'hide', 'hidden') + this.transition('removeClass', $.Event('hide'), 'hidden') this.$element[dimension](0) } @@ -95,11 +95,13 @@ that.$element.trigger(completeEvent) } + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + this.transitioning = 1 - this.$element - .trigger(startEvent) - [method]('in') + this.$element[method]('in') $.support.transition && this.$element.hasClass('collapse') ? this.$element.one($.support.transition.end, complete) : diff --git a/docs/assets/js/bootstrap-scrollspy.js b/docs/assets/js/bootstrap-scrollspy.js index bd3f106044..c02e263b0e 100644 --- a/docs/assets/js/bootstrap-scrollspy.js +++ b/docs/assets/js/bootstrap-scrollspy.js @@ -46,8 +46,8 @@ var self = this , $targets - this.offsets = [] - this.targets = [] + this.offsets = $([]) + this.targets = $([]) $targets = this.$body .find(this.selector) diff --git a/docs/assets/js/bootstrap-tab.js b/docs/assets/js/bootstrap-tab.js index b3938f6714..974cc0aca2 100644 --- a/docs/assets/js/bootstrap-tab.js +++ b/docs/assets/js/bootstrap-tab.js @@ -39,6 +39,7 @@ , selector = $this.attr('data-target') , previous , $target + , e if (!selector) { selector = $this.attr('href') @@ -49,11 +50,14 @@ previous = $ul.find('.active a').last()[0] - $this.trigger({ - type: 'show' - , relatedTarget: previous + e = $.Event('show', { + relatedTarget: previous }) + $this.trigger(e) + + if (e.isDefaultPrevented()) return + $target = $(selector) this.activate($this.parent('li'), $ul) diff --git a/js/bootstrap-alert.js b/js/bootstrap-alert.js index d17f44e150..7a1607da15 100644 --- a/js/bootstrap-alert.js +++ b/js/bootstrap-alert.js @@ -45,15 +45,16 @@ } $parent = $(selector) - $parent.trigger('close') e && e.preventDefault() $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - $parent - .trigger('close') - .removeClass('in') + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') function removeElement() { $parent diff --git a/js/bootstrap-carousel.js b/js/bootstrap-carousel.js index 7db5bea333..8ce7418d22 100644 --- a/js/bootstrap-carousel.js +++ b/js/bootstrap-carousel.js @@ -86,6 +86,7 @@ , direction = type == 'next' ? 'left' : 'right' , fallback = type == 'next' ? 'first' : 'last' , that = this + , e = $.Event('slide') this.sliding = true @@ -96,11 +97,12 @@ if ($next.hasClass('active')) return 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) $next.addClass(direction) - this.$element.trigger('slide') this.$element.one($.support.transition.end, function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) @@ -108,7 +110,8 @@ setTimeout(function () { that.$element.trigger('slid') }, 0) }) } else { - this.$element.trigger('slide') + this.$element.trigger(e) + if (e.isDefaultPrevented()) return $active.removeClass('active') $next.addClass('active') this.sliding = false diff --git a/js/bootstrap-collapse.js b/js/bootstrap-collapse.js index 16b91eb244..478eea3912 100644 --- a/js/bootstrap-collapse.js +++ b/js/bootstrap-collapse.js @@ -61,7 +61,7 @@ } this.$element[dimension](0) - this.transition('addClass', 'show', 'shown') + this.transition('addClass', $.Event('show'), 'shown') this.$element[dimension](this.$element[0][scroll]) } @@ -70,7 +70,7 @@ if (this.transitioning) return dimension = this.dimension() this.reset(this.$element[dimension]()) - this.transition('removeClass', 'hide', 'hidden') + this.transition('removeClass', $.Event('hide'), 'hidden') this.$element[dimension](0) } @@ -95,11 +95,13 @@ that.$element.trigger(completeEvent) } + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + this.transitioning = 1 - this.$element - .trigger(startEvent) - [method]('in') + this.$element[method]('in') $.support.transition && this.$element.hasClass('collapse') ? this.$element.one($.support.transition.end, complete) : diff --git a/js/bootstrap-scrollspy.js b/js/bootstrap-scrollspy.js index bd3f106044..c02e263b0e 100644 --- a/js/bootstrap-scrollspy.js +++ b/js/bootstrap-scrollspy.js @@ -46,8 +46,8 @@ var self = this , $targets - this.offsets = [] - this.targets = [] + this.offsets = $([]) + this.targets = $([]) $targets = this.$body .find(this.selector) diff --git a/js/bootstrap-tab.js b/js/bootstrap-tab.js index b3938f6714..974cc0aca2 100644 --- a/js/bootstrap-tab.js +++ b/js/bootstrap-tab.js @@ -39,6 +39,7 @@ , selector = $this.attr('data-target') , previous , $target + , e if (!selector) { selector = $this.attr('href') @@ -49,11 +50,14 @@ previous = $ul.find('.active a').last()[0] - $this.trigger({ - type: 'show' - , relatedTarget: previous + e = $.Event('show', { + relatedTarget: previous }) + $this.trigger(e) + + if (e.isDefaultPrevented()) return + $target = $(selector) this.activate($this.parent('li'), $ul) diff --git a/js/tests/index.html b/js/tests/index.html index 2d59ab0321..3e6cb9777c 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -15,6 +15,7 @@ + @@ -28,6 +29,7 @@ + diff --git a/js/tests/unit/bootstrap-alert.js b/js/tests/unit/bootstrap-alert.js index e607f43402..7f24e0e6be 100644 --- a/js/tests/unit/bootstrap-alert.js +++ b/js/tests/unit/bootstrap-alert.js @@ -38,4 +38,19 @@ $(function () { ok(!$('#qunit-fixture').find('.alert-message').length, 'element removed from dom') }) + test("should not fire closed when close is prevented", function () { + $.support.transition = false + stop(); + $('
') + .bind('close', function (e) { + e.preventDefault(); + ok(true); + start(); + }) + .bind('closed', function () { + ok(false); + }) + .alert('close') + }) + }) \ No newline at end of file diff --git a/js/tests/unit/bootstrap-carousel.js b/js/tests/unit/bootstrap-carousel.js new file mode 100644 index 0000000000..92c23e227c --- /dev/null +++ b/js/tests/unit/bootstrap-carousel.js @@ -0,0 +1,28 @@ +$(function () { + + module("bootstrap-carousel") + + test("should be defined on jquery object", function () { + ok($(document.body).carousel, 'carousel method is defined') + }) + + test("should return element", function () { + ok($(document.body).carousel()[0] == document.body, 'document.body returned') + }) + + test("should not fire sliden when slide is prevented", function () { + $.support.transition = false + stop(); + $('