diff --git a/Makefile b/Makefile
index a0ad78d694e5..ae76c66c1ceb 100644
--- a/Makefile
+++ b/Makefile
@@ -36,7 +36,7 @@ bootstrap:
jshint js/tests/unit/*.js --config js/.jshintrc
cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js > bootstrap/js/bootstrap.js
uglifyjs -nc bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.min.tmp.js
- echo "/**\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > bootstrap/js/copyright.js
+ echo "/*!\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > bootstrap/js/copyright.js
cat bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js > bootstrap/js/bootstrap.min.js
rm bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js
diff --git a/docs/assets/bootstrap.zip b/docs/assets/bootstrap.zip
index b56fe6e2adbd..21104d0b3e2f 100644
Binary files a/docs/assets/bootstrap.zip and b/docs/assets/bootstrap.zip differ
diff --git a/docs/assets/js/bootstrap-scrollspy.js b/docs/assets/js/bootstrap-scrollspy.js
index 3dee609c732c..c67f1c8aa806 100644
--- a/docs/assets/js/bootstrap-scrollspy.js
+++ b/docs/assets/js/bootstrap-scrollspy.js
@@ -94,16 +94,15 @@
this.activeTarget = target
- this.$body
- .find(this.selector).parent('.active')
+ $(this.selector)
+ .parent('.active')
.removeClass('active')
- active = this.$body
- .find(this.selector + '[href="' + target + '"]')
+ active = $(this.selector + '[href="' + target + '"]')
.parent('li')
.addClass('active')
- if ( active.parent('.dropdown-menu') ) {
+ if (active.parent('.dropdown-menu')) {
active = active.closest('li.dropdown').addClass('active')
}
diff --git a/docs/assets/js/bootstrap-tooltip.js b/docs/assets/js/bootstrap-tooltip.js
index 454e7a4484db..af2e589687e5 100644
--- a/docs/assets/js/bootstrap-tooltip.js
+++ b/docs/assets/js/bootstrap-tooltip.js
@@ -72,33 +72,25 @@
, enter: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
- if (!self.options.delay || !self.options.delay.show) {
- self.show()
- } else {
- clearTimeout(this.timeout)
- self.hoverState = 'in'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'in') {
- self.show()
- }
- }, self.options.delay.show)
- }
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ clearTimeout(this.timeout)
+ self.hoverState = 'in'
+ this.timeout = setTimeout(function() {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
}
, leave: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
- if (!self.options.delay || !self.options.delay.hide) {
- self.hide()
- } else {
- clearTimeout(this.timeout)
- self.hoverState = 'out'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'out') {
- self.hide()
- }
- }, self.options.delay.hide)
- }
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ clearTimeout(this.timeout)
+ self.hoverState = 'out'
+ this.timeout = setTimeout(function() {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
}
, show: function () {
diff --git a/js/bootstrap-scrollspy.js b/js/bootstrap-scrollspy.js
index 3dee609c732c..c67f1c8aa806 100644
--- a/js/bootstrap-scrollspy.js
+++ b/js/bootstrap-scrollspy.js
@@ -94,16 +94,15 @@
this.activeTarget = target
- this.$body
- .find(this.selector).parent('.active')
+ $(this.selector)
+ .parent('.active')
.removeClass('active')
- active = this.$body
- .find(this.selector + '[href="' + target + '"]')
+ active = $(this.selector + '[href="' + target + '"]')
.parent('li')
.addClass('active')
- if ( active.parent('.dropdown-menu') ) {
+ if (active.parent('.dropdown-menu')) {
active = active.closest('li.dropdown').addClass('active')
}
diff --git a/js/bootstrap-tooltip.js b/js/bootstrap-tooltip.js
index 454e7a4484db..af2e589687e5 100644
--- a/js/bootstrap-tooltip.js
+++ b/js/bootstrap-tooltip.js
@@ -72,33 +72,25 @@
, enter: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
- if (!self.options.delay || !self.options.delay.show) {
- self.show()
- } else {
- clearTimeout(this.timeout)
- self.hoverState = 'in'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'in') {
- self.show()
- }
- }, self.options.delay.show)
- }
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ clearTimeout(this.timeout)
+ self.hoverState = 'in'
+ this.timeout = setTimeout(function() {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
}
, leave: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
- if (!self.options.delay || !self.options.delay.hide) {
- self.hide()
- } else {
- clearTimeout(this.timeout)
- self.hoverState = 'out'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'out') {
- self.hide()
- }
- }, self.options.delay.hide)
- }
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ clearTimeout(this.timeout)
+ self.hoverState = 'out'
+ this.timeout = setTimeout(function() {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
}
, show: function () {
diff --git a/js/tests/unit/bootstrap-tooltip.js b/js/tests/unit/bootstrap-tooltip.js
index f6e00089b1ca..63f4f0b07cb6 100644
--- a/js/tests/unit/bootstrap-tooltip.js
+++ b/js/tests/unit/bootstrap-tooltip.js
@@ -59,6 +59,56 @@ $(function () {
ok(!$(".tooltip").length, 'tooltip removed')
})
+ test("should not show tooltip if leave event occurs before delay expires", function () {
+ var tooltip = $('')
+ .appendTo('#qunit-fixture')
+ .tooltip({ delay: 200 })
+
+ stop()
+
+ tooltip.trigger('mouseenter')
+
+ setTimeout(function () {
+ ok(!$(".tooltip").hasClass('fade in'), 'tooltip is not faded in')
+ tooltip.trigger('mouseout')
+ setTimeout(function () {
+ ok(!$(".tooltip").hasClass('fade in'), 'tooltip is not faded in')
+ start()
+ }, 200)
+ }, 100)
+ })
+
+ test("should not show tooltip if leave event occurs before delay expires", function () {
+ var tooltip = $('')
+ .appendTo('#qunit-fixture')
+ .tooltip({ delay: 100 })
+ stop()
+ tooltip.trigger('mouseenter')
+ setTimeout(function () {
+ ok(!$(".tooltip").hasClass('fade in'), 'tooltip is not faded in')
+ tooltip.trigger('mouseout')
+ setTimeout(function () {
+ ok(!$(".tooltip").hasClass('fade in'), 'tooltip is not faded in')
+ start()
+ }, 100)
+ }, 50)
+ })
+
+ test("should show tooltip if leave event hasn't occured before delay expires", function () {
+ var tooltip = $('')
+ .appendTo('#qunit-fixture')
+ .tooltip({ delay: 200 })
+ stop()
+ tooltip.trigger('mouseenter')
+ setTimeout(function () {
+ ok(!$(".tooltip").hasClass('fade in'), 'tooltip is not faded in')
+ setTimeout(function () {
+ ok(!$(".tooltip").hasClass('fade in'), 'tooltip has faded in')
+ start()
+ }, 200)
+ }, 100)
+ })
+
test("should detect if title string is html or text: foo", function () {
ok(!$.fn.tooltip.Constructor.prototype.isHTML('foo'), 'correctly detected html')
})