mirror of
https://github.com/twbs/bootstrap.git
synced 2025-01-17 09:52:29 +01:00
Dist.
This commit is contained in:
parent
c2b05dd7b5
commit
ac67e04ce0
99
dist/js/bootstrap.bundle.js
vendored
99
dist/js/bootstrap.bundle.js
vendored
@ -4,10 +4,10 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(global = global || self, factory(global.bootstrap = {}));
|
||||
}(this, function (exports) { 'use strict';
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, global.bootstrap = factory());
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
function _defineProperties(target, props) {
|
||||
for (var i = 0; i < props.length; i++) {
|
||||
@ -74,7 +74,8 @@
|
||||
var MAX_UID = 1000000;
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -105,7 +106,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -322,7 +323,7 @@
|
||||
|
||||
try {
|
||||
element.querySelectorAll(':scope *');
|
||||
} catch (e) {
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -414,13 +415,14 @@
|
||||
function getEvent(element) {
|
||||
var uid = getUidEvent(element);
|
||||
element.uidEvent = uid;
|
||||
return eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
return eventRegistry[uid];
|
||||
}
|
||||
|
||||
function fixEvent(event, element) {
|
||||
// Add which for key events
|
||||
if (event.which === null && keyEventRegex.test(event.type)) {
|
||||
event.which = event.charCode !== null ? event.charCode : event.keyCode;
|
||||
event.which = event.charCode === null ? event.keyCode : event.charCode;
|
||||
}
|
||||
|
||||
event.delegateTarget = element;
|
||||
@ -525,7 +527,7 @@
|
||||
}
|
||||
|
||||
var uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
|
||||
var fn = !delegation ? bootstrapHandler(element, handler) : bootstrapDelegationHandler(element, handler, delegationFn);
|
||||
var fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
|
||||
fn.delegationSelector = delegation ? handler : null;
|
||||
fn.originalHandler = originalHandler;
|
||||
fn.oneOff = oneOff;
|
||||
@ -681,8 +683,8 @@
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
var findFn = Polyfill.find;
|
||||
var _findOne = Polyfill.findOne;
|
||||
var findFn = Polyfill.find,
|
||||
_findOne = Polyfill.findOne;
|
||||
var NODE_TEXT = 3;
|
||||
var SelectorEngine = {
|
||||
matches: function matches(element, selector) {
|
||||
@ -1723,7 +1725,7 @@
|
||||
data.to(config);
|
||||
} else if (typeof action === 'string') {
|
||||
if (typeof data[action] === 'undefined') {
|
||||
throw new Error("No method named \"" + action + "\"");
|
||||
throw new TypeError("No method named \"" + action + "\"");
|
||||
}
|
||||
|
||||
data[action]();
|
||||
@ -2101,19 +2103,18 @@
|
||||
_proto._getParent = function _getParent() {
|
||||
var _this3 = this;
|
||||
|
||||
var parent;
|
||||
var parent = this._config.parent;
|
||||
|
||||
if (isElement(this._config.parent)) {
|
||||
parent = this._config.parent; // it's a jQuery object
|
||||
|
||||
if (typeof this._config.parent.jquery !== 'undefined' || typeof this._config.parent[0] !== 'undefined') {
|
||||
parent = this._config.parent[0];
|
||||
if (isElement(parent)) {
|
||||
// it's a jQuery object
|
||||
if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {
|
||||
parent = parent[0];
|
||||
}
|
||||
} else {
|
||||
parent = SelectorEngine.findOne(this._config.parent);
|
||||
parent = SelectorEngine.findOne(parent);
|
||||
}
|
||||
|
||||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
|
||||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + parent + "\"]";
|
||||
makeArray(SelectorEngine.find(selector, parent)).forEach(function (element) {
|
||||
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
|
||||
});
|
||||
@ -2126,10 +2127,10 @@
|
||||
|
||||
if (triggerArray.length) {
|
||||
triggerArray.forEach(function (elem) {
|
||||
if (!isOpen) {
|
||||
elem.classList.add(ClassName$3.COLLAPSED);
|
||||
} else {
|
||||
if (isOpen) {
|
||||
elem.classList.remove(ClassName$3.COLLAPSED);
|
||||
} else {
|
||||
elem.classList.add(ClassName$3.COLLAPSED);
|
||||
}
|
||||
|
||||
elem.setAttribute('aria-expanded', isOpen);
|
||||
@ -2159,7 +2160,7 @@
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new Error("No method named \"" + config + "\"");
|
||||
throw new TypeError("No method named \"" + config + "\"");
|
||||
}
|
||||
|
||||
data[config]();
|
||||
@ -4863,7 +4864,6 @@
|
||||
DROPRIGHT: 'dropright',
|
||||
DROPLEFT: 'dropleft',
|
||||
MENURIGHT: 'dropdown-menu-right',
|
||||
MENULEFT: 'dropdown-menu-left',
|
||||
POSITION_STATIC: 'position-static'
|
||||
};
|
||||
var Selector$4 = {
|
||||
@ -5169,7 +5169,7 @@
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new Error("No method named \"" + config + "\"");
|
||||
throw new TypeError("No method named \"" + config + "\"");
|
||||
}
|
||||
|
||||
data[config]();
|
||||
@ -5774,7 +5774,6 @@
|
||||
}
|
||||
} // ----------------------------------------------------------------------
|
||||
// the following methods are used to handle overflowing modals
|
||||
// todo (fat): these should probably be refactored out of modal.js
|
||||
// ----------------------------------------------------------------------
|
||||
;
|
||||
|
||||
@ -5853,11 +5852,11 @@
|
||||
|
||||
var padding = Manipulator.getDataAttribute(document.body, 'padding-right');
|
||||
|
||||
if (typeof padding !== 'undefined') {
|
||||
if (typeof padding === 'undefined') {
|
||||
document.body.style.paddingRight = '';
|
||||
} else {
|
||||
Manipulator.removeDataAttribute(document.body, 'padding-right');
|
||||
document.body.style.paddingRight = padding;
|
||||
} else {
|
||||
document.body.style.paddingRight = '';
|
||||
}
|
||||
};
|
||||
|
||||
@ -6168,7 +6167,6 @@
|
||||
SHOW: 'show'
|
||||
};
|
||||
var Selector$6 = {
|
||||
TOOLTIP: '.tooltip',
|
||||
TOOLTIP_INNER: '.tooltip-inner',
|
||||
TOOLTIP_ARROW: '.tooltip-arrow'
|
||||
};
|
||||
@ -6296,7 +6294,7 @@
|
||||
if (this.isWithContent() && this._isEnabled) {
|
||||
var showEvent = EventHandler.trigger(this.element, this.constructor.Event.SHOW);
|
||||
var shadowRoot = findShadowRoot(this.element);
|
||||
var isInTheDom = shadowRoot !== null ? shadowRoot.contains(this.element) : this.element.ownerDocument.documentElement.contains(this.element);
|
||||
var isInTheDom = shadowRoot === null ? this.element.ownerDocument.documentElement.contains(this.element) : shadowRoot.contains(this.element);
|
||||
|
||||
if (showEvent.defaultPrevented || !isInTheDom) {
|
||||
return;
|
||||
@ -7068,18 +7066,15 @@
|
||||
};
|
||||
var ClassName$8 = {
|
||||
DROPDOWN_ITEM: 'dropdown-item',
|
||||
DROPDOWN_MENU: 'dropdown-menu',
|
||||
ACTIVE: 'active'
|
||||
};
|
||||
var Selector$8 = {
|
||||
DATA_SPY: '[data-spy="scroll"]',
|
||||
ACTIVE: '.active',
|
||||
NAV_LIST_GROUP: '.nav, .list-group',
|
||||
NAV_LINKS: '.nav-link',
|
||||
NAV_ITEMS: '.nav-item',
|
||||
LIST_ITEMS: '.list-group-item',
|
||||
DROPDOWN: '.dropdown',
|
||||
DROPDOWN_ITEMS: '.dropdown-item',
|
||||
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
||||
};
|
||||
var OffsetMethod = {
|
||||
@ -7102,7 +7097,7 @@
|
||||
this._element = element;
|
||||
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
||||
this._config = this._getConfig(config);
|
||||
this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
|
||||
this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " ." + ClassName$8.DROPDOWN_ITEM);
|
||||
this._offsets = [];
|
||||
this._targets = [];
|
||||
this._activeTarget = null;
|
||||
@ -7143,7 +7138,6 @@
|
||||
var targetBCR = target.getBoundingClientRect();
|
||||
|
||||
if (targetBCR.width || targetBCR.height) {
|
||||
// TODO (fat): remove sketch reliance on jQuery position/offset
|
||||
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
|
||||
}
|
||||
}
|
||||
@ -7820,24 +7814,25 @@
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): index.js
|
||||
* Bootstrap (v4.3.1): index.umd.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var index_umd = {
|
||||
Alert: Alert,
|
||||
Button: Button,
|
||||
Carousel: Carousel,
|
||||
Collapse: Collapse,
|
||||
Dropdown: Dropdown,
|
||||
Modal: Modal,
|
||||
Popover: Popover,
|
||||
ScrollSpy: ScrollSpy,
|
||||
Tab: Tab,
|
||||
Toast: Toast,
|
||||
Tooltip: Tooltip
|
||||
};
|
||||
|
||||
exports.Alert = Alert;
|
||||
exports.Button = Button;
|
||||
exports.Carousel = Carousel;
|
||||
exports.Collapse = Collapse;
|
||||
exports.Dropdown = Dropdown;
|
||||
exports.Modal = Modal;
|
||||
exports.Popover = Popover;
|
||||
exports.ScrollSpy = ScrollSpy;
|
||||
exports.Tab = Tab;
|
||||
exports.Toast = Toast;
|
||||
exports.Tooltip = Tooltip;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
return index_umd;
|
||||
|
||||
}));
|
||||
//# sourceMappingURL=bootstrap.bundle.js.map
|
||||
|
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
4949
dist/js/bootstrap.esm.js
vendored
Normal file
4949
dist/js/bootstrap.esm.js
vendored
Normal file
@ -0,0 +1,4949 @@
|
||||
/*!
|
||||
* Bootstrap v4.3.1 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
import Popper from 'popper.js';
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): util/index.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
const MAX_UID = 1000000;
|
||||
const MILLISECONDS_MULTIPLIER = 1000;
|
||||
const TRANSITION_END = 'transitionend';
|
||||
const _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
const toType = obj => ({}).toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Public Util Api
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
const getUID = prefix => {
|
||||
do {
|
||||
// eslint-disable-next-line no-bitwise
|
||||
prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
|
||||
} while (document.getElementById(prefix));
|
||||
|
||||
return prefix;
|
||||
};
|
||||
|
||||
const getSelectorFromElement = element => {
|
||||
let selector = element.getAttribute('data-target');
|
||||
|
||||
if (!selector || selector === '#') {
|
||||
const hrefAttr = element.getAttribute('href');
|
||||
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
|
||||
}
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const getTransitionDurationFromElement = element => {
|
||||
if (!element) {
|
||||
return 0;
|
||||
} // Get transition-duration of the element
|
||||
|
||||
|
||||
let _window$getComputedSt = window.getComputedStyle(element),
|
||||
transitionDuration = _window$getComputedSt.transitionDuration,
|
||||
transitionDelay = _window$getComputedSt.transitionDelay;
|
||||
|
||||
const floatTransitionDuration = parseFloat(transitionDuration);
|
||||
const floatTransitionDelay = 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 (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
||||
};
|
||||
|
||||
const triggerTransitionEnd = element => {
|
||||
element.dispatchEvent(new Event(TRANSITION_END));
|
||||
};
|
||||
|
||||
const isElement = obj => (obj[0] || obj).nodeType;
|
||||
|
||||
const emulateTransitionEnd = (element, duration) => {
|
||||
let called = false;
|
||||
const durationPadding = 5;
|
||||
const emulatedDuration = duration + durationPadding;
|
||||
|
||||
function listener() {
|
||||
called = true;
|
||||
element.removeEventListener(TRANSITION_END, listener);
|
||||
}
|
||||
|
||||
element.addEventListener(TRANSITION_END, listener);
|
||||
setTimeout(() => {
|
||||
if (!called) {
|
||||
triggerTransitionEnd(element);
|
||||
}
|
||||
}, emulatedDuration);
|
||||
};
|
||||
|
||||
const typeCheckConfig = (componentName, config, configTypes) => {
|
||||
Object.keys(configTypes).forEach(property => {
|
||||
const expectedTypes = configTypes[property];
|
||||
const value = config[property];
|
||||
const valueType = value && isElement(value) ? 'element' : toType(value);
|
||||
|
||||
if (!new RegExp(expectedTypes).test(valueType)) {
|
||||
throw new Error(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const makeArray = nodeList => {
|
||||
if (!nodeList) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [].slice.call(nodeList);
|
||||
};
|
||||
|
||||
const isVisible = element => {
|
||||
if (!element) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (element.style && element.parentNode && element.parentNode.style) {
|
||||
return element.style.display !== 'none' && element.parentNode.style.display !== 'none' && element.style.visibility !== 'hidden';
|
||||
}
|
||||
|
||||
return 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);
|
||||
}; // eslint-disable-next-line no-empty-function
|
||||
|
||||
|
||||
const noop = () => function () {};
|
||||
|
||||
const reflow = element => element.offsetHeight;
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): dom/data.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
const mapData = (() => {
|
||||
const storeData = {};
|
||||
let id = 1;
|
||||
return {
|
||||
set(element, key, data) {
|
||||
if (typeof element.key === 'undefined') {
|
||||
element.key = {
|
||||
key,
|
||||
id
|
||||
};
|
||||
id++;
|
||||
}
|
||||
|
||||
storeData[element.key.id] = data;
|
||||
},
|
||||
|
||||
get(element, key) {
|
||||
if (!element || typeof element.key === 'undefined') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const keyProperties = element.key;
|
||||
|
||||
if (keyProperties.key === key) {
|
||||
return storeData[keyProperties.id];
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
delete(element, key) {
|
||||
if (typeof element.key === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
const keyProperties = element.key;
|
||||
|
||||
if (keyProperties.key === key) {
|
||||
delete storeData[keyProperties.id];
|
||||
delete element.key;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
})();
|
||||
|
||||
const Data = {
|
||||
setData(instance, key, data) {
|
||||
mapData.set(instance, key, data);
|
||||
},
|
||||
|
||||
getData(instance, key) {
|
||||
return mapData.get(instance, key);
|
||||
},
|
||||
|
||||
removeData(instance, key) {
|
||||
mapData.delete(instance, key);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): dom/polyfill.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
/* istanbul ignore next */
|
||||
|
||||
const Polyfill = (() => {
|
||||
// MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached
|
||||
const defaultPreventedPreservedOnDispatch = (() => {
|
||||
const e = new CustomEvent('Bootstrap', {
|
||||
cancelable: true
|
||||
});
|
||||
const element = document.createElement('div');
|
||||
element.addEventListener('Bootstrap', () => null);
|
||||
e.preventDefault();
|
||||
element.dispatchEvent(e);
|
||||
return e.defaultPrevented;
|
||||
})();
|
||||
|
||||
let find = Element.prototype.querySelectorAll;
|
||||
let findOne = Element.prototype.querySelector;
|
||||
const scopeSelectorRegex = /:scope\b/;
|
||||
|
||||
const supportScopeQuery = (() => {
|
||||
const element = document.createElement('div');
|
||||
|
||||
try {
|
||||
element.querySelectorAll(':scope *');
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
})();
|
||||
|
||||
if (!supportScopeQuery) {
|
||||
find = function find(selector) {
|
||||
if (!scopeSelectorRegex.test(selector)) {
|
||||
return this.querySelectorAll(selector);
|
||||
}
|
||||
|
||||
const hasId = Boolean(this.id);
|
||||
|
||||
if (!hasId) {
|
||||
this.id = getUID('scope');
|
||||
}
|
||||
|
||||
let nodeList = null;
|
||||
|
||||
try {
|
||||
selector = selector.replace(scopeSelectorRegex, `#${this.id}`);
|
||||
nodeList = this.querySelectorAll(selector);
|
||||
} finally {
|
||||
if (!hasId) {
|
||||
this.removeAttribute('id');
|
||||
}
|
||||
}
|
||||
|
||||
return nodeList;
|
||||
};
|
||||
|
||||
findOne = function findOne(selector) {
|
||||
if (!scopeSelectorRegex.test(selector)) {
|
||||
return this.querySelector(selector);
|
||||
}
|
||||
|
||||
const matches = find.call(this, selector);
|
||||
|
||||
if (typeof matches[0] !== 'undefined') {
|
||||
return matches[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
defaultPreventedPreservedOnDispatch,
|
||||
find,
|
||||
findOne
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): dom/eventHandler.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
|
||||
const stripNameRegex = /\..*/;
|
||||
const keyEventRegex = /^key/;
|
||||
const stripUidRegex = /::\d+$/;
|
||||
const eventRegistry = {}; // Events storage
|
||||
|
||||
let uidEvent = 1;
|
||||
const customEvents = {
|
||||
mouseenter: 'mouseover',
|
||||
mouseleave: 'mouseout'
|
||||
};
|
||||
const nativeEvents = ['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll'];
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Private methods
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
function getUidEvent(element, uid) {
|
||||
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
|
||||
}
|
||||
|
||||
function getEvent(element) {
|
||||
const uid = getUidEvent(element);
|
||||
element.uidEvent = uid;
|
||||
eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
return eventRegistry[uid];
|
||||
}
|
||||
|
||||
function fixEvent(event, element) {
|
||||
// Add which for key events
|
||||
if (event.which === null && keyEventRegex.test(event.type)) {
|
||||
event.which = event.charCode === null ? event.keyCode : event.charCode;
|
||||
}
|
||||
|
||||
event.delegateTarget = element;
|
||||
}
|
||||
|
||||
function bootstrapHandler(element, fn) {
|
||||
return function handler(event) {
|
||||
fixEvent(event, element);
|
||||
|
||||
if (handler.oneOff) {
|
||||
EventHandler.off(element, event.type, fn);
|
||||
}
|
||||
|
||||
return fn.apply(element, [event]);
|
||||
};
|
||||
}
|
||||
|
||||
function bootstrapDelegationHandler(element, selector, fn) {
|
||||
return function handler(event) {
|
||||
const domElements = element.querySelectorAll(selector);
|
||||
|
||||
for (let target = event.target; target && target !== this; target = target.parentNode) {
|
||||
for (let i = domElements.length; i--;) {
|
||||
if (domElements[i] === target) {
|
||||
fixEvent(event, target);
|
||||
|
||||
if (handler.oneOff) {
|
||||
EventHandler.off(element, event.type, fn);
|
||||
}
|
||||
|
||||
return fn.apply(target, [event]);
|
||||
}
|
||||
}
|
||||
} // To please ESLint
|
||||
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
function findHandler(events, handler, delegationSelector) {
|
||||
if (delegationSelector === void 0) {
|
||||
delegationSelector = null;
|
||||
}
|
||||
|
||||
const uidList = Object.keys(events);
|
||||
|
||||
for (let i = 0; i < uidList.length; i++) {
|
||||
const uid = uidList[i];
|
||||
const event = events[uid];
|
||||
|
||||
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
|
||||
return events[uid];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function normalizeParams(originalTypeEvent, handler, delegationFn) {
|
||||
const delegation = typeof handler === 'string';
|
||||
const originalHandler = delegation ? delegationFn : handler; // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
|
||||
|
||||
let typeEvent = originalTypeEvent.replace(stripNameRegex, '');
|
||||
const custom = customEvents[typeEvent];
|
||||
|
||||
if (custom) {
|
||||
typeEvent = custom;
|
||||
}
|
||||
|
||||
const isNative = nativeEvents.indexOf(typeEvent) > -1;
|
||||
|
||||
if (!isNative) {
|
||||
typeEvent = originalTypeEvent;
|
||||
}
|
||||
|
||||
return [delegation, originalHandler, typeEvent];
|
||||
}
|
||||
|
||||
function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
|
||||
if (typeof originalTypeEvent !== 'string' || !element) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!handler) {
|
||||
handler = delegationFn;
|
||||
delegationFn = null;
|
||||
}
|
||||
|
||||
const _normalizeParams = normalizeParams(originalTypeEvent, handler, delegationFn),
|
||||
delegation = _normalizeParams[0],
|
||||
originalHandler = _normalizeParams[1],
|
||||
typeEvent = _normalizeParams[2];
|
||||
|
||||
const events = getEvent(element);
|
||||
const handlers = events[typeEvent] || (events[typeEvent] = {});
|
||||
const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
|
||||
|
||||
if (previousFn) {
|
||||
previousFn.oneOff = previousFn.oneOff && oneOff;
|
||||
return;
|
||||
}
|
||||
|
||||
const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
|
||||
const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
|
||||
fn.delegationSelector = delegation ? handler : null;
|
||||
fn.originalHandler = originalHandler;
|
||||
fn.oneOff = oneOff;
|
||||
fn.uidEvent = uid;
|
||||
handlers[uid] = fn;
|
||||
element.addEventListener(typeEvent, fn, delegation);
|
||||
}
|
||||
|
||||
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
|
||||
const fn = findHandler(events[typeEvent], handler, delegationSelector);
|
||||
|
||||
if (fn === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
|
||||
delete events[typeEvent][fn.uidEvent];
|
||||
}
|
||||
|
||||
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
|
||||
const storeElementEvent = events[typeEvent] || {};
|
||||
Object.keys(storeElementEvent).forEach(handlerKey => {
|
||||
if (handlerKey.indexOf(namespace) > -1) {
|
||||
const event = storeElementEvent[handlerKey];
|
||||
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const EventHandler = {
|
||||
on(element, event, handler, delegationFn) {
|
||||
addHandler(element, event, handler, delegationFn, false);
|
||||
},
|
||||
|
||||
one(element, event, handler, delegationFn) {
|
||||
addHandler(element, event, handler, delegationFn, true);
|
||||
},
|
||||
|
||||
off(element, originalTypeEvent, handler, delegationFn) {
|
||||
if (typeof originalTypeEvent !== 'string' || !element) {
|
||||
return;
|
||||
}
|
||||
|
||||
const _normalizeParams2 = normalizeParams(originalTypeEvent, handler, delegationFn),
|
||||
delegation = _normalizeParams2[0],
|
||||
originalHandler = _normalizeParams2[1],
|
||||
typeEvent = _normalizeParams2[2];
|
||||
|
||||
const inNamespace = typeEvent !== originalTypeEvent;
|
||||
const events = getEvent(element);
|
||||
const isNamespace = originalTypeEvent.charAt(0) === '.';
|
||||
|
||||
if (typeof originalHandler !== 'undefined') {
|
||||
// Simplest case: handler is passed, remove that listener ONLY.
|
||||
if (!events || !events[typeEvent]) {
|
||||
return;
|
||||
}
|
||||
|
||||
removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isNamespace) {
|
||||
Object.keys(events).forEach(elementEvent => {
|
||||
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.substr(1));
|
||||
});
|
||||
}
|
||||
|
||||
const storeElementEvent = events[typeEvent] || {};
|
||||
Object.keys(storeElementEvent).forEach(keyHandlers => {
|
||||
const handlerKey = keyHandlers.replace(stripUidRegex, '');
|
||||
|
||||
if (!inNamespace || originalTypeEvent.indexOf(handlerKey) > -1) {
|
||||
const event = storeElementEvent[keyHandlers];
|
||||
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
trigger(element, event, args) {
|
||||
if (typeof event !== 'string' || !element) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const typeEvent = event.replace(stripNameRegex, '');
|
||||
const inNamespace = event !== typeEvent;
|
||||
const isNative = nativeEvents.indexOf(typeEvent) > -1;
|
||||
let jQueryEvent;
|
||||
let bubbles = true;
|
||||
let nativeDispatch = true;
|
||||
let defaultPrevented = false;
|
||||
let evt = null;
|
||||
|
||||
if (inNamespace && typeof jQuery !== 'undefined') {
|
||||
jQueryEvent = jQuery.Event(event, args);
|
||||
jQuery(element).trigger(jQueryEvent);
|
||||
bubbles = !jQueryEvent.isPropagationStopped();
|
||||
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
||||
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
||||
}
|
||||
|
||||
if (isNative) {
|
||||
evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent(typeEvent, bubbles, true);
|
||||
} else {
|
||||
evt = new CustomEvent(event, {
|
||||
bubbles,
|
||||
cancelable: true
|
||||
});
|
||||
} // merge custom informations in our event
|
||||
|
||||
|
||||
if (typeof args !== 'undefined') {
|
||||
Object.keys(args).forEach(key => {
|
||||
Object.defineProperty(evt, key, {
|
||||
get() {
|
||||
return args[key];
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (defaultPrevented) {
|
||||
evt.preventDefault();
|
||||
|
||||
if (!Polyfill.defaultPreventedPreservedOnDispatch) {
|
||||
Object.defineProperty(evt, 'defaultPrevented', {
|
||||
get: () => true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (nativeDispatch) {
|
||||
element.dispatchEvent(evt);
|
||||
}
|
||||
|
||||
if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
|
||||
jQueryEvent.preventDefault();
|
||||
}
|
||||
|
||||
return evt;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): dom/selectorEngine.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const findFn = Polyfill.find,
|
||||
findOne = Polyfill.findOne;
|
||||
const NODE_TEXT = 3;
|
||||
const SelectorEngine = {
|
||||
matches(element, selector) {
|
||||
return element.matches(selector);
|
||||
},
|
||||
|
||||
find(selector, element) {
|
||||
if (element === void 0) {
|
||||
element = document.documentElement;
|
||||
}
|
||||
|
||||
if (typeof selector !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return findFn.call(element, selector);
|
||||
},
|
||||
|
||||
findOne(selector, element) {
|
||||
if (element === void 0) {
|
||||
element = document.documentElement;
|
||||
}
|
||||
|
||||
if (typeof selector !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return findOne.call(element, selector);
|
||||
},
|
||||
|
||||
children(element, selector) {
|
||||
if (typeof selector !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const children = makeArray(element.children);
|
||||
return children.filter(child => this.matches(child, selector));
|
||||
},
|
||||
|
||||
parents(element, selector) {
|
||||
if (typeof selector !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const parents = [];
|
||||
let ancestor = element.parentNode;
|
||||
|
||||
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
||||
if (this.matches(ancestor, selector)) {
|
||||
parents.push(ancestor);
|
||||
}
|
||||
|
||||
ancestor = ancestor.parentNode;
|
||||
}
|
||||
|
||||
return parents;
|
||||
},
|
||||
|
||||
closest(element, selector) {
|
||||
if (typeof selector !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return element.closest(selector);
|
||||
},
|
||||
|
||||
prev(element, selector) {
|
||||
if (typeof selector !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const siblings = [];
|
||||
let previous = element.previousSibling;
|
||||
|
||||
while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== NODE_TEXT) {
|
||||
if (this.matches(previous, selector)) {
|
||||
siblings.push(previous);
|
||||
}
|
||||
|
||||
previous = previous.previousSibling;
|
||||
}
|
||||
|
||||
return siblings;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): alert.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME = 'alert';
|
||||
const VERSION = '4.3.1';
|
||||
const DATA_KEY = 'bs.alert';
|
||||
const EVENT_KEY = `.${DATA_KEY}`;
|
||||
const DATA_API_KEY = '.data-api';
|
||||
const Selector = {
|
||||
DISMISS: '[data-dismiss="alert"]'
|
||||
};
|
||||
const Event$1 = {
|
||||
CLOSE: `close${EVENT_KEY}`,
|
||||
CLOSED: `closed${EVENT_KEY}`,
|
||||
CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`
|
||||
};
|
||||
const ClassName = {
|
||||
ALERT: 'alert',
|
||||
FADE: 'fade',
|
||||
SHOW: 'show'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Alert {
|
||||
constructor(element) {
|
||||
this._element = element;
|
||||
|
||||
if (this._element) {
|
||||
Data.setData(element, DATA_KEY, this);
|
||||
}
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION;
|
||||
} // Public
|
||||
|
||||
|
||||
close(element) {
|
||||
let rootElement = this._element;
|
||||
|
||||
if (element) {
|
||||
rootElement = this._getRootElement(element);
|
||||
}
|
||||
|
||||
const customEvent = this._triggerCloseEvent(rootElement);
|
||||
|
||||
if (customEvent === null || customEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._removeElement(rootElement);
|
||||
}
|
||||
|
||||
dispose() {
|
||||
Data.removeData(this._element, DATA_KEY);
|
||||
this._element = null;
|
||||
} // Private
|
||||
|
||||
|
||||
_getRootElement(element) {
|
||||
const selector = getSelectorFromElement(element);
|
||||
let parent = false;
|
||||
|
||||
if (selector) {
|
||||
parent = SelectorEngine.findOne(selector);
|
||||
}
|
||||
|
||||
if (!parent) {
|
||||
parent = SelectorEngine.closest(element, `.${ClassName.ALERT}`);
|
||||
}
|
||||
|
||||
return parent;
|
||||
}
|
||||
|
||||
_triggerCloseEvent(element) {
|
||||
return EventHandler.trigger(element, Event$1.CLOSE);
|
||||
}
|
||||
|
||||
_removeElement(element) {
|
||||
element.classList.remove(ClassName.SHOW);
|
||||
|
||||
if (!element.classList.contains(ClassName.FADE)) {
|
||||
this._destroyElement(element);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const transitionDuration = getTransitionDurationFromElement(element);
|
||||
EventHandler.one(element, TRANSITION_END, event => this._destroyElement(element, event));
|
||||
emulateTransitionEnd(element, transitionDuration);
|
||||
}
|
||||
|
||||
_destroyElement(element) {
|
||||
if (element.parentNode) {
|
||||
element.parentNode.removeChild(element);
|
||||
}
|
||||
|
||||
EventHandler.trigger(element, Event$1.CLOSED);
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY);
|
||||
|
||||
if (!data) {
|
||||
data = new Alert(this);
|
||||
}
|
||||
|
||||
if (config === 'close') {
|
||||
data[config](this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _handleDismiss(alertInstance) {
|
||||
return function (event) {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
alertInstance.close(this);
|
||||
};
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$1.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .alert to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME];
|
||||
jQuery.fn[NAME] = Alert._jQueryInterface;
|
||||
jQuery.fn[NAME].Constructor = Alert;
|
||||
|
||||
jQuery.fn[NAME].noConflict = () => {
|
||||
jQuery.fn[NAME] = JQUERY_NO_CONFLICT;
|
||||
return Alert._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): button.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$1 = 'button';
|
||||
const VERSION$1 = '4.3.1';
|
||||
const DATA_KEY$1 = 'bs.button';
|
||||
const EVENT_KEY$1 = `.${DATA_KEY$1}`;
|
||||
const DATA_API_KEY$1 = '.data-api';
|
||||
const ClassName$1 = {
|
||||
ACTIVE: 'active',
|
||||
BUTTON: 'btn',
|
||||
FOCUS: 'focus'
|
||||
};
|
||||
const Selector$1 = {
|
||||
DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
|
||||
DATA_TOGGLE: '[data-toggle="buttons"]',
|
||||
INPUT: 'input:not([type="hidden"])',
|
||||
ACTIVE: '.active',
|
||||
BUTTON: '.btn'
|
||||
};
|
||||
const Event$2 = {
|
||||
CLICK_DATA_API: `click${EVENT_KEY$1}${DATA_API_KEY$1}`,
|
||||
FOCUS_DATA_API: `focus${EVENT_KEY$1}${DATA_API_KEY$1}`,
|
||||
BLUR_DATA_API: `blur${EVENT_KEY$1}${DATA_API_KEY$1}`
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Button {
|
||||
constructor(element) {
|
||||
this._element = element;
|
||||
Data.setData(element, DATA_KEY$1, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$1;
|
||||
} // Public
|
||||
|
||||
|
||||
toggle() {
|
||||
let triggerChangeEvent = true;
|
||||
let addAriaPressed = true;
|
||||
const rootElement = SelectorEngine.closest(this._element, Selector$1.DATA_TOGGLE);
|
||||
|
||||
if (rootElement) {
|
||||
const input = SelectorEngine.findOne(Selector$1.INPUT, this._element);
|
||||
|
||||
if (input) {
|
||||
if (input.type === 'radio') {
|
||||
if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {
|
||||
triggerChangeEvent = false;
|
||||
} else {
|
||||
const activeElement = SelectorEngine.findOne(Selector$1.ACTIVE, rootElement);
|
||||
|
||||
if (activeElement) {
|
||||
activeElement.classList.remove(ClassName$1.ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (triggerChangeEvent) {
|
||||
if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);
|
||||
EventHandler.trigger(input, 'change');
|
||||
}
|
||||
|
||||
input.focus();
|
||||
addAriaPressed = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (addAriaPressed) {
|
||||
this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));
|
||||
}
|
||||
|
||||
if (triggerChangeEvent) {
|
||||
this._element.classList.toggle(ClassName$1.ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
dispose() {
|
||||
Data.removeData(this._element, DATA_KEY$1);
|
||||
this._element = null;
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY$1);
|
||||
|
||||
if (!data) {
|
||||
data = new Button(this);
|
||||
}
|
||||
|
||||
if (config === 'toggle') {
|
||||
data[config]();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$1);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$2.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, event => {
|
||||
event.preventDefault();
|
||||
let button = event.target;
|
||||
|
||||
if (!button.classList.contains(ClassName$1.BUTTON)) {
|
||||
button = SelectorEngine.closest(button, Selector$1.BUTTON);
|
||||
}
|
||||
|
||||
let data = Data.getData(button, DATA_KEY$1);
|
||||
|
||||
if (!data) {
|
||||
data = new Button(button);
|
||||
Data.setData(button, DATA_KEY$1, data);
|
||||
}
|
||||
|
||||
data.toggle();
|
||||
});
|
||||
EventHandler.on(document, Event$2.FOCUS_DATA_API, Selector$1.DATA_TOGGLE_CARROT, event => {
|
||||
const button = SelectorEngine.closest(event.target, Selector$1.BUTTON);
|
||||
button.classList.add(ClassName$1.FOCUS);
|
||||
});
|
||||
EventHandler.on(document, Event$2.BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, event => {
|
||||
const button = SelectorEngine.closest(event.target, Selector$1.BUTTON);
|
||||
button.classList.remove(ClassName$1.FOCUS);
|
||||
});
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .button to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$1];
|
||||
jQuery.fn[NAME$1] = Button._jQueryInterface;
|
||||
jQuery.fn[NAME$1].Constructor = Button;
|
||||
|
||||
jQuery.fn[NAME$1].noConflict = () => {
|
||||
jQuery.fn[NAME$1] = JQUERY_NO_CONFLICT;
|
||||
return Button._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): dom/manipulator.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
function normalizeData(val) {
|
||||
if (val === 'true') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (val === 'false') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (val === Number(val).toString()) {
|
||||
return Number(val);
|
||||
}
|
||||
|
||||
if (val === '' || val === 'null') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
function normalizeDataKey(key) {
|
||||
return key.replace(/[A-Z]/g, chr => chr.toLowerCase());
|
||||
}
|
||||
|
||||
const Manipulator = {
|
||||
setDataAttribute(element, key, value) {
|
||||
element.setAttribute(`data-${normalizeDataKey(key)}`, value);
|
||||
},
|
||||
|
||||
removeDataAttribute(element, key) {
|
||||
element.removeAttribute(`data-${normalizeDataKey(key)}`);
|
||||
},
|
||||
|
||||
getDataAttributes(element) {
|
||||
if (!element) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const attributes = _extends({}, element.dataset);
|
||||
|
||||
Object.keys(attributes).forEach(key => {
|
||||
attributes[key] = normalizeData(attributes[key]);
|
||||
});
|
||||
return attributes;
|
||||
},
|
||||
|
||||
getDataAttribute(element, key) {
|
||||
return normalizeData(element.getAttribute(`data-${normalizeDataKey(key)}`));
|
||||
},
|
||||
|
||||
offset(element) {
|
||||
const rect = element.getBoundingClientRect();
|
||||
return {
|
||||
top: rect.top + document.body.scrollTop,
|
||||
left: rect.left + document.body.scrollLeft
|
||||
};
|
||||
},
|
||||
|
||||
position(element) {
|
||||
return {
|
||||
top: element.offsetTop,
|
||||
left: element.offsetLeft
|
||||
};
|
||||
},
|
||||
|
||||
toggleClass(element, className) {
|
||||
if (!element) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (element.classList.contains(className)) {
|
||||
element.classList.remove(className);
|
||||
} else {
|
||||
element.classList.add(className);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$2 = 'carousel';
|
||||
const VERSION$2 = '4.3.1';
|
||||
const DATA_KEY$2 = 'bs.carousel';
|
||||
const EVENT_KEY$2 = `.${DATA_KEY$2}`;
|
||||
const DATA_API_KEY$2 = '.data-api';
|
||||
const ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
|
||||
|
||||
const ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
|
||||
|
||||
const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
|
||||
|
||||
const SWIPE_THRESHOLD = 40;
|
||||
const Default = {
|
||||
interval: 5000,
|
||||
keyboard: true,
|
||||
slide: false,
|
||||
pause: 'hover',
|
||||
wrap: true,
|
||||
touch: true
|
||||
};
|
||||
const DefaultType = {
|
||||
interval: '(number|boolean)',
|
||||
keyboard: 'boolean',
|
||||
slide: '(boolean|string)',
|
||||
pause: '(string|boolean)',
|
||||
wrap: 'boolean',
|
||||
touch: 'boolean'
|
||||
};
|
||||
const Direction = {
|
||||
NEXT: 'next',
|
||||
PREV: 'prev',
|
||||
LEFT: 'left',
|
||||
RIGHT: 'right'
|
||||
};
|
||||
const Event$3 = {
|
||||
SLIDE: `slide${EVENT_KEY$2}`,
|
||||
SLID: `slid${EVENT_KEY$2}`,
|
||||
KEYDOWN: `keydown${EVENT_KEY$2}`,
|
||||
MOUSEENTER: `mouseenter${EVENT_KEY$2}`,
|
||||
MOUSELEAVE: `mouseleave${EVENT_KEY$2}`,
|
||||
TOUCHSTART: `touchstart${EVENT_KEY$2}`,
|
||||
TOUCHMOVE: `touchmove${EVENT_KEY$2}`,
|
||||
TOUCHEND: `touchend${EVENT_KEY$2}`,
|
||||
POINTERDOWN: `pointerdown${EVENT_KEY$2}`,
|
||||
POINTERUP: `pointerup${EVENT_KEY$2}`,
|
||||
DRAG_START: `dragstart${EVENT_KEY$2}`,
|
||||
LOAD_DATA_API: `load${EVENT_KEY$2}${DATA_API_KEY$2}`,
|
||||
CLICK_DATA_API: `click${EVENT_KEY$2}${DATA_API_KEY$2}`
|
||||
};
|
||||
const ClassName$2 = {
|
||||
CAROUSEL: 'carousel',
|
||||
ACTIVE: 'active',
|
||||
SLIDE: 'slide',
|
||||
RIGHT: 'carousel-item-right',
|
||||
LEFT: 'carousel-item-left',
|
||||
NEXT: 'carousel-item-next',
|
||||
PREV: 'carousel-item-prev',
|
||||
ITEM: 'carousel-item',
|
||||
POINTER_EVENT: 'pointer-event'
|
||||
};
|
||||
const Selector$2 = {
|
||||
ACTIVE: '.active',
|
||||
ACTIVE_ITEM: '.active.carousel-item',
|
||||
ITEM: '.carousel-item',
|
||||
ITEM_IMG: '.carousel-item img',
|
||||
NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
|
||||
INDICATORS: '.carousel-indicators',
|
||||
DATA_SLIDE: '[data-slide], [data-slide-to]',
|
||||
DATA_RIDE: '[data-ride="carousel"]'
|
||||
};
|
||||
const PointerType = {
|
||||
TOUCH: 'touch',
|
||||
PEN: 'pen'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Carousel {
|
||||
constructor(element, config) {
|
||||
this._items = null;
|
||||
this._interval = null;
|
||||
this._activeElement = null;
|
||||
this._isPaused = false;
|
||||
this._isSliding = false;
|
||||
this.touchTimeout = null;
|
||||
this.touchStartX = 0;
|
||||
this.touchDeltaX = 0;
|
||||
this._config = this._getConfig(config);
|
||||
this._element = element;
|
||||
this._indicatorsElement = SelectorEngine.findOne(Selector$2.INDICATORS, this._element);
|
||||
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
||||
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
|
||||
|
||||
this._addEventListeners();
|
||||
|
||||
Data.setData(element, DATA_KEY$2, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$2;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default;
|
||||
} // Public
|
||||
|
||||
|
||||
next() {
|
||||
if (!this._isSliding) {
|
||||
this._slide(Direction.NEXT);
|
||||
}
|
||||
}
|
||||
|
||||
nextWhenVisible() {
|
||||
// Don't call next when the page isn't visible
|
||||
// or the carousel or its parent isn't visible
|
||||
if (!document.hidden && isVisible(this._element)) {
|
||||
this.next();
|
||||
}
|
||||
}
|
||||
|
||||
prev() {
|
||||
if (!this._isSliding) {
|
||||
this._slide(Direction.PREV);
|
||||
}
|
||||
}
|
||||
|
||||
pause(event) {
|
||||
if (!event) {
|
||||
this._isPaused = true;
|
||||
}
|
||||
|
||||
if (SelectorEngine.findOne(Selector$2.NEXT_PREV, this._element)) {
|
||||
triggerTransitionEnd(this._element);
|
||||
this.cycle(true);
|
||||
}
|
||||
|
||||
clearInterval(this._interval);
|
||||
this._interval = null;
|
||||
}
|
||||
|
||||
cycle(event) {
|
||||
if (!event) {
|
||||
this._isPaused = false;
|
||||
}
|
||||
|
||||
if (this._interval) {
|
||||
clearInterval(this._interval);
|
||||
this._interval = null;
|
||||
}
|
||||
|
||||
if (this._config && this._config.interval && !this._isPaused) {
|
||||
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
|
||||
}
|
||||
}
|
||||
|
||||
to(index) {
|
||||
this._activeElement = SelectorEngine.findOne(Selector$2.ACTIVE_ITEM, this._element);
|
||||
|
||||
const activeIndex = this._getItemIndex(this._activeElement);
|
||||
|
||||
if (index > this._items.length - 1 || index < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._isSliding) {
|
||||
EventHandler.one(this._element, Event$3.SLID, () => this.to(index));
|
||||
return;
|
||||
}
|
||||
|
||||
if (activeIndex === index) {
|
||||
this.pause();
|
||||
this.cycle();
|
||||
return;
|
||||
}
|
||||
|
||||
const direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
|
||||
|
||||
this._slide(direction, this._items[index]);
|
||||
}
|
||||
|
||||
dispose() {
|
||||
EventHandler.off(this._element, EVENT_KEY$2);
|
||||
Data.removeData(this._element, DATA_KEY$2);
|
||||
this._items = null;
|
||||
this._config = null;
|
||||
this._element = null;
|
||||
this._interval = null;
|
||||
this._isPaused = null;
|
||||
this._isSliding = null;
|
||||
this._activeElement = null;
|
||||
this._indicatorsElement = null;
|
||||
} // Private
|
||||
|
||||
|
||||
_getConfig(config) {
|
||||
config = _extends({}, Default, config);
|
||||
typeCheckConfig(NAME$2, config, DefaultType);
|
||||
return config;
|
||||
}
|
||||
|
||||
_handleSwipe() {
|
||||
const absDeltax = Math.abs(this.touchDeltaX);
|
||||
|
||||
if (absDeltax <= SWIPE_THRESHOLD) {
|
||||
return;
|
||||
}
|
||||
|
||||
const direction = absDeltax / this.touchDeltaX; // swipe left
|
||||
|
||||
if (direction > 0) {
|
||||
this.prev();
|
||||
} // swipe right
|
||||
|
||||
|
||||
if (direction < 0) {
|
||||
this.next();
|
||||
}
|
||||
}
|
||||
|
||||
_addEventListeners() {
|
||||
if (this._config.keyboard) {
|
||||
EventHandler.on(this._element, Event$3.KEYDOWN, event => this._keydown(event));
|
||||
}
|
||||
|
||||
if (this._config.pause === 'hover') {
|
||||
EventHandler.on(this._element, Event$3.MOUSEENTER, event => this.pause(event));
|
||||
EventHandler.on(this._element, Event$3.MOUSELEAVE, event => this.cycle(event));
|
||||
}
|
||||
|
||||
if (this._config.touch) {
|
||||
this._addTouchEventListeners();
|
||||
}
|
||||
}
|
||||
|
||||
_addTouchEventListeners() {
|
||||
if (!this._touchSupported) {
|
||||
return;
|
||||
}
|
||||
|
||||
const start = event => {
|
||||
if (this._pointerEvent && PointerType[event.pointerType.toUpperCase()]) {
|
||||
this.touchStartX = event.clientX;
|
||||
} else if (!this._pointerEvent) {
|
||||
this.touchStartX = event.touches[0].clientX;
|
||||
}
|
||||
};
|
||||
|
||||
const move = event => {
|
||||
// ensure swiping with one touch and not pinching
|
||||
if (event.touches && event.touches.length > 1) {
|
||||
this.touchDeltaX = 0;
|
||||
} else {
|
||||
this.touchDeltaX = event.touches[0].clientX - this.touchStartX;
|
||||
}
|
||||
};
|
||||
|
||||
const end = event => {
|
||||
if (this._pointerEvent && PointerType[event.pointerType.toUpperCase()]) {
|
||||
this.touchDeltaX = event.clientX - this.touchStartX;
|
||||
}
|
||||
|
||||
this._handleSwipe();
|
||||
|
||||
if (this._config.pause === 'hover') {
|
||||
// If it's a touch-enabled device, mouseenter/leave are fired as
|
||||
// part of the mouse compatibility events on first tap - the carousel
|
||||
// would stop cycling until user tapped out of it;
|
||||
// here, we listen for touchend, explicitly pause the carousel
|
||||
// (as if it's the second time we tap on it, mouseenter compat event
|
||||
// is NOT fired) and after a timeout (to allow for mouse compatibility
|
||||
// events to fire) we explicitly restart cycling
|
||||
this.pause();
|
||||
|
||||
if (this.touchTimeout) {
|
||||
clearTimeout(this.touchTimeout);
|
||||
}
|
||||
|
||||
this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
|
||||
}
|
||||
};
|
||||
|
||||
makeArray(SelectorEngine.find(Selector$2.ITEM_IMG, this._element)).forEach(itemImg => {
|
||||
EventHandler.on(itemImg, Event$3.DRAG_START, e => e.preventDefault());
|
||||
});
|
||||
|
||||
if (this._pointerEvent) {
|
||||
EventHandler.on(this._element, Event$3.POINTERDOWN, event => start(event));
|
||||
EventHandler.on(this._element, Event$3.POINTERUP, event => end(event));
|
||||
|
||||
this._element.classList.add(ClassName$2.POINTER_EVENT);
|
||||
} else {
|
||||
EventHandler.on(this._element, Event$3.TOUCHSTART, event => start(event));
|
||||
EventHandler.on(this._element, Event$3.TOUCHMOVE, event => move(event));
|
||||
EventHandler.on(this._element, Event$3.TOUCHEND, event => end(event));
|
||||
}
|
||||
}
|
||||
|
||||
_keydown(event) {
|
||||
if (/input|textarea/i.test(event.target.tagName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (event.which) {
|
||||
case ARROW_LEFT_KEYCODE:
|
||||
event.preventDefault();
|
||||
this.prev();
|
||||
break;
|
||||
|
||||
case ARROW_RIGHT_KEYCODE:
|
||||
event.preventDefault();
|
||||
this.next();
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
_getItemIndex(element) {
|
||||
this._items = element && element.parentNode ? makeArray(SelectorEngine.find(Selector$2.ITEM, element.parentNode)) : [];
|
||||
return this._items.indexOf(element);
|
||||
}
|
||||
|
||||
_getItemByDirection(direction, activeElement) {
|
||||
const isNextDirection = direction === Direction.NEXT;
|
||||
const isPrevDirection = direction === Direction.PREV;
|
||||
|
||||
const activeIndex = this._getItemIndex(activeElement);
|
||||
|
||||
const lastItemIndex = this._items.length - 1;
|
||||
const isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
|
||||
|
||||
if (isGoingToWrap && !this._config.wrap) {
|
||||
return activeElement;
|
||||
}
|
||||
|
||||
const delta = direction === Direction.PREV ? -1 : 1;
|
||||
const itemIndex = (activeIndex + delta) % this._items.length;
|
||||
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
|
||||
}
|
||||
|
||||
_triggerSlideEvent(relatedTarget, eventDirectionName) {
|
||||
const targetIndex = this._getItemIndex(relatedTarget);
|
||||
|
||||
const fromIndex = this._getItemIndex(SelectorEngine.findOne(Selector$2.ACTIVE_ITEM, this._element));
|
||||
|
||||
return EventHandler.trigger(this._element, Event$3.SLIDE, {
|
||||
relatedTarget,
|
||||
direction: eventDirectionName,
|
||||
from: fromIndex,
|
||||
to: targetIndex
|
||||
});
|
||||
}
|
||||
|
||||
_setActiveIndicatorElement(element) {
|
||||
if (this._indicatorsElement) {
|
||||
const indicators = SelectorEngine.find(Selector$2.ACTIVE, this._indicatorsElement);
|
||||
|
||||
for (let i = 0; i < indicators.length; i++) {
|
||||
indicators[i].classList.remove(ClassName$2.ACTIVE);
|
||||
}
|
||||
|
||||
const nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
|
||||
|
||||
if (nextIndicator) {
|
||||
nextIndicator.classList.add(ClassName$2.ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_slide(direction, element) {
|
||||
const activeElement = SelectorEngine.findOne(Selector$2.ACTIVE_ITEM, this._element);
|
||||
|
||||
const activeElementIndex = this._getItemIndex(activeElement);
|
||||
|
||||
const nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
|
||||
|
||||
const nextElementIndex = this._getItemIndex(nextElement);
|
||||
|
||||
const isCycling = Boolean(this._interval);
|
||||
let directionalClassName;
|
||||
let orderClassName;
|
||||
let eventDirectionName;
|
||||
|
||||
if (direction === Direction.NEXT) {
|
||||
directionalClassName = ClassName$2.LEFT;
|
||||
orderClassName = ClassName$2.NEXT;
|
||||
eventDirectionName = Direction.LEFT;
|
||||
} else {
|
||||
directionalClassName = ClassName$2.RIGHT;
|
||||
orderClassName = ClassName$2.PREV;
|
||||
eventDirectionName = Direction.RIGHT;
|
||||
}
|
||||
|
||||
if (nextElement && nextElement.classList.contains(ClassName$2.ACTIVE)) {
|
||||
this._isSliding = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
|
||||
|
||||
if (slideEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!activeElement || !nextElement) {
|
||||
// Some weirdness is happening, so we bail
|
||||
return;
|
||||
}
|
||||
|
||||
this._isSliding = true;
|
||||
|
||||
if (isCycling) {
|
||||
this.pause();
|
||||
}
|
||||
|
||||
this._setActiveIndicatorElement(nextElement);
|
||||
|
||||
if (this._element.classList.contains(ClassName$2.SLIDE)) {
|
||||
nextElement.classList.add(orderClassName);
|
||||
reflow(nextElement);
|
||||
activeElement.classList.add(directionalClassName);
|
||||
nextElement.classList.add(directionalClassName);
|
||||
const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
|
||||
|
||||
if (nextElementInterval) {
|
||||
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
|
||||
this._config.interval = nextElementInterval;
|
||||
} else {
|
||||
this._config.interval = this._config.defaultInterval || this._config.interval;
|
||||
}
|
||||
|
||||
const transitionDuration = getTransitionDurationFromElement(activeElement);
|
||||
EventHandler.one(activeElement, TRANSITION_END, () => {
|
||||
nextElement.classList.remove(directionalClassName);
|
||||
nextElement.classList.remove(orderClassName);
|
||||
nextElement.classList.add(ClassName$2.ACTIVE);
|
||||
activeElement.classList.remove(ClassName$2.ACTIVE);
|
||||
activeElement.classList.remove(orderClassName);
|
||||
activeElement.classList.remove(directionalClassName);
|
||||
this._isSliding = false;
|
||||
setTimeout(() => {
|
||||
EventHandler.trigger(this._element, Event$3.SLID, {
|
||||
relatedTarget: nextElement,
|
||||
direction: eventDirectionName,
|
||||
from: activeElementIndex,
|
||||
to: nextElementIndex
|
||||
});
|
||||
}, 0);
|
||||
});
|
||||
emulateTransitionEnd(activeElement, transitionDuration);
|
||||
} else {
|
||||
activeElement.classList.remove(ClassName$2.ACTIVE);
|
||||
nextElement.classList.add(ClassName$2.ACTIVE);
|
||||
this._isSliding = false;
|
||||
EventHandler.trigger(this._element, Event$3.SLID, {
|
||||
relatedTarget: nextElement,
|
||||
direction: eventDirectionName,
|
||||
from: activeElementIndex,
|
||||
to: nextElementIndex
|
||||
});
|
||||
}
|
||||
|
||||
if (isCycling) {
|
||||
this.cycle();
|
||||
}
|
||||
} // Static
|
||||
|
||||
|
||||
static _carouselInterface(element, config) {
|
||||
let data = Data.getData(element, DATA_KEY$2);
|
||||
|
||||
let _config = _extends({}, Default, Manipulator.getDataAttributes(element));
|
||||
|
||||
if (typeof config === 'object') {
|
||||
_config = _extends({}, _config, config);
|
||||
}
|
||||
|
||||
const action = typeof config === 'string' ? config : _config.slide;
|
||||
|
||||
if (!data) {
|
||||
data = new Carousel(element, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'number') {
|
||||
data.to(config);
|
||||
} else if (typeof action === 'string') {
|
||||
if (typeof data[action] === 'undefined') {
|
||||
throw new TypeError(`No method named "${action}"`);
|
||||
}
|
||||
|
||||
data[action]();
|
||||
} else if (_config.interval && _config.ride) {
|
||||
data.pause();
|
||||
data.cycle();
|
||||
}
|
||||
}
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
Carousel._carouselInterface(this, config);
|
||||
});
|
||||
}
|
||||
|
||||
static _dataApiClickHandler(event) {
|
||||
const selector = getSelectorFromElement(this);
|
||||
|
||||
if (!selector) {
|
||||
return;
|
||||
}
|
||||
|
||||
const target = SelectorEngine.findOne(selector);
|
||||
|
||||
if (!target || !target.classList.contains(ClassName$2.CAROUSEL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const config = _extends({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
|
||||
|
||||
const slideIndex = this.getAttribute('data-slide-to');
|
||||
|
||||
if (slideIndex) {
|
||||
config.interval = false;
|
||||
}
|
||||
|
||||
Carousel._carouselInterface(target, config);
|
||||
|
||||
if (slideIndex) {
|
||||
Data.getData(target, DATA_KEY$2).to(slideIndex);
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$2);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$3.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);
|
||||
EventHandler.on(window, Event$3.LOAD_DATA_API, () => {
|
||||
const carousels = makeArray(SelectorEngine.find(Selector$2.DATA_RIDE));
|
||||
|
||||
for (let i = 0, len = carousels.length; i < len; i++) {
|
||||
Carousel._carouselInterface(carousels[i], Data.getData(carousels[i], DATA_KEY$2));
|
||||
}
|
||||
});
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .carousel to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$2];
|
||||
jQuery.fn[NAME$2] = Carousel._jQueryInterface;
|
||||
jQuery.fn[NAME$2].Constructor = Carousel;
|
||||
|
||||
jQuery.fn[NAME$2].noConflict = () => {
|
||||
jQuery.fn[NAME$2] = JQUERY_NO_CONFLICT;
|
||||
return Carousel._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$3 = 'collapse';
|
||||
const VERSION$3 = '4.3.1';
|
||||
const DATA_KEY$3 = 'bs.collapse';
|
||||
const EVENT_KEY$3 = `.${DATA_KEY$3}`;
|
||||
const DATA_API_KEY$3 = '.data-api';
|
||||
const Default$1 = {
|
||||
toggle: true,
|
||||
parent: ''
|
||||
};
|
||||
const DefaultType$1 = {
|
||||
toggle: 'boolean',
|
||||
parent: '(string|element)'
|
||||
};
|
||||
const Event$4 = {
|
||||
SHOW: `show${EVENT_KEY$3}`,
|
||||
SHOWN: `shown${EVENT_KEY$3}`,
|
||||
HIDE: `hide${EVENT_KEY$3}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$3}`,
|
||||
CLICK_DATA_API: `click${EVENT_KEY$3}${DATA_API_KEY$3}`
|
||||
};
|
||||
const ClassName$3 = {
|
||||
SHOW: 'show',
|
||||
COLLAPSE: 'collapse',
|
||||
COLLAPSING: 'collapsing',
|
||||
COLLAPSED: 'collapsed'
|
||||
};
|
||||
const Dimension = {
|
||||
WIDTH: 'width',
|
||||
HEIGHT: 'height'
|
||||
};
|
||||
const Selector$3 = {
|
||||
ACTIVES: '.show, .collapsing',
|
||||
DATA_TOGGLE: '[data-toggle="collapse"]'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Collapse {
|
||||
constructor(element, config) {
|
||||
this._isTransitioning = false;
|
||||
this._element = element;
|
||||
this._config = this._getConfig(config);
|
||||
this._triggerArray = makeArray(SelectorEngine.find(`[data-toggle="collapse"][href="#${element.id}"],` + `[data-toggle="collapse"][data-target="#${element.id}"]`));
|
||||
const toggleList = makeArray(SelectorEngine.find(Selector$3.DATA_TOGGLE));
|
||||
|
||||
for (let i = 0, len = toggleList.length; i < len; i++) {
|
||||
const elem = toggleList[i];
|
||||
const selector = getSelectorFromElement(elem);
|
||||
const filterElement = makeArray(SelectorEngine.find(selector)).filter(foundElem => foundElem === element);
|
||||
|
||||
if (selector !== null && filterElement.length) {
|
||||
this._selector = selector;
|
||||
|
||||
this._triggerArray.push(elem);
|
||||
}
|
||||
}
|
||||
|
||||
this._parent = this._config.parent ? this._getParent() : null;
|
||||
|
||||
if (!this._config.parent) {
|
||||
this._addAriaAndCollapsedClass(this._element, this._triggerArray);
|
||||
}
|
||||
|
||||
if (this._config.toggle) {
|
||||
this.toggle();
|
||||
}
|
||||
|
||||
Data.setData(element, DATA_KEY$3, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$3;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$1;
|
||||
} // Public
|
||||
|
||||
|
||||
toggle() {
|
||||
if (this._element.classList.contains(ClassName$3.SHOW)) {
|
||||
this.hide();
|
||||
} else {
|
||||
this.show();
|
||||
}
|
||||
}
|
||||
|
||||
show() {
|
||||
if (this._isTransitioning || this._element.classList.contains(ClassName$3.SHOW)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let actives;
|
||||
let activesData;
|
||||
|
||||
if (this._parent) {
|
||||
actives = makeArray(SelectorEngine.find(Selector$3.ACTIVES, this._parent)).filter(elem => {
|
||||
if (typeof this._config.parent === 'string') {
|
||||
return elem.getAttribute('data-parent') === this._config.parent;
|
||||
}
|
||||
|
||||
return elem.classList.contains(ClassName$3.COLLAPSE);
|
||||
});
|
||||
|
||||
if (actives.length === 0) {
|
||||
actives = null;
|
||||
}
|
||||
}
|
||||
|
||||
const container = SelectorEngine.findOne(this._selector);
|
||||
|
||||
if (actives) {
|
||||
const tempActiveData = actives.filter(elem => container !== elem);
|
||||
activesData = tempActiveData[0] ? Data.getData(tempActiveData[0], DATA_KEY$3) : null;
|
||||
|
||||
if (activesData && activesData._isTransitioning) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const startEvent = EventHandler.trigger(this._element, Event$4.SHOW);
|
||||
|
||||
if (startEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (actives) {
|
||||
actives.forEach(elemActive => {
|
||||
if (container !== elemActive) {
|
||||
Collapse._collapseInterface(elemActive, 'hide');
|
||||
}
|
||||
|
||||
if (!activesData) {
|
||||
Data.setData(elemActive, DATA_KEY$3, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const dimension = this._getDimension();
|
||||
|
||||
this._element.classList.remove(ClassName$3.COLLAPSE);
|
||||
|
||||
this._element.classList.add(ClassName$3.COLLAPSING);
|
||||
|
||||
this._element.style[dimension] = 0;
|
||||
|
||||
if (this._triggerArray.length) {
|
||||
this._triggerArray.forEach(element => {
|
||||
element.classList.remove(ClassName$3.COLLAPSED);
|
||||
element.setAttribute('aria-expanded', true);
|
||||
});
|
||||
}
|
||||
|
||||
this.setTransitioning(true);
|
||||
|
||||
const complete = () => {
|
||||
this._element.classList.remove(ClassName$3.COLLAPSING);
|
||||
|
||||
this._element.classList.add(ClassName$3.COLLAPSE);
|
||||
|
||||
this._element.classList.add(ClassName$3.SHOW);
|
||||
|
||||
this._element.style[dimension] = '';
|
||||
this.setTransitioning(false);
|
||||
EventHandler.trigger(this._element, Event$4.SHOWN);
|
||||
};
|
||||
|
||||
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
||||
const scrollSize = `scroll${capitalizedDimension}`;
|
||||
const transitionDuration = getTransitionDurationFromElement(this._element);
|
||||
EventHandler.one(this._element, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(this._element, transitionDuration);
|
||||
this._element.style[dimension] = `${this._element[scrollSize]}px`;
|
||||
}
|
||||
|
||||
hide() {
|
||||
if (this._isTransitioning || !this._element.classList.contains(ClassName$3.SHOW)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const startEvent = EventHandler.trigger(this._element, Event$4.HIDE);
|
||||
|
||||
if (startEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
const dimension = this._getDimension();
|
||||
|
||||
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
|
||||
reflow(this._element);
|
||||
|
||||
this._element.classList.add(ClassName$3.COLLAPSING);
|
||||
|
||||
this._element.classList.remove(ClassName$3.COLLAPSE);
|
||||
|
||||
this._element.classList.remove(ClassName$3.SHOW);
|
||||
|
||||
const triggerArrayLength = this._triggerArray.length;
|
||||
|
||||
if (triggerArrayLength > 0) {
|
||||
for (let i = 0; i < triggerArrayLength; i++) {
|
||||
const trigger = this._triggerArray[i];
|
||||
const selector = getSelectorFromElement(trigger);
|
||||
|
||||
if (selector !== null) {
|
||||
const elem = SelectorEngine.findOne(selector);
|
||||
|
||||
if (!elem.classList.contains(ClassName$3.SHOW)) {
|
||||
trigger.classList.add(ClassName$3.COLLAPSED);
|
||||
trigger.setAttribute('aria-expanded', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.setTransitioning(true);
|
||||
|
||||
const complete = () => {
|
||||
this.setTransitioning(false);
|
||||
|
||||
this._element.classList.remove(ClassName$3.COLLAPSING);
|
||||
|
||||
this._element.classList.add(ClassName$3.COLLAPSE);
|
||||
|
||||
EventHandler.trigger(this._element, Event$4.HIDDEN);
|
||||
};
|
||||
|
||||
this._element.style[dimension] = '';
|
||||
const transitionDuration = getTransitionDurationFromElement(this._element);
|
||||
EventHandler.one(this._element, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(this._element, transitionDuration);
|
||||
}
|
||||
|
||||
setTransitioning(isTransitioning) {
|
||||
this._isTransitioning = isTransitioning;
|
||||
}
|
||||
|
||||
dispose() {
|
||||
Data.removeData(this._element, DATA_KEY$3);
|
||||
this._config = null;
|
||||
this._parent = null;
|
||||
this._element = null;
|
||||
this._triggerArray = null;
|
||||
this._isTransitioning = null;
|
||||
} // Private
|
||||
|
||||
|
||||
_getConfig(config) {
|
||||
config = _extends({}, Default$1, config);
|
||||
config.toggle = Boolean(config.toggle); // Coerce string values
|
||||
|
||||
typeCheckConfig(NAME$3, config, DefaultType$1);
|
||||
return config;
|
||||
}
|
||||
|
||||
_getDimension() {
|
||||
const hasWidth = this._element.classList.contains(Dimension.WIDTH);
|
||||
|
||||
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
|
||||
}
|
||||
|
||||
_getParent() {
|
||||
let parent = this._config.parent;
|
||||
|
||||
if (isElement(parent)) {
|
||||
// it's a jQuery object
|
||||
if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {
|
||||
parent = parent[0];
|
||||
}
|
||||
} else {
|
||||
parent = SelectorEngine.findOne(parent);
|
||||
}
|
||||
|
||||
const selector = `[data-toggle="collapse"][data-parent="${parent}"]`;
|
||||
makeArray(SelectorEngine.find(selector, parent)).forEach(element => {
|
||||
this._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
|
||||
});
|
||||
return parent;
|
||||
}
|
||||
|
||||
_addAriaAndCollapsedClass(element, triggerArray) {
|
||||
if (element) {
|
||||
const isOpen = element.classList.contains(ClassName$3.SHOW);
|
||||
|
||||
if (triggerArray.length) {
|
||||
triggerArray.forEach(elem => {
|
||||
if (isOpen) {
|
||||
elem.classList.remove(ClassName$3.COLLAPSED);
|
||||
} else {
|
||||
elem.classList.add(ClassName$3.COLLAPSED);
|
||||
}
|
||||
|
||||
elem.setAttribute('aria-expanded', isOpen);
|
||||
});
|
||||
}
|
||||
}
|
||||
} // Static
|
||||
|
||||
|
||||
static _getTargetFromElement(element) {
|
||||
const selector = getSelectorFromElement(element);
|
||||
return selector ? SelectorEngine.findOne(selector) : null;
|
||||
}
|
||||
|
||||
static _collapseInterface(element, config) {
|
||||
let data = Data.getData(element, DATA_KEY$3);
|
||||
|
||||
const _config = _extends({}, Default$1, Manipulator.getDataAttributes(element), typeof config === 'object' && config ? config : {});
|
||||
|
||||
if (!data && _config.toggle && /show|hide/.test(config)) {
|
||||
_config.toggle = false;
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
data = new Collapse(element, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config]();
|
||||
}
|
||||
}
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
Collapse._collapseInterface(this, config);
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$3);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$4.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {
|
||||
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
||||
if (event.target.tagName === 'A') {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
const triggerData = Manipulator.getDataAttributes(this);
|
||||
const selector = getSelectorFromElement(this);
|
||||
const selectorElements = makeArray(SelectorEngine.find(selector));
|
||||
selectorElements.forEach(element => {
|
||||
const data = Data.getData(element, DATA_KEY$3);
|
||||
let config;
|
||||
|
||||
if (data) {
|
||||
// update parent attribute
|
||||
if (data._parent === null && typeof triggerData.parent === 'string') {
|
||||
data._config.parent = triggerData.parent;
|
||||
data._parent = data._getParent();
|
||||
}
|
||||
|
||||
config = 'toggle';
|
||||
} else {
|
||||
config = triggerData;
|
||||
}
|
||||
|
||||
Collapse._collapseInterface(element, config);
|
||||
});
|
||||
});
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .collapse to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$3];
|
||||
jQuery.fn[NAME$3] = Collapse._jQueryInterface;
|
||||
jQuery.fn[NAME$3].Constructor = Collapse;
|
||||
|
||||
jQuery.fn[NAME$3].noConflict = () => {
|
||||
jQuery.fn[NAME$3] = JQUERY_NO_CONFLICT;
|
||||
return Collapse._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$4 = 'dropdown';
|
||||
const VERSION$4 = '4.3.1';
|
||||
const DATA_KEY$4 = 'bs.dropdown';
|
||||
const EVENT_KEY$4 = `.${DATA_KEY$4}`;
|
||||
const DATA_API_KEY$4 = '.data-api';
|
||||
const ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
|
||||
|
||||
const SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
|
||||
|
||||
const TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
|
||||
|
||||
const ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
|
||||
|
||||
const ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
|
||||
|
||||
const RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
|
||||
|
||||
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`);
|
||||
const Event$5 = {
|
||||
HIDE: `hide${EVENT_KEY$4}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$4}`,
|
||||
SHOW: `show${EVENT_KEY$4}`,
|
||||
SHOWN: `shown${EVENT_KEY$4}`,
|
||||
CLICK: `click${EVENT_KEY$4}`,
|
||||
CLICK_DATA_API: `click${EVENT_KEY$4}${DATA_API_KEY$4}`,
|
||||
KEYDOWN_DATA_API: `keydown${EVENT_KEY$4}${DATA_API_KEY$4}`,
|
||||
KEYUP_DATA_API: `keyup${EVENT_KEY$4}${DATA_API_KEY$4}`
|
||||
};
|
||||
const ClassName$4 = {
|
||||
DISABLED: 'disabled',
|
||||
SHOW: 'show',
|
||||
DROPUP: 'dropup',
|
||||
DROPRIGHT: 'dropright',
|
||||
DROPLEFT: 'dropleft',
|
||||
MENURIGHT: 'dropdown-menu-right',
|
||||
POSITION_STATIC: 'position-static'
|
||||
};
|
||||
const Selector$4 = {
|
||||
DATA_TOGGLE: '[data-toggle="dropdown"]',
|
||||
FORM_CHILD: '.dropdown form',
|
||||
MENU: '.dropdown-menu',
|
||||
NAVBAR_NAV: '.navbar-nav',
|
||||
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
|
||||
};
|
||||
const AttachmentMap = {
|
||||
TOP: 'top-start',
|
||||
TOPEND: 'top-end',
|
||||
BOTTOM: 'bottom-start',
|
||||
BOTTOMEND: 'bottom-end',
|
||||
RIGHT: 'right-start',
|
||||
RIGHTEND: 'right-end',
|
||||
LEFT: 'left-start',
|
||||
LEFTEND: 'left-end'
|
||||
};
|
||||
const Default$2 = {
|
||||
offset: 0,
|
||||
flip: true,
|
||||
boundary: 'scrollParent',
|
||||
reference: 'toggle',
|
||||
display: 'dynamic'
|
||||
};
|
||||
const DefaultType$2 = {
|
||||
offset: '(number|string|function)',
|
||||
flip: 'boolean',
|
||||
boundary: '(string|element)',
|
||||
reference: '(string|element)',
|
||||
display: 'string'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Dropdown {
|
||||
constructor(element, config) {
|
||||
this._element = element;
|
||||
this._popper = null;
|
||||
this._config = this._getConfig(config);
|
||||
this._menu = this._getMenuElement();
|
||||
this._inNavbar = this._detectNavbar();
|
||||
|
||||
this._addEventListeners();
|
||||
|
||||
Data.setData(element, DATA_KEY$4, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$4;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$2;
|
||||
}
|
||||
|
||||
static get DefaultType() {
|
||||
return DefaultType$2;
|
||||
} // Public
|
||||
|
||||
|
||||
toggle() {
|
||||
if (this._element.disabled || this._element.classList.contains(ClassName$4.DISABLED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const parent = Dropdown._getParentFromElement(this._element);
|
||||
|
||||
const isActive = this._menu.classList.contains(ClassName$4.SHOW);
|
||||
|
||||
Dropdown._clearMenus();
|
||||
|
||||
if (isActive) {
|
||||
return;
|
||||
}
|
||||
|
||||
const relatedTarget = {
|
||||
relatedTarget: this._element
|
||||
};
|
||||
const showEvent = EventHandler.trigger(parent, Event$5.SHOW, relatedTarget);
|
||||
|
||||
if (showEvent.defaultPrevented) {
|
||||
return;
|
||||
} // Disable totally Popper.js for Dropdown in Navbar
|
||||
|
||||
|
||||
if (!this._inNavbar) {
|
||||
/**
|
||||
* Check for Popper dependency
|
||||
* Popper - https://popper.js.org
|
||||
*/
|
||||
if (typeof Popper === 'undefined') {
|
||||
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)');
|
||||
}
|
||||
|
||||
let referenceElement = this._element;
|
||||
|
||||
if (this._config.reference === 'parent') {
|
||||
referenceElement = parent;
|
||||
} else if (isElement(this._config.reference)) {
|
||||
referenceElement = this._config.reference; // Check if it's jQuery element
|
||||
|
||||
if (typeof this._config.reference.jquery !== 'undefined') {
|
||||
referenceElement = this._config.reference[0];
|
||||
}
|
||||
} // If boundary is not `scrollParent`, then set position to `static`
|
||||
// to allow the menu to "escape" the scroll parent's boundaries
|
||||
// https://github.com/twbs/bootstrap/issues/24251
|
||||
|
||||
|
||||
if (this._config.boundary !== 'scrollParent') {
|
||||
parent.classList.add(ClassName$4.POSITION_STATIC);
|
||||
}
|
||||
|
||||
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
||||
} // If this is a touch-enabled device we add extra
|
||||
// empty mouseover listeners to the body's immediate children;
|
||||
// only needed because of broken event delegation on iOS
|
||||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
||||
|
||||
|
||||
if ('ontouchstart' in document.documentElement && !makeArray(SelectorEngine.closest(parent, Selector$4.NAVBAR_NAV)).length) {
|
||||
makeArray(document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', null, noop()));
|
||||
}
|
||||
|
||||
this._element.focus();
|
||||
|
||||
this._element.setAttribute('aria-expanded', true);
|
||||
|
||||
Manipulator.toggleClass(this._menu, ClassName$4.SHOW);
|
||||
Manipulator.toggleClass(parent, ClassName$4.SHOW);
|
||||
EventHandler.trigger(parent, Event$5.SHOWN, relatedTarget);
|
||||
}
|
||||
|
||||
show() {
|
||||
if (this._element.disabled || this._element.classList.contains(ClassName$4.DISABLED) || this._menu.classList.contains(ClassName$4.SHOW)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const parent = Dropdown._getParentFromElement(this._element);
|
||||
|
||||
const relatedTarget = {
|
||||
relatedTarget: this._element
|
||||
};
|
||||
const showEvent = EventHandler.trigger(parent, Event$5.SHOW, relatedTarget);
|
||||
|
||||
if (showEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
Manipulator.toggleClass(this._menu, ClassName$4.SHOW);
|
||||
Manipulator.toggleClass(parent, ClassName$4.SHOW);
|
||||
EventHandler.trigger(parent, Event$5.SHOWN, relatedTarget);
|
||||
}
|
||||
|
||||
hide() {
|
||||
if (this._element.disabled || this._element.classList.contains(ClassName$4.DISABLED) || !this._menu.classList.contains(ClassName$4.SHOW)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const parent = Dropdown._getParentFromElement(this._element);
|
||||
|
||||
const relatedTarget = {
|
||||
relatedTarget: this._element
|
||||
};
|
||||
const hideEvent = EventHandler.trigger(parent, Event$5.HIDE, relatedTarget);
|
||||
|
||||
if (hideEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
Manipulator.toggleClass(this._menu, ClassName$4.SHOW);
|
||||
Manipulator.toggleClass(parent, ClassName$4.SHOW);
|
||||
EventHandler.trigger(parent, Event$5.HIDDEN, relatedTarget);
|
||||
}
|
||||
|
||||
dispose() {
|
||||
Data.removeData(this._element, DATA_KEY$4);
|
||||
EventHandler.off(this._element, EVENT_KEY$4);
|
||||
this._element = null;
|
||||
this._menu = null;
|
||||
|
||||
if (this._popper !== null) {
|
||||
this._popper.destroy();
|
||||
|
||||
this._popper = null;
|
||||
}
|
||||
}
|
||||
|
||||
update() {
|
||||
this._inNavbar = this._detectNavbar();
|
||||
|
||||
if (this._popper !== null) {
|
||||
this._popper.scheduleUpdate();
|
||||
}
|
||||
} // Private
|
||||
|
||||
|
||||
_addEventListeners() {
|
||||
EventHandler.on(this._element, Event$5.CLICK, event => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.toggle();
|
||||
});
|
||||
}
|
||||
|
||||
_getConfig(config) {
|
||||
config = _extends({}, this.constructor.Default, Manipulator.getDataAttributes(this._element), config);
|
||||
typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
|
||||
return config;
|
||||
}
|
||||
|
||||
_getMenuElement() {
|
||||
if (!this._menu) {
|
||||
const parent = Dropdown._getParentFromElement(this._element);
|
||||
|
||||
if (parent) {
|
||||
this._menu = SelectorEngine.findOne(Selector$4.MENU, parent);
|
||||
}
|
||||
}
|
||||
|
||||
return this._menu;
|
||||
}
|
||||
|
||||
_getPlacement() {
|
||||
const parentDropdown = this._element.parentNode;
|
||||
let placement = AttachmentMap.BOTTOM; // Handle dropup
|
||||
|
||||
if (parentDropdown.classList.contains(ClassName$4.DROPUP)) {
|
||||
placement = AttachmentMap.TOP;
|
||||
|
||||
if (this._menu.classList.contains(ClassName$4.MENURIGHT)) {
|
||||
placement = AttachmentMap.TOPEND;
|
||||
}
|
||||
} else if (parentDropdown.classList.contains(ClassName$4.DROPRIGHT)) {
|
||||
placement = AttachmentMap.RIGHT;
|
||||
} else if (parentDropdown.classList.contains(ClassName$4.DROPLEFT)) {
|
||||
placement = AttachmentMap.LEFT;
|
||||
} else if (this._menu.classList.contains(ClassName$4.MENURIGHT)) {
|
||||
placement = AttachmentMap.BOTTOMEND;
|
||||
}
|
||||
|
||||
return placement;
|
||||
}
|
||||
|
||||
_detectNavbar() {
|
||||
return Boolean(SelectorEngine.closest(this._element, '.navbar'));
|
||||
}
|
||||
|
||||
_getOffset() {
|
||||
const offset = {};
|
||||
|
||||
if (typeof this._config.offset === 'function') {
|
||||
offset.fn = data => {
|
||||
data.offsets = _extends({}, data.offsets, this._config.offset(data.offsets, this._element) || {});
|
||||
return data;
|
||||
};
|
||||
} else {
|
||||
offset.offset = this._config.offset;
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
_getPopperConfig() {
|
||||
const popperConfig = {
|
||||
placement: this._getPlacement(),
|
||||
modifiers: {
|
||||
offset: this._getOffset(),
|
||||
flip: {
|
||||
enabled: this._config.flip
|
||||
},
|
||||
preventOverflow: {
|
||||
boundariesElement: this._config.boundary
|
||||
}
|
||||
} // Disable Popper.js if we have a static display
|
||||
|
||||
};
|
||||
|
||||
if (this._config.display === 'static') {
|
||||
popperConfig.modifiers.applyStyle = {
|
||||
enabled: false
|
||||
};
|
||||
}
|
||||
|
||||
return popperConfig;
|
||||
} // Static
|
||||
|
||||
|
||||
static _dropdownInterface(element, config) {
|
||||
let data = Data.getData(element, DATA_KEY$4);
|
||||
|
||||
const _config = typeof config === 'object' ? config : null;
|
||||
|
||||
if (!data) {
|
||||
data = new Dropdown(element, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config]();
|
||||
}
|
||||
}
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
Dropdown._dropdownInterface(this, config);
|
||||
});
|
||||
}
|
||||
|
||||
static _clearMenus(event) {
|
||||
if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const toggles = makeArray(SelectorEngine.find(Selector$4.DATA_TOGGLE));
|
||||
|
||||
for (let i = 0, len = toggles.length; i < len; i++) {
|
||||
const parent = Dropdown._getParentFromElement(toggles[i]);
|
||||
|
||||
const context = Data.getData(toggles[i], DATA_KEY$4);
|
||||
const relatedTarget = {
|
||||
relatedTarget: toggles[i]
|
||||
};
|
||||
|
||||
if (event && event.type === 'click') {
|
||||
relatedTarget.clickEvent = event;
|
||||
}
|
||||
|
||||
if (!context) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const dropdownMenu = context._menu;
|
||||
|
||||
if (!parent.classList.contains(ClassName$4.SHOW)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && parent.contains(event.target)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const hideEvent = EventHandler.trigger(parent, Event$5.HIDE, relatedTarget);
|
||||
|
||||
if (hideEvent.defaultPrevented) {
|
||||
continue;
|
||||
} // If this is a touch-enabled device we remove the extra
|
||||
// empty mouseover listeners we added for iOS support
|
||||
|
||||
|
||||
if ('ontouchstart' in document.documentElement) {
|
||||
makeArray(document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', null, noop()));
|
||||
}
|
||||
|
||||
toggles[i].setAttribute('aria-expanded', 'false');
|
||||
dropdownMenu.classList.remove(ClassName$4.SHOW);
|
||||
parent.classList.remove(ClassName$4.SHOW);
|
||||
EventHandler.trigger(parent, Event$5.HIDDEN, relatedTarget);
|
||||
}
|
||||
}
|
||||
|
||||
static _getParentFromElement(element) {
|
||||
let parent;
|
||||
const selector = getSelectorFromElement(element);
|
||||
|
||||
if (selector) {
|
||||
parent = SelectorEngine.findOne(selector);
|
||||
}
|
||||
|
||||
return parent || element.parentNode;
|
||||
}
|
||||
|
||||
static _dataApiKeydownHandler(event) {
|
||||
// If not input/textarea:
|
||||
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
|
||||
// If input/textarea:
|
||||
// - If space key => not a dropdown command
|
||||
// - If key is other than escape
|
||||
// - If key is not up or down => not a dropdown command
|
||||
// - If trigger inside the menu => not a dropdown command
|
||||
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || SelectorEngine.closest(event.target, Selector$4.MENU)) : !REGEXP_KEYDOWN.test(event.which)) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
if (this.disabled || this.classList.contains(ClassName$4.DISABLED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const parent = Dropdown._getParentFromElement(this);
|
||||
|
||||
const isActive = parent.classList.contains(ClassName$4.SHOW);
|
||||
|
||||
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
|
||||
if (event.which === ESCAPE_KEYCODE) {
|
||||
EventHandler.trigger(SelectorEngine.findOne(Selector$4.DATA_TOGGLE, parent), 'focus');
|
||||
}
|
||||
|
||||
Dropdown._clearMenus();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const items = makeArray(SelectorEngine.find(Selector$4.VISIBLE_ITEMS, parent));
|
||||
|
||||
if (!items.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
let index = items.indexOf(event.target);
|
||||
|
||||
if (event.which === ARROW_UP_KEYCODE && index > 0) {
|
||||
// Up
|
||||
index--;
|
||||
}
|
||||
|
||||
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
|
||||
// Down
|
||||
index++;
|
||||
}
|
||||
|
||||
if (index < 0) {
|
||||
index = 0;
|
||||
}
|
||||
|
||||
items[index].focus();
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$4);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$5.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler);
|
||||
EventHandler.on(document, Event$5.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler);
|
||||
EventHandler.on(document, Event$5.CLICK_DATA_API, Dropdown._clearMenus);
|
||||
EventHandler.on(document, Event$5.KEYUP_DATA_API, Dropdown._clearMenus);
|
||||
EventHandler.on(document, Event$5.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
Dropdown._dropdownInterface(this, 'toggle');
|
||||
});
|
||||
EventHandler.on(document, Event$5.CLICK_DATA_API, Selector$4.FORM_CHILD, e => e.stopPropagation());
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .dropdown to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$4];
|
||||
jQuery.fn[NAME$4] = Dropdown._jQueryInterface;
|
||||
jQuery.fn[NAME$4].Constructor = Dropdown;
|
||||
|
||||
jQuery.fn[NAME$4].noConflict = () => {
|
||||
jQuery.fn[NAME$4] = JQUERY_NO_CONFLICT;
|
||||
return Dropdown._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$5 = 'modal';
|
||||
const VERSION$5 = '4.3.1';
|
||||
const DATA_KEY$5 = 'bs.modal';
|
||||
const EVENT_KEY$5 = `.${DATA_KEY$5}`;
|
||||
const DATA_API_KEY$5 = '.data-api';
|
||||
const ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
|
||||
|
||||
const Default$3 = {
|
||||
backdrop: true,
|
||||
keyboard: true,
|
||||
focus: true,
|
||||
show: true
|
||||
};
|
||||
const DefaultType$3 = {
|
||||
backdrop: '(boolean|string)',
|
||||
keyboard: 'boolean',
|
||||
focus: 'boolean',
|
||||
show: 'boolean'
|
||||
};
|
||||
const Event$6 = {
|
||||
HIDE: `hide${EVENT_KEY$5}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$5}`,
|
||||
SHOW: `show${EVENT_KEY$5}`,
|
||||
SHOWN: `shown${EVENT_KEY$5}`,
|
||||
FOCUSIN: `focusin${EVENT_KEY$5}`,
|
||||
RESIZE: `resize${EVENT_KEY$5}`,
|
||||
CLICK_DISMISS: `click.dismiss${EVENT_KEY$5}`,
|
||||
KEYDOWN_DISMISS: `keydown.dismiss${EVENT_KEY$5}`,
|
||||
MOUSEUP_DISMISS: `mouseup.dismiss${EVENT_KEY$5}`,
|
||||
MOUSEDOWN_DISMISS: `mousedown.dismiss${EVENT_KEY$5}`,
|
||||
CLICK_DATA_API: `click${EVENT_KEY$5}${DATA_API_KEY$5}`
|
||||
};
|
||||
const ClassName$5 = {
|
||||
SCROLLABLE: 'modal-dialog-scrollable',
|
||||
SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
|
||||
BACKDROP: 'modal-backdrop',
|
||||
OPEN: 'modal-open',
|
||||
FADE: 'fade',
|
||||
SHOW: 'show'
|
||||
};
|
||||
const Selector$5 = {
|
||||
DIALOG: '.modal-dialog',
|
||||
MODAL_BODY: '.modal-body',
|
||||
DATA_TOGGLE: '[data-toggle="modal"]',
|
||||
DATA_DISMISS: '[data-dismiss="modal"]',
|
||||
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
|
||||
STICKY_CONTENT: '.sticky-top'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Modal {
|
||||
constructor(element, config) {
|
||||
this._config = this._getConfig(config);
|
||||
this._element = element;
|
||||
this._dialog = SelectorEngine.findOne(Selector$5.DIALOG, element);
|
||||
this._backdrop = null;
|
||||
this._isShown = false;
|
||||
this._isBodyOverflowing = false;
|
||||
this._ignoreBackdropClick = false;
|
||||
this._isTransitioning = false;
|
||||
this._scrollbarWidth = 0;
|
||||
Data.setData(element, DATA_KEY$5, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$5;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$3;
|
||||
} // Public
|
||||
|
||||
|
||||
toggle(relatedTarget) {
|
||||
return this._isShown ? this.hide() : this.show(relatedTarget);
|
||||
}
|
||||
|
||||
show(relatedTarget) {
|
||||
if (this._isShown || this._isTransitioning) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._element.classList.contains(ClassName$5.FADE)) {
|
||||
this._isTransitioning = true;
|
||||
}
|
||||
|
||||
const showEvent = EventHandler.trigger(this._element, Event$6.SHOW, {
|
||||
relatedTarget
|
||||
});
|
||||
|
||||
if (this._isShown || showEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._isShown = true;
|
||||
|
||||
this._checkScrollbar();
|
||||
|
||||
this._setScrollbar();
|
||||
|
||||
this._adjustDialog();
|
||||
|
||||
this._setEscapeEvent();
|
||||
|
||||
this._setResizeEvent();
|
||||
|
||||
EventHandler.on(this._element, Event$6.CLICK_DISMISS, Selector$5.DATA_DISMISS, event => this.hide(event));
|
||||
EventHandler.on(this._dialog, Event$6.MOUSEDOWN_DISMISS, () => {
|
||||
EventHandler.one(this._element, Event$6.MOUSEUP_DISMISS, event => {
|
||||
if (event.target === this._element) {
|
||||
this._ignoreBackdropClick = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
this._showBackdrop(() => this._showElement(relatedTarget));
|
||||
}
|
||||
|
||||
hide(event) {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
if (!this._isShown || this._isTransitioning) {
|
||||
return;
|
||||
}
|
||||
|
||||
const hideEvent = EventHandler.trigger(this._element, Event$6.HIDE);
|
||||
|
||||
if (!this._isShown || hideEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._isShown = false;
|
||||
|
||||
const transition = this._element.classList.contains(ClassName$5.FADE);
|
||||
|
||||
if (transition) {
|
||||
this._isTransitioning = true;
|
||||
}
|
||||
|
||||
this._setEscapeEvent();
|
||||
|
||||
this._setResizeEvent();
|
||||
|
||||
EventHandler.off(document, Event$6.FOCUSIN);
|
||||
|
||||
this._element.classList.remove(ClassName$5.SHOW);
|
||||
|
||||
EventHandler.off(this._element, Event$6.CLICK_DISMISS);
|
||||
EventHandler.off(this._dialog, Event$6.MOUSEDOWN_DISMISS);
|
||||
|
||||
if (transition) {
|
||||
const transitionDuration = getTransitionDurationFromElement(this._element);
|
||||
EventHandler.one(this._element, TRANSITION_END, event => this._hideModal(event));
|
||||
emulateTransitionEnd(this._element, transitionDuration);
|
||||
} else {
|
||||
this._hideModal();
|
||||
}
|
||||
}
|
||||
|
||||
dispose() {
|
||||
[window, this._element, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$5));
|
||||
/**
|
||||
* `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
|
||||
* Do not move `document` in `htmlElements` array
|
||||
* It will remove `Event.CLICK_DATA_API` event that should remain
|
||||
*/
|
||||
|
||||
EventHandler.off(document, Event$6.FOCUSIN);
|
||||
Data.removeData(this._element, DATA_KEY$5);
|
||||
this._config = null;
|
||||
this._element = null;
|
||||
this._dialog = null;
|
||||
this._backdrop = null;
|
||||
this._isShown = null;
|
||||
this._isBodyOverflowing = null;
|
||||
this._ignoreBackdropClick = null;
|
||||
this._isTransitioning = null;
|
||||
this._scrollbarWidth = null;
|
||||
}
|
||||
|
||||
handleUpdate() {
|
||||
this._adjustDialog();
|
||||
} // Private
|
||||
|
||||
|
||||
_getConfig(config) {
|
||||
config = _extends({}, Default$3, config);
|
||||
typeCheckConfig(NAME$5, config, DefaultType$3);
|
||||
return config;
|
||||
}
|
||||
|
||||
_showElement(relatedTarget) {
|
||||
const transition = this._element.classList.contains(ClassName$5.FADE);
|
||||
|
||||
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
||||
// Don't move modal's DOM position
|
||||
document.body.appendChild(this._element);
|
||||
}
|
||||
|
||||
this._element.style.display = 'block';
|
||||
|
||||
this._element.removeAttribute('aria-hidden');
|
||||
|
||||
this._element.setAttribute('aria-modal', true);
|
||||
|
||||
if (this._dialog.classList.contains(ClassName$5.SCROLLABLE)) {
|
||||
SelectorEngine.findOne(Selector$5.MODAL_BODY, this._dialog).scrollTop = 0;
|
||||
} else {
|
||||
this._element.scrollTop = 0;
|
||||
}
|
||||
|
||||
if (transition) {
|
||||
reflow(this._element);
|
||||
}
|
||||
|
||||
this._element.classList.add(ClassName$5.SHOW);
|
||||
|
||||
if (this._config.focus) {
|
||||
this._enforceFocus();
|
||||
}
|
||||
|
||||
const transitionComplete = () => {
|
||||
if (this._config.focus) {
|
||||
this._element.focus();
|
||||
}
|
||||
|
||||
this._isTransitioning = false;
|
||||
EventHandler.trigger(this._element, Event$6.SHOWN, {
|
||||
relatedTarget
|
||||
});
|
||||
};
|
||||
|
||||
if (transition) {
|
||||
const transitionDuration = getTransitionDurationFromElement(this._dialog);
|
||||
EventHandler.one(this._dialog, TRANSITION_END, transitionComplete);
|
||||
emulateTransitionEnd(this._dialog, transitionDuration);
|
||||
} else {
|
||||
transitionComplete();
|
||||
}
|
||||
}
|
||||
|
||||
_enforceFocus() {
|
||||
EventHandler.off(document, Event$6.FOCUSIN); // guard against infinite focus loop
|
||||
|
||||
EventHandler.on(document, Event$6.FOCUSIN, event => {
|
||||
if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {
|
||||
this._element.focus();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_setEscapeEvent() {
|
||||
if (this._isShown && this._config.keyboard) {
|
||||
EventHandler.on(this._element, Event$6.KEYDOWN_DISMISS, event => {
|
||||
if (event.which === ESCAPE_KEYCODE$1) {
|
||||
event.preventDefault();
|
||||
this.hide();
|
||||
}
|
||||
});
|
||||
} else if (!this._isShown) {
|
||||
EventHandler.off(this._element, Event$6.KEYDOWN_DISMISS);
|
||||
}
|
||||
}
|
||||
|
||||
_setResizeEvent() {
|
||||
if (this._isShown) {
|
||||
EventHandler.on(window, Event$6.RESIZE, event => this.handleUpdate(event));
|
||||
} else {
|
||||
EventHandler.off(window, Event$6.RESIZE);
|
||||
}
|
||||
}
|
||||
|
||||
_hideModal() {
|
||||
this._element.style.display = 'none';
|
||||
|
||||
this._element.setAttribute('aria-hidden', true);
|
||||
|
||||
this._element.removeAttribute('aria-modal');
|
||||
|
||||
this._isTransitioning = false;
|
||||
|
||||
this._showBackdrop(() => {
|
||||
document.body.classList.remove(ClassName$5.OPEN);
|
||||
|
||||
this._resetAdjustments();
|
||||
|
||||
this._resetScrollbar();
|
||||
|
||||
EventHandler.trigger(this._element, Event$6.HIDDEN);
|
||||
});
|
||||
}
|
||||
|
||||
_removeBackdrop() {
|
||||
if (this._backdrop) {
|
||||
this._backdrop.parentNode.removeChild(this._backdrop);
|
||||
|
||||
this._backdrop = null;
|
||||
}
|
||||
}
|
||||
|
||||
_showBackdrop(callback) {
|
||||
const animate = this._element.classList.contains(ClassName$5.FADE) ? ClassName$5.FADE : '';
|
||||
|
||||
if (this._isShown && this._config.backdrop) {
|
||||
this._backdrop = document.createElement('div');
|
||||
this._backdrop.className = ClassName$5.BACKDROP;
|
||||
|
||||
if (animate) {
|
||||
this._backdrop.classList.add(animate);
|
||||
}
|
||||
|
||||
document.body.appendChild(this._backdrop);
|
||||
EventHandler.on(this._element, Event$6.CLICK_DISMISS, event => {
|
||||
if (this._ignoreBackdropClick) {
|
||||
this._ignoreBackdropClick = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.target !== event.currentTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._config.backdrop === 'static') {
|
||||
this._element.focus();
|
||||
} else {
|
||||
this.hide();
|
||||
}
|
||||
});
|
||||
|
||||
if (animate) {
|
||||
reflow(this._backdrop);
|
||||
}
|
||||
|
||||
this._backdrop.classList.add(ClassName$5.SHOW);
|
||||
|
||||
if (!callback) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!animate) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
const backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
|
||||
EventHandler.one(this._backdrop, TRANSITION_END, callback);
|
||||
emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
|
||||
} else if (!this._isShown && this._backdrop) {
|
||||
this._backdrop.classList.remove(ClassName$5.SHOW);
|
||||
|
||||
const callbackRemove = () => {
|
||||
this._removeBackdrop();
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
if (this._element.classList.contains(ClassName$5.FADE)) {
|
||||
const backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
|
||||
EventHandler.one(this._backdrop, TRANSITION_END, callbackRemove);
|
||||
emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
|
||||
} else {
|
||||
callbackRemove();
|
||||
}
|
||||
} else if (callback) {
|
||||
callback();
|
||||
}
|
||||
} // ----------------------------------------------------------------------
|
||||
// the following methods are used to handle overflowing modals
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
|
||||
_adjustDialog() {
|
||||
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
||||
|
||||
if (!this._isBodyOverflowing && isModalOverflowing) {
|
||||
this._element.style.paddingLeft = `${this._scrollbarWidth}px`;
|
||||
}
|
||||
|
||||
if (this._isBodyOverflowing && !isModalOverflowing) {
|
||||
this._element.style.paddingRight = `${this._scrollbarWidth}px`;
|
||||
}
|
||||
}
|
||||
|
||||
_resetAdjustments() {
|
||||
this._element.style.paddingLeft = '';
|
||||
this._element.style.paddingRight = '';
|
||||
}
|
||||
|
||||
_checkScrollbar() {
|
||||
const rect = document.body.getBoundingClientRect();
|
||||
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
|
||||
this._scrollbarWidth = this._getScrollbarWidth();
|
||||
}
|
||||
|
||||
_setScrollbar() {
|
||||
if (this._isBodyOverflowing) {
|
||||
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
||||
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
|
||||
// Adjust fixed content padding
|
||||
makeArray(SelectorEngine.find(Selector$5.FIXED_CONTENT)).forEach(element => {
|
||||
const actualPadding = element.style.paddingRight;
|
||||
const calculatedPadding = window.getComputedStyle(element)['padding-right'];
|
||||
Manipulator.setDataAttribute(element, 'padding-right', actualPadding);
|
||||
element.style.paddingRight = `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`;
|
||||
}); // Adjust sticky content margin
|
||||
|
||||
makeArray(SelectorEngine.find(Selector$5.STICKY_CONTENT)).forEach(element => {
|
||||
const actualMargin = element.style.marginRight;
|
||||
const calculatedMargin = window.getComputedStyle(element)['margin-right'];
|
||||
Manipulator.setDataAttribute(element, 'margin-right', actualMargin);
|
||||
element.style.marginRight = `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`;
|
||||
}); // Adjust body padding
|
||||
|
||||
const actualPadding = document.body.style.paddingRight;
|
||||
const calculatedPadding = window.getComputedStyle(document.body)['padding-right'];
|
||||
Manipulator.setDataAttribute(document.body, 'padding-right', actualPadding);
|
||||
document.body.style.paddingRight = `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`;
|
||||
}
|
||||
|
||||
document.body.classList.add(ClassName$5.OPEN);
|
||||
}
|
||||
|
||||
_resetScrollbar() {
|
||||
// Restore fixed content padding
|
||||
makeArray(SelectorEngine.find(Selector$5.FIXED_CONTENT)).forEach(element => {
|
||||
const padding = Manipulator.getDataAttribute(element, 'padding-right');
|
||||
|
||||
if (typeof padding !== 'undefined') {
|
||||
Manipulator.removeDataAttribute(element, 'padding-right');
|
||||
element.style.paddingRight = padding;
|
||||
}
|
||||
}); // Restore sticky content and navbar-toggler margin
|
||||
|
||||
makeArray(SelectorEngine.find(`${Selector$5.STICKY_CONTENT}`)).forEach(element => {
|
||||
const margin = Manipulator.getDataAttribute(element, 'margin-right');
|
||||
|
||||
if (typeof margin !== 'undefined') {
|
||||
Manipulator.removeDataAttribute(element, 'margin-right');
|
||||
element.style.marginRight = margin;
|
||||
}
|
||||
}); // Restore body padding
|
||||
|
||||
const padding = Manipulator.getDataAttribute(document.body, 'padding-right');
|
||||
|
||||
if (typeof padding === 'undefined') {
|
||||
document.body.style.paddingRight = '';
|
||||
} else {
|
||||
Manipulator.removeDataAttribute(document.body, 'padding-right');
|
||||
document.body.style.paddingRight = padding;
|
||||
}
|
||||
}
|
||||
|
||||
_getScrollbarWidth() {
|
||||
// thx d.walsh
|
||||
const scrollDiv = document.createElement('div');
|
||||
scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;
|
||||
document.body.appendChild(scrollDiv);
|
||||
const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
||||
document.body.removeChild(scrollDiv);
|
||||
return scrollbarWidth;
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config, relatedTarget) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY$5);
|
||||
|
||||
const _config = _extends({}, Default$3, Manipulator.getDataAttributes(this), typeof config === 'object' && config ? config : {});
|
||||
|
||||
if (!data) {
|
||||
data = new Modal(this, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config](relatedTarget);
|
||||
} else if (_config.show) {
|
||||
data.show(relatedTarget);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$5);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$6.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {
|
||||
let target;
|
||||
const selector = getSelectorFromElement(this);
|
||||
|
||||
if (selector) {
|
||||
target = SelectorEngine.findOne(selector);
|
||||
}
|
||||
|
||||
const config = Data.getData(target, DATA_KEY$5) ? 'toggle' : _extends({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
|
||||
|
||||
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
EventHandler.one(target, Event$6.SHOW, showEvent => {
|
||||
if (showEvent.defaultPrevented) {
|
||||
// only register focus restorer if modal will actually get shown
|
||||
return;
|
||||
}
|
||||
|
||||
EventHandler.one(target, Event$6.HIDDEN, () => {
|
||||
if (isVisible(this)) {
|
||||
this.focus();
|
||||
}
|
||||
});
|
||||
});
|
||||
let data = Data.getData(target, DATA_KEY$5);
|
||||
|
||||
if (!data) {
|
||||
data = new Modal(target, config);
|
||||
}
|
||||
|
||||
data.show(this);
|
||||
});
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$5];
|
||||
jQuery.fn[NAME$5] = Modal._jQueryInterface;
|
||||
jQuery.fn[NAME$5].Constructor = Modal;
|
||||
|
||||
jQuery.fn[NAME$5].noConflict = () => {
|
||||
jQuery.fn[NAME$5] = JQUERY_NO_CONFLICT;
|
||||
return Modal._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): util/sanitizer.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
const uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
|
||||
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
|
||||
/**
|
||||
* A pattern that recognizes a commonly useful subset of URLs that are safe.
|
||||
*
|
||||
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
||||
*/
|
||||
|
||||
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
|
||||
/**
|
||||
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
||||
*
|
||||
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
||||
*/
|
||||
|
||||
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
|
||||
|
||||
const allowedAttribute = (attr, allowedAttributeList) => {
|
||||
const attrName = attr.nodeName.toLowerCase();
|
||||
|
||||
if (allowedAttributeList.indexOf(attrName) !== -1) {
|
||||
if (uriAttrs.indexOf(attrName) !== -1) {
|
||||
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.
|
||||
|
||||
for (let i = 0, l = regExp.length; i < l; i++) {
|
||||
if (attrName.match(regExp[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
const DefaultWhitelist = {
|
||||
// Global attributes allowed on any supplied element below.
|
||||
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
|
||||
a: ['target', 'href', 'title', 'rel'],
|
||||
area: [],
|
||||
b: [],
|
||||
br: [],
|
||||
col: [],
|
||||
code: [],
|
||||
div: [],
|
||||
em: [],
|
||||
hr: [],
|
||||
h1: [],
|
||||
h2: [],
|
||||
h3: [],
|
||||
h4: [],
|
||||
h5: [],
|
||||
h6: [],
|
||||
i: [],
|
||||
img: ['src', 'alt', 'title', 'width', 'height'],
|
||||
li: [],
|
||||
ol: [],
|
||||
p: [],
|
||||
pre: [],
|
||||
s: [],
|
||||
small: [],
|
||||
span: [],
|
||||
sub: [],
|
||||
sup: [],
|
||||
strong: [],
|
||||
u: [],
|
||||
ul: []
|
||||
};
|
||||
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
|
||||
if (!unsafeHtml.length) {
|
||||
return unsafeHtml;
|
||||
}
|
||||
|
||||
if (sanitizeFn && typeof sanitizeFn === 'function') {
|
||||
return sanitizeFn(unsafeHtml);
|
||||
}
|
||||
|
||||
const domParser = new window.DOMParser();
|
||||
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
|
||||
const whitelistKeys = Object.keys(whiteList);
|
||||
const elements = makeArray(createdDocument.body.querySelectorAll('*'));
|
||||
|
||||
for (let i = 0, len = elements.length; i < len; i++) {
|
||||
const el = elements[i];
|
||||
const elName = el.nodeName.toLowerCase();
|
||||
|
||||
if (whitelistKeys.indexOf(elName) === -1) {
|
||||
el.parentNode.removeChild(el);
|
||||
continue;
|
||||
}
|
||||
|
||||
const attributeList = makeArray(el.attributes);
|
||||
const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
|
||||
attributeList.forEach(attr => {
|
||||
if (!allowedAttribute(attr, whitelistedAttributes)) {
|
||||
el.removeAttribute(attr.nodeName);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return createdDocument.body.innerHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$6 = 'tooltip';
|
||||
const VERSION$6 = '4.3.1';
|
||||
const DATA_KEY$6 = 'bs.tooltip';
|
||||
const EVENT_KEY$6 = `.${DATA_KEY$6}`;
|
||||
const CLASS_PREFIX = 'bs-tooltip';
|
||||
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
|
||||
const DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
|
||||
const DefaultType$4 = {
|
||||
animation: 'boolean',
|
||||
template: 'string',
|
||||
title: '(string|element|function)',
|
||||
trigger: 'string',
|
||||
delay: '(number|object)',
|
||||
html: 'boolean',
|
||||
selector: '(string|boolean)',
|
||||
placement: '(string|function)',
|
||||
offset: '(number|string|function)',
|
||||
container: '(string|element|boolean)',
|
||||
fallbackPlacement: '(string|array)',
|
||||
boundary: '(string|element)',
|
||||
sanitize: 'boolean',
|
||||
sanitizeFn: '(null|function)',
|
||||
whiteList: 'object'
|
||||
};
|
||||
const AttachmentMap$1 = {
|
||||
AUTO: 'auto',
|
||||
TOP: 'top',
|
||||
RIGHT: 'right',
|
||||
BOTTOM: 'bottom',
|
||||
LEFT: 'left'
|
||||
};
|
||||
const Default$4 = {
|
||||
animation: true,
|
||||
template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div></div>',
|
||||
trigger: 'hover focus',
|
||||
title: '',
|
||||
delay: 0,
|
||||
html: false,
|
||||
selector: false,
|
||||
placement: 'top',
|
||||
offset: 0,
|
||||
container: false,
|
||||
fallbackPlacement: 'flip',
|
||||
boundary: 'scrollParent',
|
||||
sanitize: true,
|
||||
sanitizeFn: null,
|
||||
whiteList: DefaultWhitelist
|
||||
};
|
||||
const HoverState = {
|
||||
SHOW: 'show',
|
||||
OUT: 'out'
|
||||
};
|
||||
const Event$7 = {
|
||||
HIDE: `hide${EVENT_KEY$6}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$6}`,
|
||||
SHOW: `show${EVENT_KEY$6}`,
|
||||
SHOWN: `shown${EVENT_KEY$6}`,
|
||||
INSERTED: `inserted${EVENT_KEY$6}`,
|
||||
CLICK: `click${EVENT_KEY$6}`,
|
||||
FOCUSIN: `focusin${EVENT_KEY$6}`,
|
||||
FOCUSOUT: `focusout${EVENT_KEY$6}`,
|
||||
MOUSEENTER: `mouseenter${EVENT_KEY$6}`,
|
||||
MOUSELEAVE: `mouseleave${EVENT_KEY$6}`
|
||||
};
|
||||
const ClassName$6 = {
|
||||
FADE: 'fade',
|
||||
SHOW: 'show'
|
||||
};
|
||||
const Selector$6 = {
|
||||
TOOLTIP_INNER: '.tooltip-inner',
|
||||
TOOLTIP_ARROW: '.tooltip-arrow'
|
||||
};
|
||||
const Trigger = {
|
||||
HOVER: 'hover',
|
||||
FOCUS: 'focus',
|
||||
CLICK: 'click',
|
||||
MANUAL: 'manual'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Tooltip {
|
||||
constructor(element, config) {
|
||||
/**
|
||||
* Check for Popper dependency
|
||||
* Popper - https://popper.js.org
|
||||
*/
|
||||
if (typeof Popper === 'undefined') {
|
||||
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org)');
|
||||
} // private
|
||||
|
||||
|
||||
this._isEnabled = true;
|
||||
this._timeout = 0;
|
||||
this._hoverState = '';
|
||||
this._activeTrigger = {};
|
||||
this._popper = null; // Protected
|
||||
|
||||
this.element = element;
|
||||
this.config = this._getConfig(config);
|
||||
this.tip = null;
|
||||
|
||||
this._setListeners();
|
||||
|
||||
Data.setData(element, this.constructor.DATA_KEY, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$6;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$4;
|
||||
}
|
||||
|
||||
static get NAME() {
|
||||
return NAME$6;
|
||||
}
|
||||
|
||||
static get DATA_KEY() {
|
||||
return DATA_KEY$6;
|
||||
}
|
||||
|
||||
static get Event() {
|
||||
return Event$7;
|
||||
}
|
||||
|
||||
static get EVENT_KEY() {
|
||||
return EVENT_KEY$6;
|
||||
}
|
||||
|
||||
static get DefaultType() {
|
||||
return DefaultType$4;
|
||||
} // Public
|
||||
|
||||
|
||||
enable() {
|
||||
this._isEnabled = true;
|
||||
}
|
||||
|
||||
disable() {
|
||||
this._isEnabled = false;
|
||||
}
|
||||
|
||||
toggleEnabled() {
|
||||
this._isEnabled = !this._isEnabled;
|
||||
}
|
||||
|
||||
toggle(event) {
|
||||
if (!this._isEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event) {
|
||||
const dataKey = this.constructor.DATA_KEY;
|
||||
let context = Data.getData(event.delegateTarget, dataKey);
|
||||
|
||||
if (!context) {
|
||||
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
||||
Data.setData(event.delegateTarget, dataKey, context);
|
||||
}
|
||||
|
||||
context._activeTrigger.click = !context._activeTrigger.click;
|
||||
|
||||
if (context._isWithActiveTrigger()) {
|
||||
context._enter(null, context);
|
||||
} else {
|
||||
context._leave(null, context);
|
||||
}
|
||||
} else {
|
||||
if (this.getTipElement().classList.contains(ClassName$6.SHOW)) {
|
||||
this._leave(null, this);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
this._enter(null, this);
|
||||
}
|
||||
}
|
||||
|
||||
dispose() {
|
||||
clearTimeout(this._timeout);
|
||||
Data.removeData(this.element, this.constructor.DATA_KEY);
|
||||
EventHandler.off(this.element, this.constructor.EVENT_KEY);
|
||||
EventHandler.off(SelectorEngine.closest(this.element, '.modal'), 'hide.bs.modal');
|
||||
|
||||
if (this.tip) {
|
||||
this.tip.parentNode.removeChild(this.tip);
|
||||
}
|
||||
|
||||
this._isEnabled = null;
|
||||
this._timeout = null;
|
||||
this._hoverState = null;
|
||||
this._activeTrigger = null;
|
||||
|
||||
if (this._popper !== null) {
|
||||
this._popper.destroy();
|
||||
}
|
||||
|
||||
this._popper = null;
|
||||
this.element = null;
|
||||
this.config = null;
|
||||
this.tip = null;
|
||||
}
|
||||
|
||||
show() {
|
||||
if (this.element.style.display === 'none') {
|
||||
throw new Error('Please use show on visible elements');
|
||||
}
|
||||
|
||||
if (this.isWithContent() && this._isEnabled) {
|
||||
const showEvent = EventHandler.trigger(this.element, this.constructor.Event.SHOW);
|
||||
const shadowRoot = findShadowRoot(this.element);
|
||||
const isInTheDom = shadowRoot === null ? this.element.ownerDocument.documentElement.contains(this.element) : shadowRoot.contains(this.element);
|
||||
|
||||
if (showEvent.defaultPrevented || !isInTheDom) {
|
||||
return;
|
||||
}
|
||||
|
||||
const tip = this.getTipElement();
|
||||
const tipId = getUID(this.constructor.NAME);
|
||||
tip.setAttribute('id', tipId);
|
||||
this.element.setAttribute('aria-describedby', tipId);
|
||||
this.setContent();
|
||||
|
||||
if (this.config.animation) {
|
||||
tip.classList.add(ClassName$6.FADE);
|
||||
}
|
||||
|
||||
const placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
|
||||
|
||||
const attachment = this._getAttachment(placement);
|
||||
|
||||
this.addAttachmentClass(attachment);
|
||||
|
||||
const container = this._getContainer();
|
||||
|
||||
Data.setData(tip, this.constructor.DATA_KEY, this);
|
||||
|
||||
if (!this.element.ownerDocument.documentElement.contains(this.tip)) {
|
||||
container.appendChild(tip);
|
||||
}
|
||||
|
||||
EventHandler.trigger(this.element, this.constructor.Event.INSERTED);
|
||||
this._popper = new Popper(this.element, tip, {
|
||||
placement: attachment,
|
||||
modifiers: {
|
||||
offset: this._getOffset(),
|
||||
flip: {
|
||||
behavior: this.config.fallbackPlacement
|
||||
},
|
||||
arrow: {
|
||||
element: Selector$6.TOOLTIP_ARROW
|
||||
},
|
||||
preventOverflow: {
|
||||
boundariesElement: this.config.boundary
|
||||
}
|
||||
},
|
||||
onCreate: data => {
|
||||
if (data.originalPlacement !== data.placement) {
|
||||
this._handlePopperPlacementChange(data);
|
||||
}
|
||||
},
|
||||
onUpdate: data => this._handlePopperPlacementChange(data)
|
||||
});
|
||||
tip.classList.add(ClassName$6.SHOW); // If this is a touch-enabled device we add extra
|
||||
// empty mouseover listeners to the body's immediate children;
|
||||
// only needed because of broken event delegation on iOS
|
||||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
||||
|
||||
if ('ontouchstart' in document.documentElement) {
|
||||
makeArray(document.body.children).forEach(element => {
|
||||
EventHandler.on(element, 'mouseover', noop());
|
||||
});
|
||||
}
|
||||
|
||||
const complete = () => {
|
||||
if (this.config.animation) {
|
||||
this._fixTransition();
|
||||
}
|
||||
|
||||
const prevHoverState = this._hoverState;
|
||||
this._hoverState = null;
|
||||
EventHandler.trigger(this.element, this.constructor.Event.SHOWN);
|
||||
|
||||
if (prevHoverState === HoverState.OUT) {
|
||||
this._leave(null, this);
|
||||
}
|
||||
};
|
||||
|
||||
if (this.tip.classList.contains(ClassName$6.FADE)) {
|
||||
const transitionDuration = getTransitionDurationFromElement(this.tip);
|
||||
EventHandler.one(this.tip, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(this.tip, transitionDuration);
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hide(callback) {
|
||||
const tip = this.getTipElement();
|
||||
|
||||
const complete = () => {
|
||||
if (this._hoverState !== HoverState.SHOW && tip.parentNode) {
|
||||
tip.parentNode.removeChild(tip);
|
||||
}
|
||||
|
||||
this._cleanTipClass();
|
||||
|
||||
this.element.removeAttribute('aria-describedby');
|
||||
EventHandler.trigger(this.element, this.constructor.Event.HIDDEN);
|
||||
|
||||
if (this._popper !== null) {
|
||||
this._popper.destroy();
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
const hideEvent = EventHandler.trigger(this.element, this.constructor.Event.HIDE);
|
||||
|
||||
if (hideEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
tip.classList.remove(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra
|
||||
// empty mouseover listeners we added for iOS support
|
||||
|
||||
if ('ontouchstart' in document.documentElement) {
|
||||
makeArray(document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));
|
||||
}
|
||||
|
||||
this._activeTrigger[Trigger.CLICK] = false;
|
||||
this._activeTrigger[Trigger.FOCUS] = false;
|
||||
this._activeTrigger[Trigger.HOVER] = false;
|
||||
|
||||
if (this.tip.classList.contains(ClassName$6.FADE)) {
|
||||
const transitionDuration = getTransitionDurationFromElement(tip);
|
||||
EventHandler.one(tip, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(tip, transitionDuration);
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
|
||||
this._hoverState = '';
|
||||
}
|
||||
|
||||
update() {
|
||||
if (this._popper !== null) {
|
||||
this._popper.scheduleUpdate();
|
||||
}
|
||||
} // Protected
|
||||
|
||||
|
||||
isWithContent() {
|
||||
return Boolean(this.getTitle());
|
||||
}
|
||||
|
||||
addAttachmentClass(attachment) {
|
||||
this.getTipElement().classList.add(`${CLASS_PREFIX}-${attachment}`);
|
||||
}
|
||||
|
||||
getTipElement() {
|
||||
if (this.tip) {
|
||||
return this.tip;
|
||||
}
|
||||
|
||||
const element = document.createElement('div');
|
||||
element.innerHTML = this.config.template;
|
||||
this.tip = element.children[0];
|
||||
return this.tip;
|
||||
}
|
||||
|
||||
setContent() {
|
||||
const tip = this.getTipElement();
|
||||
this.setElementContent(SelectorEngine.findOne(Selector$6.TOOLTIP_INNER, tip), this.getTitle());
|
||||
tip.classList.remove(ClassName$6.FADE);
|
||||
tip.classList.remove(ClassName$6.SHOW);
|
||||
}
|
||||
|
||||
setElementContent(element, content) {
|
||||
if (element === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
|
||||
if (content.jquery) {
|
||||
content = content[0];
|
||||
} // content is a DOM node or a jQuery
|
||||
|
||||
|
||||
if (this.config.html) {
|
||||
if (content.parentNode !== element) {
|
||||
element.innerHTML = '';
|
||||
element.appendChild(content);
|
||||
}
|
||||
} else {
|
||||
element.innerText = content.textContent;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.config.html) {
|
||||
if (this.config.sanitize) {
|
||||
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
|
||||
}
|
||||
|
||||
element.innerHTML = content;
|
||||
} else {
|
||||
element.innerText = content;
|
||||
}
|
||||
}
|
||||
|
||||
getTitle() {
|
||||
let title = this.element.getAttribute('data-original-title');
|
||||
|
||||
if (!title) {
|
||||
title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
|
||||
}
|
||||
|
||||
return title;
|
||||
} // Private
|
||||
|
||||
|
||||
_getOffset() {
|
||||
const offset = {};
|
||||
|
||||
if (typeof this.config.offset === 'function') {
|
||||
offset.fn = data => {
|
||||
data.offsets = _extends({}, data.offsets, this.config.offset(data.offsets, this.element) || {});
|
||||
return data;
|
||||
};
|
||||
} else {
|
||||
offset.offset = this.config.offset;
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
_getContainer() {
|
||||
if (this.config.container === false) {
|
||||
return document.body;
|
||||
}
|
||||
|
||||
if (isElement(this.config.container)) {
|
||||
return this.config.container;
|
||||
}
|
||||
|
||||
return SelectorEngine.findOne(this.config.container);
|
||||
}
|
||||
|
||||
_getAttachment(placement) {
|
||||
return AttachmentMap$1[placement.toUpperCase()];
|
||||
}
|
||||
|
||||
_setListeners() {
|
||||
const triggers = this.config.trigger.split(' ');
|
||||
triggers.forEach(trigger => {
|
||||
if (trigger === 'click') {
|
||||
EventHandler.on(this.element, this.constructor.Event.CLICK, this.config.selector, event => this.toggle(event));
|
||||
} else if (trigger !== Trigger.MANUAL) {
|
||||
const eventIn = trigger === Trigger.HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
|
||||
const eventOut = trigger === Trigger.HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
|
||||
EventHandler.on(this.element, eventIn, this.config.selector, event => this._enter(event));
|
||||
EventHandler.on(this.element, eventOut, this.config.selector, event => this._leave(event));
|
||||
}
|
||||
});
|
||||
EventHandler.on(SelectorEngine.closest(this.element, '.modal'), 'hide.bs.modal', () => {
|
||||
if (this.element) {
|
||||
this.hide();
|
||||
}
|
||||
});
|
||||
|
||||
if (this.config.selector) {
|
||||
this.config = _extends({}, this.config, {
|
||||
trigger: 'manual',
|
||||
selector: ''
|
||||
});
|
||||
} else {
|
||||
this._fixTitle();
|
||||
}
|
||||
}
|
||||
|
||||
_fixTitle() {
|
||||
const titleType = typeof this.element.getAttribute('data-original-title');
|
||||
|
||||
if (this.element.getAttribute('title') || titleType !== 'string') {
|
||||
this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
|
||||
this.element.setAttribute('title', '');
|
||||
}
|
||||
}
|
||||
|
||||
_enter(event, context) {
|
||||
const dataKey = this.constructor.DATA_KEY;
|
||||
context = context || Data.getData(event.delegateTarget, dataKey);
|
||||
|
||||
if (!context) {
|
||||
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
||||
Data.setData(event.delegateTarget, dataKey, context);
|
||||
}
|
||||
|
||||
if (event) {
|
||||
context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
|
||||
}
|
||||
|
||||
if (context.getTipElement().classList.contains(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {
|
||||
context._hoverState = HoverState.SHOW;
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(context._timeout);
|
||||
context._hoverState = HoverState.SHOW;
|
||||
|
||||
if (!context.config.delay || !context.config.delay.show) {
|
||||
context.show();
|
||||
return;
|
||||
}
|
||||
|
||||
context._timeout = setTimeout(() => {
|
||||
if (context._hoverState === HoverState.SHOW) {
|
||||
context.show();
|
||||
}
|
||||
}, context.config.delay.show);
|
||||
}
|
||||
|
||||
_leave(event, context) {
|
||||
const dataKey = this.constructor.DATA_KEY;
|
||||
context = context || Data.getData(event.delegateTarget, dataKey);
|
||||
|
||||
if (!context) {
|
||||
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
||||
Data.setData(event.delegateTarget, dataKey, context);
|
||||
}
|
||||
|
||||
if (event) {
|
||||
context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
|
||||
}
|
||||
|
||||
if (context._isWithActiveTrigger()) {
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(context._timeout);
|
||||
context._hoverState = HoverState.OUT;
|
||||
|
||||
if (!context.config.delay || !context.config.delay.hide) {
|
||||
context.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
context._timeout = setTimeout(() => {
|
||||
if (context._hoverState === HoverState.OUT) {
|
||||
context.hide();
|
||||
}
|
||||
}, context.config.delay.hide);
|
||||
}
|
||||
|
||||
_isWithActiveTrigger() {
|
||||
for (const trigger in this._activeTrigger) {
|
||||
if (this._activeTrigger[trigger]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
_getConfig(config) {
|
||||
const dataAttributes = Manipulator.getDataAttributes(this.element);
|
||||
Object.keys(dataAttributes).forEach(dataAttr => {
|
||||
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
|
||||
delete dataAttributes[dataAttr];
|
||||
}
|
||||
});
|
||||
|
||||
if (config && typeof config.container === 'object' && config.container.jquery) {
|
||||
config.container = config.container[0];
|
||||
}
|
||||
|
||||
config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
|
||||
|
||||
if (typeof config.delay === 'number') {
|
||||
config.delay = {
|
||||
show: config.delay,
|
||||
hide: config.delay
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof config.title === 'number') {
|
||||
config.title = config.title.toString();
|
||||
}
|
||||
|
||||
if (typeof config.content === 'number') {
|
||||
config.content = config.content.toString();
|
||||
}
|
||||
|
||||
typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
|
||||
|
||||
if (config.sanitize) {
|
||||
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
_getDelegateConfig() {
|
||||
const config = {};
|
||||
|
||||
if (this.config) {
|
||||
for (const key in this.config) {
|
||||
if (this.constructor.Default[key] !== this.config[key]) {
|
||||
config[key] = this.config[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
_cleanTipClass() {
|
||||
const tip = this.getTipElement();
|
||||
const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
|
||||
|
||||
if (tabClass !== null && tabClass.length) {
|
||||
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
||||
}
|
||||
}
|
||||
|
||||
_handlePopperPlacementChange(popperData) {
|
||||
const popperInstance = popperData.instance;
|
||||
this.tip = popperInstance.popper;
|
||||
|
||||
this._cleanTipClass();
|
||||
|
||||
this.addAttachmentClass(this._getAttachment(popperData.placement));
|
||||
}
|
||||
|
||||
_fixTransition() {
|
||||
const tip = this.getTipElement();
|
||||
const initConfigAnimation = this.config.animation;
|
||||
|
||||
if (tip.getAttribute('x-placement') !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
tip.classList.remove(ClassName$6.FADE);
|
||||
this.config.animation = false;
|
||||
this.hide();
|
||||
this.show();
|
||||
this.config.animation = initConfigAnimation;
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY$6);
|
||||
|
||||
const _config = typeof config === 'object' && config;
|
||||
|
||||
if (!data && /dispose|hide/.test(config)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
data = new Tooltip(this, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config]();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$6);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .tooltip to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$6];
|
||||
jQuery.fn[NAME$6] = Tooltip._jQueryInterface;
|
||||
jQuery.fn[NAME$6].Constructor = Tooltip;
|
||||
|
||||
jQuery.fn[NAME$6].noConflict = () => {
|
||||
jQuery.fn[NAME$6] = JQUERY_NO_CONFLICT;
|
||||
return Tooltip._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$7 = 'popover';
|
||||
const VERSION$7 = '4.3.1';
|
||||
const DATA_KEY$7 = 'bs.popover';
|
||||
const EVENT_KEY$7 = `.${DATA_KEY$7}`;
|
||||
const CLASS_PREFIX$1 = 'bs-popover';
|
||||
const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\s)${CLASS_PREFIX$1}\\S+`, 'g');
|
||||
|
||||
const Default$5 = _extends({}, Tooltip.Default, {
|
||||
placement: 'right',
|
||||
trigger: 'click',
|
||||
content: '',
|
||||
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
|
||||
});
|
||||
|
||||
const DefaultType$5 = _extends({}, Tooltip.DefaultType, {
|
||||
content: '(string|element|function)'
|
||||
});
|
||||
|
||||
const ClassName$7 = {
|
||||
FADE: 'fade',
|
||||
SHOW: 'show'
|
||||
};
|
||||
const Selector$7 = {
|
||||
TITLE: '.popover-header',
|
||||
CONTENT: '.popover-body'
|
||||
};
|
||||
const Event$8 = {
|
||||
HIDE: `hide${EVENT_KEY$7}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$7}`,
|
||||
SHOW: `show${EVENT_KEY$7}`,
|
||||
SHOWN: `shown${EVENT_KEY$7}`,
|
||||
INSERTED: `inserted${EVENT_KEY$7}`,
|
||||
CLICK: `click${EVENT_KEY$7}`,
|
||||
FOCUSIN: `focusin${EVENT_KEY$7}`,
|
||||
FOCUSOUT: `focusout${EVENT_KEY$7}`,
|
||||
MOUSEENTER: `mouseenter${EVENT_KEY$7}`,
|
||||
MOUSELEAVE: `mouseleave${EVENT_KEY$7}`
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Popover extends Tooltip {
|
||||
// Getters
|
||||
static get VERSION() {
|
||||
return VERSION$7;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$5;
|
||||
}
|
||||
|
||||
static get NAME() {
|
||||
return NAME$7;
|
||||
}
|
||||
|
||||
static get DATA_KEY() {
|
||||
return DATA_KEY$7;
|
||||
}
|
||||
|
||||
static get Event() {
|
||||
return Event$8;
|
||||
}
|
||||
|
||||
static get EVENT_KEY() {
|
||||
return EVENT_KEY$7;
|
||||
}
|
||||
|
||||
static get DefaultType() {
|
||||
return DefaultType$5;
|
||||
} // Overrides
|
||||
|
||||
|
||||
isWithContent() {
|
||||
return this.getTitle() || this._getContent();
|
||||
}
|
||||
|
||||
addAttachmentClass(attachment) {
|
||||
this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${attachment}`);
|
||||
}
|
||||
|
||||
setContent() {
|
||||
const tip = this.getTipElement(); // we use append for html objects to maintain js events
|
||||
|
||||
this.setElementContent(SelectorEngine.findOne(Selector$7.TITLE, tip), this.getTitle());
|
||||
|
||||
let content = this._getContent();
|
||||
|
||||
if (typeof content === 'function') {
|
||||
content = content.call(this.element);
|
||||
}
|
||||
|
||||
this.setElementContent(SelectorEngine.findOne(Selector$7.CONTENT, tip), content);
|
||||
tip.classList.remove(ClassName$7.FADE);
|
||||
tip.classList.remove(ClassName$7.SHOW);
|
||||
} // Private
|
||||
|
||||
|
||||
_getContent() {
|
||||
return this.element.getAttribute('data-content') || this.config.content;
|
||||
}
|
||||
|
||||
_cleanTipClass() {
|
||||
const tip = this.getTipElement();
|
||||
const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);
|
||||
|
||||
if (tabClass !== null && tabClass.length > 0) {
|
||||
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
||||
}
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY$7);
|
||||
|
||||
const _config = typeof config === 'object' ? config : null;
|
||||
|
||||
if (!data && /dispose|hide/.test(config)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
data = new Popover(this, _config);
|
||||
Data.setData(this, DATA_KEY$7, data);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config]();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$7);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$7];
|
||||
jQuery.fn[NAME$7] = Popover._jQueryInterface;
|
||||
jQuery.fn[NAME$7].Constructor = Popover;
|
||||
|
||||
jQuery.fn[NAME$7].noConflict = () => {
|
||||
jQuery.fn[NAME$7] = JQUERY_NO_CONFLICT;
|
||||
return Popover._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$8 = 'scrollspy';
|
||||
const VERSION$8 = '4.3.1';
|
||||
const DATA_KEY$8 = 'bs.scrollspy';
|
||||
const EVENT_KEY$8 = `.${DATA_KEY$8}`;
|
||||
const DATA_API_KEY$6 = '.data-api';
|
||||
const Default$6 = {
|
||||
offset: 10,
|
||||
method: 'auto',
|
||||
target: ''
|
||||
};
|
||||
const DefaultType$6 = {
|
||||
offset: 'number',
|
||||
method: 'string',
|
||||
target: '(string|element)'
|
||||
};
|
||||
const Event$9 = {
|
||||
ACTIVATE: `activate${EVENT_KEY$8}`,
|
||||
SCROLL: `scroll${EVENT_KEY$8}`,
|
||||
LOAD_DATA_API: `load${EVENT_KEY$8}${DATA_API_KEY$6}`
|
||||
};
|
||||
const ClassName$8 = {
|
||||
DROPDOWN_ITEM: 'dropdown-item',
|
||||
ACTIVE: 'active'
|
||||
};
|
||||
const Selector$8 = {
|
||||
DATA_SPY: '[data-spy="scroll"]',
|
||||
NAV_LIST_GROUP: '.nav, .list-group',
|
||||
NAV_LINKS: '.nav-link',
|
||||
NAV_ITEMS: '.nav-item',
|
||||
LIST_ITEMS: '.list-group-item',
|
||||
DROPDOWN: '.dropdown',
|
||||
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
||||
};
|
||||
const OffsetMethod = {
|
||||
OFFSET: 'offset',
|
||||
POSITION: 'position'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class ScrollSpy {
|
||||
constructor(element, config) {
|
||||
this._element = element;
|
||||
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
||||
this._config = this._getConfig(config);
|
||||
this._selector = `${this._config.target} ${Selector$8.NAV_LINKS},` + `${this._config.target} ${Selector$8.LIST_ITEMS},` + `${this._config.target} .${ClassName$8.DROPDOWN_ITEM}`;
|
||||
this._offsets = [];
|
||||
this._targets = [];
|
||||
this._activeTarget = null;
|
||||
this._scrollHeight = 0;
|
||||
EventHandler.on(this._scrollElement, Event$9.SCROLL, event => this._process(event));
|
||||
this.refresh();
|
||||
|
||||
this._process();
|
||||
|
||||
Data.setData(element, DATA_KEY$8, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$8;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$6;
|
||||
} // Public
|
||||
|
||||
|
||||
refresh() {
|
||||
const autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
|
||||
const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
||||
const offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
|
||||
this._offsets = [];
|
||||
this._targets = [];
|
||||
this._scrollHeight = this._getScrollHeight();
|
||||
const targets = makeArray(SelectorEngine.find(this._selector));
|
||||
targets.map(element => {
|
||||
let target;
|
||||
const targetSelector = getSelectorFromElement(element);
|
||||
|
||||
if (targetSelector) {
|
||||
target = SelectorEngine.findOne(targetSelector);
|
||||
}
|
||||
|
||||
if (target) {
|
||||
const targetBCR = target.getBoundingClientRect();
|
||||
|
||||
if (targetBCR.width || targetBCR.height) {
|
||||
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
|
||||
this._offsets.push(item[0]);
|
||||
|
||||
this._targets.push(item[1]);
|
||||
});
|
||||
}
|
||||
|
||||
dispose() {
|
||||
Data.removeData(this._element, DATA_KEY$8);
|
||||
EventHandler.off(this._scrollElement, EVENT_KEY$8);
|
||||
this._element = null;
|
||||
this._scrollElement = null;
|
||||
this._config = null;
|
||||
this._selector = null;
|
||||
this._offsets = null;
|
||||
this._targets = null;
|
||||
this._activeTarget = null;
|
||||
this._scrollHeight = null;
|
||||
} // Private
|
||||
|
||||
|
||||
_getConfig(config) {
|
||||
config = _extends({}, Default$6, typeof config === 'object' && config ? config : {});
|
||||
|
||||
if (typeof config.target !== 'string') {
|
||||
let id = config.target.id;
|
||||
|
||||
if (!id) {
|
||||
id = getUID(NAME$8);
|
||||
config.target.id = id;
|
||||
}
|
||||
|
||||
config.target = `#${id}`;
|
||||
}
|
||||
|
||||
typeCheckConfig(NAME$8, config, DefaultType$6);
|
||||
return config;
|
||||
}
|
||||
|
||||
_getScrollTop() {
|
||||
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
|
||||
}
|
||||
|
||||
_getScrollHeight() {
|
||||
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
||||
}
|
||||
|
||||
_getOffsetHeight() {
|
||||
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
|
||||
}
|
||||
|
||||
_process() {
|
||||
const scrollTop = this._getScrollTop() + this._config.offset;
|
||||
|
||||
const scrollHeight = this._getScrollHeight();
|
||||
|
||||
const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
|
||||
|
||||
if (this._scrollHeight !== scrollHeight) {
|
||||
this.refresh();
|
||||
}
|
||||
|
||||
if (scrollTop >= maxScroll) {
|
||||
const target = this._targets[this._targets.length - 1];
|
||||
|
||||
if (this._activeTarget !== target) {
|
||||
this._activate(target);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
|
||||
this._activeTarget = null;
|
||||
|
||||
this._clear();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const offsetLength = this._offsets.length;
|
||||
|
||||
for (let i = offsetLength; i--;) {
|
||||
const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
||||
|
||||
if (isActiveTarget) {
|
||||
this._activate(this._targets[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_activate(target) {
|
||||
this._activeTarget = target;
|
||||
|
||||
this._clear();
|
||||
|
||||
const queries = this._selector.split(',').map(selector => `${selector}[data-target="${target}"],${selector}[href="${target}"]`);
|
||||
|
||||
const link = SelectorEngine.findOne(queries.join(','));
|
||||
|
||||
if (link.classList.contains(ClassName$8.DROPDOWN_ITEM)) {
|
||||
SelectorEngine.findOne(Selector$8.DROPDOWN_TOGGLE, SelectorEngine.closest(link, Selector$8.DROPDOWN)).classList.add(ClassName$8.ACTIVE);
|
||||
link.classList.add(ClassName$8.ACTIVE);
|
||||
} else {
|
||||
// Set triggered link as active
|
||||
link.classList.add(ClassName$8.ACTIVE);
|
||||
SelectorEngine.parents(link, Selector$8.NAV_LIST_GROUP).forEach(listGroup => {
|
||||
// Set triggered links parents as active
|
||||
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
||||
SelectorEngine.prev(listGroup, `${Selector$8.NAV_LINKS}, ${Selector$8.LIST_ITEMS}`).forEach(item => item.classList.add(ClassName$8.ACTIVE)); // Handle special case when .nav-link is inside .nav-item
|
||||
|
||||
SelectorEngine.prev(listGroup, Selector$8.NAV_ITEMS).forEach(navItem => {
|
||||
SelectorEngine.children(navItem, Selector$8.NAV_LINKS).forEach(item => item.classList.add(ClassName$8.ACTIVE));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
EventHandler.trigger(this._scrollElement, Event$9.ACTIVATE, {
|
||||
relatedTarget: target
|
||||
});
|
||||
}
|
||||
|
||||
_clear() {
|
||||
makeArray(SelectorEngine.find(this._selector)).filter(node => node.classList.contains(ClassName$8.ACTIVE)).forEach(node => node.classList.remove(ClassName$8.ACTIVE));
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY$8);
|
||||
|
||||
const _config = typeof config === 'object' && config;
|
||||
|
||||
if (!data) {
|
||||
data = new ScrollSpy(this, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config]();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$8);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(window, Event$9.LOAD_DATA_API, () => {
|
||||
makeArray(SelectorEngine.find(Selector$8.DATA_SPY)).forEach(spy => new ScrollSpy(spy, Manipulator.getDataAttributes(spy)));
|
||||
});
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$8];
|
||||
jQuery.fn[NAME$8] = ScrollSpy._jQueryInterface;
|
||||
jQuery.fn[NAME$8].Constructor = ScrollSpy;
|
||||
|
||||
jQuery.fn[NAME$8].noConflict = () => {
|
||||
jQuery.fn[NAME$8] = JQUERY_NO_CONFLICT;
|
||||
return ScrollSpy._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): tab.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$9 = 'tab';
|
||||
const VERSION$9 = '4.3.1';
|
||||
const DATA_KEY$9 = 'bs.tab';
|
||||
const EVENT_KEY$9 = `.${DATA_KEY$9}`;
|
||||
const DATA_API_KEY$7 = '.data-api';
|
||||
const Event$a = {
|
||||
HIDE: `hide${EVENT_KEY$9}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$9}`,
|
||||
SHOW: `show${EVENT_KEY$9}`,
|
||||
SHOWN: `shown${EVENT_KEY$9}`,
|
||||
CLICK_DATA_API: `click${EVENT_KEY$9}${DATA_API_KEY$7}`
|
||||
};
|
||||
const ClassName$9 = {
|
||||
DROPDOWN_MENU: 'dropdown-menu',
|
||||
ACTIVE: 'active',
|
||||
DISABLED: 'disabled',
|
||||
FADE: 'fade',
|
||||
SHOW: 'show'
|
||||
};
|
||||
const Selector$9 = {
|
||||
DROPDOWN: '.dropdown',
|
||||
NAV_LIST_GROUP: '.nav, .list-group',
|
||||
ACTIVE: '.active',
|
||||
ACTIVE_UL: ':scope > li > .active',
|
||||
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
|
||||
DROPDOWN_TOGGLE: '.dropdown-toggle',
|
||||
DROPDOWN_ACTIVE_CHILD: ':scope > .dropdown-menu .active'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Tab {
|
||||
constructor(element) {
|
||||
this._element = element;
|
||||
Data.setData(this._element, DATA_KEY$9, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$9;
|
||||
} // Public
|
||||
|
||||
|
||||
show() {
|
||||
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(ClassName$9.ACTIVE) || this._element.classList.contains(ClassName$9.DISABLED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let target;
|
||||
let previous;
|
||||
const listElement = SelectorEngine.closest(this._element, Selector$9.NAV_LIST_GROUP);
|
||||
const selector = getSelectorFromElement(this._element);
|
||||
|
||||
if (listElement) {
|
||||
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;
|
||||
previous = makeArray(SelectorEngine.find(itemSelector, listElement));
|
||||
previous = previous[previous.length - 1];
|
||||
}
|
||||
|
||||
let hideEvent = null;
|
||||
|
||||
if (previous) {
|
||||
hideEvent = EventHandler.trigger(previous, Event$a.HIDE, {
|
||||
relatedTarget: this._element
|
||||
});
|
||||
}
|
||||
|
||||
const showEvent = EventHandler.trigger(this._element, Event$a.SHOW, {
|
||||
relatedTarget: previous
|
||||
});
|
||||
|
||||
if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selector) {
|
||||
target = SelectorEngine.findOne(selector);
|
||||
}
|
||||
|
||||
this._activate(this._element, listElement);
|
||||
|
||||
const complete = () => {
|
||||
EventHandler.trigger(previous, Event$a.HIDDEN, {
|
||||
relatedTarget: this._element
|
||||
});
|
||||
EventHandler.trigger(this._element, Event$a.SHOWN, {
|
||||
relatedTarget: previous
|
||||
});
|
||||
};
|
||||
|
||||
if (target) {
|
||||
this._activate(target, target.parentNode, complete);
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
}
|
||||
|
||||
dispose() {
|
||||
Data.removeData(this._element, DATA_KEY$9);
|
||||
this._element = null;
|
||||
} // Private
|
||||
|
||||
|
||||
_activate(element, container, callback) {
|
||||
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(Selector$9.ACTIVE_UL, container) : SelectorEngine.children(container, Selector$9.ACTIVE);
|
||||
const active = activeElements[0];
|
||||
const isTransitioning = callback && active && active.classList.contains(ClassName$9.FADE);
|
||||
|
||||
const complete = () => this._transitionComplete(element, active, callback);
|
||||
|
||||
if (active && isTransitioning) {
|
||||
const transitionDuration = getTransitionDurationFromElement(active);
|
||||
active.classList.remove(ClassName$9.SHOW);
|
||||
EventHandler.one(active, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(active, transitionDuration);
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
}
|
||||
|
||||
_transitionComplete(element, active, callback) {
|
||||
if (active) {
|
||||
active.classList.remove(ClassName$9.ACTIVE);
|
||||
const dropdownChild = SelectorEngine.findOne(Selector$9.DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
||||
|
||||
if (dropdownChild) {
|
||||
dropdownChild.classList.remove(ClassName$9.ACTIVE);
|
||||
}
|
||||
|
||||
if (active.getAttribute('role') === 'tab') {
|
||||
active.setAttribute('aria-selected', false);
|
||||
}
|
||||
}
|
||||
|
||||
element.classList.add(ClassName$9.ACTIVE);
|
||||
|
||||
if (element.getAttribute('role') === 'tab') {
|
||||
element.setAttribute('aria-selected', true);
|
||||
}
|
||||
|
||||
reflow(element);
|
||||
|
||||
if (element.classList.contains(ClassName$9.FADE)) {
|
||||
element.classList.add(ClassName$9.SHOW);
|
||||
}
|
||||
|
||||
if (element.parentNode && element.parentNode.classList.contains(ClassName$9.DROPDOWN_MENU)) {
|
||||
const dropdownElement = SelectorEngine.closest(element, Selector$9.DROPDOWN);
|
||||
|
||||
if (dropdownElement) {
|
||||
makeArray(SelectorEngine.find(Selector$9.DROPDOWN_TOGGLE)).forEach(dropdown => dropdown.classList.add(ClassName$9.ACTIVE));
|
||||
}
|
||||
|
||||
element.setAttribute('aria-expanded', true);
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
const data = Data.getData(this, DATA_KEY$9) || new Tab(this);
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config]();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$9);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Data Api implementation
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
EventHandler.on(document, Event$a.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {
|
||||
event.preventDefault();
|
||||
const data = Data.getData(this, DATA_KEY$9) || new Tab(this);
|
||||
data.show();
|
||||
});
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .tab to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$9];
|
||||
jQuery.fn[NAME$9] = Tab._jQueryInterface;
|
||||
jQuery.fn[NAME$9].Constructor = Tab;
|
||||
|
||||
jQuery.fn[NAME$9].noConflict = () => {
|
||||
jQuery.fn[NAME$9] = JQUERY_NO_CONFLICT;
|
||||
return Tab._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Constants
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const NAME$a = 'toast';
|
||||
const VERSION$a = '4.3.1';
|
||||
const DATA_KEY$a = 'bs.toast';
|
||||
const EVENT_KEY$a = `.${DATA_KEY$a}`;
|
||||
const Event$b = {
|
||||
CLICK_DISMISS: `click.dismiss${EVENT_KEY$a}`,
|
||||
HIDE: `hide${EVENT_KEY$a}`,
|
||||
HIDDEN: `hidden${EVENT_KEY$a}`,
|
||||
SHOW: `show${EVENT_KEY$a}`,
|
||||
SHOWN: `shown${EVENT_KEY$a}`
|
||||
};
|
||||
const ClassName$a = {
|
||||
FADE: 'fade',
|
||||
HIDE: 'hide',
|
||||
SHOW: 'show',
|
||||
SHOWING: 'showing'
|
||||
};
|
||||
const DefaultType$7 = {
|
||||
animation: 'boolean',
|
||||
autohide: 'boolean',
|
||||
delay: 'number'
|
||||
};
|
||||
const Default$7 = {
|
||||
animation: true,
|
||||
autohide: true,
|
||||
delay: 500
|
||||
};
|
||||
const Selector$a = {
|
||||
DATA_DISMISS: '[data-dismiss="toast"]'
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* Class Definition
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
class Toast {
|
||||
constructor(element, config) {
|
||||
this._element = element;
|
||||
this._config = this._getConfig(config);
|
||||
this._timeout = null;
|
||||
|
||||
this._setListeners();
|
||||
|
||||
Data.setData(element, DATA_KEY$a, this);
|
||||
} // Getters
|
||||
|
||||
|
||||
static get VERSION() {
|
||||
return VERSION$a;
|
||||
}
|
||||
|
||||
static get DefaultType() {
|
||||
return DefaultType$7;
|
||||
}
|
||||
|
||||
static get Default() {
|
||||
return Default$7;
|
||||
} // Public
|
||||
|
||||
|
||||
show() {
|
||||
EventHandler.trigger(this._element, Event$b.SHOW);
|
||||
|
||||
if (this._config.animation) {
|
||||
this._element.classList.add(ClassName$a.FADE);
|
||||
}
|
||||
|
||||
const complete = () => {
|
||||
this._element.classList.remove(ClassName$a.SHOWING);
|
||||
|
||||
this._element.classList.add(ClassName$a.SHOW);
|
||||
|
||||
EventHandler.trigger(this._element, Event$b.SHOWN);
|
||||
|
||||
if (this._config.autohide) {
|
||||
this.hide();
|
||||
}
|
||||
};
|
||||
|
||||
this._element.classList.remove(ClassName$a.HIDE);
|
||||
|
||||
this._element.classList.add(ClassName$a.SHOWING);
|
||||
|
||||
if (this._config.animation) {
|
||||
const transitionDuration = getTransitionDurationFromElement(this._element);
|
||||
EventHandler.one(this._element, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(this._element, transitionDuration);
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
}
|
||||
|
||||
hide(withoutTimeout) {
|
||||
if (!this._element.classList.contains(ClassName$a.SHOW)) {
|
||||
return;
|
||||
}
|
||||
|
||||
EventHandler.trigger(this._element, Event$b.HIDE);
|
||||
|
||||
if (withoutTimeout) {
|
||||
this._close();
|
||||
} else {
|
||||
this._timeout = setTimeout(() => {
|
||||
this._close();
|
||||
}, this._config.delay);
|
||||
}
|
||||
}
|
||||
|
||||
dispose() {
|
||||
clearTimeout(this._timeout);
|
||||
this._timeout = null;
|
||||
|
||||
if (this._element.classList.contains(ClassName$a.SHOW)) {
|
||||
this._element.classList.remove(ClassName$a.SHOW);
|
||||
}
|
||||
|
||||
EventHandler.off(this._element, Event$b.CLICK_DISMISS);
|
||||
Data.removeData(this._element, DATA_KEY$a);
|
||||
this._element = null;
|
||||
this._config = null;
|
||||
} // Private
|
||||
|
||||
|
||||
_getConfig(config) {
|
||||
config = _extends({}, Default$7, Manipulator.getDataAttributes(this._element), typeof config === 'object' && config ? config : {});
|
||||
typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
|
||||
return config;
|
||||
}
|
||||
|
||||
_setListeners() {
|
||||
EventHandler.on(this._element, Event$b.CLICK_DISMISS, Selector$a.DATA_DISMISS, () => this.hide(true));
|
||||
}
|
||||
|
||||
_close() {
|
||||
const complete = () => {
|
||||
this._element.classList.add(ClassName$a.HIDE);
|
||||
|
||||
EventHandler.trigger(this._element, Event$b.HIDDEN);
|
||||
};
|
||||
|
||||
this._element.classList.remove(ClassName$a.SHOW);
|
||||
|
||||
if (this._config.animation) {
|
||||
const transitionDuration = getTransitionDurationFromElement(this._element);
|
||||
EventHandler.one(this._element, TRANSITION_END, complete);
|
||||
emulateTransitionEnd(this._element, transitionDuration);
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
} // Static
|
||||
|
||||
|
||||
static _jQueryInterface(config) {
|
||||
return this.each(function () {
|
||||
let data = Data.getData(this, DATA_KEY$a);
|
||||
|
||||
const _config = typeof config === 'object' && config;
|
||||
|
||||
if (!data) {
|
||||
data = new Toast(this, _config);
|
||||
}
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new TypeError(`No method named "${config}"`);
|
||||
}
|
||||
|
||||
data[config](this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static _getInstance(element) {
|
||||
return Data.getData(element, DATA_KEY$a);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
* jQuery
|
||||
* ------------------------------------------------------------------------
|
||||
* add .toast to jQuery only if jQuery is present
|
||||
*/
|
||||
|
||||
|
||||
if (typeof jQuery !== 'undefined') {
|
||||
const JQUERY_NO_CONFLICT = jQuery.fn[NAME$a];
|
||||
jQuery.fn[NAME$a] = Toast._jQueryInterface;
|
||||
jQuery.fn[NAME$a].Constructor = Toast;
|
||||
|
||||
jQuery.fn[NAME$a].noConflict = () => {
|
||||
jQuery.fn[NAME$a] = JQUERY_NO_CONFLICT;
|
||||
return Toast._jQueryInterface;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): index.esm.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
export { Alert, Button, Carousel, Collapse, Dropdown, Modal, Popover, ScrollSpy, Tab, Toast, Tooltip };
|
||||
//# sourceMappingURL=bootstrap.esm.js.map
|
1
dist/js/bootstrap.esm.js.map
vendored
Normal file
1
dist/js/bootstrap.esm.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
dist/js/bootstrap.esm.min.js
vendored
Normal file
7
dist/js/bootstrap.esm.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/js/bootstrap.esm.min.js.map
vendored
Normal file
1
dist/js/bootstrap.esm.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -4,10 +4,10 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('popper.js')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', 'popper.js'], factory) :
|
||||
(global = global || self, factory(global.bootstrap = {}, global.Popper));
|
||||
}(this, function (exports, Popper) { 'use strict';
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('popper.js')) :
|
||||
typeof define === 'function' && define.amd ? define(['popper.js'], factory) :
|
||||
(global = global || self, global.bootstrap = factory(global.Popper));
|
||||
}(this, function (Popper) { 'use strict';
|
||||
|
||||
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
|
||||
|
||||
@ -76,7 +76,8 @@
|
||||
var MAX_UID = 1000000;
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -107,7 +108,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -324,7 +325,7 @@
|
||||
|
||||
try {
|
||||
element.querySelectorAll(':scope *');
|
||||
} catch (e) {
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -416,13 +417,14 @@
|
||||
function getEvent(element) {
|
||||
var uid = getUidEvent(element);
|
||||
element.uidEvent = uid;
|
||||
return eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
return eventRegistry[uid];
|
||||
}
|
||||
|
||||
function fixEvent(event, element) {
|
||||
// Add which for key events
|
||||
if (event.which === null && keyEventRegex.test(event.type)) {
|
||||
event.which = event.charCode !== null ? event.charCode : event.keyCode;
|
||||
event.which = event.charCode === null ? event.keyCode : event.charCode;
|
||||
}
|
||||
|
||||
event.delegateTarget = element;
|
||||
@ -527,7 +529,7 @@
|
||||
}
|
||||
|
||||
var uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
|
||||
var fn = !delegation ? bootstrapHandler(element, handler) : bootstrapDelegationHandler(element, handler, delegationFn);
|
||||
var fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
|
||||
fn.delegationSelector = delegation ? handler : null;
|
||||
fn.originalHandler = originalHandler;
|
||||
fn.oneOff = oneOff;
|
||||
@ -683,8 +685,8 @@
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
var findFn = Polyfill.find;
|
||||
var _findOne = Polyfill.findOne;
|
||||
var findFn = Polyfill.find,
|
||||
_findOne = Polyfill.findOne;
|
||||
var NODE_TEXT = 3;
|
||||
var SelectorEngine = {
|
||||
matches: function matches(element, selector) {
|
||||
@ -1725,7 +1727,7 @@
|
||||
data.to(config);
|
||||
} else if (typeof action === 'string') {
|
||||
if (typeof data[action] === 'undefined') {
|
||||
throw new Error("No method named \"" + action + "\"");
|
||||
throw new TypeError("No method named \"" + action + "\"");
|
||||
}
|
||||
|
||||
data[action]();
|
||||
@ -2103,19 +2105,18 @@
|
||||
_proto._getParent = function _getParent() {
|
||||
var _this3 = this;
|
||||
|
||||
var parent;
|
||||
var parent = this._config.parent;
|
||||
|
||||
if (isElement(this._config.parent)) {
|
||||
parent = this._config.parent; // it's a jQuery object
|
||||
|
||||
if (typeof this._config.parent.jquery !== 'undefined' || typeof this._config.parent[0] !== 'undefined') {
|
||||
parent = this._config.parent[0];
|
||||
if (isElement(parent)) {
|
||||
// it's a jQuery object
|
||||
if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {
|
||||
parent = parent[0];
|
||||
}
|
||||
} else {
|
||||
parent = SelectorEngine.findOne(this._config.parent);
|
||||
parent = SelectorEngine.findOne(parent);
|
||||
}
|
||||
|
||||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
|
||||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + parent + "\"]";
|
||||
makeArray(SelectorEngine.find(selector, parent)).forEach(function (element) {
|
||||
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
|
||||
});
|
||||
@ -2128,10 +2129,10 @@
|
||||
|
||||
if (triggerArray.length) {
|
||||
triggerArray.forEach(function (elem) {
|
||||
if (!isOpen) {
|
||||
elem.classList.add(ClassName$3.COLLAPSED);
|
||||
} else {
|
||||
if (isOpen) {
|
||||
elem.classList.remove(ClassName$3.COLLAPSED);
|
||||
} else {
|
||||
elem.classList.add(ClassName$3.COLLAPSED);
|
||||
}
|
||||
|
||||
elem.setAttribute('aria-expanded', isOpen);
|
||||
@ -2161,7 +2162,7 @@
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new Error("No method named \"" + config + "\"");
|
||||
throw new TypeError("No method named \"" + config + "\"");
|
||||
}
|
||||
|
||||
data[config]();
|
||||
@ -2286,7 +2287,6 @@
|
||||
DROPRIGHT: 'dropright',
|
||||
DROPLEFT: 'dropleft',
|
||||
MENURIGHT: 'dropdown-menu-right',
|
||||
MENULEFT: 'dropdown-menu-left',
|
||||
POSITION_STATIC: 'position-static'
|
||||
};
|
||||
var Selector$4 = {
|
||||
@ -2592,7 +2592,7 @@
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new Error("No method named \"" + config + "\"");
|
||||
throw new TypeError("No method named \"" + config + "\"");
|
||||
}
|
||||
|
||||
data[config]();
|
||||
@ -3197,7 +3197,6 @@
|
||||
}
|
||||
} // ----------------------------------------------------------------------
|
||||
// the following methods are used to handle overflowing modals
|
||||
// todo (fat): these should probably be refactored out of modal.js
|
||||
// ----------------------------------------------------------------------
|
||||
;
|
||||
|
||||
@ -3276,11 +3275,11 @@
|
||||
|
||||
var padding = Manipulator.getDataAttribute(document.body, 'padding-right');
|
||||
|
||||
if (typeof padding !== 'undefined') {
|
||||
if (typeof padding === 'undefined') {
|
||||
document.body.style.paddingRight = '';
|
||||
} else {
|
||||
Manipulator.removeDataAttribute(document.body, 'padding-right');
|
||||
document.body.style.paddingRight = padding;
|
||||
} else {
|
||||
document.body.style.paddingRight = '';
|
||||
}
|
||||
};
|
||||
|
||||
@ -3591,7 +3590,6 @@
|
||||
SHOW: 'show'
|
||||
};
|
||||
var Selector$6 = {
|
||||
TOOLTIP: '.tooltip',
|
||||
TOOLTIP_INNER: '.tooltip-inner',
|
||||
TOOLTIP_ARROW: '.tooltip-arrow'
|
||||
};
|
||||
@ -3719,7 +3717,7 @@
|
||||
if (this.isWithContent() && this._isEnabled) {
|
||||
var showEvent = EventHandler.trigger(this.element, this.constructor.Event.SHOW);
|
||||
var shadowRoot = findShadowRoot(this.element);
|
||||
var isInTheDom = shadowRoot !== null ? shadowRoot.contains(this.element) : this.element.ownerDocument.documentElement.contains(this.element);
|
||||
var isInTheDom = shadowRoot === null ? this.element.ownerDocument.documentElement.contains(this.element) : shadowRoot.contains(this.element);
|
||||
|
||||
if (showEvent.defaultPrevented || !isInTheDom) {
|
||||
return;
|
||||
@ -4491,18 +4489,15 @@
|
||||
};
|
||||
var ClassName$8 = {
|
||||
DROPDOWN_ITEM: 'dropdown-item',
|
||||
DROPDOWN_MENU: 'dropdown-menu',
|
||||
ACTIVE: 'active'
|
||||
};
|
||||
var Selector$8 = {
|
||||
DATA_SPY: '[data-spy="scroll"]',
|
||||
ACTIVE: '.active',
|
||||
NAV_LIST_GROUP: '.nav, .list-group',
|
||||
NAV_LINKS: '.nav-link',
|
||||
NAV_ITEMS: '.nav-item',
|
||||
LIST_ITEMS: '.list-group-item',
|
||||
DROPDOWN: '.dropdown',
|
||||
DROPDOWN_ITEMS: '.dropdown-item',
|
||||
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
||||
};
|
||||
var OffsetMethod = {
|
||||
@ -4525,7 +4520,7 @@
|
||||
this._element = element;
|
||||
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
||||
this._config = this._getConfig(config);
|
||||
this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
|
||||
this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " ." + ClassName$8.DROPDOWN_ITEM);
|
||||
this._offsets = [];
|
||||
this._targets = [];
|
||||
this._activeTarget = null;
|
||||
@ -4566,7 +4561,6 @@
|
||||
var targetBCR = target.getBoundingClientRect();
|
||||
|
||||
if (targetBCR.width || targetBCR.height) {
|
||||
// TODO (fat): remove sketch reliance on jQuery position/offset
|
||||
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
|
||||
}
|
||||
}
|
||||
@ -5243,24 +5237,25 @@
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Bootstrap (v4.3.1): index.js
|
||||
* Bootstrap (v4.3.1): index.umd.js
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var index_umd = {
|
||||
Alert: Alert,
|
||||
Button: Button,
|
||||
Carousel: Carousel,
|
||||
Collapse: Collapse,
|
||||
Dropdown: Dropdown,
|
||||
Modal: Modal,
|
||||
Popover: Popover,
|
||||
ScrollSpy: ScrollSpy,
|
||||
Tab: Tab,
|
||||
Toast: Toast,
|
||||
Tooltip: Tooltip
|
||||
};
|
||||
|
||||
exports.Alert = Alert;
|
||||
exports.Button = Button;
|
||||
exports.Carousel = Carousel;
|
||||
exports.Collapse = Collapse;
|
||||
exports.Dropdown = Dropdown;
|
||||
exports.Modal = Modal;
|
||||
exports.Popover = Popover;
|
||||
exports.ScrollSpy = ScrollSpy;
|
||||
exports.Tab = Tab;
|
||||
exports.Toast = Toast;
|
||||
exports.Tooltip = Tooltip;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
return index_umd;
|
||||
|
||||
}));
|
||||
//# sourceMappingURL=bootstrap.js.map
|
||||
|
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
5
js/dist/alert.js
vendored
5
js/dist/alert.js
vendored
@ -37,7 +37,8 @@
|
||||
*/
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var getSelectorFromElement = function getSelectorFromElement(element) {
|
||||
var selector = element.getAttribute('data-target');
|
||||
@ -49,7 +50,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
2
js/dist/alert.js.map
vendored
2
js/dist/alert.js.map
vendored
File diff suppressed because one or more lines are too long
3
js/dist/button.js
vendored
3
js/dist/button.js
vendored
@ -35,7 +35,8 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
|
2
js/dist/button.js.map
vendored
2
js/dist/button.js.map
vendored
File diff suppressed because one or more lines are too long
7
js/dist/carousel.js
vendored
7
js/dist/carousel.js
vendored
@ -72,7 +72,8 @@
|
||||
*/
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -88,7 +89,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -703,7 +704,7 @@
|
||||
data.to(config);
|
||||
} else if (typeof action === 'string') {
|
||||
if (typeof data[action] === 'undefined') {
|
||||
throw new Error("No method named \"" + action + "\"");
|
||||
throw new TypeError("No method named \"" + action + "\"");
|
||||
}
|
||||
|
||||
data[action]();
|
||||
|
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
28
js/dist/collapse.js
vendored
28
js/dist/collapse.js
vendored
@ -72,7 +72,8 @@
|
||||
*/
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -88,7 +89,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -447,19 +448,18 @@
|
||||
_proto._getParent = function _getParent() {
|
||||
var _this3 = this;
|
||||
|
||||
var parent;
|
||||
var parent = this._config.parent;
|
||||
|
||||
if (isElement(this._config.parent)) {
|
||||
parent = this._config.parent; // it's a jQuery object
|
||||
|
||||
if (typeof this._config.parent.jquery !== 'undefined' || typeof this._config.parent[0] !== 'undefined') {
|
||||
parent = this._config.parent[0];
|
||||
if (isElement(parent)) {
|
||||
// it's a jQuery object
|
||||
if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {
|
||||
parent = parent[0];
|
||||
}
|
||||
} else {
|
||||
parent = SelectorEngine.findOne(this._config.parent);
|
||||
parent = SelectorEngine.findOne(parent);
|
||||
}
|
||||
|
||||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
|
||||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + parent + "\"]";
|
||||
makeArray(SelectorEngine.find(selector, parent)).forEach(function (element) {
|
||||
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
|
||||
});
|
||||
@ -472,10 +472,10 @@
|
||||
|
||||
if (triggerArray.length) {
|
||||
triggerArray.forEach(function (elem) {
|
||||
if (!isOpen) {
|
||||
elem.classList.add(ClassName.COLLAPSED);
|
||||
} else {
|
||||
if (isOpen) {
|
||||
elem.classList.remove(ClassName.COLLAPSED);
|
||||
} else {
|
||||
elem.classList.add(ClassName.COLLAPSED);
|
||||
}
|
||||
|
||||
elem.setAttribute('aria-expanded', isOpen);
|
||||
@ -505,7 +505,7 @@
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new Error("No method named \"" + config + "\"");
|
||||
throw new TypeError("No method named \"" + config + "\"");
|
||||
}
|
||||
|
||||
data[config]();
|
||||
|
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
2
js/dist/dom/data.js.map
vendored
2
js/dist/dom/data.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst mapData = (() => {\n const storeData = {}\n let id = 1\n return {\n set(element, key, data) {\n if (typeof element.key === 'undefined') {\n element.key = {\n key,\n id\n }\n id++\n }\n\n storeData[element.key.id] = data\n },\n get(element, key) {\n if (!element || typeof element.key === 'undefined') {\n return null\n }\n\n const keyProperties = element.key\n if (keyProperties.key === key) {\n return storeData[keyProperties.id]\n }\n return null\n },\n delete(element, key) {\n if (typeof element.key === 'undefined') {\n return\n }\n\n const keyProperties = element.key\n if (keyProperties.key === key) {\n delete storeData[keyProperties.id]\n delete element.key\n }\n }\n }\n})()\n\nconst Data = {\n setData(instance, key, data) {\n mapData.set(instance, key, data)\n },\n getData(instance, key) {\n return mapData.get(instance, key)\n },\n removeData(instance, key) {\n mapData.delete(instance, key)\n }\n}\n\nexport default Data\n"],"names":["mapData","storeData","id","set","element","key","data","get","keyProperties","delete","Data","setData","instance","getData","removeData"],"mappings":";;;;;;;;;;;EAAA;;;;;;;EAOA;;;;;EAMA,IAAMA,OAAO,GAAI,YAAM;EACrB,MAAMC,SAAS,GAAG,EAAlB;EACA,MAAIC,EAAE,GAAG,CAAT;EACA,SAAO;EACLC,IAAAA,GADK,eACDC,OADC,EACQC,GADR,EACaC,IADb,EACmB;EACtB,UAAI,OAAOF,OAAO,CAACC,GAAf,KAAuB,WAA3B,EAAwC;EACtCD,QAAAA,OAAO,CAACC,GAAR,GAAc;EACZA,UAAAA,GAAG,EAAHA,GADY;EAEZH,UAAAA,EAAE,EAAFA;EAFY,SAAd;EAIAA,QAAAA,EAAE;EACH;;EAEDD,MAAAA,SAAS,CAACG,OAAO,CAACC,GAAR,CAAYH,EAAb,CAAT,GAA4BI,IAA5B;EACD,KAXI;EAYLC,IAAAA,GAZK,eAYDH,OAZC,EAYQC,GAZR,EAYa;EAChB,UAAI,CAACD,OAAD,IAAY,OAAOA,OAAO,CAACC,GAAf,KAAuB,WAAvC,EAAoD;EAClD,eAAO,IAAP;EACD;;EAED,UAAMG,aAAa,GAAGJ,OAAO,CAACC,GAA9B;;EACA,UAAIG,aAAa,CAACH,GAAd,KAAsBA,GAA1B,EAA+B;EAC7B,eAAOJ,SAAS,CAACO,aAAa,CAACN,EAAf,CAAhB;EACD;;EACD,aAAO,IAAP;EACD,KAtBI;EAuBLO,IAAAA,MAvBK,mBAuBEL,OAvBF,EAuBWC,GAvBX,EAuBgB;EACnB,UAAI,OAAOD,OAAO,CAACC,GAAf,KAAuB,WAA3B,EAAwC;EACtC;EACD;;EAED,UAAMG,aAAa,GAAGJ,OAAO,CAACC,GAA9B;;EACA,UAAIG,aAAa,CAACH,GAAd,KAAsBA,GAA1B,EAA+B;EAC7B,eAAOJ,SAAS,CAACO,aAAa,CAACN,EAAf,CAAhB;EACA,eAAOE,OAAO,CAACC,GAAf;EACD;EACF;EAjCI,GAAP;EAmCD,CAtCe,EAAhB;;EAwCA,IAAMK,IAAI,GAAG;EACXC,EAAAA,OADW,mBACHC,QADG,EACOP,GADP,EACYC,IADZ,EACkB;EAC3BN,IAAAA,OAAO,CAACG,GAAR,CAAYS,QAAZ,EAAsBP,GAAtB,EAA2BC,IAA3B;EACD,GAHU;EAIXO,EAAAA,OAJW,mBAIHD,QAJG,EAIOP,GAJP,EAIY;EACrB,WAAOL,OAAO,CAACO,GAAR,CAAYK,QAAZ,EAAsBP,GAAtB,CAAP;EACD,GANU;EAOXS,EAAAA,UAPW,sBAOAF,QAPA,EAOUP,GAPV,EAOe;EACxBL,IAAAA,OAAO,CAACS,MAAR,CAAeG,QAAf,EAAyBP,GAAzB;EACD;EATU,CAAb;;;;;;;;"}
|
||||
{"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst mapData = (() => {\n const storeData = {}\n let id = 1\n return {\n set(element, key, data) {\n if (typeof element.key === 'undefined') {\n element.key = {\n key,\n id\n }\n id++\n }\n\n storeData[element.key.id] = data\n },\n get(element, key) {\n if (!element || typeof element.key === 'undefined') {\n return null\n }\n\n const keyProperties = element.key\n if (keyProperties.key === key) {\n return storeData[keyProperties.id]\n }\n\n return null\n },\n delete(element, key) {\n if (typeof element.key === 'undefined') {\n return\n }\n\n const keyProperties = element.key\n if (keyProperties.key === key) {\n delete storeData[keyProperties.id]\n delete element.key\n }\n }\n }\n})()\n\nconst Data = {\n setData(instance, key, data) {\n mapData.set(instance, key, data)\n },\n getData(instance, key) {\n return mapData.get(instance, key)\n },\n removeData(instance, key) {\n mapData.delete(instance, key)\n }\n}\n\nexport default Data\n"],"names":["mapData","storeData","id","set","element","key","data","get","keyProperties","delete","Data","setData","instance","getData","removeData"],"mappings":";;;;;;;;;;;EAAA;;;;;;;EAOA;;;;;EAMA,IAAMA,OAAO,GAAI,YAAM;EACrB,MAAMC,SAAS,GAAG,EAAlB;EACA,MAAIC,EAAE,GAAG,CAAT;EACA,SAAO;EACLC,IAAAA,GADK,eACDC,OADC,EACQC,GADR,EACaC,IADb,EACmB;EACtB,UAAI,OAAOF,OAAO,CAACC,GAAf,KAAuB,WAA3B,EAAwC;EACtCD,QAAAA,OAAO,CAACC,GAAR,GAAc;EACZA,UAAAA,GAAG,EAAHA,GADY;EAEZH,UAAAA,EAAE,EAAFA;EAFY,SAAd;EAIAA,QAAAA,EAAE;EACH;;EAEDD,MAAAA,SAAS,CAACG,OAAO,CAACC,GAAR,CAAYH,EAAb,CAAT,GAA4BI,IAA5B;EACD,KAXI;EAYLC,IAAAA,GAZK,eAYDH,OAZC,EAYQC,GAZR,EAYa;EAChB,UAAI,CAACD,OAAD,IAAY,OAAOA,OAAO,CAACC,GAAf,KAAuB,WAAvC,EAAoD;EAClD,eAAO,IAAP;EACD;;EAED,UAAMG,aAAa,GAAGJ,OAAO,CAACC,GAA9B;;EACA,UAAIG,aAAa,CAACH,GAAd,KAAsBA,GAA1B,EAA+B;EAC7B,eAAOJ,SAAS,CAACO,aAAa,CAACN,EAAf,CAAhB;EACD;;EAED,aAAO,IAAP;EACD,KAvBI;EAwBLO,IAAAA,MAxBK,mBAwBEL,OAxBF,EAwBWC,GAxBX,EAwBgB;EACnB,UAAI,OAAOD,OAAO,CAACC,GAAf,KAAuB,WAA3B,EAAwC;EACtC;EACD;;EAED,UAAMG,aAAa,GAAGJ,OAAO,CAACC,GAA9B;;EACA,UAAIG,aAAa,CAACH,GAAd,KAAsBA,GAA1B,EAA+B;EAC7B,eAAOJ,SAAS,CAACO,aAAa,CAACN,EAAf,CAAhB;EACA,eAAOE,OAAO,CAACC,GAAf;EACD;EACF;EAlCI,GAAP;EAoCD,CAvCe,EAAhB;;EAyCA,IAAMK,IAAI,GAAG;EACXC,EAAAA,OADW,mBACHC,QADG,EACOP,GADP,EACYC,IADZ,EACkB;EAC3BN,IAAAA,OAAO,CAACG,GAAR,CAAYS,QAAZ,EAAsBP,GAAtB,EAA2BC,IAA3B;EACD,GAHU;EAIXO,EAAAA,OAJW,mBAIHD,QAJG,EAIOP,GAJP,EAIY;EACrB,WAAOL,OAAO,CAACO,GAAR,CAAYK,QAAZ,EAAsBP,GAAtB,CAAP;EACD,GANU;EAOXS,EAAAA,UAPW,sBAOAF,QAPA,EAOUP,GAPV,EAOe;EACxBL,IAAAA,OAAO,CAACS,MAAR,CAAeG,QAAf,EAAyBP,GAAzB;EACD;EATU,CAAb;;;;;;;;"}
|
10
js/dist/dom/eventhandler.js
vendored
10
js/dist/dom/eventhandler.js
vendored
@ -17,7 +17,8 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
@ -56,13 +57,14 @@
|
||||
function getEvent(element) {
|
||||
var uid = getUidEvent(element);
|
||||
element.uidEvent = uid;
|
||||
return eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
eventRegistry[uid] = eventRegistry[uid] || {};
|
||||
return eventRegistry[uid];
|
||||
}
|
||||
|
||||
function fixEvent(event, element) {
|
||||
// Add which for key events
|
||||
if (event.which === null && keyEventRegex.test(event.type)) {
|
||||
event.which = event.charCode !== null ? event.charCode : event.keyCode;
|
||||
event.which = event.charCode === null ? event.keyCode : event.charCode;
|
||||
}
|
||||
|
||||
event.delegateTarget = element;
|
||||
@ -167,7 +169,7 @@
|
||||
}
|
||||
|
||||
var uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
|
||||
var fn = !delegation ? bootstrapHandler(element, handler) : bootstrapDelegationHandler(element, handler, delegationFn);
|
||||
var fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
|
||||
fn.delegationSelector = delegation ? handler : null;
|
||||
fn.originalHandler = originalHandler;
|
||||
fn.oneOff = oneOff;
|
||||
|
2
js/dist/dom/eventhandler.js.map
vendored
2
js/dist/dom/eventhandler.js.map
vendored
File diff suppressed because one or more lines are too long
2
js/dist/dom/manipulator.js.map
vendored
2
js/dist/dom/manipulator.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, (chr) => chr.toLowerCase())\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {\n ...element.dataset\n }\n\n Object.keys(attributes).forEach((key) => {\n attributes[key] = normalizeData(attributes[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n },\n\n toggleClass(element, className) {\n if (!element) {\n return\n }\n\n if (element.classList.contains(className)) {\n element.classList.remove(className)\n } else {\n element.classList.add(className)\n }\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","val","Number","toString","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","value","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","dataset","Object","keys","forEach","getDataAttribute","getAttribute","offset","rect","getBoundingClientRect","top","document","body","scrollTop","left","scrollLeft","position","offsetTop","offsetLeft","toggleClass","className","classList","contains","remove","add"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;;;;;;EAOA,SAASA,aAAT,CAAuBC,GAAvB,EAA4B;EAC1B,MAAIA,GAAG,KAAK,MAAZ,EAAoB;EAClB,WAAO,IAAP;EACD;;EAED,MAAIA,GAAG,KAAK,OAAZ,EAAqB;EACnB,WAAO,KAAP;EACD;;EAED,MAAIA,GAAG,KAAKC,MAAM,CAACD,GAAD,CAAN,CAAYE,QAAZ,EAAZ,EAAoC;EAClC,WAAOD,MAAM,CAACD,GAAD,CAAb;EACD;;EAED,MAAIA,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,MAA1B,EAAkC;EAChC,WAAO,IAAP;EACD;;EAED,SAAOA,GAAP;EACD;;EAED,SAASG,gBAAT,CAA0BC,GAA1B,EAA+B;EAC7B,SAAOA,GAAG,CAACC,OAAJ,CAAY,QAAZ,EAAsB,UAACC,GAAD;EAAA,WAASA,GAAG,CAACC,WAAJ,EAAT;EAAA,GAAtB,CAAP;EACD;;EAED,IAAMC,WAAW,GAAG;EAClBC,EAAAA,gBADkB,4BACDC,OADC,EACQN,GADR,EACaO,KADb,EACoB;EACpCD,IAAAA,OAAO,CAACE,YAAR,WAA6BT,gBAAgB,CAACC,GAAD,CAA7C,EAAsDO,KAAtD;EACD,GAHiB;EAKlBE,EAAAA,mBALkB,+BAKEH,OALF,EAKWN,GALX,EAKgB;EAChCM,IAAAA,OAAO,CAACI,eAAR,WAAgCX,gBAAgB,CAACC,GAAD,CAAhD;EACD,GAPiB;EASlBW,EAAAA,iBATkB,6BASAL,OATA,EASS;EACzB,QAAI,CAACA,OAAL,EAAc;EACZ,aAAO,EAAP;EACD;;EAED,QAAMM,UAAU,qBACXN,OAAO,CAACO,OADG,CAAhB;;EAIAC,IAAAA,MAAM,CAACC,IAAP,CAAYH,UAAZ,EAAwBI,OAAxB,CAAgC,UAAChB,GAAD,EAAS;EACvCY,MAAAA,UAAU,CAACZ,GAAD,CAAV,GAAkBL,aAAa,CAACiB,UAAU,CAACZ,GAAD,CAAX,CAA/B;EACD,KAFD;EAIA,WAAOY,UAAP;EACD,GAvBiB;EAyBlBK,EAAAA,gBAzBkB,4BAyBDX,OAzBC,EAyBQN,GAzBR,EAyBa;EAC7B,WAAOL,aAAa,CAACW,OAAO,CAACY,YAAR,WAA6BnB,gBAAgB,CAACC,GAAD,CAA7C,CAAD,CAApB;EACD,GA3BiB;EA6BlBmB,EAAAA,MA7BkB,kBA6BXb,OA7BW,EA6BF;EACd,QAAMc,IAAI,GAAGd,OAAO,CAACe,qBAAR,EAAb;EAEA,WAAO;EACLC,MAAAA,GAAG,EAAEF,IAAI,CAACE,GAAL,GAAWC,QAAQ,CAACC,IAAT,CAAcC,SADzB;EAELC,MAAAA,IAAI,EAAEN,IAAI,CAACM,IAAL,GAAYH,QAAQ,CAACC,IAAT,CAAcG;EAF3B,KAAP;EAID,GApCiB;EAsClBC,EAAAA,QAtCkB,oBAsCTtB,OAtCS,EAsCA;EAChB,WAAO;EACLgB,MAAAA,GAAG,EAAEhB,OAAO,CAACuB,SADR;EAELH,MAAAA,IAAI,EAAEpB,OAAO,CAACwB;EAFT,KAAP;EAID,GA3CiB;EA6ClBC,EAAAA,WA7CkB,uBA6CNzB,OA7CM,EA6CG0B,SA7CH,EA6Cc;EAC9B,QAAI,CAAC1B,OAAL,EAAc;EACZ;EACD;;EAED,QAAIA,OAAO,CAAC2B,SAAR,CAAkBC,QAAlB,CAA2BF,SAA3B,CAAJ,EAA2C;EACzC1B,MAAAA,OAAO,CAAC2B,SAAR,CAAkBE,MAAlB,CAAyBH,SAAzB;EACD,KAFD,MAEO;EACL1B,MAAAA,OAAO,CAAC2B,SAAR,CAAkBG,GAAlB,CAAsBJ,SAAtB;EACD;EACF;EAvDiB,CAApB;;;;;;;;"}
|
||||
{"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => chr.toLowerCase())\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {\n ...element.dataset\n }\n\n Object.keys(attributes).forEach(key => {\n attributes[key] = normalizeData(attributes[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n },\n\n toggleClass(element, className) {\n if (!element) {\n return\n }\n\n if (element.classList.contains(className)) {\n element.classList.remove(className)\n } else {\n element.classList.add(className)\n }\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","val","Number","toString","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","value","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","dataset","Object","keys","forEach","getDataAttribute","getAttribute","offset","rect","getBoundingClientRect","top","document","body","scrollTop","left","scrollLeft","position","offsetTop","offsetLeft","toggleClass","className","classList","contains","remove","add"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;;;;;;EAOA,SAASA,aAAT,CAAuBC,GAAvB,EAA4B;EAC1B,MAAIA,GAAG,KAAK,MAAZ,EAAoB;EAClB,WAAO,IAAP;EACD;;EAED,MAAIA,GAAG,KAAK,OAAZ,EAAqB;EACnB,WAAO,KAAP;EACD;;EAED,MAAIA,GAAG,KAAKC,MAAM,CAACD,GAAD,CAAN,CAAYE,QAAZ,EAAZ,EAAoC;EAClC,WAAOD,MAAM,CAACD,GAAD,CAAb;EACD;;EAED,MAAIA,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,MAA1B,EAAkC;EAChC,WAAO,IAAP;EACD;;EAED,SAAOA,GAAP;EACD;;EAED,SAASG,gBAAT,CAA0BC,GAA1B,EAA+B;EAC7B,SAAOA,GAAG,CAACC,OAAJ,CAAY,QAAZ,EAAsB,UAAAC,GAAG;EAAA,WAAIA,GAAG,CAACC,WAAJ,EAAJ;EAAA,GAAzB,CAAP;EACD;;EAED,IAAMC,WAAW,GAAG;EAClBC,EAAAA,gBADkB,4BACDC,OADC,EACQN,GADR,EACaO,KADb,EACoB;EACpCD,IAAAA,OAAO,CAACE,YAAR,WAA6BT,gBAAgB,CAACC,GAAD,CAA7C,EAAsDO,KAAtD;EACD,GAHiB;EAKlBE,EAAAA,mBALkB,+BAKEH,OALF,EAKWN,GALX,EAKgB;EAChCM,IAAAA,OAAO,CAACI,eAAR,WAAgCX,gBAAgB,CAACC,GAAD,CAAhD;EACD,GAPiB;EASlBW,EAAAA,iBATkB,6BASAL,OATA,EASS;EACzB,QAAI,CAACA,OAAL,EAAc;EACZ,aAAO,EAAP;EACD;;EAED,QAAMM,UAAU,qBACXN,OAAO,CAACO,OADG,CAAhB;;EAIAC,IAAAA,MAAM,CAACC,IAAP,CAAYH,UAAZ,EAAwBI,OAAxB,CAAgC,UAAAhB,GAAG,EAAI;EACrCY,MAAAA,UAAU,CAACZ,GAAD,CAAV,GAAkBL,aAAa,CAACiB,UAAU,CAACZ,GAAD,CAAX,CAA/B;EACD,KAFD;EAIA,WAAOY,UAAP;EACD,GAvBiB;EAyBlBK,EAAAA,gBAzBkB,4BAyBDX,OAzBC,EAyBQN,GAzBR,EAyBa;EAC7B,WAAOL,aAAa,CAACW,OAAO,CAACY,YAAR,WAA6BnB,gBAAgB,CAACC,GAAD,CAA7C,CAAD,CAApB;EACD,GA3BiB;EA6BlBmB,EAAAA,MA7BkB,kBA6BXb,OA7BW,EA6BF;EACd,QAAMc,IAAI,GAAGd,OAAO,CAACe,qBAAR,EAAb;EAEA,WAAO;EACLC,MAAAA,GAAG,EAAEF,IAAI,CAACE,GAAL,GAAWC,QAAQ,CAACC,IAAT,CAAcC,SADzB;EAELC,MAAAA,IAAI,EAAEN,IAAI,CAACM,IAAL,GAAYH,QAAQ,CAACC,IAAT,CAAcG;EAF3B,KAAP;EAID,GApCiB;EAsClBC,EAAAA,QAtCkB,oBAsCTtB,OAtCS,EAsCA;EAChB,WAAO;EACLgB,MAAAA,GAAG,EAAEhB,OAAO,CAACuB,SADR;EAELH,MAAAA,IAAI,EAAEpB,OAAO,CAACwB;EAFT,KAAP;EAID,GA3CiB;EA6ClBC,EAAAA,WA7CkB,uBA6CNzB,OA7CM,EA6CG0B,SA7CH,EA6Cc;EAC9B,QAAI,CAAC1B,OAAL,EAAc;EACZ;EACD;;EAED,QAAIA,OAAO,CAAC2B,SAAR,CAAkBC,QAAlB,CAA2BF,SAA3B,CAAJ,EAA2C;EACzC1B,MAAAA,OAAO,CAAC2B,SAAR,CAAkBE,MAAlB,CAAyBH,SAAzB;EACD,KAFD,MAEO;EACL1B,MAAAA,OAAO,CAAC2B,SAAR,CAAkBG,GAAlB,CAAsBJ,SAAtB;EACD;EACF;EAvDiB,CAApB;;;;;;;;"}
|
5
js/dist/dom/polyfill.js
vendored
5
js/dist/dom/polyfill.js
vendored
@ -16,7 +16,8 @@
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var MAX_UID = 1000000;
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Public Util Api
|
||||
@ -65,7 +66,7 @@
|
||||
|
||||
try {
|
||||
element.querySelectorAll(':scope *');
|
||||
} catch (e) {
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
2
js/dist/dom/polyfill.js.map
vendored
2
js/dist/dom/polyfill.js.map
vendored
File diff suppressed because one or more lines are too long
7
js/dist/dom/selectorengine.js
vendored
7
js/dist/dom/selectorengine.js
vendored
@ -17,7 +17,8 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var makeArray = function makeArray(nodeList) {
|
||||
if (!nodeList) {
|
||||
@ -39,8 +40,8 @@
|
||||
* ------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
var findFn = Polyfill.find;
|
||||
var _findOne = Polyfill.findOne;
|
||||
var findFn = Polyfill.find,
|
||||
_findOne = Polyfill.findOne;
|
||||
var NODE_TEXT = 3;
|
||||
var SelectorEngine = {
|
||||
matches: function matches(element, selector) {
|
||||
|
2
js/dist/dom/selectorengine.js.map
vendored
2
js/dist/dom/selectorengine.js.map
vendored
File diff suppressed because one or more lines are too long
8
js/dist/dropdown.js
vendored
8
js/dist/dropdown.js
vendored
@ -71,7 +71,8 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -87,7 +88,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -162,7 +163,6 @@
|
||||
DROPRIGHT: 'dropright',
|
||||
DROPLEFT: 'dropleft',
|
||||
MENURIGHT: 'dropdown-menu-right',
|
||||
MENULEFT: 'dropdown-menu-left',
|
||||
POSITION_STATIC: 'position-static'
|
||||
};
|
||||
var Selector = {
|
||||
@ -468,7 +468,7 @@
|
||||
|
||||
if (typeof config === 'string') {
|
||||
if (typeof data[config] === 'undefined') {
|
||||
throw new Error("No method named \"" + config + "\"");
|
||||
throw new TypeError("No method named \"" + config + "\"");
|
||||
}
|
||||
|
||||
data[config]();
|
||||
|
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
12
js/dist/modal.js
vendored
12
js/dist/modal.js
vendored
@ -72,7 +72,8 @@
|
||||
*/
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -88,7 +89,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -586,7 +587,6 @@
|
||||
}
|
||||
} // ----------------------------------------------------------------------
|
||||
// the following methods are used to handle overflowing modals
|
||||
// todo (fat): these should probably be refactored out of modal.js
|
||||
// ----------------------------------------------------------------------
|
||||
;
|
||||
|
||||
@ -665,11 +665,11 @@
|
||||
|
||||
var padding = Manipulator.getDataAttribute(document.body, 'padding-right');
|
||||
|
||||
if (typeof padding !== 'undefined') {
|
||||
if (typeof padding === 'undefined') {
|
||||
document.body.style.paddingRight = '';
|
||||
} else {
|
||||
Manipulator.removeDataAttribute(document.body, 'padding-right');
|
||||
document.body.style.paddingRight = padding;
|
||||
} else {
|
||||
document.body.style.paddingRight = '';
|
||||
}
|
||||
};
|
||||
|
||||
|
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
3
js/dist/popover.js
vendored
3
js/dist/popover.js
vendored
@ -75,7 +75,8 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
/**
|
||||
* ------------------------------------------------------------------------
|
||||
|
2
js/dist/popover.js.map
vendored
2
js/dist/popover.js.map
vendored
File diff suppressed because one or more lines are too long
11
js/dist/scrollspy.js
vendored
11
js/dist/scrollspy.js
vendored
@ -71,7 +71,8 @@
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
var MAX_UID = 1000000;
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -102,7 +103,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -159,18 +160,15 @@
|
||||
};
|
||||
var ClassName = {
|
||||
DROPDOWN_ITEM: 'dropdown-item',
|
||||
DROPDOWN_MENU: 'dropdown-menu',
|
||||
ACTIVE: 'active'
|
||||
};
|
||||
var Selector = {
|
||||
DATA_SPY: '[data-spy="scroll"]',
|
||||
ACTIVE: '.active',
|
||||
NAV_LIST_GROUP: '.nav, .list-group',
|
||||
NAV_LINKS: '.nav-link',
|
||||
NAV_ITEMS: '.nav-item',
|
||||
LIST_ITEMS: '.list-group-item',
|
||||
DROPDOWN: '.dropdown',
|
||||
DROPDOWN_ITEMS: '.dropdown-item',
|
||||
DROPDOWN_TOGGLE: '.dropdown-toggle'
|
||||
};
|
||||
var OffsetMethod = {
|
||||
@ -193,7 +191,7 @@
|
||||
this._element = element;
|
||||
this._scrollElement = element.tagName === 'BODY' ? window : element;
|
||||
this._config = this._getConfig(config);
|
||||
this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
|
||||
this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " ." + ClassName.DROPDOWN_ITEM);
|
||||
this._offsets = [];
|
||||
this._targets = [];
|
||||
this._activeTarget = null;
|
||||
@ -234,7 +232,6 @@
|
||||
var targetBCR = target.getBoundingClientRect();
|
||||
|
||||
if (targetBCR.width || targetBCR.height) {
|
||||
// TODO (fat): remove sketch reliance on jQuery position/offset
|
||||
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
|
||||
}
|
||||
}
|
||||
|
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
5
js/dist/tab.js
vendored
5
js/dist/tab.js
vendored
@ -37,7 +37,8 @@
|
||||
*/
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var getSelectorFromElement = function getSelectorFromElement(element) {
|
||||
var selector = element.getAttribute('data-target');
|
||||
@ -49,7 +50,7 @@
|
||||
|
||||
try {
|
||||
return document.querySelector(selector) ? selector : null;
|
||||
} catch (err) {
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
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
3
js/dist/toast.js
vendored
3
js/dist/toast.js
vendored
@ -71,7 +71,8 @@
|
||||
*/
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
|
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
6
js/dist/tooltip.js
vendored
6
js/dist/tooltip.js
vendored
@ -74,7 +74,8 @@
|
||||
var MAX_UID = 1000000;
|
||||
var MILLISECONDS_MULTIPLIER = 1000;
|
||||
var TRANSITION_END = 'transitionend';
|
||||
var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
var _window = window,
|
||||
jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
||||
|
||||
var toType = function toType(obj) {
|
||||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
||||
@ -388,7 +389,6 @@
|
||||
SHOW: 'show'
|
||||
};
|
||||
var Selector = {
|
||||
TOOLTIP: '.tooltip',
|
||||
TOOLTIP_INNER: '.tooltip-inner',
|
||||
TOOLTIP_ARROW: '.tooltip-arrow'
|
||||
};
|
||||
@ -516,7 +516,7 @@
|
||||
if (this.isWithContent() && this._isEnabled) {
|
||||
var showEvent = EventHandler.trigger(this.element, this.constructor.Event.SHOW);
|
||||
var shadowRoot = findShadowRoot(this.element);
|
||||
var isInTheDom = shadowRoot !== null ? shadowRoot.contains(this.element) : this.element.ownerDocument.documentElement.contains(this.element);
|
||||
var isInTheDom = shadowRoot === null ? this.element.ownerDocument.documentElement.contains(this.element) : shadowRoot.contains(this.element);
|
||||
|
||||
if (showEvent.defaultPrevented || !isInTheDom) {
|
||||
return;
|
||||
|
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
Loading…
x
Reference in New Issue
Block a user