2017-09-06 06:05:12 +02:00
/ * !
2021-02-10 17:14:51 +01:00
* Bootstrap v5 . 0.0 - beta2 ( https : //getbootstrap.com/)
* Copyright 2011 - 2021 The Bootstrap Authors ( https : //github.com/twbs/bootstrap/graphs/contributors)
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2017-09-06 06:05:12 +02:00
* /
2017-12-23 01:21:54 +01:00
( function ( global , factory ) {
2019-03-11 16:13:30 +01:00
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( ) :
typeof define === 'function' && define . amd ? define ( factory ) :
2020-09-14 17:12:06 +02:00
( global = typeof globalThis !== 'undefined' ? globalThis : global || self , global . bootstrap = factory ( ) ) ;
2019-11-08 09:11:23 +01:00
} ( this , ( function ( ) { 'use strict' ;
2017-09-06 06:05:12 +02:00
2018-03-31 22:59:37 +02:00
function _defineProperties ( target , props ) {
for ( var i = 0 ; i < props . length ; i ++ ) {
var descriptor = props [ i ] ;
descriptor . enumerable = descriptor . enumerable || false ;
descriptor . configurable = true ;
if ( "value" in descriptor ) descriptor . writable = true ;
Object . defineProperty ( target , descriptor . key , descriptor ) ;
}
}
function _createClass ( Constructor , protoProps , staticProps ) {
if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ;
if ( staticProps ) _defineProperties ( Constructor , staticProps ) ;
return Constructor ;
2017-11-08 05:45:26 +01:00
}
2020-09-14 17:12:06 +02:00
function _extends ( ) {
_extends = Object . assign || function ( target ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
var source = arguments [ i ] ;
2017-12-23 01:21:54 +01:00
2020-09-14 17:12:06 +02:00
for ( var key in source ) {
if ( Object . prototype . hasOwnProperty . call ( source , key ) ) {
target [ key ] = source [ key ] ;
}
}
2017-12-23 01:21:54 +01:00
}
2020-09-14 17:12:06 +02:00
return target ;
} ;
return _extends . apply ( this , arguments ) ;
2018-03-31 22:59:37 +02:00
}
2017-11-08 05:45:26 +01:00
2018-03-31 22:59:37 +02:00
function _inheritsLoose ( subClass , superClass ) {
subClass . prototype = Object . create ( superClass . prototype ) ;
subClass . prototype . constructor = subClass ;
2021-02-11 04:29:59 +01:00
subClass . _ _proto _ _ = superClass ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
/ * *
2018-03-31 22:59:37 +02:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : util / index . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2018-03-31 22:59:37 +02:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2017-09-06 06:05:12 +02:00
* /
2019-03-01 17:31:34 +01:00
var MAX _UID = 1000000 ;
var MILLISECONDS _MULTIPLIER = 1000 ;
2019-08-27 15:03:21 +02:00
var TRANSITION _END = 'transitionend' ; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2019-03-01 17:31:34 +01:00
var toType = function toType ( obj ) {
2020-03-28 11:29:08 +01:00
if ( obj === null || obj === undefined ) {
return "" + obj ;
}
2019-03-01 17:31:34 +01:00
return { } . toString . call ( obj ) . match ( /\s([a-z]+)/i ) [ 1 ] . toLowerCase ( ) ;
} ;
2018-11-13 07:41:12 +01:00
/ * *
2019-03-01 17:31:34 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 07:41:12 +01:00
* /
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var getUID = function getUID ( prefix ) {
do {
2020-06-14 00:40:28 +02:00
prefix += Math . floor ( Math . random ( ) * MAX _UID ) ;
2019-03-01 17:31:34 +01:00
} while ( document . getElementById ( prefix ) ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
return prefix ;
} ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
var getSelector = function getSelector ( element ) {
2020-11-23 14:17:16 +01:00
var selector = element . getAttribute ( 'data-bs-target' ) ;
2019-03-01 17:31:34 +01:00
if ( ! selector || selector === '#' ) {
2021-02-10 17:14:51 +01:00
var hrefAttr = element . getAttribute ( 'href' ) ; // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if ( ! hrefAttr || ! hrefAttr . includes ( '#' ) && ! hrefAttr . startsWith ( '.' ) ) {
return null ;
} // Just in case some CMS puts out a full URL with the anchor appended
if ( hrefAttr . includes ( '#' ) && ! hrefAttr . startsWith ( '#' ) ) {
hrefAttr = '#' + hrefAttr . split ( '#' ) [ 1 ] ;
}
2019-08-27 15:03:21 +02:00
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr . trim ( ) : null ;
2019-03-01 17:31:34 +01:00
}
2019-08-27 15:03:21 +02:00
return selector ;
} ;
var getSelectorFromElement = function getSelectorFromElement ( element ) {
var selector = getSelector ( element ) ;
if ( selector ) {
2019-03-01 17:31:34 +01:00
return document . querySelector ( selector ) ? selector : null ;
}
2019-08-27 15:03:21 +02:00
return null ;
} ;
var getElementFromSelector = function getElementFromSelector ( element ) {
var selector = getSelector ( element ) ;
return selector ? document . querySelector ( selector ) : null ;
2019-03-01 17:31:34 +01:00
} ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var getTransitionDurationFromElement = function getTransitionDurationFromElement ( element ) {
if ( ! element ) {
return 0 ;
} // Get transition-duration of the element
var _window$getComputedSt = window . getComputedStyle ( element ) ,
transitionDuration = _window$getComputedSt . transitionDuration ,
transitionDelay = _window$getComputedSt . transitionDelay ;
2020-11-23 14:17:16 +01:00
var floatTransitionDuration = Number . parseFloat ( transitionDuration ) ;
var floatTransitionDelay = Number . parseFloat ( transitionDelay ) ; // Return 0 if element or transition duration is not found
2019-03-01 17:31:34 +01:00
if ( ! floatTransitionDuration && ! floatTransitionDelay ) {
return 0 ;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration . split ( ',' ) [ 0 ] ;
transitionDelay = transitionDelay . split ( ',' ) [ 0 ] ;
2020-11-23 14:17:16 +01:00
return ( Number . parseFloat ( transitionDuration ) + Number . parseFloat ( transitionDelay ) ) * MILLISECONDS _MULTIPLIER ;
2019-03-01 17:31:34 +01:00
} ;
var triggerTransitionEnd = function triggerTransitionEnd ( element ) {
2020-03-28 11:29:08 +01:00
element . dispatchEvent ( new Event ( TRANSITION _END ) ) ;
2019-03-01 17:31:34 +01:00
} ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var isElement = function isElement ( obj ) {
return ( obj [ 0 ] || obj ) . nodeType ;
} ;
var emulateTransitionEnd = function emulateTransitionEnd ( element , duration ) {
2018-11-13 07:41:12 +01:00
var called = false ;
2019-03-01 17:31:34 +01:00
var durationPadding = 5 ;
var emulatedDuration = duration + durationPadding ;
function listener ( ) {
2018-11-13 07:41:12 +01:00
called = true ;
2019-03-01 17:31:34 +01:00
element . removeEventListener ( TRANSITION _END , listener ) ;
}
element . addEventListener ( TRANSITION _END , listener ) ;
2018-11-13 07:41:12 +01:00
setTimeout ( function ( ) {
if ( ! called ) {
2019-03-01 17:31:34 +01:00
triggerTransitionEnd ( element ) ;
2018-11-13 07:41:12 +01:00
}
2019-03-01 17:31:34 +01:00
} , emulatedDuration ) ;
} ;
var typeCheckConfig = function typeCheckConfig ( componentName , config , configTypes ) {
Object . keys ( configTypes ) . forEach ( function ( property ) {
var expectedTypes = configTypes [ property ] ;
var value = config [ property ] ;
var valueType = value && isElement ( value ) ? 'element' : toType ( value ) ;
if ( ! new RegExp ( expectedTypes ) . test ( valueType ) ) {
2021-02-10 17:14:51 +01:00
throw new TypeError ( componentName . toUpperCase ( ) + ": " + ( "Option \"" + property + "\" provided type \"" + valueType + "\" " ) + ( "but expected type \"" + expectedTypes + "\"." ) ) ;
2019-03-01 17:31:34 +01:00
}
} ) ;
} ;
var isVisible = function isVisible ( element ) {
if ( ! element ) {
return false ;
}
if ( element . style && element . parentNode && element . parentNode . style ) {
2019-11-08 09:11:23 +01:00
var elementStyle = getComputedStyle ( element ) ;
var parentNodeStyle = getComputedStyle ( element . parentNode ) ;
return elementStyle . display !== 'none' && parentNodeStyle . display !== 'none' && elementStyle . visibility !== 'hidden' ;
2019-03-01 17:31:34 +01:00
}
return false ;
} ;
var findShadowRoot = function findShadowRoot ( element ) {
if ( ! document . documentElement . attachShadow ) {
return null ;
} // Can find the shadow root otherwise it'll return the document
if ( typeof element . getRootNode === 'function' ) {
var 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 ) ;
2019-10-08 08:39:10 +02:00
} ;
2019-03-01 17:31:34 +01:00
var noop = function noop ( ) {
return function ( ) { } ;
} ;
var reflow = function reflow ( element ) {
return element . offsetHeight ;
} ;
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
var getjQuery = function getjQuery ( ) {
var _window = window ,
jQuery = _window . jQuery ;
2020-11-23 14:17:16 +01:00
if ( jQuery && ! document . body . hasAttribute ( 'data-bs-no-jquery' ) ) {
2019-08-27 15:03:21 +02:00
return jQuery ;
}
return null ;
} ;
2020-11-11 18:07:37 +01:00
var onDOMContentLoaded = function onDOMContentLoaded ( callback ) {
if ( document . readyState === 'loading' ) {
document . addEventListener ( 'DOMContentLoaded' , callback ) ;
} else {
callback ( ) ;
}
} ;
2020-12-03 14:08:31 +01:00
var isRTL = document . documentElement . dir === 'rtl' ;
2021-02-10 17:14:51 +01:00
var defineJQueryPlugin = function defineJQueryPlugin ( name , plugin ) {
onDOMContentLoaded ( function ( ) {
var $ = getjQuery ( ) ;
/* istanbul ignore if */
if ( $ ) {
var JQUERY _NO _CONFLICT = $ . fn [ name ] ;
$ . fn [ name ] = plugin . jQueryInterface ;
$ . fn [ name ] . Constructor = plugin ;
$ . fn [ name ] . noConflict = function ( ) {
$ . fn [ name ] = JQUERY _NO _CONFLICT ;
return plugin . jQueryInterface ;
} ;
}
} ) ;
} ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : dom / data . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2018-11-13 07:41:12 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var mapData = function ( ) {
var storeData = { } ;
var id = 1 ;
return {
set : function set ( element , key , data ) {
2020-09-14 17:12:06 +02:00
if ( typeof element . bsKey === 'undefined' ) {
element . bsKey = {
2019-03-01 17:31:34 +01:00
key : key ,
id : id
} ;
id ++ ;
}
2020-09-14 17:12:06 +02:00
storeData [ element . bsKey . id ] = data ;
2019-03-01 17:31:34 +01:00
} ,
get : function get ( element , key ) {
2020-09-14 17:12:06 +02:00
if ( ! element || typeof element . bsKey === 'undefined' ) {
2019-03-01 17:31:34 +01:00
return null ;
}
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var keyProperties = element . bsKey ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if ( keyProperties . key === key ) {
return storeData [ keyProperties . id ] ;
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
return null ;
} ,
delete : function _delete ( element , key ) {
2020-09-14 17:12:06 +02:00
if ( typeof element . bsKey === 'undefined' ) {
2019-03-01 17:31:34 +01:00
return ;
}
2020-09-14 17:12:06 +02:00
var keyProperties = element . bsKey ;
2019-03-01 17:31:34 +01:00
if ( keyProperties . key === key ) {
delete storeData [ keyProperties . id ] ;
2020-09-14 17:12:06 +02:00
delete element . bsKey ;
2019-03-01 17:31:34 +01:00
}
2018-11-13 07:41:12 +01:00
}
2019-03-01 17:31:34 +01:00
} ;
} ( ) ;
var Data = {
setData : function setData ( instance , key , data ) {
mapData . set ( instance , key , data ) ;
} ,
getData : function getData ( instance , key ) {
return mapData . get ( instance , key ) ;
} ,
removeData : function removeData ( instance , key ) {
mapData . delete ( instance , key ) ;
}
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : dom / event - handler . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2019-03-01 17:31:34 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var namespaceRegex = /[^.]*(?=\..*)\.|.*/ ;
var stripNameRegex = /\..*/ ;
var stripUidRegex = /::\d+$/ ;
var eventRegistry = { } ; // Events storage
var uidEvent = 1 ;
var customEvents = {
mouseenter : 'mouseover' ,
mouseleave : 'mouseout'
} ;
2020-11-23 14:17:16 +01:00
var nativeEvents = new Set ( [ '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' ] ) ;
2019-03-01 17:31:34 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Private methods
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
function getUidEvent ( element , uid ) {
return uid && uid + "::" + uidEvent ++ || element . uidEvent || uidEvent ++ ;
}
function getEvent ( element ) {
var uid = getUidEvent ( element ) ;
element . uidEvent = uid ;
2019-03-11 16:13:30 +01:00
eventRegistry [ uid ] = eventRegistry [ uid ] || { } ;
return eventRegistry [ uid ] ;
2019-03-01 17:31:34 +01:00
}
function bootstrapHandler ( element , fn ) {
return function handler ( event ) {
2020-09-14 17:12:06 +02:00
event . delegateTarget = element ;
2019-03-01 17:31:34 +01:00
if ( handler . oneOff ) {
EventHandler . off ( element , event . type , fn ) ;
}
return fn . apply ( element , [ event ] ) ;
} ;
}
function bootstrapDelegationHandler ( element , selector , fn ) {
return function handler ( event ) {
var domElements = element . querySelectorAll ( selector ) ;
for ( var target = event . target ; target && target !== this ; target = target . parentNode ) {
for ( var i = domElements . length ; i -- ; ) {
if ( domElements [ i ] === target ) {
2020-09-14 17:12:06 +02:00
event . delegateTarget = target ;
2019-03-01 17:31:34 +01:00
if ( handler . oneOff ) {
2021-02-10 17:14:51 +01:00
// eslint-disable-next-line unicorn/consistent-destructuring
2019-03-01 17:31:34 +01:00
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 ;
}
2019-07-12 23:56:26 +02:00
var uidEventList = Object . keys ( events ) ;
for ( var i = 0 , len = uidEventList . length ; i < len ; i ++ ) {
var event = events [ uidEventList [ i ] ] ;
2019-03-01 17:31:34 +01:00
if ( event . originalHandler === handler && event . delegationSelector === delegationSelector ) {
2019-07-12 23:56:26 +02:00
return event ;
2019-03-01 17:31:34 +01:00
}
}
return null ;
}
function normalizeParams ( originalTypeEvent , handler , delegationFn ) {
var delegation = typeof handler === 'string' ;
var originalHandler = delegation ? delegationFn : handler ; // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
var typeEvent = originalTypeEvent . replace ( stripNameRegex , '' ) ;
var custom = customEvents [ typeEvent ] ;
if ( custom ) {
typeEvent = custom ;
}
2020-11-23 14:17:16 +01:00
var isNative = nativeEvents . has ( typeEvent ) ;
2019-03-01 17:31:34 +01:00
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 ;
}
var _normalizeParams = normalizeParams ( originalTypeEvent , handler , delegationFn ) ,
delegation = _normalizeParams [ 0 ] ,
originalHandler = _normalizeParams [ 1 ] ,
typeEvent = _normalizeParams [ 2 ] ;
var events = getEvent ( element ) ;
var handlers = events [ typeEvent ] || ( events [ typeEvent ] = { } ) ;
var previousFn = findHandler ( handlers , originalHandler , delegation ? handler : null ) ;
if ( previousFn ) {
previousFn . oneOff = previousFn . oneOff && oneOff ;
return ;
}
var uid = getUidEvent ( originalHandler , originalTypeEvent . replace ( namespaceRegex , '' ) ) ;
2019-03-11 16:13:30 +01:00
var fn = delegation ? bootstrapDelegationHandler ( element , handler , delegationFn ) : bootstrapHandler ( element , handler ) ;
2019-03-01 17:31:34 +01:00
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 ) {
var fn = findHandler ( events [ typeEvent ] , handler , delegationSelector ) ;
2019-07-12 23:56:26 +02:00
if ( ! fn ) {
2019-03-01 17:31:34 +01:00
return ;
}
element . removeEventListener ( typeEvent , fn , Boolean ( delegationSelector ) ) ;
delete events [ typeEvent ] [ fn . uidEvent ] ;
}
function removeNamespacedHandlers ( element , events , typeEvent , namespace ) {
var storeElementEvent = events [ typeEvent ] || { } ;
Object . keys ( storeElementEvent ) . forEach ( function ( handlerKey ) {
2020-11-23 14:17:16 +01:00
if ( handlerKey . includes ( namespace ) ) {
2019-03-01 17:31:34 +01:00
var event = storeElementEvent [ handlerKey ] ;
removeHandler ( element , events , typeEvent , event . originalHandler , event . delegationSelector ) ;
2019-01-04 17:29:45 +01:00
}
2019-03-01 17:31:34 +01:00
} ) ;
}
var EventHandler = {
on : function on ( element , event , handler , delegationFn ) {
addHandler ( element , event , handler , delegationFn , false ) ;
2018-11-13 07:41:12 +01:00
} ,
2019-03-01 17:31:34 +01:00
one : function one ( element , event , handler , delegationFn ) {
addHandler ( element , event , handler , delegationFn , true ) ;
} ,
off : function off ( element , originalTypeEvent , handler , delegationFn ) {
if ( typeof originalTypeEvent !== 'string' || ! element ) {
return ;
}
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
var _normalizeParams2 = normalizeParams ( originalTypeEvent , handler , delegationFn ) ,
delegation = _normalizeParams2 [ 0 ] ,
originalHandler = _normalizeParams2 [ 1 ] ,
typeEvent = _normalizeParams2 [ 2 ] ;
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
var inNamespace = typeEvent !== originalTypeEvent ;
var events = getEvent ( element ) ;
2020-11-23 14:17:16 +01:00
var isNamespace = originalTypeEvent . startsWith ( '.' ) ;
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
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 ( function ( elementEvent ) {
2019-10-08 08:39:10 +02:00
removeNamespacedHandlers ( element , events , elementEvent , originalTypeEvent . slice ( 1 ) ) ;
2019-03-01 17:31:34 +01:00
} ) ;
}
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
var storeElementEvent = events [ typeEvent ] || { } ;
Object . keys ( storeElementEvent ) . forEach ( function ( keyHandlers ) {
var handlerKey = keyHandlers . replace ( stripUidRegex , '' ) ;
2018-03-31 22:59:37 +02:00
2020-11-23 14:17:16 +01:00
if ( ! inNamespace || originalTypeEvent . includes ( handlerKey ) ) {
2019-03-01 17:31:34 +01:00
var event = storeElementEvent [ keyHandlers ] ;
removeHandler ( element , events , typeEvent , event . originalHandler , event . delegationSelector ) ;
}
} ) ;
2018-11-13 07:41:12 +01:00
} ,
2019-03-01 17:31:34 +01:00
trigger : function trigger ( element , event , args ) {
if ( typeof event !== 'string' || ! element ) {
return null ;
}
2020-11-11 18:07:37 +01:00
var $ = getjQuery ( ) ;
2019-03-01 17:31:34 +01:00
var typeEvent = event . replace ( stripNameRegex , '' ) ;
var inNamespace = event !== typeEvent ;
2020-11-23 14:17:16 +01:00
var isNative = nativeEvents . has ( typeEvent ) ;
2019-03-01 17:31:34 +01:00
var jQueryEvent ;
var bubbles = true ;
var nativeDispatch = true ;
var defaultPrevented = false ;
var evt = null ;
2019-08-27 15:03:21 +02:00
if ( inNamespace && $ ) {
jQueryEvent = $ . Event ( event , args ) ;
$ ( element ) . trigger ( jQueryEvent ) ;
2019-03-01 17:31:34 +01:00
bubbles = ! jQueryEvent . isPropagationStopped ( ) ;
nativeDispatch = ! jQueryEvent . isImmediatePropagationStopped ( ) ;
defaultPrevented = jQueryEvent . isDefaultPrevented ( ) ;
}
if ( isNative ) {
evt = document . createEvent ( 'HTMLEvents' ) ;
evt . initEvent ( typeEvent , bubbles , true ) ;
} else {
2020-03-28 11:29:08 +01:00
evt = new CustomEvent ( event , {
2019-03-01 17:31:34 +01:00
bubbles : bubbles ,
cancelable : true
} ) ;
2020-09-14 17:12:06 +02:00
} // merge custom information in our event
2019-03-01 17:31:34 +01:00
if ( typeof args !== 'undefined' ) {
Object . keys ( args ) . forEach ( function ( key ) {
Object . defineProperty ( evt , key , {
get : function get ( ) {
return args [ key ] ;
}
} ) ;
} ) ;
}
if ( defaultPrevented ) {
evt . preventDefault ( ) ;
}
if ( nativeDispatch ) {
element . dispatchEvent ( evt ) ;
}
if ( evt . defaultPrevented && typeof jQueryEvent !== 'undefined' ) {
jQueryEvent . preventDefault ( ) ;
}
return evt ;
}
} ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2021-02-10 17:14:51 +01:00
var VERSION = '5.0.0-beta2' ;
2020-12-03 15:18:59 +01:00
var BaseComponent = /*#__PURE__*/ function ( ) {
function BaseComponent ( element ) {
if ( ! element ) {
return ;
}
this . _element = element ;
Data . setData ( element , this . constructor . DATA _KEY , this ) ;
}
var _proto = BaseComponent . prototype ;
_proto . dispose = function dispose ( ) {
Data . removeData ( this . _element , this . constructor . DATA _KEY ) ;
this . _element = null ;
}
/** Static */
;
BaseComponent . getInstance = function getInstance ( element ) {
return Data . getData ( element , this . DATA _KEY ) ;
} ;
_createClass ( BaseComponent , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION ;
}
} ] ) ;
return BaseComponent ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'alert' ;
2018-11-13 07:41:12 +01:00
var DATA _KEY = 'bs.alert' ;
var EVENT _KEY = "." + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DISMISS = '[data-bs-dismiss="alert"]' ;
2020-03-28 11:29:08 +01:00
var EVENT _CLOSE = "close" + EVENT _KEY ;
var EVENT _CLOSED = "closed" + EVENT _KEY ;
var EVENT _CLICK _DATA _API = "click" + EVENT _KEY + DATA _API _KEY ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _ALERT = 'alert' ;
var CLASS _NAME _FADE = 'fade' ;
var CLASS _NAME _SHOW = 'show' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Alert = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Alert , _BaseComponent ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
function Alert ( ) {
return _BaseComponent . apply ( this , arguments ) || this ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Alert . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . close = function close ( element ) {
2020-09-14 17:12:06 +02:00
var rootElement = element ? this . _getRootElement ( element ) : this . _element ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var customEvent = this . _triggerCloseEvent ( rootElement ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( customEvent === null || customEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _removeElement ( rootElement ) ;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getRootElement = function _getRootElement ( element ) {
2021-02-10 17:14:51 +01:00
return getElementFromSelector ( element ) || element . closest ( "." + CLASS _NAME _ALERT ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _triggerCloseEvent = function _triggerCloseEvent ( element ) {
2020-03-28 11:29:08 +01:00
return EventHandler . trigger ( element , EVENT _CLOSE ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _removeElement = function _removeElement ( element ) {
var _this = this ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
element . classList . remove ( CLASS _NAME _SHOW ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( ! element . classList . contains ( CLASS _NAME _FADE ) ) {
2018-11-13 07:41:12 +01:00
this . _destroyElement ( element ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( element ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( element , 'transitionend' , function ( ) {
2019-07-24 08:13:50 +02:00
return _this . _destroyElement ( element ) ;
2019-03-01 17:31:34 +01:00
} ) ;
emulateTransitionEnd ( element , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _destroyElement = function _destroyElement ( element ) {
2019-03-01 17:31:34 +01:00
if ( element . parentNode ) {
element . parentNode . removeChild ( element ) ;
}
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( element , EVENT _CLOSED ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Alert . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new Alert ( this ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( config === 'close' ) {
data [ config ] ( this ) ;
}
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Alert . handleDismiss = function handleDismiss ( alertInstance ) {
2018-11-13 07:41:12 +01:00
return function ( event ) {
if ( event ) {
event . preventDefault ( ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
alertInstance . close ( this ) ;
2017-09-06 06:05:12 +02:00
} ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Alert , null , [ {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2021-02-11 04:29:59 +01:00
// Getters
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return Alert ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _CLICK _DATA _API , SELECTOR _DISMISS , Alert . handleDismiss ( new Alert ( ) ) ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Alert to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME , Alert ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$1 = 'button' ;
var DATA _KEY$1 = 'bs.button' ;
var EVENT _KEY$1 = "." + DATA _KEY$1 ;
var DATA _API _KEY$1 = '.data-api' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _ACTIVE = 'active' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _TOGGLE = '[data-bs-toggle="button"]' ;
2020-03-28 11:29:08 +01:00
var EVENT _CLICK _DATA _API$1 = "click" + EVENT _KEY$1 + DATA _API _KEY$1 ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Button = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Button , _BaseComponent ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
function Button ( ) {
return _BaseComponent . apply ( this , arguments ) || this ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Button . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . toggle = function toggle ( ) {
2020-06-16 20:50:01 +02:00
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this . _element . setAttribute ( 'aria-pressed' , this . _element . classList . toggle ( CLASS _NAME _ACTIVE ) ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Button . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$1 ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new Button ( this ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( config === 'toggle' ) {
data [ config ] ( ) ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Button , null , [ {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2021-02-11 04:29:59 +01:00
// Getters
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY$1 ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Button ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
EventHandler . on ( document , EVENT _CLICK _DATA _API$1 , SELECTOR _DATA _TOGGLE , function ( event ) {
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
2020-06-16 20:50:01 +02:00
var button = event . target . closest ( SELECTOR _DATA _TOGGLE ) ;
2019-03-01 17:31:34 +01:00
var data = Data . getData ( button , DATA _KEY$1 ) ;
if ( ! data ) {
data = new Button ( button ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
data . toggle ( ) ;
} ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Button to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$1 , Button ) ;
2019-03-01 17:31:34 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : dom / manipulator . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2019-03-01 17:31:34 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
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 , function ( chr ) {
2019-11-08 09:11:23 +01:00
return "-" + chr . toLowerCase ( ) ;
2019-03-01 17:31:34 +01:00
} ) ;
}
var Manipulator = {
setDataAttribute : function setDataAttribute ( element , key , value ) {
2020-11-23 14:17:16 +01:00
element . setAttribute ( "data-bs-" + normalizeDataKey ( key ) , value ) ;
2019-03-01 17:31:34 +01:00
} ,
removeDataAttribute : function removeDataAttribute ( element , key ) {
2020-11-23 14:17:16 +01:00
element . removeAttribute ( "data-bs-" + normalizeDataKey ( key ) ) ;
2019-03-01 17:31:34 +01:00
} ,
getDataAttributes : function getDataAttributes ( element ) {
if ( ! element ) {
return { } ;
}
2020-11-23 14:17:16 +01:00
var attributes = { } ;
Object . keys ( element . dataset ) . filter ( function ( key ) {
return key . startsWith ( 'bs' ) ;
} ) . forEach ( function ( key ) {
var pureKey = key . replace ( /^bs/ , '' ) ;
pureKey = pureKey . charAt ( 0 ) . toLowerCase ( ) + pureKey . slice ( 1 , pureKey . length ) ;
attributes [ pureKey ] = normalizeData ( element . dataset [ key ] ) ;
2019-03-01 17:31:34 +01:00
} ) ;
return attributes ;
} ,
getDataAttribute : function getDataAttribute ( element , key ) {
2020-11-23 14:17:16 +01:00
return normalizeData ( element . getAttribute ( "data-bs-" + normalizeDataKey ( key ) ) ) ;
2019-03-01 17:31:34 +01:00
} ,
offset : function offset ( element ) {
var rect = element . getBoundingClientRect ( ) ;
return {
top : rect . top + document . body . scrollTop ,
left : rect . left + document . body . scrollLeft
} ;
} ,
position : function position ( element ) {
return {
top : element . offsetTop ,
left : element . offsetLeft
} ;
}
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : dom / selector - engine . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-11-11 18:07:37 +01:00
2020-06-16 20:50:01 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NODE _TEXT = 3 ;
var SelectorEngine = {
2020-11-11 18:07:37 +01:00
find : function find ( selector , element ) {
2020-06-16 20:50:01 +02:00
var _ref ;
if ( element === void 0 ) {
element = document . documentElement ;
}
2020-11-11 18:07:37 +01:00
return ( _ref = [ ] ) . concat . apply ( _ref , Element . prototype . querySelectorAll . call ( element , selector ) ) ;
2020-06-16 20:50:01 +02:00
} ,
2020-11-11 18:07:37 +01:00
findOne : function findOne ( selector , element ) {
2020-06-16 20:50:01 +02:00
if ( element === void 0 ) {
element = document . documentElement ;
}
2020-11-11 18:07:37 +01:00
return Element . prototype . querySelector . call ( element , selector ) ;
2020-06-16 20:50:01 +02:00
} ,
children : function children ( element , selector ) {
var _ref2 ;
2021-02-10 17:14:51 +01:00
return ( _ref2 = [ ] ) . concat . apply ( _ref2 , element . children ) . filter ( function ( child ) {
2020-06-16 20:50:01 +02:00
return child . matches ( selector ) ;
} ) ;
} ,
parents : function parents ( element , selector ) {
var parents = [ ] ;
var ancestor = element . parentNode ;
while ( ancestor && ancestor . nodeType === Node . ELEMENT _NODE && ancestor . nodeType !== NODE _TEXT ) {
2021-02-10 17:14:51 +01:00
if ( ancestor . matches ( selector ) ) {
2020-06-16 20:50:01 +02:00
parents . push ( ancestor ) ;
}
ancestor = ancestor . parentNode ;
}
return parents ;
} ,
prev : function prev ( element , selector ) {
var previous = element . previousElementSibling ;
while ( previous ) {
if ( previous . matches ( selector ) ) {
return [ previous ] ;
}
previous = previous . previousElementSibling ;
}
return [ ] ;
} ,
next : function next ( element , selector ) {
var next = element . nextElementSibling ;
while ( next ) {
2021-02-10 17:14:51 +01:00
if ( next . matches ( selector ) ) {
2020-06-16 20:50:01 +02:00
return [ next ] ;
}
next = next . nextElementSibling ;
}
return [ ] ;
}
} ;
2017-09-06 06:05:12 +02:00
/ * *
2018-11-13 07:41:12 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2017-09-06 06:05:12 +02:00
* /
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var NAME$2 = 'carousel' ;
var DATA _KEY$2 = 'bs.carousel' ;
var EVENT _KEY$2 = "." + DATA _KEY$2 ;
var DATA _API _KEY$2 = '.data-api' ;
2020-05-13 20:53:43 +02:00
var ARROW _LEFT _KEY = 'ArrowLeft' ;
var ARROW _RIGHT _KEY = 'ArrowRight' ;
2018-11-13 07:41:12 +01:00
var TOUCHEVENT _COMPAT _WAIT = 500 ; // Time for mouse compat events to fire after touch
var SWIPE _THRESHOLD = 40 ;
var Default = {
interval : 5000 ,
keyboard : true ,
slide : false ,
pause : 'hover' ,
wrap : true ,
touch : true
} ;
var DefaultType = {
interval : '(number|boolean)' ,
keyboard : 'boolean' ,
slide : '(boolean|string)' ,
pause : '(string|boolean)' ,
wrap : 'boolean' ,
touch : 'boolean'
} ;
2020-03-28 11:29:08 +01:00
var DIRECTION _NEXT = 'next' ;
var DIRECTION _PREV = 'prev' ;
var DIRECTION _LEFT = 'left' ;
var DIRECTION _RIGHT = 'right' ;
var EVENT _SLIDE = "slide" + EVENT _KEY$2 ;
var EVENT _SLID = "slid" + EVENT _KEY$2 ;
var EVENT _KEYDOWN = "keydown" + EVENT _KEY$2 ;
var EVENT _MOUSEENTER = "mouseenter" + EVENT _KEY$2 ;
var EVENT _MOUSELEAVE = "mouseleave" + EVENT _KEY$2 ;
var EVENT _TOUCHSTART = "touchstart" + EVENT _KEY$2 ;
var EVENT _TOUCHMOVE = "touchmove" + EVENT _KEY$2 ;
var EVENT _TOUCHEND = "touchend" + EVENT _KEY$2 ;
var EVENT _POINTERDOWN = "pointerdown" + EVENT _KEY$2 ;
var EVENT _POINTERUP = "pointerup" + EVENT _KEY$2 ;
var EVENT _DRAG _START = "dragstart" + EVENT _KEY$2 ;
var EVENT _LOAD _DATA _API = "load" + EVENT _KEY$2 + DATA _API _KEY$2 ;
var EVENT _CLICK _DATA _API$2 = "click" + EVENT _KEY$2 + DATA _API _KEY$2 ;
var CLASS _NAME _CAROUSEL = 'carousel' ;
var CLASS _NAME _ACTIVE$1 = 'active' ;
var CLASS _NAME _SLIDE = 'slide' ;
2020-12-03 14:08:31 +01:00
var CLASS _NAME _END = 'carousel-item-end' ;
var CLASS _NAME _START = 'carousel-item-start' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _NEXT = 'carousel-item-next' ;
var CLASS _NAME _PREV = 'carousel-item-prev' ;
var CLASS _NAME _POINTER _EVENT = 'pointer-event' ;
2020-06-16 20:50:01 +02:00
var SELECTOR _ACTIVE = '.active' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _ACTIVE _ITEM = '.active.carousel-item' ;
var SELECTOR _ITEM = '.carousel-item' ;
var SELECTOR _ITEM _IMG = '.carousel-item img' ;
var SELECTOR _NEXT _PREV = '.carousel-item-next, .carousel-item-prev' ;
var SELECTOR _INDICATORS = '.carousel-indicators' ;
2021-02-10 17:14:51 +01:00
var SELECTOR _INDICATOR = '[data-bs-target]' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _SLIDE = '[data-bs-slide], [data-bs-slide-to]' ;
var SELECTOR _DATA _RIDE = '[data-bs-ride="carousel"]' ;
2021-02-10 17:14:51 +01:00
var POINTER _TYPE _TOUCH = 'touch' ;
var POINTER _TYPE _PEN = 'pen' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-03-31 22:59:37 +02:00
2020-12-03 15:18:59 +01:00
var Carousel = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Carousel , _BaseComponent ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
function Carousel ( element , config ) {
var _this ;
_this = _BaseComponent . call ( this , element ) || this ;
_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 . _indicatorsElement = SelectorEngine . findOne ( SELECTOR _INDICATORS , _this . _element ) ;
_this . _touchSupported = 'ontouchstart' in document . documentElement || navigator . maxTouchPoints > 0 ;
_this . _pointerEvent = Boolean ( window . PointerEvent ) ;
_this . _addEventListeners ( ) ;
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
var _proto = Carousel . prototype ;
// Public
_proto . next = function next ( ) {
if ( ! this . _isSliding ) {
2020-03-28 11:29:08 +01:00
this . _slide ( DIRECTION _NEXT ) ;
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . nextWhenVisible = function nextWhenVisible ( ) {
// Don't call next when the page isn't visible
// or the carousel or its parent isn't visible
2019-03-01 17:31:34 +01:00
if ( ! document . hidden && isVisible ( this . _element ) ) {
2018-11-13 07:41:12 +01:00
this . next ( ) ;
}
2017-09-06 06:05:12 +02:00
} ;
2018-11-13 07:41:12 +01:00
_proto . prev = function prev ( ) {
if ( ! this . _isSliding ) {
2020-03-28 11:29:08 +01:00
this . _slide ( DIRECTION _PREV ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . pause = function pause ( event ) {
if ( ! event ) {
this . _isPaused = true ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if ( SelectorEngine . findOne ( SELECTOR _NEXT _PREV , this . _element ) ) {
2019-03-01 17:31:34 +01:00
triggerTransitionEnd ( this . _element ) ;
2018-11-13 07:41:12 +01:00
this . cycle ( true ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
clearInterval ( this . _interval ) ;
this . _interval = null ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . cycle = function cycle ( event ) {
if ( ! event ) {
this . _isPaused = false ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _interval ) {
2018-03-31 22:59:37 +02:00
clearInterval ( this . _interval ) ;
this . _interval = null ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( this . _config && this . _config . interval && ! this . _isPaused ) {
2020-11-11 18:07:37 +01:00
this . _updateInterval ( ) ;
2018-11-13 07:41:12 +01:00
this . _interval = setInterval ( ( document . visibilityState ? this . nextWhenVisible : this . next ) . bind ( this ) , this . _config . interval ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . to = function to ( index ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this . _activeElement = SelectorEngine . findOne ( SELECTOR _ACTIVE _ITEM , this . _element ) ;
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
var activeIndex = this . _getItemIndex ( this . _activeElement ) ;
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if ( index > this . _items . length - 1 || index < 0 ) {
return ;
}
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if ( this . _isSliding ) {
2020-03-28 11:29:08 +01:00
EventHandler . one ( this . _element , EVENT _SLID , function ( ) {
2020-12-03 15:18:59 +01:00
return _this2 . to ( index ) ;
2018-11-13 07:41:12 +01:00
} ) ;
return ;
}
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if ( activeIndex === index ) {
this . pause ( ) ;
this . cycle ( ) ;
return ;
}
2018-02-19 23:50:56 +01:00
2020-03-28 11:29:08 +01:00
var direction = index > activeIndex ? DIRECTION _NEXT : DIRECTION _PREV ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _slide ( direction , this . _items [ index ] ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2019-03-01 17:31:34 +01:00
EventHandler . off ( this . _element , EVENT _KEY$2 ) ;
2018-11-13 07:41:12 +01:00
this . _items = null ;
this . _config = null ;
this . _interval = null ;
this . _isPaused = null ;
this . _isSliding = null ;
this . _activeElement = null ;
this . _indicatorsElement = null ;
2019-01-04 17:29:45 +01:00
} // Private
;
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-09-14 17:12:06 +02:00
config = _extends ( { } , Default , config ) ;
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$2 , config , DefaultType ) ;
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _handleSwipe = function _handleSwipe ( ) {
var absDeltax = Math . abs ( this . touchDeltaX ) ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if ( absDeltax <= SWIPE _THRESHOLD ) {
return ;
}
2018-03-31 22:59:37 +02:00
2019-04-18 13:47:52 +02:00
var direction = absDeltax / this . touchDeltaX ;
this . touchDeltaX = 0 ; // swipe left
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if ( direction > 0 ) {
2021-02-10 17:14:51 +01:00
if ( isRTL ) {
this . next ( ) ;
} else {
this . prev ( ) ;
}
2018-11-13 07:41:12 +01:00
} // swipe right
2018-03-31 22:59:37 +02:00
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( direction < 0 ) {
2021-02-10 17:14:51 +01:00
if ( isRTL ) {
this . prev ( ) ;
} else {
this . next ( ) ;
}
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _addEventListeners = function _addEventListeners ( ) {
2020-12-03 15:18:59 +01:00
var _this3 = this ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _config . keyboard ) {
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _KEYDOWN , function ( event ) {
2020-12-03 15:18:59 +01:00
return _this3 . _keydown ( event ) ;
2018-11-13 07:41:12 +01:00
} ) ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _config . pause === 'hover' ) {
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _MOUSEENTER , function ( event ) {
2020-12-03 15:18:59 +01:00
return _this3 . pause ( event ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _MOUSELEAVE , function ( event ) {
2020-12-03 15:18:59 +01:00
return _this3 . cycle ( event ) ;
2018-11-13 07:41:12 +01:00
} ) ;
}
2017-09-30 23:28:03 +02:00
2019-07-24 08:13:50 +02:00
if ( this . _config . touch && this . _touchSupported ) {
2019-02-11 20:15:34 +01:00
this . _addTouchEventListeners ( ) ;
}
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _addTouchEventListeners = function _addTouchEventListeners ( ) {
2020-12-03 15:18:59 +01:00
var _this4 = this ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var start = function start ( event ) {
2021-02-10 17:14:51 +01:00
if ( _this4 . _pointerEvent && ( event . pointerType === POINTER _TYPE _PEN || event . pointerType === POINTER _TYPE _TOUCH ) ) {
2020-12-03 15:18:59 +01:00
_this4 . touchStartX = event . clientX ;
} else if ( ! _this4 . _pointerEvent ) {
_this4 . touchStartX = event . touches [ 0 ] . clientX ;
2018-03-31 22:59:37 +02:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var move = function move ( event ) {
// ensure swiping with one touch and not pinching
2019-03-01 17:31:34 +01:00
if ( event . touches && event . touches . length > 1 ) {
2020-12-03 15:18:59 +01:00
_this4 . touchDeltaX = 0 ;
2018-11-13 07:41:12 +01:00
} else {
2020-12-03 15:18:59 +01:00
_this4 . touchDeltaX = event . touches [ 0 ] . clientX - _this4 . touchStartX ;
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var end = function end ( event ) {
2021-02-10 17:14:51 +01:00
if ( _this4 . _pointerEvent && ( event . pointerType === POINTER _TYPE _PEN || event . pointerType === POINTER _TYPE _TOUCH ) ) {
2020-12-03 15:18:59 +01:00
_this4 . touchDeltaX = event . clientX - _this4 . touchStartX ;
2018-11-13 07:41:12 +01:00
}
2020-12-03 15:18:59 +01:00
_this4 . _handleSwipe ( ) ;
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
if ( _this4 . _config . pause === 'hover' ) {
2018-11-13 07:41:12 +01:00
// 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
2020-12-03 15:18:59 +01:00
_this4 . pause ( ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if ( _this4 . touchTimeout ) {
clearTimeout ( _this4 . touchTimeout ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this4 . touchTimeout = setTimeout ( function ( event ) {
return _this4 . cycle ( event ) ;
} , TOUCHEVENT _COMPAT _WAIT + _this4 . _config . interval ) ;
2018-03-31 22:59:37 +02:00
}
} ;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
SelectorEngine . find ( SELECTOR _ITEM _IMG , this . _element ) . forEach ( function ( itemImg ) {
EventHandler . on ( itemImg , EVENT _DRAG _START , function ( e ) {
2019-03-01 17:31:34 +01:00
return e . preventDefault ( ) ;
} ) ;
2018-11-13 07:41:12 +01:00
} ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _pointerEvent ) {
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _POINTERDOWN , function ( event ) {
2018-11-13 07:41:12 +01:00
return start ( event ) ;
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _POINTERUP , function ( event ) {
2018-11-13 07:41:12 +01:00
return end ( event ) ;
} ) ;
2018-03-31 22:59:37 +02:00
2020-03-28 11:29:08 +01:00
this . _element . classList . add ( CLASS _NAME _POINTER _EVENT ) ;
2018-11-13 07:41:12 +01:00
} else {
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _TOUCHSTART , function ( event ) {
2018-11-13 07:41:12 +01:00
return start ( event ) ;
2018-03-31 22:59:37 +02:00
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _TOUCHMOVE , function ( event ) {
2018-11-13 07:41:12 +01:00
return move ( event ) ;
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _TOUCHEND , function ( event ) {
2018-11-13 07:41:12 +01:00
return end ( event ) ;
} ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _keydown = function _keydown ( event ) {
if ( /input|textarea/i . test ( event . target . tagName ) ) {
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( event . key === ARROW _LEFT _KEY ) {
event . preventDefault ( ) ;
if ( isRTL ) {
this . next ( ) ;
} else {
2018-11-13 07:41:12 +01:00
this . prev ( ) ;
2021-02-10 17:14:51 +01:00
}
} else if ( event . key === ARROW _RIGHT _KEY ) {
event . preventDefault ( ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( isRTL ) {
this . prev ( ) ;
} else {
2018-11-13 07:41:12 +01:00
this . next ( ) ;
2021-02-10 17:14:51 +01:00
}
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getItemIndex = function _getItemIndex ( element ) {
2020-03-28 11:29:08 +01:00
this . _items = element && element . parentNode ? SelectorEngine . find ( SELECTOR _ITEM , element . parentNode ) : [ ] ;
2018-11-13 07:41:12 +01:00
return this . _items . indexOf ( element ) ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getItemByDirection = function _getItemByDirection ( direction , activeElement ) {
2020-03-28 11:29:08 +01:00
var isNextDirection = direction === DIRECTION _NEXT ;
var isPrevDirection = direction === DIRECTION _PREV ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var activeIndex = this . _getItemIndex ( activeElement ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var lastItemIndex = this . _items . length - 1 ;
var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( isGoingToWrap && ! this . _config . wrap ) {
return activeElement ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var delta = direction === DIRECTION _PREV ? - 1 : 1 ;
2018-11-13 07:41:12 +01:00
var itemIndex = ( activeIndex + delta ) % this . _items . length ;
return itemIndex === - 1 ? this . _items [ this . _items . length - 1 ] : this . _items [ itemIndex ] ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _triggerSlideEvent = function _triggerSlideEvent ( relatedTarget , eventDirectionName ) {
var targetIndex = this . _getItemIndex ( relatedTarget ) ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var fromIndex = this . _getItemIndex ( SelectorEngine . findOne ( SELECTOR _ACTIVE _ITEM , this . _element ) ) ;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
return EventHandler . trigger ( this . _element , EVENT _SLIDE , {
2018-11-13 07:41:12 +01:00
relatedTarget : relatedTarget ,
direction : eventDirectionName ,
from : fromIndex ,
to : targetIndex
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _setActiveIndicatorElement = function _setActiveIndicatorElement ( element ) {
if ( this . _indicatorsElement ) {
2021-02-10 17:14:51 +01:00
var activeIndicator = SelectorEngine . findOne ( SELECTOR _ACTIVE , this . _indicatorsElement ) ;
activeIndicator . classList . remove ( CLASS _NAME _ACTIVE$1 ) ;
activeIndicator . removeAttribute ( 'aria-current' ) ;
var indicators = SelectorEngine . find ( SELECTOR _INDICATOR , this . _indicatorsElement ) ;
2019-03-01 17:31:34 +01:00
for ( var i = 0 ; i < indicators . length ; i ++ ) {
2021-02-10 17:14:51 +01:00
if ( Number . parseInt ( indicators [ i ] . getAttribute ( 'data-bs-slide-to' ) , 10 ) === this . _getItemIndex ( element ) ) {
indicators [ i ] . classList . add ( CLASS _NAME _ACTIVE$1 ) ;
indicators [ i ] . setAttribute ( 'aria-current' , 'true' ) ;
break ;
}
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2020-11-11 18:07:37 +01:00
_proto . _updateInterval = function _updateInterval ( ) {
var element = this . _activeElement || SelectorEngine . findOne ( SELECTOR _ACTIVE _ITEM , this . _element ) ;
if ( ! element ) {
return ;
}
2020-11-23 14:17:16 +01:00
var elementInterval = Number . parseInt ( element . getAttribute ( 'data-bs-interval' ) , 10 ) ;
2020-11-11 18:07:37 +01:00
if ( elementInterval ) {
this . _config . defaultInterval = this . _config . defaultInterval || this . _config . interval ;
this . _config . interval = elementInterval ;
} else {
this . _config . interval = this . _config . defaultInterval || this . _config . interval ;
}
} ;
2018-11-13 07:41:12 +01:00
_proto . _slide = function _slide ( direction , element ) {
2020-12-03 15:18:59 +01:00
var _this5 = this ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var activeElement = SelectorEngine . findOne ( SELECTOR _ACTIVE _ITEM , this . _element ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var activeElementIndex = this . _getItemIndex ( activeElement ) ;
2018-09-19 06:35:40 +02:00
2018-11-13 07:41:12 +01:00
var nextElement = element || activeElement && this . _getItemByDirection ( direction , activeElement ) ;
2018-09-19 06:35:40 +02:00
2018-11-13 07:41:12 +01:00
var nextElementIndex = this . _getItemIndex ( nextElement ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var isCycling = Boolean ( this . _interval ) ;
2021-02-10 17:14:51 +01:00
var directionalClassName = direction === DIRECTION _NEXT ? CLASS _NAME _START : CLASS _NAME _END ;
var orderClassName = direction === DIRECTION _NEXT ? CLASS _NAME _NEXT : CLASS _NAME _PREV ;
var eventDirectionName = direction === DIRECTION _NEXT ? DIRECTION _LEFT : DIRECTION _RIGHT ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if ( nextElement && nextElement . classList . contains ( CLASS _NAME _ACTIVE$1 ) ) {
2018-11-13 07:41:12 +01:00
this . _isSliding = false ;
return ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var slideEvent = this . _triggerSlideEvent ( nextElement , eventDirectionName ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( slideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! activeElement || ! nextElement ) {
// Some weirdness is happening, so we bail
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _isSliding = true ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if ( isCycling ) {
this . pause ( ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _setActiveIndicatorElement ( nextElement ) ;
2017-09-30 23:28:03 +02:00
2020-11-11 18:07:37 +01:00
this . _activeElement = nextElement ;
2020-03-28 11:29:08 +01:00
if ( this . _element . classList . contains ( CLASS _NAME _SLIDE ) ) {
2019-03-01 17:31:34 +01:00
nextElement . classList . add ( orderClassName ) ;
reflow ( nextElement ) ;
activeElement . classList . add ( directionalClassName ) ;
nextElement . classList . add ( directionalClassName ) ;
var transitionDuration = getTransitionDurationFromElement ( activeElement ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( activeElement , 'transitionend' , function ( ) {
2020-05-13 20:53:43 +02:00
nextElement . classList . remove ( directionalClassName , orderClassName ) ;
2020-03-28 11:29:08 +01:00
nextElement . classList . add ( CLASS _NAME _ACTIVE$1 ) ;
2020-05-13 20:53:43 +02:00
activeElement . classList . remove ( CLASS _NAME _ACTIVE$1 , orderClassName , directionalClassName ) ;
2020-12-03 15:18:59 +01:00
_this5 . _isSliding = false ;
2018-11-13 07:41:12 +01:00
setTimeout ( function ( ) {
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this5 . _element , EVENT _SLID , {
2019-03-01 17:31:34 +01:00
relatedTarget : nextElement ,
direction : eventDirectionName ,
from : activeElementIndex ,
to : nextElementIndex
} ) ;
2018-11-13 07:41:12 +01:00
} , 0 ) ;
2019-03-01 17:31:34 +01:00
} ) ;
emulateTransitionEnd ( activeElement , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
2020-03-28 11:29:08 +01:00
activeElement . classList . remove ( CLASS _NAME _ACTIVE$1 ) ;
nextElement . classList . add ( CLASS _NAME _ACTIVE$1 ) ;
2018-11-13 07:41:12 +01:00
this . _isSliding = false ;
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( this . _element , EVENT _SLID , {
2019-03-01 17:31:34 +01:00
relatedTarget : nextElement ,
direction : eventDirectionName ,
from : activeElementIndex ,
to : nextElementIndex
} ) ;
2018-11-13 07:41:12 +01:00
}
if ( isCycling ) {
this . cycle ( ) ;
}
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Carousel . carouselInterface = function carouselInterface ( element , config ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( element , DATA _KEY$2 ) ;
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var _config = _extends ( { } , Default , Manipulator . getDataAttributes ( element ) ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( typeof config === 'object' ) {
2020-09-14 17:12:06 +02:00
_config = _extends ( { } , _config , config ) ;
2019-03-01 17:31:34 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var action = typeof config === 'string' ? config : _config . slide ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( ! data ) {
data = new Carousel ( element , _config ) ;
}
if ( typeof config === 'number' ) {
data . to ( config ) ;
} else if ( typeof action === 'string' ) {
if ( typeof data [ action ] === 'undefined' ) {
2019-03-11 16:13:30 +01:00
throw new TypeError ( "No method named \"" + action + "\"" ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
data [ action ] ( ) ;
} else if ( _config . interval && _config . ride ) {
data . pause ( ) ;
data . cycle ( ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Carousel . jQueryInterface = function jQueryInterface ( config ) {
2019-03-01 17:31:34 +01:00
return this . each ( function ( ) {
2019-08-27 15:03:21 +02:00
Carousel . carouselInterface ( this , config ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Carousel . dataApiClickHandler = function dataApiClickHandler ( event ) {
var target = getElementFromSelector ( this ) ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
if ( ! target || ! target . classList . contains ( CLASS _NAME _CAROUSEL ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var config = _extends ( { } , Manipulator . getDataAttributes ( target ) , Manipulator . getDataAttributes ( this ) ) ;
2018-06-22 07:55:23 +02:00
2020-11-23 14:17:16 +01:00
var slideIndex = this . getAttribute ( 'data-bs-slide-to' ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( slideIndex ) {
config . interval = false ;
2018-06-22 07:55:23 +02:00
}
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Carousel . carouselInterface ( target , config ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( slideIndex ) {
2019-03-01 17:31:34 +01:00
Data . getData ( target , DATA _KEY$2 ) . to ( slideIndex ) ;
2018-11-13 07:41:12 +01:00
}
event . preventDefault ( ) ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Carousel , null , [ {
2020-12-03 15:18:59 +01:00
key : "Default" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return Default ;
2018-11-13 07:41:12 +01:00
}
} , {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY$2 ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
2018-03-31 22:59:37 +02:00
return Carousel ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _CLICK _DATA _API$2 , SELECTOR _DATA _SLIDE , Carousel . dataApiClickHandler ) ;
EventHandler . on ( window , EVENT _LOAD _DATA _API , function ( ) {
var carousels = SelectorEngine . find ( SELECTOR _DATA _RIDE ) ;
2018-11-13 07:41:12 +01:00
for ( var i = 0 , len = carousels . length ; i < len ; i ++ ) {
2019-08-27 15:03:21 +02:00
Carousel . carouselInterface ( carousels [ i ] , Data . getData ( carousels [ i ] , DATA _KEY$2 ) ) ;
2018-11-13 07:41:12 +01:00
}
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Carousel to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$2 , Carousel ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var NAME$3 = 'collapse' ;
var DATA _KEY$3 = 'bs.collapse' ;
var EVENT _KEY$3 = "." + DATA _KEY$3 ;
var DATA _API _KEY$3 = '.data-api' ;
var Default$1 = {
toggle : true ,
parent : ''
} ;
var DefaultType$1 = {
toggle : 'boolean' ,
parent : '(string|element)'
} ;
2020-03-28 11:29:08 +01:00
var EVENT _SHOW = "show" + EVENT _KEY$3 ;
var EVENT _SHOWN = "shown" + EVENT _KEY$3 ;
var EVENT _HIDE = "hide" + EVENT _KEY$3 ;
var EVENT _HIDDEN = "hidden" + EVENT _KEY$3 ;
var EVENT _CLICK _DATA _API$3 = "click" + EVENT _KEY$3 + DATA _API _KEY$3 ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _SHOW$1 = 'show' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _COLLAPSE = 'collapse' ;
var CLASS _NAME _COLLAPSING = 'collapsing' ;
var CLASS _NAME _COLLAPSED = 'collapsed' ;
var WIDTH = 'width' ;
var HEIGHT = 'height' ;
var SELECTOR _ACTIVES = '.show, .collapsing' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _TOGGLE$1 = '[data-bs-toggle="collapse"]' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-01-04 01:03:22 +01:00
2020-12-03 15:18:59 +01:00
var Collapse = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Collapse , _BaseComponent ) ;
2018-11-13 07:41:12 +01:00
function Collapse ( element , config ) {
2020-12-03 15:18:59 +01:00
var _this ;
_this = _BaseComponent . call ( this , element ) || this ;
_this . _isTransitioning = false ;
_this . _config = _this . _getConfig ( config ) ;
_this . _triggerArray = SelectorEngine . find ( SELECTOR _DATA _TOGGLE$1 + "[href=\"#" + element . id + "\"]," + ( SELECTOR _DATA _TOGGLE$1 + "[data-bs-target=\"#" + element . id + "\"]" ) ) ;
2020-03-28 11:29:08 +01:00
var toggleList = SelectorEngine . find ( SELECTOR _DATA _TOGGLE$1 ) ;
2018-11-13 07:41:12 +01:00
for ( var i = 0 , len = toggleList . length ; i < len ; i ++ ) {
var elem = toggleList [ i ] ;
2019-03-01 17:31:34 +01:00
var selector = getSelectorFromElement ( elem ) ;
2020-03-28 11:29:08 +01:00
var filterElement = SelectorEngine . find ( selector ) . filter ( function ( foundElem ) {
2018-11-13 07:41:12 +01:00
return foundElem === element ;
} ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( selector !== null && filterElement . length ) {
2020-12-03 15:18:59 +01:00
_this . _selector = selector ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this . _triggerArray . push ( elem ) ;
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this . _parent = _this . _config . parent ? _this . _getParent ( ) : null ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if ( ! _this . _config . parent ) {
_this . _addAriaAndCollapsedClass ( _this . _element , _this . _triggerArray ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if ( _this . _config . toggle ) {
_this . toggle ( ) ;
2018-11-13 07:41:12 +01:00
}
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Collapse . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . toggle = function toggle ( ) {
2021-02-10 17:14:51 +01:00
if ( this . _element . classList . contains ( CLASS _NAME _SHOW$1 ) ) {
2018-11-13 07:41:12 +01:00
this . hide ( ) ;
} else {
this . show ( ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . show = function show ( ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . _isTransitioning || this . _element . classList . contains ( CLASS _NAME _SHOW$1 ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2018-09-17 21:34:34 +02:00
2018-11-13 07:41:12 +01:00
var actives ;
var activesData ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _parent ) {
2020-03-28 11:29:08 +01:00
actives = SelectorEngine . find ( SELECTOR _ACTIVES , this . _parent ) . filter ( function ( elem ) {
2020-12-03 15:18:59 +01:00
if ( typeof _this2 . _config . parent === 'string' ) {
return elem . getAttribute ( 'data-bs-parent' ) === _this2 . _config . parent ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
return elem . classList . contains ( CLASS _NAME _COLLAPSE ) ;
2018-11-13 07:41:12 +01:00
} ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( actives . length === 0 ) {
actives = null ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var container = SelectorEngine . findOne ( this . _selector ) ;
2018-11-13 07:41:12 +01:00
if ( actives ) {
2020-11-23 14:17:16 +01:00
var tempActiveData = actives . find ( function ( elem ) {
2019-03-01 17:31:34 +01:00
return container !== elem ;
} ) ;
2020-11-23 14:17:16 +01:00
activesData = tempActiveData ? Data . getData ( tempActiveData , DATA _KEY$3 ) : null ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( activesData && activesData . _isTransitioning ) {
2018-03-31 22:59:37 +02:00
return ;
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var startEvent = EventHandler . trigger ( this . _element , EVENT _SHOW ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( startEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( actives ) {
2019-03-01 17:31:34 +01:00
actives . forEach ( function ( elemActive ) {
if ( container !== elemActive ) {
2019-08-27 15:03:21 +02:00
Collapse . collapseInterface ( elemActive , 'hide' ) ;
2019-03-01 17:31:34 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( ! activesData ) {
Data . setData ( elemActive , DATA _KEY$3 , null ) ;
}
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var dimension = this . _getDimension ( ) ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this . _element . classList . remove ( CLASS _NAME _COLLAPSE ) ;
2019-03-01 17:31:34 +01:00
2020-03-28 11:29:08 +01:00
this . _element . classList . add ( CLASS _NAME _COLLAPSING ) ;
2019-03-01 17:31:34 +01:00
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = 0 ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _triggerArray . length ) {
2019-03-01 17:31:34 +01:00
this . _triggerArray . forEach ( function ( element ) {
2020-03-28 11:29:08 +01:00
element . classList . remove ( CLASS _NAME _COLLAPSED ) ;
2019-03-01 17:31:34 +01:00
element . setAttribute ( 'aria-expanded' , true ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . setTransitioning ( true ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
_this2 . _element . classList . remove ( CLASS _NAME _COLLAPSING ) ;
2019-03-01 17:31:34 +01:00
2021-02-10 17:14:51 +01:00
_this2 . _element . classList . add ( CLASS _NAME _COLLAPSE , CLASS _NAME _SHOW$1 ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
_this2 . _element . style [ dimension ] = '' ;
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
_this2 . setTransitioning ( false ) ;
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this2 . _element , EVENT _SHOWN ) ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var capitalizedDimension = dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ;
var scrollSize = "scroll" + capitalizedDimension ;
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _element , 'transitionend' , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = this . _element [ scrollSize ] + "px" ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . hide = function hide ( ) {
2020-12-03 15:18:59 +01:00
var _this3 = this ;
2018-11-13 07:41:12 +01:00
2021-02-10 17:14:51 +01:00
if ( this . _isTransitioning || ! this . _element . classList . contains ( CLASS _NAME _SHOW$1 ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var startEvent = EventHandler . trigger ( this . _element , EVENT _HIDE ) ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if ( startEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var dimension = this . _getDimension ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = this . _element . getBoundingClientRect ( ) [ dimension ] + "px" ;
2019-03-01 17:31:34 +01:00
reflow ( this . _element ) ;
2020-03-28 11:29:08 +01:00
this . _element . classList . add ( CLASS _NAME _COLLAPSING ) ;
2019-03-01 17:31:34 +01:00
2021-02-10 17:14:51 +01:00
this . _element . classList . remove ( CLASS _NAME _COLLAPSE , CLASS _NAME _SHOW$1 ) ;
2019-03-01 17:31:34 +01:00
2018-11-13 07:41:12 +01:00
var triggerArrayLength = this . _triggerArray . length ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( triggerArrayLength > 0 ) {
for ( var i = 0 ; i < triggerArrayLength ; i ++ ) {
var trigger = this . _triggerArray [ i ] ;
2019-08-27 15:03:21 +02:00
var elem = getElementFromSelector ( trigger ) ;
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
if ( elem && ! elem . classList . contains ( CLASS _NAME _SHOW$1 ) ) {
2020-03-28 11:29:08 +01:00
trigger . classList . add ( CLASS _NAME _COLLAPSED ) ;
2019-08-27 15:03:21 +02:00
trigger . setAttribute ( 'aria-expanded' , false ) ;
2017-09-06 06:05:12 +02:00
}
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . setTransitioning ( true ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
_this3 . setTransitioning ( false ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this3 . _element . classList . remove ( CLASS _NAME _COLLAPSING ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
_this3 . _element . classList . add ( CLASS _NAME _COLLAPSE ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this3 . _element , EVENT _HIDDEN ) ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = '' ;
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _element , 'transitionend' , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . setTransitioning = function setTransitioning ( isTransitioning ) {
this . _isTransitioning = isTransitioning ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2018-11-13 07:41:12 +01:00
this . _config = null ;
this . _parent = null ;
this . _triggerArray = null ;
this . _isTransitioning = null ;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-09-14 17:12:06 +02:00
config = _extends ( { } , Default$1 , config ) ;
2018-11-13 07:41:12 +01:00
config . toggle = Boolean ( config . toggle ) ; // Coerce string values
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$3 , config , DefaultType$1 ) ;
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getDimension = function _getDimension ( ) {
2020-09-14 17:12:06 +02:00
return this . _element . classList . contains ( WIDTH ) ? WIDTH : HEIGHT ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getParent = function _getParent ( ) {
2020-12-03 15:18:59 +01:00
var _this4 = this ;
2017-09-06 06:05:12 +02:00
2019-03-11 16:13:30 +01:00
var parent = this . _config . parent ;
2017-09-30 23:28:03 +02:00
2019-03-11 16:13:30 +01:00
if ( isElement ( parent ) ) {
// it's a jQuery object
if ( typeof parent . jquery !== 'undefined' || typeof parent [ 0 ] !== 'undefined' ) {
parent = parent [ 0 ] ;
2018-11-13 07:41:12 +01:00
}
} else {
2019-03-11 16:13:30 +01:00
parent = SelectorEngine . findOne ( parent ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-11-23 14:17:16 +01:00
var selector = SELECTOR _DATA _TOGGLE$1 + "[data-bs-parent=\"" + parent + "\"]" ;
2020-03-28 11:29:08 +01:00
SelectorEngine . find ( selector , parent ) . forEach ( function ( element ) {
2019-08-27 15:03:21 +02:00
var selected = getElementFromSelector ( element ) ;
2019-07-24 08:13:50 +02:00
2020-12-03 15:18:59 +01:00
_this4 . _addAriaAndCollapsedClass ( selected , [ element ] ) ;
2018-11-13 07:41:12 +01:00
} ) ;
return parent ;
} ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
_proto . _addAriaAndCollapsedClass = function _addAriaAndCollapsedClass ( element , triggerArray ) {
2020-09-14 17:12:06 +02:00
if ( ! element || ! triggerArray . length ) {
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var isOpen = element . classList . contains ( CLASS _NAME _SHOW$1 ) ;
2020-09-14 17:12:06 +02:00
triggerArray . forEach ( function ( elem ) {
if ( isOpen ) {
elem . classList . remove ( CLASS _NAME _COLLAPSED ) ;
} else {
elem . classList . add ( CLASS _NAME _COLLAPSED ) ;
2019-03-01 17:31:34 +01:00
}
2020-09-14 17:12:06 +02:00
elem . setAttribute ( 'aria-expanded' , isOpen ) ;
} ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Collapse . collapseInterface = function collapseInterface ( element , config ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( element , DATA _KEY$3 ) ;
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var _config = _extends ( { } , Default$1 , Manipulator . getDataAttributes ( element ) , typeof config === 'object' && config ? config : { } ) ;
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
if ( ! data && _config . toggle && typeof config === 'string' && /show|hide/ . test ( config ) ) {
2019-03-01 17:31:34 +01:00
_config . toggle = false ;
}
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
if ( ! data ) {
data = new Collapse ( element , _config ) ;
}
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
2019-03-11 16:13:30 +01:00
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
data [ config ] ( ) ;
}
} ;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Collapse . jQueryInterface = function jQueryInterface ( config ) {
2019-03-01 17:31:34 +01:00
return this . each ( function ( ) {
2019-08-27 15:03:21 +02:00
Collapse . collapseInterface ( this , config ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Collapse , null , [ {
2020-12-03 15:18:59 +01:00
key : "Default" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return Default$1 ;
2018-11-13 07:41:12 +01:00
}
} , {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY$3 ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return Collapse ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 23:28:03 +02:00
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _CLICK _DATA _API$3 , SELECTOR _DATA _TOGGLE$1 , function ( event ) {
2018-11-13 07:41:12 +01:00
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
2021-02-10 17:14:51 +01:00
if ( event . target . tagName === 'A' || event . delegateTarget && event . delegateTarget . tagName === 'A' ) {
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
var triggerData = Manipulator . getDataAttributes ( this ) ;
var selector = getSelectorFromElement ( this ) ;
2020-03-28 11:29:08 +01:00
var selectorElements = SelectorEngine . find ( selector ) ;
2019-03-01 17:31:34 +01:00
selectorElements . forEach ( function ( element ) {
var data = Data . getData ( element , DATA _KEY$3 ) ;
var 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 ;
}
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Collapse . collapseInterface ( element , config ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Collapse to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$3 , Collapse ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var top = 'top' ;
var bottom = 'bottom' ;
var right = 'right' ;
var left = 'left' ;
var auto = 'auto' ;
var basePlacements = [ top , bottom , right , left ] ;
var start = 'start' ;
var end = 'end' ;
var clippingParents = 'clippingParents' ;
var viewport = 'viewport' ;
var popper = 'popper' ;
var reference = 'reference' ;
var variationPlacements = /*#__PURE__*/ basePlacements . reduce ( function ( acc , placement ) {
return acc . concat ( [ placement + "-" + start , placement + "-" + end ] ) ;
} , [ ] ) ;
var placements = /*#__PURE__*/ [ ] . concat ( basePlacements , [ auto ] ) . reduce ( function ( acc , placement ) {
return acc . concat ( [ placement , placement + "-" + start , placement + "-" + end ] ) ;
} , [ ] ) ; // modifiers that need to read the DOM
var beforeRead = 'beforeRead' ;
var read = 'read' ;
var afterRead = 'afterRead' ; // pure-logic modifiers
var beforeMain = 'beforeMain' ;
var main = 'main' ;
var afterMain = 'afterMain' ; // modifier with the purpose to write to the DOM (or write into a framework state)
var beforeWrite = 'beforeWrite' ;
var write = 'write' ;
var afterWrite = 'afterWrite' ;
var modifierPhases = [ beforeRead , read , afterRead , beforeMain , main , afterMain , beforeWrite , write , afterWrite ] ;
function getNodeName ( element ) {
return element ? ( element . nodeName || '' ) . toLowerCase ( ) : null ;
}
2019-11-08 09:11:23 +01:00
2020-12-07 16:50:24 +01:00
/*:: import type { Window } from '../types'; */
/*:: declare function getWindow(node: Node | Window): Window; */
function getWindow ( node ) {
if ( node . toString ( ) !== '[object Window]' ) {
var ownerDocument = node . ownerDocument ;
return ownerDocument ? ownerDocument . defaultView || window : window ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
return node ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
/ * : : d e c l a r e f u n c t i o n i s E l e m e n t ( n o d e : m i x e d ) : b o o l e a n % c h e c k s ( n o d e i n s t a n c e o f
Element ) ; * /
2017-10-25 21:35:07 +02:00
2020-12-07 16:50:24 +01:00
function isElement$1 ( node ) {
var OwnElement = getWindow ( node ) . Element ;
return node instanceof OwnElement || node instanceof Element ;
}
/ * : : d e c l a r e f u n c t i o n i s H T M L E l e m e n t ( n o d e : m i x e d ) : b o o l e a n % c h e c k s ( n o d e i n s t a n c e o f
HTMLElement ) ; * /
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function isHTMLElement ( node ) {
var OwnElement = getWindow ( node ) . HTMLElement ;
return node instanceof OwnElement || node instanceof HTMLElement ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
/ * : : d e c l a r e f u n c t i o n i s S h a d o w R o o t ( n o d e : m i x e d ) : b o o l e a n % c h e c k s ( n o d e i n s t a n c e o f
ShadowRoot ) ; * /
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function isShadowRoot ( node ) {
var OwnElement = getWindow ( node ) . ShadowRoot ;
return node instanceof OwnElement || node instanceof ShadowRoot ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
// and applies them to the HTMLElements such as popper and arrow
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function applyStyles ( _ref ) {
var state = _ref . state ;
Object . keys ( state . elements ) . forEach ( function ( name ) {
var style = state . styles [ name ] || { } ;
var attributes = state . attributes [ name ] || { } ;
var element = state . elements [ name ] ; // arrow is optional + virtual elements
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( ! isHTMLElement ( element ) || ! getNodeName ( element ) ) {
return ;
} // Flow doesn't support to extend this property, but it's the most
// effective way to apply styles to an HTMLElement
2021-02-10 17:14:51 +01:00
// $FlowFixMe[cannot-write]
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
Object . assign ( element . style , style ) ;
Object . keys ( attributes ) . forEach ( function ( name ) {
var value = attributes [ name ] ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( value === false ) {
element . removeAttribute ( name ) ;
} else {
element . setAttribute ( name , value === true ? '' : value ) ;
}
} ) ;
} ) ;
2019-11-08 09:11:23 +01:00
}
2020-12-07 16:50:24 +01:00
function effect ( _ref2 ) {
var state = _ref2 . state ;
var initialStyles = {
popper : {
position : state . options . strategy ,
left : '0' ,
top : '0' ,
margin : '0'
} ,
arrow : {
position : 'absolute'
} ,
reference : { }
} ;
Object . assign ( state . elements . popper . style , initialStyles . popper ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( state . elements . arrow ) {
Object . assign ( state . elements . arrow . style , initialStyles . arrow ) ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
return function ( ) {
Object . keys ( state . elements ) . forEach ( function ( name ) {
var element = state . elements [ name ] ;
var attributes = state . attributes [ name ] || { } ;
var styleProperties = Object . keys ( state . styles . hasOwnProperty ( name ) ? state . styles [ name ] : initialStyles [ name ] ) ; // Set all values to an empty string to unset them
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var style = styleProperties . reduce ( function ( style , property ) {
style [ property ] = '' ;
return style ;
} , { } ) ; // arrow is optional + virtual elements
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( ! isHTMLElement ( element ) || ! getNodeName ( element ) ) {
return ;
2021-02-10 17:14:51 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
Object . assign ( element . style , style ) ;
Object . keys ( attributes ) . forEach ( function ( attribute ) {
element . removeAttribute ( attribute ) ;
} ) ;
} ) ;
} ;
} // eslint-disable-next-line import/no-unused-modules
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var applyStyles$1 = {
name : 'applyStyles' ,
enabled : true ,
phase : 'write' ,
fn : applyStyles ,
effect : effect ,
requires : [ 'computeStyles' ]
} ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getBasePlacement ( placement ) {
return placement . split ( '-' ) [ 0 ] ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
// Returns the layout rect of an element relative to its offsetParent. Layout
// means it doesn't take into account transforms.
function getLayoutRect ( element ) {
return {
x : element . offsetLeft ,
y : element . offsetTop ,
width : element . offsetWidth ,
height : element . offsetHeight
} ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function contains ( parent , child ) {
var rootNode = child . getRootNode && child . getRootNode ( ) ; // First, attempt with faster native method
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( parent . contains ( child ) ) {
return true ;
} // then fallback to custom implementation with Shadow DOM support
else if ( rootNode && isShadowRoot ( rootNode ) ) {
var next = child ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
do {
if ( next && parent . isSameNode ( next ) ) {
return true ;
2021-02-10 17:14:51 +01:00
} // $FlowFixMe[prop-missing]: need a better way to handle this...
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
next = next . parentNode || next . host ;
} while ( next ) ;
} // Give up, the result is false
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return false ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getComputedStyle$1 ( element ) {
return getWindow ( element ) . getComputedStyle ( element ) ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function isTableElement ( element ) {
return [ 'table' , 'td' , 'th' ] . indexOf ( getNodeName ( element ) ) >= 0 ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getDocumentElement ( element ) {
2021-02-10 17:14:51 +01:00
// $FlowFixMe[incompatible-return]: assume body is always available
return ( ( isElement$1 ( element ) ? element . ownerDocument : // $FlowFixMe[prop-missing]
element . document ) || window . document ) . documentElement ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getParentNode ( element ) {
if ( getNodeName ( element ) === 'html' ) {
return element ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
return ( // this is a quicker (but less type safe) way to save quite some bytes from the bundle
// $FlowFixMe[incompatible-return]
// $FlowFixMe[prop-missing]
2020-12-07 16:50:24 +01:00
element . assignedSlot || // step into the shadow DOM of the parent of a slotted node
element . parentNode || // DOM Element detected
2021-02-10 17:14:51 +01:00
// $FlowFixMe[incompatible-return]: need a better way to handle this...
2020-12-07 16:50:24 +01:00
element . host || // ShadowRoot detected
2021-02-10 17:14:51 +01:00
// $FlowFixMe[incompatible-call]: HTMLElement is a Node
2020-12-07 16:50:24 +01:00
getDocumentElement ( element ) // fallback
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
) ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getTrueOffsetParent ( element ) {
if ( ! isHTMLElement ( element ) || // https://github.com/popperjs/popper-core/issues/837
getComputedStyle$1 ( element ) . position === 'fixed' ) {
return null ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var offsetParent = element . offsetParent ;
if ( offsetParent ) {
var html = getDocumentElement ( offsetParent ) ;
if ( getNodeName ( offsetParent ) === 'body' && getComputedStyle$1 ( offsetParent ) . position === 'static' && getComputedStyle$1 ( html ) . position !== 'static' ) {
return html ;
2018-03-31 22:59:37 +02:00
}
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return offsetParent ;
} // `.offsetParent` reports `null` for fixed elements, while absolute elements
// return the containing block
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getContainingBlock ( element ) {
var currentNode = getParentNode ( element ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
while ( isHTMLElement ( currentNode ) && [ 'html' , 'body' ] . indexOf ( getNodeName ( currentNode ) ) < 0 ) {
var css = getComputedStyle$1 ( currentNode ) ; // This is non-exhaustive but covers the most common CSS properties that
// create a containing block.
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( css . transform !== 'none' || css . perspective !== 'none' || css . willChange && css . willChange !== 'auto' ) {
return currentNode ;
} else {
currentNode = currentNode . parentNode ;
}
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
return null ;
} // Gets the closest ancestor positioned element. Handles some edge cases,
// such as table ancestors and cross browser bugs.
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getOffsetParent ( element ) {
var window = getWindow ( element ) ;
var offsetParent = getTrueOffsetParent ( element ) ;
while ( offsetParent && isTableElement ( offsetParent ) && getComputedStyle$1 ( offsetParent ) . position === 'static' ) {
offsetParent = getTrueOffsetParent ( offsetParent ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( offsetParent && getNodeName ( offsetParent ) === 'body' && getComputedStyle$1 ( offsetParent ) . position === 'static' ) {
return window ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return offsetParent || getContainingBlock ( element ) || window ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getMainAxisFromPlacement ( placement ) {
return [ 'top' , 'bottom' ] . indexOf ( placement ) >= 0 ? 'x' : 'y' ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function within ( min , value , max ) {
return Math . max ( min , Math . min ( value , max ) ) ;
}
function getFreshSideObject ( ) {
return {
top : 0 ,
right : 0 ,
bottom : 0 ,
left : 0
2018-03-31 22:59:37 +02:00
} ;
2020-12-07 16:50:24 +01:00
}
function mergePaddingObject ( paddingObject ) {
return Object . assign ( Object . assign ( { } , getFreshSideObject ( ) ) , paddingObject ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function expandToHashMap ( value , keys ) {
return keys . reduce ( function ( hashMap , key ) {
hashMap [ key ] = value ;
return hashMap ;
} , { } ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function arrow ( _ref ) {
var _state$modifiersData$ ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var state = _ref . state ,
name = _ref . name ;
var arrowElement = state . elements . arrow ;
var popperOffsets = state . modifiersData . popperOffsets ;
var basePlacement = getBasePlacement ( state . placement ) ;
var axis = getMainAxisFromPlacement ( basePlacement ) ;
var isVertical = [ left , right ] . indexOf ( basePlacement ) >= 0 ;
var len = isVertical ? 'height' : 'width' ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( ! arrowElement || ! popperOffsets ) {
return ;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var paddingObject = state . modifiersData [ name + "#persistent" ] . padding ;
var arrowRect = getLayoutRect ( arrowElement ) ;
var minProp = axis === 'y' ? top : left ;
var maxProp = axis === 'y' ? bottom : right ;
var endDiff = state . rects . reference [ len ] + state . rects . reference [ axis ] - popperOffsets [ axis ] - state . rects . popper [ len ] ;
var startDiff = popperOffsets [ axis ] - state . rects . reference [ axis ] ;
var arrowOffsetParent = getOffsetParent ( arrowElement ) ;
var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent . clientHeight || 0 : arrowOffsetParent . clientWidth || 0 : 0 ;
var centerToReference = endDiff / 2 - startDiff / 2 ; // Make sure the arrow doesn't overflow the popper if the center point is
// outside of the popper bounds
var min = paddingObject [ minProp ] ;
var max = clientSize - arrowRect [ len ] - paddingObject [ maxProp ] ;
var center = clientSize / 2 - arrowRect [ len ] / 2 + centerToReference ;
var offset = within ( min , center , max ) ; // Prevents breaking syntax highlighting...
var axisProp = axis ;
state . modifiersData [ name ] = ( _state$modifiersData$ = { } , _state$modifiersData$ [ axisProp ] = offset , _state$modifiersData$ . centerOffset = offset - center , _state$modifiersData$ ) ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function effect$1 ( _ref2 ) {
var state = _ref2 . state ,
options = _ref2 . options ,
name = _ref2 . name ;
var _options$element = options . element ,
arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element ,
_options$padding = options . padding ,
padding = _options$padding === void 0 ? 0 : _options$padding ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( arrowElement == null ) {
return ;
} // CSS selector
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( typeof arrowElement === 'string' ) {
arrowElement = state . elements . popper . querySelector ( arrowElement ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( ! arrowElement ) {
return ;
}
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( ! contains ( state . elements . popper , arrowElement ) ) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
state . elements . arrow = arrowElement ;
state . modifiersData [ name + "#persistent" ] = {
padding : mergePaddingObject ( typeof padding !== 'number' ? padding : expandToHashMap ( padding , basePlacements ) )
} ;
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var arrow$1 = {
name : 'arrow' ,
enabled : true ,
phase : 'main' ,
fn : arrow ,
effect : effect$1 ,
requires : [ 'popperOffsets' ] ,
requiresIfExists : [ 'preventOverflow' ]
} ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var unsetSides = {
top : 'auto' ,
right : 'auto' ,
bottom : 'auto' ,
left : 'auto'
} ; // Round the offsets to the nearest suitable subpixel based on the DPR.
// Zooming can change the DPR, but it seems to report a value that will
// cleanly divide the values into the appropriate subpixels.
2021-02-10 17:14:51 +01:00
function roundOffsetsByDPR ( _ref ) {
2020-12-07 16:50:24 +01:00
var x = _ref . x ,
y = _ref . y ;
var win = window ;
var dpr = win . devicePixelRatio || 1 ;
return {
x : Math . round ( x * dpr ) / dpr || 0 ,
y : Math . round ( y * dpr ) / dpr || 0
} ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function mapToStyles ( _ref2 ) {
var _Object$assign2 ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var popper = _ref2 . popper ,
popperRect = _ref2 . popperRect ,
placement = _ref2 . placement ,
offsets = _ref2 . offsets ,
position = _ref2 . position ,
gpuAcceleration = _ref2 . gpuAcceleration ,
2021-02-10 17:14:51 +01:00
adaptive = _ref2 . adaptive ,
roundOffsets = _ref2 . roundOffsets ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var _ref3 = roundOffsets ? roundOffsetsByDPR ( offsets ) : offsets ,
_ref3$x = _ref3 . x ,
x = _ref3$x === void 0 ? 0 : _ref3$x ,
_ref3$y = _ref3 . y ,
y = _ref3$y === void 0 ? 0 : _ref3$y ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var hasX = offsets . hasOwnProperty ( 'x' ) ;
var hasY = offsets . hasOwnProperty ( 'y' ) ;
var sideX = left ;
var sideY = top ;
var win = window ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( adaptive ) {
var offsetParent = getOffsetParent ( popper ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( offsetParent === getWindow ( popper ) ) {
offsetParent = getDocumentElement ( popper ) ;
2021-02-10 17:14:51 +01:00
} // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
/*:: offsetParent = (offsetParent: Element); */
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( placement === top ) {
sideY = bottom ;
y -= offsetParent . clientHeight - popperRect . height ;
y *= gpuAcceleration ? 1 : - 1 ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( placement === left ) {
sideX = right ;
x -= offsetParent . clientWidth - popperRect . width ;
x *= gpuAcceleration ? 1 : - 1 ;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var commonStyles = Object . assign ( {
position : position
} , adaptive && unsetSides ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( gpuAcceleration ) {
var _Object$assign ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return Object . assign ( Object . assign ( { } , commonStyles ) , { } , ( _Object$assign = { } , _Object$assign [ sideY ] = hasY ? '0' : '' , _Object$assign [ sideX ] = hasX ? '0' : '' , _Object$assign . transform = ( win . devicePixelRatio || 1 ) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)" , _Object$assign ) ) ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return Object . assign ( Object . assign ( { } , commonStyles ) , { } , ( _Object$assign2 = { } , _Object$assign2 [ sideY ] = hasY ? y + "px" : '' , _Object$assign2 [ sideX ] = hasX ? x + "px" : '' , _Object$assign2 . transform = '' , _Object$assign2 ) ) ;
2017-09-06 06:05:12 +02:00
}
2021-02-10 17:14:51 +01:00
function computeStyles ( _ref4 ) {
var state = _ref4 . state ,
options = _ref4 . options ;
2020-12-07 16:50:24 +01:00
var _options$gpuAccelerat = options . gpuAcceleration ,
gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat ,
_options$adaptive = options . adaptive ,
2021-02-10 17:14:51 +01:00
adaptive = _options$adaptive === void 0 ? true : _options$adaptive ,
_options$roundOffsets = options . roundOffsets ,
roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets ;
2020-12-07 16:50:24 +01:00
var commonStyles = {
placement : getBasePlacement ( state . placement ) ,
popper : state . elements . popper ,
popperRect : state . rects . popper ,
gpuAcceleration : gpuAcceleration
} ;
if ( state . modifiersData . popperOffsets != null ) {
state . styles . popper = Object . assign ( Object . assign ( { } , state . styles . popper ) , mapToStyles ( Object . assign ( Object . assign ( { } , commonStyles ) , { } , {
offsets : state . modifiersData . popperOffsets ,
position : state . options . strategy ,
2021-02-10 17:14:51 +01:00
adaptive : adaptive ,
roundOffsets : roundOffsets
2020-12-07 16:50:24 +01:00
} ) ) ) ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
if ( state . modifiersData . arrow != null ) {
state . styles . arrow = Object . assign ( Object . assign ( { } , state . styles . arrow ) , mapToStyles ( Object . assign ( Object . assign ( { } , commonStyles ) , { } , {
offsets : state . modifiersData . arrow ,
position : 'absolute' ,
2021-02-10 17:14:51 +01:00
adaptive : false ,
roundOffsets : roundOffsets
2020-12-07 16:50:24 +01:00
} ) ) ) ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
state . attributes . popper = Object . assign ( Object . assign ( { } , state . attributes . popper ) , { } , {
'data-popper-placement' : state . placement
2017-09-06 06:05:12 +02:00
} ) ;
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var computeStyles$1 = {
name : 'computeStyles' ,
enabled : true ,
phase : 'beforeWrite' ,
fn : computeStyles ,
data : { }
} ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var passive = {
passive : true
} ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function effect$2 ( _ref ) {
var state = _ref . state ,
instance = _ref . instance ,
options = _ref . options ;
var _options$scroll = options . scroll ,
scroll = _options$scroll === void 0 ? true : _options$scroll ,
_options$resize = options . resize ,
resize = _options$resize === void 0 ? true : _options$resize ;
var window = getWindow ( state . elements . popper ) ;
var scrollParents = [ ] . concat ( state . scrollParents . reference , state . scrollParents . popper ) ;
if ( scroll ) {
scrollParents . forEach ( function ( scrollParent ) {
scrollParent . addEventListener ( 'scroll' , instance . update , passive ) ;
} ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( resize ) {
window . addEventListener ( 'resize' , instance . update , passive ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return function ( ) {
if ( scroll ) {
scrollParents . forEach ( function ( scrollParent ) {
scrollParent . removeEventListener ( 'scroll' , instance . update , passive ) ;
} ) ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( resize ) {
window . removeEventListener ( 'resize' , instance . update , passive ) ;
}
2018-03-31 22:59:37 +02:00
} ;
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var eventListeners = {
name : 'eventListeners' ,
enabled : true ,
phase : 'write' ,
fn : function fn ( ) { } ,
effect : effect$2 ,
data : { }
} ;
var hash = {
left : 'right' ,
right : 'left' ,
bottom : 'top' ,
top : 'bottom'
} ;
2018-03-31 22:59:37 +02:00
function getOppositePlacement ( placement ) {
return placement . replace ( /left|right|bottom|top/g , function ( matched ) {
return hash [ matched ] ;
} ) ;
}
2020-12-07 16:50:24 +01:00
var hash$1 = {
start : 'end' ,
end : 'start'
} ;
function getOppositeVariationPlacement ( placement ) {
return placement . replace ( /start|end/g , function ( matched ) {
return hash$1 [ matched ] ;
} ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getBoundingClientRect ( element ) {
var rect = element . getBoundingClientRect ( ) ;
return {
width : rect . width ,
height : rect . height ,
top : rect . top ,
right : rect . right ,
bottom : rect . bottom ,
left : rect . left ,
x : rect . left ,
y : rect . top
2018-03-31 22:59:37 +02:00
} ;
}
2020-12-07 16:50:24 +01:00
function getWindowScroll ( node ) {
var win = getWindow ( node ) ;
var scrollLeft = win . pageXOffset ;
var scrollTop = win . pageYOffset ;
return {
scrollLeft : scrollLeft ,
scrollTop : scrollTop
} ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getWindowScrollBarX ( element ) {
// If <html> has a CSS width greater than the viewport, then this will be
// incorrect for RTL.
// Popper 1 is broken in this case and never had a bug report so let's assume
// it's not an issue. I don't think anyone ever specifies width on <html>
// anyway.
// Browsers where the left scrollbar doesn't cause an issue report `0` for
// this (e.g. Edge 2019, IE11, Safari)
return getBoundingClientRect ( getDocumentElement ( element ) ) . left + getWindowScroll ( element ) . scrollLeft ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getViewportRect ( element ) {
var win = getWindow ( element ) ;
var html = getDocumentElement ( element ) ;
var visualViewport = win . visualViewport ;
var width = html . clientWidth ;
var height = html . clientHeight ;
var x = 0 ;
var y = 0 ; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
// can be obscured underneath it.
// Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
// if it isn't open, so if this isn't available, the popper will be detected
// to overflow the bottom of the screen too early.
if ( visualViewport ) {
width = visualViewport . width ;
height = visualViewport . height ; // Uses Layout Viewport (like Chrome; Safari does not currently)
// In Chrome, it returns a value very close to 0 (+/-) but contains rounding
// errors due to floating point numbers, so we need to check precision.
// Safari returns a number <= 0, usually < -1 when pinch-zoomed
// Feature detection fails in mobile emulation mode in Chrome.
// Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
// 0.001
// Fallback here: "Not Safari" userAgent
if ( ! /^((?!chrome|android).)*safari/i . test ( navigator . userAgent ) ) {
x = visualViewport . offsetLeft ;
y = visualViewport . offsetTop ;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return {
width : width ,
height : height ,
x : x + getWindowScrollBarX ( element ) ,
y : y
2017-09-06 06:05:12 +02:00
} ;
2020-12-07 16:50:24 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
// of the `<html>` and `<body>` rect bounds if horizontally scrollable
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getDocumentRect ( element ) {
var html = getDocumentElement ( element ) ;
var winScroll = getWindowScroll ( element ) ;
var body = element . ownerDocument . body ;
var width = Math . max ( html . scrollWidth , html . clientWidth , body ? body . scrollWidth : 0 , body ? body . clientWidth : 0 ) ;
var height = Math . max ( html . scrollHeight , html . clientHeight , body ? body . scrollHeight : 0 , body ? body . clientHeight : 0 ) ;
var x = - winScroll . scrollLeft + getWindowScrollBarX ( element ) ;
var y = - winScroll . scrollTop ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( getComputedStyle$1 ( body || html ) . direction === 'rtl' ) {
x += Math . max ( html . clientWidth , body ? body . clientWidth : 0 ) - width ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return {
width : width ,
height : height ,
x : x ,
y : y
} ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function isScrollParent ( element ) {
// Firefox wants us to check `-x` and `-y` variations as well
var _getComputedStyle = getComputedStyle$1 ( element ) ,
overflow = _getComputedStyle . overflow ,
overflowX = _getComputedStyle . overflowX ,
overflowY = _getComputedStyle . overflowY ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return /auto|scroll|overlay|hidden/ . test ( overflow + overflowY + overflowX ) ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getScrollParent ( node ) {
if ( [ 'html' , 'body' , '#document' ] . indexOf ( getNodeName ( node ) ) >= 0 ) {
2021-02-10 17:14:51 +01:00
// $FlowFixMe[incompatible-return]: assume body is always available
2020-12-07 16:50:24 +01:00
return node . ownerDocument . body ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
if ( isHTMLElement ( node ) && isScrollParent ( node ) ) {
return node ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return getScrollParent ( getParentNode ( node ) ) ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
/ *
given a DOM element , return the list of all scroll parents , up the list of ancesors
until we get to the top window object . This list is what we attach scroll listeners
2021-02-10 17:14:51 +01:00
to , because if any of these parent elements scroll , we ' ll need to re - calculate the
2020-12-07 16:50:24 +01:00
reference element ' s position .
* /
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function listScrollParents ( element , list ) {
if ( list === void 0 ) {
list = [ ] ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var scrollParent = getScrollParent ( element ) ;
var isBody = getNodeName ( scrollParent ) === 'body' ;
var win = getWindow ( scrollParent ) ;
var target = isBody ? [ win ] . concat ( win . visualViewport || [ ] , isScrollParent ( scrollParent ) ? scrollParent : [ ] ) : scrollParent ;
var updatedList = list . concat ( target ) ;
2021-02-10 17:14:51 +01:00
return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
2020-12-07 16:50:24 +01:00
updatedList . concat ( listScrollParents ( getParentNode ( target ) ) ) ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function rectToClientRect ( rect ) {
return Object . assign ( Object . assign ( { } , rect ) , { } , {
left : rect . x ,
top : rect . y ,
right : rect . x + rect . width ,
bottom : rect . y + rect . height
} ) ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getInnerBoundingClientRect ( element ) {
var rect = getBoundingClientRect ( element ) ;
rect . top = rect . top + element . clientTop ;
rect . left = rect . left + element . clientLeft ;
rect . bottom = rect . top + element . clientHeight ;
rect . right = rect . left + element . clientWidth ;
rect . width = element . clientWidth ;
rect . height = element . clientHeight ;
rect . x = rect . left ;
rect . y = rect . top ;
return rect ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getClientRectFromMixedType ( element , clippingParent ) {
return clippingParent === viewport ? rectToClientRect ( getViewportRect ( element ) ) : isHTMLElement ( clippingParent ) ? getInnerBoundingClientRect ( clippingParent ) : rectToClientRect ( getDocumentRect ( getDocumentElement ( element ) ) ) ;
} // A "clipping parent" is an overflowable container with the characteristic of
// clipping (or hiding) overflowing elements with a position different from
// `initial`
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getClippingParents ( element ) {
var clippingParents = listScrollParents ( getParentNode ( element ) ) ;
var canEscapeClipping = [ 'absolute' , 'fixed' ] . indexOf ( getComputedStyle$1 ( element ) . position ) >= 0 ;
var clipperElement = canEscapeClipping && isHTMLElement ( element ) ? getOffsetParent ( element ) : element ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( ! isElement$1 ( clipperElement ) ) {
return [ ] ;
2021-02-10 17:14:51 +01:00
} // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
2018-03-31 22:59:37 +02:00
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return clippingParents . filter ( function ( clippingParent ) {
return isElement$1 ( clippingParent ) && contains ( clippingParent , clipperElement ) && getNodeName ( clippingParent ) !== 'body' ;
2018-03-31 22:59:37 +02:00
} ) ;
2020-12-07 16:50:24 +01:00
} // Gets the maximum area that the element is visible in due to any number of
// clipping parents
function getClippingRect ( element , boundary , rootBoundary ) {
var mainClippingParents = boundary === 'clippingParents' ? getClippingParents ( element ) : [ ] . concat ( boundary ) ;
var clippingParents = [ ] . concat ( mainClippingParents , [ rootBoundary ] ) ;
var firstClippingParent = clippingParents [ 0 ] ;
var clippingRect = clippingParents . reduce ( function ( accRect , clippingParent ) {
var rect = getClientRectFromMixedType ( element , clippingParent ) ;
accRect . top = Math . max ( rect . top , accRect . top ) ;
accRect . right = Math . min ( rect . right , accRect . right ) ;
accRect . bottom = Math . min ( rect . bottom , accRect . bottom ) ;
accRect . left = Math . max ( rect . left , accRect . left ) ;
return accRect ;
} , getClientRectFromMixedType ( element , firstClippingParent ) ) ;
clippingRect . width = clippingRect . right - clippingRect . left ;
clippingRect . height = clippingRect . bottom - clippingRect . top ;
clippingRect . x = clippingRect . left ;
clippingRect . y = clippingRect . top ;
return clippingRect ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getVariation ( placement ) {
return placement . split ( '-' ) [ 1 ] ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function computeOffsets ( _ref ) {
var reference = _ref . reference ,
element = _ref . element ,
placement = _ref . placement ;
var basePlacement = placement ? getBasePlacement ( placement ) : null ;
var variation = placement ? getVariation ( placement ) : null ;
var commonX = reference . x + reference . width / 2 - element . width / 2 ;
var commonY = reference . y + reference . height / 2 - element . height / 2 ;
var offsets ;
switch ( basePlacement ) {
case top :
offsets = {
x : commonX ,
y : reference . y - element . height
} ;
break ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
case bottom :
offsets = {
x : commonX ,
y : reference . y + reference . height
} ;
break ;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
case right :
offsets = {
x : reference . x + reference . width ,
y : commonY
} ;
break ;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
case left :
offsets = {
x : reference . x - element . width ,
y : commonY
} ;
break ;
2019-02-11 20:15:34 +01:00
2020-12-07 16:50:24 +01:00
default :
offsets = {
x : reference . x ,
y : reference . y
} ;
}
2019-02-11 20:15:34 +01:00
2020-12-07 16:50:24 +01:00
var mainAxis = basePlacement ? getMainAxisFromPlacement ( basePlacement ) : null ;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
if ( mainAxis != null ) {
var len = mainAxis === 'y' ? 'height' : 'width' ;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
switch ( variation ) {
case start :
2021-02-10 17:14:51 +01:00
offsets [ mainAxis ] = offsets [ mainAxis ] - ( reference [ len ] / 2 - element [ len ] / 2 ) ;
2020-12-07 16:50:24 +01:00
break ;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
case end :
2021-02-10 17:14:51 +01:00
offsets [ mainAxis ] = offsets [ mainAxis ] + ( reference [ len ] / 2 - element [ len ] / 2 ) ;
2020-12-07 16:50:24 +01:00
break ;
2018-08-19 05:22:08 +02:00
}
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return offsets ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function detectOverflow ( state , options ) {
if ( options === void 0 ) {
options = { } ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
var _options = options ,
_options$placement = _options . placement ,
placement = _options$placement === void 0 ? state . placement : _options$placement ,
_options$boundary = _options . boundary ,
boundary = _options$boundary === void 0 ? clippingParents : _options$boundary ,
_options$rootBoundary = _options . rootBoundary ,
rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary ,
_options$elementConte = _options . elementContext ,
elementContext = _options$elementConte === void 0 ? popper : _options$elementConte ,
_options$altBoundary = _options . altBoundary ,
altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary ,
_options$padding = _options . padding ,
padding = _options$padding === void 0 ? 0 : _options$padding ;
var paddingObject = mergePaddingObject ( typeof padding !== 'number' ? padding : expandToHashMap ( padding , basePlacements ) ) ;
var altContext = elementContext === popper ? reference : popper ;
var referenceElement = state . elements . reference ;
var popperRect = state . rects . popper ;
var element = state . elements [ altBoundary ? altContext : elementContext ] ;
var clippingClientRect = getClippingRect ( isElement$1 ( element ) ? element : element . contextElement || getDocumentElement ( state . elements . popper ) , boundary , rootBoundary ) ;
var referenceClientRect = getBoundingClientRect ( referenceElement ) ;
var popperOffsets = computeOffsets ( {
reference : referenceClientRect ,
element : popperRect ,
strategy : 'absolute' ,
placement : placement
} ) ;
var popperClientRect = rectToClientRect ( Object . assign ( Object . assign ( { } , popperRect ) , popperOffsets ) ) ;
var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect ; // positive = overflowing the clipping rect
// 0 or negative = within the clipping rect
var overflowOffsets = {
top : clippingClientRect . top - elementClientRect . top + paddingObject . top ,
bottom : elementClientRect . bottom - clippingClientRect . bottom + paddingObject . bottom ,
left : clippingClientRect . left - elementClientRect . left + paddingObject . left ,
right : elementClientRect . right - clippingClientRect . right + paddingObject . right
} ;
var offsetData = state . modifiersData . offset ; // Offsets can be applied only to the popper element
if ( elementContext === popper && offsetData ) {
var offset = offsetData [ placement ] ;
Object . keys ( overflowOffsets ) . forEach ( function ( key ) {
var multiply = [ right , bottom ] . indexOf ( key ) >= 0 ? 1 : - 1 ;
var axis = [ top , bottom ] . indexOf ( key ) >= 0 ? 'y' : 'x' ;
overflowOffsets [ key ] += offset [ axis ] * multiply ;
} ) ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return overflowOffsets ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
/*:: type OverflowsMap = { [ComputedPlacement]: number }; */
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */
function computeAutoPlacement ( state , options ) {
if ( options === void 0 ) {
options = { } ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var _options = options ,
placement = _options . placement ,
boundary = _options . boundary ,
rootBoundary = _options . rootBoundary ,
padding = _options . padding ,
flipVariations = _options . flipVariations ,
_options$allowedAutoP = _options . allowedAutoPlacements ,
allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP ;
var variation = getVariation ( placement ) ;
var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements . filter ( function ( placement ) {
return getVariation ( placement ) === variation ;
2021-02-10 17:14:51 +01:00
} ) : basePlacements ;
2020-12-07 16:50:24 +01:00
var allowedPlacements = placements$1 . filter ( function ( placement ) {
return allowedAutoPlacements . indexOf ( placement ) >= 0 ;
} ) ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( allowedPlacements . length === 0 ) {
allowedPlacements = placements$1 ;
2021-02-10 17:14:51 +01:00
} // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2020-12-07 16:50:24 +01:00
var overflows = allowedPlacements . reduce ( function ( acc , placement ) {
acc [ placement ] = detectOverflow ( state , {
placement : placement ,
boundary : boundary ,
rootBoundary : rootBoundary ,
padding : padding
} ) [ getBasePlacement ( placement ) ] ;
return acc ;
} , { } ) ;
return Object . keys ( overflows ) . sort ( function ( a , b ) {
return overflows [ a ] - overflows [ b ] ;
} ) ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getExpandedFallbackPlacements ( placement ) {
if ( getBasePlacement ( placement ) === auto ) {
return [ ] ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var oppositePlacement = getOppositePlacement ( placement ) ;
return [ getOppositeVariationPlacement ( placement ) , oppositePlacement , getOppositeVariationPlacement ( oppositePlacement ) ] ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function flip ( _ref ) {
var state = _ref . state ,
options = _ref . options ,
name = _ref . name ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( state . modifiersData [ name ] . _skip ) {
return ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var _options$mainAxis = options . mainAxis ,
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis ,
_options$altAxis = options . altAxis ,
checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis ,
specifiedFallbackPlacements = options . fallbackPlacements ,
padding = options . padding ,
boundary = options . boundary ,
rootBoundary = options . rootBoundary ,
altBoundary = options . altBoundary ,
_options$flipVariatio = options . flipVariations ,
flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio ,
allowedAutoPlacements = options . allowedAutoPlacements ;
var preferredPlacement = state . options . placement ;
var basePlacement = getBasePlacement ( preferredPlacement ) ;
var isBasePlacement = basePlacement === preferredPlacement ;
var fallbackPlacements = specifiedFallbackPlacements || ( isBasePlacement || ! flipVariations ? [ getOppositePlacement ( preferredPlacement ) ] : getExpandedFallbackPlacements ( preferredPlacement ) ) ;
var placements = [ preferredPlacement ] . concat ( fallbackPlacements ) . reduce ( function ( acc , placement ) {
return acc . concat ( getBasePlacement ( placement ) === auto ? computeAutoPlacement ( state , {
placement : placement ,
boundary : boundary ,
rootBoundary : rootBoundary ,
padding : padding ,
flipVariations : flipVariations ,
allowedAutoPlacements : allowedAutoPlacements
} ) : placement ) ;
} , [ ] ) ;
var referenceRect = state . rects . reference ;
var popperRect = state . rects . popper ;
var checksMap = new Map ( ) ;
var makeFallbackChecks = true ;
var firstFittingPlacement = placements [ 0 ] ;
for ( var i = 0 ; i < placements . length ; i ++ ) {
var placement = placements [ i ] ;
var _basePlacement = getBasePlacement ( placement ) ;
var isStartVariation = getVariation ( placement ) === start ;
var isVertical = [ top , bottom ] . indexOf ( _basePlacement ) >= 0 ;
var len = isVertical ? 'width' : 'height' ;
var overflow = detectOverflow ( state , {
placement : placement ,
boundary : boundary ,
rootBoundary : rootBoundary ,
altBoundary : altBoundary ,
padding : padding
} ) ;
var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( referenceRect [ len ] > popperRect [ len ] ) {
mainVariationSide = getOppositePlacement ( mainVariationSide ) ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var altVariationSide = getOppositePlacement ( mainVariationSide ) ;
var checks = [ ] ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( checkMainAxis ) {
checks . push ( overflow [ _basePlacement ] <= 0 ) ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( checkAltAxis ) {
checks . push ( overflow [ mainVariationSide ] <= 0 , overflow [ altVariationSide ] <= 0 ) ;
}
2019-04-18 13:47:52 +02:00
2020-12-07 16:50:24 +01:00
if ( checks . every ( function ( check ) {
return check ;
} ) ) {
firstFittingPlacement = placement ;
makeFallbackChecks = false ;
break ;
}
2019-04-18 13:47:52 +02:00
2020-12-07 16:50:24 +01:00
checksMap . set ( placement , checks ) ;
}
2019-04-18 13:47:52 +02:00
2020-12-07 16:50:24 +01:00
if ( makeFallbackChecks ) {
// `2` may be desired in some cases – research later
var numberOfChecks = flipVariations ? 3 : 1 ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _loop = function _loop ( _i ) {
var fittingPlacement = placements . find ( function ( placement ) {
var checks = checksMap . get ( placement ) ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( checks ) {
return checks . slice ( 0 , _i ) . every ( function ( check ) {
return check ;
} ) ;
}
} ) ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( fittingPlacement ) {
firstFittingPlacement = fittingPlacement ;
return "break" ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
} ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
for ( var _i = numberOfChecks ; _i > 0 ; _i -- ) {
var _ret = _loop ( _i ) ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( _ret === "break" ) break ;
2018-03-31 22:59:37 +02:00
}
}
2020-12-07 16:50:24 +01:00
if ( state . placement !== firstFittingPlacement ) {
state . modifiersData [ name ] . _skip = true ;
state . placement = firstFittingPlacement ;
state . reset = true ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2017-09-06 06:05:12 +02:00
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var flip$1 = {
name : 'flip' ,
enabled : true ,
phase : 'main' ,
fn : flip ,
requiresIfExists : [ 'offset' ] ,
data : {
_skip : false
}
} ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getSideOffsets ( overflow , rect , preventedOffsets ) {
if ( preventedOffsets === void 0 ) {
preventedOffsets = {
x : 0 ,
y : 0
} ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return {
top : overflow . top - rect . height - preventedOffsets . y ,
right : overflow . right - rect . width + preventedOffsets . x ,
bottom : overflow . bottom - rect . height + preventedOffsets . y ,
left : overflow . left - rect . width - preventedOffsets . x
} ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function isAnySideFullyClipped ( overflow ) {
return [ top , right , bottom , left ] . some ( function ( side ) {
return overflow [ side ] >= 0 ;
2018-03-31 22:59:37 +02:00
} ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function hide ( _ref ) {
var state = _ref . state ,
name = _ref . name ;
var referenceRect = state . rects . reference ;
var popperRect = state . rects . popper ;
var preventedOffsets = state . modifiersData . preventOverflow ;
var referenceOverflow = detectOverflow ( state , {
elementContext : 'reference'
} ) ;
var popperAltOverflow = detectOverflow ( state , {
altBoundary : true
} ) ;
var referenceClippingOffsets = getSideOffsets ( referenceOverflow , referenceRect ) ;
var popperEscapeOffsets = getSideOffsets ( popperAltOverflow , popperRect , preventedOffsets ) ;
var isReferenceHidden = isAnySideFullyClipped ( referenceClippingOffsets ) ;
var hasPopperEscaped = isAnySideFullyClipped ( popperEscapeOffsets ) ;
state . modifiersData [ name ] = {
referenceClippingOffsets : referenceClippingOffsets ,
popperEscapeOffsets : popperEscapeOffsets ,
isReferenceHidden : isReferenceHidden ,
hasPopperEscaped : hasPopperEscaped
} ;
state . attributes . popper = Object . assign ( Object . assign ( { } , state . attributes . popper ) , { } , {
'data-popper-reference-hidden' : isReferenceHidden ,
'data-popper-escaped' : hasPopperEscaped
} ) ;
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var hide$1 = {
name : 'hide' ,
enabled : true ,
phase : 'main' ,
requiresIfExists : [ 'preventOverflow' ] ,
fn : hide
} ;
function distanceAndSkiddingToXY ( placement , rects , offset ) {
var basePlacement = getBasePlacement ( placement ) ;
var invertDistance = [ left , top ] . indexOf ( basePlacement ) >= 0 ? - 1 : 1 ;
var _ref = typeof offset === 'function' ? offset ( Object . assign ( Object . assign ( { } , rects ) , { } , {
placement : placement
} ) ) : offset ,
skidding = _ref [ 0 ] ,
distance = _ref [ 1 ] ;
skidding = skidding || 0 ;
distance = ( distance || 0 ) * invertDistance ;
return [ left , right ] . indexOf ( basePlacement ) >= 0 ? {
x : distance ,
y : skidding
} : {
x : skidding ,
y : distance
} ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function offset ( _ref2 ) {
var state = _ref2 . state ,
options = _ref2 . options ,
name = _ref2 . name ;
var _options$offset = options . offset ,
offset = _options$offset === void 0 ? [ 0 , 0 ] : _options$offset ;
var data = placements . reduce ( function ( acc , placement ) {
acc [ placement ] = distanceAndSkiddingToXY ( placement , state . rects , offset ) ;
return acc ;
} , { } ) ;
var _data$state$placement = data [ state . placement ] ,
x = _data$state$placement . x ,
y = _data$state$placement . y ;
if ( state . modifiersData . popperOffsets != null ) {
state . modifiersData . popperOffsets . x += x ;
state . modifiersData . popperOffsets . y += y ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
state . modifiersData [ name ] = data ;
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var offset$1 = {
name : 'offset' ,
enabled : true ,
phase : 'main' ,
requires : [ 'popperOffsets' ] ,
fn : offset
} ;
function popperOffsets ( _ref ) {
var state = _ref . state ,
name = _ref . name ;
// Offsets are the actual position the popper needs to have to be
// properly positioned near its reference element
// This is the most basic placement, and will be adjusted by
// the modifiers in the next step
state . modifiersData [ name ] = computeOffsets ( {
reference : state . rects . reference ,
element : state . rects . popper ,
strategy : 'absolute' ,
placement : state . placement
2018-03-31 22:59:37 +02:00
} ) ;
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var popperOffsets$1 = {
name : 'popperOffsets' ,
enabled : true ,
phase : 'read' ,
fn : popperOffsets ,
data : { }
} ;
function getAltAxis ( axis ) {
return axis === 'x' ? 'y' : 'x' ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function preventOverflow ( _ref ) {
var state = _ref . state ,
options = _ref . options ,
name = _ref . name ;
var _options$mainAxis = options . mainAxis ,
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis ,
_options$altAxis = options . altAxis ,
checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis ,
boundary = options . boundary ,
rootBoundary = options . rootBoundary ,
altBoundary = options . altBoundary ,
padding = options . padding ,
_options$tether = options . tether ,
tether = _options$tether === void 0 ? true : _options$tether ,
_options$tetherOffset = options . tetherOffset ,
tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset ;
var overflow = detectOverflow ( state , {
boundary : boundary ,
rootBoundary : rootBoundary ,
padding : padding ,
altBoundary : altBoundary
} ) ;
var basePlacement = getBasePlacement ( state . placement ) ;
var variation = getVariation ( state . placement ) ;
var isBasePlacement = ! variation ;
var mainAxis = getMainAxisFromPlacement ( basePlacement ) ;
var altAxis = getAltAxis ( mainAxis ) ;
var popperOffsets = state . modifiersData . popperOffsets ;
var referenceRect = state . rects . reference ;
var popperRect = state . rects . popper ;
var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset ( Object . assign ( Object . assign ( { } , state . rects ) , { } , {
placement : state . placement
} ) ) : tetherOffset ;
var data = {
x : 0 ,
y : 0
} ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( ! popperOffsets ) {
return ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
if ( checkMainAxis ) {
var mainSide = mainAxis === 'y' ? top : left ;
var altSide = mainAxis === 'y' ? bottom : right ;
var len = mainAxis === 'y' ? 'height' : 'width' ;
var offset = popperOffsets [ mainAxis ] ;
var min = popperOffsets [ mainAxis ] + overflow [ mainSide ] ;
var max = popperOffsets [ mainAxis ] - overflow [ altSide ] ;
var additive = tether ? - popperRect [ len ] / 2 : 0 ;
var minLen = variation === start ? referenceRect [ len ] : popperRect [ len ] ;
var maxLen = variation === start ? - popperRect [ len ] : - referenceRect [ len ] ; // We need to include the arrow in the calculation so the arrow doesn't go
// outside the reference bounds
var arrowElement = state . elements . arrow ;
var arrowRect = tether && arrowElement ? getLayoutRect ( arrowElement ) : {
width : 0 ,
height : 0
} ;
var arrowPaddingObject = state . modifiersData [ 'arrow#persistent' ] ? state . modifiersData [ 'arrow#persistent' ] . padding : getFreshSideObject ( ) ;
var arrowPaddingMin = arrowPaddingObject [ mainSide ] ;
var arrowPaddingMax = arrowPaddingObject [ altSide ] ; // If the reference length is smaller than the arrow length, we don't want
// to include its full size in the calculation. If the reference is small
// and near the edge of a boundary, the popper can overflow even if the
// reference is not overflowing as well (e.g. virtual elements with no
// width or height)
var arrowLen = within ( 0 , referenceRect [ len ] , arrowRect [ len ] ) ;
var minOffset = isBasePlacement ? referenceRect [ len ] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue ;
var maxOffset = isBasePlacement ? - referenceRect [ len ] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue ;
var arrowOffsetParent = state . elements . arrow && getOffsetParent ( state . elements . arrow ) ;
var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent . clientTop || 0 : arrowOffsetParent . clientLeft || 0 : 0 ;
var offsetModifierValue = state . modifiersData . offset ? state . modifiersData . offset [ state . placement ] [ mainAxis ] : 0 ;
var tetherMin = popperOffsets [ mainAxis ] + minOffset - offsetModifierValue - clientOffset ;
var tetherMax = popperOffsets [ mainAxis ] + maxOffset - offsetModifierValue ;
var preventedOffset = within ( tether ? Math . min ( min , tetherMin ) : min , offset , tether ? Math . max ( max , tetherMax ) : max ) ;
popperOffsets [ mainAxis ] = preventedOffset ;
data [ mainAxis ] = preventedOffset - offset ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
if ( checkAltAxis ) {
var _mainSide = mainAxis === 'x' ? top : left ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _altSide = mainAxis === 'x' ? bottom : right ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _offset = popperOffsets [ altAxis ] ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _min = _offset + overflow [ _mainSide ] ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _max = _offset - overflow [ _altSide ] ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _preventedOffset = within ( _min , _offset , _max ) ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
popperOffsets [ altAxis ] = _preventedOffset ;
data [ altAxis ] = _preventedOffset - _offset ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
state . modifiersData [ name ] = data ;
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var preventOverflow$1 = {
name : 'preventOverflow' ,
enabled : true ,
phase : 'main' ,
fn : preventOverflow ,
requiresIfExists : [ 'offset' ]
} ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getHTMLElementScroll ( element ) {
return {
scrollLeft : element . scrollLeft ,
scrollTop : element . scrollTop
} ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getNodeScroll ( node ) {
if ( node === getWindow ( node ) || ! isHTMLElement ( node ) ) {
return getWindowScroll ( node ) ;
} else {
return getHTMLElementScroll ( node ) ;
}
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
// Composite means it takes into account transforms as well as layout.
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getCompositeRect ( elementOrVirtualElement , offsetParent , isFixed ) {
if ( isFixed === void 0 ) {
isFixed = false ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var documentElement = getDocumentElement ( offsetParent ) ;
var rect = getBoundingClientRect ( elementOrVirtualElement ) ;
var isOffsetParentAnElement = isHTMLElement ( offsetParent ) ;
var scroll = {
scrollLeft : 0 ,
scrollTop : 0
} ;
var offsets = {
x : 0 ,
y : 0
} ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( isOffsetParentAnElement || ! isOffsetParentAnElement && ! isFixed ) {
if ( getNodeName ( offsetParent ) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
isScrollParent ( documentElement ) ) {
scroll = getNodeScroll ( offsetParent ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( isHTMLElement ( offsetParent ) ) {
offsets = getBoundingClientRect ( offsetParent ) ;
offsets . x += offsetParent . clientLeft ;
offsets . y += offsetParent . clientTop ;
} else if ( documentElement ) {
offsets . x = getWindowScrollBarX ( documentElement ) ;
}
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return {
x : rect . left + scroll . scrollLeft - offsets . x ,
y : rect . top + scroll . scrollTop - offsets . y ,
width : rect . width ,
height : rect . height
} ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function order ( modifiers ) {
var map = new Map ( ) ;
var visited = new Set ( ) ;
var result = [ ] ;
modifiers . forEach ( function ( modifier ) {
map . set ( modifier . name , modifier ) ;
} ) ; // On visiting object, check for its dependencies and visit them recursively
function sort ( modifier ) {
visited . add ( modifier . name ) ;
var requires = [ ] . concat ( modifier . requires || [ ] , modifier . requiresIfExists || [ ] ) ;
requires . forEach ( function ( dep ) {
if ( ! visited . has ( dep ) ) {
var depModifier = map . get ( dep ) ;
if ( depModifier ) {
sort ( depModifier ) ;
}
}
} ) ;
result . push ( modifier ) ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
modifiers . forEach ( function ( modifier ) {
if ( ! visited . has ( modifier . name ) ) {
// check for visited object
sort ( modifier ) ;
}
} ) ;
return result ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function orderModifiers ( modifiers ) {
// order based on dependencies
var orderedModifiers = order ( modifiers ) ; // order based on phase
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return modifierPhases . reduce ( function ( acc , phase ) {
return acc . concat ( orderedModifiers . filter ( function ( modifier ) {
return modifier . phase === phase ;
} ) ) ;
} , [ ] ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function debounce ( fn ) {
var pending ;
return function ( ) {
if ( ! pending ) {
pending = new Promise ( function ( resolve ) {
Promise . resolve ( ) . then ( function ( ) {
pending = undefined ;
resolve ( fn ( ) ) ;
} ) ;
} ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return pending ;
} ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function mergeByName ( modifiers ) {
var merged = modifiers . reduce ( function ( merged , current ) {
var existing = merged [ current . name ] ;
merged [ current . name ] = existing ? Object . assign ( Object . assign ( Object . assign ( { } , existing ) , current ) , { } , {
options : Object . assign ( Object . assign ( { } , existing . options ) , current . options ) ,
data : Object . assign ( Object . assign ( { } , existing . data ) , current . data )
} ) : current ;
return merged ;
} , { } ) ; // IE11 does not support Object.values
return Object . keys ( merged ) . map ( function ( key ) {
return merged [ key ] ;
} ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var DEFAULT _OPTIONS = {
placement : 'bottom' ,
modifiers : [ ] ,
strategy : 'absolute'
} ;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function areValidElements ( ) {
for ( var _len = arguments . length , args = new Array ( _len ) , _key = 0 ; _key < _len ; _key ++ ) {
args [ _key ] = arguments [ _key ] ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return ! args . some ( function ( element ) {
return ! ( element && typeof element . getBoundingClientRect === 'function' ) ;
} ) ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function popperGenerator ( generatorOptions ) {
if ( generatorOptions === void 0 ) {
generatorOptions = { } ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var _generatorOptions = generatorOptions ,
_generatorOptions$def = _generatorOptions . defaultModifiers ,
defaultModifiers = _generatorOptions$def === void 0 ? [ ] : _generatorOptions$def ,
_generatorOptions$def2 = _generatorOptions . defaultOptions ,
defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT _OPTIONS : _generatorOptions$def2 ;
return function createPopper ( reference , popper , options ) {
if ( options === void 0 ) {
options = defaultOptions ;
}
var state = {
placement : 'bottom' ,
orderedModifiers : [ ] ,
options : Object . assign ( Object . assign ( { } , DEFAULT _OPTIONS ) , defaultOptions ) ,
modifiersData : { } ,
elements : {
reference : reference ,
popper : popper
} ,
attributes : { } ,
styles : { }
2018-03-31 22:59:37 +02:00
} ;
2020-12-07 16:50:24 +01:00
var effectCleanupFns = [ ] ;
var isDestroyed = false ;
var instance = {
state : state ,
setOptions : function setOptions ( options ) {
cleanupModifierEffects ( ) ;
state . options = Object . assign ( Object . assign ( Object . assign ( { } , defaultOptions ) , state . options ) , options ) ;
state . scrollParents = {
reference : isElement$1 ( reference ) ? listScrollParents ( reference ) : reference . contextElement ? listScrollParents ( reference . contextElement ) : [ ] ,
popper : listScrollParents ( popper )
} ; // Orders the modifiers based on their dependencies and `phase`
// properties
var orderedModifiers = orderModifiers ( mergeByName ( [ ] . concat ( defaultModifiers , state . options . modifiers ) ) ) ; // Strip out disabled modifiers
state . orderedModifiers = orderedModifiers . filter ( function ( m ) {
return m . enabled ;
} ) ; // Validate the provided modifiers so that the consumer will get warned
runModifierEffects ( ) ;
return instance . update ( ) ;
} ,
// Sync update – it will always be executed, even if not necessary. This
// is useful for low frequency updates where sync behavior simplifies the
// logic.
// For high frequency updates (e.g. `resize` and `scroll` events), always
// prefer the async Popper#update method
forceUpdate : function forceUpdate ( ) {
if ( isDestroyed ) {
return ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var _state$elements = state . elements ,
reference = _state$elements . reference ,
popper = _state$elements . popper ; // Don't proceed if `reference` or `popper` are not valid elements
// anymore
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if ( ! areValidElements ( reference , popper ) ) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return ;
} // Store the reference and popper rects to be read by modifiers
state . rects = {
reference : getCompositeRect ( reference , getOffsetParent ( popper ) , state . options . strategy === 'fixed' ) ,
popper : getLayoutRect ( popper )
} ; // Modifiers have the ability to reset the current update cycle. The
// most common use case for this is the `flip` modifier changing the
// placement, which then needs to re-run all the modifiers, because the
// logic was previously ran for the previous placement and is therefore
// stale/incorrect
state . reset = false ;
state . placement = state . options . placement ; // On each update cycle, the `modifiersData` property for each modifier
// is filled with the initial data specified by the modifier. This means
// it doesn't persist and is fresh on each update.
// To ensure persistent data, use `${name}#persistent`
state . orderedModifiers . forEach ( function ( modifier ) {
return state . modifiersData [ modifier . name ] = Object . assign ( { } , modifier . data ) ;
} ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
for ( var index = 0 ; index < state . orderedModifiers . length ; index ++ ) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( state . reset === true ) {
state . reset = false ;
index = - 1 ;
continue ;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var _state$orderedModifie = state . orderedModifiers [ index ] ,
fn = _state$orderedModifie . fn ,
_state$orderedModifie2 = _state$orderedModifie . options ,
_options = _state$orderedModifie2 === void 0 ? { } : _state$orderedModifie2 ,
name = _state$orderedModifie . name ;
if ( typeof fn === 'function' ) {
state = fn ( {
state : state ,
options : _options ,
name : name ,
instance : instance
} ) || state ;
}
}
} ,
// Async and optimistically optimized update – it will not be executed if
// not necessary (debounced to run at most once-per-tick)
update : debounce ( function ( ) {
return new Promise ( function ( resolve ) {
instance . forceUpdate ( ) ;
resolve ( state ) ;
} ) ;
} ) ,
destroy : function destroy ( ) {
cleanupModifierEffects ( ) ;
isDestroyed = true ;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
} ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( ! areValidElements ( reference , popper ) ) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return instance ;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
instance . setOptions ( options ) . then ( function ( state ) {
if ( ! isDestroyed && options . onFirstUpdate ) {
options . onFirstUpdate ( state ) ;
}
} ) ; // Modifiers have the ability to execute arbitrary code before the first
// update cycle runs. They will be executed in the same order as the update
// cycle. This is useful when a modifier adds some persistent data that
// other modifiers need to use, but the modifier is run after the dependent
// one.
function runModifierEffects ( ) {
state . orderedModifiers . forEach ( function ( _ref3 ) {
var name = _ref3 . name ,
_ref3$options = _ref3 . options ,
options = _ref3$options === void 0 ? { } : _ref3$options ,
effect = _ref3 . effect ;
if ( typeof effect === 'function' ) {
var cleanupFn = effect ( {
state : state ,
name : name ,
instance : instance ,
options : options
} ) ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var noopFn = function noopFn ( ) { } ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
effectCleanupFns . push ( cleanupFn || noopFn ) ;
}
} ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function cleanupModifierEffects ( ) {
effectCleanupFns . forEach ( function ( fn ) {
return fn ( ) ;
} ) ;
effectCleanupFns = [ ] ;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return instance ;
} ;
}
var createPopper = /*#__PURE__*/ popperGenerator ( ) ; // eslint-disable-next-line import/no-unused-modules
var defaultModifiers = [ eventListeners , popperOffsets$1 , computeStyles$1 , applyStyles$1 ] ;
var createPopper$1 = /*#__PURE__*/ popperGenerator ( {
defaultModifiers : defaultModifiers
} ) ; // eslint-disable-next-line import/no-unused-modules
var defaultModifiers$1 = [ eventListeners , popperOffsets$1 , computeStyles$1 , applyStyles$1 , offset$1 , flip$1 , preventOverflow$1 , arrow$1 , hide$1 ] ;
var createPopper$2 = /*#__PURE__*/ popperGenerator ( {
defaultModifiers : defaultModifiers$1
} ) ; // eslint-disable-next-line import/no-unused-modules
var Popper = /*#__PURE__*/ Object . freeze ( {
_ _proto _ _ : null ,
popperGenerator : popperGenerator ,
detectOverflow : detectOverflow ,
createPopperBase : createPopper ,
createPopper : createPopper$2 ,
createPopperLite : createPopper$1 ,
top : top ,
bottom : bottom ,
right : right ,
left : left ,
auto : auto ,
basePlacements : basePlacements ,
start : start ,
end : end ,
clippingParents : clippingParents ,
viewport : viewport ,
popper : popper ,
reference : reference ,
variationPlacements : variationPlacements ,
placements : placements ,
beforeRead : beforeRead ,
read : read ,
afterRead : afterRead ,
beforeMain : beforeMain ,
main : main ,
afterMain : afterMain ,
beforeWrite : beforeWrite ,
write : write ,
afterWrite : afterWrite ,
modifierPhases : modifierPhases ,
applyStyles : applyStyles$1 ,
arrow : arrow$1 ,
computeStyles : computeStyles$1 ,
eventListeners : eventListeners ,
flip : flip$1 ,
hide : hide$1 ,
offset : offset$1 ,
popperOffsets : popperOffsets$1 ,
preventOverflow : preventOverflow$1
} ) ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$4 = 'dropdown' ;
var DATA _KEY$4 = 'bs.dropdown' ;
var EVENT _KEY$4 = "." + DATA _KEY$4 ;
var DATA _API _KEY$4 = '.data-api' ;
2020-05-13 20:53:43 +02:00
var ESCAPE _KEY = 'Escape' ;
var SPACE _KEY = 'Space' ;
var TAB _KEY = 'Tab' ;
var ARROW _UP _KEY = 'ArrowUp' ;
var ARROW _DOWN _KEY = 'ArrowDown' ;
var RIGHT _MOUSE _BUTTON = 2 ; // MouseEvent.button value for the secondary button, usually the right button
var REGEXP _KEYDOWN = new RegExp ( ARROW _UP _KEY + "|" + ARROW _DOWN _KEY + "|" + ESCAPE _KEY ) ;
2020-03-28 11:29:08 +01:00
var EVENT _HIDE$1 = "hide" + EVENT _KEY$4 ;
var EVENT _HIDDEN$1 = "hidden" + EVENT _KEY$4 ;
var EVENT _SHOW$1 = "show" + EVENT _KEY$4 ;
var EVENT _SHOWN$1 = "shown" + EVENT _KEY$4 ;
var EVENT _CLICK = "click" + EVENT _KEY$4 ;
var EVENT _CLICK _DATA _API$4 = "click" + EVENT _KEY$4 + DATA _API _KEY$4 ;
var EVENT _KEYDOWN _DATA _API = "keydown" + EVENT _KEY$4 + DATA _API _KEY$4 ;
var EVENT _KEYUP _DATA _API = "keyup" + EVENT _KEY$4 + DATA _API _KEY$4 ;
2020-06-16 20:50:01 +02:00
var CLASS _NAME _DISABLED = 'disabled' ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _SHOW$2 = 'show' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _DROPUP = 'dropup' ;
2020-12-03 14:08:31 +01:00
var CLASS _NAME _DROPEND = 'dropend' ;
var CLASS _NAME _DROPSTART = 'dropstart' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _NAVBAR = 'navbar' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _TOGGLE$2 = '[data-bs-toggle="dropdown"]' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _FORM _CHILD = '.dropdown form' ;
var SELECTOR _MENU = '.dropdown-menu' ;
var SELECTOR _NAVBAR _NAV = '.navbar-nav' ;
var SELECTOR _VISIBLE _ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' ;
2020-12-03 14:08:31 +01:00
var PLACEMENT _TOP = isRTL ? 'top-end' : 'top-start' ;
var PLACEMENT _TOPEND = isRTL ? 'top-start' : 'top-end' ;
var PLACEMENT _BOTTOM = isRTL ? 'bottom-end' : 'bottom-start' ;
var PLACEMENT _BOTTOMEND = isRTL ? 'bottom-start' : 'bottom-end' ;
var PLACEMENT _RIGHT = isRTL ? 'left-start' : 'right-start' ;
var PLACEMENT _LEFT = isRTL ? 'right-start' : 'left-start' ;
2018-11-13 07:41:12 +01:00
var Default$2 = {
2021-02-10 17:14:51 +01:00
offset : [ 0 , 2 ] ,
2018-11-13 07:41:12 +01:00
flip : true ,
2020-12-07 16:50:24 +01:00
boundary : 'clippingParents' ,
2018-11-13 07:41:12 +01:00
reference : 'toggle' ,
2019-08-27 15:03:21 +02:00
display : 'dynamic' ,
popperConfig : null
2018-11-13 07:41:12 +01:00
} ;
var DefaultType$2 = {
2021-02-10 17:14:51 +01:00
offset : '(array|string|function)' ,
2018-11-13 07:41:12 +01:00
flip : 'boolean' ,
boundary : '(string|element)' ,
2021-02-10 17:14:51 +01:00
reference : '(string|element|object)' ,
2019-08-27 15:03:21 +02:00
display : 'string' ,
2021-02-10 17:14:51 +01:00
popperConfig : '(null|object|function)'
2018-11-13 07:41:12 +01:00
} ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-03-31 22:59:37 +02:00
2020-12-03 15:18:59 +01:00
var Dropdown = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Dropdown , _BaseComponent ) ;
2018-11-13 07:41:12 +01:00
function Dropdown ( element , config ) {
2020-12-03 15:18:59 +01:00
var _this ;
_this = _BaseComponent . call ( this , element ) || this ;
_this . _popper = null ;
_this . _config = _this . _getConfig ( config ) ;
_this . _menu = _this . _getMenuElement ( ) ;
_this . _inNavbar = _this . _detectNavbar ( ) ;
2018-03-31 22:59:37 +02:00
2020-12-03 15:18:59 +01:00
_this . _addEventListeners ( ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
2018-03-31 22:59:37 +02:00
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Dropdown . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . toggle = function toggle ( ) {
2020-06-16 20:50:01 +02:00
if ( this . _element . disabled || this . _element . classList . contains ( CLASS _NAME _DISABLED ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var isActive = this . _element . classList . contains ( CLASS _NAME _SHOW$2 ) ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Dropdown . clearMenus ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( isActive ) {
return ;
}
2018-03-31 22:59:37 +02:00
2019-08-27 15:03:21 +02:00
this . show ( ) ;
} ;
_proto . show = function show ( ) {
2021-02-10 17:14:51 +01:00
if ( this . _element . disabled || this . _element . classList . contains ( CLASS _NAME _DISABLED ) || this . _menu . classList . contains ( CLASS _NAME _SHOW$2 ) ) {
2019-08-27 15:03:21 +02:00
return ;
}
var parent = Dropdown . getParentFromElement ( this . _element ) ;
2018-11-13 07:41:12 +01:00
var relatedTarget = {
relatedTarget : this . _element
} ;
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler . trigger ( this . _element , EVENT _SHOW$1 , relatedTarget ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( showEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
2020-11-23 14:17:16 +01:00
} // Totally disable Popper for Dropdowns in Navbar
2017-09-30 23:28:03 +02:00
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . _inNavbar ) {
Manipulator . setDataAttribute ( this . _menu , 'popper' , 'none' ) ;
} else {
2018-11-13 07:41:12 +01:00
if ( typeof Popper === 'undefined' ) {
2020-11-23 14:17:16 +01:00
throw new TypeError ( 'Bootstrap\'s dropdowns require Popper (https://popper.js.org)' ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var referenceElement = this . _element ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _config . reference === 'parent' ) {
referenceElement = parent ;
2019-03-01 17:31:34 +01:00
} else if ( isElement ( this . _config . reference ) ) {
2018-11-13 07:41:12 +01:00
referenceElement = this . _config . reference ; // Check if it's jQuery element
2017-10-30 00:19:14 +01:00
2018-11-13 07:41:12 +01:00
if ( typeof this . _config . reference . jquery !== 'undefined' ) {
referenceElement = this . _config . reference [ 0 ] ;
2018-03-31 22:59:37 +02:00
}
2021-02-10 17:14:51 +01:00
} else if ( typeof this . _config . reference === 'object' ) {
referenceElement = this . _config . reference ;
2018-11-13 07:41:12 +01:00
}
2018-02-11 23:53:29 +01:00
2021-02-10 17:14:51 +01:00
var popperConfig = this . _getPopperConfig ( ) ;
var isDisplayStatic = popperConfig . modifiers . find ( function ( modifier ) {
return modifier . name === 'applyStyles' && modifier . enabled === false ;
} ) ;
this . _popper = createPopper$2 ( referenceElement , this . _menu , popperConfig ) ;
if ( isDisplayStatic ) {
Manipulator . setDataAttribute ( this . _menu , 'popper' , 'static' ) ;
}
2018-11-13 07:41:12 +01:00
} // 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
2017-09-30 23:28:03 +02:00
2018-03-31 22:59:37 +02:00
2020-05-13 20:53:43 +02:00
if ( 'ontouchstart' in document . documentElement && ! parent . closest ( SELECTOR _NAVBAR _NAV ) ) {
2020-03-28 11:29:08 +01:00
var _ref ;
( _ref = [ ] ) . concat . apply ( _ref , document . body . children ) . forEach ( function ( elem ) {
2019-03-01 17:31:34 +01:00
return EventHandler . on ( elem , 'mouseover' , null , noop ( ) ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-12-23 01:21:54 +01:00
2018-11-13 07:41:12 +01:00
this . _element . focus ( ) ;
2017-12-23 01:21:54 +01:00
2018-11-13 07:41:12 +01:00
this . _element . setAttribute ( 'aria-expanded' , true ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
this . _menu . classList . toggle ( CLASS _NAME _SHOW$2 ) ;
2020-10-28 04:45:48 +01:00
2021-02-10 17:14:51 +01:00
this . _element . classList . toggle ( CLASS _NAME _SHOW$2 ) ;
2020-10-28 04:45:48 +01:00
2021-02-10 17:14:51 +01:00
EventHandler . trigger ( this . _element , EVENT _SHOWN$1 , relatedTarget ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . hide = function hide ( ) {
2021-02-10 17:14:51 +01:00
if ( this . _element . disabled || this . _element . classList . contains ( CLASS _NAME _DISABLED ) || ! this . _menu . classList . contains ( CLASS _NAME _SHOW$2 ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var relatedTarget = {
relatedTarget : this . _element
} ;
2021-02-10 17:14:51 +01:00
var hideEvent = EventHandler . trigger ( this . _element , EVENT _HIDE$1 , relatedTarget ) ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
if ( this . _popper ) {
this . _popper . destroy ( ) ;
}
2021-02-10 17:14:51 +01:00
this . _menu . classList . toggle ( CLASS _NAME _SHOW$2 ) ;
2020-10-28 04:45:48 +01:00
2021-02-10 17:14:51 +01:00
this . _element . classList . toggle ( CLASS _NAME _SHOW$2 ) ;
2020-10-28 04:45:48 +01:00
2021-02-10 17:14:51 +01:00
Manipulator . removeDataAttribute ( this . _menu , 'popper' ) ;
EventHandler . trigger ( this . _element , EVENT _HIDDEN$1 , relatedTarget ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2019-03-01 17:31:34 +01:00
EventHandler . off ( this . _element , EVENT _KEY$4 ) ;
2018-11-13 07:41:12 +01:00
this . _menu = null ;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
if ( this . _popper ) {
2018-11-13 07:41:12 +01:00
this . _popper . destroy ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _popper = null ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . update = function update ( ) {
this . _inNavbar = this . _detectNavbar ( ) ;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
if ( this . _popper ) {
2020-12-07 16:50:24 +01:00
this . _popper . update ( ) ;
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Private
;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _addEventListeners = function _addEventListeners ( ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2018-03-31 22:59:37 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _CLICK , function ( event ) {
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this2 . toggle ( ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-09-14 17:12:06 +02:00
config = _extends ( { } , this . constructor . Default , Manipulator . getDataAttributes ( this . _element ) , config ) ;
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$4 , config , this . constructor . DefaultType ) ;
2021-02-10 17:14:51 +01:00
if ( typeof config . reference === 'object' && ! isElement ( config . reference ) && typeof config . reference . getBoundingClientRect !== 'function' ) {
// Popper virtual elements require a getBoundingClientRect method
throw new TypeError ( NAME$4 . toUpperCase ( ) + ": Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method." ) ;
}
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getMenuElement = function _getMenuElement ( ) {
2020-03-28 11:29:08 +01:00
return SelectorEngine . next ( this . _element , SELECTOR _MENU ) [ 0 ] ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getPlacement = function _getPlacement ( ) {
2019-03-01 17:31:34 +01:00
var parentDropdown = this . _element . parentNode ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( parentDropdown . classList . contains ( CLASS _NAME _DROPEND ) ) {
return PLACEMENT _RIGHT ;
2018-11-13 07:41:12 +01:00
}
2017-10-16 00:51:44 +02:00
2020-12-07 16:50:24 +01:00
if ( parentDropdown . classList . contains ( CLASS _NAME _DROPSTART ) ) {
return PLACEMENT _LEFT ;
} // We need to trim the value because custom properties can also include spaces
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var isEnd = getComputedStyle ( this . _menu ) . getPropertyValue ( '--bs-position' ) . trim ( ) === 'end' ;
2018-02-19 23:50:56 +01:00
2020-12-07 16:50:24 +01:00
if ( parentDropdown . classList . contains ( CLASS _NAME _DROPUP ) ) {
return isEnd ? PLACEMENT _TOPEND : PLACEMENT _TOP ;
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return isEnd ? PLACEMENT _BOTTOMEND : PLACEMENT _BOTTOM ;
} ;
_proto . _detectNavbar = function _detectNavbar ( ) {
return this . _element . closest ( "." + CLASS _NAME _NAVBAR ) !== null ;
2019-02-11 20:15:34 +01:00
} ;
2021-02-10 17:14:51 +01:00
_proto . _getOffset = function _getOffset ( ) {
var _this3 = this ;
var offset = this . _config . offset ;
if ( typeof offset === 'string' ) {
return offset . split ( ',' ) . map ( function ( val ) {
return Number . parseInt ( val , 10 ) ;
} ) ;
}
if ( typeof offset === 'function' ) {
return function ( popperData ) {
return offset ( popperData , _this3 . _element ) ;
} ;
}
return offset ;
} ;
2019-02-11 20:15:34 +01:00
_proto . _getPopperConfig = function _getPopperConfig ( ) {
2021-02-10 17:14:51 +01:00
var defaultBsPopperConfig = {
2018-11-13 07:41:12 +01:00
placement : this . _getPlacement ( ) ,
2020-12-07 16:50:24 +01:00
modifiers : [ {
name : 'preventOverflow' ,
options : {
altBoundary : this . _config . flip ,
2021-02-10 17:14:51 +01:00
boundary : this . _config . boundary
}
} , {
name : 'offset' ,
options : {
offset : this . _getOffset ( )
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
} ]
2020-11-23 14:17:16 +01:00
} ; // Disable Popper if we have a static display
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if ( this . _config . display === 'static' ) {
2021-02-10 17:14:51 +01:00
defaultBsPopperConfig . modifiers = [ {
2020-12-07 16:50:24 +01:00
name : 'applyStyles' ,
2018-11-13 07:41:12 +01:00
enabled : false
2020-12-07 16:50:24 +01:00
} ] ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
return _extends ( { } , defaultBsPopperConfig , typeof this . _config . popperConfig === 'function' ? this . _config . popperConfig ( defaultBsPopperConfig ) : this . _config . popperConfig ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Dropdown . dropdownInterface = function dropdownInterface ( element , config ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( element , DATA _KEY$4 ) ;
2018-07-12 06:42:55 +02:00
2019-03-01 17:31:34 +01:00
var _config = typeof config === 'object' ? config : null ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( ! data ) {
data = new Dropdown ( element , _config ) ;
}
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
2019-03-11 16:13:30 +01:00
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
data [ config ] ( ) ;
}
} ;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Dropdown . jQueryInterface = function jQueryInterface ( config ) {
2019-03-01 17:31:34 +01:00
return this . each ( function ( ) {
2019-08-27 15:03:21 +02:00
Dropdown . dropdownInterface ( this , config ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2019-08-27 15:03:21 +02:00
Dropdown . clearMenus = function clearMenus ( event ) {
2020-05-13 20:53:43 +02:00
if ( event && ( event . button === RIGHT _MOUSE _BUTTON || event . type === 'keyup' && event . key !== TAB _KEY ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var toggles = SelectorEngine . find ( SELECTOR _DATA _TOGGLE$2 ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
for ( var i = 0 , len = toggles . length ; i < len ; i ++ ) {
2019-03-01 17:31:34 +01:00
var context = Data . getData ( toggles [ i ] , DATA _KEY$4 ) ;
2018-11-13 07:41:12 +01:00
var relatedTarget = {
relatedTarget : toggles [ i ]
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( event && event . type === 'click' ) {
relatedTarget . clickEvent = event ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
continue ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
var dropdownMenu = context . _menu ;
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
if ( ! toggles [ i ] . classList . contains ( CLASS _NAME _SHOW$2 ) ) {
2018-11-13 07:41:12 +01:00
continue ;
2017-09-06 06:05:12 +02:00
}
2020-05-13 20:53:43 +02:00
if ( event && ( event . type === 'click' && /input|textarea/i . test ( event . target . tagName ) || event . type === 'keyup' && event . key === TAB _KEY ) && dropdownMenu . contains ( event . target ) ) {
2018-11-13 07:41:12 +01:00
continue ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var hideEvent = EventHandler . trigger ( toggles [ i ] , EVENT _HIDE$1 , relatedTarget ) ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
continue ;
} // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( 'ontouchstart' in document . documentElement ) {
2020-03-28 11:29:08 +01:00
var _ref2 ;
( _ref2 = [ ] ) . concat . apply ( _ref2 , document . body . children ) . forEach ( function ( elem ) {
2019-03-01 17:31:34 +01:00
return EventHandler . off ( elem , 'mouseover' , null , noop ( ) ) ;
} ) ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
toggles [ i ] . setAttribute ( 'aria-expanded' , 'false' ) ;
2019-08-27 15:03:21 +02:00
if ( context . _popper ) {
context . _popper . destroy ( ) ;
}
2021-02-10 17:14:51 +01:00
dropdownMenu . classList . remove ( CLASS _NAME _SHOW$2 ) ;
toggles [ i ] . classList . remove ( CLASS _NAME _SHOW$2 ) ;
Manipulator . removeDataAttribute ( dropdownMenu , 'popper' ) ;
EventHandler . trigger ( toggles [ i ] , EVENT _HIDDEN$1 , relatedTarget ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Dropdown . getParentFromElement = function getParentFromElement ( element ) {
return getElementFromSelector ( element ) || element . parentNode ;
2019-03-01 17:31:34 +01:00
} ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Dropdown . dataApiKeydownHandler = function dataApiKeydownHandler ( event ) {
2018-11-13 07:41:12 +01:00
// 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
2020-05-13 20:53:43 +02:00
if ( /input|textarea/i . test ( event . target . tagName ) ? event . key === SPACE _KEY || event . key !== ESCAPE _KEY && ( event . key !== ARROW _DOWN _KEY && event . key !== ARROW _UP _KEY || event . target . closest ( SELECTOR _MENU ) ) : ! REGEXP _KEYDOWN . test ( event . key ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
if ( this . disabled || this . classList . contains ( CLASS _NAME _DISABLED ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
var parent = Dropdown . getParentFromElement ( this ) ;
2021-02-10 17:14:51 +01:00
var isActive = this . classList . contains ( CLASS _NAME _SHOW$2 ) ;
2018-11-13 07:41:12 +01:00
2020-05-13 20:53:43 +02:00
if ( event . key === ESCAPE _KEY ) {
2020-03-28 11:29:08 +01:00
var button = this . matches ( SELECTOR _DATA _TOGGLE$2 ) ? this : SelectorEngine . prev ( this , SELECTOR _DATA _TOGGLE$2 ) [ 0 ] ;
button . focus ( ) ;
Dropdown . clearMenus ( ) ;
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( ! isActive && ( event . key === ARROW _UP _KEY || event . key === ARROW _DOWN _KEY ) ) {
var _button = this . matches ( SELECTOR _DATA _TOGGLE$2 ) ? this : SelectorEngine . prev ( this , SELECTOR _DATA _TOGGLE$2 ) [ 0 ] ;
_button . click ( ) ;
return ;
}
2020-05-13 20:53:43 +02:00
if ( ! isActive || event . key === SPACE _KEY ) {
2019-08-27 15:03:21 +02:00
Dropdown . clearMenus ( ) ;
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var items = SelectorEngine . find ( SELECTOR _VISIBLE _ITEMS , parent ) . filter ( isVisible ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( ! items . length ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var index = items . indexOf ( event . target ) ; // Up
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
if ( event . key === ARROW _UP _KEY && index > 0 ) {
2018-11-13 07:41:12 +01:00
index -- ;
2020-12-03 15:18:59 +01:00
} // Down
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
if ( event . key === ARROW _DOWN _KEY && index < items . length - 1 ) {
2018-11-13 07:41:12 +01:00
index ++ ;
2020-05-13 20:53:43 +02:00
} // index is -1 if the first keydown is an ArrowUp
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
index = index === - 1 ? 0 : index ;
2018-11-13 07:41:12 +01:00
items [ index ] . focus ( ) ;
2017-09-06 06:05:12 +02:00
} ;
2018-11-13 07:41:12 +01:00
_createClass ( Dropdown , null , [ {
key : "Default" ,
get : function get ( ) {
return Default$2 ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$2 ;
}
2020-12-03 15:18:59 +01:00
} , {
key : "DATA_KEY" ,
get : function get ( ) {
return DATA _KEY$4 ;
}
2018-11-13 07:41:12 +01:00
} ] ) ;
2017-09-06 06:05:12 +02:00
return Dropdown ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _KEYDOWN _DATA _API , SELECTOR _DATA _TOGGLE$2 , Dropdown . dataApiKeydownHandler ) ;
EventHandler . on ( document , EVENT _KEYDOWN _DATA _API , SELECTOR _MENU , Dropdown . dataApiKeydownHandler ) ;
EventHandler . on ( document , EVENT _CLICK _DATA _API$4 , Dropdown . clearMenus ) ;
EventHandler . on ( document , EVENT _KEYUP _DATA _API , Dropdown . clearMenus ) ;
EventHandler . on ( document , EVENT _CLICK _DATA _API$4 , SELECTOR _DATA _TOGGLE$2 , function ( event ) {
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2019-08-27 15:03:21 +02:00
Dropdown . dropdownInterface ( this , 'toggle' ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _CLICK _DATA _API$4 , SELECTOR _FORM _CHILD , function ( e ) {
2019-03-01 17:31:34 +01:00
return e . stopPropagation ( ) ;
2018-11-13 07:41:12 +01:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Dropdown to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$4 , Dropdown ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$5 = 'modal' ;
var DATA _KEY$5 = 'bs.modal' ;
var EVENT _KEY$5 = "." + DATA _KEY$5 ;
var DATA _API _KEY$5 = '.data-api' ;
2020-05-13 20:53:43 +02:00
var ESCAPE _KEY$1 = 'Escape' ;
2018-11-13 07:41:12 +01:00
var Default$3 = {
backdrop : true ,
keyboard : true ,
2020-12-03 15:18:59 +01:00
focus : true
2018-11-13 07:41:12 +01:00
} ;
var DefaultType$3 = {
backdrop : '(boolean|string)' ,
keyboard : 'boolean' ,
2020-12-03 15:18:59 +01:00
focus : 'boolean'
2018-11-13 07:41:12 +01:00
} ;
2020-03-28 11:29:08 +01:00
var EVENT _HIDE$2 = "hide" + EVENT _KEY$5 ;
var EVENT _HIDE _PREVENTED = "hidePrevented" + EVENT _KEY$5 ;
var EVENT _HIDDEN$2 = "hidden" + EVENT _KEY$5 ;
var EVENT _SHOW$2 = "show" + EVENT _KEY$5 ;
var EVENT _SHOWN$2 = "shown" + EVENT _KEY$5 ;
var EVENT _FOCUSIN = "focusin" + EVENT _KEY$5 ;
var EVENT _RESIZE = "resize" + EVENT _KEY$5 ;
var EVENT _CLICK _DISMISS = "click.dismiss" + EVENT _KEY$5 ;
var EVENT _KEYDOWN _DISMISS = "keydown.dismiss" + EVENT _KEY$5 ;
var EVENT _MOUSEUP _DISMISS = "mouseup.dismiss" + EVENT _KEY$5 ;
var EVENT _MOUSEDOWN _DISMISS = "mousedown.dismiss" + EVENT _KEY$5 ;
var EVENT _CLICK _DATA _API$5 = "click" + EVENT _KEY$5 + DATA _API _KEY$5 ;
var CLASS _NAME _SCROLLBAR _MEASURER = 'modal-scrollbar-measure' ;
var CLASS _NAME _BACKDROP = 'modal-backdrop' ;
var CLASS _NAME _OPEN = 'modal-open' ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _FADE$1 = 'fade' ;
var CLASS _NAME _SHOW$3 = 'show' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _STATIC = 'modal-static' ;
var SELECTOR _DIALOG = '.modal-dialog' ;
var SELECTOR _MODAL _BODY = '.modal-body' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _TOGGLE$3 = '[data-bs-toggle="modal"]' ;
var SELECTOR _DATA _DISMISS = '[data-bs-dismiss="modal"]' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _FIXED _CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top' ;
var SELECTOR _STICKY _CONTENT = '.sticky-top' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Modal = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Modal , _BaseComponent ) ;
2018-11-13 07:41:12 +01:00
function Modal ( element , config ) {
2020-12-03 15:18:59 +01:00
var _this ;
_this = _BaseComponent . call ( this , element ) || this ;
_this . _config = _this . _getConfig ( config ) ;
_this . _dialog = SelectorEngine . findOne ( SELECTOR _DIALOG , element ) ;
_this . _backdrop = null ;
_this . _isShown = false ;
_this . _isBodyOverflowing = false ;
_this . _ignoreBackdropClick = false ;
_this . _isTransitioning = false ;
_this . _scrollbarWidth = 0 ;
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
var _proto = Modal . prototype ;
// Public
_proto . toggle = function toggle ( relatedTarget ) {
return this . _isShown ? this . hide ( ) : this . show ( relatedTarget ) ;
2017-09-06 06:05:12 +02:00
} ;
2018-11-13 07:41:12 +01:00
_proto . show = function show ( relatedTarget ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _isShown || this . _isTransitioning ) {
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . _element . classList . contains ( CLASS _NAME _FADE$1 ) ) {
2018-11-13 07:41:12 +01:00
this . _isTransitioning = true ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler . trigger ( this . _element , EVENT _SHOW$2 , {
2018-11-13 07:41:12 +01:00
relatedTarget : relatedTarget
} ) ;
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
if ( this . _isShown || showEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this . _isShown = true ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this . _checkScrollbar ( ) ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this . _setScrollbar ( ) ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this . _adjustDialog ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _setEscapeEvent ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _setResizeEvent ( ) ;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _CLICK _DISMISS , SELECTOR _DATA _DISMISS , function ( event ) {
2020-12-03 15:18:59 +01:00
return _this2 . hide ( event ) ;
2018-11-13 07:41:12 +01:00
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _dialog , EVENT _MOUSEDOWN _DISMISS , function ( ) {
2020-12-03 15:18:59 +01:00
EventHandler . one ( _this2 . _element , EVENT _MOUSEUP _DISMISS , function ( event ) {
if ( event . target === _this2 . _element ) {
_this2 . _ignoreBackdropClick = true ;
2018-11-13 07:41:12 +01:00
}
} ) ;
} ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _showBackdrop ( function ( ) {
2020-12-03 15:18:59 +01:00
return _this2 . _showElement ( relatedTarget ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . hide = function hide ( event ) {
2020-12-03 15:18:59 +01:00
var _this3 = this ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
event . preventDefault ( ) ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( ! this . _isShown || this . _isTransitioning ) {
return ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var hideEvent = EventHandler . trigger ( this . _element , EVENT _HIDE$2 ) ;
2017-09-06 06:05:12 +02:00
2019-07-24 08:13:50 +02:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _isShown = false ;
2019-03-01 17:31:34 +01:00
2021-02-10 17:14:51 +01:00
var transition = this . _element . classList . contains ( CLASS _NAME _FADE$1 ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( transition ) {
this . _isTransitioning = true ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _setEscapeEvent ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _setResizeEvent ( ) ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . off ( document , EVENT _FOCUSIN ) ;
2019-03-01 17:31:34 +01:00
2021-02-10 17:14:51 +01:00
this . _element . classList . remove ( CLASS _NAME _SHOW$3 ) ;
2019-03-01 17:31:34 +01:00
2020-03-28 11:29:08 +01:00
EventHandler . off ( this . _element , EVENT _CLICK _DISMISS ) ;
EventHandler . off ( this . _dialog , EVENT _MOUSEDOWN _DISMISS ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( transition ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _element , 'transitionend' , function ( event ) {
2020-12-03 15:18:59 +01:00
return _this3 . _hideModal ( event ) ;
2019-03-01 17:31:34 +01:00
} ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
this . _hideModal ( ) ;
}
} ;
2017-10-16 00:51:44 +02:00
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
[ window , this . _element , this . _dialog ] . forEach ( function ( htmlElement ) {
2019-03-01 17:31:34 +01:00
return EventHandler . off ( htmlElement , EVENT _KEY$5 ) ;
2018-11-13 07:41:12 +01:00
} ) ;
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2018-11-13 07:41:12 +01:00
/ * *
2020-03-28 11:29:08 +01:00
* ` document ` has 2 events ` EVENT_FOCUSIN ` and ` EVENT_CLICK_DATA_API `
2018-11-13 07:41:12 +01:00
* Do not move ` document ` in ` htmlElements ` array
2020-03-28 11:29:08 +01:00
* It will remove ` EVENT_CLICK_DATA_API ` event that should remain
2018-11-13 07:41:12 +01:00
* /
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
2020-03-28 11:29:08 +01:00
EventHandler . off ( document , EVENT _FOCUSIN ) ;
2018-11-13 07:41:12 +01:00
this . _config = null ;
this . _dialog = null ;
this . _backdrop = null ;
this . _isShown = null ;
this . _isBodyOverflowing = null ;
this . _ignoreBackdropClick = null ;
this . _isTransitioning = null ;
this . _scrollbarWidth = null ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . handleUpdate = function handleUpdate ( ) {
this . _adjustDialog ( ) ;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-09-14 17:12:06 +02:00
config = _extends ( { } , Default$3 , config ) ;
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$5 , config , DefaultType$3 ) ;
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _showElement = function _showElement ( relatedTarget ) {
2020-12-03 15:18:59 +01:00
var _this4 = this ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var transition = this . _element . classList . contains ( CLASS _NAME _FADE$1 ) ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var modalBody = SelectorEngine . findOne ( SELECTOR _MODAL _BODY , this . _dialog ) ;
2019-08-27 15:03:21 +02:00
2018-11-13 07:41:12 +01:00
if ( ! this . _element . parentNode || this . _element . parentNode . nodeType !== Node . ELEMENT _NODE ) {
// Don't move modal's DOM position
document . body . appendChild ( this . _element ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _element . style . display = 'block' ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _element . removeAttribute ( 'aria-hidden' ) ;
2017-09-06 06:05:12 +02:00
2018-12-16 00:13:22 +01:00
this . _element . setAttribute ( 'aria-modal' , true ) ;
2020-06-14 00:40:28 +02:00
this . _element . setAttribute ( 'role' , 'dialog' ) ;
2020-05-13 20:53:43 +02:00
this . _element . scrollTop = 0 ;
if ( modalBody ) {
2019-08-27 15:03:21 +02:00
modalBody . scrollTop = 0 ;
2019-02-11 20:15:34 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( transition ) {
2019-03-01 17:31:34 +01:00
reflow ( this . _element ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
this . _element . classList . add ( CLASS _NAME _SHOW$3 ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _config . focus ) {
this . _enforceFocus ( ) ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var transitionComplete = function transitionComplete ( ) {
2020-12-03 15:18:59 +01:00
if ( _this4 . _config . focus ) {
_this4 . _element . focus ( ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this4 . _isTransitioning = false ;
EventHandler . trigger ( _this4 . _element , EVENT _SHOWN$2 , {
2019-03-01 17:31:34 +01:00
relatedTarget : relatedTarget
} ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( transition ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . _dialog ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _dialog , 'transitionend' , transitionComplete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . _dialog , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
transitionComplete ( ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _enforceFocus = function _enforceFocus ( ) {
2020-12-03 15:18:59 +01:00
var _this5 = this ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . off ( document , EVENT _FOCUSIN ) ; // guard against infinite focus loop
2019-03-01 17:31:34 +01:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _FOCUSIN , function ( event ) {
2020-12-03 15:18:59 +01:00
if ( document !== event . target && _this5 . _element !== event . target && ! _this5 . _element . contains ( event . target ) ) {
_this5 . _element . focus ( ) ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _setEscapeEvent = function _setEscapeEvent ( ) {
2020-12-03 15:18:59 +01:00
var _this6 = this ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
if ( this . _isShown ) {
EventHandler . on ( this . _element , EVENT _KEYDOWN _DISMISS , function ( event ) {
2020-12-03 15:18:59 +01:00
if ( _this6 . _config . keyboard && event . key === ESCAPE _KEY$1 ) {
2020-03-28 11:29:08 +01:00
event . preventDefault ( ) ;
2020-12-03 15:18:59 +01:00
_this6 . hide ( ) ;
} else if ( ! _this6 . _config . keyboard && event . key === ESCAPE _KEY$1 ) {
_this6 . _triggerBackdropTransition ( ) ;
2018-03-31 22:59:37 +02:00
}
} ) ;
2019-07-24 08:13:50 +02:00
} else {
2020-03-28 11:29:08 +01:00
EventHandler . off ( this . _element , EVENT _KEYDOWN _DISMISS ) ;
2018-11-13 07:41:12 +01:00
}
} ;
_proto . _setResizeEvent = function _setResizeEvent ( ) {
2020-12-03 15:18:59 +01:00
var _this7 = this ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _isShown ) {
2020-03-28 11:29:08 +01:00
EventHandler . on ( window , EVENT _RESIZE , function ( ) {
2020-12-03 15:18:59 +01:00
return _this7 . _adjustDialog ( ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} else {
2020-03-28 11:29:08 +01:00
EventHandler . off ( window , EVENT _RESIZE ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _hideModal = function _hideModal ( ) {
2020-12-03 15:18:59 +01:00
var _this8 = this ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _element . style . display = 'none' ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _element . setAttribute ( 'aria-hidden' , true ) ;
2017-09-06 06:05:12 +02:00
2018-12-16 00:13:22 +01:00
this . _element . removeAttribute ( 'aria-modal' ) ;
2020-06-14 00:40:28 +02:00
this . _element . removeAttribute ( 'role' ) ;
2018-11-13 07:41:12 +01:00
this . _isTransitioning = false ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this . _showBackdrop ( function ( ) {
2020-03-28 11:29:08 +01:00
document . body . classList . remove ( CLASS _NAME _OPEN ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this8 . _resetAdjustments ( ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this8 . _resetScrollbar ( ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this8 . _element , EVENT _HIDDEN$2 ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _removeBackdrop = function _removeBackdrop ( ) {
2019-07-24 08:13:50 +02:00
this . _backdrop . parentNode . removeChild ( this . _backdrop ) ;
2019-03-01 17:31:34 +01:00
2019-07-24 08:13:50 +02:00
this . _backdrop = null ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _showBackdrop = function _showBackdrop ( callback ) {
2020-12-03 15:18:59 +01:00
var _this9 = this ;
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
var animate = this . _element . classList . contains ( CLASS _NAME _FADE$1 ) ? CLASS _NAME _FADE$1 : '' ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _isShown && this . _config . backdrop ) {
this . _backdrop = document . createElement ( 'div' ) ;
2020-03-28 11:29:08 +01:00
this . _backdrop . className = CLASS _NAME _BACKDROP ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( animate ) {
this . _backdrop . classList . add ( animate ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
document . body . appendChild ( this . _backdrop ) ;
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _CLICK _DISMISS , function ( event ) {
2020-12-03 15:18:59 +01:00
if ( _this9 . _ignoreBackdropClick ) {
_this9 . _ignoreBackdropClick = false ;
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( event . target !== event . currentTarget ) {
return ;
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if ( _this9 . _config . backdrop === 'static' ) {
_this9 . _triggerBackdropTransition ( ) ;
2020-11-23 14:17:16 +01:00
} else {
2020-12-03 15:18:59 +01:00
_this9 . hide ( ) ;
2020-11-23 14:17:16 +01:00
}
2018-11-13 07:41:12 +01:00
} ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( animate ) {
2019-03-01 17:31:34 +01:00
reflow ( this . _backdrop ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
this . _backdrop . classList . add ( CLASS _NAME _SHOW$3 ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! animate ) {
callback ( ) ;
return ;
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
var backdropTransitionDuration = getTransitionDurationFromElement ( this . _backdrop ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _backdrop , 'transitionend' , callback ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . _backdrop , backdropTransitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else if ( ! this . _isShown && this . _backdrop ) {
2021-02-10 17:14:51 +01:00
this . _backdrop . classList . remove ( CLASS _NAME _SHOW$3 ) ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var callbackRemove = function callbackRemove ( ) {
2020-12-03 15:18:59 +01:00
_this9 . _removeBackdrop ( ) ;
2017-09-30 23:28:03 +02:00
2019-07-24 08:13:50 +02:00
callback ( ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . _element . classList . contains ( CLASS _NAME _FADE$1 ) ) {
2019-03-01 17:31:34 +01:00
var _backdropTransitionDuration = getTransitionDurationFromElement ( this . _backdrop ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _backdrop , 'transitionend' , callbackRemove ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . _backdrop , _backdropTransitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
callbackRemove ( ) ;
}
2019-07-24 08:13:50 +02:00
} else {
2018-11-13 07:41:12 +01:00
callback ( ) ;
}
2019-11-08 09:11:23 +01:00
} ;
_proto . _triggerBackdropTransition = function _triggerBackdropTransition ( ) {
2020-12-03 15:18:59 +01:00
var _this10 = this ;
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
var hideEvent = EventHandler . trigger ( this . _element , EVENT _HIDE _PREVENTED ) ;
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
if ( hideEvent . defaultPrevented ) {
return ;
}
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
var isModalOverflowing = this . _element . scrollHeight > document . documentElement . clientHeight ;
2020-09-14 17:12:06 +02:00
2020-11-23 14:17:16 +01:00
if ( ! isModalOverflowing ) {
this . _element . style . overflowY = 'hidden' ;
}
2020-09-14 17:12:06 +02:00
2020-11-23 14:17:16 +01:00
this . _element . classList . add ( CLASS _NAME _STATIC ) ;
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
var modalTransitionDuration = getTransitionDurationFromElement ( this . _dialog ) ;
2021-02-10 17:14:51 +01:00
EventHandler . off ( this . _element , 'transitionend' ) ;
EventHandler . one ( this . _element , 'transitionend' , function ( ) {
2020-12-03 15:18:59 +01:00
_this10 . _element . classList . remove ( CLASS _NAME _STATIC ) ;
2020-09-14 17:12:06 +02:00
2020-11-23 14:17:16 +01:00
if ( ! isModalOverflowing ) {
2021-02-10 17:14:51 +01:00
EventHandler . one ( _this10 . _element , 'transitionend' , function ( ) {
2020-12-03 15:18:59 +01:00
_this10 . _element . style . overflowY = '' ;
2020-11-23 14:17:16 +01:00
} ) ;
2020-12-03 15:18:59 +01:00
emulateTransitionEnd ( _this10 . _element , modalTransitionDuration ) ;
2020-11-23 14:17:16 +01:00
}
} ) ;
emulateTransitionEnd ( this . _element , modalTransitionDuration ) ;
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
this . _element . focus ( ) ;
2019-01-04 17:29:45 +01:00
} // ----------------------------------------------------------------------
2018-11-13 07:41:12 +01:00
// the following methods are used to handle overflowing modals
// ----------------------------------------------------------------------
2019-01-04 17:29:45 +01:00
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _adjustDialog = function _adjustDialog ( ) {
var isModalOverflowing = this . _element . scrollHeight > document . documentElement . clientHeight ;
2018-03-31 22:59:37 +02:00
2020-12-03 14:08:31 +01:00
if ( ! this . _isBodyOverflowing && isModalOverflowing && ! isRTL || this . _isBodyOverflowing && ! isModalOverflowing && isRTL ) {
2018-11-13 07:41:12 +01:00
this . _element . style . paddingLeft = this . _scrollbarWidth + "px" ;
}
2017-09-06 06:05:12 +02:00
2020-12-03 14:08:31 +01:00
if ( this . _isBodyOverflowing && ! isModalOverflowing && ! isRTL || ! this . _isBodyOverflowing && isModalOverflowing && isRTL ) {
2018-11-13 07:41:12 +01:00
this . _element . style . paddingRight = this . _scrollbarWidth + "px" ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _resetAdjustments = function _resetAdjustments ( ) {
this . _element . style . paddingLeft = '' ;
this . _element . style . paddingRight = '' ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _checkScrollbar = function _checkScrollbar ( ) {
var rect = document . body . getBoundingClientRect ( ) ;
2020-05-13 20:53:43 +02:00
this . _isBodyOverflowing = Math . round ( rect . left + rect . right ) < window . innerWidth ;
2018-11-13 07:41:12 +01:00
this . _scrollbarWidth = this . _getScrollbarWidth ( ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _setScrollbar = function _setScrollbar ( ) {
2020-12-03 15:18:59 +01:00
var _this11 = this ;
2018-11-13 07:41:12 +01:00
if ( this . _isBodyOverflowing ) {
2021-02-10 17:14:51 +01:00
this . _setElementAttributes ( SELECTOR _FIXED _CONTENT , 'paddingRight' , function ( calculatedValue ) {
return calculatedValue + _this11 . _scrollbarWidth ;
} ) ;
this . _setElementAttributes ( SELECTOR _STICKY _CONTENT , 'marginRight' , function ( calculatedValue ) {
return calculatedValue - _this11 . _scrollbarWidth ;
} ) ;
this . _setElementAttributes ( 'body' , 'paddingRight' , function ( calculatedValue ) {
return calculatedValue + _this11 . _scrollbarWidth ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2018-11-24 17:22:59 +01:00
2020-03-28 11:29:08 +01:00
document . body . classList . add ( CLASS _NAME _OPEN ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
_proto . _setElementAttributes = function _setElementAttributes ( selector , styleProp , callback ) {
SelectorEngine . find ( selector ) . forEach ( function ( element ) {
var actualValue = element . style [ styleProp ] ;
var calculatedValue = window . getComputedStyle ( element ) [ styleProp ] ;
Manipulator . setDataAttribute ( element , styleProp , actualValue ) ;
element . style [ styleProp ] = callback ( Number . parseFloat ( calculatedValue ) ) + 'px' ;
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
_proto . _resetScrollbar = function _resetScrollbar ( ) {
this . _resetElementAttributes ( SELECTOR _FIXED _CONTENT , 'paddingRight' ) ;
2019-03-01 17:31:34 +01:00
2021-02-10 17:14:51 +01:00
this . _resetElementAttributes ( SELECTOR _STICKY _CONTENT , 'marginRight' ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
this . _resetElementAttributes ( 'body' , 'paddingRight' ) ;
} ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
_proto . _resetElementAttributes = function _resetElementAttributes ( selector , styleProp ) {
SelectorEngine . find ( selector ) . forEach ( function ( element ) {
var value = Manipulator . getDataAttribute ( element , styleProp ) ;
2019-03-01 17:31:34 +01:00
2021-02-10 17:14:51 +01:00
if ( typeof value === 'undefined' && element === document . body ) {
element . style [ styleProp ] = '' ;
} else {
Manipulator . removeDataAttribute ( element , styleProp ) ;
element . style [ styleProp ] = value ;
}
} ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getScrollbarWidth = function _getScrollbarWidth ( ) {
// thx d.walsh
var scrollDiv = document . createElement ( 'div' ) ;
2020-03-28 11:29:08 +01:00
scrollDiv . className = CLASS _NAME _SCROLLBAR _MEASURER ;
2018-11-13 07:41:12 +01:00
document . body . appendChild ( scrollDiv ) ;
var scrollbarWidth = scrollDiv . getBoundingClientRect ( ) . width - scrollDiv . clientWidth ;
document . body . removeChild ( scrollDiv ) ;
return scrollbarWidth ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Modal . jQueryInterface = function jQueryInterface ( config , relatedTarget ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$5 ) ;
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var _config = _extends ( { } , Default$3 , Manipulator . getDataAttributes ( this ) , typeof config === 'object' && config ? config : { } ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new Modal ( this , _config ) ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
data [ config ] ( relatedTarget ) ;
}
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Modal , null , [ {
2020-12-03 15:18:59 +01:00
key : "Default" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return Default$3 ;
2018-11-13 07:41:12 +01:00
}
} , {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY$5 ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Modal ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _CLICK _DATA _API$5 , SELECTOR _DATA _TOGGLE$3 , function ( event ) {
2020-12-03 15:18:59 +01:00
var _this12 = this ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
var target = getElementFromSelector ( this ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . tagName === 'A' || this . tagName === 'AREA' ) {
event . preventDefault ( ) ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . one ( target , EVENT _SHOW$2 , function ( showEvent ) {
2019-03-01 17:31:34 +01:00
if ( showEvent . defaultPrevented ) {
// only register focus restorer if modal will actually get shown
2018-11-13 07:41:12 +01:00
return ;
2017-09-06 06:05:12 +02:00
}
2020-03-28 11:29:08 +01:00
EventHandler . one ( target , EVENT _HIDDEN$2 , function ( ) {
2020-12-03 15:18:59 +01:00
if ( isVisible ( _this12 ) ) {
_this12 . focus ( ) ;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
} ) ;
} ) ;
2019-03-01 17:31:34 +01:00
var data = Data . getData ( target , DATA _KEY$5 ) ;
if ( ! data ) {
2020-09-14 17:12:06 +02:00
var config = _extends ( { } , Manipulator . getDataAttributes ( target ) , Manipulator . getDataAttributes ( this ) ) ;
2019-07-24 08:13:50 +02:00
2019-03-01 17:31:34 +01:00
data = new Modal ( target , config ) ;
}
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
data . toggle ( this ) ;
2018-11-13 07:41:12 +01:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Modal to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$5 , Modal ) ;
2017-09-06 06:05:12 +02:00
2019-02-13 17:01:40 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : util / sanitizer . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2019-02-13 17:01:40 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-11-23 14:17:16 +01:00
var uriAttrs = new Set ( [ 'background' , 'cite' , 'href' , 'itemtype' , 'longdesc' , 'poster' , 'src' , 'xlink:href' ] ) ;
2019-02-13 17:01:40 +01:00
var ARIA _ATTRIBUTE _PATTERN = /^aria-[\w-]*$/i ;
2019-03-01 17:31:34 +01:00
/ * *
* 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
* /
2020-03-28 11:29:08 +01:00
var SAFE _URL _PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi ;
2019-03-01 17:31:34 +01:00
/ * *
* 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
* /
2020-03-28 11:29:08 +01:00
var DATA _URL _PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i ;
2019-03-01 17:31:34 +01:00
var allowedAttribute = function allowedAttribute ( attr , allowedAttributeList ) {
var attrName = attr . nodeName . toLowerCase ( ) ;
2020-11-23 14:17:16 +01:00
if ( allowedAttributeList . includes ( attrName ) ) {
if ( uriAttrs . has ( attrName ) ) {
2021-02-10 17:14:51 +01:00
return Boolean ( SAFE _URL _PATTERN . test ( attr . nodeValue ) || DATA _URL _PATTERN . test ( attr . nodeValue ) ) ;
2019-03-01 17:31:34 +01:00
}
return true ;
}
var regExp = allowedAttributeList . filter ( function ( attrRegex ) {
return attrRegex instanceof RegExp ;
} ) ; // Check if a regular expression validates the attribute.
2020-03-28 11:29:08 +01:00
for ( var i = 0 , len = regExp . length ; i < len ; i ++ ) {
2021-02-10 17:14:51 +01:00
if ( regExp [ i ] . test ( attrName ) ) {
2019-03-01 17:31:34 +01:00
return true ;
}
}
return false ;
} ;
2020-09-14 17:12:06 +02:00
var DefaultAllowlist = {
2019-02-13 17:01:40 +01:00
// 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 : [ ] ,
2020-03-28 11:29:08 +01:00
img : [ 'src' , 'srcset' , 'alt' , 'title' , 'width' , 'height' ] ,
2019-02-13 17:01:40 +01:00
li : [ ] ,
ol : [ ] ,
p : [ ] ,
pre : [ ] ,
s : [ ] ,
small : [ ] ,
span : [ ] ,
sub : [ ] ,
sup : [ ] ,
strong : [ ] ,
u : [ ] ,
ul : [ ]
} ;
2020-09-14 17:12:06 +02:00
function sanitizeHtml ( unsafeHtml , allowList , sanitizeFn ) {
2020-03-28 11:29:08 +01:00
var _ref ;
2019-03-01 17:31:34 +01:00
if ( ! unsafeHtml . length ) {
2019-02-13 17:01:40 +01:00
return unsafeHtml ;
}
if ( sanitizeFn && typeof sanitizeFn === 'function' ) {
return sanitizeFn ( unsafeHtml ) ;
}
var domParser = new window . DOMParser ( ) ;
var createdDocument = domParser . parseFromString ( unsafeHtml , 'text/html' ) ;
2020-09-14 17:12:06 +02:00
var allowlistKeys = Object . keys ( allowList ) ;
2020-03-28 11:29:08 +01:00
var elements = ( _ref = [ ] ) . concat . apply ( _ref , createdDocument . body . querySelectorAll ( '*' ) ) ;
2019-02-13 17:01:40 +01:00
var _loop = function _loop ( i , len ) {
2020-03-28 11:29:08 +01:00
var _ref2 ;
2019-02-13 17:01:40 +01:00
var el = elements [ i ] ;
var elName = el . nodeName . toLowerCase ( ) ;
2020-11-23 14:17:16 +01:00
if ( ! allowlistKeys . includes ( elName ) ) {
2019-02-13 17:01:40 +01:00
el . parentNode . removeChild ( el ) ;
return "continue" ;
}
2020-03-28 11:29:08 +01:00
var attributeList = ( _ref2 = [ ] ) . concat . apply ( _ref2 , el . attributes ) ;
2020-09-14 17:12:06 +02:00
var allowedAttributes = [ ] . concat ( allowList [ '*' ] || [ ] , allowList [ elName ] || [ ] ) ;
2019-02-13 17:01:40 +01:00
attributeList . forEach ( function ( attr ) {
2020-09-14 17:12:06 +02:00
if ( ! allowedAttribute ( attr , allowedAttributes ) ) {
2019-02-13 17:01:40 +01:00
el . removeAttribute ( attr . nodeName ) ;
}
} ) ;
} ;
for ( var i = 0 , len = elements . length ; i < len ; i ++ ) {
2019-07-24 08:13:50 +02:00
var _ret = _loop ( i ) ;
2019-02-13 17:01:40 +01:00
if ( _ret === "continue" ) continue ;
}
return createdDocument . body . innerHTML ;
}
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$6 = 'tooltip' ;
var DATA _KEY$6 = 'bs.tooltip' ;
var EVENT _KEY$6 = "." + DATA _KEY$6 ;
var CLASS _PREFIX = 'bs-tooltip' ;
var BSCLS _PREFIX _REGEX = new RegExp ( "(^|\\s)" + CLASS _PREFIX + "\\S+" , 'g' ) ;
2020-11-23 14:17:16 +01:00
var DISALLOWED _ATTRIBUTES = new Set ( [ 'sanitize' , 'allowList' , 'sanitizeFn' ] ) ;
2018-11-13 07:41:12 +01:00
var DefaultType$4 = {
animation : 'boolean' ,
template : 'string' ,
title : '(string|element|function)' ,
trigger : 'string' ,
delay : '(number|object)' ,
html : 'boolean' ,
selector : '(string|boolean)' ,
placement : '(string|function)' ,
2021-02-10 17:14:51 +01:00
offset : '(array|string|function)' ,
2018-11-13 07:41:12 +01:00
container : '(string|element|boolean)' ,
2021-02-10 17:14:51 +01:00
fallbackPlacements : 'array' ,
2019-02-13 17:01:40 +01:00
boundary : '(string|element)' ,
2020-12-03 15:18:59 +01:00
customClass : '(string|function)' ,
2019-02-13 17:01:40 +01:00
sanitize : 'boolean' ,
sanitizeFn : '(null|function)' ,
2020-09-14 17:12:06 +02:00
allowList : 'object' ,
2021-02-10 17:14:51 +01:00
popperConfig : '(null|object|function)'
2018-11-13 07:41:12 +01:00
} ;
2020-03-28 11:29:08 +01:00
var AttachmentMap = {
2018-11-13 07:41:12 +01:00
AUTO : 'auto' ,
TOP : 'top' ,
2020-12-03 14:08:31 +01:00
RIGHT : isRTL ? 'left' : 'right' ,
2018-11-13 07:41:12 +01:00
BOTTOM : 'bottom' ,
2020-12-03 14:08:31 +01:00
LEFT : isRTL ? 'right' : 'left'
2018-11-13 07:41:12 +01:00
} ;
var Default$4 = {
animation : true ,
2020-12-03 15:18:59 +01:00
template : '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>' ,
2018-11-13 07:41:12 +01:00
trigger : 'hover focus' ,
title : '' ,
delay : 0 ,
html : false ,
selector : false ,
placement : 'top' ,
2021-02-10 17:14:51 +01:00
offset : [ 0 , 0 ] ,
2018-11-13 07:41:12 +01:00
container : false ,
2021-02-10 17:14:51 +01:00
fallbackPlacements : [ 'top' , 'right' , 'bottom' , 'left' ] ,
2020-12-07 16:50:24 +01:00
boundary : 'clippingParents' ,
2020-12-03 15:18:59 +01:00
customClass : '' ,
2019-02-13 17:01:40 +01:00
sanitize : true ,
sanitizeFn : null ,
2020-09-14 17:12:06 +02:00
allowList : DefaultAllowlist ,
2019-08-27 15:03:21 +02:00
popperConfig : null
2018-11-13 07:41:12 +01:00
} ;
2020-03-28 11:29:08 +01:00
var Event$1 = {
2018-11-13 07:41:12 +01:00
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
} ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _FADE$2 = 'fade' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _MODAL = 'modal' ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _SHOW$4 = 'show' ;
2020-03-28 11:29:08 +01:00
var HOVER _STATE _SHOW = 'show' ;
var HOVER _STATE _OUT = 'out' ;
var SELECTOR _TOOLTIP _INNER = '.tooltip-inner' ;
var TRIGGER _HOVER = 'hover' ;
var TRIGGER _FOCUS = 'focus' ;
var TRIGGER _CLICK = 'click' ;
var TRIGGER _MANUAL = 'manual' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
var Tooltip = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Tooltip , _BaseComponent ) ;
2018-11-13 07:41:12 +01:00
function Tooltip ( element , config ) {
2020-12-03 15:18:59 +01:00
var _this ;
2018-11-13 07:41:12 +01:00
if ( typeof Popper === 'undefined' ) {
2020-11-23 14:17:16 +01:00
throw new TypeError ( 'Bootstrap\'s tooltips require Popper (https://popper.js.org)' ) ;
2020-12-03 15:18:59 +01:00
}
2017-10-30 00:19:14 +01:00
2020-12-03 15:18:59 +01:00
_this = _BaseComponent . call ( this , element ) || this ; // private
2017-10-30 00:19:14 +01:00
2020-12-03 15:18:59 +01:00
_this . _isEnabled = true ;
_this . _timeout = 0 ;
_this . _hoverState = '' ;
_this . _activeTrigger = { } ;
_this . _popper = null ; // Protected
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this . config = _this . _getConfig ( config ) ;
_this . tip = null ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this . _setListeners ( ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Tooltip . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . enable = function enable ( ) {
this . _isEnabled = true ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . disable = function disable ( ) {
this . _isEnabled = false ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . toggleEnabled = function toggleEnabled ( ) {
this . _isEnabled = ! this . _isEnabled ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . toggle = function toggle ( event ) {
if ( ! this . _isEnabled ) {
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
2021-02-10 17:14:51 +01:00
var context = this . _initializeOnDelegatedTarget ( event ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
context . _activeTrigger . click = ! context . _activeTrigger . click ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if ( context . _isWithActiveTrigger ( ) ) {
context . _enter ( null , context ) ;
2017-09-06 06:05:12 +02:00
} else {
2018-11-13 07:41:12 +01:00
context . _leave ( null , context ) ;
}
} else {
2021-02-10 17:14:51 +01:00
if ( this . getTipElement ( ) . classList . contains ( CLASS _NAME _SHOW$4 ) ) {
2018-11-13 07:41:12 +01:00
this . _leave ( null , this ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return ;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _enter ( null , this ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
clearTimeout ( this . _timeout ) ;
2020-12-03 15:18:59 +01:00
EventHandler . off ( this . _element , this . constructor . EVENT _KEY ) ;
EventHandler . off ( this . _element . closest ( "." + CLASS _NAME _MODAL ) , 'hide.bs.modal' , this . _hideModalHandler ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . tip && this . tip . parentNode ) {
2019-03-01 17:31:34 +01:00
this . tip . parentNode . removeChild ( this . tip ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this . _isEnabled = null ;
this . _timeout = null ;
this . _hoverState = null ;
this . _activeTrigger = null ;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
if ( this . _popper ) {
2018-11-13 07:41:12 +01:00
this . _popper . destroy ( ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _popper = null ;
this . config = null ;
this . tip = null ;
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . show = function show ( ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if ( this . _element . style . display === 'none' ) {
2018-11-13 07:41:12 +01:00
throw new Error ( 'Please use show on visible elements' ) ;
}
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
if ( ! ( this . isWithContent ( ) && this . _isEnabled ) ) {
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var showEvent = EventHandler . trigger ( this . _element , this . constructor . Event . SHOW ) ;
var shadowRoot = findShadowRoot ( this . _element ) ;
var isInTheDom = shadowRoot === null ? this . _element . ownerDocument . documentElement . contains ( this . _element ) : shadowRoot . contains ( this . _element ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( showEvent . defaultPrevented || ! isInTheDom ) {
return ;
}
2020-12-03 15:18:59 +01:00
2021-02-10 17:14:51 +01:00
var tip = this . getTipElement ( ) ;
var tipId = getUID ( this . constructor . NAME ) ;
tip . setAttribute ( 'id' , tipId ) ;
2020-12-03 15:18:59 +01:00
2021-02-10 17:14:51 +01:00
this . _element . setAttribute ( 'aria-describedby' , tipId ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
this . setContent ( ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . config . animation ) {
tip . classList . add ( CLASS _NAME _FADE$2 ) ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var placement = typeof this . config . placement === 'function' ? this . config . placement . call ( this , tip , this . _element ) : this . config . placement ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var attachment = this . _getAttachment ( placement ) ;
2018-12-16 00:13:22 +01:00
2021-02-10 17:14:51 +01:00
this . _addAttachmentClass ( attachment ) ;
2018-12-16 00:13:22 +01:00
2021-02-10 17:14:51 +01:00
var container = this . _getContainer ( ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
Data . setData ( tip , this . constructor . DATA _KEY , this ) ;
2018-11-13 07:41:12 +01:00
2021-02-10 17:14:51 +01:00
if ( ! this . _element . ownerDocument . documentElement . contains ( this . tip ) ) {
container . appendChild ( tip ) ;
}
2020-12-03 15:18:59 +01:00
2021-02-10 17:14:51 +01:00
EventHandler . trigger ( this . _element , this . constructor . Event . INSERTED ) ;
this . _popper = createPopper$2 ( this . _element , tip , this . _getPopperConfig ( attachment ) ) ;
tip . classList . add ( CLASS _NAME _SHOW$4 ) ;
var customClass = typeof this . config . customClass === 'function' ? this . config . customClass ( ) : this . config . customClass ;
2020-12-03 15:18:59 +01:00
2021-02-10 17:14:51 +01:00
if ( customClass ) {
var _tip$classList ;
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
( _tip$classList = tip . classList ) . add . apply ( _tip$classList , customClass . split ( ' ' ) ) ;
} // 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
2020-12-03 15:18:59 +01:00
2020-03-28 11:29:08 +01:00
2021-02-10 17:14:51 +01:00
if ( 'ontouchstart' in document . documentElement ) {
var _ref ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
( _ref = [ ] ) . concat . apply ( _ref , document . body . children ) . forEach ( function ( element ) {
EventHandler . on ( element , 'mouseover' , noop ( ) ) ;
} ) ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var complete = function complete ( ) {
var prevHoverState = _this2 . _hoverState ;
_this2 . _hoverState = null ;
EventHandler . trigger ( _this2 . _element , _this2 . constructor . Event . SHOWN ) ;
2018-11-13 07:41:12 +01:00
2021-02-10 17:14:51 +01:00
if ( prevHoverState === HOVER _STATE _OUT ) {
_this2 . _leave ( null , _this2 ) ;
2017-09-06 06:05:12 +02:00
}
2021-02-10 17:14:51 +01:00
} ;
if ( this . tip . classList . contains ( CLASS _NAME _FADE$2 ) ) {
var transitionDuration = getTransitionDurationFromElement ( this . tip ) ;
EventHandler . one ( this . tip , 'transitionend' , complete ) ;
emulateTransitionEnd ( this . tip , transitionDuration ) ;
} else {
complete ( ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2019-07-24 08:13:50 +02:00
_proto . hide = function hide ( ) {
2020-12-03 15:18:59 +01:00
var _this3 = this ;
2017-09-06 06:05:12 +02:00
2020-09-29 17:33:00 +02:00
if ( ! this . _popper ) {
return ;
}
2018-11-13 07:41:12 +01:00
var tip = this . getTipElement ( ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
if ( _this3 . _hoverState !== HOVER _STATE _SHOW && tip . parentNode ) {
2018-11-13 07:41:12 +01:00
tip . parentNode . removeChild ( tip ) ;
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this3 . _cleanTipClass ( ) ;
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
_this3 . _element . removeAttribute ( 'aria-describedby' ) ;
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this3 . _element , _this3 . constructor . Event . HIDDEN ) ;
2017-09-30 23:28:03 +02:00
2020-12-07 16:50:24 +01:00
if ( _this3 . _popper ) {
_this3 . _popper . destroy ( ) ;
_this3 . _popper = null ;
}
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var hideEvent = EventHandler . trigger ( this . _element , this . constructor . Event . HIDE ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
tip . classList . remove ( CLASS _NAME _SHOW$4 ) ; // If this is a touch-enabled device we remove the extra
2018-11-13 07:41:12 +01:00
// empty mouseover listeners we added for iOS support
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( 'ontouchstart' in document . documentElement ) {
2020-03-28 11:29:08 +01:00
var _ref2 ;
( _ref2 = [ ] ) . concat . apply ( _ref2 , document . body . children ) . forEach ( function ( element ) {
2019-03-01 17:31:34 +01:00
return EventHandler . off ( element , 'mouseover' , noop ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this . _activeTrigger [ TRIGGER _CLICK ] = false ;
this . _activeTrigger [ TRIGGER _FOCUS ] = false ;
this . _activeTrigger [ TRIGGER _HOVER ] = false ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . tip . classList . contains ( CLASS _NAME _FADE$2 ) ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( tip ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( tip , 'transitionend' , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( tip , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
complete ( ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this . _hoverState = '' ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . update = function update ( ) {
if ( this . _popper !== null ) {
2020-12-07 16:50:24 +01:00
this . _popper . update ( ) ;
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Protected
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . isWithContent = function isWithContent ( ) {
return Boolean ( this . getTitle ( ) ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . getTipElement = function getTipElement ( ) {
2019-03-01 17:31:34 +01:00
if ( this . tip ) {
return this . tip ;
}
var element = document . createElement ( 'div' ) ;
element . innerHTML = this . config . template ;
this . tip = element . children [ 0 ] ;
2018-11-13 07:41:12 +01:00
return this . tip ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . setContent = function setContent ( ) {
var tip = this . getTipElement ( ) ;
2020-03-28 11:29:08 +01:00
this . setElementContent ( SelectorEngine . findOne ( SELECTOR _TOOLTIP _INNER , tip ) , this . getTitle ( ) ) ;
2021-02-10 17:14:51 +01:00
tip . classList . remove ( CLASS _NAME _FADE$2 , CLASS _NAME _SHOW$4 ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
_proto . setElementContent = function setElementContent ( element , content ) {
if ( element === null ) {
return ;
}
2019-07-24 08:13:50 +02:00
if ( typeof content === 'object' && isElement ( content ) ) {
2019-03-01 17:31:34 +01:00
if ( content . jquery ) {
content = content [ 0 ] ;
} // content is a DOM node or a jQuery
2019-02-13 17:01:40 +01:00
if ( this . config . html ) {
2019-03-01 17:31:34 +01:00
if ( content . parentNode !== element ) {
element . innerHTML = '' ;
element . appendChild ( content ) ;
2017-09-06 06:05:12 +02:00
}
} else {
2020-05-13 20:53:43 +02:00
element . textContent = content . textContent ;
2017-09-06 06:05:12 +02:00
}
2019-02-13 17:01:40 +01:00
return ;
}
if ( this . config . html ) {
if ( this . config . sanitize ) {
2020-09-14 17:12:06 +02:00
content = sanitizeHtml ( content , this . config . allowList , this . config . sanitizeFn ) ;
2019-02-13 17:01:40 +01:00
}
2019-03-01 17:31:34 +01:00
element . innerHTML = content ;
2018-11-13 07:41:12 +01:00
} else {
2020-05-13 20:53:43 +02:00
element . textContent = content ;
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . getTitle = function getTitle ( ) {
2020-12-03 15:18:59 +01:00
var title = this . _element . getAttribute ( 'data-bs-original-title' ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! title ) {
2020-12-03 15:18:59 +01:00
title = typeof this . config . title === 'function' ? this . config . title . call ( this . _element ) : this . config . title ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return title ;
2020-12-03 14:08:31 +01:00
} ;
_proto . updateAttachment = function updateAttachment ( attachment ) {
if ( attachment === 'right' ) {
return 'end' ;
}
if ( attachment === 'left' ) {
return 'start' ;
}
return attachment ;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
_proto . _initializeOnDelegatedTarget = function _initializeOnDelegatedTarget ( event , context ) {
var 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 ) ;
}
return context ;
} ;
_proto . _getOffset = function _getOffset ( ) {
2020-12-03 15:18:59 +01:00
var _this4 = this ;
2019-08-27 15:03:21 +02:00
2021-02-10 17:14:51 +01:00
var offset = this . config . offset ;
if ( typeof offset === 'string' ) {
return offset . split ( ',' ) . map ( function ( val ) {
return Number . parseInt ( val , 10 ) ;
} ) ;
}
2020-12-07 16:50:24 +01:00
2021-02-10 17:14:51 +01:00
if ( typeof offset === 'function' ) {
return function ( popperData ) {
return offset ( popperData , _this4 . _element ) ;
} ;
2020-12-07 16:50:24 +01:00
}
2021-02-10 17:14:51 +01:00
return offset ;
} ;
_proto . _getPopperConfig = function _getPopperConfig ( attachment ) {
var _this5 = this ;
var defaultBsPopperConfig = {
2019-08-27 15:03:21 +02:00
placement : attachment ,
2021-02-10 17:14:51 +01:00
modifiers : [ {
name : 'flip' ,
options : {
altBoundary : true ,
fallbackPlacements : this . config . fallbackPlacements
}
} , {
name : 'offset' ,
options : {
offset : this . _getOffset ( )
}
} , {
2020-12-07 16:50:24 +01:00
name : 'preventOverflow' ,
options : {
2021-02-10 17:14:51 +01:00
boundary : this . config . boundary
2020-12-07 16:50:24 +01:00
}
} , {
name : 'arrow' ,
options : {
2019-08-27 15:03:21 +02:00
element : "." + this . constructor . NAME + "-arrow"
}
2020-12-07 16:50:24 +01:00
} , {
name : 'onChange' ,
enabled : true ,
phase : 'afterWrite' ,
fn : function fn ( data ) {
2021-02-10 17:14:51 +01:00
return _this5 . _handlePopperPlacementChange ( data ) ;
2020-12-07 16:50:24 +01:00
}
} ] ,
onFirstUpdate : function onFirstUpdate ( data ) {
if ( data . options . placement !== data . placement ) {
2021-02-10 17:14:51 +01:00
_this5 . _handlePopperPlacementChange ( data ) ;
2019-08-27 15:03:21 +02:00
}
}
} ;
2021-02-10 17:14:51 +01:00
return _extends ( { } , defaultBsPopperConfig , typeof this . config . popperConfig === 'function' ? this . config . popperConfig ( defaultBsPopperConfig ) : this . config . popperConfig ) ;
2019-08-27 15:03:21 +02:00
} ;
2019-07-24 08:13:50 +02:00
_proto . _addAttachmentClass = function _addAttachmentClass ( attachment ) {
2020-12-03 14:08:31 +01:00
this . getTipElement ( ) . classList . add ( CLASS _PREFIX + "-" + this . updateAttachment ( attachment ) ) ;
2019-07-24 08:13:50 +02:00
} ;
2018-12-16 00:13:22 +01:00
_proto . _getContainer = function _getContainer ( ) {
if ( this . config . container === false ) {
return document . body ;
}
2019-03-01 17:31:34 +01:00
if ( isElement ( this . config . container ) ) {
return this . config . container ;
2018-12-16 00:13:22 +01:00
}
2019-03-01 17:31:34 +01:00
return SelectorEngine . findOne ( this . config . container ) ;
2018-12-16 00:13:22 +01:00
} ;
2018-11-13 07:41:12 +01:00
_proto . _getAttachment = function _getAttachment ( placement ) {
2020-03-28 11:29:08 +01:00
return AttachmentMap [ placement . toUpperCase ( ) ] ;
2018-11-13 07:41:12 +01:00
} ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _setListeners = function _setListeners ( ) {
2021-02-10 17:14:51 +01:00
var _this6 = this ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var triggers = this . config . trigger . split ( ' ' ) ;
triggers . forEach ( function ( trigger ) {
if ( trigger === 'click' ) {
2021-02-10 17:14:51 +01:00
EventHandler . on ( _this6 . _element , _this6 . constructor . Event . CLICK , _this6 . config . selector , function ( event ) {
return _this6 . toggle ( event ) ;
2017-09-06 06:05:12 +02:00
} ) ;
2020-03-28 11:29:08 +01:00
} else if ( trigger !== TRIGGER _MANUAL ) {
2021-02-10 17:14:51 +01:00
var eventIn = trigger === TRIGGER _HOVER ? _this6 . constructor . Event . MOUSEENTER : _this6 . constructor . Event . FOCUSIN ;
var eventOut = trigger === TRIGGER _HOVER ? _this6 . constructor . Event . MOUSELEAVE : _this6 . constructor . Event . FOCUSOUT ;
EventHandler . on ( _this6 . _element , eventIn , _this6 . config . selector , function ( event ) {
return _this6 . _enter ( event ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2021-02-10 17:14:51 +01:00
EventHandler . on ( _this6 . _element , eventOut , _this6 . config . selector , function ( event ) {
return _this6 . _leave ( event ) ;
2017-09-06 06:05:12 +02:00
} ) ;
}
2018-11-13 07:41:12 +01:00
} ) ;
2019-07-12 23:56:26 +02:00
this . _hideModalHandler = function ( ) {
2021-02-10 17:14:51 +01:00
if ( _this6 . _element ) {
_this6 . hide ( ) ;
2018-11-13 07:41:12 +01:00
}
2019-07-12 23:56:26 +02:00
} ;
2020-12-03 15:18:59 +01:00
EventHandler . on ( this . _element . closest ( "." + CLASS _NAME _MODAL ) , 'hide.bs.modal' , this . _hideModalHandler ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . config . selector ) {
2020-09-14 17:12:06 +02:00
this . config = _extends ( { } , this . config , {
2018-11-13 07:41:12 +01:00
trigger : 'manual' ,
selector : ''
} ) ;
} else {
this . _fixTitle ( ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _fixTitle = function _fixTitle ( ) {
2020-12-03 15:18:59 +01:00
var title = this . _element . getAttribute ( 'title' ) ;
var originalTitleType = typeof this . _element . getAttribute ( 'data-bs-original-title' ) ;
2017-09-30 23:28:03 +02:00
2020-11-23 14:17:16 +01:00
if ( title || originalTitleType !== 'string' ) {
2020-12-03 15:18:59 +01:00
this . _element . setAttribute ( 'data-bs-original-title' , title || '' ) ;
if ( title && ! this . _element . getAttribute ( 'aria-label' ) && ! this . _element . textContent ) {
this . _element . setAttribute ( 'aria-label' , title ) ;
}
this . _element . setAttribute ( 'title' , '' ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _enter = function _enter ( event , context ) {
2021-02-10 17:14:51 +01:00
context = this . _initializeOnDelegatedTarget ( event , context ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
2020-03-28 11:29:08 +01:00
context . _activeTrigger [ event . type === 'focusin' ? TRIGGER _FOCUS : TRIGGER _HOVER ] = true ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( context . getTipElement ( ) . classList . contains ( CLASS _NAME _SHOW$4 ) || context . _hoverState === HOVER _STATE _SHOW ) {
2020-03-28 11:29:08 +01:00
context . _hoverState = HOVER _STATE _SHOW ;
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
clearTimeout ( context . _timeout ) ;
2020-03-28 11:29:08 +01:00
context . _hoverState = HOVER _STATE _SHOW ;
2018-11-13 07:41:12 +01:00
if ( ! context . config . delay || ! context . config . delay . show ) {
context . show ( ) ;
return ;
}
context . _timeout = setTimeout ( function ( ) {
2020-03-28 11:29:08 +01:00
if ( context . _hoverState === HOVER _STATE _SHOW ) {
2017-09-06 06:05:12 +02:00
context . show ( ) ;
}
2018-11-13 07:41:12 +01:00
} , context . config . delay . show ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _leave = function _leave ( event , context ) {
2021-02-10 17:14:51 +01:00
context = this . _initializeOnDelegatedTarget ( event , context ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
2020-03-28 11:29:08 +01:00
context . _activeTrigger [ event . type === 'focusout' ? TRIGGER _FOCUS : TRIGGER _HOVER ] = false ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( context . _isWithActiveTrigger ( ) ) {
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
clearTimeout ( context . _timeout ) ;
2020-03-28 11:29:08 +01:00
context . _hoverState = HOVER _STATE _OUT ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context . config . delay || ! context . config . delay . hide ) {
context . hide ( ) ;
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
context . _timeout = setTimeout ( function ( ) {
2020-03-28 11:29:08 +01:00
if ( context . _hoverState === HOVER _STATE _OUT ) {
2017-09-06 06:05:12 +02:00
context . hide ( ) ;
}
2018-11-13 07:41:12 +01:00
} , context . config . delay . hide ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _isWithActiveTrigger = function _isWithActiveTrigger ( ) {
for ( var trigger in this . _activeTrigger ) {
if ( this . _activeTrigger [ trigger ] ) {
return true ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return false ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-12-03 15:18:59 +01:00
var dataAttributes = Manipulator . getDataAttributes ( this . _element ) ;
2019-02-13 17:01:40 +01:00
Object . keys ( dataAttributes ) . forEach ( function ( dataAttr ) {
2020-11-23 14:17:16 +01:00
if ( DISALLOWED _ATTRIBUTES . has ( dataAttr ) ) {
2019-02-13 17:01:40 +01:00
delete dataAttributes [ dataAttr ] ;
}
} ) ;
2019-03-01 17:31:34 +01:00
if ( config && typeof config . container === 'object' && config . container . jquery ) {
config . container = config . container [ 0 ] ;
}
2020-09-14 17:12:06 +02:00
config = _extends ( { } , this . constructor . Default , dataAttributes , typeof config === 'object' && config ? config : { } ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config . delay === 'number' ) {
config . delay = {
show : config . delay ,
hide : config . delay
} ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config . title === 'number' ) {
config . title = config . title . toString ( ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config . content === 'number' ) {
config . content = config . content . toString ( ) ;
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$6 , config , this . constructor . DefaultType ) ;
2019-02-13 17:01:40 +01:00
if ( config . sanitize ) {
2020-09-14 17:12:06 +02:00
config . template = sanitizeHtml ( config . template , config . allowList , config . sanitizeFn ) ;
2019-02-13 17:01:40 +01:00
}
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getDelegateConfig = function _getDelegateConfig ( ) {
var config = { } ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( this . config ) {
for ( var key in this . config ) {
if ( this . constructor . Default [ key ] !== this . config [ key ] ) {
config [ key ] = this . config [ key ] ;
2017-09-06 06:05:12 +02:00
}
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _cleanTipClass = function _cleanTipClass ( ) {
2019-03-01 17:31:34 +01:00
var tip = this . getTipElement ( ) ;
var tabClass = tip . getAttribute ( 'class' ) . match ( BSCLS _PREFIX _REGEX ) ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if ( tabClass !== null && tabClass . length > 0 ) {
2019-03-01 17:31:34 +01:00
tabClass . map ( function ( token ) {
return token . trim ( ) ;
} ) . forEach ( function ( tClass ) {
return tip . classList . remove ( tClass ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2018-07-12 06:42:55 +02:00
2018-11-13 07:41:12 +01:00
_proto . _handlePopperPlacementChange = function _handlePopperPlacementChange ( popperData ) {
2020-12-07 16:50:24 +01:00
var state = popperData . state ;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if ( ! state ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-30 23:28:03 +02:00
2020-12-07 16:50:24 +01:00
this . tip = state . elements . popper ;
this . _cleanTipClass ( ) ;
this . _addAttachmentClass ( this . _getAttachment ( state . placement ) ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Tooltip . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$6 ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' && config ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data && /dispose|hide/ . test ( config ) ) {
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new Tooltip ( this , _config ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2017-09-06 06:05:12 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
data [ config ] ( ) ;
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Tooltip , null , [ {
key : "Default" ,
get : function get ( ) {
return Default$4 ;
}
} , {
key : "NAME" ,
get : function get ( ) {
return NAME$6 ;
}
} , {
key : "DATA_KEY" ,
get : function get ( ) {
return DATA _KEY$6 ;
}
} , {
key : "Event" ,
get : function get ( ) {
2020-03-28 11:29:08 +01:00
return Event$1 ;
2018-11-13 07:41:12 +01:00
}
} , {
key : "EVENT_KEY" ,
get : function get ( ) {
return EVENT _KEY$6 ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$4 ;
}
} ] ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Tooltip ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Tooltip to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-30 23:28:03 +02:00
2019-07-24 08:13:50 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$6 , Tooltip ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$7 = 'popover' ;
var DATA _KEY$7 = 'bs.popover' ;
var EVENT _KEY$7 = "." + DATA _KEY$7 ;
var CLASS _PREFIX$1 = 'bs-popover' ;
var BSCLS _PREFIX _REGEX$1 = new RegExp ( "(^|\\s)" + CLASS _PREFIX$1 + "\\S+" , 'g' ) ;
2020-09-14 17:12:06 +02:00
var Default$5 = _extends ( { } , Tooltip . Default , {
2018-11-13 07:41:12 +01:00
placement : 'right' ,
2021-02-10 17:14:51 +01:00
offset : [ 0 , 8 ] ,
2018-11-13 07:41:12 +01:00
trigger : 'click' ,
content : '' ,
2020-12-03 15:18:59 +01:00
template : '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
2018-11-13 07:41:12 +01:00
} ) ;
2020-09-14 17:12:06 +02:00
var DefaultType$5 = _extends ( { } , Tooltip . DefaultType , {
2018-11-13 07:41:12 +01:00
content : '(string|element|function)'
} ) ;
2020-03-28 11:29:08 +01:00
var Event$2 = {
2018-11-13 07:41:12 +01:00
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
} ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _FADE$3 = 'fade' ;
var CLASS _NAME _SHOW$5 = 'show' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _TITLE = '.popover-header' ;
var SELECTOR _CONTENT = '.popover-body' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var Popover = /*#__PURE__*/ function ( _Tooltip ) {
2018-11-13 07:41:12 +01:00
_inheritsLoose ( Popover , _Tooltip ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
function Popover ( ) {
return _Tooltip . apply ( this , arguments ) || this ;
}
2017-11-08 05:45:26 +01:00
2018-11-13 07:41:12 +01:00
var _proto = Popover . prototype ;
2017-11-08 05:45:26 +01:00
2018-11-13 07:41:12 +01:00
// Overrides
_proto . isWithContent = function isWithContent ( ) {
return this . getTitle ( ) || this . _getContent ( ) ;
} ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . setContent = function setContent ( ) {
2019-03-01 17:31:34 +01:00
var tip = this . getTipElement ( ) ; // we use append for html objects to maintain js events
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this . setElementContent ( SelectorEngine . findOne ( SELECTOR _TITLE , tip ) , this . getTitle ( ) ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var content = this . _getContent ( ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof content === 'function' ) {
2020-12-03 15:18:59 +01:00
content = content . call ( this . _element ) ;
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
2020-03-28 11:29:08 +01:00
this . setElementContent ( SelectorEngine . findOne ( SELECTOR _CONTENT , tip ) , content ) ;
2021-02-10 17:14:51 +01:00
tip . classList . remove ( CLASS _NAME _FADE$3 , CLASS _NAME _SHOW$5 ) ;
2020-09-14 17:12:06 +02:00
} // Private
;
2019-08-27 15:03:21 +02:00
_proto . _addAttachmentClass = function _addAttachmentClass ( attachment ) {
2020-12-03 14:08:31 +01:00
this . getTipElement ( ) . classList . add ( CLASS _PREFIX$1 + "-" + this . updateAttachment ( attachment ) ) ;
2020-09-14 17:12:06 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getContent = function _getContent ( ) {
2020-12-03 15:18:59 +01:00
return this . _element . getAttribute ( 'data-bs-content' ) || this . config . content ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _cleanTipClass = function _cleanTipClass ( ) {
2019-03-01 17:31:34 +01:00
var tip = this . getTipElement ( ) ;
var tabClass = tip . getAttribute ( 'class' ) . match ( BSCLS _PREFIX _REGEX$1 ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( tabClass !== null && tabClass . length > 0 ) {
2019-03-01 17:31:34 +01:00
tabClass . map ( function ( token ) {
return token . trim ( ) ;
} ) . forEach ( function ( tClass ) {
return tip . classList . remove ( tClass ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Static
;
2018-03-31 22:59:37 +02:00
2019-08-27 15:03:21 +02:00
Popover . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$7 ) ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' ? config : null ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data && /dispose|hide/ . test ( config ) ) {
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new Popover ( this , _config ) ;
2019-03-01 17:31:34 +01:00
Data . setData ( this , DATA _KEY$7 , data ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2017-09-06 06:05:12 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
data [ config ] ( ) ;
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Popover , null , [ {
key : "Default" ,
2021-02-11 04:29:59 +01:00
// Getters
get : function get ( ) {
2018-11-13 07:41:12 +01:00
return Default$5 ;
}
} , {
key : "NAME" ,
get : function get ( ) {
return NAME$7 ;
}
} , {
key : "DATA_KEY" ,
get : function get ( ) {
return DATA _KEY$7 ;
}
} , {
key : "Event" ,
get : function get ( ) {
2020-03-28 11:29:08 +01:00
return Event$2 ;
2018-11-13 07:41:12 +01:00
}
} , {
key : "EVENT_KEY" ,
get : function get ( ) {
return EVENT _KEY$7 ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$5 ;
}
} ] ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Popover ;
} ( Tooltip ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Popover to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-30 23:28:03 +02:00
2019-07-24 08:13:50 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$7 , Popover ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$8 = 'scrollspy' ;
var DATA _KEY$8 = 'bs.scrollspy' ;
var EVENT _KEY$8 = "." + DATA _KEY$8 ;
var DATA _API _KEY$6 = '.data-api' ;
var Default$6 = {
offset : 10 ,
method : 'auto' ,
target : ''
} ;
var DefaultType$6 = {
offset : 'number' ,
method : 'string' ,
target : '(string|element)'
} ;
2020-03-28 11:29:08 +01:00
var EVENT _ACTIVATE = "activate" + EVENT _KEY$8 ;
var EVENT _SCROLL = "scroll" + EVENT _KEY$8 ;
var EVENT _LOAD _DATA _API$1 = "load" + EVENT _KEY$8 + DATA _API _KEY$6 ;
var CLASS _NAME _DROPDOWN _ITEM = 'dropdown-item' ;
var CLASS _NAME _ACTIVE$2 = 'active' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _SPY = '[data-bs-spy="scroll"]' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _NAV _LIST _GROUP = '.nav, .list-group' ;
var SELECTOR _NAV _LINKS = '.nav-link' ;
var SELECTOR _NAV _ITEMS = '.nav-item' ;
var SELECTOR _LIST _ITEMS = '.list-group-item' ;
var SELECTOR _DROPDOWN = '.dropdown' ;
var SELECTOR _DROPDOWN _TOGGLE = '.dropdown-toggle' ;
var METHOD _OFFSET = 'offset' ;
var METHOD _POSITION = 'position' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
var ScrollSpy = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( ScrollSpy , _BaseComponent ) ;
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
function ScrollSpy ( element , config ) {
var _this ;
_this = _BaseComponent . call ( this , element ) || this ;
_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 + " ." + CLASS _NAME _DROPDOWN _ITEM ;
_this . _offsets = [ ] ;
_this . _targets = [ ] ;
_this . _activeTarget = null ;
_this . _scrollHeight = 0 ;
2021-02-10 17:14:51 +01:00
EventHandler . on ( _this . _scrollElement , EVENT _SCROLL , function ( ) {
return _this . _process ( ) ;
2018-11-13 07:41:12 +01:00
} ) ;
2020-12-03 15:18:59 +01:00
_this . refresh ( ) ;
_this . _process ( ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
var _proto = ScrollSpy . prototype ;
// Public
_proto . refresh = function refresh ( ) {
var _this2 = this ;
2020-03-28 11:29:08 +01:00
var autoMethod = this . _scrollElement === this . _scrollElement . window ? METHOD _OFFSET : METHOD _POSITION ;
2018-11-13 07:41:12 +01:00
var offsetMethod = this . _config . method === 'auto' ? autoMethod : this . _config . method ;
2020-03-28 11:29:08 +01:00
var offsetBase = offsetMethod === METHOD _POSITION ? this . _getScrollTop ( ) : 0 ;
2018-11-13 07:41:12 +01:00
this . _offsets = [ ] ;
this . _targets = [ ] ;
this . _scrollHeight = this . _getScrollHeight ( ) ;
2020-03-28 11:29:08 +01:00
var targets = SelectorEngine . find ( this . _selector ) ;
2018-11-13 07:41:12 +01:00
targets . map ( function ( element ) {
2019-03-01 17:31:34 +01:00
var targetSelector = getSelectorFromElement ( element ) ;
2020-09-14 17:12:06 +02:00
var target = targetSelector ? SelectorEngine . findOne ( targetSelector ) : null ;
2018-11-13 07:41:12 +01:00
if ( target ) {
var targetBCR = target . getBoundingClientRect ( ) ;
if ( targetBCR . width || targetBCR . height ) {
2019-03-01 17:31:34 +01:00
return [ Manipulator [ offsetMethod ] ( target ) . top + offsetBase , targetSelector ] ;
2018-11-13 07:41:12 +01:00
}
}
return null ;
} ) . filter ( function ( item ) {
return item ;
} ) . sort ( function ( a , b ) {
return a [ 0 ] - b [ 0 ] ;
} ) . forEach ( function ( item ) {
_this2 . _offsets . push ( item [ 0 ] ) ;
_this2 . _targets . push ( item [ 1 ] ) ;
} ) ;
2018-03-31 22:59:37 +02:00
} ;
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2019-03-01 17:31:34 +01:00
EventHandler . off ( this . _scrollElement , EVENT _KEY$8 ) ;
2018-11-13 07:41:12 +01:00
this . _scrollElement = null ;
this . _config = null ;
this . _selector = null ;
this . _offsets = null ;
this . _targets = null ;
this . _activeTarget = null ;
this . _scrollHeight = null ;
2019-01-04 17:29:45 +01:00
} // Private
;
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-09-14 17:12:06 +02:00
config = _extends ( { } , Default$6 , typeof config === 'object' && config ? config : { } ) ;
2018-11-13 07:41:12 +01:00
2020-05-13 20:53:43 +02:00
if ( typeof config . target !== 'string' && isElement ( config . target ) ) {
2019-03-01 17:31:34 +01:00
var id = config . target . id ;
2018-11-13 07:41:12 +01:00
if ( ! id ) {
2019-03-01 17:31:34 +01:00
id = getUID ( NAME$8 ) ;
config . target . id = id ;
2018-11-13 07:41:12 +01:00
}
config . target = "#" + id ;
}
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$8 , config , DefaultType$6 ) ;
2018-11-13 07:41:12 +01:00
return config ;
2018-03-31 22:59:37 +02:00
} ;
2018-11-13 07:41:12 +01:00
_proto . _getScrollTop = function _getScrollTop ( ) {
return this . _scrollElement === window ? this . _scrollElement . pageYOffset : this . _scrollElement . scrollTop ;
2018-03-31 22:59:37 +02:00
} ;
2018-11-13 07:41:12 +01:00
_proto . _getScrollHeight = function _getScrollHeight ( ) {
return this . _scrollElement . scrollHeight || Math . max ( document . body . scrollHeight , document . documentElement . scrollHeight ) ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getOffsetHeight = function _getOffsetHeight ( ) {
return this . _scrollElement === window ? window . innerHeight : this . _scrollElement . getBoundingClientRect ( ) . height ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto . _process = function _process ( ) {
var scrollTop = this . _getScrollTop ( ) + this . _config . offset ;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var scrollHeight = this . _getScrollHeight ( ) ;
var maxScroll = this . _config . offset + scrollHeight - this . _getOffsetHeight ( ) ;
if ( this . _scrollHeight !== scrollHeight ) {
2018-03-31 22:59:37 +02:00
this . refresh ( ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( scrollTop >= maxScroll ) {
var 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 ;
}
2020-05-13 20:53:43 +02:00
for ( var i = this . _offsets . length ; i -- ; ) {
2018-11-13 07:41:12 +01:00
var 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 ] ) ;
}
}
} ;
_proto . _activate = function _activate ( target ) {
this . _activeTarget = target ;
this . _clear ( ) ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var queries = this . _selector . split ( ',' ) . map ( function ( selector ) {
2020-11-23 14:17:16 +01:00
return selector + "[data-bs-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]" ;
2018-11-13 07:41:12 +01:00
} ) ;
2018-11-24 17:22:59 +01:00
2019-03-01 17:31:34 +01:00
var link = SelectorEngine . findOne ( queries . join ( ',' ) ) ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if ( link . classList . contains ( CLASS _NAME _DROPDOWN _ITEM ) ) {
2020-05-13 20:53:43 +02:00
SelectorEngine . findOne ( SELECTOR _DROPDOWN _TOGGLE , link . closest ( SELECTOR _DROPDOWN ) ) . classList . add ( CLASS _NAME _ACTIVE$2 ) ;
2020-03-28 11:29:08 +01:00
link . classList . add ( CLASS _NAME _ACTIVE$2 ) ;
2018-11-13 07:41:12 +01:00
} else {
// Set triggered link as active
2020-03-28 11:29:08 +01:00
link . classList . add ( CLASS _NAME _ACTIVE$2 ) ;
SelectorEngine . parents ( link , SELECTOR _NAV _LIST _GROUP ) . forEach ( function ( listGroup ) {
2019-03-01 17:31:34 +01:00
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
2020-03-28 11:29:08 +01:00
SelectorEngine . prev ( listGroup , SELECTOR _NAV _LINKS + ", " + SELECTOR _LIST _ITEMS ) . forEach ( function ( item ) {
return item . classList . add ( CLASS _NAME _ACTIVE$2 ) ;
2019-03-01 17:31:34 +01:00
} ) ; // Handle special case when .nav-link is inside .nav-item
2020-03-28 11:29:08 +01:00
SelectorEngine . prev ( listGroup , SELECTOR _NAV _ITEMS ) . forEach ( function ( navItem ) {
SelectorEngine . children ( navItem , SELECTOR _NAV _LINKS ) . forEach ( function ( item ) {
return item . classList . add ( CLASS _NAME _ACTIVE$2 ) ;
2019-03-01 17:31:34 +01:00
} ) ;
} ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( this . _scrollElement , EVENT _ACTIVATE , {
2018-11-13 07:41:12 +01:00
relatedTarget : target
} ) ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _clear = function _clear ( ) {
2020-03-28 11:29:08 +01:00
SelectorEngine . find ( this . _selector ) . filter ( function ( node ) {
return node . classList . contains ( CLASS _NAME _ACTIVE$2 ) ;
2018-11-24 17:22:59 +01:00
} ) . forEach ( function ( node ) {
2020-03-28 11:29:08 +01:00
return node . classList . remove ( CLASS _NAME _ACTIVE$2 ) ;
2018-11-24 17:22:59 +01:00
} ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
ScrollSpy . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$8 ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' && config ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new ScrollSpy ( this , _config ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
data [ config ] ( ) ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( ScrollSpy , null , [ {
2020-12-03 15:18:59 +01:00
key : "Default" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return Default$6 ;
2018-11-13 07:41:12 +01:00
}
} , {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2018-11-13 07:41:12 +01:00
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY$8 ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return ScrollSpy ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( window , EVENT _LOAD _DATA _API$1 , function ( ) {
SelectorEngine . find ( SELECTOR _DATA _SPY ) . forEach ( function ( spy ) {
2019-03-01 17:31:34 +01:00
return new ScrollSpy ( spy , Manipulator . getDataAttributes ( spy ) ) ;
} ) ;
2018-11-13 07:41:12 +01:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . ScrollSpy to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2017-09-30 23:28:03 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$8 , ScrollSpy ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var NAME$9 = 'tab' ;
var DATA _KEY$9 = 'bs.tab' ;
var EVENT _KEY$9 = "." + DATA _KEY$9 ;
var DATA _API _KEY$7 = '.data-api' ;
2020-03-28 11:29:08 +01:00
var EVENT _HIDE$3 = "hide" + EVENT _KEY$9 ;
var EVENT _HIDDEN$3 = "hidden" + EVENT _KEY$9 ;
var EVENT _SHOW$3 = "show" + EVENT _KEY$9 ;
var EVENT _SHOWN$3 = "shown" + EVENT _KEY$9 ;
var EVENT _CLICK _DATA _API$6 = "click" + EVENT _KEY$9 + DATA _API _KEY$7 ;
var CLASS _NAME _DROPDOWN _MENU = 'dropdown-menu' ;
var CLASS _NAME _ACTIVE$3 = 'active' ;
2020-06-16 20:50:01 +02:00
var CLASS _NAME _DISABLED$1 = 'disabled' ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _FADE$4 = 'fade' ;
var CLASS _NAME _SHOW$6 = 'show' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _DROPDOWN$1 = '.dropdown' ;
var SELECTOR _NAV _LIST _GROUP$1 = '.nav, .list-group' ;
2020-06-16 20:50:01 +02:00
var SELECTOR _ACTIVE$1 = '.active' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _ACTIVE _UL = ':scope > li > .active' ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _TOGGLE$4 = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]' ;
2020-03-28 11:29:08 +01:00
var SELECTOR _DROPDOWN _TOGGLE$1 = '.dropdown-toggle' ;
var SELECTOR _DROPDOWN _ACTIVE _CHILD = ':scope > .dropdown-menu .active' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
var Tab = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Tab , _BaseComponent ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
function Tab ( ) {
return _BaseComponent . apply ( this , arguments ) || this ;
}
2018-06-22 07:55:23 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Tab . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . show = function show ( ) {
var _this = this ;
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
if ( this . _element . parentNode && this . _element . parentNode . nodeType === Node . ELEMENT _NODE && this . _element . classList . contains ( CLASS _NAME _ACTIVE$3 ) || this . _element . classList . contains ( CLASS _NAME _DISABLED$1 ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var previous ;
2019-08-27 15:03:21 +02:00
var target = getElementFromSelector ( this . _element ) ;
2020-05-13 20:53:43 +02:00
var listElement = this . _element . closest ( SELECTOR _NAV _LIST _GROUP$1 ) ;
2018-11-13 07:41:12 +01:00
if ( listElement ) {
2020-06-16 20:50:01 +02:00
var itemSelector = listElement . nodeName === 'UL' || listElement . nodeName === 'OL' ? SELECTOR _ACTIVE _UL : SELECTOR _ACTIVE$1 ;
2020-03-28 11:29:08 +01:00
previous = SelectorEngine . find ( itemSelector , listElement ) ;
2018-11-13 07:41:12 +01:00
previous = previous [ previous . length - 1 ] ;
}
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
var hideEvent = previous ? EventHandler . trigger ( previous , EVENT _HIDE$3 , {
relatedTarget : this . _element
} ) : null ;
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler . trigger ( this . _element , EVENT _SHOW$3 , {
2019-03-01 17:31:34 +01:00
relatedTarget : previous
} ) ;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if ( showEvent . defaultPrevented || hideEvent !== null && hideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this . _activate ( this . _element , listElement ) ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( previous , EVENT _HIDDEN$3 , {
2018-11-13 07:41:12 +01:00
relatedTarget : _this . _element
} ) ;
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( _this . _element , EVENT _SHOWN$3 , {
2018-11-13 07:41:12 +01:00
relatedTarget : previous
2018-03-31 22:59:37 +02:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( target ) {
this . _activate ( target , target . parentNode , complete ) ;
} else {
complete ( ) ;
}
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _activate = function _activate ( element , container , callback ) {
var _this2 = this ;
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
var activeElements = container && ( container . nodeName === 'UL' || container . nodeName === 'OL' ) ? SelectorEngine . find ( SELECTOR _ACTIVE _UL , container ) : SelectorEngine . children ( container , SELECTOR _ACTIVE$1 ) ;
2018-11-13 07:41:12 +01:00
var active = activeElements [ 0 ] ;
2021-02-10 17:14:51 +01:00
var isTransitioning = callback && active && active . classList . contains ( CLASS _NAME _FADE$4 ) ;
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
return _this2 . _transitionComplete ( element , active , callback ) ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( active && isTransitioning ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( active ) ;
2021-02-10 17:14:51 +01:00
active . classList . remove ( CLASS _NAME _SHOW$6 ) ;
EventHandler . one ( active , 'transitionend' , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( active , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
complete ( ) ;
}
} ;
_proto . _transitionComplete = function _transitionComplete ( element , active , callback ) {
if ( active ) {
2020-03-28 11:29:08 +01:00
active . classList . remove ( CLASS _NAME _ACTIVE$3 ) ;
var dropdownChild = SelectorEngine . findOne ( SELECTOR _DROPDOWN _ACTIVE _CHILD , active . parentNode ) ;
2018-11-13 07:41:12 +01:00
if ( dropdownChild ) {
2020-03-28 11:29:08 +01:00
dropdownChild . classList . remove ( CLASS _NAME _ACTIVE$3 ) ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
if ( active . getAttribute ( 'role' ) === 'tab' ) {
active . setAttribute ( 'aria-selected' , false ) ;
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
element . classList . add ( CLASS _NAME _ACTIVE$3 ) ;
2018-11-13 07:41:12 +01:00
if ( element . getAttribute ( 'role' ) === 'tab' ) {
element . setAttribute ( 'aria-selected' , true ) ;
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
reflow ( element ) ;
2019-02-11 20:15:34 +01:00
2021-02-10 17:14:51 +01:00
if ( element . classList . contains ( CLASS _NAME _FADE$4 ) ) {
element . classList . add ( CLASS _NAME _SHOW$6 ) ;
2019-02-11 20:15:34 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if ( element . parentNode && element . parentNode . classList . contains ( CLASS _NAME _DROPDOWN _MENU ) ) {
2020-05-13 20:53:43 +02:00
var dropdownElement = element . closest ( SELECTOR _DROPDOWN$1 ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( dropdownElement ) {
2020-03-28 11:29:08 +01:00
SelectorEngine . find ( SELECTOR _DROPDOWN _TOGGLE$1 ) . forEach ( function ( dropdown ) {
return dropdown . classList . add ( CLASS _NAME _ACTIVE$3 ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
element . setAttribute ( 'aria-expanded' , true ) ;
2018-03-31 22:59:37 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( callback ) {
callback ( ) ;
}
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Tab . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$9 ) || new Tab ( this ) ;
2018-11-13 07:41:12 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
}
data [ config ] ( ) ;
}
} ) ;
2018-03-31 22:59:37 +02:00
} ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass ( Tab , null , [ {
2020-12-03 15:18:59 +01:00
key : "DATA_KEY" ,
2021-02-11 04:29:59 +01:00
// Getters
get : function get ( ) {
2020-12-03 15:18:59 +01:00
return DATA _KEY$9 ;
2018-11-13 07:41:12 +01:00
}
} ] ) ;
return Tab ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-03-28 11:29:08 +01:00
EventHandler . on ( document , EVENT _CLICK _DATA _API$6 , SELECTOR _DATA _TOGGLE$4 , function ( event ) {
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$9 ) || new Tab ( this ) ;
data . show ( ) ;
2018-11-13 07:41:12 +01:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Tab to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$9 , Tab ) ;
2017-09-06 06:05:12 +02:00
/ * *
2018-11-24 17:22:59 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2017-09-06 06:05:12 +02:00
* /
2018-03-31 22:59:37 +02:00
2018-11-24 17:22:59 +01:00
var NAME$a = 'toast' ;
var DATA _KEY$a = 'bs.toast' ;
var EVENT _KEY$a = "." + DATA _KEY$a ;
2020-03-28 11:29:08 +01:00
var EVENT _CLICK _DISMISS$1 = "click.dismiss" + EVENT _KEY$a ;
var EVENT _HIDE$4 = "hide" + EVENT _KEY$a ;
var EVENT _HIDDEN$4 = "hidden" + EVENT _KEY$a ;
var EVENT _SHOW$4 = "show" + EVENT _KEY$a ;
var EVENT _SHOWN$4 = "shown" + EVENT _KEY$a ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _FADE$5 = 'fade' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _HIDE = 'hide' ;
2021-02-10 17:14:51 +01:00
var CLASS _NAME _SHOW$7 = 'show' ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _SHOWING = 'showing' ;
2018-11-24 17:22:59 +01:00
var DefaultType$7 = {
animation : 'boolean' ,
autohide : 'boolean' ,
delay : 'number'
} ;
var Default$7 = {
animation : true ,
autohide : true ,
2020-09-14 17:12:06 +02:00
delay : 5000
2018-11-24 17:22:59 +01:00
} ;
2020-11-23 14:17:16 +01:00
var SELECTOR _DATA _DISMISS$1 = '[data-bs-dismiss="toast"]' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Toast = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Toast , _BaseComponent ) ;
2018-11-24 17:22:59 +01:00
function Toast ( element , config ) {
2020-12-03 15:18:59 +01:00
var _this ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this = _BaseComponent . call ( this , element ) || this ;
_this . _config = _this . _getConfig ( config ) ;
_this . _timeout = null ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
_this . _setListeners ( ) ;
return _this ;
2018-11-24 17:22:59 +01:00
} // Getters
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var _proto = Toast . prototype ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
// Public
_proto . show = function show ( ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler . trigger ( this . _element , EVENT _SHOW$4 ) ;
2019-07-12 23:56:26 +02:00
if ( showEvent . defaultPrevented ) {
return ;
}
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
this . _clearTimeout ( ) ;
2018-11-24 17:22:59 +01:00
if ( this . _config . animation ) {
2021-02-10 17:14:51 +01:00
this . _element . classList . add ( CLASS _NAME _FADE$5 ) ;
2018-11-24 17:22:59 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
_this2 . _element . classList . remove ( CLASS _NAME _SHOWING ) ;
2018-12-16 00:13:22 +01:00
2021-02-10 17:14:51 +01:00
_this2 . _element . classList . add ( CLASS _NAME _SHOW$7 ) ;
2018-12-16 00:13:22 +01:00
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this2 . _element , EVENT _SHOWN$4 ) ;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if ( _this2 . _config . autohide ) {
_this2 . _timeout = setTimeout ( function ( ) {
_this2 . hide ( ) ;
} , _this2 . _config . delay ) ;
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
} ;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this . _element . classList . remove ( CLASS _NAME _HIDE ) ;
2018-12-16 00:13:22 +01:00
2019-07-24 08:13:50 +02:00
reflow ( this . _element ) ;
2020-03-28 11:29:08 +01:00
this . _element . classList . add ( CLASS _NAME _SHOWING ) ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
if ( this . _config . animation ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _element , 'transitionend' , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-24 17:22:59 +01:00
} else {
complete ( ) ;
}
} ;
2017-09-06 06:05:12 +02:00
2019-04-18 13:47:52 +02:00
_proto . hide = function hide ( ) {
2020-12-03 15:18:59 +01:00
var _this3 = this ;
2018-03-31 22:59:37 +02:00
2021-02-10 17:14:51 +01:00
if ( ! this . _element . classList . contains ( CLASS _NAME _SHOW$7 ) ) {
2018-11-24 17:22:59 +01:00
return ;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var hideEvent = EventHandler . trigger ( this . _element , EVENT _HIDE$4 ) ;
2019-07-12 23:56:26 +02:00
if ( hideEvent . defaultPrevented ) {
return ;
}
2018-11-13 07:41:12 +01:00
2019-04-18 13:47:52 +02:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
_this3 . _element . classList . add ( CLASS _NAME _HIDE ) ;
2019-04-18 13:47:52 +02:00
2020-12-03 15:18:59 +01:00
EventHandler . trigger ( _this3 . _element , EVENT _HIDDEN$4 ) ;
2019-04-18 13:47:52 +02:00
} ;
2021-02-10 17:14:51 +01:00
this . _element . classList . remove ( CLASS _NAME _SHOW$7 ) ;
2019-04-18 13:47:52 +02:00
if ( this . _config . animation ) {
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
2021-02-10 17:14:51 +01:00
EventHandler . one ( this . _element , 'transitionend' , complete ) ;
2019-04-18 13:47:52 +02:00
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-24 17:22:59 +01:00
} else {
2019-04-18 13:47:52 +02:00
complete ( ) ;
2018-11-24 17:22:59 +01:00
}
} ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
_proto . dispose = function dispose ( ) {
2020-09-14 17:12:06 +02:00
this . _clearTimeout ( ) ;
2017-09-06 06:05:12 +02:00
2021-02-10 17:14:51 +01:00
if ( this . _element . classList . contains ( CLASS _NAME _SHOW$7 ) ) {
this . _element . classList . remove ( CLASS _NAME _SHOW$7 ) ;
2018-11-24 17:22:59 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . off ( this . _element , EVENT _CLICK _DISMISS$1 ) ;
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2018-11-24 17:22:59 +01:00
this . _config = null ;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-09-14 17:12:06 +02:00
config = _extends ( { } , Default$7 , Manipulator . getDataAttributes ( this . _element ) , typeof config === 'object' && config ? config : { } ) ;
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME$a , config , this . constructor . DefaultType ) ;
2018-11-24 17:22:59 +01:00
return config ;
} ;
_proto . _setListeners = function _setListeners ( ) {
2020-12-03 15:18:59 +01:00
var _this4 = this ;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _CLICK _DISMISS$1 , SELECTOR _DATA _DISMISS$1 , function ( ) {
2020-12-03 15:18:59 +01:00
return _this4 . hide ( ) ;
2018-11-24 17:22:59 +01:00
} ) ;
2020-09-14 17:12:06 +02:00
} ;
_proto . _clearTimeout = function _clearTimeout ( ) {
clearTimeout ( this . _timeout ) ;
this . _timeout = null ;
2019-01-04 17:29:45 +01:00
} // Static
;
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
Toast . jQueryInterface = function jQueryInterface ( config ) {
2018-11-24 17:22:59 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY$a ) ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var _config = typeof config === 'object' && config ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
if ( ! data ) {
data = new Toast ( this , _config ) ;
}
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2017-09-06 06:05:12 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-24 17:22:59 +01:00
data [ config ] ( this ) ;
2018-11-13 07:41:12 +01:00
}
2018-11-24 17:22:59 +01:00
} ) ;
} ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
_createClass ( Toast , null , [ {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$7 ;
}
2019-02-11 20:15:34 +01:00
} , {
key : "Default" ,
get : function get ( ) {
return Default$7 ;
}
2020-12-03 15:18:59 +01:00
} , {
key : "DATA_KEY" ,
get : function get ( ) {
return DATA _KEY$a ;
}
2018-11-24 17:22:59 +01:00
} ] ) ;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
return Toast ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-24 17:22:59 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Toast to jQuery only if jQuery is present
2018-11-24 17:22:59 +01:00
* /
2018-11-13 07:41:12 +01:00
2019-07-24 08:13:50 +02:00
2021-02-10 17:14:51 +01:00
defineJQueryPlugin ( NAME$a , Toast ) ;
2017-09-06 06:05:12 +02:00
2018-03-31 22:59:37 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-02-10 17:14:51 +01:00
* Bootstrap ( v5 . 0.0 - beta2 ) : index . umd . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2018-03-31 22:59:37 +02:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2019-03-11 16:13:30 +01:00
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
} ;
2017-09-06 06:05:12 +02:00
2019-03-11 16:13:30 +01:00
return index _umd ;
2017-09-06 06:05:12 +02:00
2019-11-08 09:11:23 +01:00
} ) ) ) ;
2017-10-19 09:17:08 +02:00
//# sourceMappingURL=bootstrap.bundle.js.map