From 2ee9b2717bfd532e93eb6d4037ae7ca7a5436957 Mon Sep 17 00:00:00 2001 From: Jon Stevens <latchkey@gmail.com> Date: Mon, 16 Jul 2012 16:01:11 -0700 Subject: [PATCH] namespace the events for popover/tooltip so that they can be cleanly removed. issue #3880 --- docs/templates/pages/javascript.mustache | 12 ++++++++++++ js/bootstrap-popover.js | 3 ++- js/bootstrap-tooltip.js | 7 ++++--- js/tests/unit/bootstrap-popover.js | 6 ++++-- js/tests/unit/bootstrap-tooltip.js | 6 ++++-- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/docs/templates/pages/javascript.mustache b/docs/templates/pages/javascript.mustache index 81ef75209d..49d065c326 100644 --- a/docs/templates/pages/javascript.mustache +++ b/docs/templates/pages/javascript.mustache @@ -754,6 +754,12 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <p>{{_i}}Object structure is: <code>delay: { show: 500, hide: 100 }</code>{{/i}}</p> </td> </tr> + <tr> + <td>{{_i}}ns{{/i}}</td> + <td>{{_i}}string{{/i}}</td> + <td>'.tooltip'</td> + <td>{{_i}}jQuery event namespace{{/i}}</td> + </tr> </tbody> </table> <div class="alert alert-info"> @@ -912,6 +918,12 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <p>{{_i}}Object structure is: <code>delay: { show: 500, hide: 100 }</code>{{/i}}</p> </td> </tr> + <tr> + <td>{{_i}}ns{{/i}}</td> + <td>{{_i}}string{{/i}}</td> + <td>'.popover'</td> + <td>{{_i}}jQuery event namespace{{/i}}</td> + </tr> </tbody> </table> <div class="alert alert-info"> diff --git a/js/bootstrap-popover.js b/js/bootstrap-popover.js index fe22ecb47c..845108b9ba 100644 --- a/js/bootstrap-popover.js +++ b/js/bootstrap-popover.js @@ -72,7 +72,7 @@ } , destroy: function () { - this.$element.off().removeData('popover') + this.$element.off(this.options.ns).removeData('popover') } }) @@ -97,6 +97,7 @@ placement: 'right' , content: '' , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>' + , ns: '.popover' }) }(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-tooltip.js b/js/bootstrap-tooltip.js index f280e36966..02f84d470d 100644 --- a/js/bootstrap-tooltip.js +++ b/js/bootstrap-tooltip.js @@ -47,8 +47,8 @@ if (this.options.trigger != 'manual') { eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this)) + this.$element.on(eventIn + this.options.ns, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + this.options.ns, this.options.selector, $.proxy(this.leave, this)) } this.options.selector ? @@ -236,7 +236,7 @@ } , destroy: function () { - this.$element.off().removeData('tooltip') + this.$element.off(this.options.ns).removeData('tooltip') } } @@ -266,6 +266,7 @@ , title: '' , delay: 0 , html: true + , ns: '.tooltip' } }(window.jQuery); diff --git a/js/tests/unit/bootstrap-popover.js b/js/tests/unit/bootstrap-popover.js index 6d5d9f7a18..290be827ff 100644 --- a/js/tests/unit/bootstrap-popover.js +++ b/js/tests/unit/bootstrap-popover.js @@ -92,12 +92,14 @@ $(function () { }) test("should destroy popover", function () { - var popover = $('<div/>').popover() + var popover = $('<div/>').popover().on('click.foo', function(){}) ok(popover.data('popover'), 'popover has data') ok(popover.data('events').mouseover && popover.data('events').mouseout, 'popover has hover event') + ok(popover.data('events').click[0].namespace == 'foo', 'popover has extra click.foo event') popover.popover('destroy') ok(!popover.data('popover'), 'popover does not have data') - ok(!popover.data('events'), 'popover does not have any events') + ok(popover.data('events').click[0].namespace == 'foo', 'popover still has click.foo') + ok(!popover.data('events').mouseover && !popover.data('events').mouseout, 'popover does not have any events') }) }) \ No newline at end of file diff --git a/js/tests/unit/bootstrap-tooltip.js b/js/tests/unit/bootstrap-tooltip.js index 7852305c1e..66bbeac7ec 100644 --- a/js/tests/unit/bootstrap-tooltip.js +++ b/js/tests/unit/bootstrap-tooltip.js @@ -129,12 +129,14 @@ $(function () { }) test("should destroy tooltip", function () { - var tooltip = $('<div/>').tooltip() + var tooltip = $('<div/>').tooltip().on('click.foo', function(){}) ok(tooltip.data('tooltip'), 'tooltip has data') ok(tooltip.data('events').mouseover && tooltip.data('events').mouseout, 'tooltip has hover event') + ok(tooltip.data('events').click[0].namespace == 'foo', 'tooltip has extra click.foo event') tooltip.tooltip('destroy') ok(!tooltip.data('tooltip'), 'tooltip does not have data') - ok(!tooltip.data('events'), 'tooltip does not have any events') + ok(tooltip.data('events').click[0].namespace == 'foo', 'tooltip still has click.foo') + ok(!tooltip.data('events').mouseover && !tooltip.data('events').mouseout, 'tooltip does not have any events') }) }) -- GitLab