From 460abc9cf5f26d68ce16e392c9accbb20ae483fc Mon Sep 17 00:00:00 2001
From: Rohit Sharma <rohit2sharma95@gmail.com>
Date: Tue, 25 May 2021 22:50:49 +0530
Subject: [PATCH] Move defineJQueryPlugin in the base component

---
 js/src/alert.js          | 14 +-------------
 js/src/base-component.js |  5 ++++-
 js/src/button.js         | 10 ----------
 js/src/carousel.js       | 10 ----------
 js/src/collapse.js       | 10 ----------
 js/src/dropdown.js       | 10 ----------
 js/src/modal.js          | 10 ----------
 js/src/offcanvas.js      |  9 ---------
 js/src/popover.js        | 10 ----------
 js/src/scrollspy.js      | 10 ----------
 js/src/tab.js            | 10 ----------
 js/src/toast.js          | 10 ----------
 js/src/tooltip.js        | 10 ----------
 js/src/util/index.js     | 36 +++++++++++++++++++++++++++---------
 14 files changed, 32 insertions(+), 132 deletions(-)

diff --git a/js/src/alert.js b/js/src/alert.js
index 679a90cdb4..97ec6faffc 100644
--- a/js/src/alert.js
+++ b/js/src/alert.js
@@ -5,10 +5,7 @@
  * --------------------------------------------------------------------------
  */
 
-import {
-  defineJQueryPlugin,
-  getElementFromSelector
-} from './util/index'
+import { getElementFromSelector } from './util/index'
 import Data from './dom/data'
 import EventHandler from './dom/event-handler'
 import BaseComponent from './base-component'
@@ -118,13 +115,4 @@ class Alert extends BaseComponent {
 
 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()))
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Alert to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Alert)
-
 export default Alert
diff --git a/js/src/base-component.js b/js/src/base-component.js
index a5f1b36a00..ad5e025227 100644
--- a/js/src/base-component.js
+++ b/js/src/base-component.js
@@ -10,7 +10,8 @@ import {
   emulateTransitionEnd,
   execute,
   getElement,
-  getTransitionDurationFromElement
+  getTransitionDurationFromElement,
+  defineJQueryPlugin
 } from './util/index'
 import EventHandler from './dom/event-handler'
 
@@ -78,4 +79,6 @@ class BaseComponent {
   }
 }
 
+defineJQueryPlugin()
+
 export default BaseComponent
diff --git a/js/src/button.js b/js/src/button.js
index 6ef7531367..26f917727d 100644
--- a/js/src/button.js
+++ b/js/src/button.js
@@ -5,7 +5,6 @@
  * --------------------------------------------------------------------------
  */
 
-import { defineJQueryPlugin } from './util/index'
 import Data from './dom/data'
 import EventHandler from './dom/event-handler'
 import BaseComponent from './base-component'
@@ -83,13 +82,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
   data.toggle()
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Button to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Button)
-
 export default Button
diff --git a/js/src/carousel.js b/js/src/carousel.js
index 7d197ab1ee..1b62c34a82 100644
--- a/js/src/carousel.js
+++ b/js/src/carousel.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   getElementFromSelector,
   isRTL,
   isVisible,
@@ -578,13 +577,4 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
   }
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Carousel to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Carousel)
-
 export default Carousel
diff --git a/js/src/collapse.js b/js/src/collapse.js
index fd85fbde2d..abd65bc00a 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   getElement,
   getSelectorFromElement,
   getElementFromSelector,
@@ -376,13 +375,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
   })
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Collapse to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Collapse)
-
 export default Collapse
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index 34beb65129..3ed2fea54a 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -8,7 +8,6 @@
 import * as Popper from '@popperjs/core'
 
 import {
-  defineJQueryPlugin,
   getElement,
   getElementFromSelector,
   isDisabled,
@@ -508,13 +507,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
   Dropdown.dropdownInterface(this)
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Dropdown to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Dropdown)
-
 export default Dropdown
diff --git a/js/src/modal.js b/js/src/modal.js
index b05fe8de75..5d2908a4e2 100644
--- a/js/src/modal.js
+++ b/js/src/modal.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   emulateTransitionEnd,
   getElementFromSelector,
   getTransitionDurationFromElement,
@@ -434,13 +433,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
   data.toggle(this)
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Modal to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Modal)
-
 export default Modal
diff --git a/js/src/offcanvas.js b/js/src/offcanvas.js
index fed892f4c7..215fe0039e 100644
--- a/js/src/offcanvas.js
+++ b/js/src/offcanvas.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   getElementFromSelector,
   isDisabled,
   isVisible,
@@ -265,12 +264,4 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
   SelectorEngine.find(OPEN_SELECTOR).forEach(el => (Data.get(el, DATA_KEY) || new Offcanvas(el)).show())
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
-defineJQueryPlugin(Offcanvas)
-
 export default Offcanvas
diff --git a/js/src/popover.js b/js/src/popover.js
index 929391392a..ccf8fdb662 100644
--- a/js/src/popover.js
+++ b/js/src/popover.js
@@ -5,7 +5,6 @@
  * --------------------------------------------------------------------------
  */
 
-import { defineJQueryPlugin } from './util/index'
 import Data from './dom/data'
 import SelectorEngine from './dom/selector-engine'
 import Tooltip from './tooltip'
@@ -165,13 +164,4 @@ class Popover extends Tooltip {
   }
 }
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Popover to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Popover)
-
 export default Popover
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js
index 3297c45c23..394b292525 100644
--- a/js/src/scrollspy.js
+++ b/js/src/scrollspy.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   getSelectorFromElement,
   getUID,
   isElement,
@@ -296,13 +295,4 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
     .forEach(spy => new ScrollSpy(spy))
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .ScrollSpy to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(ScrollSpy)
-
 export default ScrollSpy
diff --git a/js/src/tab.js b/js/src/tab.js
index 51deb170f8..7c5fe1fa40 100644
--- a/js/src/tab.js
+++ b/js/src/tab.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   getElementFromSelector,
   isDisabled,
   reflow
@@ -213,13 +212,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
   data.show()
 })
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Tab to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Tab)
-
 export default Tab
diff --git a/js/src/toast.js b/js/src/toast.js
index 40cd40d9a9..1deb148b4d 100644
--- a/js/src/toast.js
+++ b/js/src/toast.js
@@ -6,7 +6,6 @@
  */
 
 import {
-  defineJQueryPlugin,
   reflow,
   typeCheckConfig
 } from './util/index'
@@ -236,13 +235,4 @@ class Toast extends BaseComponent {
   }
 }
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Toast to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Toast)
-
 export default Toast
diff --git a/js/src/tooltip.js b/js/src/tooltip.js
index 2eb91965b2..be29cd0aa1 100644
--- a/js/src/tooltip.js
+++ b/js/src/tooltip.js
@@ -8,7 +8,6 @@
 import * as Popper from '@popperjs/core'
 
 import {
-  defineJQueryPlugin,
   findShadowRoot,
   getElement,
   getUID,
@@ -740,13 +739,4 @@ class Tooltip extends BaseComponent {
   }
 }
 
-/**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- * add .Tooltip to jQuery only if jQuery is present
- */
-
-defineJQueryPlugin(Tooltip)
-
 export default Tooltip
diff --git a/js/src/util/index.js b/js/src/util/index.js
index 4d077b21f9..f138516e2f 100644
--- a/js/src/util/index.js
+++ b/js/src/util/index.js
@@ -229,19 +229,37 @@ const onDOMContentLoaded = callback => {
 
 const isRTL = () => document.documentElement.dir === 'rtl'
 
-const defineJQueryPlugin = plugin => {
+const defineJQueryPlugin = () => {
   onDOMContentLoaded(() => {
     const $ = getjQuery()
     /* istanbul ignore if */
     if ($) {
-      const name = plugin.NAME
-      const JQUERY_NO_CONFLICT = $.fn[name]
-      $.fn[name] = plugin.jQueryInterface
-      $.fn[name].Constructor = plugin
-      $.fn[name].noConflict = () => {
-        $.fn[name] = JQUERY_NO_CONFLICT
-        return plugin.jQueryInterface
-      }
+      [
+        'Alert',
+        'Button',
+        'Carousel',
+        'Collapse',
+        'Dropdown',
+        'Modal',
+        'Offcanvas',
+        'Popover',
+        'ScrollSpy',
+        'Tab',
+        'Toast',
+        'Tooltip'
+      ].forEach(pluginName => {
+        const plugin = window.bootstrap[pluginName]
+        if (plugin) {
+          const name = plugin.NAME
+          const JQUERY_NO_CONFLICT = $.fn[name]
+          $.fn[name] = plugin.jQueryInterface
+          $.fn[name].Constructor = plugin
+          $.fn[name].noConflict = () => {
+            $.fn[name] = JQUERY_NO_CONFLICT
+            return plugin.jQueryInterface
+          }
+        }
+      })
     }
   })
 }
-- 
GitLab