aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Thornton <[email protected]>2012-03-24 18:20:09 -0700
committerJacob Thornton <[email protected]>2012-03-24 18:20:09 -0700
commitbccc2cb7191eb54a4d67563625a748d7ecd381d4 (patch)
treec4562643867c197b7f7f5792694e3e10aab8de52
parentef5ac02b698ffab3a42d21f20859b70df85543c0 (diff)
downloadbootstrap-bccc2cb7191eb54a4d67563625a748d7ecd381d4.tar.xz
bootstrap-bccc2cb7191eb54a4d67563625a748d7ecd381d4.zip
add preventDefault support for all inital event types (show, close, hide, etc.) + fix small bug with scrollspy.last
-rw-r--r--docs/assets/bootstrap.zipbin56207 -> 56306 bytes
-rw-r--r--docs/assets/js/bootstrap-alert.js9
-rw-r--r--docs/assets/js/bootstrap-carousel.js7
-rw-r--r--docs/assets/js/bootstrap-collapse.js12
-rw-r--r--docs/assets/js/bootstrap-scrollspy.js4
-rw-r--r--docs/assets/js/bootstrap-tab.js10
-rw-r--r--js/bootstrap-alert.js9
-rw-r--r--js/bootstrap-carousel.js7
-rw-r--r--js/bootstrap-collapse.js12
-rw-r--r--js/bootstrap-scrollspy.js4
-rw-r--r--js/bootstrap-tab.js10
-rw-r--r--js/tests/index.html2
-rw-r--r--js/tests/unit/bootstrap-alert.js15
-rw-r--r--js/tests/unit/bootstrap-carousel.js28
-rw-r--r--js/tests/unit/bootstrap-collapse.js15
-rw-r--r--js/tests/unit/bootstrap-tab.js16
16 files changed, 128 insertions, 32 deletions
diff --git a/docs/assets/bootstrap.zip b/docs/assets/bootstrap.zip
index 8ad9a0695..594fb24db 100644
--- a/docs/assets/bootstrap.zip
+++ b/docs/assets/bootstrap.zip
Binary files differ
diff --git a/docs/assets/js/bootstrap-alert.js b/docs/assets/js/bootstrap-alert.js
index d17f44e15..7a1607da1 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 7db5bea33..8ce7418d2 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 16b91eb24..478eea391 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 bd3f10604..c02e263b0 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 b3938f671..974cc0aca 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 d17f44e15..7a1607da1 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 7db5bea33..8ce7418d2 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 16b91eb24..478eea391 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 bd3f10604..c02e263b0 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 b3938f671..974cc0aca 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 2d59ab032..3e6cb9777 100644
--- a/js/tests/index.html
+++ b/js/tests/index.html
@@ -15,6 +15,7 @@
<script src="../../js/bootstrap-transition.js"></script>
<script src="../../js/bootstrap-alert.js"></script>
<script src="../../js/bootstrap-button.js"></script>
+ <script src="../../js/bootstrap-carousel.js"></script>
<script src="../../js/bootstrap-collapse.js"></script>
<script src="../../js/bootstrap-dropdown.js"></script>
<script src="../../js/bootstrap-modal.js"></script>
@@ -28,6 +29,7 @@
<script src="unit/bootstrap-transition.js"></script>
<script src="unit/bootstrap-alert.js"></script>
<script src="unit/bootstrap-button.js"></script>
+ <script src="unit/bootstrap-carousel.js"></script>
<script src="unit/bootstrap-collapse.js"></script>
<script src="unit/bootstrap-dropdown.js"></script>
<script src="unit/bootstrap-modal.js"></script>
diff --git a/js/tests/unit/bootstrap-alert.js b/js/tests/unit/bootstrap-alert.js
index e607f4340..7f24e0e6b 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();
+ $('<div class="alert"/>')
+ .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 000000000..92c23e227
--- /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();
+ $('<div class="carousel"/>')
+ .bind('slide', function (e) {
+ e.preventDefault();
+ ok(true);
+ start();
+ })
+ .bind('slid', function () {
+ ok(false);
+ })
+ .carousel('next')
+ })
+
+}) \ No newline at end of file
diff --git a/js/tests/unit/bootstrap-collapse.js b/js/tests/unit/bootstrap-collapse.js
index 698238d96..8e52898b5 100644
--- a/js/tests/unit/bootstrap-collapse.js
+++ b/js/tests/unit/bootstrap-collapse.js
@@ -22,4 +22,19 @@ $(function () {
ok(/height/.test(el.attr('style')), 'has height set')
})
+ test("should not fire shown when show is prevented", function () {
+ $.support.transition = false
+ stop();
+ $('<div class="collapse"/>')
+ .bind('show', function (e) {
+ e.preventDefault();
+ ok(true);
+ start();
+ })
+ .bind('shown', function () {
+ ok(false);
+ })
+ .collapse('show')
+ })
+
}) \ No newline at end of file
diff --git a/js/tests/unit/bootstrap-tab.js b/js/tests/unit/bootstrap-tab.js
index 18f490fa5..987804781 100644
--- a/js/tests/unit/bootstrap-tab.js
+++ b/js/tests/unit/bootstrap-tab.js
@@ -42,4 +42,20 @@ $(function () {
equals($("#qunit-fixture").find('.active').attr('id'), "home")
})
+
+ test("should not fire closed when close is prevented", function () {
+ $.support.transition = false
+ stop();
+ $('<div class="tab"/>')
+ .bind('show', function (e) {
+ e.preventDefault();
+ ok(true);
+ start();
+ })
+ .bind('shown', function () {
+ ok(false);
+ })
+ .tab('show')
+ })
+
}) \ No newline at end of file