]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
More tooltip refactoring (#35546)
authorGeoSot <geo.sotis@gmail.com>
Sun, 30 Jan 2022 15:39:03 +0000 (17:39 +0200)
committerGitHub <noreply@github.com>
Sun, 30 Jan 2022 15:39:03 +0000 (17:39 +0200)
* Tooltip.js: move `shown` check to method

* Tooltip.js: move Popper's creation to method

* Tooltip.js: merge checks before `hide`

* Tooltip.js: minor refactoring on `toggle` method

js/src/tooltip.js

index 32f9cb91c2bc6a8e4af0a8bb2b653117ac72dd0e..ef5b9fa825a261c9841138608a1a40efd9cee1df 100644 (file)
@@ -178,14 +178,16 @@ class Tooltip extends BaseComponent {
       } else {
         context._leave()
       }
-    } else {
-      if (this._getTipElement().classList.contains(CLASS_NAME_SHOW)) {
-        this._leave()
-        return
-      }
 
-      this._enter()
+      return
+    }
+
+    if (this._isShown()) {
+      this._leave()
+      return
     }
+
+    this._enter()
   }
 
   dispose() {
@@ -234,11 +236,7 @@ class Tooltip extends BaseComponent {
     if (this._popper) {
       this._popper.update()
     } else {
-      const placement = typeof this._config.placement === 'function' ?
-        this._config.placement.call(this, tip, this._element) :
-        this._config.placement
-      const attachment = AttachmentMap[placement.toUpperCase()]
-      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
+      this._createPopper(tip)
     }
 
     tip.classList.add(CLASS_NAME_SHOW)
@@ -268,7 +266,7 @@ class Tooltip extends BaseComponent {
   }
 
   hide() {
-    if (!this._popper) {
+    if (!this._isShown()) {
       return
     }
 
@@ -291,6 +289,7 @@ class Tooltip extends BaseComponent {
     this._activeTrigger[TRIGGER_CLICK] = false
     this._activeTrigger[TRIGGER_FOCUS] = false
     this._activeTrigger[TRIGGER_HOVER] = false
+    this._isHovered = false
 
     const complete = () => {
       if (this._isWithActiveTrigger()) {
@@ -308,7 +307,6 @@ class Tooltip extends BaseComponent {
     }
 
     this._queueCallback(complete, this.tip, this._isAnimated())
-    this._isHovered = false
   }
 
   update() {
@@ -356,7 +354,7 @@ class Tooltip extends BaseComponent {
   setContent(content) {
     let isShown = false
     if (this.tip) {
-      isShown = this.tip.classList.contains(CLASS_NAME_SHOW)
+      isShown = this._isShown()
       this.tip.remove()
       this.tip = null
     }
@@ -404,6 +402,18 @@ class Tooltip extends BaseComponent {
     return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))
   }
 
+  _isShown() {
+    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)
+  }
+
+  _createPopper(tip) {
+    const placement = typeof this._config.placement === 'function' ?
+      this._config.placement.call(this, tip, this._element) :
+      this._config.placement
+    const attachment = AttachmentMap[placement.toUpperCase()]
+    this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
+  }
+
   _getOffset() {
     const { offset } = this._config
 
@@ -532,7 +542,7 @@ class Tooltip extends BaseComponent {
   }
 
   _enter() {
-    if (this._getTipElement().classList.contains(CLASS_NAME_SHOW) || this._isHovered) {
+    if (this._isShown() || this._isHovered) {
       this._isHovered = true
       return
     }