diff options
-rw-r--r-- | js/src/tooltip.js | 14 | ||||
-rw-r--r-- | js/tests/unit/tooltip.js | 58 |
2 files changed, 67 insertions, 5 deletions
diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 3d3130bb5b..cf8b8e1186 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -486,13 +486,17 @@ class Tooltip { (event) => this._leave(event) ) } - - $(this.element).closest('.modal').on( - 'hide.bs.modal', - () => this.hide() - ) }) + $(this.element).closest('.modal').on( + 'hide.bs.modal', + () => { + if (this.element) { + this.hide() + } + } + ) + if (this.config.selector) { this.config = { ...this.config, diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js index 9cf3068a36..7652d4cf86 100644 --- a/js/tests/unit/tooltip.js +++ b/js/tests/unit/tooltip.js @@ -862,6 +862,44 @@ $(function () { .modal('show') }) + QUnit.test('should allow to close modal if the tooltip element is detached', function (assert) { + assert.expect(1) + var done = assert.async() + var templateHTML = [ + '<div id="modal-test" class="modal">', + ' <div class="modal-dialog" role="document">', + ' <div class="modal-content">', + ' <div class="modal-body">', + ' <a id="tooltipTest" href="#" data-toggle="tooltip" title="Some tooltip text!">Tooltip</a>', + ' </div>', + ' </div>', + ' </div>', + '</div>' + ].join('') + + $(templateHTML).appendTo('#qunit-fixture') + var $tooltip = $('#tooltipTest') + var $modal = $('#modal-test') + + $tooltip.on('shown.bs.tooltip', function () { + $tooltip.detach() + $tooltip.bootstrapTooltip('dispose') + $modal.modal('hide') + }) + + $modal.on('shown.bs.modal', function () { + $tooltip.bootstrapTooltip({ + trigger: 'manuel' + }) + .bootstrapTooltip('show') + }) + .on('hidden.bs.modal', function () { + assert.ok(true, 'modal hidden') + done() + }) + .modal('show') + }) + QUnit.test('should reset tip classes when hidden event triggered', function (assert) { assert.expect(2) var done = assert.async() @@ -966,4 +1004,24 @@ $(function () { assert.ok(tooltip.tip === $tipTest[0]) }) + + QUnit.test('should toggle enabled', function (assert) { + assert.expect(3) + + var $tooltip = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>') + .appendTo('#qunit-fixture') + .bootstrapTooltip() + + var tooltip = $tooltip.data('bs.tooltip') + + assert.strictEqual(tooltip._isEnabled, true) + + tooltip.toggleEnabled() + + assert.strictEqual(tooltip._isEnabled, false) + + tooltip.toggleEnabled() + + assert.strictEqual(tooltip._isEnabled, true) + }) }) |