mirror of
https://github.com/twbs/bootstrap.git
synced 2025-09-30 23:36:47 +02:00
Remove jQuery support in plugins (#41682)
This commit is contained in:
717
dist/js/bootstrap.bundle.js
vendored
717
dist/js/bootstrap.bundle.js
vendored
@@ -57,252 +57,6 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Bootstrap util/index.js
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
const MAX_UID = 1000000;
|
|
||||||
const MILLISECONDS_MULTIPLIER = 1000;
|
|
||||||
const TRANSITION_END = 'transitionend';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Properly escape IDs selectors to handle weird IDs
|
|
||||||
* @param {string} selector
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
const parseSelector = selector => {
|
|
||||||
if (selector && window.CSS && window.CSS.escape) {
|
|
||||||
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
|
||||||
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
|
||||||
}
|
|
||||||
return selector;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
|
||||||
const toType = object => {
|
|
||||||
if (object === null || object === undefined) {
|
|
||||||
return `${object}`;
|
|
||||||
}
|
|
||||||
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public Util API
|
|
||||||
*/
|
|
||||||
|
|
||||||
const getUID = prefix => {
|
|
||||||
do {
|
|
||||||
prefix += Math.floor(Math.random() * MAX_UID);
|
|
||||||
} while (document.getElementById(prefix));
|
|
||||||
return prefix;
|
|
||||||
};
|
|
||||||
const getTransitionDurationFromElement = element => {
|
|
||||||
if (!element) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get transition-duration of the element
|
|
||||||
let {
|
|
||||||
transitionDuration,
|
|
||||||
transitionDelay
|
|
||||||
} = window.getComputedStyle(element);
|
|
||||||
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
||||||
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
|
||||||
|
|
||||||
// Return 0 if element or transition duration is not found
|
|
||||||
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If multiple durations are defined, take the first
|
|
||||||
transitionDuration = transitionDuration.split(',')[0];
|
|
||||||
transitionDelay = transitionDelay.split(',')[0];
|
|
||||||
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
||||||
};
|
|
||||||
const triggerTransitionEnd = element => {
|
|
||||||
element.dispatchEvent(new Event(TRANSITION_END));
|
|
||||||
};
|
|
||||||
const isElement$1 = object => {
|
|
||||||
if (!object || typeof object !== 'object') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (typeof object.jquery !== 'undefined') {
|
|
||||||
object = object[0];
|
|
||||||
}
|
|
||||||
return typeof object.nodeType !== 'undefined';
|
|
||||||
};
|
|
||||||
const getElement = object => {
|
|
||||||
// it's a jQuery object or a node element
|
|
||||||
if (isElement$1(object)) {
|
|
||||||
return object.jquery ? object[0] : object;
|
|
||||||
}
|
|
||||||
if (typeof object === 'string' && object.length > 0) {
|
|
||||||
return document.querySelector(parseSelector(object));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const isVisible = element => {
|
|
||||||
if (!isElement$1(element) || element.getClientRects().length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
|
||||||
// Handle `details` element as its content may falsie appear visible when it is closed
|
|
||||||
const closedDetails = element.closest('details:not([open])');
|
|
||||||
if (!closedDetails) {
|
|
||||||
return elementIsVisible;
|
|
||||||
}
|
|
||||||
if (closedDetails !== element) {
|
|
||||||
const summary = element.closest('summary');
|
|
||||||
if (summary && summary.parentNode !== closedDetails) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (summary === null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return elementIsVisible;
|
|
||||||
};
|
|
||||||
const isDisabled = element => {
|
|
||||||
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (element.classList.contains('disabled')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (typeof element.disabled !== 'undefined') {
|
|
||||||
return element.disabled;
|
|
||||||
}
|
|
||||||
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
||||||
};
|
|
||||||
const findShadowRoot = element => {
|
|
||||||
if (!document.documentElement.attachShadow) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can find the shadow root otherwise it'll return the document
|
|
||||||
if (typeof element.getRootNode === 'function') {
|
|
||||||
const root = element.getRootNode();
|
|
||||||
return root instanceof ShadowRoot ? root : null;
|
|
||||||
}
|
|
||||||
if (element instanceof ShadowRoot) {
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
// when we don't find a shadow root
|
|
||||||
if (!element.parentNode) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return findShadowRoot(element.parentNode);
|
|
||||||
};
|
|
||||||
const noop = () => {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trick to restart an element's animation
|
|
||||||
*
|
|
||||||
* @param {HTMLElement} element
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
||||||
*/
|
|
||||||
const reflow = element => {
|
|
||||||
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
|
||||||
};
|
|
||||||
const getjQuery = () => {
|
|
||||||
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
||||||
return window.jQuery;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const DOMContentLoadedCallbacks = [];
|
|
||||||
const onDOMContentLoaded = callback => {
|
|
||||||
if (document.readyState === 'loading') {
|
|
||||||
// add listener on the first call when the document is in loading state
|
|
||||||
if (!DOMContentLoadedCallbacks.length) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
for (const callback of DOMContentLoadedCallbacks) {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
DOMContentLoadedCallbacks.push(callback);
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
||||||
const defineJQueryPlugin = plugin => {
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
|
||||||
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
|
||||||
};
|
|
||||||
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
|
||||||
if (!waitForTransition) {
|
|
||||||
execute(callback);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const durationPadding = 5;
|
|
||||||
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
|
||||||
let called = false;
|
|
||||||
const handler = ({
|
|
||||||
target
|
|
||||||
}) => {
|
|
||||||
if (target !== transitionElement) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
called = true;
|
|
||||||
transitionElement.removeEventListener(TRANSITION_END, handler);
|
|
||||||
execute(callback);
|
|
||||||
};
|
|
||||||
transitionElement.addEventListener(TRANSITION_END, handler);
|
|
||||||
setTimeout(() => {
|
|
||||||
if (!called) {
|
|
||||||
triggerTransitionEnd(transitionElement);
|
|
||||||
}
|
|
||||||
}, emulatedDuration);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the previous/next element of a list.
|
|
||||||
*
|
|
||||||
* @param {array} list The list of elements
|
|
||||||
* @param activeElement The active element
|
|
||||||
* @param shouldGetNext Choose to get next or previous element
|
|
||||||
* @param isCycleAllowed
|
|
||||||
* @return {Element|elem} The proper element
|
|
||||||
*/
|
|
||||||
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
|
||||||
const listLength = list.length;
|
|
||||||
let index = list.indexOf(activeElement);
|
|
||||||
|
|
||||||
// if the element does not exist in the list return an element
|
|
||||||
// depending on the direction and if cycle is allowed
|
|
||||||
if (index === -1) {
|
|
||||||
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
|
||||||
}
|
|
||||||
index += shouldGetNext ? 1 : -1;
|
|
||||||
if (isCycleAllowed) {
|
|
||||||
index = (index + listLength) % listLength;
|
|
||||||
}
|
|
||||||
return list[Math.max(0, Math.min(index, listLength - 1))];
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap dom/event-handler.js
|
* Bootstrap dom/event-handler.js
|
||||||
@@ -310,7 +64,6 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@@ -479,33 +232,11 @@
|
|||||||
if (typeof event !== 'string' || !element) {
|
if (typeof event !== 'string' || !element) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const $ = getjQuery();
|
|
||||||
const typeEvent = getTypeEvent(event);
|
|
||||||
const inNamespace = event !== typeEvent;
|
|
||||||
let jQueryEvent = null;
|
|
||||||
let bubbles = true;
|
|
||||||
let nativeDispatch = true;
|
|
||||||
let defaultPrevented = false;
|
|
||||||
if (inNamespace && $) {
|
|
||||||
jQueryEvent = $.Event(event, args);
|
|
||||||
$(element).trigger(jQueryEvent);
|
|
||||||
bubbles = !jQueryEvent.isPropagationStopped();
|
|
||||||
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
|
||||||
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
|
||||||
}
|
|
||||||
const evt = hydrateObj(new Event(event, {
|
const evt = hydrateObj(new Event(event, {
|
||||||
bubbles,
|
bubbles: true,
|
||||||
cancelable: true
|
cancelable: true
|
||||||
}), args);
|
}), args);
|
||||||
if (defaultPrevented) {
|
element.dispatchEvent(evt);
|
||||||
evt.preventDefault();
|
|
||||||
}
|
|
||||||
if (nativeDispatch) {
|
|
||||||
element.dispatchEvent(evt);
|
|
||||||
}
|
|
||||||
if (evt.defaultPrevented && jQueryEvent) {
|
|
||||||
jQueryEvent.preventDefault();
|
|
||||||
}
|
|
||||||
return evt;
|
return evt;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -582,6 +313,210 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap util/index.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const MAX_UID = 1000000;
|
||||||
|
const MILLISECONDS_MULTIPLIER = 1000;
|
||||||
|
const TRANSITION_END = 'transitionend';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Properly escape IDs selectors to handle weird IDs
|
||||||
|
* @param {string} selector
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
const parseSelector = selector => {
|
||||||
|
if (selector && window.CSS && window.CSS.escape) {
|
||||||
|
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
||||||
|
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
||||||
|
}
|
||||||
|
return selector;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
||||||
|
const toType = object => {
|
||||||
|
if (object === null || object === undefined) {
|
||||||
|
return `${object}`;
|
||||||
|
}
|
||||||
|
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public Util API
|
||||||
|
*/
|
||||||
|
|
||||||
|
const getUID = prefix => {
|
||||||
|
do {
|
||||||
|
prefix += Math.floor(Math.random() * MAX_UID);
|
||||||
|
} while (document.getElementById(prefix));
|
||||||
|
return prefix;
|
||||||
|
};
|
||||||
|
const getTransitionDurationFromElement = element => {
|
||||||
|
if (!element) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get transition-duration of the element
|
||||||
|
let {
|
||||||
|
transitionDuration,
|
||||||
|
transitionDelay
|
||||||
|
} = window.getComputedStyle(element);
|
||||||
|
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
||||||
|
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
||||||
|
|
||||||
|
// Return 0 if element or transition duration is not found
|
||||||
|
if (!floatTransitionDuration && !floatTransitionDelay) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If multiple durations are defined, take the first
|
||||||
|
transitionDuration = transitionDuration.split(',')[0];
|
||||||
|
transitionDelay = transitionDelay.split(',')[0];
|
||||||
|
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
||||||
|
};
|
||||||
|
const triggerTransitionEnd = element => {
|
||||||
|
element.dispatchEvent(new Event(TRANSITION_END));
|
||||||
|
};
|
||||||
|
const isElement$1 = object => {
|
||||||
|
if (!object || typeof object !== 'object') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return typeof object.nodeType !== 'undefined';
|
||||||
|
};
|
||||||
|
const getElement = object => {
|
||||||
|
if (isElement$1(object)) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
if (typeof object === 'string' && object.length > 0) {
|
||||||
|
return document.querySelector(parseSelector(object));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
const isVisible = element => {
|
||||||
|
if (!isElement$1(element) || element.getClientRects().length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
||||||
|
// Handle `details` element as its content may falsie appear visible when it is closed
|
||||||
|
const closedDetails = element.closest('details:not([open])');
|
||||||
|
if (!closedDetails) {
|
||||||
|
return elementIsVisible;
|
||||||
|
}
|
||||||
|
if (closedDetails !== element) {
|
||||||
|
const summary = element.closest('summary');
|
||||||
|
if (summary && summary.parentNode !== closedDetails) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (summary === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return elementIsVisible;
|
||||||
|
};
|
||||||
|
const isDisabled = element => {
|
||||||
|
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (element.classList.contains('disabled')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (typeof element.disabled !== 'undefined') {
|
||||||
|
return element.disabled;
|
||||||
|
}
|
||||||
|
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
||||||
|
};
|
||||||
|
const findShadowRoot = element => {
|
||||||
|
if (!document.documentElement.attachShadow) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can find the shadow root otherwise it'll return the document
|
||||||
|
if (typeof element.getRootNode === 'function') {
|
||||||
|
const root = element.getRootNode();
|
||||||
|
return root instanceof ShadowRoot ? root : null;
|
||||||
|
}
|
||||||
|
if (element instanceof ShadowRoot) {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
// when we don't find a shadow root
|
||||||
|
if (!element.parentNode) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return findShadowRoot(element.parentNode);
|
||||||
|
};
|
||||||
|
const noop = () => {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trick to restart an element's animation
|
||||||
|
*
|
||||||
|
* @param {HTMLElement} element
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
||||||
|
*/
|
||||||
|
const reflow = element => {
|
||||||
|
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
||||||
|
};
|
||||||
|
const isRTL = () => document.documentElement.dir === 'rtl';
|
||||||
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
|
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
||||||
|
};
|
||||||
|
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
||||||
|
if (!waitForTransition) {
|
||||||
|
execute(callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const durationPadding = 5;
|
||||||
|
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
||||||
|
let called = false;
|
||||||
|
const handler = ({
|
||||||
|
target
|
||||||
|
}) => {
|
||||||
|
if (target !== transitionElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
called = true;
|
||||||
|
transitionElement.removeEventListener(TRANSITION_END, handler);
|
||||||
|
execute(callback);
|
||||||
|
};
|
||||||
|
transitionElement.addEventListener(TRANSITION_END, handler);
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!called) {
|
||||||
|
triggerTransitionEnd(transitionElement);
|
||||||
|
}
|
||||||
|
}, emulatedDuration);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the previous/next element of a list.
|
||||||
|
*
|
||||||
|
* @param {array} list The list of elements
|
||||||
|
* @param activeElement The active element
|
||||||
|
* @param shouldGetNext Choose to get next or previous element
|
||||||
|
* @param isCycleAllowed
|
||||||
|
* @return {Element|elem} The proper element
|
||||||
|
*/
|
||||||
|
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
||||||
|
const listLength = list.length;
|
||||||
|
let index = list.indexOf(activeElement);
|
||||||
|
|
||||||
|
// if the element does not exist in the list return an element
|
||||||
|
// depending on the direction and if cycle is allowed
|
||||||
|
if (index === -1) {
|
||||||
|
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
||||||
|
}
|
||||||
|
index += shouldGetNext ? 1 : -1;
|
||||||
|
if (isCycleAllowed) {
|
||||||
|
index = (index + listLength) % listLength;
|
||||||
|
}
|
||||||
|
return list[Math.max(0, Math.min(index, listLength - 1))];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/config.js
|
* Bootstrap util/config.js
|
||||||
@@ -867,20 +802,6 @@
|
|||||||
EventHandler.trigger(this._element, EVENT_CLOSED);
|
EventHandler.trigger(this._element, EVENT_CLOSED);
|
||||||
this.dispose();
|
this.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Alert.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -889,12 +810,6 @@
|
|||||||
|
|
||||||
enableDismissTrigger(Alert, 'close');
|
enableDismissTrigger(Alert, 'close');
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Alert);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap button.js
|
* Bootstrap button.js
|
||||||
@@ -930,16 +845,6 @@
|
|||||||
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
||||||
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Button.getOrCreateInstance(this);
|
|
||||||
if (config === 'toggle') {
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -953,12 +858,6 @@
|
|||||||
data.toggle();
|
data.toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Button);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/swipe.js
|
* Bootstrap util/swipe.js
|
||||||
@@ -1395,23 +1294,6 @@
|
|||||||
}
|
}
|
||||||
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Carousel.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'number') {
|
|
||||||
data.to(config);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1446,12 +1328,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Carousel);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap collapse.js
|
* Bootstrap collapse.js
|
||||||
@@ -1645,23 +1521,6 @@
|
|||||||
element.setAttribute('aria-expanded', isOpen);
|
element.setAttribute('aria-expanded', isOpen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
const _config = {};
|
|
||||||
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
||||||
_config.toggle = false;
|
|
||||||
}
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Collapse.getOrCreateInstance(this, _config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1680,12 +1539,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Collapse);
|
|
||||||
|
|
||||||
var top = 'top';
|
var top = 'top';
|
||||||
var bottom = 'bottom';
|
var bottom = 'bottom';
|
||||||
var right = 'right';
|
var right = 'right';
|
||||||
@@ -3796,20 +3649,6 @@
|
|||||||
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
||||||
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
|
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Dropdown.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static clearMenus(event) {
|
static clearMenus(event) {
|
||||||
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
|
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
|
||||||
return;
|
return;
|
||||||
@@ -3885,12 +3724,6 @@
|
|||||||
Dropdown.getOrCreateInstance(this).toggle();
|
Dropdown.getOrCreateInstance(this).toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Dropdown);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/backdrop.js
|
* Bootstrap util/backdrop.js
|
||||||
@@ -4463,20 +4296,6 @@
|
|||||||
this._element.style.paddingLeft = '';
|
this._element.style.paddingLeft = '';
|
||||||
this._element.style.paddingRight = '';
|
this._element.style.paddingRight = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config, relatedTarget) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Modal.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](relatedTarget);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4510,12 +4329,6 @@
|
|||||||
});
|
});
|
||||||
enableDismissTrigger(Modal);
|
enableDismissTrigger(Modal);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Modal);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap offcanvas.js
|
* Bootstrap offcanvas.js
|
||||||
@@ -4684,20 +4497,6 @@
|
|||||||
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Offcanvas.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4741,12 +4540,6 @@
|
|||||||
});
|
});
|
||||||
enableDismissTrigger(Offcanvas);
|
enableDismissTrigger(Offcanvas);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Offcanvas);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/sanitizer.js
|
* Bootstrap util/sanitizer.js
|
||||||
@@ -5468,28 +5261,8 @@
|
|||||||
this.tip = null;
|
this.tip = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tooltip.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tooltip);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap popover.js
|
* Bootstrap popover.js
|
||||||
@@ -5549,28 +5322,8 @@
|
|||||||
_getContent() {
|
_getContent() {
|
||||||
return this._resolvePossibleFunction(this._config.content);
|
return this._resolvePossibleFunction(this._config.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Popover.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Popover);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap scrollspy.js
|
* Bootstrap scrollspy.js
|
||||||
@@ -5799,20 +5552,6 @@
|
|||||||
node.classList.remove(CLASS_NAME_ACTIVE$1);
|
node.classList.remove(CLASS_NAME_ACTIVE$1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -5825,12 +5564,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(ScrollSpy);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap tab.js
|
* Bootstrap tab.js
|
||||||
@@ -6057,20 +5790,6 @@
|
|||||||
_getOuterElement(elem) {
|
_getOuterElement(elem) {
|
||||||
return elem.closest(SELECTOR_OUTER) || elem;
|
return elem.closest(SELECTOR_OUTER) || elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tab.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -6095,11 +5814,6 @@
|
|||||||
Tab.getOrCreateInstance(element);
|
Tab.getOrCreateInstance(element);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tab);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -6257,19 +5971,6 @@
|
|||||||
clearTimeout(this._timeout);
|
clearTimeout(this._timeout);
|
||||||
this._timeout = null;
|
this._timeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Toast.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -6278,12 +5979,6 @@
|
|||||||
|
|
||||||
enableDismissTrigger(Toast);
|
enableDismissTrigger(Toast);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Toast);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap index.umd.js
|
* Bootstrap index.umd.js
|
||||||
|
2
dist/js/bootstrap.bundle.js.map
vendored
2
dist/js/bootstrap.bundle.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/js/bootstrap.bundle.min.js
vendored
2
dist/js/bootstrap.bundle.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/js/bootstrap.bundle.min.js.map
vendored
2
dist/js/bootstrap.bundle.min.js.map
vendored
File diff suppressed because one or more lines are too long
717
dist/js/bootstrap.esm.js
vendored
717
dist/js/bootstrap.esm.js
vendored
@@ -53,252 +53,6 @@ const Data = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Bootstrap util/index.js
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
const MAX_UID = 1000000;
|
|
||||||
const MILLISECONDS_MULTIPLIER = 1000;
|
|
||||||
const TRANSITION_END = 'transitionend';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Properly escape IDs selectors to handle weird IDs
|
|
||||||
* @param {string} selector
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
const parseSelector = selector => {
|
|
||||||
if (selector && window.CSS && window.CSS.escape) {
|
|
||||||
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
|
||||||
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
|
||||||
}
|
|
||||||
return selector;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
|
||||||
const toType = object => {
|
|
||||||
if (object === null || object === undefined) {
|
|
||||||
return `${object}`;
|
|
||||||
}
|
|
||||||
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public Util API
|
|
||||||
*/
|
|
||||||
|
|
||||||
const getUID = prefix => {
|
|
||||||
do {
|
|
||||||
prefix += Math.floor(Math.random() * MAX_UID);
|
|
||||||
} while (document.getElementById(prefix));
|
|
||||||
return prefix;
|
|
||||||
};
|
|
||||||
const getTransitionDurationFromElement = element => {
|
|
||||||
if (!element) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get transition-duration of the element
|
|
||||||
let {
|
|
||||||
transitionDuration,
|
|
||||||
transitionDelay
|
|
||||||
} = window.getComputedStyle(element);
|
|
||||||
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
||||||
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
|
||||||
|
|
||||||
// Return 0 if element or transition duration is not found
|
|
||||||
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If multiple durations are defined, take the first
|
|
||||||
transitionDuration = transitionDuration.split(',')[0];
|
|
||||||
transitionDelay = transitionDelay.split(',')[0];
|
|
||||||
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
||||||
};
|
|
||||||
const triggerTransitionEnd = element => {
|
|
||||||
element.dispatchEvent(new Event(TRANSITION_END));
|
|
||||||
};
|
|
||||||
const isElement = object => {
|
|
||||||
if (!object || typeof object !== 'object') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (typeof object.jquery !== 'undefined') {
|
|
||||||
object = object[0];
|
|
||||||
}
|
|
||||||
return typeof object.nodeType !== 'undefined';
|
|
||||||
};
|
|
||||||
const getElement = object => {
|
|
||||||
// it's a jQuery object or a node element
|
|
||||||
if (isElement(object)) {
|
|
||||||
return object.jquery ? object[0] : object;
|
|
||||||
}
|
|
||||||
if (typeof object === 'string' && object.length > 0) {
|
|
||||||
return document.querySelector(parseSelector(object));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const isVisible = element => {
|
|
||||||
if (!isElement(element) || element.getClientRects().length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
|
||||||
// Handle `details` element as its content may falsie appear visible when it is closed
|
|
||||||
const closedDetails = element.closest('details:not([open])');
|
|
||||||
if (!closedDetails) {
|
|
||||||
return elementIsVisible;
|
|
||||||
}
|
|
||||||
if (closedDetails !== element) {
|
|
||||||
const summary = element.closest('summary');
|
|
||||||
if (summary && summary.parentNode !== closedDetails) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (summary === null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return elementIsVisible;
|
|
||||||
};
|
|
||||||
const isDisabled = element => {
|
|
||||||
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (element.classList.contains('disabled')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (typeof element.disabled !== 'undefined') {
|
|
||||||
return element.disabled;
|
|
||||||
}
|
|
||||||
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
||||||
};
|
|
||||||
const findShadowRoot = element => {
|
|
||||||
if (!document.documentElement.attachShadow) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can find the shadow root otherwise it'll return the document
|
|
||||||
if (typeof element.getRootNode === 'function') {
|
|
||||||
const root = element.getRootNode();
|
|
||||||
return root instanceof ShadowRoot ? root : null;
|
|
||||||
}
|
|
||||||
if (element instanceof ShadowRoot) {
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
// when we don't find a shadow root
|
|
||||||
if (!element.parentNode) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return findShadowRoot(element.parentNode);
|
|
||||||
};
|
|
||||||
const noop = () => {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trick to restart an element's animation
|
|
||||||
*
|
|
||||||
* @param {HTMLElement} element
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
||||||
*/
|
|
||||||
const reflow = element => {
|
|
||||||
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
|
||||||
};
|
|
||||||
const getjQuery = () => {
|
|
||||||
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
||||||
return window.jQuery;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const DOMContentLoadedCallbacks = [];
|
|
||||||
const onDOMContentLoaded = callback => {
|
|
||||||
if (document.readyState === 'loading') {
|
|
||||||
// add listener on the first call when the document is in loading state
|
|
||||||
if (!DOMContentLoadedCallbacks.length) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
for (const callback of DOMContentLoadedCallbacks) {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
DOMContentLoadedCallbacks.push(callback);
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
||||||
const defineJQueryPlugin = plugin => {
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
|
||||||
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
|
||||||
};
|
|
||||||
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
|
||||||
if (!waitForTransition) {
|
|
||||||
execute(callback);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const durationPadding = 5;
|
|
||||||
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
|
||||||
let called = false;
|
|
||||||
const handler = ({
|
|
||||||
target
|
|
||||||
}) => {
|
|
||||||
if (target !== transitionElement) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
called = true;
|
|
||||||
transitionElement.removeEventListener(TRANSITION_END, handler);
|
|
||||||
execute(callback);
|
|
||||||
};
|
|
||||||
transitionElement.addEventListener(TRANSITION_END, handler);
|
|
||||||
setTimeout(() => {
|
|
||||||
if (!called) {
|
|
||||||
triggerTransitionEnd(transitionElement);
|
|
||||||
}
|
|
||||||
}, emulatedDuration);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the previous/next element of a list.
|
|
||||||
*
|
|
||||||
* @param {array} list The list of elements
|
|
||||||
* @param activeElement The active element
|
|
||||||
* @param shouldGetNext Choose to get next or previous element
|
|
||||||
* @param isCycleAllowed
|
|
||||||
* @return {Element|elem} The proper element
|
|
||||||
*/
|
|
||||||
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
|
||||||
const listLength = list.length;
|
|
||||||
let index = list.indexOf(activeElement);
|
|
||||||
|
|
||||||
// if the element does not exist in the list return an element
|
|
||||||
// depending on the direction and if cycle is allowed
|
|
||||||
if (index === -1) {
|
|
||||||
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
|
||||||
}
|
|
||||||
index += shouldGetNext ? 1 : -1;
|
|
||||||
if (isCycleAllowed) {
|
|
||||||
index = (index + listLength) % listLength;
|
|
||||||
}
|
|
||||||
return list[Math.max(0, Math.min(index, listLength - 1))];
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap dom/event-handler.js
|
* Bootstrap dom/event-handler.js
|
||||||
@@ -306,7 +60,6 @@ const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@@ -475,33 +228,11 @@ const EventHandler = {
|
|||||||
if (typeof event !== 'string' || !element) {
|
if (typeof event !== 'string' || !element) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const $ = getjQuery();
|
|
||||||
const typeEvent = getTypeEvent(event);
|
|
||||||
const inNamespace = event !== typeEvent;
|
|
||||||
let jQueryEvent = null;
|
|
||||||
let bubbles = true;
|
|
||||||
let nativeDispatch = true;
|
|
||||||
let defaultPrevented = false;
|
|
||||||
if (inNamespace && $) {
|
|
||||||
jQueryEvent = $.Event(event, args);
|
|
||||||
$(element).trigger(jQueryEvent);
|
|
||||||
bubbles = !jQueryEvent.isPropagationStopped();
|
|
||||||
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
|
||||||
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
|
||||||
}
|
|
||||||
const evt = hydrateObj(new Event(event, {
|
const evt = hydrateObj(new Event(event, {
|
||||||
bubbles,
|
bubbles: true,
|
||||||
cancelable: true
|
cancelable: true
|
||||||
}), args);
|
}), args);
|
||||||
if (defaultPrevented) {
|
element.dispatchEvent(evt);
|
||||||
evt.preventDefault();
|
|
||||||
}
|
|
||||||
if (nativeDispatch) {
|
|
||||||
element.dispatchEvent(evt);
|
|
||||||
}
|
|
||||||
if (evt.defaultPrevented && jQueryEvent) {
|
|
||||||
jQueryEvent.preventDefault();
|
|
||||||
}
|
|
||||||
return evt;
|
return evt;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -578,6 +309,210 @@ const Manipulator = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap util/index.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const MAX_UID = 1000000;
|
||||||
|
const MILLISECONDS_MULTIPLIER = 1000;
|
||||||
|
const TRANSITION_END = 'transitionend';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Properly escape IDs selectors to handle weird IDs
|
||||||
|
* @param {string} selector
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
const parseSelector = selector => {
|
||||||
|
if (selector && window.CSS && window.CSS.escape) {
|
||||||
|
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
||||||
|
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
||||||
|
}
|
||||||
|
return selector;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
||||||
|
const toType = object => {
|
||||||
|
if (object === null || object === undefined) {
|
||||||
|
return `${object}`;
|
||||||
|
}
|
||||||
|
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public Util API
|
||||||
|
*/
|
||||||
|
|
||||||
|
const getUID = prefix => {
|
||||||
|
do {
|
||||||
|
prefix += Math.floor(Math.random() * MAX_UID);
|
||||||
|
} while (document.getElementById(prefix));
|
||||||
|
return prefix;
|
||||||
|
};
|
||||||
|
const getTransitionDurationFromElement = element => {
|
||||||
|
if (!element) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get transition-duration of the element
|
||||||
|
let {
|
||||||
|
transitionDuration,
|
||||||
|
transitionDelay
|
||||||
|
} = window.getComputedStyle(element);
|
||||||
|
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
||||||
|
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
||||||
|
|
||||||
|
// Return 0 if element or transition duration is not found
|
||||||
|
if (!floatTransitionDuration && !floatTransitionDelay) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If multiple durations are defined, take the first
|
||||||
|
transitionDuration = transitionDuration.split(',')[0];
|
||||||
|
transitionDelay = transitionDelay.split(',')[0];
|
||||||
|
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
||||||
|
};
|
||||||
|
const triggerTransitionEnd = element => {
|
||||||
|
element.dispatchEvent(new Event(TRANSITION_END));
|
||||||
|
};
|
||||||
|
const isElement = object => {
|
||||||
|
if (!object || typeof object !== 'object') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return typeof object.nodeType !== 'undefined';
|
||||||
|
};
|
||||||
|
const getElement = object => {
|
||||||
|
if (isElement(object)) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
if (typeof object === 'string' && object.length > 0) {
|
||||||
|
return document.querySelector(parseSelector(object));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
const isVisible = element => {
|
||||||
|
if (!isElement(element) || element.getClientRects().length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
||||||
|
// Handle `details` element as its content may falsie appear visible when it is closed
|
||||||
|
const closedDetails = element.closest('details:not([open])');
|
||||||
|
if (!closedDetails) {
|
||||||
|
return elementIsVisible;
|
||||||
|
}
|
||||||
|
if (closedDetails !== element) {
|
||||||
|
const summary = element.closest('summary');
|
||||||
|
if (summary && summary.parentNode !== closedDetails) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (summary === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return elementIsVisible;
|
||||||
|
};
|
||||||
|
const isDisabled = element => {
|
||||||
|
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (element.classList.contains('disabled')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (typeof element.disabled !== 'undefined') {
|
||||||
|
return element.disabled;
|
||||||
|
}
|
||||||
|
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
||||||
|
};
|
||||||
|
const findShadowRoot = element => {
|
||||||
|
if (!document.documentElement.attachShadow) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can find the shadow root otherwise it'll return the document
|
||||||
|
if (typeof element.getRootNode === 'function') {
|
||||||
|
const root = element.getRootNode();
|
||||||
|
return root instanceof ShadowRoot ? root : null;
|
||||||
|
}
|
||||||
|
if (element instanceof ShadowRoot) {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
// when we don't find a shadow root
|
||||||
|
if (!element.parentNode) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return findShadowRoot(element.parentNode);
|
||||||
|
};
|
||||||
|
const noop = () => {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trick to restart an element's animation
|
||||||
|
*
|
||||||
|
* @param {HTMLElement} element
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
||||||
|
*/
|
||||||
|
const reflow = element => {
|
||||||
|
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
||||||
|
};
|
||||||
|
const isRTL = () => document.documentElement.dir === 'rtl';
|
||||||
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
|
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
||||||
|
};
|
||||||
|
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
||||||
|
if (!waitForTransition) {
|
||||||
|
execute(callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const durationPadding = 5;
|
||||||
|
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
||||||
|
let called = false;
|
||||||
|
const handler = ({
|
||||||
|
target
|
||||||
|
}) => {
|
||||||
|
if (target !== transitionElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
called = true;
|
||||||
|
transitionElement.removeEventListener(TRANSITION_END, handler);
|
||||||
|
execute(callback);
|
||||||
|
};
|
||||||
|
transitionElement.addEventListener(TRANSITION_END, handler);
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!called) {
|
||||||
|
triggerTransitionEnd(transitionElement);
|
||||||
|
}
|
||||||
|
}, emulatedDuration);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the previous/next element of a list.
|
||||||
|
*
|
||||||
|
* @param {array} list The list of elements
|
||||||
|
* @param activeElement The active element
|
||||||
|
* @param shouldGetNext Choose to get next or previous element
|
||||||
|
* @param isCycleAllowed
|
||||||
|
* @return {Element|elem} The proper element
|
||||||
|
*/
|
||||||
|
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
||||||
|
const listLength = list.length;
|
||||||
|
let index = list.indexOf(activeElement);
|
||||||
|
|
||||||
|
// if the element does not exist in the list return an element
|
||||||
|
// depending on the direction and if cycle is allowed
|
||||||
|
if (index === -1) {
|
||||||
|
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
||||||
|
}
|
||||||
|
index += shouldGetNext ? 1 : -1;
|
||||||
|
if (isCycleAllowed) {
|
||||||
|
index = (index + listLength) % listLength;
|
||||||
|
}
|
||||||
|
return list[Math.max(0, Math.min(index, listLength - 1))];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/config.js
|
* Bootstrap util/config.js
|
||||||
@@ -863,20 +798,6 @@ class Alert extends BaseComponent {
|
|||||||
EventHandler.trigger(this._element, EVENT_CLOSED);
|
EventHandler.trigger(this._element, EVENT_CLOSED);
|
||||||
this.dispose();
|
this.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Alert.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -885,12 +806,6 @@ class Alert extends BaseComponent {
|
|||||||
|
|
||||||
enableDismissTrigger(Alert, 'close');
|
enableDismissTrigger(Alert, 'close');
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Alert);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap button.js
|
* Bootstrap button.js
|
||||||
@@ -926,16 +841,6 @@ class Button extends BaseComponent {
|
|||||||
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
||||||
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Button.getOrCreateInstance(this);
|
|
||||||
if (config === 'toggle') {
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -949,12 +854,6 @@ EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event
|
|||||||
data.toggle();
|
data.toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Button);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/swipe.js
|
* Bootstrap util/swipe.js
|
||||||
@@ -1391,23 +1290,6 @@ class Carousel extends BaseComponent {
|
|||||||
}
|
}
|
||||||
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Carousel.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'number') {
|
|
||||||
data.to(config);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1442,12 +1324,6 @@ EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Carousel);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap collapse.js
|
* Bootstrap collapse.js
|
||||||
@@ -1641,23 +1517,6 @@ class Collapse extends BaseComponent {
|
|||||||
element.setAttribute('aria-expanded', isOpen);
|
element.setAttribute('aria-expanded', isOpen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
const _config = {};
|
|
||||||
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
||||||
_config.toggle = false;
|
|
||||||
}
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Collapse.getOrCreateInstance(this, _config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1676,12 +1535,6 @@ EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, functi
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Collapse);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap dropdown.js
|
* Bootstrap dropdown.js
|
||||||
@@ -1955,20 +1808,6 @@ class Dropdown extends BaseComponent {
|
|||||||
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
||||||
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
|
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Dropdown.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static clearMenus(event) {
|
static clearMenus(event) {
|
||||||
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
|
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
|
||||||
return;
|
return;
|
||||||
@@ -2044,12 +1883,6 @@ EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, functi
|
|||||||
Dropdown.getOrCreateInstance(this).toggle();
|
Dropdown.getOrCreateInstance(this).toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Dropdown);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/backdrop.js
|
* Bootstrap util/backdrop.js
|
||||||
@@ -2622,20 +2455,6 @@ class Modal extends BaseComponent {
|
|||||||
this._element.style.paddingLeft = '';
|
this._element.style.paddingLeft = '';
|
||||||
this._element.style.paddingRight = '';
|
this._element.style.paddingRight = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config, relatedTarget) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Modal.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](relatedTarget);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2669,12 +2488,6 @@ EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, functi
|
|||||||
});
|
});
|
||||||
enableDismissTrigger(Modal);
|
enableDismissTrigger(Modal);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Modal);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap offcanvas.js
|
* Bootstrap offcanvas.js
|
||||||
@@ -2843,20 +2656,6 @@ class Offcanvas extends BaseComponent {
|
|||||||
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Offcanvas.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2900,12 +2699,6 @@ EventHandler.on(window, EVENT_RESIZE, () => {
|
|||||||
});
|
});
|
||||||
enableDismissTrigger(Offcanvas);
|
enableDismissTrigger(Offcanvas);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Offcanvas);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/sanitizer.js
|
* Bootstrap util/sanitizer.js
|
||||||
@@ -3627,28 +3420,8 @@ class Tooltip extends BaseComponent {
|
|||||||
this.tip = null;
|
this.tip = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tooltip.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tooltip);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap popover.js
|
* Bootstrap popover.js
|
||||||
@@ -3708,28 +3481,8 @@ class Popover extends Tooltip {
|
|||||||
_getContent() {
|
_getContent() {
|
||||||
return this._resolvePossibleFunction(this._config.content);
|
return this._resolvePossibleFunction(this._config.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Popover.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Popover);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap scrollspy.js
|
* Bootstrap scrollspy.js
|
||||||
@@ -3958,20 +3711,6 @@ class ScrollSpy extends BaseComponent {
|
|||||||
node.classList.remove(CLASS_NAME_ACTIVE$1);
|
node.classList.remove(CLASS_NAME_ACTIVE$1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3984,12 +3723,6 @@ EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(ScrollSpy);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap tab.js
|
* Bootstrap tab.js
|
||||||
@@ -4216,20 +3949,6 @@ class Tab extends BaseComponent {
|
|||||||
_getOuterElement(elem) {
|
_getOuterElement(elem) {
|
||||||
return elem.closest(SELECTOR_OUTER) || elem;
|
return elem.closest(SELECTOR_OUTER) || elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tab.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4254,11 +3973,6 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|||||||
Tab.getOrCreateInstance(element);
|
Tab.getOrCreateInstance(element);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tab);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -4416,19 +4130,6 @@ class Toast extends BaseComponent {
|
|||||||
clearTimeout(this._timeout);
|
clearTimeout(this._timeout);
|
||||||
this._timeout = null;
|
this._timeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Toast.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4437,11 +4138,5 @@ class Toast extends BaseComponent {
|
|||||||
|
|
||||||
enableDismissTrigger(Toast);
|
enableDismissTrigger(Toast);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Toast);
|
|
||||||
|
|
||||||
export { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };
|
export { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };
|
||||||
//# sourceMappingURL=bootstrap.esm.js.map
|
//# sourceMappingURL=bootstrap.esm.js.map
|
||||||
|
2
dist/js/bootstrap.esm.js.map
vendored
2
dist/js/bootstrap.esm.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/js/bootstrap.esm.min.js
vendored
2
dist/js/bootstrap.esm.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/js/bootstrap.esm.min.js.map
vendored
2
dist/js/bootstrap.esm.min.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -76,252 +76,6 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Bootstrap util/index.js
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
const MAX_UID = 1000000;
|
|
||||||
const MILLISECONDS_MULTIPLIER = 1000;
|
|
||||||
const TRANSITION_END = 'transitionend';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Properly escape IDs selectors to handle weird IDs
|
|
||||||
* @param {string} selector
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
const parseSelector = selector => {
|
|
||||||
if (selector && window.CSS && window.CSS.escape) {
|
|
||||||
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
|
||||||
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
|
||||||
}
|
|
||||||
return selector;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
|
||||||
const toType = object => {
|
|
||||||
if (object === null || object === undefined) {
|
|
||||||
return `${object}`;
|
|
||||||
}
|
|
||||||
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public Util API
|
|
||||||
*/
|
|
||||||
|
|
||||||
const getUID = prefix => {
|
|
||||||
do {
|
|
||||||
prefix += Math.floor(Math.random() * MAX_UID);
|
|
||||||
} while (document.getElementById(prefix));
|
|
||||||
return prefix;
|
|
||||||
};
|
|
||||||
const getTransitionDurationFromElement = element => {
|
|
||||||
if (!element) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get transition-duration of the element
|
|
||||||
let {
|
|
||||||
transitionDuration,
|
|
||||||
transitionDelay
|
|
||||||
} = window.getComputedStyle(element);
|
|
||||||
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
||||||
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
|
||||||
|
|
||||||
// Return 0 if element or transition duration is not found
|
|
||||||
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If multiple durations are defined, take the first
|
|
||||||
transitionDuration = transitionDuration.split(',')[0];
|
|
||||||
transitionDelay = transitionDelay.split(',')[0];
|
|
||||||
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
||||||
};
|
|
||||||
const triggerTransitionEnd = element => {
|
|
||||||
element.dispatchEvent(new Event(TRANSITION_END));
|
|
||||||
};
|
|
||||||
const isElement = object => {
|
|
||||||
if (!object || typeof object !== 'object') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (typeof object.jquery !== 'undefined') {
|
|
||||||
object = object[0];
|
|
||||||
}
|
|
||||||
return typeof object.nodeType !== 'undefined';
|
|
||||||
};
|
|
||||||
const getElement = object => {
|
|
||||||
// it's a jQuery object or a node element
|
|
||||||
if (isElement(object)) {
|
|
||||||
return object.jquery ? object[0] : object;
|
|
||||||
}
|
|
||||||
if (typeof object === 'string' && object.length > 0) {
|
|
||||||
return document.querySelector(parseSelector(object));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const isVisible = element => {
|
|
||||||
if (!isElement(element) || element.getClientRects().length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
|
||||||
// Handle `details` element as its content may falsie appear visible when it is closed
|
|
||||||
const closedDetails = element.closest('details:not([open])');
|
|
||||||
if (!closedDetails) {
|
|
||||||
return elementIsVisible;
|
|
||||||
}
|
|
||||||
if (closedDetails !== element) {
|
|
||||||
const summary = element.closest('summary');
|
|
||||||
if (summary && summary.parentNode !== closedDetails) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (summary === null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return elementIsVisible;
|
|
||||||
};
|
|
||||||
const isDisabled = element => {
|
|
||||||
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (element.classList.contains('disabled')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (typeof element.disabled !== 'undefined') {
|
|
||||||
return element.disabled;
|
|
||||||
}
|
|
||||||
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
||||||
};
|
|
||||||
const findShadowRoot = element => {
|
|
||||||
if (!document.documentElement.attachShadow) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can find the shadow root otherwise it'll return the document
|
|
||||||
if (typeof element.getRootNode === 'function') {
|
|
||||||
const root = element.getRootNode();
|
|
||||||
return root instanceof ShadowRoot ? root : null;
|
|
||||||
}
|
|
||||||
if (element instanceof ShadowRoot) {
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
// when we don't find a shadow root
|
|
||||||
if (!element.parentNode) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return findShadowRoot(element.parentNode);
|
|
||||||
};
|
|
||||||
const noop = () => {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trick to restart an element's animation
|
|
||||||
*
|
|
||||||
* @param {HTMLElement} element
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
||||||
*/
|
|
||||||
const reflow = element => {
|
|
||||||
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
|
||||||
};
|
|
||||||
const getjQuery = () => {
|
|
||||||
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
||||||
return window.jQuery;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const DOMContentLoadedCallbacks = [];
|
|
||||||
const onDOMContentLoaded = callback => {
|
|
||||||
if (document.readyState === 'loading') {
|
|
||||||
// add listener on the first call when the document is in loading state
|
|
||||||
if (!DOMContentLoadedCallbacks.length) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
for (const callback of DOMContentLoadedCallbacks) {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
DOMContentLoadedCallbacks.push(callback);
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
||||||
const defineJQueryPlugin = plugin => {
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
|
||||||
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
|
||||||
};
|
|
||||||
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
|
||||||
if (!waitForTransition) {
|
|
||||||
execute(callback);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const durationPadding = 5;
|
|
||||||
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
|
||||||
let called = false;
|
|
||||||
const handler = ({
|
|
||||||
target
|
|
||||||
}) => {
|
|
||||||
if (target !== transitionElement) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
called = true;
|
|
||||||
transitionElement.removeEventListener(TRANSITION_END, handler);
|
|
||||||
execute(callback);
|
|
||||||
};
|
|
||||||
transitionElement.addEventListener(TRANSITION_END, handler);
|
|
||||||
setTimeout(() => {
|
|
||||||
if (!called) {
|
|
||||||
triggerTransitionEnd(transitionElement);
|
|
||||||
}
|
|
||||||
}, emulatedDuration);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the previous/next element of a list.
|
|
||||||
*
|
|
||||||
* @param {array} list The list of elements
|
|
||||||
* @param activeElement The active element
|
|
||||||
* @param shouldGetNext Choose to get next or previous element
|
|
||||||
* @param isCycleAllowed
|
|
||||||
* @return {Element|elem} The proper element
|
|
||||||
*/
|
|
||||||
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
|
||||||
const listLength = list.length;
|
|
||||||
let index = list.indexOf(activeElement);
|
|
||||||
|
|
||||||
// if the element does not exist in the list return an element
|
|
||||||
// depending on the direction and if cycle is allowed
|
|
||||||
if (index === -1) {
|
|
||||||
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
|
||||||
}
|
|
||||||
index += shouldGetNext ? 1 : -1;
|
|
||||||
if (isCycleAllowed) {
|
|
||||||
index = (index + listLength) % listLength;
|
|
||||||
}
|
|
||||||
return list[Math.max(0, Math.min(index, listLength - 1))];
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap dom/event-handler.js
|
* Bootstrap dom/event-handler.js
|
||||||
@@ -329,7 +83,6 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@@ -498,33 +251,11 @@
|
|||||||
if (typeof event !== 'string' || !element) {
|
if (typeof event !== 'string' || !element) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const $ = getjQuery();
|
|
||||||
const typeEvent = getTypeEvent(event);
|
|
||||||
const inNamespace = event !== typeEvent;
|
|
||||||
let jQueryEvent = null;
|
|
||||||
let bubbles = true;
|
|
||||||
let nativeDispatch = true;
|
|
||||||
let defaultPrevented = false;
|
|
||||||
if (inNamespace && $) {
|
|
||||||
jQueryEvent = $.Event(event, args);
|
|
||||||
$(element).trigger(jQueryEvent);
|
|
||||||
bubbles = !jQueryEvent.isPropagationStopped();
|
|
||||||
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
|
||||||
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
|
||||||
}
|
|
||||||
const evt = hydrateObj(new Event(event, {
|
const evt = hydrateObj(new Event(event, {
|
||||||
bubbles,
|
bubbles: true,
|
||||||
cancelable: true
|
cancelable: true
|
||||||
}), args);
|
}), args);
|
||||||
if (defaultPrevented) {
|
element.dispatchEvent(evt);
|
||||||
evt.preventDefault();
|
|
||||||
}
|
|
||||||
if (nativeDispatch) {
|
|
||||||
element.dispatchEvent(evt);
|
|
||||||
}
|
|
||||||
if (evt.defaultPrevented && jQueryEvent) {
|
|
||||||
jQueryEvent.preventDefault();
|
|
||||||
}
|
|
||||||
return evt;
|
return evt;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -601,6 +332,210 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap util/index.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const MAX_UID = 1000000;
|
||||||
|
const MILLISECONDS_MULTIPLIER = 1000;
|
||||||
|
const TRANSITION_END = 'transitionend';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Properly escape IDs selectors to handle weird IDs
|
||||||
|
* @param {string} selector
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
const parseSelector = selector => {
|
||||||
|
if (selector && window.CSS && window.CSS.escape) {
|
||||||
|
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
||||||
|
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
||||||
|
}
|
||||||
|
return selector;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
||||||
|
const toType = object => {
|
||||||
|
if (object === null || object === undefined) {
|
||||||
|
return `${object}`;
|
||||||
|
}
|
||||||
|
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public Util API
|
||||||
|
*/
|
||||||
|
|
||||||
|
const getUID = prefix => {
|
||||||
|
do {
|
||||||
|
prefix += Math.floor(Math.random() * MAX_UID);
|
||||||
|
} while (document.getElementById(prefix));
|
||||||
|
return prefix;
|
||||||
|
};
|
||||||
|
const getTransitionDurationFromElement = element => {
|
||||||
|
if (!element) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get transition-duration of the element
|
||||||
|
let {
|
||||||
|
transitionDuration,
|
||||||
|
transitionDelay
|
||||||
|
} = window.getComputedStyle(element);
|
||||||
|
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
||||||
|
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
||||||
|
|
||||||
|
// Return 0 if element or transition duration is not found
|
||||||
|
if (!floatTransitionDuration && !floatTransitionDelay) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If multiple durations are defined, take the first
|
||||||
|
transitionDuration = transitionDuration.split(',')[0];
|
||||||
|
transitionDelay = transitionDelay.split(',')[0];
|
||||||
|
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
||||||
|
};
|
||||||
|
const triggerTransitionEnd = element => {
|
||||||
|
element.dispatchEvent(new Event(TRANSITION_END));
|
||||||
|
};
|
||||||
|
const isElement = object => {
|
||||||
|
if (!object || typeof object !== 'object') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return typeof object.nodeType !== 'undefined';
|
||||||
|
};
|
||||||
|
const getElement = object => {
|
||||||
|
if (isElement(object)) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
if (typeof object === 'string' && object.length > 0) {
|
||||||
|
return document.querySelector(parseSelector(object));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
const isVisible = element => {
|
||||||
|
if (!isElement(element) || element.getClientRects().length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
||||||
|
// Handle `details` element as its content may falsie appear visible when it is closed
|
||||||
|
const closedDetails = element.closest('details:not([open])');
|
||||||
|
if (!closedDetails) {
|
||||||
|
return elementIsVisible;
|
||||||
|
}
|
||||||
|
if (closedDetails !== element) {
|
||||||
|
const summary = element.closest('summary');
|
||||||
|
if (summary && summary.parentNode !== closedDetails) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (summary === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return elementIsVisible;
|
||||||
|
};
|
||||||
|
const isDisabled = element => {
|
||||||
|
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (element.classList.contains('disabled')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (typeof element.disabled !== 'undefined') {
|
||||||
|
return element.disabled;
|
||||||
|
}
|
||||||
|
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
||||||
|
};
|
||||||
|
const findShadowRoot = element => {
|
||||||
|
if (!document.documentElement.attachShadow) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can find the shadow root otherwise it'll return the document
|
||||||
|
if (typeof element.getRootNode === 'function') {
|
||||||
|
const root = element.getRootNode();
|
||||||
|
return root instanceof ShadowRoot ? root : null;
|
||||||
|
}
|
||||||
|
if (element instanceof ShadowRoot) {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
// when we don't find a shadow root
|
||||||
|
if (!element.parentNode) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return findShadowRoot(element.parentNode);
|
||||||
|
};
|
||||||
|
const noop = () => {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trick to restart an element's animation
|
||||||
|
*
|
||||||
|
* @param {HTMLElement} element
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
||||||
|
*/
|
||||||
|
const reflow = element => {
|
||||||
|
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
||||||
|
};
|
||||||
|
const isRTL = () => document.documentElement.dir === 'rtl';
|
||||||
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
|
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
||||||
|
};
|
||||||
|
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
||||||
|
if (!waitForTransition) {
|
||||||
|
execute(callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const durationPadding = 5;
|
||||||
|
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
||||||
|
let called = false;
|
||||||
|
const handler = ({
|
||||||
|
target
|
||||||
|
}) => {
|
||||||
|
if (target !== transitionElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
called = true;
|
||||||
|
transitionElement.removeEventListener(TRANSITION_END, handler);
|
||||||
|
execute(callback);
|
||||||
|
};
|
||||||
|
transitionElement.addEventListener(TRANSITION_END, handler);
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!called) {
|
||||||
|
triggerTransitionEnd(transitionElement);
|
||||||
|
}
|
||||||
|
}, emulatedDuration);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the previous/next element of a list.
|
||||||
|
*
|
||||||
|
* @param {array} list The list of elements
|
||||||
|
* @param activeElement The active element
|
||||||
|
* @param shouldGetNext Choose to get next or previous element
|
||||||
|
* @param isCycleAllowed
|
||||||
|
* @return {Element|elem} The proper element
|
||||||
|
*/
|
||||||
|
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
||||||
|
const listLength = list.length;
|
||||||
|
let index = list.indexOf(activeElement);
|
||||||
|
|
||||||
|
// if the element does not exist in the list return an element
|
||||||
|
// depending on the direction and if cycle is allowed
|
||||||
|
if (index === -1) {
|
||||||
|
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
||||||
|
}
|
||||||
|
index += shouldGetNext ? 1 : -1;
|
||||||
|
if (isCycleAllowed) {
|
||||||
|
index = (index + listLength) % listLength;
|
||||||
|
}
|
||||||
|
return list[Math.max(0, Math.min(index, listLength - 1))];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/config.js
|
* Bootstrap util/config.js
|
||||||
@@ -886,20 +821,6 @@
|
|||||||
EventHandler.trigger(this._element, EVENT_CLOSED);
|
EventHandler.trigger(this._element, EVENT_CLOSED);
|
||||||
this.dispose();
|
this.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Alert.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -908,12 +829,6 @@
|
|||||||
|
|
||||||
enableDismissTrigger(Alert, 'close');
|
enableDismissTrigger(Alert, 'close');
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Alert);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap button.js
|
* Bootstrap button.js
|
||||||
@@ -949,16 +864,6 @@
|
|||||||
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
||||||
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Button.getOrCreateInstance(this);
|
|
||||||
if (config === 'toggle') {
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -972,12 +877,6 @@
|
|||||||
data.toggle();
|
data.toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Button);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/swipe.js
|
* Bootstrap util/swipe.js
|
||||||
@@ -1414,23 +1313,6 @@
|
|||||||
}
|
}
|
||||||
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Carousel.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'number') {
|
|
||||||
data.to(config);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1465,12 +1347,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Carousel);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap collapse.js
|
* Bootstrap collapse.js
|
||||||
@@ -1664,23 +1540,6 @@
|
|||||||
element.setAttribute('aria-expanded', isOpen);
|
element.setAttribute('aria-expanded', isOpen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
const _config = {};
|
|
||||||
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
||||||
_config.toggle = false;
|
|
||||||
}
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Collapse.getOrCreateInstance(this, _config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1699,12 +1558,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Collapse);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap dropdown.js
|
* Bootstrap dropdown.js
|
||||||
@@ -1978,20 +1831,6 @@
|
|||||||
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
||||||
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
|
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Dropdown.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static clearMenus(event) {
|
static clearMenus(event) {
|
||||||
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
|
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
|
||||||
return;
|
return;
|
||||||
@@ -2067,12 +1906,6 @@
|
|||||||
Dropdown.getOrCreateInstance(this).toggle();
|
Dropdown.getOrCreateInstance(this).toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Dropdown);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/backdrop.js
|
* Bootstrap util/backdrop.js
|
||||||
@@ -2645,20 +2478,6 @@
|
|||||||
this._element.style.paddingLeft = '';
|
this._element.style.paddingLeft = '';
|
||||||
this._element.style.paddingRight = '';
|
this._element.style.paddingRight = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config, relatedTarget) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Modal.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](relatedTarget);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2692,12 +2511,6 @@
|
|||||||
});
|
});
|
||||||
enableDismissTrigger(Modal);
|
enableDismissTrigger(Modal);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Modal);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap offcanvas.js
|
* Bootstrap offcanvas.js
|
||||||
@@ -2866,20 +2679,6 @@
|
|||||||
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Offcanvas.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2923,12 +2722,6 @@
|
|||||||
});
|
});
|
||||||
enableDismissTrigger(Offcanvas);
|
enableDismissTrigger(Offcanvas);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Offcanvas);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap util/sanitizer.js
|
* Bootstrap util/sanitizer.js
|
||||||
@@ -3650,28 +3443,8 @@
|
|||||||
this.tip = null;
|
this.tip = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tooltip.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tooltip);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap popover.js
|
* Bootstrap popover.js
|
||||||
@@ -3731,28 +3504,8 @@
|
|||||||
_getContent() {
|
_getContent() {
|
||||||
return this._resolvePossibleFunction(this._config.content);
|
return this._resolvePossibleFunction(this._config.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Popover.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Popover);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap scrollspy.js
|
* Bootstrap scrollspy.js
|
||||||
@@ -3981,20 +3734,6 @@
|
|||||||
node.classList.remove(CLASS_NAME_ACTIVE$1);
|
node.classList.remove(CLASS_NAME_ACTIVE$1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4007,12 +3746,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(ScrollSpy);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap tab.js
|
* Bootstrap tab.js
|
||||||
@@ -4239,20 +3972,6 @@
|
|||||||
_getOuterElement(elem) {
|
_getOuterElement(elem) {
|
||||||
return elem.closest(SELECTOR_OUTER) || elem;
|
return elem.closest(SELECTOR_OUTER) || elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tab.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4277,11 +3996,6 @@
|
|||||||
Tab.getOrCreateInstance(element);
|
Tab.getOrCreateInstance(element);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tab);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -4439,19 +4153,6 @@
|
|||||||
clearTimeout(this._timeout);
|
clearTimeout(this._timeout);
|
||||||
this._timeout = null;
|
this._timeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Toast.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4460,12 +4161,6 @@
|
|||||||
|
|
||||||
enableDismissTrigger(Toast);
|
enableDismissTrigger(Toast);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Toast);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap index.umd.js
|
* Bootstrap index.umd.js
|
||||||
|
2
dist/js/bootstrap.js.map
vendored
2
dist/js/bootstrap.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/js/bootstrap.min.js
vendored
2
dist/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/js/bootstrap.min.js.map
vendored
2
dist/js/bootstrap.min.js.map
vendored
File diff suppressed because one or more lines are too long
28
js/dist/alert.js
vendored
28
js/dist/alert.js
vendored
@@ -4,10 +4,10 @@
|
|||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
(function (global, factory) {
|
(function (global, factory) {
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./util/component-functions.js'), require('./util/index.js')) :
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./util/component-functions.js')) :
|
||||||
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './util/component-functions', './util/index'], factory) :
|
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './util/component-functions'], factory) :
|
||||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.BaseComponent, global.EventHandler, global.ComponentFunctions, global.Index));
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.BaseComponent, global.EventHandler, global.ComponentFunctions));
|
||||||
})(this, (function (BaseComponent, EventHandler, componentFunctions_js, index_js) { 'use strict';
|
})(this, (function (BaseComponent, EventHandler, componentFunctions_js) { 'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -56,20 +56,6 @@
|
|||||||
EventHandler.trigger(this._element, EVENT_CLOSED);
|
EventHandler.trigger(this._element, EVENT_CLOSED);
|
||||||
this.dispose();
|
this.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Alert.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,12 +64,6 @@
|
|||||||
|
|
||||||
componentFunctions_js.enableDismissTrigger(Alert, 'close');
|
componentFunctions_js.enableDismissTrigger(Alert, 'close');
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Alert);
|
|
||||||
|
|
||||||
return Alert;
|
return Alert;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/alert.js.map
vendored
2
js/dist/alert.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","BaseComponent","close","closeEvent","EventHandler","trigger","_element","defaultPrevented","classList","remove","isAnimated","contains","_queueCallback","_destroyElement","dispose","jQueryInterface","config","each","data","getOrCreateInstance","undefined","startsWith","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAO;EACpB,MAAMC,QAAQ,GAAG,UAAU;EAC3B,MAAMC,SAAS,GAAG,CAAA,CAAA,EAAID,QAAQ,CAAA,CAAE;EAEhC,MAAME,WAAW,GAAG,CAAA,KAAA,EAAQD,SAAS,CAAA,CAAE;EACvC,MAAME,YAAY,GAAG,CAAA,MAAA,EAASF,SAAS,CAAA,CAAE;EACzC,MAAMG,eAAe,GAAG,MAAM;EAC9B,MAAMC,eAAe,GAAG,MAAM;;EAE9B;EACA;EACA;;EAEA,MAAMC,KAAK,SAASC,aAAa,CAAC;EAChC;IACA,WAAWR,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb,EAAA;;EAEA;EACAS,EAAAA,KAAKA,GAAG;MACN,MAAMC,UAAU,GAAGC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEV,WAAW,CAAC;MAEnE,IAAIO,UAAU,CAACI,gBAAgB,EAAE;EAC/B,MAAA;EACF,IAAA;MAEA,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACC,MAAM,CAACV,eAAe,CAAC;MAE/C,MAAMW,UAAU,GAAG,IAAI,CAACJ,QAAQ,CAACE,SAAS,CAACG,QAAQ,CAACb,eAAe,CAAC;EACpE,IAAA,IAAI,CAACc,cAAc,CAAC,MAAM,IAAI,CAACC,eAAe,EAAE,EAAE,IAAI,CAACP,QAAQ,EAAEI,UAAU,CAAC;EAC9E,EAAA;;EAEA;EACAG,EAAAA,eAAeA,GAAG;EAChB,IAAA,IAAI,CAACP,QAAQ,CAACG,MAAM,EAAE;MACtBL,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAET,YAAY,CAAC;MACjD,IAAI,CAACiB,OAAO,EAAE;EAChB,EAAA;;EAEA;IACA,OAAOC,eAAeA,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGlB,KAAK,CAACmB,mBAAmB,CAAC,IAAI,CAAC;EAE5C,MAAA,IAAI,OAAOH,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF,MAAA;EAEA,MAAA,IAAIE,IAAI,CAACF,MAAM,CAAC,KAAKI,SAAS,IAAIJ,MAAM,CAACK,UAAU,CAAC,GAAG,CAAC,IAAIL,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIM,SAAS,CAAC,CAAA,iBAAA,EAAoBN,MAAM,GAAG,CAAC;EACpD,MAAA;EAEAE,MAAAA,IAAI,CAACF,MAAM,CAAC,CAAC,IAAI,CAAC;EACpB,IAAA,CAAC,CAAC;EACJ,EAAA;EACF;;EAEA;EACA;EACA;;AAEAO,4CAAoB,CAACvB,KAAK,EAAE,OAAO,CAAC;;EAEpC;EACA;EACA;;AAEAwB,6BAAkB,CAACxB,KAAK,CAAC;;;;;;;;"}
|
{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\nexport default Alert\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","BaseComponent","close","closeEvent","EventHandler","trigger","_element","defaultPrevented","classList","remove","isAnimated","contains","_queueCallback","_destroyElement","dispose","enableDismissTrigger"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAMA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAO;EACpB,MAAMC,QAAQ,GAAG,UAAU;EAC3B,MAAMC,SAAS,GAAG,CAAA,CAAA,EAAID,QAAQ,CAAA,CAAE;EAEhC,MAAME,WAAW,GAAG,CAAA,KAAA,EAAQD,SAAS,CAAA,CAAE;EACvC,MAAME,YAAY,GAAG,CAAA,MAAA,EAASF,SAAS,CAAA,CAAE;EACzC,MAAMG,eAAe,GAAG,MAAM;EAC9B,MAAMC,eAAe,GAAG,MAAM;;EAE9B;EACA;EACA;;EAEA,MAAMC,KAAK,SAASC,aAAa,CAAC;EAChC;IACA,WAAWR,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb,EAAA;;EAEA;EACAS,EAAAA,KAAKA,GAAG;MACN,MAAMC,UAAU,GAAGC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEV,WAAW,CAAC;MAEnE,IAAIO,UAAU,CAACI,gBAAgB,EAAE;EAC/B,MAAA;EACF,IAAA;MAEA,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACC,MAAM,CAACV,eAAe,CAAC;MAE/C,MAAMW,UAAU,GAAG,IAAI,CAACJ,QAAQ,CAACE,SAAS,CAACG,QAAQ,CAACb,eAAe,CAAC;EACpE,IAAA,IAAI,CAACc,cAAc,CAAC,MAAM,IAAI,CAACC,eAAe,EAAE,EAAE,IAAI,CAACP,QAAQ,EAAEI,UAAU,CAAC;EAC9E,EAAA;;EAEA;EACAG,EAAAA,eAAeA,GAAG;EAChB,IAAA,IAAI,CAACP,QAAQ,CAACG,MAAM,EAAE;MACtBL,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAET,YAAY,CAAC;MACjD,IAAI,CAACiB,OAAO,EAAE;EAChB,EAAA;EACF;;EAEA;EACA;EACA;;AAEAC,4CAAoB,CAACf,KAAK,EAAE,OAAO,CAAC;;;;;;;;"}
|
24
js/dist/button.js
vendored
24
js/dist/button.js
vendored
@@ -4,10 +4,10 @@
|
|||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
(function (global, factory) {
|
(function (global, factory) {
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./util/index.js')) :
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js')) :
|
||||||
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './util/index'], factory) :
|
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler'], factory) :
|
||||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.BaseComponent, global.EventHandler, global.Index));
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.BaseComponent, global.EventHandler));
|
||||||
})(this, (function (BaseComponent, EventHandler, index_js) { 'use strict';
|
})(this, (function (BaseComponent, EventHandler) { 'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -44,16 +44,6 @@
|
|||||||
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
||||||
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
|
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Button.getOrCreateInstance(this);
|
|
||||||
if (config === 'toggle') {
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,12 +57,6 @@
|
|||||||
data.toggle();
|
data.toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Button);
|
|
||||||
|
|
||||||
return Button;
|
return Button;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/button.js.map
vendored
2
js/dist/button.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","jQueryInterface","config","each","data","getOrCreateInstance","EventHandler","on","document","event","preventDefault","button","target","closest","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAMA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,QAAQ;EACrB,MAAMC,QAAQ,GAAG,WAAW;EAC5B,MAAMC,SAAS,GAAG,CAAA,CAAA,EAAID,QAAQ,CAAA,CAAE;EAChC,MAAME,YAAY,GAAG,WAAW;EAEhC,MAAMC,iBAAiB,GAAG,QAAQ;EAClC,MAAMC,oBAAoB,GAAG,2BAA2B;EACxD,MAAMC,oBAAoB,GAAG,CAAA,KAAA,EAAQJ,SAAS,CAAA,EAAGC,YAAY,CAAA,CAAE;;EAE/D;EACA;EACA;;EAEA,MAAMI,MAAM,SAASC,aAAa,CAAC;EACjC;IACA,WAAWR,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb,EAAA;;EAEA;EACAS,EAAAA,MAAMA,GAAG;EACP;EACA,IAAA,IAAI,CAACC,QAAQ,CAACC,YAAY,CAAC,cAAc,EAAE,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACH,MAAM,CAACL,iBAAiB,CAAC,CAAC;EAC/F,EAAA;;EAEA;IACA,OAAOS,eAAeA,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGT,MAAM,CAACU,mBAAmB,CAAC,IAAI,CAAC;QAE7C,IAAIH,MAAM,KAAK,QAAQ,EAAE;EACvBE,QAAAA,IAAI,CAACF,MAAM,CAAC,EAAE;EAChB,MAAA;EACF,IAAA,CAAC,CAAC;EACJ,EAAA;EACF;;EAEA;EACA;EACA;;EAEAI,YAAY,CAACC,EAAE,CAACC,QAAQ,EAAEd,oBAAoB,EAAED,oBAAoB,EAAEgB,KAAK,IAAI;IAC7EA,KAAK,CAACC,cAAc,EAAE;IAEtB,MAAMC,MAAM,GAAGF,KAAK,CAACG,MAAM,CAACC,OAAO,CAACpB,oBAAoB,CAAC;EACzD,EAAA,MAAMW,IAAI,GAAGT,MAAM,CAACU,mBAAmB,CAACM,MAAM,CAAC;IAE/CP,IAAI,CAACP,MAAM,EAAE;EACf,CAAC,CAAC;;EAEF;EACA;EACA;;AAEAiB,6BAAkB,CAACnB,MAAM,CAAC;;;;;;;;"}
|
{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\nexport default Button\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","EventHandler","on","document","event","preventDefault","button","target","closest","data","getOrCreateInstance"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAKA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,QAAQ;EACrB,MAAMC,QAAQ,GAAG,WAAW;EAC5B,MAAMC,SAAS,GAAG,CAAA,CAAA,EAAID,QAAQ,CAAA,CAAE;EAChC,MAAME,YAAY,GAAG,WAAW;EAEhC,MAAMC,iBAAiB,GAAG,QAAQ;EAClC,MAAMC,oBAAoB,GAAG,2BAA2B;EACxD,MAAMC,oBAAoB,GAAG,CAAA,KAAA,EAAQJ,SAAS,CAAA,EAAGC,YAAY,CAAA,CAAE;;EAE/D;EACA;EACA;;EAEA,MAAMI,MAAM,SAASC,aAAa,CAAC;EACjC;IACA,WAAWR,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb,EAAA;;EAEA;EACAS,EAAAA,MAAMA,GAAG;EACP;EACA,IAAA,IAAI,CAACC,QAAQ,CAACC,YAAY,CAAC,cAAc,EAAE,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACH,MAAM,CAACL,iBAAiB,CAAC,CAAC;EAC/F,EAAA;EACF;;EAEA;EACA;EACA;;EAEAS,YAAY,CAACC,EAAE,CAACC,QAAQ,EAAET,oBAAoB,EAAED,oBAAoB,EAAEW,KAAK,IAAI;IAC7EA,KAAK,CAACC,cAAc,EAAE;IAEtB,MAAMC,MAAM,GAAGF,KAAK,CAACG,MAAM,CAACC,OAAO,CAACf,oBAAoB,CAAC;EACzD,EAAA,MAAMgB,IAAI,GAAGd,MAAM,CAACe,mBAAmB,CAACJ,MAAM,CAAC;IAE/CG,IAAI,CAACZ,MAAM,EAAE;EACf,CAAC,CAAC;;;;;;;;"}
|
23
js/dist/carousel.js
vendored
23
js/dist/carousel.js
vendored
@@ -325,23 +325,6 @@
|
|||||||
}
|
}
|
||||||
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Carousel.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'number') {
|
|
||||||
data.to(config);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -376,12 +359,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Carousel);
|
|
||||||
|
|
||||||
return Carousel;
|
return Carousel;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/carousel.js.map
vendored
2
js/dist/carousel.js.map
vendored
File diff suppressed because one or more lines are too long
23
js/dist/collapse.js
vendored
23
js/dist/collapse.js
vendored
@@ -202,23 +202,6 @@
|
|||||||
element.setAttribute('aria-expanded', isOpen);
|
element.setAttribute('aria-expanded', isOpen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
const _config = {};
|
|
||||||
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
||||||
_config.toggle = false;
|
|
||||||
}
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Collapse.getOrCreateInstance(this, _config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -237,12 +220,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Collapse);
|
|
||||||
|
|
||||||
return Collapse;
|
return Collapse;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/collapse.js.map
vendored
2
js/dist/collapse.js.map
vendored
File diff suppressed because one or more lines are too long
35
js/dist/dom/event-handler.js
vendored
35
js/dist/dom/event-handler.js
vendored
@@ -4,10 +4,10 @@
|
|||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
(function (global, factory) {
|
(function (global, factory) {
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||||
typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory());
|
||||||
})(this, (function (index_js) { 'use strict';
|
})(this, (function () { 'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@@ -185,33 +184,11 @@
|
|||||||
if (typeof event !== 'string' || !element) {
|
if (typeof event !== 'string' || !element) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const $ = index_js.getjQuery();
|
|
||||||
const typeEvent = getTypeEvent(event);
|
|
||||||
const inNamespace = event !== typeEvent;
|
|
||||||
let jQueryEvent = null;
|
|
||||||
let bubbles = true;
|
|
||||||
let nativeDispatch = true;
|
|
||||||
let defaultPrevented = false;
|
|
||||||
if (inNamespace && $) {
|
|
||||||
jQueryEvent = $.Event(event, args);
|
|
||||||
$(element).trigger(jQueryEvent);
|
|
||||||
bubbles = !jQueryEvent.isPropagationStopped();
|
|
||||||
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
|
||||||
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
|
||||||
}
|
|
||||||
const evt = hydrateObj(new Event(event, {
|
const evt = hydrateObj(new Event(event, {
|
||||||
bubbles,
|
bubbles: true,
|
||||||
cancelable: true
|
cancelable: true
|
||||||
}), args);
|
}), args);
|
||||||
if (defaultPrevented) {
|
element.dispatchEvent(evt);
|
||||||
evt.preventDefault();
|
|
||||||
}
|
|
||||||
if (nativeDispatch) {
|
|
||||||
element.dispatchEvent(evt);
|
|
||||||
}
|
|
||||||
if (evt.defaultPrevented && jQueryEvent) {
|
|
||||||
jQueryEvent.preventDefault();
|
|
||||||
}
|
|
||||||
return evt;
|
return evt;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
2
js/dist/dom/event-handler.js.map
vendored
2
js/dist/dom/event-handler.js.map
vendored
File diff suppressed because one or more lines are too long
20
js/dist/dropdown.js
vendored
20
js/dist/dropdown.js
vendored
@@ -301,20 +301,6 @@
|
|||||||
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
||||||
index_js.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
index_js.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Dropdown.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static clearMenus(event) {
|
static clearMenus(event) {
|
||||||
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
|
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
|
||||||
return;
|
return;
|
||||||
@@ -390,12 +376,6 @@
|
|||||||
Dropdown.getOrCreateInstance(this).toggle();
|
Dropdown.getOrCreateInstance(this).toggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Dropdown);
|
|
||||||
|
|
||||||
return Dropdown;
|
return Dropdown;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/dropdown.js.map
vendored
2
js/dist/dropdown.js.map
vendored
File diff suppressed because one or more lines are too long
20
js/dist/modal.js
vendored
20
js/dist/modal.js
vendored
@@ -261,20 +261,6 @@
|
|||||||
this._element.style.paddingLeft = '';
|
this._element.style.paddingLeft = '';
|
||||||
this._element.style.paddingRight = '';
|
this._element.style.paddingRight = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config, relatedTarget) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Modal.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](relatedTarget);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -308,12 +294,6 @@
|
|||||||
});
|
});
|
||||||
componentFunctions_js.enableDismissTrigger(Modal);
|
componentFunctions_js.enableDismissTrigger(Modal);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Modal);
|
|
||||||
|
|
||||||
return Modal;
|
return Modal;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/modal.js.map
vendored
2
js/dist/modal.js.map
vendored
File diff suppressed because one or more lines are too long
20
js/dist/offcanvas.js
vendored
20
js/dist/offcanvas.js
vendored
@@ -177,20 +177,6 @@
|
|||||||
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Offcanvas.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -234,12 +220,6 @@
|
|||||||
});
|
});
|
||||||
componentFunctions_js.enableDismissTrigger(Offcanvas);
|
componentFunctions_js.enableDismissTrigger(Offcanvas);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Offcanvas);
|
|
||||||
|
|
||||||
return Offcanvas;
|
return Offcanvas;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/offcanvas.js.map
vendored
2
js/dist/offcanvas.js.map
vendored
File diff suppressed because one or more lines are too long
28
js/dist/popover.js
vendored
28
js/dist/popover.js
vendored
@@ -4,10 +4,10 @@
|
|||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
(function (global, factory) {
|
(function (global, factory) {
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./tooltip.js'), require('./util/index.js')) :
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./tooltip.js')) :
|
||||||
typeof define === 'function' && define.amd ? define(['./tooltip', './util/index'], factory) :
|
typeof define === 'function' && define.amd ? define(['./tooltip'], factory) :
|
||||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Tooltip, global.Index));
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Tooltip));
|
||||||
})(this, (function (Tooltip, index_js) { 'use strict';
|
})(this, (function (Tooltip) { 'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
@@ -68,28 +68,8 @@
|
|||||||
_getContent() {
|
_getContent() {
|
||||||
return this._resolvePossibleFunction(this._config.content);
|
return this._resolvePossibleFunction(this._config.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Popover.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Popover);
|
|
||||||
|
|
||||||
return Popover;
|
return Popover;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/popover.js.map
vendored
2
js/dist/popover.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n"],"names":["NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","Tooltip","content","offset","placement","template","trigger","DefaultType","Popover","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config","jQueryInterface","config","each","data","getOrCreateInstance","TypeError","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAKA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,SAAS;EAEtB,MAAMC,cAAc,GAAG,iBAAiB;EACxC,MAAMC,gBAAgB,GAAG,eAAe;EAExC,MAAMC,OAAO,GAAG;IACd,GAAGC,OAAO,CAACD,OAAO;EAClBE,EAAAA,OAAO,EAAE,EAAE;EACXC,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdC,EAAAA,SAAS,EAAE,OAAO;IAClBC,QAAQ,EAAE,sCAAsC,GAC9C,mCAAmC,GACnC,kCAAkC,GAClC,kCAAkC,GAClC,QAAQ;EACVC,EAAAA,OAAO,EAAE;EACX,CAAC;EAED,MAAMC,WAAW,GAAG;IAClB,GAAGN,OAAO,CAACM,WAAW;EACtBL,EAAAA,OAAO,EAAE;EACX,CAAC;;EAED;EACA;EACA;;EAEA,MAAMM,OAAO,SAASP,OAAO,CAAC;EAC5B;IACA,WAAWD,OAAOA,GAAG;EACnB,IAAA,OAAOA,OAAO;EAChB,EAAA;IAEA,WAAWO,WAAWA,GAAG;EACvB,IAAA,OAAOA,WAAW;EACpB,EAAA;IAEA,WAAWV,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb,EAAA;;EAEA;EACAY,EAAAA,cAAcA,GAAG;MACf,OAAO,IAAI,CAACC,SAAS,EAAE,IAAI,IAAI,CAACC,WAAW,EAAE;EAC/C,EAAA;;EAEA;EACAC,EAAAA,sBAAsBA,GAAG;MACvB,OAAO;EACL,MAAA,CAACd,cAAc,GAAG,IAAI,CAACY,SAAS,EAAE;EAClC,MAAA,CAACX,gBAAgB,GAAG,IAAI,CAACY,WAAW;OACrC;EACH,EAAA;EAEAA,EAAAA,WAAWA,GAAG;MACZ,OAAO,IAAI,CAACE,wBAAwB,CAAC,IAAI,CAACC,OAAO,CAACZ,OAAO,CAAC;EAC5D,EAAA;;EAEA;IACA,OAAOa,eAAeA,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGV,OAAO,CAACW,mBAAmB,CAAC,IAAI,EAAEH,MAAM,CAAC;EAEtD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF,MAAA;EAEA,MAAA,IAAI,OAAOE,IAAI,CAACF,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAII,SAAS,CAAC,CAAA,iBAAA,EAAoBJ,MAAM,GAAG,CAAC;EACpD,MAAA;EAEAE,MAAAA,IAAI,CAACF,MAAM,CAAC,EAAE;EAChB,IAAA,CAAC,CAAC;EACJ,EAAA;EACF;;EAEA;EACA;EACA;;AAEAK,6BAAkB,CAACb,OAAO,CAAC;;;;;;;;"}
|
{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n}\n\nexport default Popover\n"],"names":["NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","Tooltip","content","offset","placement","template","trigger","DefaultType","Popover","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAIA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,SAAS;EAEtB,MAAMC,cAAc,GAAG,iBAAiB;EACxC,MAAMC,gBAAgB,GAAG,eAAe;EAExC,MAAMC,OAAO,GAAG;IACd,GAAGC,OAAO,CAACD,OAAO;EAClBE,EAAAA,OAAO,EAAE,EAAE;EACXC,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdC,EAAAA,SAAS,EAAE,OAAO;IAClBC,QAAQ,EAAE,sCAAsC,GAC9C,mCAAmC,GACnC,kCAAkC,GAClC,kCAAkC,GAClC,QAAQ;EACVC,EAAAA,OAAO,EAAE;EACX,CAAC;EAED,MAAMC,WAAW,GAAG;IAClB,GAAGN,OAAO,CAACM,WAAW;EACtBL,EAAAA,OAAO,EAAE;EACX,CAAC;;EAED;EACA;EACA;;EAEA,MAAMM,OAAO,SAASP,OAAO,CAAC;EAC5B;IACA,WAAWD,OAAOA,GAAG;EACnB,IAAA,OAAOA,OAAO;EAChB,EAAA;IAEA,WAAWO,WAAWA,GAAG;EACvB,IAAA,OAAOA,WAAW;EACpB,EAAA;IAEA,WAAWV,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb,EAAA;;EAEA;EACAY,EAAAA,cAAcA,GAAG;MACf,OAAO,IAAI,CAACC,SAAS,EAAE,IAAI,IAAI,CAACC,WAAW,EAAE;EAC/C,EAAA;;EAEA;EACAC,EAAAA,sBAAsBA,GAAG;MACvB,OAAO;EACL,MAAA,CAACd,cAAc,GAAG,IAAI,CAACY,SAAS,EAAE;EAClC,MAAA,CAACX,gBAAgB,GAAG,IAAI,CAACY,WAAW;OACrC;EACH,EAAA;EAEAA,EAAAA,WAAWA,GAAG;MACZ,OAAO,IAAI,CAACE,wBAAwB,CAAC,IAAI,CAACC,OAAO,CAACZ,OAAO,CAAC;EAC5D,EAAA;EACF;;;;;;;;"}
|
20
js/dist/scrollspy.js
vendored
20
js/dist/scrollspy.js
vendored
@@ -237,20 +237,6 @@
|
|||||||
node.classList.remove(CLASS_NAME_ACTIVE);
|
node.classList.remove(CLASS_NAME_ACTIVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -263,12 +249,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(ScrollSpy);
|
|
||||||
|
|
||||||
return ScrollSpy;
|
return ScrollSpy;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/scrollspy.js.map
vendored
2
js/dist/scrollspy.js.map
vendored
File diff suppressed because one or more lines are too long
19
js/dist/tab.js
vendored
19
js/dist/tab.js
vendored
@@ -235,20 +235,6 @@
|
|||||||
_getOuterElement(elem) {
|
_getOuterElement(elem) {
|
||||||
return elem.closest(SELECTOR_OUTER) || elem;
|
return elem.closest(SELECTOR_OUTER) || elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tab.getOrCreateInstance(this);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -273,11 +259,6 @@
|
|||||||
Tab.getOrCreateInstance(element);
|
Tab.getOrCreateInstance(element);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Tab);
|
|
||||||
|
|
||||||
return Tab;
|
return Tab;
|
||||||
|
|
||||||
|
2
js/dist/tab.js.map
vendored
2
js/dist/tab.js.map
vendored
File diff suppressed because one or more lines are too long
19
js/dist/toast.js
vendored
19
js/dist/toast.js
vendored
@@ -165,19 +165,6 @@
|
|||||||
clearTimeout(this._timeout);
|
clearTimeout(this._timeout);
|
||||||
this._timeout = null;
|
this._timeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Toast.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config](this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -186,12 +173,6 @@
|
|||||||
|
|
||||||
componentFunctions_js.enableDismissTrigger(Toast);
|
componentFunctions_js.enableDismissTrigger(Toast);
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Toast);
|
|
||||||
|
|
||||||
return Toast;
|
return Toast;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/toast.js.map
vendored
2
js/dist/toast.js.map
vendored
File diff suppressed because one or more lines are too long
20
js/dist/tooltip.js
vendored
20
js/dist/tooltip.js
vendored
@@ -518,28 +518,8 @@
|
|||||||
this.tip = null;
|
this.tip = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tooltip.getOrCreateInstance(this, config);
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`);
|
|
||||||
}
|
|
||||||
data[config]();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
index_js.defineJQueryPlugin(Tooltip);
|
|
||||||
|
|
||||||
return Tooltip;
|
return Tooltip;
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
2
js/dist/tooltip.js.map
vendored
2
js/dist/tooltip.js.map
vendored
File diff suppressed because one or more lines are too long
30
js/dist/util/index.js
vendored
30
js/dist/util/index.js
vendored
@@ -81,15 +81,11 @@
|
|||||||
if (!object || typeof object !== 'object') {
|
if (!object || typeof object !== 'object') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (typeof object.jquery !== 'undefined') {
|
|
||||||
object = object[0];
|
|
||||||
}
|
|
||||||
return typeof object.nodeType !== 'undefined';
|
return typeof object.nodeType !== 'undefined';
|
||||||
};
|
};
|
||||||
const getElement = object => {
|
const getElement = object => {
|
||||||
// it's a jQuery object or a node element
|
|
||||||
if (isElement(object)) {
|
if (isElement(object)) {
|
||||||
return object.jquery ? object[0] : object;
|
return object;
|
||||||
}
|
}
|
||||||
if (typeof object === 'string' && object.length > 0) {
|
if (typeof object === 'string' && object.length > 0) {
|
||||||
return document.querySelector(parseSelector(object));
|
return document.querySelector(parseSelector(object));
|
||||||
@@ -162,12 +158,6 @@
|
|||||||
const reflow = element => {
|
const reflow = element => {
|
||||||
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
||||||
};
|
};
|
||||||
const getjQuery = () => {
|
|
||||||
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
||||||
return window.jQuery;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const DOMContentLoadedCallbacks = [];
|
const DOMContentLoadedCallbacks = [];
|
||||||
const onDOMContentLoaded = callback => {
|
const onDOMContentLoaded = callback => {
|
||||||
if (document.readyState === 'loading') {
|
if (document.readyState === 'loading') {
|
||||||
@@ -185,22 +175,6 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const isRTL = () => document.documentElement.dir === 'rtl';
|
const isRTL = () => document.documentElement.dir === 'rtl';
|
||||||
const defineJQueryPlugin = plugin => {
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;
|
||||||
};
|
};
|
||||||
@@ -255,7 +229,6 @@
|
|||||||
return list[Math.max(0, Math.min(index, listLength - 1))];
|
return list[Math.max(0, Math.min(index, listLength - 1))];
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.defineJQueryPlugin = defineJQueryPlugin;
|
|
||||||
exports.execute = execute;
|
exports.execute = execute;
|
||||||
exports.executeAfterTransition = executeAfterTransition;
|
exports.executeAfterTransition = executeAfterTransition;
|
||||||
exports.findShadowRoot = findShadowRoot;
|
exports.findShadowRoot = findShadowRoot;
|
||||||
@@ -263,7 +236,6 @@
|
|||||||
exports.getNextActiveElement = getNextActiveElement;
|
exports.getNextActiveElement = getNextActiveElement;
|
||||||
exports.getTransitionDurationFromElement = getTransitionDurationFromElement;
|
exports.getTransitionDurationFromElement = getTransitionDurationFromElement;
|
||||||
exports.getUID = getUID;
|
exports.getUID = getUID;
|
||||||
exports.getjQuery = getjQuery;
|
|
||||||
exports.isDisabled = isDisabled;
|
exports.isDisabled = isDisabled;
|
||||||
exports.isElement = isElement;
|
exports.isElement = isElement;
|
||||||
exports.isRTL = isRTL;
|
exports.isRTL = isRTL;
|
||||||
|
2
js/dist/util/index.js.map
vendored
2
js/dist/util/index.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -8,7 +8,6 @@
|
|||||||
import BaseComponent from './base-component.js'
|
import BaseComponent from './base-component.js'
|
||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import { enableDismissTrigger } from './util/component-functions.js'
|
import { enableDismissTrigger } from './util/component-functions.js'
|
||||||
import { defineJQueryPlugin } from './util/index.js'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
@@ -53,23 +52,6 @@ class Alert extends BaseComponent {
|
|||||||
EventHandler.trigger(this._element, EVENT_CLOSED)
|
EventHandler.trigger(this._element, EVENT_CLOSED)
|
||||||
this.dispose()
|
this.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Alert.getOrCreateInstance(this)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config](this)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,10 +60,4 @@ class Alert extends BaseComponent {
|
|||||||
|
|
||||||
enableDismissTrigger(Alert, 'close')
|
enableDismissTrigger(Alert, 'close')
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Alert)
|
|
||||||
|
|
||||||
export default Alert
|
export default Alert
|
||||||
|
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import BaseComponent from './base-component.js'
|
import BaseComponent from './base-component.js'
|
||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import { defineJQueryPlugin } from './util/index.js'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
@@ -37,17 +36,6 @@ class Button extends BaseComponent {
|
|||||||
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
||||||
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))
|
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Button.getOrCreateInstance(this)
|
|
||||||
|
|
||||||
if (config === 'toggle') {
|
|
||||||
data[config]()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,10 +51,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
|
|||||||
data.toggle()
|
data.toggle()
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Button)
|
|
||||||
|
|
||||||
export default Button
|
export default Button
|
||||||
|
@@ -10,7 +10,6 @@ import EventHandler from './dom/event-handler.js'
|
|||||||
import Manipulator from './dom/manipulator.js'
|
import Manipulator from './dom/manipulator.js'
|
||||||
import SelectorEngine from './dom/selector-engine.js'
|
import SelectorEngine from './dom/selector-engine.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin,
|
|
||||||
getNextActiveElement,
|
getNextActiveElement,
|
||||||
isRTL,
|
isRTL,
|
||||||
isVisible,
|
isVisible,
|
||||||
@@ -403,26 +402,6 @@ class Carousel extends BaseComponent {
|
|||||||
|
|
||||||
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT
|
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Carousel.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config === 'number') {
|
|
||||||
data.to(config)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -465,10 +444,4 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Carousel)
|
|
||||||
|
|
||||||
export default Carousel
|
export default Carousel
|
||||||
|
@@ -9,7 +9,6 @@ import BaseComponent from './base-component.js'
|
|||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import SelectorEngine from './dom/selector-engine.js'
|
import SelectorEngine from './dom/selector-engine.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin,
|
|
||||||
getElement,
|
getElement,
|
||||||
reflow
|
reflow
|
||||||
} from './util/index.js'
|
} from './util/index.js'
|
||||||
@@ -251,26 +250,6 @@ class Collapse extends BaseComponent {
|
|||||||
element.setAttribute('aria-expanded', isOpen)
|
element.setAttribute('aria-expanded', isOpen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
const _config = {}
|
|
||||||
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
||||||
_config.toggle = false
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Collapse.getOrCreateInstance(this, _config)
|
|
||||||
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -288,10 +267,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Collapse)
|
|
||||||
|
|
||||||
export default Collapse
|
export default Collapse
|
||||||
|
@@ -5,8 +5,6 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getjQuery } from '../util/index.js'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@@ -261,38 +259,8 @@ const EventHandler = {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
const $ = getjQuery()
|
const evt = hydrateObj(new Event(event, { bubbles: true, cancelable: true }), args)
|
||||||
const typeEvent = getTypeEvent(event)
|
element.dispatchEvent(evt)
|
||||||
const inNamespace = event !== typeEvent
|
|
||||||
|
|
||||||
let jQueryEvent = null
|
|
||||||
let bubbles = true
|
|
||||||
let nativeDispatch = true
|
|
||||||
let defaultPrevented = false
|
|
||||||
|
|
||||||
if (inNamespace && $) {
|
|
||||||
jQueryEvent = $.Event(event, args)
|
|
||||||
|
|
||||||
$(element).trigger(jQueryEvent)
|
|
||||||
bubbles = !jQueryEvent.isPropagationStopped()
|
|
||||||
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()
|
|
||||||
defaultPrevented = jQueryEvent.isDefaultPrevented()
|
|
||||||
}
|
|
||||||
|
|
||||||
const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)
|
|
||||||
|
|
||||||
if (defaultPrevented) {
|
|
||||||
evt.preventDefault()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nativeDispatch) {
|
|
||||||
element.dispatchEvent(evt)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (evt.defaultPrevented && jQueryEvent) {
|
|
||||||
jQueryEvent.preventDefault()
|
|
||||||
}
|
|
||||||
|
|
||||||
return evt
|
return evt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,6 @@ import EventHandler from './dom/event-handler.js'
|
|||||||
import Manipulator from './dom/manipulator.js'
|
import Manipulator from './dom/manipulator.js'
|
||||||
import SelectorEngine from './dom/selector-engine.js'
|
import SelectorEngine from './dom/selector-engine.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin,
|
|
||||||
execute,
|
execute,
|
||||||
getElement,
|
getElement,
|
||||||
getNextActiveElement,
|
getNextActiveElement,
|
||||||
@@ -336,23 +335,6 @@ class Dropdown extends BaseComponent {
|
|||||||
getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()
|
getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Dropdown.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
static clearMenus(event) {
|
static clearMenus(event) {
|
||||||
if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {
|
if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {
|
||||||
return
|
return
|
||||||
@@ -446,10 +428,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|||||||
Dropdown.getOrCreateInstance(this).toggle()
|
Dropdown.getOrCreateInstance(this).toggle()
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Dropdown)
|
|
||||||
|
|
||||||
export default Dropdown
|
export default Dropdown
|
||||||
|
@@ -12,7 +12,7 @@ import Backdrop from './util/backdrop.js'
|
|||||||
import { enableDismissTrigger } from './util/component-functions.js'
|
import { enableDismissTrigger } from './util/component-functions.js'
|
||||||
import FocusTrap from './util/focustrap.js'
|
import FocusTrap from './util/focustrap.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin, isRTL, isVisible, reflow
|
isRTL, isVisible, reflow
|
||||||
} from './util/index.js'
|
} from './util/index.js'
|
||||||
import ScrollBarHelper from './util/scrollbar.js'
|
import ScrollBarHelper from './util/scrollbar.js'
|
||||||
|
|
||||||
@@ -313,23 +313,6 @@ class Modal extends BaseComponent {
|
|||||||
this._element.style.paddingLeft = ''
|
this._element.style.paddingLeft = ''
|
||||||
this._element.style.paddingRight = ''
|
this._element.style.paddingRight = ''
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config, relatedTarget) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Modal.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config](relatedTarget)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -369,10 +352,4 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|||||||
|
|
||||||
enableDismissTrigger(Modal)
|
enableDismissTrigger(Modal)
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Modal)
|
|
||||||
|
|
||||||
export default Modal
|
export default Modal
|
||||||
|
@@ -12,7 +12,6 @@ import Backdrop from './util/backdrop.js'
|
|||||||
import { enableDismissTrigger } from './util/component-functions.js'
|
import { enableDismissTrigger } from './util/component-functions.js'
|
||||||
import FocusTrap from './util/focustrap.js'
|
import FocusTrap from './util/focustrap.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin,
|
|
||||||
isDisabled,
|
isDisabled,
|
||||||
isVisible
|
isVisible
|
||||||
} from './util/index.js'
|
} from './util/index.js'
|
||||||
@@ -206,23 +205,6 @@ class Offcanvas extends BaseComponent {
|
|||||||
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)
|
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Offcanvas.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config](this)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -273,10 +255,4 @@ EventHandler.on(window, EVENT_RESIZE, () => {
|
|||||||
|
|
||||||
enableDismissTrigger(Offcanvas)
|
enableDismissTrigger(Offcanvas)
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Offcanvas)
|
|
||||||
|
|
||||||
export default Offcanvas
|
export default Offcanvas
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import Tooltip from './tooltip.js'
|
import Tooltip from './tooltip.js'
|
||||||
import { defineJQueryPlugin } from './util/index.js'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
@@ -69,29 +68,6 @@ class Popover extends Tooltip {
|
|||||||
_getContent() {
|
_getContent() {
|
||||||
return this._resolvePossibleFunction(this._config.content)
|
return this._resolvePossibleFunction(this._config.content)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Popover.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Popover)
|
|
||||||
|
|
||||||
export default Popover
|
export default Popover
|
||||||
|
@@ -9,7 +9,7 @@ import BaseComponent from './base-component.js'
|
|||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import SelectorEngine from './dom/selector-engine.js'
|
import SelectorEngine from './dom/selector-engine.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin, getElement, isDisabled, isVisible
|
getElement, isDisabled, isVisible
|
||||||
} from './util/index.js'
|
} from './util/index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -258,23 +258,6 @@ class ScrollSpy extends BaseComponent {
|
|||||||
node.classList.remove(CLASS_NAME_ACTIVE)
|
node.classList.remove(CLASS_NAME_ACTIVE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = ScrollSpy.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -287,10 +270,4 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(ScrollSpy)
|
|
||||||
|
|
||||||
export default ScrollSpy
|
export default ScrollSpy
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
import BaseComponent from './base-component.js'
|
import BaseComponent from './base-component.js'
|
||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import SelectorEngine from './dom/selector-engine.js'
|
import SelectorEngine from './dom/selector-engine.js'
|
||||||
import { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'
|
import { getNextActiveElement, isDisabled } from './util/index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
@@ -263,23 +263,6 @@ class Tab extends BaseComponent {
|
|||||||
_getOuterElement(elem) {
|
_getOuterElement(elem) {
|
||||||
return elem.closest(SELECTOR_OUTER) || elem
|
return elem.closest(SELECTOR_OUTER) || elem
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tab.getOrCreateInstance(this)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -306,10 +289,5 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|||||||
Tab.getOrCreateInstance(element)
|
Tab.getOrCreateInstance(element)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tab)
|
|
||||||
|
|
||||||
export default Tab
|
export default Tab
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
import BaseComponent from './base-component.js'
|
import BaseComponent from './base-component.js'
|
||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import { enableDismissTrigger } from './util/component-functions.js'
|
import { enableDismissTrigger } from './util/component-functions.js'
|
||||||
import { defineJQueryPlugin, reflow } from './util/index.js'
|
import { reflow } from './util/index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
@@ -192,21 +192,6 @@ class Toast extends BaseComponent {
|
|||||||
clearTimeout(this._timeout)
|
clearTimeout(this._timeout)
|
||||||
this._timeout = null
|
this._timeout = null
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Toast.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config](this)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -215,10 +200,4 @@ class Toast extends BaseComponent {
|
|||||||
|
|
||||||
enableDismissTrigger(Toast)
|
enableDismissTrigger(Toast)
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Toast)
|
|
||||||
|
|
||||||
export default Toast
|
export default Toast
|
||||||
|
@@ -10,7 +10,7 @@ import BaseComponent from './base-component.js'
|
|||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import Manipulator from './dom/manipulator.js'
|
import Manipulator from './dom/manipulator.js'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop
|
execute, findShadowRoot, getElement, getUID, isRTL, noop
|
||||||
} from './util/index.js'
|
} from './util/index.js'
|
||||||
import { DefaultAllowlist } from './util/sanitizer.js'
|
import { DefaultAllowlist } from './util/sanitizer.js'
|
||||||
import TemplateFactory from './util/template-factory.js'
|
import TemplateFactory from './util/template-factory.js'
|
||||||
@@ -605,29 +605,5 @@ class Tooltip extends BaseComponent {
|
|||||||
this.tip = null
|
this.tip = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
|
||||||
static jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
const data = Tooltip.getOrCreateInstance(this, config)
|
|
||||||
|
|
||||||
if (typeof config !== 'string') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof data[config] === 'undefined') {
|
|
||||||
throw new TypeError(`No method named "${config}"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
data[config]()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery
|
|
||||||
*/
|
|
||||||
|
|
||||||
defineJQueryPlugin(Tooltip)
|
|
||||||
|
|
||||||
export default Tooltip
|
export default Tooltip
|
||||||
|
@@ -76,17 +76,12 @@ const isElement = object => {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof object.jquery !== 'undefined') {
|
|
||||||
object = object[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
return typeof object.nodeType !== 'undefined'
|
return typeof object.nodeType !== 'undefined'
|
||||||
}
|
}
|
||||||
|
|
||||||
const getElement = object => {
|
const getElement = object => {
|
||||||
// it's a jQuery object or a node element
|
|
||||||
if (isElement(object)) {
|
if (isElement(object)) {
|
||||||
return object.jquery ? object[0] : object
|
return object
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof object === 'string' && object.length > 0) {
|
if (typeof object === 'string' && object.length > 0) {
|
||||||
@@ -176,14 +171,6 @@ const reflow = element => {
|
|||||||
element.offsetHeight // eslint-disable-line no-unused-expressions
|
element.offsetHeight // eslint-disable-line no-unused-expressions
|
||||||
}
|
}
|
||||||
|
|
||||||
const getjQuery = () => {
|
|
||||||
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
||||||
return window.jQuery
|
|
||||||
}
|
|
||||||
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
const DOMContentLoadedCallbacks = []
|
const DOMContentLoadedCallbacks = []
|
||||||
|
|
||||||
const onDOMContentLoaded = callback => {
|
const onDOMContentLoaded = callback => {
|
||||||
@@ -205,23 +192,6 @@ const onDOMContentLoaded = callback => {
|
|||||||
|
|
||||||
const isRTL = () => document.documentElement.dir === 'rtl'
|
const isRTL = () => document.documentElement.dir === 'rtl'
|
||||||
|
|
||||||
const defineJQueryPlugin = plugin => {
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue
|
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue
|
||||||
}
|
}
|
||||||
@@ -284,12 +254,10 @@ const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed
|
|||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
defineJQueryPlugin,
|
|
||||||
execute,
|
execute,
|
||||||
executeAfterTransition,
|
executeAfterTransition,
|
||||||
findShadowRoot,
|
findShadowRoot,
|
||||||
getElement,
|
getElement,
|
||||||
getjQuery,
|
|
||||||
getNextActiveElement,
|
getNextActiveElement,
|
||||||
getTransitionDurationFromElement,
|
getTransitionDurationFromElement,
|
||||||
getUID,
|
getUID,
|
||||||
|
@@ -27,16 +27,6 @@ export const createEvent = (eventName, parameters = {}) => {
|
|||||||
return new Event(eventName, parameters)
|
return new Event(eventName, parameters)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const jQueryMock = {
|
|
||||||
elements: undefined,
|
|
||||||
fn: {},
|
|
||||||
each(fn) {
|
|
||||||
for (const element of this.elements) {
|
|
||||||
fn.call(element)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const clearBodyAndDocument = () => {
|
export const clearBodyAndDocument = () => {
|
||||||
const attributes = ['data-bs-padding-right', 'style']
|
const attributes = ['data-bs-padding-right', 'style']
|
||||||
|
|
||||||
|
@@ -11,7 +11,6 @@ const { browsers } = require('./browsers.js')
|
|||||||
const ENV = process.env
|
const ENV = process.env
|
||||||
const BROWSERSTACK = Boolean(ENV.BROWSERSTACK)
|
const BROWSERSTACK = Boolean(ENV.BROWSERSTACK)
|
||||||
const DEBUG = Boolean(ENV.DEBUG)
|
const DEBUG = Boolean(ENV.DEBUG)
|
||||||
const JQUERY_TEST = Boolean(ENV.JQUERY)
|
|
||||||
|
|
||||||
const frameworks = [
|
const frameworks = [
|
||||||
'jasmine'
|
'jasmine'
|
||||||
@@ -61,7 +60,7 @@ const config = {
|
|||||||
files: [
|
files: [
|
||||||
'node_modules/hammer-simulator/index.js',
|
'node_modules/hammer-simulator/index.js',
|
||||||
{
|
{
|
||||||
pattern: 'js/tests/unit/**/!(jquery).spec.js',
|
pattern: 'js/tests/unit/**/*.spec.js',
|
||||||
watched: !BROWSERSTACK
|
watched: !BROWSERSTACK
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -111,21 +110,6 @@ if (BROWSERSTACK) {
|
|||||||
config.customLaunchers = browsers
|
config.customLaunchers = browsers
|
||||||
config.browsers = Object.keys(browsers)
|
config.browsers = Object.keys(browsers)
|
||||||
reporters.push('BrowserStack', 'kjhtml')
|
reporters.push('BrowserStack', 'kjhtml')
|
||||||
} else if (JQUERY_TEST) {
|
|
||||||
frameworks.push('detectBrowsers')
|
|
||||||
plugins.push(
|
|
||||||
'karma-chrome-launcher',
|
|
||||||
'karma-firefox-launcher',
|
|
||||||
'karma-detect-browsers'
|
|
||||||
)
|
|
||||||
config.detectBrowsers = detectBrowsers
|
|
||||||
config.files = [
|
|
||||||
'node_modules/jquery/dist/jquery.slim.min.js',
|
|
||||||
{
|
|
||||||
pattern: 'js/tests/unit/jquery.spec.js',
|
|
||||||
watched: false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
} else {
|
} else {
|
||||||
frameworks.push('detectBrowsers')
|
frameworks.push('detectBrowsers')
|
||||||
plugins.push(
|
plugins.push(
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Alert from '../../src/alert.js'
|
import Alert from '../../src/alert.js'
|
||||||
import { getTransitionDurationFromElement } from '../../src/util/index.js'
|
import { getTransitionDurationFromElement } from '../../src/util/index.js'
|
||||||
import { clearFixture, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import { clearFixture, getFixture } from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Alert', () => {
|
describe('Alert', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
@@ -141,80 +141,6 @@ describe('Alert', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should handle config passed and toggle existing alert', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="alert"></div>'
|
|
||||||
|
|
||||||
const alertEl = fixtureEl.querySelector('.alert')
|
|
||||||
const alert = new Alert(alertEl)
|
|
||||||
|
|
||||||
const spy = spyOn(alert, 'close')
|
|
||||||
|
|
||||||
jQueryMock.fn.alert = Alert.jQueryInterface
|
|
||||||
jQueryMock.elements = [alertEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.alert.call(jQueryMock, 'close')
|
|
||||||
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create new alert instance and call close', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="alert"></div>'
|
|
||||||
|
|
||||||
const alertEl = fixtureEl.querySelector('.alert')
|
|
||||||
|
|
||||||
jQueryMock.fn.alert = Alert.jQueryInterface
|
|
||||||
jQueryMock.elements = [alertEl]
|
|
||||||
|
|
||||||
expect(Alert.getInstance(alertEl)).toBeNull()
|
|
||||||
jQueryMock.fn.alert.call(jQueryMock, 'close')
|
|
||||||
|
|
||||||
expect(fixtureEl.querySelector('.alert')).toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should just create an alert instance without calling close', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="alert"></div>'
|
|
||||||
|
|
||||||
const alertEl = fixtureEl.querySelector('.alert')
|
|
||||||
|
|
||||||
jQueryMock.fn.alert = Alert.jQueryInterface
|
|
||||||
jQueryMock.elements = [alertEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.alert.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Alert.getInstance(alertEl)).not.toBeNull()
|
|
||||||
expect(fixtureEl.querySelector('.alert')).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw an error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.alert = Alert.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.alert.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw an error on protected method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = '_getConfig'
|
|
||||||
|
|
||||||
jQueryMock.fn.alert = Alert.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.alert.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return alert instance', () => {
|
it('should return alert instance', () => {
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
fixtureEl.innerHTML = '<div></div>'
|
||||||
|
@@ -124,18 +124,11 @@ describe('Base Component', () => {
|
|||||||
expect(DummyClass.getInstance(element)).toBeInstanceOf(DummyClass)
|
expect(DummyClass.getInstance(element)).toBeInstanceOf(DummyClass)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should accept element, either passed as a CSS selector, jQuery element, or DOM element', () => {
|
it('should accept element, either passed as a CSS selector or DOM element', () => {
|
||||||
createInstance()
|
createInstance()
|
||||||
|
|
||||||
expect(DummyClass.getInstance('#foo')).toEqual(instance)
|
expect(DummyClass.getInstance('#foo')).toEqual(instance)
|
||||||
expect(DummyClass.getInstance(element)).toEqual(instance)
|
expect(DummyClass.getInstance(element)).toEqual(instance)
|
||||||
|
|
||||||
const fakejQueryObject = {
|
|
||||||
0: element,
|
|
||||||
jquery: 'foo'
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(DummyClass.getInstance(fakejQueryObject)).toEqual(instance)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return null when there is no instance', () => {
|
it('should return null when there is no instance', () => {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import Button from '../../src/button.js'
|
import Button from '../../src/button.js'
|
||||||
import { clearFixture, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import { clearFixture, getFixture } from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Button', () => {
|
describe('Button', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
@@ -93,52 +93,6 @@ describe('Button', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should handle config passed and toggle existing button', () => {
|
|
||||||
fixtureEl.innerHTML = '<button class="btn" data-bs-toggle="button"></button>'
|
|
||||||
|
|
||||||
const btnEl = fixtureEl.querySelector('.btn')
|
|
||||||
const button = new Button(btnEl)
|
|
||||||
|
|
||||||
const spy = spyOn(button, 'toggle')
|
|
||||||
|
|
||||||
jQueryMock.fn.button = Button.jQueryInterface
|
|
||||||
jQueryMock.elements = [btnEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.button.call(jQueryMock, 'toggle')
|
|
||||||
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create new button instance and call toggle', () => {
|
|
||||||
fixtureEl.innerHTML = '<button class="btn" data-bs-toggle="button"></button>'
|
|
||||||
|
|
||||||
const btnEl = fixtureEl.querySelector('.btn')
|
|
||||||
|
|
||||||
jQueryMock.fn.button = Button.jQueryInterface
|
|
||||||
jQueryMock.elements = [btnEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.button.call(jQueryMock, 'toggle')
|
|
||||||
|
|
||||||
expect(Button.getInstance(btnEl)).not.toBeNull()
|
|
||||||
expect(btnEl).toHaveClass('active')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should just create a button instance without calling toggle', () => {
|
|
||||||
fixtureEl.innerHTML = '<button class="btn" data-bs-toggle="button"></button>'
|
|
||||||
|
|
||||||
const btnEl = fixtureEl.querySelector('.btn')
|
|
||||||
|
|
||||||
jQueryMock.fn.button = Button.jQueryInterface
|
|
||||||
jQueryMock.elements = [btnEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.button.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Button.getInstance(btnEl)).not.toBeNull()
|
|
||||||
expect(btnEl).not.toHaveClass('active')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return button instance', () => {
|
it('should return button instance', () => {
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
fixtureEl.innerHTML = '<div></div>'
|
||||||
|
@@ -3,7 +3,7 @@ import EventHandler from '../../src/dom/event-handler.js'
|
|||||||
import { isRTL, noop } from '../../src/util/index.js'
|
import { isRTL, noop } from '../../src/util/index.js'
|
||||||
import Swipe from '../../src/util/swipe.js'
|
import Swipe from '../../src/util/swipe.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, createEvent, getFixture, jQueryMock
|
clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Carousel', () => {
|
describe('Carousel', () => {
|
||||||
@@ -1379,66 +1379,6 @@ describe('Carousel', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a carousel', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel = Carousel.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Carousel.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a carousel', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const carousel = new Carousel(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel = Carousel.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Carousel.getInstance(div)).toEqual(carousel)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call to if the config is a number', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const carousel = new Carousel(div)
|
|
||||||
const slideTo = 2
|
|
||||||
|
|
||||||
const spy = spyOn(carousel, 'to')
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel = Carousel.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel.call(jQueryMock, slideTo)
|
|
||||||
|
|
||||||
expect(spy).toHaveBeenCalledWith(slideTo)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.carousel = Carousel.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.carousel.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('data-api', () => {
|
describe('data-api', () => {
|
||||||
it('should init carousels with data-bs-ride="carousel" on load', () => {
|
it('should init carousels with data-bs-ride="carousel" on load', () => {
|
||||||
fixtureEl.innerHTML = '<div data-bs-ride="carousel"></div>'
|
fixtureEl.innerHTML = '<div data-bs-ride="carousel"></div>'
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Collapse from '../../src/collapse.js'
|
import Collapse from '../../src/collapse.js'
|
||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import { clearFixture, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import { clearFixture, getFixture } from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Collapse', () => {
|
describe('Collapse', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
@@ -43,30 +43,7 @@ describe('Collapse', () => {
|
|||||||
expect(collapseByElement._element).toEqual(collapseEl)
|
expect(collapseByElement._element).toEqual(collapseEl)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should allow jquery object in parent config', () => {
|
it('should allow object in parent config', () => {
|
||||||
fixtureEl.innerHTML = [
|
|
||||||
'<div class="my-collapse">',
|
|
||||||
' <div class="item">',
|
|
||||||
' <a data-bs-toggle="collapse" href="#">Toggle item</a>',
|
|
||||||
' <div class="collapse">Lorem ipsum</div>',
|
|
||||||
' </div>',
|
|
||||||
'</div>'
|
|
||||||
].join('')
|
|
||||||
|
|
||||||
const collapseEl = fixtureEl.querySelector('div.collapse')
|
|
||||||
const myCollapseEl = fixtureEl.querySelector('.my-collapse')
|
|
||||||
const fakejQueryObject = {
|
|
||||||
0: myCollapseEl,
|
|
||||||
jquery: 'foo'
|
|
||||||
}
|
|
||||||
const collapse = new Collapse(collapseEl, {
|
|
||||||
parent: fakejQueryObject
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(collapse._config.parent).toEqual(myCollapseEl)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should allow non jquery object in parent config', () => {
|
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
'<div class="my-collapse">',
|
'<div class="my-collapse">',
|
||||||
' <div class="item">',
|
' <div class="item">',
|
||||||
@@ -943,49 +920,6 @@ describe('Collapse', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a collapse', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.collapse = Collapse.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.collapse.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Collapse.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a collapse', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const collapse = new Collapse(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.collapse = Collapse.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.collapse.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Collapse.getInstance(div)).toEqual(collapse)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.collapse = Collapse.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.collapse.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return collapse instance', () => {
|
it('should return collapse instance', () => {
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
fixtureEl.innerHTML = '<div></div>'
|
||||||
|
@@ -2,7 +2,7 @@ import EventHandler from '../../src/dom/event-handler.js'
|
|||||||
import Dropdown from '../../src/dropdown.js'
|
import Dropdown from '../../src/dropdown.js'
|
||||||
import { noop } from '../../src/util/index.js'
|
import { noop } from '../../src/util/index.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, createEvent, getFixture, jQueryMock
|
clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Dropdown', () => {
|
describe('Dropdown', () => {
|
||||||
@@ -508,32 +508,6 @@ describe('Dropdown', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should toggle a dropdown with a jquery object reference', () => {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
fixtureEl.innerHTML = [
|
|
||||||
'<div class="dropdown">',
|
|
||||||
' <button class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>',
|
|
||||||
' <div class="dropdown-menu">',
|
|
||||||
' <a class="dropdown-item" href="#">Secondary link</a>',
|
|
||||||
' </div>',
|
|
||||||
'</div>'
|
|
||||||
].join('')
|
|
||||||
|
|
||||||
const btnDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
|
|
||||||
const dropdown = new Dropdown(btnDropdown, {
|
|
||||||
reference: { 0: fixtureEl, jquery: 'jQuery' }
|
|
||||||
})
|
|
||||||
|
|
||||||
btnDropdown.addEventListener('shown.bs.dropdown', () => {
|
|
||||||
expect(btnDropdown).toHaveClass('show')
|
|
||||||
expect(btnDropdown.getAttribute('aria-expanded')).toEqual('true')
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
|
|
||||||
dropdown.toggle()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should toggle a dropdown with a valid virtual element reference', () => {
|
it('should toggle a dropdown with a valid virtual element reference', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
@@ -2218,49 +2192,6 @@ describe('Dropdown', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a dropdown', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.dropdown = Dropdown.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.dropdown.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Dropdown.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a dropdown', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const dropdown = new Dropdown(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.dropdown = Dropdown.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.dropdown.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Dropdown.getInstance(div)).toEqual(dropdown)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.dropdown = Dropdown.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.dropdown.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return dropdown instance', () => {
|
it('should return dropdown instance', () => {
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
fixtureEl.innerHTML = '<div></div>'
|
||||||
|
@@ -1,60 +0,0 @@
|
|||||||
/* eslint-env jquery */
|
|
||||||
|
|
||||||
import Alert from '../../src/alert.js'
|
|
||||||
import Button from '../../src/button.js'
|
|
||||||
import Carousel from '../../src/carousel.js'
|
|
||||||
import Collapse from '../../src/collapse.js'
|
|
||||||
import Dropdown from '../../src/dropdown.js'
|
|
||||||
import Modal from '../../src/modal.js'
|
|
||||||
import Offcanvas from '../../src/offcanvas.js'
|
|
||||||
import Popover from '../../src/popover.js'
|
|
||||||
import ScrollSpy from '../../src/scrollspy.js'
|
|
||||||
import Tab from '../../src/tab.js'
|
|
||||||
import Toast from '../../src/toast.js'
|
|
||||||
import Tooltip from '../../src/tooltip.js'
|
|
||||||
import { clearFixture, getFixture } from '../helpers/fixture.js'
|
|
||||||
|
|
||||||
describe('jQuery', () => {
|
|
||||||
let fixtureEl
|
|
||||||
|
|
||||||
beforeAll(() => {
|
|
||||||
fixtureEl = getFixture()
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
clearFixture()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should add all plugins in jQuery', () => {
|
|
||||||
expect(Alert.jQueryInterface).toEqual(jQuery.fn.alert)
|
|
||||||
expect(Button.jQueryInterface).toEqual(jQuery.fn.button)
|
|
||||||
expect(Carousel.jQueryInterface).toEqual(jQuery.fn.carousel)
|
|
||||||
expect(Collapse.jQueryInterface).toEqual(jQuery.fn.collapse)
|
|
||||||
expect(Dropdown.jQueryInterface).toEqual(jQuery.fn.dropdown)
|
|
||||||
expect(Modal.jQueryInterface).toEqual(jQuery.fn.modal)
|
|
||||||
expect(Offcanvas.jQueryInterface).toEqual(jQuery.fn.offcanvas)
|
|
||||||
expect(Popover.jQueryInterface).toEqual(jQuery.fn.popover)
|
|
||||||
expect(ScrollSpy.jQueryInterface).toEqual(jQuery.fn.scrollspy)
|
|
||||||
expect(Tab.jQueryInterface).toEqual(jQuery.fn.tab)
|
|
||||||
expect(Toast.jQueryInterface).toEqual(jQuery.fn.toast)
|
|
||||||
expect(Tooltip.jQueryInterface).toEqual(jQuery.fn.tooltip)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should use jQuery event system', () => {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
fixtureEl.innerHTML = [
|
|
||||||
'<div class="alert">',
|
|
||||||
' <button type="button" data-bs-dismiss="alert">x</button>',
|
|
||||||
'</div>'
|
|
||||||
].join('')
|
|
||||||
|
|
||||||
$(fixtureEl).find('.alert')
|
|
||||||
.one('closed.bs.alert', () => {
|
|
||||||
expect($(fixtureEl).find('.alert')).toHaveSize(0)
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
|
|
||||||
$(fixtureEl).find('button').trigger('click')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
@@ -2,7 +2,7 @@ import EventHandler from '../../src/dom/event-handler.js'
|
|||||||
import Modal from '../../src/modal.js'
|
import Modal from '../../src/modal.js'
|
||||||
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
||||||
import {
|
import {
|
||||||
clearBodyAndDocument, clearFixture, createEvent, getFixture, jQueryMock
|
clearBodyAndDocument, clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Modal', () => {
|
describe('Modal', () => {
|
||||||
@@ -1162,96 +1162,6 @@ describe('Modal', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a modal', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.modal.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Modal.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create a modal with given config', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.modal.call(jQueryMock, { keyboard: false })
|
|
||||||
const spy = spyOn(Modal.prototype, 'constructor')
|
|
||||||
expect(spy).not.toHaveBeenCalledWith(div, { keyboard: false })
|
|
||||||
|
|
||||||
const modal = Modal.getInstance(div)
|
|
||||||
expect(modal).not.toBeNull()
|
|
||||||
expect(modal._config.keyboard).toBeFalse()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a modal', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const modal = new Modal(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.modal.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Modal.getInstance(div)).toEqual(modal)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.modal.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call show method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const modal = new Modal(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
const spy = spyOn(modal, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.modal.call(jQueryMock, 'show')
|
|
||||||
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not call show method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="modal" data-bs-show="false"><div class="modal-dialog"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
const spy = spyOn(Modal.prototype, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.modal.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(spy).not.toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return modal instance', () => {
|
it('should return modal instance', () => {
|
||||||
|
@@ -3,7 +3,7 @@ import Offcanvas from '../../src/offcanvas.js'
|
|||||||
import { isVisible } from '../../src/util/index.js'
|
import { isVisible } from '../../src/util/index.js'
|
||||||
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
||||||
import {
|
import {
|
||||||
clearBodyAndDocument, clearFixture, createEvent, getFixture, jQueryMock
|
clearBodyAndDocument, clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Offcanvas', () => {
|
describe('Offcanvas', () => {
|
||||||
@@ -738,106 +738,6 @@ describe('Offcanvas', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create an offcanvas', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Offcanvas.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create an offcanvas', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const offCanvas = new Offcanvas(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Offcanvas.getInstance(div)).toEqual(offCanvas)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on protected method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = '_getConfig'
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error if method "constructor" is being called', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'constructor'
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call offcanvas method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
const spy = spyOn(Offcanvas.prototype, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock, 'show')
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create a offcanvas with given config', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas = Offcanvas.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.offcanvas.call(jQueryMock, { scroll: true })
|
|
||||||
|
|
||||||
const offcanvas = Offcanvas.getInstance(div)
|
|
||||||
expect(offcanvas).not.toBeNull()
|
|
||||||
expect(offcanvas._config.scroll).toBeTrue()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return offcanvas instance', () => {
|
it('should return offcanvas instance', () => {
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
fixtureEl.innerHTML = '<div></div>'
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import Popover from '../../src/popover.js'
|
import Popover from '../../src/popover.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, getFixture, jQueryMock, createEvent
|
clearFixture, getFixture, createEvent
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Popover', () => {
|
describe('Popover', () => {
|
||||||
@@ -361,80 +361,6 @@ describe('Popover', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a popover', () => {
|
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap">BS X</a>'
|
|
||||||
|
|
||||||
const popoverEl = fixtureEl.querySelector('a')
|
|
||||||
|
|
||||||
jQueryMock.fn.popover = Popover.jQueryInterface
|
|
||||||
jQueryMock.elements = [popoverEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.popover.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Popover.getInstance(popoverEl)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create a popover with a config object', () => {
|
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover">BS X</a>'
|
|
||||||
|
|
||||||
const popoverEl = fixtureEl.querySelector('a')
|
|
||||||
|
|
||||||
jQueryMock.fn.popover = Popover.jQueryInterface
|
|
||||||
jQueryMock.elements = [popoverEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.popover.call(jQueryMock, {
|
|
||||||
content: 'Popover content'
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(Popover.getInstance(popoverEl)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a popover', () => {
|
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap">BS X</a>'
|
|
||||||
|
|
||||||
const popoverEl = fixtureEl.querySelector('a')
|
|
||||||
const popover = new Popover(popoverEl)
|
|
||||||
|
|
||||||
jQueryMock.fn.popover = Popover.jQueryInterface
|
|
||||||
jQueryMock.elements = [popoverEl]
|
|
||||||
|
|
||||||
jQueryMock.fn.popover.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Popover.getInstance(popoverEl)).toEqual(popover)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap">BS X</a>'
|
|
||||||
|
|
||||||
const popoverEl = fixtureEl.querySelector('a')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.popover = Popover.jQueryInterface
|
|
||||||
jQueryMock.elements = [popoverEl]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.popover.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should should call show method', () => {
|
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap">BS X</a>'
|
|
||||||
|
|
||||||
const popoverEl = fixtureEl.querySelector('a')
|
|
||||||
const popover = new Popover(popoverEl)
|
|
||||||
|
|
||||||
jQueryMock.fn.popover = Popover.jQueryInterface
|
|
||||||
jQueryMock.elements = [popoverEl]
|
|
||||||
|
|
||||||
const spy = spyOn(popover, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.popover.call(jQueryMock, 'show')
|
|
||||||
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return popover instance', () => {
|
it('should return popover instance', () => {
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap">BS X</a>'
|
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap">BS X</a>'
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import ScrollSpy from '../../src/scrollspy.js'
|
import ScrollSpy from '../../src/scrollspy.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, createEvent, getFixture, jQueryMock
|
clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('ScrollSpy', () => {
|
describe('ScrollSpy', () => {
|
||||||
@@ -648,111 +648,6 @@ describe('ScrollSpy', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a scrollspy', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, { target: '#navBar' })
|
|
||||||
|
|
||||||
expect(ScrollSpy.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create a scrollspy with given config', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, { rootMargin: '100px' })
|
|
||||||
const spy = spyOn(ScrollSpy.prototype, 'constructor')
|
|
||||||
expect(spy).not.toHaveBeenCalledWith(div, { rootMargin: '100px' })
|
|
||||||
|
|
||||||
const scrollspy = ScrollSpy.getInstance(div)
|
|
||||||
expect(scrollspy).not.toBeNull()
|
|
||||||
expect(scrollspy._config.rootMargin).toEqual('100px')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a scrollspy', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
const scrollSpy = new ScrollSpy(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(ScrollSpy.getInstance(div)).toEqual(scrollSpy)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call a scrollspy method', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
const scrollSpy = new ScrollSpy(div)
|
|
||||||
|
|
||||||
const spy = spyOn(scrollSpy, 'refresh')
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, 'refresh')
|
|
||||||
|
|
||||||
expect(ScrollSpy.getInstance(div)).toEqual(scrollSpy)
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on protected method', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
const action = '_getConfig'
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error if method "constructor" is being called', () => {
|
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.content')
|
|
||||||
const action = 'constructor'
|
|
||||||
|
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return scrollspy instance', () => {
|
it('should return scrollspy instance', () => {
|
||||||
fixtureEl.innerHTML = getDummyFixture()
|
fixtureEl.innerHTML = getDummyFixture()
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Tab from '../../src/tab.js'
|
import Tab from '../../src/tab.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, createEvent, getFixture, jQueryMock
|
clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Tab', () => {
|
describe('Tab', () => {
|
||||||
@@ -827,66 +827,6 @@ describe('Tab', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a tab', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="nav"><div class="nav-link"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.nav > div')
|
|
||||||
|
|
||||||
jQueryMock.fn.tab = Tab.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.tab.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Tab.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a tab', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="nav"><div class="nav-link"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.nav > div')
|
|
||||||
const tab = new Tab(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.tab = Tab.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.tab.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Tab.getInstance(div)).toEqual(tab)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call a tab method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="nav"><div class="nav-link"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.nav > div')
|
|
||||||
const tab = new Tab(div)
|
|
||||||
|
|
||||||
const spy = spyOn(tab, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.tab = Tab.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.tab.call(jQueryMock, 'show')
|
|
||||||
|
|
||||||
expect(Tab.getInstance(div)).toEqual(tab)
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div class="nav"><div class="nav-link"></div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('.nav > div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.tab = Tab.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.tab.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return null if there is no instance', () => {
|
it('should return null if there is no instance', () => {
|
||||||
expect(Tab.getInstance(fixtureEl)).toBeNull()
|
expect(Tab.getInstance(fixtureEl)).toBeNull()
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Toast from '../../src/toast.js'
|
import Toast from '../../src/toast.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, createEvent, getFixture, jQueryMock
|
clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Toast', () => {
|
describe('Toast', () => {
|
||||||
@@ -536,66 +536,6 @@ describe('Toast', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a toast', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.toast = Toast.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.toast.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Toast.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a toast', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const toast = new Toast(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.toast = Toast.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.toast.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Toast.getInstance(div)).toEqual(toast)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call a toast method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const toast = new Toast(div)
|
|
||||||
|
|
||||||
const spy = spyOn(toast, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.toast = Toast.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.toast.call(jQueryMock, 'show')
|
|
||||||
|
|
||||||
expect(Toast.getInstance(div)).toEqual(toast)
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.toast = Toast.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.toast.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
it('should return a toast instance', () => {
|
it('should return a toast instance', () => {
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
fixtureEl.innerHTML = '<div></div>'
|
||||||
|
@@ -2,7 +2,7 @@ import EventHandler from '../../src/dom/event-handler.js'
|
|||||||
import Tooltip from '../../src/tooltip.js'
|
import Tooltip from '../../src/tooltip.js'
|
||||||
import { noop } from '../../src/util/index.js'
|
import { noop } from '../../src/util/index.js'
|
||||||
import {
|
import {
|
||||||
clearFixture, createEvent, getFixture, jQueryMock
|
clearFixture, createEvent, getFixture
|
||||||
} from '../helpers/fixture.js'
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Tooltip', () => {
|
describe('Tooltip', () => {
|
||||||
@@ -582,27 +582,6 @@ describe('Tooltip', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should show a tooltip with a jquery element container', () => {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
fixtureEl.innerHTML = '<a href="#" rel="tooltip" title="Another tooltip"></a>'
|
|
||||||
|
|
||||||
const tooltipEl = fixtureEl.querySelector('a')
|
|
||||||
const tooltip = new Tooltip(tooltipEl, {
|
|
||||||
container: {
|
|
||||||
0: fixtureEl,
|
|
||||||
jquery: 'jQuery'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
tooltipEl.addEventListener('shown.bs.tooltip', () => {
|
|
||||||
expect(fixtureEl.querySelector('.tooltip')).not.toBeNull()
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
|
|
||||||
tooltip.show()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should show a tooltip with a selector in container', () => {
|
it('should show a tooltip with a selector in container', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = '<a href="#" rel="tooltip" title="Another tooltip"></a>'
|
fixtureEl.innerHTML = '<a href="#" rel="tooltip" title="Another tooltip"></a>'
|
||||||
@@ -1243,25 +1222,6 @@ describe('Tooltip', () => {
|
|||||||
expect().nothing()
|
expect().nothing()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should add the content as a child of the element for jQuery elements', () => {
|
|
||||||
fixtureEl.innerHTML = [
|
|
||||||
'<a href="#" rel="tooltip" title="Another tooltip">',
|
|
||||||
' <div id="childContent"></div>',
|
|
||||||
'</a>'
|
|
||||||
].join('')
|
|
||||||
|
|
||||||
const tooltipEl = fixtureEl.querySelector('a')
|
|
||||||
const childContent = fixtureEl.querySelector('div')
|
|
||||||
const tooltip = new Tooltip(tooltipEl, {
|
|
||||||
html: true
|
|
||||||
})
|
|
||||||
|
|
||||||
tooltip.setContent({ '.tooltip': { 0: childContent, jquery: 'jQuery' } })
|
|
||||||
tooltip.show()
|
|
||||||
|
|
||||||
expect(childContent.parentNode).toEqual(tooltip._getTipElement())
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should add the child text content in the element', () => {
|
it('should add the child text content in the element', () => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
'<a href="#" rel="tooltip" title="Another tooltip">',
|
'<a href="#" rel="tooltip" title="Another tooltip">',
|
||||||
@@ -1522,64 +1482,4 @@ describe('Tooltip', () => {
|
|||||||
expect(tooltip2._getTitle()).toEqual('nothing')
|
expect(tooltip2._getTitle()).toEqual('nothing')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('jQueryInterface', () => {
|
|
||||||
it('should create a tooltip', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip = Tooltip.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Tooltip.getInstance(div)).not.toBeNull()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not re create a tooltip', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const tooltip = new Tooltip(div)
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip = Tooltip.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip.call(jQueryMock)
|
|
||||||
|
|
||||||
expect(Tooltip.getInstance(div)).toEqual(tooltip)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call a tooltip method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const tooltip = new Tooltip(div)
|
|
||||||
|
|
||||||
const spy = spyOn(tooltip, 'show')
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip = Tooltip.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip.call(jQueryMock, 'show')
|
|
||||||
|
|
||||||
expect(Tooltip.getInstance(div)).toEqual(tooltip)
|
|
||||||
expect(spy).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should throw error on undefined method', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const div = fixtureEl.querySelector('div')
|
|
||||||
const action = 'undefinedMethod'
|
|
||||||
|
|
||||||
jQueryMock.fn.tooltip = Tooltip.jQueryInterface
|
|
||||||
jQueryMock.elements = [div]
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
jQueryMock.fn.tooltip.call(jQueryMock, action)
|
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
@@ -72,18 +72,6 @@ describe('Util', () => {
|
|||||||
expect(Util.isElement({})).toBeFalse()
|
expect(Util.isElement({})).toBeFalse()
|
||||||
expect(Util.isElement(fixtureEl.querySelectorAll('.test'))).toBeFalse()
|
expect(Util.isElement(fixtureEl.querySelectorAll('.test'))).toBeFalse()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should detect jQuery element', () => {
|
|
||||||
fixtureEl.innerHTML = '<div></div>'
|
|
||||||
|
|
||||||
const el = fixtureEl.querySelector('div')
|
|
||||||
const fakejQuery = {
|
|
||||||
0: el,
|
|
||||||
jquery: 'foo'
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(Util.isElement(fakejQuery)).toBeTrue()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('getElement', () => {
|
describe('getElement', () => {
|
||||||
@@ -103,13 +91,6 @@ describe('Util', () => {
|
|||||||
expect(Util.getElement()).toBeNull()
|
expect(Util.getElement()).toBeNull()
|
||||||
expect(Util.getElement(null)).toBeNull()
|
expect(Util.getElement(null)).toBeNull()
|
||||||
expect(Util.getElement(fixtureEl.querySelectorAll('.test'))).toBeNull()
|
expect(Util.getElement(fixtureEl.querySelectorAll('.test'))).toBeNull()
|
||||||
|
|
||||||
const fakejQueryObject = {
|
|
||||||
0: el,
|
|
||||||
jquery: 'foo'
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(Util.getElement(fakejQueryObject)).toEqual(el)
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -425,39 +406,6 @@ describe('Util', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('getjQuery', () => {
|
|
||||||
const fakejQuery = { trigger() {} }
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
Object.defineProperty(window, 'jQuery', {
|
|
||||||
value: fakejQuery,
|
|
||||||
writable: true
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
window.jQuery = undefined
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return jQuery object when present', () => {
|
|
||||||
expect(Util.getjQuery()).toEqual(fakejQuery)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not return jQuery object when present if data-bs-no-jquery', () => {
|
|
||||||
document.body.setAttribute('data-bs-no-jquery', '')
|
|
||||||
|
|
||||||
expect(window.jQuery).toEqual(fakejQuery)
|
|
||||||
expect(Util.getjQuery()).toBeNull()
|
|
||||||
|
|
||||||
document.body.removeAttribute('data-bs-no-jquery')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not return jQuery if not present', () => {
|
|
||||||
window.jQuery = undefined
|
|
||||||
expect(Util.getjQuery()).toBeNull()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('onDOMContentLoaded', () => {
|
describe('onDOMContentLoaded', () => {
|
||||||
it('should execute callbacks when DOMContentLoaded is fired and should not add more than one listener', () => {
|
it('should execute callbacks when DOMContentLoaded is fired and should not add more than one listener', () => {
|
||||||
const spy = jasmine.createSpy()
|
const spy = jasmine.createSpy()
|
||||||
@@ -486,32 +434,6 @@ describe('Util', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('defineJQueryPlugin', () => {
|
|
||||||
const fakejQuery = { fn: {} }
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
Object.defineProperty(window, 'jQuery', {
|
|
||||||
value: fakejQuery,
|
|
||||||
writable: true
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
window.jQuery = undefined
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should define a plugin on the jQuery instance', () => {
|
|
||||||
const pluginMock = Util.noop
|
|
||||||
pluginMock.NAME = 'test'
|
|
||||||
pluginMock.jQueryInterface = Util.noop
|
|
||||||
|
|
||||||
Util.defineJQueryPlugin(pluginMock)
|
|
||||||
expect(fakejQuery.fn.test).toEqual(pluginMock.jQueryInterface)
|
|
||||||
expect(fakejQuery.fn.test.Constructor).toEqual(pluginMock)
|
|
||||||
expect(fakejQuery.fn.test.noConflict).toEqual(jasmine.any(Function))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('execute', () => {
|
describe('execute', () => {
|
||||||
it('should execute if arg is function', () => {
|
it('should execute if arg is function', () => {
|
||||||
const spy = jasmine.createSpy('spy')
|
const spy = jasmine.createSpy('spy')
|
||||||
|
8
package-lock.json
generated
8
package-lock.json
generated
@@ -58,7 +58,6 @@
|
|||||||
"image-size": "^2.0.2",
|
"image-size": "^2.0.2",
|
||||||
"ip": "^2.0.1",
|
"ip": "^2.0.1",
|
||||||
"jasmine": "^5.10.0",
|
"jasmine": "^5.10.0",
|
||||||
"jquery": "^3.7.1",
|
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"karma": "^6.4.4",
|
"karma": "^6.4.4",
|
||||||
"karma-browserstack-launcher": "1.4.0",
|
"karma-browserstack-launcher": "1.4.0",
|
||||||
@@ -10503,13 +10502,6 @@
|
|||||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/jquery": {
|
|
||||||
"version": "3.7.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
|
|
||||||
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/js-tokens": {
|
"node_modules/js-tokens": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
|
@@ -66,13 +66,12 @@
|
|||||||
"js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
|
"js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
|
||||||
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.esm.js.map,includeSources,url=bootstrap.esm.min.js.map\" --output dist/js/bootstrap.esm.min.js dist/js/bootstrap.esm.js",
|
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.esm.js.map,includeSources,url=bootstrap.esm.min.js.map\" --output dist/js/bootstrap.esm.min.js dist/js/bootstrap.esm.js",
|
||||||
"js-minify-bundle": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map\" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js",
|
"js-minify-bundle": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map\" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js",
|
||||||
"js-test": "npm-run-all --aggregate-output --parallel js-test-karma js-test-jquery js-test-integration-*",
|
"js-test": "npm-run-all --aggregate-output --parallel js-test-karma js-test-integration-*",
|
||||||
"js-debug": "cross-env DEBUG=true npm run js-test-karma",
|
"js-debug": "cross-env DEBUG=true npm run js-test-karma",
|
||||||
"js-test-karma": "karma start js/tests/karma.conf.js",
|
"js-test-karma": "karma start js/tests/karma.conf.js",
|
||||||
"js-test-integration-bundle": "rollup --config js/tests/integration/rollup.bundle.js",
|
"js-test-integration-bundle": "rollup --config js/tests/integration/rollup.bundle.js",
|
||||||
"js-test-integration-modularity": "rollup --config js/tests/integration/rollup.bundle-modularity.js",
|
"js-test-integration-modularity": "rollup --config js/tests/integration/rollup.bundle-modularity.js",
|
||||||
"js-test-cloud": "cross-env BROWSERSTACK=true npm run js-test-karma",
|
"js-test-cloud": "cross-env BROWSERSTACK=true npm run js-test-karma",
|
||||||
"js-test-jquery": "cross-env JQUERY=true npm run js-test-karma",
|
|
||||||
"lint": "npm-run-all --aggregate-output --continue-on-error --parallel js-lint css-lint lockfile-lint",
|
"lint": "npm-run-all --aggregate-output --continue-on-error --parallel js-lint css-lint lockfile-lint",
|
||||||
"docs": "npm-run-all docs-build docs-lint",
|
"docs": "npm-run-all docs-build docs-lint",
|
||||||
"docs-build": "npm run astro-build",
|
"docs-build": "npm run astro-build",
|
||||||
@@ -147,7 +146,6 @@
|
|||||||
"image-size": "^2.0.2",
|
"image-size": "^2.0.2",
|
||||||
"ip": "^2.0.1",
|
"ip": "^2.0.1",
|
||||||
"jasmine": "^5.10.0",
|
"jasmine": "^5.10.0",
|
||||||
"jquery": "^3.7.1",
|
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"karma": "^6.4.4",
|
"karma": "^6.4.4",
|
||||||
"karma-browserstack-launcher": "1.4.0",
|
"karma-browserstack-launcher": "1.4.0",
|
||||||
|
@@ -263,47 +263,6 @@ const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
## Optionally using jQuery
|
|
||||||
|
|
||||||
**You don’t need jQuery in Bootstrap 5**, but it’s still possible to use our components with jQuery. If Bootstrap detects `jQuery` in the `window` object, it'll add all of our components in jQuery’s plugin system. This allows you to do the following:
|
|
||||||
|
|
||||||
```js
|
|
||||||
// to enable tooltips with the default configuration
|
|
||||||
$('[data-bs-toggle="tooltip"]').tooltip()
|
|
||||||
|
|
||||||
// to initialize tooltips with given configuration
|
|
||||||
$('[data-bs-toggle="tooltip"]').tooltip({
|
|
||||||
boundary: 'clippingParents',
|
|
||||||
customClass: 'myClass'
|
|
||||||
})
|
|
||||||
|
|
||||||
// to trigger the `show` method
|
|
||||||
$('#myTooltip').tooltip('show')
|
|
||||||
```
|
|
||||||
|
|
||||||
The same goes for our other components.
|
|
||||||
|
|
||||||
### No conflict
|
|
||||||
|
|
||||||
Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call `.noConflict` on the plugin you wish to revert the value of.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
|
|
||||||
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
|
|
||||||
```
|
|
||||||
|
|
||||||
Bootstrap does not officially support third-party JavaScript libraries like Prototype or jQuery UI. Despite `.noConflict` and namespaced events, there may be compatibility problems that you need to fix on your own.
|
|
||||||
|
|
||||||
### jQuery events
|
|
||||||
|
|
||||||
Bootstrap will detect jQuery if `jQuery` is present in the `window` object and there is no `data-bs-no-jquery` attribute set on `<body>`. If jQuery is found, Bootstrap will emit events thanks to jQuery’s event system. So if you want to listen to Bootstrap’s events, you’ll have to use the jQuery methods (`.on`, `.one`) instead of `addEventListener`.
|
|
||||||
|
|
||||||
```js
|
|
||||||
$('#myTab a').on('shown.bs.tab', () => {
|
|
||||||
// do something...
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
## Disabled JavaScript
|
## Disabled JavaScript
|
||||||
|
|
||||||
Bootstrap’s plugins have no special fallback when JavaScript is disabled. If you care about the user experience in this case, use [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript) to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.
|
Bootstrap’s plugins have no special fallback when JavaScript is disabled. If you care about the user experience in this case, use [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript) to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.
|
||||||
|
Reference in New Issue
Block a user