]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
handle detached tooltip when we try to hide a modal
authorJohann-S <johann.servoire@gmail.com>
Fri, 2 Nov 2018 09:24:35 +0000 (10:24 +0100)
committerJohann-S <johann.servoire@gmail.com>
Fri, 2 Nov 2018 12:39:58 +0000 (13:39 +0100)
js/src/tooltip.js
js/tests/unit/tooltip.js

index 3d3130bb5b10e608f599d4f3b8d6f22ad9d5faf3..cf8b8e1186817b14b37946a5842d51d1d92ef02a 100644 (file)
@@ -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,
index 9cf3068a3636ef9b958db066ec198066f58a5023..7652d4cf869c79891dfef3166aa38e8abbad483e 100644 (file)
@@ -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)
+  })
 })