2013-09-11 02:21:44 +00:00
/ * !
2019-02-13 16:01:40 +00:00
* Bootstrap v4 . 3.1 ( https : //getbootstrap.com/)
2019-01-04 16:29:45 +00:00
* Copyright 2011 - 2019 The Bootstrap Authors ( https : //github.com/twbs/bootstrap/graphs/contributors)
2017-09-06 04:05:12 +00:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* /
2017-12-23 00:21:54 +00:00
( function ( global , factory ) {
2019-03-11 15:13:30 +00:00
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( require ( 'popper.js' ) ) :
typeof define === 'function' && define . amd ? define ( [ 'popper.js' ] , factory ) :
( global = global || self , global . bootstrap = factory ( global . Popper ) ) ;
} ( this , function ( Popper ) { 'use strict' ;
2016-10-10 00:26:51 +00:00
2019-01-04 16:29:45 +00:00
Popper = Popper && Popper . hasOwnProperty ( 'default' ) ? Popper [ 'default' ] : Popper ;
2015-08-15 19:19:11 +00:00
2018-03-31 20:59:37 +00: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 ) ;
}
2017-11-08 04:45:26 +00:00
}
2018-03-31 20:59:37 +00:00
function _createClass ( Constructor , protoProps , staticProps ) {
if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ;
if ( staticProps ) _defineProperties ( Constructor , staticProps ) ;
return Constructor ;
}
2017-12-23 00:21:54 +00:00
2018-03-31 20:59:37 +00:00
function _defineProperty ( obj , key , value ) {
if ( key in obj ) {
Object . defineProperty ( obj , key , {
value : value ,
enumerable : true ,
configurable : true ,
writable : true
} ) ;
} else {
obj [ key ] = value ;
2017-12-23 00:21:54 +00:00
}
2018-03-31 20:59:37 +00:00
return obj ;
2015-08-15 19:19:11 +00:00
}
2018-03-31 20:59:37 +00:00
function _objectSpread ( target ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
var source = arguments [ i ] != null ? arguments [ i ] : { } ;
var ownKeys = Object . keys ( source ) ;
2017-09-30 21:28:03 +00:00
2018-03-31 20:59:37 +00:00
if ( typeof Object . getOwnPropertySymbols === 'function' ) {
ownKeys = ownKeys . concat ( Object . getOwnPropertySymbols ( source ) . filter ( function ( sym ) {
return Object . getOwnPropertyDescriptor ( source , sym ) . enumerable ;
} ) ) ;
2015-08-15 19:19:11 +00:00
}
2018-03-31 20:59:37 +00:00
ownKeys . forEach ( function ( key ) {
_defineProperty ( target , key , source [ key ] ) ;
} ) ;
2015-08-15 19:19:11 +00:00
}
2018-03-31 20:59:37 +00:00
return target ;
2015-08-15 19:19:11 +00:00
}
2018-03-31 20:59:37 +00:00
function _inheritsLoose ( subClass , superClass ) {
subClass . prototype = Object . create ( superClass . prototype ) ;
subClass . prototype . constructor = subClass ;
subClass . _ _proto _ _ = superClass ;
2015-08-15 19:19:11 +00:00
}
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* Bootstrap ( v4 . 3.1 ) : util / index . js
2018-03-31 20:59:37 +00:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
2015-08-15 19:19:11 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2019-03-01 16:31:34 +00:00
var MAX _UID = 1000000 ;
var MILLISECONDS _MULTIPLIER = 1000 ;
var TRANSITION _END = 'transitionend' ;
2019-03-11 15:13:30 +00:00
var _window = window ,
jQuery = _window . jQuery ; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2019-03-01 16:31:34 +00:00
var toType = function toType ( obj ) {
return { } . toString . call ( obj ) . match ( /\s([a-z]+)/i ) [ 1 ] . toLowerCase ( ) ;
} ;
2018-11-13 06:41:12 +00:00
/ * *
2019-03-01 16:31:34 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* /
2018-03-31 20:59:37 +00:00
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var getUID = function getUID ( prefix ) {
do {
// eslint-disable-next-line no-bitwise
prefix += ~ ~ ( Math . random ( ) * MAX _UID ) ; // "~~" acts like a faster Math.floor() here
} while ( document . getElementById ( prefix ) ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
return prefix ;
} ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
var getSelectorFromElement = function getSelectorFromElement ( element ) {
var selector = element . getAttribute ( 'data-target' ) ;
if ( ! selector || selector === '#' ) {
var hrefAttr = element . getAttribute ( 'href' ) ;
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr . trim ( ) : '' ;
}
try {
return document . querySelector ( selector ) ? selector : null ;
2019-03-11 15:13:30 +00:00
} catch ( error ) {
2019-03-01 16:31:34 +00:00
return null ;
}
} ;
var getTransitionDurationFromElement = function getTransitionDurationFromElement ( element ) {
if ( ! element ) {
return 0 ;
} // Get transition-duration of the element
2015-08-15 19:19:11 +00:00
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
var _window$getComputedSt = window . getComputedStyle ( element ) ,
transitionDuration = _window$getComputedSt . transitionDuration ,
transitionDelay = _window$getComputedSt . transitionDelay ;
var floatTransitionDuration = parseFloat ( transitionDuration ) ;
var floatTransitionDelay = parseFloat ( transitionDelay ) ; // Return 0 if element or transition duration is not found
if ( ! floatTransitionDuration && ! floatTransitionDelay ) {
return 0 ;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration . split ( ',' ) [ 0 ] ;
transitionDelay = transitionDelay . split ( ',' ) [ 0 ] ;
return ( parseFloat ( transitionDuration ) + parseFloat ( transitionDelay ) ) * MILLISECONDS _MULTIPLIER ;
} ;
var triggerTransitionEnd = function triggerTransitionEnd ( element ) {
2019-04-18 11:47:52 +00:00
var evt = document . createEvent ( 'HTMLEvents' ) ;
evt . initEvent ( TRANSITION _END , true , true ) ;
element . dispatchEvent ( evt ) ;
2019-03-01 16:31:34 +00:00
} ;
var isElement = function isElement ( obj ) {
return ( obj [ 0 ] || obj ) . nodeType ;
} ;
var emulateTransitionEnd = function emulateTransitionEnd ( element , duration ) {
2018-11-13 06:41:12 +00:00
var called = false ;
2019-03-01 16:31:34 +00:00
var durationPadding = 5 ;
var emulatedDuration = duration + durationPadding ;
function listener ( ) {
2018-11-13 06:41:12 +00:00
called = true ;
2019-03-01 16:31:34 +00:00
element . removeEventListener ( TRANSITION _END , listener ) ;
}
element . addEventListener ( TRANSITION _END , listener ) ;
2018-11-13 06:41:12 +00:00
setTimeout ( function ( ) {
if ( ! called ) {
2019-03-01 16:31:34 +00:00
triggerTransitionEnd ( element ) ;
2018-11-13 06:41:12 +00:00
}
2019-03-01 16:31:34 +00: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 ) ) {
throw new Error ( componentName . toUpperCase ( ) + ": " + ( "Option \"" + property + "\" provided type \"" + valueType + "\" " ) + ( "but expected type \"" + expectedTypes + "\"." ) ) ;
}
} ) ;
} ;
var makeArray = function makeArray ( nodeList ) {
if ( ! nodeList ) {
return [ ] ;
}
return [ ] . slice . call ( nodeList ) ;
} ;
var isVisible = function isVisible ( element ) {
if ( ! element ) {
return false ;
}
if ( element . style && element . parentNode && element . parentNode . style ) {
return element . style . display !== 'none' && element . parentNode . style . display !== 'none' && element . style . visibility !== 'hidden' ;
}
return false ;
} ;
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 ) ;
} ; // eslint-disable-next-line no-empty-function
var noop = function noop ( ) {
return function ( ) { } ;
} ;
var reflow = function reflow ( element ) {
return element . offsetHeight ;
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* Bootstrap ( v4 . 3.1 ) : dom / data . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
2018-11-13 06:41:12 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var mapData = function ( ) {
var storeData = { } ;
var id = 1 ;
return {
set : function set ( element , key , data ) {
if ( typeof element . key === 'undefined' ) {
element . key = {
key : key ,
id : id
} ;
id ++ ;
}
storeData [ element . key . id ] = data ;
} ,
get : function get ( element , key ) {
if ( ! element || typeof element . key === 'undefined' ) {
return null ;
}
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
var keyProperties = element . key ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
if ( keyProperties . key === key ) {
return storeData [ keyProperties . id ] ;
}
return null ;
} ,
delete : function _delete ( element , key ) {
if ( typeof element . key === 'undefined' ) {
return ;
}
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
var keyProperties = element . key ;
if ( keyProperties . key === key ) {
delete storeData [ keyProperties . id ] ;
delete element . key ;
}
2018-11-13 06:41:12 +00:00
}
2019-03-01 16:31:34 +00: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 ) ;
}
} ;
2019-04-18 11:47:52 +00:00
/* istanbul ignore file */
var _Element$prototype = Element . prototype ,
matches = _Element$prototype . matches ,
closest = _Element$prototype . closest ;
var find = Element . prototype . querySelectorAll ;
var findOne = Element . prototype . querySelector ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
var createCustomEvent = function createCustomEvent ( eventName , params ) {
var cEvent = new CustomEvent ( eventName , params ) ;
return cEvent ;
} ;
if ( typeof window . CustomEvent !== 'function' ) {
createCustomEvent = function createCustomEvent ( eventName , params ) {
params = params || {
bubbles : false ,
cancelable : false ,
detail : null
} ;
var evt = document . createEvent ( 'CustomEvent' ) ;
evt . initCustomEvent ( eventName , params . bubbles , params . cancelable , params . detail ) ;
return evt ;
} ;
}
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
var workingDefaultPrevented = function ( ) {
var e = document . createEvent ( 'CustomEvent' ) ;
e . initEvent ( 'Bootstrap' , true , true ) ;
e . preventDefault ( ) ;
return e . defaultPrevented ;
} ( ) ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
if ( ! workingDefaultPrevented ) {
var origPreventDefault = Event . prototype . preventDefault ;
2018-11-13 06:41:12 +00:00
2019-04-18 11:47:52 +00:00
Event . prototype . preventDefault = function ( ) {
if ( ! this . cancelable ) {
return ;
2019-03-01 16:31:34 +00:00
}
2019-04-18 11:47:52 +00:00
origPreventDefault . call ( this ) ;
Object . defineProperty ( this , 'defaultPrevented' , {
get : function get ( ) {
return true ;
} ,
configurable : true
} ) ;
} ;
} // MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
var defaultPreventedPreservedOnDispatch = function ( ) {
var e = createCustomEvent ( 'Bootstrap' , {
cancelable : true
} ) ;
var element = document . createElement ( 'div' ) ;
element . addEventListener ( 'Bootstrap' , function ( ) {
return null ;
} ) ;
e . preventDefault ( ) ;
element . dispatchEvent ( e ) ;
return e . defaultPrevented ;
} ( ) ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
if ( ! matches ) {
matches = Element . prototype . msMatchesSelector || Element . prototype . webkitMatchesSelector ;
}
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
if ( ! closest ) {
closest = function closest ( selector ) {
var element = this ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
do {
if ( matches . call ( element , selector ) ) {
return element ;
2019-03-01 16:31:34 +00:00
}
2019-04-18 11:47:52 +00:00
element = element . parentElement || element . parentNode ;
} while ( element !== null && element . nodeType === 1 ) ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
return null ;
} ;
}
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
var scopeSelectorRegex = /:scope\b/ ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
var supportScopeQuery = function ( ) {
var element = document . createElement ( 'div' ) ;
2019-03-01 16:31:34 +00:00
2019-04-18 11:47:52 +00:00
try {
element . querySelectorAll ( ':scope *' ) ;
} catch ( error ) {
return false ;
2019-03-01 16:31:34 +00:00
}
2019-04-18 11:47:52 +00:00
return true ;
2019-03-01 16:31:34 +00:00
} ( ) ;
2019-04-18 11:47:52 +00:00
if ( ! supportScopeQuery ) {
find = function find ( selector ) {
if ( ! scopeSelectorRegex . test ( selector ) ) {
return this . querySelectorAll ( selector ) ;
}
var hasId = Boolean ( this . id ) ;
if ( ! hasId ) {
this . id = getUID ( 'scope' ) ;
}
var nodeList = null ;
try {
selector = selector . replace ( scopeSelectorRegex , "#" + this . id ) ;
nodeList = this . querySelectorAll ( selector ) ;
} finally {
if ( ! hasId ) {
this . removeAttribute ( 'id' ) ;
}
}
return nodeList ;
} ;
findOne = function findOne ( selector ) {
if ( ! scopeSelectorRegex . test ( selector ) ) {
return this . querySelector ( selector ) ;
}
var matches = find . call ( this , selector ) ;
if ( typeof matches [ 0 ] !== 'undefined' ) {
return matches [ 0 ] ;
}
return null ;
} ;
}
2019-03-01 16:31:34 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-05-08 13:11:24 +00:00
* Bootstrap ( v4 . 3.1 ) : dom / event - handler . js
2019-03-01 16:31:34 +00:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var namespaceRegex = /[^.]*(?=\..*)\.|.*/ ;
var stripNameRegex = /\..*/ ;
var keyEventRegex = /^key/ ;
var stripUidRegex = /::\d+$/ ;
var eventRegistry = { } ; // Events storage
var uidEvent = 1 ;
var customEvents = {
mouseenter : 'mouseover' ,
mouseleave : 'mouseout'
} ;
var nativeEvents = [ 'click' , 'dblclick' , 'mouseup' , 'mousedown' , 'contextmenu' , 'mousewheel' , 'DOMMouseScroll' , 'mouseover' , 'mouseout' , 'mousemove' , 'selectstart' , 'selectend' , 'keydown' , 'keypress' , 'keyup' , 'orientationchange' , 'touchstart' , 'touchmove' , 'touchend' , 'touchcancel' , 'pointerdown' , 'pointermove' , 'pointerup' , 'pointerleave' , 'pointercancel' , 'gesturestart' , 'gesturechange' , 'gestureend' , 'focus' , 'blur' , 'change' , 'reset' , 'select' , 'submit' , 'focusin' , 'focusout' , 'load' , 'unload' , 'beforeunload' , 'resize' , 'move' , 'DOMContentLoaded' , 'readystatechange' , 'error' , 'abort' , 'scroll' ] ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Private methods
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
function getUidEvent ( element , uid ) {
return uid && uid + "::" + uidEvent ++ || element . uidEvent || uidEvent ++ ;
}
function getEvent ( element ) {
var uid = getUidEvent ( element ) ;
element . uidEvent = uid ;
2019-03-11 15:13:30 +00:00
eventRegistry [ uid ] = eventRegistry [ uid ] || { } ;
return eventRegistry [ uid ] ;
2019-03-01 16:31:34 +00:00
}
function fixEvent ( event , element ) {
// Add which for key events
if ( event . which === null && keyEventRegex . test ( event . type ) ) {
2019-03-11 15:13:30 +00:00
event . which = event . charCode === null ? event . keyCode : event . charCode ;
2019-03-01 16:31:34 +00:00
}
event . delegateTarget = element ;
}
function bootstrapHandler ( element , fn ) {
return function handler ( event ) {
fixEvent ( event , element ) ;
if ( handler . oneOff ) {
EventHandler . off ( element , event . type , fn ) ;
}
return fn . apply ( element , [ event ] ) ;
} ;
}
function bootstrapDelegationHandler ( element , selector , fn ) {
return function handler ( event ) {
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 ) {
fixEvent ( event , target ) ;
if ( handler . oneOff ) {
EventHandler . off ( element , event . type , fn ) ;
}
return fn . apply ( target , [ event ] ) ;
}
}
} // To please ESLint
return null ;
} ;
}
function findHandler ( events , handler , delegationSelector ) {
if ( delegationSelector === void 0 ) {
delegationSelector = null ;
}
2019-07-12 21:56:26 +00:00
var uidEventList = Object . keys ( events ) ;
for ( var i = 0 , len = uidEventList . length ; i < len ; i ++ ) {
var event = events [ uidEventList [ i ] ] ;
2019-03-01 16:31:34 +00:00
if ( event . originalHandler === handler && event . delegationSelector === delegationSelector ) {
2019-07-12 21:56:26 +00:00
return event ;
2019-03-01 16:31:34 +00: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 ;
}
var isNative = nativeEvents . indexOf ( typeEvent ) > - 1 ;
if ( ! isNative ) {
typeEvent = originalTypeEvent ;
}
return [ delegation , originalHandler , typeEvent ] ;
}
function addHandler ( element , originalTypeEvent , handler , delegationFn , oneOff ) {
if ( typeof originalTypeEvent !== 'string' || ! element ) {
return ;
}
if ( ! handler ) {
handler = delegationFn ;
delegationFn = null ;
}
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 15:13:30 +00:00
var fn = delegation ? bootstrapDelegationHandler ( element , handler , delegationFn ) : bootstrapHandler ( element , handler ) ;
2019-03-01 16:31:34 +00: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 21:56:26 +00:00
if ( ! fn ) {
2019-03-01 16:31:34 +00: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 ) {
if ( handlerKey . indexOf ( namespace ) > - 1 ) {
var event = storeElementEvent [ handlerKey ] ;
removeHandler ( element , events , typeEvent , event . originalHandler , event . delegationSelector ) ;
2019-01-04 16:29:45 +00:00
}
2019-03-01 16:31:34 +00:00
} ) ;
}
var EventHandler = {
on : function on ( element , event , handler , delegationFn ) {
addHandler ( element , event , handler , delegationFn , false ) ;
2018-11-13 06:41:12 +00:00
} ,
2019-03-01 16:31:34 +00: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-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
var _normalizeParams2 = normalizeParams ( originalTypeEvent , handler , delegationFn ) ,
delegation = _normalizeParams2 [ 0 ] ,
originalHandler = _normalizeParams2 [ 1 ] ,
typeEvent = _normalizeParams2 [ 2 ] ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
var inNamespace = typeEvent !== originalTypeEvent ;
var events = getEvent ( element ) ;
var isNamespace = originalTypeEvent . charAt ( 0 ) === '.' ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof originalHandler !== 'undefined' ) {
// Simplest case: handler is passed, remove that listener ONLY.
if ( ! events || ! events [ typeEvent ] ) {
return ;
}
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
removeHandler ( element , events , typeEvent , originalHandler , delegation ? handler : null ) ;
return ;
}
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
if ( isNamespace ) {
Object . keys ( events ) . forEach ( function ( elementEvent ) {
removeNamespacedHandlers ( element , events , elementEvent , originalTypeEvent . substr ( 1 ) ) ;
} ) ;
}
var storeElementEvent = events [ typeEvent ] || { } ;
Object . keys ( storeElementEvent ) . forEach ( function ( keyHandlers ) {
var handlerKey = keyHandlers . replace ( stripUidRegex , '' ) ;
if ( ! inNamespace || originalTypeEvent . indexOf ( handlerKey ) > - 1 ) {
var event = storeElementEvent [ keyHandlers ] ;
removeHandler ( element , events , typeEvent , event . originalHandler , event . delegationSelector ) ;
}
} ) ;
2018-11-13 06:41:12 +00:00
} ,
2019-03-01 16:31:34 +00:00
trigger : function trigger ( element , event , args ) {
if ( typeof event !== 'string' || ! element ) {
return null ;
}
var typeEvent = event . replace ( stripNameRegex , '' ) ;
var inNamespace = event !== typeEvent ;
var isNative = nativeEvents . indexOf ( typeEvent ) > - 1 ;
var jQueryEvent ;
var bubbles = true ;
var nativeDispatch = true ;
var defaultPrevented = false ;
var evt = null ;
if ( inNamespace && typeof jQuery !== 'undefined' ) {
jQueryEvent = jQuery . Event ( event , args ) ;
jQuery ( element ) . trigger ( jQueryEvent ) ;
bubbles = ! jQueryEvent . isPropagationStopped ( ) ;
nativeDispatch = ! jQueryEvent . isImmediatePropagationStopped ( ) ;
defaultPrevented = jQueryEvent . isDefaultPrevented ( ) ;
}
if ( isNative ) {
evt = document . createEvent ( 'HTMLEvents' ) ;
evt . initEvent ( typeEvent , bubbles , true ) ;
} else {
2019-04-18 11:47:52 +00:00
evt = createCustomEvent ( event , {
2019-03-01 16:31:34 +00:00
bubbles : bubbles ,
cancelable : true
} ) ;
} // merge custom informations in our event
if ( typeof args !== 'undefined' ) {
Object . keys ( args ) . forEach ( function ( key ) {
Object . defineProperty ( evt , key , {
get : function get ( ) {
return args [ key ] ;
}
} ) ;
} ) ;
}
if ( defaultPrevented ) {
evt . preventDefault ( ) ;
2019-04-18 11:47:52 +00:00
if ( ! defaultPreventedPreservedOnDispatch ) {
2019-03-01 16:31:34 +00:00
Object . defineProperty ( evt , 'defaultPrevented' , {
get : function get ( ) {
return true ;
}
} ) ;
}
}
if ( nativeDispatch ) {
element . dispatchEvent ( evt ) ;
}
if ( evt . defaultPrevented && typeof jQueryEvent !== 'undefined' ) {
jQueryEvent . preventDefault ( ) ;
}
return evt ;
}
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-05-08 13:11:24 +00:00
* Bootstrap ( v4 . 3.1 ) : dom / selector - engine . js
2019-03-01 16:31:34 +00:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NODE _TEXT = 3 ;
var SelectorEngine = {
2019-04-18 11:47:52 +00:00
matches : function matches$1 ( element , selector ) {
return matches . call ( element , selector ) ;
2018-11-13 06:41:12 +00:00
} ,
2019-04-18 11:47:52 +00:00
find : function find$1 ( selector , element ) {
2019-03-01 16:31:34 +00:00
if ( element === void 0 ) {
element = document . documentElement ;
}
if ( typeof selector !== 'string' ) {
return null ;
}
2019-04-18 11:47:52 +00:00
return find . call ( element , selector ) ;
2018-11-13 06:41:12 +00:00
} ,
2019-04-18 11:47:52 +00:00
findOne : function findOne$1 ( selector , element ) {
2019-03-01 16:31:34 +00:00
if ( element === void 0 ) {
element = document . documentElement ;
}
if ( typeof selector !== 'string' ) {
return null ;
}
2019-04-18 11:47:52 +00:00
return findOne . call ( element , selector ) ;
2018-11-13 06:41:12 +00:00
} ,
2019-03-01 16:31:34 +00:00
children : function children ( element , selector ) {
var _this = this ;
if ( typeof selector !== 'string' ) {
return null ;
}
var children = makeArray ( element . children ) ;
return children . filter ( function ( child ) {
return _this . matches ( child , selector ) ;
} ) ;
2018-11-13 06:41:12 +00:00
} ,
2019-03-01 16:31:34 +00:00
parents : function parents ( element , selector ) {
if ( typeof selector !== 'string' ) {
return null ;
}
var parents = [ ] ;
var ancestor = element . parentNode ;
while ( ancestor && ancestor . nodeType === Node . ELEMENT _NODE && ancestor . nodeType !== NODE _TEXT ) {
if ( this . matches ( ancestor , selector ) ) {
parents . push ( ancestor ) ;
2015-08-15 19:19:11 +00:00
}
2019-03-01 16:31:34 +00:00
ancestor = ancestor . parentNode ;
2015-08-15 19:19:11 +00:00
}
2019-03-01 16:31:34 +00:00
return parents ;
2018-12-15 23:13:22 +00:00
} ,
2019-04-18 11:47:52 +00:00
closest : function closest$1 ( element , selector ) {
2019-03-01 16:31:34 +00:00
if ( typeof selector !== 'string' ) {
2018-12-15 23:13:22 +00:00
return null ;
2019-03-01 16:31:34 +00:00
}
2018-12-15 23:13:22 +00:00
2019-04-18 11:47:52 +00:00
return closest . call ( element , selector ) ;
2019-03-01 16:31:34 +00:00
} ,
prev : function prev ( element , selector ) {
if ( typeof selector !== 'string' ) {
return null ;
2018-12-15 23:13:22 +00:00
}
2019-03-01 16:31:34 +00:00
var siblings = [ ] ;
var previous = element . previousSibling ;
2018-12-15 23:13:22 +00:00
2019-03-01 16:31:34 +00:00
while ( previous && previous . nodeType === Node . ELEMENT _NODE && previous . nodeType !== NODE _TEXT ) {
if ( this . matches ( previous , selector ) ) {
siblings . push ( previous ) ;
}
2018-12-15 23:13:22 +00:00
2019-03-01 16:31:34 +00:00
previous = previous . previousSibling ;
2018-12-15 23:13:22 +00:00
}
2019-03-01 16:31:34 +00:00
return siblings ;
2018-11-13 06:41:12 +00:00
}
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'alert' ;
2019-02-13 16:01:40 +00:00
var VERSION = '4.3.1' ;
2018-11-13 06:41:12 +00:00
var DATA _KEY = 'bs.alert' ;
var EVENT _KEY = "." + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
var Selector = {
DISMISS : '[data-dismiss="alert"]'
} ;
2019-03-01 16:31:34 +00:00
var Event$1 = {
2018-11-13 06:41:12 +00:00
CLOSE : "close" + EVENT _KEY ,
CLOSED : "closed" + EVENT _KEY ,
CLICK _DATA _API : "click" + EVENT _KEY + DATA _API _KEY
} ;
var ClassName = {
ALERT : 'alert' ,
FADE : 'fade' ,
SHOW : 'show'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var Alert =
/*#__PURE__*/
function ( ) {
function Alert ( element ) {
this . _element = element ;
2019-03-01 16:31:34 +00:00
if ( this . _element ) {
Data . setData ( element , DATA _KEY , this ) ;
}
2018-11-13 06:41:12 +00:00
} // Getters
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Alert . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Public
_proto . close = function close ( element ) {
var rootElement = this . _element ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( element ) {
rootElement = this . _getRootElement ( element ) ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var customEvent = this . _triggerCloseEvent ( rootElement ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
if ( customEvent === null || customEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _removeElement ( rootElement ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
Data . removeData ( this . _element , DATA _KEY ) ;
2018-11-13 06:41:12 +00:00
this . _element = null ;
2019-01-04 16:29:45 +00:00
} // Private
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getRootElement = function _getRootElement ( element ) {
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( element ) ;
2018-11-13 06:41:12 +00:00
var parent = false ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( selector ) {
2019-03-01 16:31:34 +00:00
parent = SelectorEngine . findOne ( selector ) ;
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( ! parent ) {
2019-03-01 16:31:34 +00:00
parent = SelectorEngine . closest ( element , "." + ClassName . ALERT ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return parent ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _triggerCloseEvent = function _triggerCloseEvent ( element ) {
2019-03-01 16:31:34 +00:00
return EventHandler . trigger ( element , Event$1 . CLOSE ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _removeElement = function _removeElement ( element ) {
var _this = this ;
2016-11-01 04:36:10 +00:00
2019-03-01 16:31:34 +00:00
element . classList . remove ( ClassName . SHOW ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! element . classList . contains ( ClassName . FADE ) ) {
2018-11-13 06:41:12 +00:00
this . _destroyElement ( element ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-19 02:22:46 +00:00
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( element ) ;
EventHandler . one ( element , TRANSITION _END , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this . _destroyElement ( element , event ) ;
2019-03-01 16:31:34 +00:00
} ) ;
emulateTransitionEnd ( element , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _destroyElement = function _destroyElement ( element ) {
2019-03-01 16:31:34 +00:00
if ( element . parentNode ) {
element . parentNode . removeChild ( element ) ;
}
EventHandler . trigger ( element , Event$1 . CLOSED ) ;
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Alert . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data ) {
data = new Alert ( this ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( config === 'close' ) {
data [ config ] ( this ) ;
}
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Alert . _handleDismiss = function _handleDismiss ( alertInstance ) {
return function ( event ) {
if ( event ) {
event . preventDefault ( ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
alertInstance . close ( this ) ;
2016-10-10 00:26:51 +00:00
} ;
2018-11-13 06:41:12 +00:00
} ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
Alert . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Alert , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION ;
}
} ] ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return Alert ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$1 . CLICK _DATA _API , Selector . DISMISS , Alert . _handleDismiss ( new Alert ( ) ) ) ;
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . alert to jQuery only if jQuery is present
2018-11-13 06:41:12 +00:00
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT = jQuery . fn [ NAME ] ;
jQuery . fn [ NAME ] = Alert . _jQueryInterface ;
jQuery . fn [ NAME ] . Constructor = Alert ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME ] . noConflict = function ( ) {
jQuery . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Alert . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$1 = 'button' ;
2019-02-13 16:01:40 +00:00
var VERSION$1 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
var DATA _KEY$1 = 'bs.button' ;
var EVENT _KEY$1 = "." + DATA _KEY$1 ;
var DATA _API _KEY$1 = '.data-api' ;
var ClassName$1 = {
ACTIVE : 'active' ,
BUTTON : 'btn' ,
FOCUS : 'focus'
} ;
var Selector$1 = {
DATA _TOGGLE _CARROT : '[data-toggle^="button"]' ,
DATA _TOGGLE : '[data-toggle="buttons"]' ,
2018-12-15 23:13:22 +00:00
INPUT : 'input:not([type="hidden"])' ,
2018-11-13 06:41:12 +00:00
ACTIVE : '.active' ,
BUTTON : '.btn'
} ;
2019-03-01 16:31:34 +00:00
var Event$2 = {
2018-11-13 06:41:12 +00:00
CLICK _DATA _API : "click" + EVENT _KEY$1 + DATA _API _KEY$1 ,
2019-03-01 16:31:34 +00:00
FOCUS _DATA _API : "focus" + EVENT _KEY$1 + DATA _API _KEY$1 ,
BLUR _DATA _API : "blur" + EVENT _KEY$1 + DATA _API _KEY$1
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var Button =
/*#__PURE__*/
function ( ) {
function Button ( element ) {
this . _element = element ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$1 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Button . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Public
_proto . toggle = function toggle ( ) {
var triggerChangeEvent = true ;
var addAriaPressed = true ;
2019-03-01 16:31:34 +00:00
var rootElement = SelectorEngine . closest ( this . _element , Selector$1 . DATA _TOGGLE ) ;
2018-11-13 06:41:12 +00:00
if ( rootElement ) {
2019-03-01 16:31:34 +00:00
var input = SelectorEngine . findOne ( Selector$1 . INPUT , this . _element ) ;
2018-11-13 06:41:12 +00:00
if ( input ) {
if ( input . type === 'radio' ) {
if ( input . checked && this . _element . classList . contains ( ClassName$1 . ACTIVE ) ) {
triggerChangeEvent = false ;
} else {
2019-03-01 16:31:34 +00:00
var activeElement = SelectorEngine . findOne ( Selector$1 . ACTIVE , rootElement ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( activeElement ) {
2019-03-01 16:31:34 +00:00
activeElement . classList . remove ( ClassName$1 . ACTIVE ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
}
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( triggerChangeEvent ) {
if ( input . hasAttribute ( 'disabled' ) || rootElement . hasAttribute ( 'disabled' ) || input . classList . contains ( 'disabled' ) || rootElement . classList . contains ( 'disabled' ) ) {
return ;
2017-05-16 07:59:44 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
input . checked = ! this . _element . classList . contains ( ClassName$1 . ACTIVE ) ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( input , 'change' ) ;
2015-08-15 19:19:11 +00:00
}
2018-11-13 06:41:12 +00:00
input . focus ( ) ;
addAriaPressed = false ;
2015-08-15 19:19:11 +00:00
}
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( addAriaPressed ) {
this . _element . setAttribute ( 'aria-pressed' , ! this . _element . classList . contains ( ClassName$1 . ACTIVE ) ) ;
}
2017-01-05 22:51:14 +00:00
2018-11-13 06:41:12 +00:00
if ( triggerChangeEvent ) {
2019-03-01 16:31:34 +00:00
this . _element . classList . toggle ( ClassName$1 . ACTIVE ) ;
2018-11-13 06:41:12 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
Data . removeData ( this . _element , DATA _KEY$1 ) ;
2018-11-13 06:41:12 +00:00
this . _element = null ;
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Button . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$1 ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data ) {
data = new Button ( this ) ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( config === 'toggle' ) {
data [ config ] ( ) ;
2016-10-10 00:26:51 +00:00
}
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
Button . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$1 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Button , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$1 ;
}
} ] ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
return Button ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$2 . CLICK _DATA _API , Selector$1 . DATA _TOGGLE _CARROT , function ( event ) {
2018-11-13 06:41:12 +00:00
event . preventDefault ( ) ;
var button = event . target ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! button . classList . contains ( ClassName$1 . BUTTON ) ) {
button = SelectorEngine . closest ( button , Selector$1 . BUTTON ) ;
2018-11-13 06:41:12 +00:00
}
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
var data = Data . getData ( button , DATA _KEY$1 ) ;
if ( ! data ) {
data = new Button ( button ) ;
Data . setData ( button , DATA _KEY$1 , data ) ;
}
data . toggle ( ) ;
} ) ;
EventHandler . on ( document , Event$2 . FOCUS _DATA _API , Selector$1 . DATA _TOGGLE _CARROT , function ( event ) {
var button = SelectorEngine . closest ( event . target , Selector$1 . BUTTON ) ;
2019-04-18 11:47:52 +00:00
if ( button ) {
button . classList . add ( ClassName$1 . FOCUS ) ;
}
2019-03-01 16:31:34 +00:00
} ) ;
EventHandler . on ( document , Event$2 . BLUR _DATA _API , Selector$1 . DATA _TOGGLE _CARROT , function ( event ) {
var button = SelectorEngine . closest ( event . target , Selector$1 . BUTTON ) ;
2019-04-18 11:47:52 +00:00
if ( button ) {
button . classList . remove ( ClassName$1 . FOCUS ) ;
}
2018-11-13 06:41:12 +00:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . button to jQuery only if jQuery is present
* /
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$1 = jQuery . fn [ NAME$1 ] ;
jQuery . fn [ NAME$1 ] = Button . _jQueryInterface ;
jQuery . fn [ NAME$1 ] . Constructor = Button ;
jQuery . fn [ NAME$1 ] . noConflict = function ( ) {
jQuery . fn [ NAME$1 ] = JQUERY _NO _CONFLICT$1 ;
return Button . _jQueryInterface ;
} ;
}
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 3.1 ) : dom / manipulator . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* /
2019-03-01 16:31:34 +00: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 ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
function normalizeDataKey ( key ) {
return key . replace ( /[A-Z]/g , function ( chr ) {
return chr . toLowerCase ( ) ;
} ) ;
}
var Manipulator = {
setDataAttribute : function setDataAttribute ( element , key , value ) {
element . setAttribute ( "data-" + normalizeDataKey ( key ) , value ) ;
} ,
removeDataAttribute : function removeDataAttribute ( element , key ) {
element . removeAttribute ( "data-" + normalizeDataKey ( key ) ) ;
} ,
getDataAttributes : function getDataAttributes ( element ) {
if ( ! element ) {
return { } ;
}
var attributes = _objectSpread ( { } , element . dataset ) ;
Object . keys ( attributes ) . forEach ( function ( key ) {
attributes [ key ] = normalizeData ( attributes [ key ] ) ;
} ) ;
return attributes ;
} ,
getDataAttribute : function getDataAttribute ( element , key ) {
return normalizeData ( element . getAttribute ( "data-" + normalizeDataKey ( key ) ) ) ;
} ,
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
} ;
} ,
toggleClass : function toggleClass ( element , className ) {
if ( ! element ) {
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( element . classList . contains ( className ) ) {
element . classList . remove ( className ) ;
} else {
element . classList . add ( className ) ;
}
}
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
/ * *
2018-11-13 06:41:12 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2015-08-15 19:19:11 +00:00
* /
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
var NAME$2 = 'carousel' ;
2019-02-13 16:01:40 +00:00
var VERSION$2 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
var DATA _KEY$2 = 'bs.carousel' ;
var EVENT _KEY$2 = "." + DATA _KEY$2 ;
var DATA _API _KEY$2 = '.data-api' ;
var ARROW _LEFT _KEYCODE = 37 ; // KeyboardEvent.which value for left arrow key
var ARROW _RIGHT _KEYCODE = 39 ; // KeyboardEvent.which value for right arrow key
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'
} ;
var Direction = {
NEXT : 'next' ,
PREV : 'prev' ,
LEFT : 'left' ,
RIGHT : 'right'
} ;
2019-03-01 16:31:34 +00:00
var Event$3 = {
2018-11-13 06:41:12 +00:00
SLIDE : "slide" + EVENT _KEY$2 ,
SLID : "slid" + EVENT _KEY$2 ,
KEYDOWN : "keydown" + EVENT _KEY$2 ,
MOUSEENTER : "mouseenter" + EVENT _KEY$2 ,
MOUSELEAVE : "mouseleave" + EVENT _KEY$2 ,
TOUCHSTART : "touchstart" + EVENT _KEY$2 ,
TOUCHMOVE : "touchmove" + EVENT _KEY$2 ,
TOUCHEND : "touchend" + EVENT _KEY$2 ,
POINTERDOWN : "pointerdown" + EVENT _KEY$2 ,
POINTERUP : "pointerup" + EVENT _KEY$2 ,
DRAG _START : "dragstart" + EVENT _KEY$2 ,
LOAD _DATA _API : "load" + EVENT _KEY$2 + DATA _API _KEY$2 ,
CLICK _DATA _API : "click" + EVENT _KEY$2 + DATA _API _KEY$2
} ;
var ClassName$2 = {
CAROUSEL : 'carousel' ,
ACTIVE : 'active' ,
SLIDE : 'slide' ,
RIGHT : 'carousel-item-right' ,
LEFT : 'carousel-item-left' ,
NEXT : 'carousel-item-next' ,
PREV : 'carousel-item-prev' ,
ITEM : 'carousel-item' ,
POINTER _EVENT : 'pointer-event'
} ;
var Selector$2 = {
ACTIVE : '.active' ,
ACTIVE _ITEM : '.active.carousel-item' ,
ITEM : '.carousel-item' ,
ITEM _IMG : '.carousel-item img' ,
NEXT _PREV : '.carousel-item-next, .carousel-item-prev' ,
INDICATORS : '.carousel-indicators' ,
DATA _SLIDE : '[data-slide], [data-slide-to]' ,
DATA _RIDE : '[data-ride="carousel"]'
} ;
var PointerType = {
TOUCH : 'touch' ,
PEN : 'pen'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
} ;
var Carousel =
/*#__PURE__*/
function ( ) {
function Carousel ( element , config ) {
this . _items = null ;
this . _interval = null ;
this . _activeElement = null ;
this . _isPaused = false ;
this . _isSliding = false ;
this . touchTimeout = null ;
this . touchStartX = 0 ;
this . touchDeltaX = 0 ;
this . _config = this . _getConfig ( config ) ;
this . _element = element ;
2019-03-01 16:31:34 +00:00
this . _indicatorsElement = SelectorEngine . findOne ( Selector$2 . INDICATORS , this . _element ) ;
2018-11-13 06:41:12 +00:00
this . _touchSupported = 'ontouchstart' in document . documentElement || navigator . maxTouchPoints > 0 ;
this . _pointerEvent = Boolean ( window . PointerEvent || window . MSPointerEvent ) ;
this . _addEventListeners ( ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$2 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
var _proto = Carousel . prototype ;
// Public
_proto . next = function next ( ) {
if ( ! this . _isSliding ) {
this . _slide ( Direction . NEXT ) ;
}
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00: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 16:31:34 +00:00
if ( ! document . hidden && isVisible ( this . _element ) ) {
2018-11-13 06:41:12 +00:00
this . next ( ) ;
}
2016-10-10 00:26:51 +00:00
} ;
2018-11-13 06:41:12 +00:00
_proto . prev = function prev ( ) {
if ( ! this . _isSliding ) {
this . _slide ( Direction . PREV ) ;
}
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . pause = function pause ( event ) {
if ( ! event ) {
this . _isPaused = true ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( SelectorEngine . findOne ( Selector$2 . NEXT _PREV , this . _element ) ) {
triggerTransitionEnd ( this . _element ) ;
2018-11-13 06:41:12 +00:00
this . cycle ( true ) ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
clearInterval ( this . _interval ) ;
this . _interval = null ;
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . cycle = function cycle ( event ) {
if ( ! event ) {
this . _isPaused = false ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _interval ) {
2018-03-31 20:59:37 +00:00
clearInterval ( this . _interval ) ;
this . _interval = null ;
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _config && this . _config . interval && ! this . _isPaused ) {
2018-11-13 06:41:12 +00:00
this . _interval = setInterval ( ( document . visibilityState ? this . nextWhenVisible : this . next ) . bind ( this ) , this . _config . interval ) ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . to = function to ( index ) {
var _this = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
this . _activeElement = SelectorEngine . findOne ( Selector$2 . ACTIVE _ITEM , this . _element ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var activeIndex = this . _getItemIndex ( this . _activeElement ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( index > this . _items . length - 1 || index < 0 ) {
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _isSliding ) {
2019-03-01 16:31:34 +00:00
EventHandler . one ( this . _element , Event$3 . SLID , function ( ) {
2018-11-13 06:41:12 +00:00
return _this . to ( index ) ;
} ) ;
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( activeIndex === index ) {
this . pause ( ) ;
this . cycle ( ) ;
return ;
}
2018-02-19 22:50:56 +00:00
2018-11-13 06:41:12 +00:00
var direction = index > activeIndex ? Direction . NEXT : Direction . PREV ;
2018-02-19 22:50:56 +00:00
2018-11-13 06:41:12 +00:00
this . _slide ( direction , this . _items [ index ] ) ;
} ;
2018-02-19 22:50:56 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
EventHandler . off ( this . _element , EVENT _KEY$2 ) ;
Data . removeData ( this . _element , DATA _KEY$2 ) ;
2018-11-13 06:41:12 +00:00
this . _items = null ;
this . _config = null ;
this . _element = null ;
this . _interval = null ;
this . _isPaused = null ;
this . _isSliding = null ;
this . _activeElement = null ;
this . _indicatorsElement = null ;
2019-01-04 16:29:45 +00:00
} // Private
;
2018-11-13 06:41:12 +00:00
_proto . _getConfig = function _getConfig ( config ) {
config = _objectSpread ( { } , Default , config ) ;
2019-03-01 16:31:34 +00:00
typeCheckConfig ( NAME$2 , config , DefaultType ) ;
2018-11-13 06:41:12 +00:00
return config ;
} ;
2018-02-19 22:50:56 +00:00
2018-11-13 06:41:12 +00:00
_proto . _handleSwipe = function _handleSwipe ( ) {
var absDeltax = Math . abs ( this . touchDeltaX ) ;
2018-02-19 22:50:56 +00:00
2018-11-13 06:41:12 +00:00
if ( absDeltax <= SWIPE _THRESHOLD ) {
return ;
}
2016-11-01 04:36:10 +00:00
2019-04-18 11:47:52 +00:00
var direction = absDeltax / this . touchDeltaX ;
this . touchDeltaX = 0 ; // swipe left
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( direction > 0 ) {
this . prev ( ) ;
} // swipe right
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( direction < 0 ) {
this . next ( ) ;
}
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _addEventListeners = function _addEventListeners ( ) {
var _this2 = this ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . keyboard ) {
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . KEYDOWN , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this2 . _keydown ( event ) ;
} ) ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . pause === 'hover' ) {
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . MOUSEENTER , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this2 . pause ( event ) ;
2019-03-01 16:31:34 +00:00
} ) ;
EventHandler . on ( this . _element , Event$3 . MOUSELEAVE , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this2 . cycle ( event ) ;
} ) ;
}
2015-08-15 19:19:11 +00:00
2019-02-11 19:15:34 +00:00
if ( this . _config . touch ) {
this . _addTouchEventListeners ( ) ;
}
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _addTouchEventListeners = function _addTouchEventListeners ( ) {
var _this3 = this ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( ! this . _touchSupported ) {
return ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var start = function start ( event ) {
2019-03-01 16:31:34 +00:00
if ( _this3 . _pointerEvent && PointerType [ event . pointerType . toUpperCase ( ) ] ) {
_this3 . touchStartX = event . clientX ;
2018-11-13 06:41:12 +00:00
} else if ( ! _this3 . _pointerEvent ) {
2019-03-01 16:31:34 +00:00
_this3 . touchStartX = event . touches [ 0 ] . clientX ;
2018-03-31 20:59:37 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var move = function move ( event ) {
// ensure swiping with one touch and not pinching
2019-03-01 16:31:34 +00:00
if ( event . touches && event . touches . length > 1 ) {
2018-11-13 06:41:12 +00:00
_this3 . touchDeltaX = 0 ;
} else {
2019-03-01 16:31:34 +00:00
_this3 . touchDeltaX = event . touches [ 0 ] . clientX - _this3 . touchStartX ;
2018-11-13 06:41:12 +00:00
}
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var end = function end ( event ) {
2019-03-01 16:31:34 +00:00
if ( _this3 . _pointerEvent && PointerType [ event . pointerType . toUpperCase ( ) ] ) {
_this3 . touchDeltaX = event . clientX - _this3 . touchStartX ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_this3 . _handleSwipe ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( _this3 . _config . pause === 'hover' ) {
// If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel
// (as if it's the second time we tap on it, mouseenter compat event
// is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling
_this3 . pause ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( _this3 . touchTimeout ) {
clearTimeout ( _this3 . touchTimeout ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_this3 . touchTimeout = setTimeout ( function ( event ) {
return _this3 . cycle ( event ) ;
} , TOUCHEVENT _COMPAT _WAIT + _this3 . _config . interval ) ;
}
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( Selector$2 . ITEM _IMG , this . _element ) ) . forEach ( function ( itemImg ) {
EventHandler . on ( itemImg , Event$3 . DRAG _START , function ( e ) {
return e . preventDefault ( ) ;
} ) ;
2018-11-13 06:41:12 +00:00
} ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _pointerEvent ) {
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . POINTERDOWN , function ( event ) {
2018-11-13 06:41:12 +00:00
return start ( event ) ;
} ) ;
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . POINTERUP , function ( event ) {
2018-11-13 06:41:12 +00:00
return end ( event ) ;
} ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _element . classList . add ( ClassName$2 . POINTER _EVENT ) ;
} else {
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . TOUCHSTART , function ( event ) {
2018-11-13 06:41:12 +00:00
return start ( event ) ;
2018-03-31 20:59:37 +00:00
} ) ;
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . TOUCHMOVE , function ( event ) {
2018-11-13 06:41:12 +00:00
return move ( event ) ;
} ) ;
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$3 . TOUCHEND , function ( event ) {
2018-11-13 06:41:12 +00:00
return end ( event ) ;
} ) ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _keydown = function _keydown ( event ) {
if ( /input|textarea/i . test ( event . target . tagName ) ) {
return ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
switch ( event . which ) {
case ARROW _LEFT _KEYCODE :
event . preventDefault ( ) ;
this . prev ( ) ;
break ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
case ARROW _RIGHT _KEYCODE :
event . preventDefault ( ) ;
this . next ( ) ;
break ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
default :
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getItemIndex = function _getItemIndex ( element ) {
2019-03-01 16:31:34 +00:00
this . _items = element && element . parentNode ? makeArray ( SelectorEngine . find ( Selector$2 . ITEM , element . parentNode ) ) : [ ] ;
2018-11-13 06:41:12 +00:00
return this . _items . indexOf ( element ) ;
} ;
2016-12-08 04:46:17 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getItemByDirection = function _getItemByDirection ( direction , activeElement ) {
var isNextDirection = direction === Direction . NEXT ;
var isPrevDirection = direction === Direction . PREV ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
var activeIndex = this . _getItemIndex ( activeElement ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var lastItemIndex = this . _items . length - 1 ;
var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( isGoingToWrap && ! this . _config . wrap ) {
return activeElement ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var delta = direction === Direction . PREV ? - 1 : 1 ;
var itemIndex = ( activeIndex + delta ) % this . _items . length ;
return itemIndex === - 1 ? this . _items [ this . _items . length - 1 ] : this . _items [ itemIndex ] ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _triggerSlideEvent = function _triggerSlideEvent ( relatedTarget , eventDirectionName ) {
var targetIndex = this . _getItemIndex ( relatedTarget ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
var fromIndex = this . _getItemIndex ( SelectorEngine . findOne ( Selector$2 . ACTIVE _ITEM , this . _element ) ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
return EventHandler . trigger ( this . _element , Event$3 . SLIDE , {
2018-11-13 06:41:12 +00:00
relatedTarget : relatedTarget ,
direction : eventDirectionName ,
from : fromIndex ,
to : targetIndex
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _setActiveIndicatorElement = function _setActiveIndicatorElement ( element ) {
if ( this . _indicatorsElement ) {
2019-03-01 16:31:34 +00:00
var indicators = SelectorEngine . find ( Selector$2 . ACTIVE , this . _indicatorsElement ) ;
for ( var i = 0 ; i < indicators . length ; i ++ ) {
indicators [ i ] . classList . remove ( ClassName$2 . ACTIVE ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var nextIndicator = this . _indicatorsElement . children [ this . _getItemIndex ( element ) ] ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( nextIndicator ) {
2019-03-01 16:31:34 +00:00
nextIndicator . classList . add ( ClassName$2 . ACTIVE ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _slide = function _slide ( direction , element ) {
var _this4 = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var activeElement = SelectorEngine . findOne ( Selector$2 . ACTIVE _ITEM , this . _element ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var activeElementIndex = this . _getItemIndex ( activeElement ) ;
2018-09-19 04:35:40 +00:00
2018-11-13 06:41:12 +00:00
var nextElement = element || activeElement && this . _getItemByDirection ( direction , activeElement ) ;
2018-09-19 04:35:40 +00:00
2018-11-13 06:41:12 +00:00
var nextElementIndex = this . _getItemIndex ( nextElement ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var isCycling = Boolean ( this . _interval ) ;
var directionalClassName ;
var orderClassName ;
var eventDirectionName ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( direction === Direction . NEXT ) {
directionalClassName = ClassName$2 . LEFT ;
orderClassName = ClassName$2 . NEXT ;
eventDirectionName = Direction . LEFT ;
} else {
directionalClassName = ClassName$2 . RIGHT ;
orderClassName = ClassName$2 . PREV ;
eventDirectionName = Direction . RIGHT ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( nextElement && nextElement . classList . contains ( ClassName$2 . ACTIVE ) ) {
2018-11-13 06:41:12 +00:00
this . _isSliding = false ;
return ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
var slideEvent = this . _triggerSlideEvent ( nextElement , eventDirectionName ) ;
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
if ( slideEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( ! activeElement || ! nextElement ) {
// Some weirdness is happening, so we bail
return ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
this . _isSliding = true ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( isCycling ) {
this . pause ( ) ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
this . _setActiveIndicatorElement ( nextElement ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _element . classList . contains ( ClassName$2 . SLIDE ) ) {
nextElement . classList . add ( orderClassName ) ;
reflow ( nextElement ) ;
activeElement . classList . add ( directionalClassName ) ;
nextElement . classList . add ( directionalClassName ) ;
2018-11-13 06:41:12 +00:00
var nextElementInterval = parseInt ( nextElement . getAttribute ( 'data-interval' ) , 10 ) ;
if ( nextElementInterval ) {
this . _config . defaultInterval = this . _config . defaultInterval || this . _config . interval ;
this . _config . interval = nextElementInterval ;
} else {
this . _config . interval = this . _config . defaultInterval || this . _config . interval ;
2015-08-15 19:19:11 +00:00
}
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( activeElement ) ;
EventHandler . one ( activeElement , TRANSITION _END , function ( ) {
nextElement . classList . remove ( directionalClassName ) ;
nextElement . classList . remove ( orderClassName ) ;
nextElement . classList . add ( ClassName$2 . ACTIVE ) ;
activeElement . classList . remove ( ClassName$2 . ACTIVE ) ;
activeElement . classList . remove ( orderClassName ) ;
activeElement . classList . remove ( directionalClassName ) ;
2018-11-13 06:41:12 +00:00
_this4 . _isSliding = false ;
setTimeout ( function ( ) {
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this4 . _element , Event$3 . SLID , {
relatedTarget : nextElement ,
direction : eventDirectionName ,
from : activeElementIndex ,
to : nextElementIndex
} ) ;
2018-11-13 06:41:12 +00:00
} , 0 ) ;
2019-03-01 16:31:34 +00:00
} ) ;
emulateTransitionEnd ( activeElement , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
2019-03-01 16:31:34 +00:00
activeElement . classList . remove ( ClassName$2 . ACTIVE ) ;
nextElement . classList . add ( ClassName$2 . ACTIVE ) ;
2018-11-13 06:41:12 +00:00
this . _isSliding = false ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( this . _element , Event$3 . SLID , {
relatedTarget : nextElement ,
direction : eventDirectionName ,
from : activeElementIndex ,
to : nextElementIndex
} ) ;
2018-11-13 06:41:12 +00:00
}
if ( isCycling ) {
this . cycle ( ) ;
}
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
Carousel . _carouselInterface = function _carouselInterface ( element , config ) {
var data = Data . getData ( element , DATA _KEY$2 ) ;
2015-08-19 02:22:46 +00:00
2019-03-01 16:31:34 +00:00
var _config = _objectSpread ( { } , Default , Manipulator . getDataAttributes ( element ) ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof config === 'object' ) {
_config = _objectSpread ( { } , _config , config ) ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var action = typeof config === 'string' ? config : _config . slide ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00: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 15:13:30 +00:00
throw new TypeError ( "No method named \"" + action + "\"" ) ;
2018-03-31 20:59:37 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
data [ action ] ( ) ;
} else if ( _config . interval && _config . ride ) {
data . pause ( ) ;
data . cycle ( ) ;
}
} ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
Carousel . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
Carousel . _carouselInterface ( this , config ) ;
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
Carousel . _dataApiClickHandler = function _dataApiClickHandler ( event ) {
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( this ) ;
2018-11-13 06:41:12 +00:00
if ( ! selector ) {
return ;
}
2019-03-01 16:31:34 +00:00
var target = SelectorEngine . findOne ( selector ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! target || ! target . classList . contains ( ClassName$2 . CAROUSEL ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var config = _objectSpread ( { } , Manipulator . getDataAttributes ( target ) , Manipulator . getDataAttributes ( this ) ) ;
2018-06-22 05:55:23 +00:00
2018-11-13 06:41:12 +00:00
var slideIndex = this . getAttribute ( 'data-slide-to' ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( slideIndex ) {
config . interval = false ;
2018-06-22 05:55:23 +00:00
}
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
Carousel . _carouselInterface ( target , config ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( slideIndex ) {
2019-03-01 16:31:34 +00:00
Data . getData ( target , DATA _KEY$2 ) . to ( slideIndex ) ;
2018-11-13 06:41:12 +00:00
}
event . preventDefault ( ) ;
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
Carousel . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$2 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Carousel , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$2 ;
}
} , {
key : "Default" ,
get : function get ( ) {
return Default ;
}
} ] ) ;
2018-03-31 20:59:37 +00:00
return Carousel ;
2018-11-13 06:41:12 +00:00
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$3 . CLICK _DATA _API , Selector$2 . DATA _SLIDE , Carousel . _dataApiClickHandler ) ;
EventHandler . on ( window , Event$3 . LOAD _DATA _API , function ( ) {
var carousels = makeArray ( SelectorEngine . find ( Selector$2 . DATA _RIDE ) ) ;
2018-11-13 06:41:12 +00:00
for ( var i = 0 , len = carousels . length ; i < len ; i ++ ) {
2019-03-01 16:31:34 +00:00
Carousel . _carouselInterface ( carousels [ i ] , Data . getData ( carousels [ i ] , DATA _KEY$2 ) ) ;
2018-11-13 06:41:12 +00:00
}
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . carousel to jQuery only if jQuery is present
2018-11-13 06:41:12 +00:00
* /
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$2 = jQuery . fn [ NAME$2 ] ;
jQuery . fn [ NAME$2 ] = Carousel . _jQueryInterface ;
jQuery . fn [ NAME$2 ] . Constructor = Carousel ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$2 ] . noConflict = function ( ) {
jQuery . fn [ NAME$2 ] = JQUERY _NO _CONFLICT$2 ;
return Carousel . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$3 = 'collapse' ;
2019-02-13 16:01:40 +00:00
var VERSION$3 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
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)'
} ;
2019-03-01 16:31:34 +00:00
var Event$4 = {
2018-11-13 06:41:12 +00:00
SHOW : "show" + EVENT _KEY$3 ,
SHOWN : "shown" + EVENT _KEY$3 ,
HIDE : "hide" + EVENT _KEY$3 ,
HIDDEN : "hidden" + EVENT _KEY$3 ,
CLICK _DATA _API : "click" + EVENT _KEY$3 + DATA _API _KEY$3
} ;
var ClassName$3 = {
SHOW : 'show' ,
COLLAPSE : 'collapse' ,
COLLAPSING : 'collapsing' ,
COLLAPSED : 'collapsed'
} ;
var Dimension = {
WIDTH : 'width' ,
HEIGHT : 'height'
} ;
var Selector$3 = {
ACTIVES : '.show, .collapsing' ,
DATA _TOGGLE : '[data-toggle="collapse"]'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
} ;
var Collapse =
/*#__PURE__*/
function ( ) {
function Collapse ( element , config ) {
this . _isTransitioning = false ;
this . _element = element ;
this . _config = this . _getConfig ( config ) ;
2019-03-01 16:31:34 +00:00
this . _triggerArray = makeArray ( SelectorEngine . find ( "[data-toggle=\"collapse\"][href=\"#" + element . id + "\"]," + ( "[data-toggle=\"collapse\"][data-target=\"#" + element . id + "\"]" ) ) ) ;
var toggleList = makeArray ( SelectorEngine . find ( Selector$3 . DATA _TOGGLE ) ) ;
2018-11-13 06:41:12 +00:00
for ( var i = 0 , len = toggleList . length ; i < len ; i ++ ) {
var elem = toggleList [ i ] ;
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( elem ) ;
var filterElement = makeArray ( SelectorEngine . find ( selector ) ) . filter ( function ( foundElem ) {
2018-11-13 06:41:12 +00:00
return foundElem === element ;
} ) ;
2017-05-16 07:59:44 +00:00
2019-03-01 16:31:34 +00:00
if ( selector !== null && filterElement . length ) {
2018-11-13 06:41:12 +00:00
this . _selector = selector ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _triggerArray . push ( elem ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _parent = this . _config . parent ? this . _getParent ( ) : null ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! this . _config . parent ) {
this . _addAriaAndCollapsedClass ( this . _element , this . _triggerArray ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . toggle ) {
this . toggle ( ) ;
}
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$3 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Collapse . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Public
_proto . toggle = function toggle ( ) {
2019-03-01 16:31:34 +00:00
if ( this . _element . classList . contains ( ClassName$3 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
this . hide ( ) ;
} else {
this . show ( ) ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . show = function show ( ) {
var _this = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _isTransitioning || this . _element . classList . contains ( ClassName$3 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2018-09-17 19:34:34 +00:00
2018-11-13 06:41:12 +00:00
var actives ;
var activesData ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _parent ) {
2019-03-01 16:31:34 +00:00
actives = makeArray ( SelectorEngine . find ( Selector$3 . ACTIVES , this . _parent ) ) . filter ( function ( elem ) {
2018-11-13 06:41:12 +00:00
if ( typeof _this . _config . parent === 'string' ) {
return elem . getAttribute ( 'data-parent' ) === _this . _config . parent ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return elem . classList . contains ( ClassName$3 . COLLAPSE ) ;
} ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( actives . length === 0 ) {
actives = null ;
2015-08-15 19:19:11 +00:00
}
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var container = SelectorEngine . findOne ( this . _selector ) ;
2018-11-13 06:41:12 +00:00
if ( actives ) {
2019-03-01 16:31:34 +00:00
var tempActiveData = actives . filter ( function ( elem ) {
return container !== elem ;
} ) ;
activesData = tempActiveData [ 0 ] ? Data . getData ( tempActiveData [ 0 ] , DATA _KEY$3 ) : null ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( activesData && activesData . _isTransitioning ) {
2018-03-31 20:59:37 +00:00
return ;
}
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
var startEvent = EventHandler . trigger ( this . _element , Event$4 . SHOW ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( startEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( actives ) {
2019-03-01 16:31:34 +00:00
actives . forEach ( function ( elemActive ) {
if ( container !== elemActive ) {
Collapse . _collapseInterface ( elemActive , 'hide' ) ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! activesData ) {
Data . setData ( elemActive , DATA _KEY$3 , null ) ;
}
} ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var dimension = this . _getDimension ( ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
this . _element . classList . remove ( ClassName$3 . COLLAPSE ) ;
this . _element . classList . add ( ClassName$3 . COLLAPSING ) ;
2018-11-13 06:41:12 +00:00
this . _element . style [ dimension ] = 0 ;
if ( this . _triggerArray . length ) {
2019-03-01 16:31:34 +00:00
this . _triggerArray . forEach ( function ( element ) {
element . classList . remove ( ClassName$3 . COLLAPSED ) ;
element . setAttribute ( 'aria-expanded' , true ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . setTransitioning ( true ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var complete = function complete ( ) {
2019-03-01 16:31:34 +00:00
_this . _element . classList . remove ( ClassName$3 . COLLAPSING ) ;
_this . _element . classList . add ( ClassName$3 . COLLAPSE ) ;
_this . _element . classList . add ( ClassName$3 . SHOW ) ;
2018-11-13 06:41:12 +00:00
_this . _element . style [ dimension ] = '' ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_this . setTransitioning ( false ) ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this . _element , Event$4 . SHOWN ) ;
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var capitalizedDimension = dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ;
var scrollSize = "scroll" + capitalizedDimension ;
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
this . _element . style [ dimension ] = this . _element [ scrollSize ] + "px" ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . hide = function hide ( ) {
var _this2 = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _isTransitioning || ! this . _element . classList . contains ( ClassName$3 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
var startEvent = EventHandler . trigger ( this . _element , Event$4 . HIDE ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( startEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var dimension = this . _getDimension ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _element . style [ dimension ] = this . _element . getBoundingClientRect ( ) [ dimension ] + "px" ;
2019-03-01 16:31:34 +00:00
reflow ( this . _element ) ;
this . _element . classList . add ( ClassName$3 . COLLAPSING ) ;
this . _element . classList . remove ( ClassName$3 . COLLAPSE ) ;
this . _element . classList . remove ( ClassName$3 . SHOW ) ;
2018-11-13 06:41:12 +00:00
var triggerArrayLength = this . _triggerArray . length ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( triggerArrayLength > 0 ) {
for ( var i = 0 ; i < triggerArrayLength ; i ++ ) {
var trigger = this . _triggerArray [ i ] ;
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( trigger ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( selector !== null ) {
2019-03-01 16:31:34 +00:00
var elem = SelectorEngine . findOne ( selector ) ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
if ( ! elem . classList . contains ( ClassName$3 . SHOW ) ) {
trigger . classList . add ( ClassName$3 . COLLAPSED ) ;
trigger . setAttribute ( 'aria-expanded' , false ) ;
2017-06-15 03:44:32 +00:00
}
}
}
2018-11-13 06:41:12 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . setTransitioning ( true ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var complete = function complete ( ) {
_this2 . setTransitioning ( false ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
_this2 . _element . classList . remove ( ClassName$3 . COLLAPSING ) ;
_this2 . _element . classList . add ( ClassName$3 . COLLAPSE ) ;
EventHandler . trigger ( _this2 . _element , Event$4 . HIDDEN ) ;
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _element . style [ dimension ] = '' ;
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . setTransitioning = function setTransitioning ( isTransitioning ) {
this . _isTransitioning = isTransitioning ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
Data . removeData ( this . _element , DATA _KEY$3 ) ;
2018-11-13 06:41:12 +00:00
this . _config = null ;
this . _parent = null ;
this . _element = null ;
this . _triggerArray = null ;
this . _isTransitioning = null ;
2019-01-04 16:29:45 +00:00
} // Private
;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getConfig = function _getConfig ( config ) {
config = _objectSpread ( { } , Default$1 , config ) ;
config . toggle = Boolean ( config . toggle ) ; // Coerce string values
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
typeCheckConfig ( NAME$3 , config , DefaultType$1 ) ;
2018-11-13 06:41:12 +00:00
return config ;
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getDimension = function _getDimension ( ) {
2019-03-01 16:31:34 +00:00
var hasWidth = this . _element . classList . contains ( Dimension . WIDTH ) ;
2018-11-13 06:41:12 +00:00
return hasWidth ? Dimension . WIDTH : Dimension . HEIGHT ;
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getParent = function _getParent ( ) {
var _this3 = this ;
2016-10-10 00:26:51 +00:00
2019-03-11 15:13:30 +00:00
var parent = this . _config . parent ;
2017-09-30 21:28:03 +00:00
2019-03-11 15:13:30 +00:00
if ( isElement ( parent ) ) {
// it's a jQuery object
if ( typeof parent . jquery !== 'undefined' || typeof parent [ 0 ] !== 'undefined' ) {
parent = parent [ 0 ] ;
2018-11-13 06:41:12 +00:00
}
} else {
2019-03-11 15:13:30 +00:00
parent = SelectorEngine . findOne ( parent ) ;
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-11 15:13:30 +00:00
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + parent + "\"]" ;
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( selector , parent ) ) . forEach ( function ( element ) {
2018-11-13 06:41:12 +00:00
_this3 . _addAriaAndCollapsedClass ( Collapse . _getTargetFromElement ( element ) , [ element ] ) ;
} ) ;
return parent ;
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _addAriaAndCollapsedClass = function _addAriaAndCollapsedClass ( element , triggerArray ) {
2019-03-01 16:31:34 +00:00
if ( element ) {
var isOpen = element . classList . contains ( ClassName$3 . SHOW ) ;
if ( triggerArray . length ) {
triggerArray . forEach ( function ( elem ) {
2019-03-11 15:13:30 +00:00
if ( isOpen ) {
2019-03-01 16:31:34 +00:00
elem . classList . remove ( ClassName$3 . COLLAPSED ) ;
2019-03-11 15:13:30 +00:00
} else {
elem . classList . add ( ClassName$3 . COLLAPSED ) ;
2019-03-01 16:31:34 +00:00
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
elem . setAttribute ( 'aria-expanded' , isOpen ) ;
} ) ;
}
2018-11-13 06:41:12 +00:00
}
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Collapse . _getTargetFromElement = function _getTargetFromElement ( element ) {
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( element ) ;
return selector ? SelectorEngine . findOne ( selector ) : null ;
2018-11-13 06:41:12 +00:00
} ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
Collapse . _collapseInterface = function _collapseInterface ( element , config ) {
var data = Data . getData ( element , DATA _KEY$3 ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var _config = _objectSpread ( { } , Default$1 , Manipulator . getDataAttributes ( element ) , typeof config === 'object' && config ? config : { } ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
if ( ! data && _config . toggle && /show|hide/ . test ( config ) ) {
_config . toggle = false ;
}
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
if ( ! data ) {
data = new Collapse ( element , _config ) ;
}
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
2019-03-11 15:13:30 +00:00
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
data [ config ] ( ) ;
}
} ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
Collapse . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
Collapse . _collapseInterface ( this , config ) ;
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
Collapse . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$3 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Collapse , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$3 ;
}
} , {
key : "Default" ,
get : function get ( ) {
return Default$1 ;
}
} ] ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return Collapse ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 21:28:03 +00:00
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$4 . CLICK _DATA _API , Selector$3 . DATA _TOGGLE , function ( event ) {
2018-11-13 06:41:12 +00:00
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
2019-03-01 16:31:34 +00:00
if ( event . target . tagName === 'A' ) {
2018-11-13 06:41:12 +00:00
event . preventDefault ( ) ;
}
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
var triggerData = Manipulator . getDataAttributes ( this ) ;
var selector = getSelectorFromElement ( this ) ;
var selectorElements = makeArray ( SelectorEngine . find ( selector ) ) ;
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-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
Collapse . _collapseInterface ( element , config ) ;
2018-11-13 06:41:12 +00:00
} ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . collapse to jQuery only if jQuery is present
2018-11-13 06:41:12 +00:00
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$3 = jQuery . fn [ NAME$3 ] ;
jQuery . fn [ NAME$3 ] = Collapse . _jQueryInterface ;
jQuery . fn [ NAME$3 ] . Constructor = Collapse ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$3 ] . noConflict = function ( ) {
jQuery . fn [ NAME$3 ] = JQUERY _NO _CONFLICT$3 ;
return Collapse . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$4 = 'dropdown' ;
2019-02-13 16:01:40 +00:00
var VERSION$4 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
var DATA _KEY$4 = 'bs.dropdown' ;
var EVENT _KEY$4 = "." + DATA _KEY$4 ;
var DATA _API _KEY$4 = '.data-api' ;
var ESCAPE _KEYCODE = 27 ; // KeyboardEvent.which value for Escape (Esc) key
var SPACE _KEYCODE = 32 ; // KeyboardEvent.which value for space key
var TAB _KEYCODE = 9 ; // KeyboardEvent.which value for tab key
var ARROW _UP _KEYCODE = 38 ; // KeyboardEvent.which value for up arrow key
var ARROW _DOWN _KEYCODE = 40 ; // KeyboardEvent.which value for down arrow key
var RIGHT _MOUSE _BUTTON _WHICH = 3 ; // MouseEvent.which value for the right button (assuming a right-handed mouse)
var REGEXP _KEYDOWN = new RegExp ( ARROW _UP _KEYCODE + "|" + ARROW _DOWN _KEYCODE + "|" + ESCAPE _KEYCODE ) ;
2019-03-01 16:31:34 +00:00
var Event$5 = {
2018-11-13 06:41:12 +00:00
HIDE : "hide" + EVENT _KEY$4 ,
HIDDEN : "hidden" + EVENT _KEY$4 ,
SHOW : "show" + EVENT _KEY$4 ,
SHOWN : "shown" + EVENT _KEY$4 ,
CLICK : "click" + EVENT _KEY$4 ,
CLICK _DATA _API : "click" + EVENT _KEY$4 + DATA _API _KEY$4 ,
KEYDOWN _DATA _API : "keydown" + EVENT _KEY$4 + DATA _API _KEY$4 ,
KEYUP _DATA _API : "keyup" + EVENT _KEY$4 + DATA _API _KEY$4
} ;
var ClassName$4 = {
DISABLED : 'disabled' ,
SHOW : 'show' ,
DROPUP : 'dropup' ,
DROPRIGHT : 'dropright' ,
DROPLEFT : 'dropleft' ,
MENURIGHT : 'dropdown-menu-right' ,
POSITION _STATIC : 'position-static'
} ;
var Selector$4 = {
DATA _TOGGLE : '[data-toggle="dropdown"]' ,
FORM _CHILD : '.dropdown form' ,
MENU : '.dropdown-menu' ,
NAVBAR _NAV : '.navbar-nav' ,
VISIBLE _ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
} ;
var AttachmentMap = {
TOP : 'top-start' ,
TOPEND : 'top-end' ,
BOTTOM : 'bottom-start' ,
BOTTOMEND : 'bottom-end' ,
RIGHT : 'right-start' ,
RIGHTEND : 'right-end' ,
LEFT : 'left-start' ,
LEFTEND : 'left-end'
} ;
var Default$2 = {
offset : 0 ,
flip : true ,
boundary : 'scrollParent' ,
reference : 'toggle' ,
display : 'dynamic'
} ;
var DefaultType$2 = {
offset : '(number|string|function)' ,
flip : 'boolean' ,
boundary : '(string|element)' ,
reference : '(string|element)' ,
display : 'string'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
var Dropdown =
/*#__PURE__*/
function ( ) {
function Dropdown ( element , config ) {
this . _element = element ;
this . _popper = null ;
this . _config = this . _getConfig ( config ) ;
this . _menu = this . _getMenuElement ( ) ;
this . _inNavbar = this . _detectNavbar ( ) ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
this . _addEventListeners ( ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$4 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
2018-03-31 20:59:37 +00:00
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Dropdown . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Public
_proto . toggle = function toggle ( ) {
2019-03-01 16:31:34 +00:00
if ( this . _element . disabled || this . _element . classList . contains ( ClassName$4 . DISABLED ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var parent = Dropdown . _getParentFromElement ( this . _element ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var isActive = this . _menu . classList . contains ( ClassName$4 . SHOW ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Dropdown . _clearMenus ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( isActive ) {
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var relatedTarget = {
relatedTarget : this . _element
} ;
2019-03-01 16:31:34 +00:00
var showEvent = EventHandler . trigger ( parent , Event$5 . SHOW , relatedTarget ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( showEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
} // Disable totally Popper.js for Dropdown in Navbar
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! this . _inNavbar ) {
/ * *
* Check for Popper dependency
* Popper - https : //popper.js.org
* /
if ( typeof Popper === 'undefined' ) {
2019-03-01 16:31:34 +00:00
throw new TypeError ( 'Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)' ) ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var referenceElement = this . _element ;
2017-10-29 23:19:14 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . reference === 'parent' ) {
referenceElement = parent ;
2019-03-01 16:31:34 +00:00
} else if ( isElement ( this . _config . reference ) ) {
2018-11-13 06:41:12 +00:00
referenceElement = this . _config . reference ; // Check if it's jQuery element
2017-10-29 23:19:14 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof this . _config . reference . jquery !== 'undefined' ) {
referenceElement = this . _config . reference [ 0 ] ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries
// https://github.com/twbs/bootstrap/issues/24251
2015-08-15 19:19:11 +00:00
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . boundary !== 'scrollParent' ) {
2019-03-01 16:31:34 +00:00
parent . classList . add ( ClassName$4 . POSITION _STATIC ) ;
2018-11-13 06:41:12 +00:00
}
2017-12-23 00:21:54 +00:00
2018-11-13 06:41:12 +00:00
this . _popper = new Popper ( referenceElement , this . _menu , this . _getPopperConfig ( ) ) ;
} // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
2017-12-23 00:21:54 +00:00
2017-05-16 07:59:44 +00:00
2019-03-01 16:31:34 +00:00
if ( 'ontouchstart' in document . documentElement && ! makeArray ( SelectorEngine . closest ( parent , Selector$4 . NAVBAR _NAV ) ) . length ) {
makeArray ( document . body . children ) . forEach ( function ( elem ) {
return EventHandler . on ( elem , 'mouseover' , null , noop ( ) ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _element . focus ( ) ;
2017-10-30 19:48:13 +00:00
2018-11-13 06:41:12 +00:00
this . _element . setAttribute ( 'aria-expanded' , true ) ;
2017-03-20 02:03:32 +00:00
2019-03-01 16:31:34 +00:00
Manipulator . toggleClass ( this . _menu , ClassName$4 . SHOW ) ;
Manipulator . toggleClass ( parent , ClassName$4 . SHOW ) ;
EventHandler . trigger ( parent , Event$5 . SHOWN , relatedTarget ) ;
2018-11-13 06:41:12 +00:00
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . show = function show ( ) {
2019-03-01 16:31:34 +00:00
if ( this . _element . disabled || this . _element . classList . contains ( ClassName$4 . DISABLED ) || this . _menu . classList . contains ( ClassName$4 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var parent = Dropdown . _getParentFromElement ( this . _element ) ;
2018-11-13 06:41:12 +00:00
var relatedTarget = {
relatedTarget : this . _element
2018-03-31 20:59:37 +00:00
} ;
2019-03-01 16:31:34 +00:00
var showEvent = EventHandler . trigger ( parent , Event$5 . SHOW , relatedTarget ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( showEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-05-16 07:59:44 +00:00
2019-03-01 16:31:34 +00:00
Manipulator . toggleClass ( this . _menu , ClassName$4 . SHOW ) ;
Manipulator . toggleClass ( parent , ClassName$4 . SHOW ) ;
EventHandler . trigger ( parent , Event$5 . SHOWN , relatedTarget ) ;
2018-11-13 06:41:12 +00:00
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . hide = function hide ( ) {
2019-03-01 16:31:34 +00:00
if ( this . _element . disabled || this . _element . classList . contains ( ClassName$4 . DISABLED ) || ! this . _menu . classList . contains ( ClassName$4 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var parent = Dropdown . _getParentFromElement ( this . _element ) ;
2018-11-13 06:41:12 +00:00
var relatedTarget = {
relatedTarget : this . _element
} ;
2019-03-01 16:31:34 +00:00
var hideEvent = EventHandler . trigger ( parent , Event$5 . HIDE , relatedTarget ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-05-16 07:59:44 +00:00
2019-03-01 16:31:34 +00:00
Manipulator . toggleClass ( this . _menu , ClassName$4 . SHOW ) ;
Manipulator . toggleClass ( parent , ClassName$4 . SHOW ) ;
EventHandler . trigger ( parent , Event$5 . HIDDEN , relatedTarget ) ;
2018-11-13 06:41:12 +00:00
} ;
2017-05-16 07:59:44 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
Data . removeData ( this . _element , DATA _KEY$4 ) ;
EventHandler . off ( this . _element , EVENT _KEY$4 ) ;
2018-11-13 06:41:12 +00:00
this . _element = null ;
this . _menu = null ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _popper !== null ) {
this . _popper . destroy ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _popper = null ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . update = function update ( ) {
this . _inNavbar = this . _detectNavbar ( ) ;
2017-05-27 03:20:10 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _popper !== null ) {
this . _popper . scheduleUpdate ( ) ;
}
2019-01-04 16:29:45 +00:00
} // Private
;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _addEventListeners = function _addEventListeners ( ) {
var _this = this ;
2017-05-27 03:20:10 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$5 . CLICK , function ( event ) {
2018-11-13 06:41:12 +00:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2017-06-18 07:14:35 +00:00
2018-11-13 06:41:12 +00:00
_this . toggle ( ) ;
} ) ;
} ;
2017-10-15 22:51:44 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getConfig = function _getConfig ( config ) {
2019-03-01 16:31:34 +00:00
config = _objectSpread ( { } , this . constructor . Default , Manipulator . getDataAttributes ( this . _element ) , config ) ;
typeCheckConfig ( NAME$4 , config , this . constructor . DefaultType ) ;
2018-11-13 06:41:12 +00:00
return config ;
} ;
2017-10-15 22:51:44 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getMenuElement = function _getMenuElement ( ) {
if ( ! this . _menu ) {
var parent = Dropdown . _getParentFromElement ( this . _element ) ;
if ( parent ) {
2019-03-01 16:31:34 +00:00
this . _menu = SelectorEngine . findOne ( Selector$4 . MENU , parent ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
}
2017-10-15 22:51:44 +00:00
2018-11-13 06:41:12 +00:00
return this . _menu ;
} ;
2018-02-19 22:50:56 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getPlacement = function _getPlacement ( ) {
2019-03-01 16:31:34 +00:00
var parentDropdown = this . _element . parentNode ;
2018-11-13 06:41:12 +00:00
var placement = AttachmentMap . BOTTOM ; // Handle dropup
2018-02-19 22:50:56 +00:00
2019-03-01 16:31:34 +00:00
if ( parentDropdown . classList . contains ( ClassName$4 . DROPUP ) ) {
2018-11-13 06:41:12 +00:00
placement = AttachmentMap . TOP ;
2017-06-18 07:14:35 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _menu . classList . contains ( ClassName$4 . MENURIGHT ) ) {
2018-11-13 06:41:12 +00:00
placement = AttachmentMap . TOPEND ;
}
2019-03-01 16:31:34 +00:00
} else if ( parentDropdown . classList . contains ( ClassName$4 . DROPRIGHT ) ) {
2018-11-13 06:41:12 +00:00
placement = AttachmentMap . RIGHT ;
2019-03-01 16:31:34 +00:00
} else if ( parentDropdown . classList . contains ( ClassName$4 . DROPLEFT ) ) {
2018-11-13 06:41:12 +00:00
placement = AttachmentMap . LEFT ;
2019-03-01 16:31:34 +00:00
} else if ( this . _menu . classList . contains ( ClassName$4 . MENURIGHT ) ) {
2018-11-13 06:41:12 +00:00
placement = AttachmentMap . BOTTOMEND ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return placement ;
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _detectNavbar = function _detectNavbar ( ) {
2019-03-01 16:31:34 +00:00
return Boolean ( SelectorEngine . closest ( this . _element , '.navbar' ) ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2019-02-11 19:15:34 +00:00
_proto . _getOffset = function _getOffset ( ) {
2018-11-13 06:41:12 +00:00
var _this2 = this ;
2018-03-31 20:59:37 +00:00
2019-02-11 19:15:34 +00:00
var offset = { } ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof this . _config . offset === 'function' ) {
2019-02-11 19:15:34 +00:00
offset . fn = function ( data ) {
data . offsets = _objectSpread ( { } , data . offsets , _this2 . _config . offset ( data . offsets , _this2 . _element ) || { } ) ;
2018-11-13 06:41:12 +00:00
return data ;
} ;
} else {
2019-02-11 19:15:34 +00:00
offset . offset = this . _config . offset ;
2018-11-13 06:41:12 +00:00
}
2018-03-31 20:59:37 +00:00
2019-02-11 19:15:34 +00:00
return offset ;
} ;
_proto . _getPopperConfig = function _getPopperConfig ( ) {
2018-11-13 06:41:12 +00:00
var popperConfig = {
placement : this . _getPlacement ( ) ,
modifiers : {
2019-02-11 19:15:34 +00:00
offset : this . _getOffset ( ) ,
2018-11-13 06:41:12 +00:00
flip : {
enabled : this . _config . flip
} ,
preventOverflow : {
boundariesElement : this . _config . boundary
2016-10-10 00:26:51 +00:00
}
2018-11-13 06:41:12 +00:00
} // Disable Popper.js if we have a static display
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . display === 'static' ) {
popperConfig . modifiers . applyStyle = {
enabled : false
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return popperConfig ;
2019-01-04 16:29:45 +00:00
} // Static
;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
Dropdown . _dropdownInterface = function _dropdownInterface ( element , config ) {
var data = Data . getData ( element , DATA _KEY$4 ) ;
2018-07-12 04:42:55 +00:00
2019-03-01 16:31:34 +00:00
var _config = typeof config === 'object' ? config : null ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! data ) {
data = new Dropdown ( element , _config ) ;
}
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
2019-03-11 15:13:30 +00:00
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-11-13 06:41:12 +00:00
}
2017-05-16 07:59:44 +00:00
2019-03-01 16:31:34 +00:00
data [ config ] ( ) ;
}
} ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
Dropdown . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
Dropdown . _dropdownInterface ( this , config ) ;
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Dropdown . _clearMenus = function _clearMenus ( event ) {
if ( event && ( event . which === RIGHT _MOUSE _BUTTON _WHICH || event . type === 'keyup' && event . which !== TAB _KEYCODE ) ) {
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var toggles = makeArray ( SelectorEngine . find ( Selector$4 . DATA _TOGGLE ) ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
for ( var i = 0 , len = toggles . length ; i < len ; i ++ ) {
var parent = Dropdown . _getParentFromElement ( toggles [ i ] ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
var context = Data . getData ( toggles [ i ] , DATA _KEY$4 ) ;
2018-11-13 06:41:12 +00:00
var relatedTarget = {
relatedTarget : toggles [ i ]
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( event && event . type === 'click' ) {
relatedTarget . clickEvent = event ;
2017-03-20 02:03:32 +00:00
}
2018-11-13 06:41:12 +00:00
if ( ! context ) {
continue ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var dropdownMenu = context . _menu ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! parent . classList . contains ( ClassName$4 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
continue ;
}
2017-12-31 03:41:36 +00:00
2019-03-01 16:31:34 +00:00
if ( event && ( event . type === 'click' && /input|textarea/i . test ( event . target . tagName ) || event . type === 'keyup' && event . which === TAB _KEYCODE ) && parent . contains ( event . target ) ) {
2018-11-13 06:41:12 +00:00
continue ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var hideEvent = EventHandler . trigger ( parent , Event$5 . HIDE , relatedTarget ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
continue ;
} // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ( 'ontouchstart' in document . documentElement ) {
2019-03-01 16:31:34 +00:00
makeArray ( document . body . children ) . forEach ( function ( elem ) {
return EventHandler . off ( elem , 'mouseover' , null , noop ( ) ) ;
} ) ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
toggles [ i ] . setAttribute ( 'aria-expanded' , 'false' ) ;
2019-03-01 16:31:34 +00:00
dropdownMenu . classList . remove ( ClassName$4 . SHOW ) ;
parent . classList . remove ( ClassName$4 . SHOW ) ;
EventHandler . trigger ( parent , Event$5 . HIDDEN , relatedTarget ) ;
2018-11-13 06:41:12 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Dropdown . _getParentFromElement = function _getParentFromElement ( element ) {
var parent ;
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( element ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( selector ) {
2019-03-01 16:31:34 +00:00
parent = SelectorEngine . findOne ( selector ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return parent || element . parentNode ;
2019-03-01 16:31:34 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Dropdown . _dataApiKeydownHandler = function _dataApiKeydownHandler ( event ) {
// If not input/textarea:
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
// If input/textarea:
// - If space key => not a dropdown command
// - If key is other than escape
// - If key is not up or down => not a dropdown command
// - If trigger inside the menu => not a dropdown command
2019-03-01 16:31:34 +00:00
if ( /input|textarea/i . test ( event . target . tagName ) ? event . which === SPACE _KEYCODE || event . which !== ESCAPE _KEYCODE && ( event . which !== ARROW _DOWN _KEYCODE && event . which !== ARROW _UP _KEYCODE || SelectorEngine . closest ( event . target , Selector$4 . MENU ) ) : ! REGEXP _KEYDOWN . test ( event . which ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2015-08-19 02:22:46 +00:00
2019-03-01 16:31:34 +00:00
if ( this . disabled || this . classList . contains ( ClassName$4 . DISABLED ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-19 02:22:46 +00:00
2018-11-13 06:41:12 +00:00
var parent = Dropdown . _getParentFromElement ( this ) ;
2019-03-01 16:31:34 +00:00
var isActive = parent . classList . contains ( ClassName$4 . SHOW ) ;
2015-08-15 19:19:11 +00:00
2018-12-15 23:13:22 +00:00
if ( ! isActive || isActive && ( event . which === ESCAPE _KEYCODE || event . which === SPACE _KEYCODE ) ) {
2018-11-13 06:41:12 +00:00
if ( event . which === ESCAPE _KEYCODE ) {
2019-07-12 21:56:26 +00:00
SelectorEngine . findOne ( Selector$4 . DATA _TOGGLE , parent ) . focus ( ) ;
2018-03-31 20:59:37 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
Dropdown . _clearMenus ( ) ;
2018-11-13 06:41:12 +00:00
return ;
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
var items = makeArray ( SelectorEngine . find ( Selector$4 . VISIBLE _ITEMS , parent ) ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! items . length ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var index = items . indexOf ( event . target ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( event . which === ARROW _UP _KEYCODE && index > 0 ) {
// Up
index -- ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( event . which === ARROW _DOWN _KEYCODE && index < items . length - 1 ) {
// Down
index ++ ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( index < 0 ) {
index = 0 ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
items [ index ] . focus ( ) ;
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
Dropdown . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$4 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Dropdown , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$4 ;
}
} , {
key : "Default" ,
get : function get ( ) {
return Default$2 ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$2 ;
}
} ] ) ;
2018-03-31 20:59:37 +00:00
return Dropdown ;
2018-11-13 06:41:12 +00:00
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$5 . KEYDOWN _DATA _API , Selector$4 . DATA _TOGGLE , Dropdown . _dataApiKeydownHandler ) ;
EventHandler . on ( document , Event$5 . KEYDOWN _DATA _API , Selector$4 . MENU , Dropdown . _dataApiKeydownHandler ) ;
EventHandler . on ( document , Event$5 . CLICK _DATA _API , Dropdown . _clearMenus ) ;
EventHandler . on ( document , Event$5 . KEYUP _DATA _API , Dropdown . _clearMenus ) ;
EventHandler . on ( document , Event$5 . CLICK _DATA _API , Selector$4 . DATA _TOGGLE , function ( event ) {
2018-11-13 06:41:12 +00:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2019-03-01 16:31:34 +00:00
Dropdown . _dropdownInterface ( this , 'toggle' ) ;
} ) ;
EventHandler . on ( document , Event$5 . CLICK _DATA _API , Selector$4 . FORM _CHILD , function ( e ) {
return e . stopPropagation ( ) ;
2018-11-13 06:41:12 +00:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . dropdown to jQuery only if jQuery is present
2018-11-13 06:41:12 +00:00
* /
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$4 = jQuery . fn [ NAME$4 ] ;
jQuery . fn [ NAME$4 ] = Dropdown . _jQueryInterface ;
jQuery . fn [ NAME$4 ] . Constructor = Dropdown ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$4 ] . noConflict = function ( ) {
jQuery . fn [ NAME$4 ] = JQUERY _NO _CONFLICT$4 ;
return Dropdown . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$5 = 'modal' ;
2019-02-13 16:01:40 +00:00
var VERSION$5 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
var DATA _KEY$5 = 'bs.modal' ;
var EVENT _KEY$5 = "." + DATA _KEY$5 ;
var DATA _API _KEY$5 = '.data-api' ;
var ESCAPE _KEYCODE$1 = 27 ; // KeyboardEvent.which value for Escape (Esc) key
var Default$3 = {
backdrop : true ,
keyboard : true ,
focus : true ,
show : true
} ;
var DefaultType$3 = {
backdrop : '(boolean|string)' ,
keyboard : 'boolean' ,
focus : 'boolean' ,
show : 'boolean'
} ;
2019-03-01 16:31:34 +00:00
var Event$6 = {
2018-11-13 06:41:12 +00:00
HIDE : "hide" + EVENT _KEY$5 ,
HIDDEN : "hidden" + EVENT _KEY$5 ,
SHOW : "show" + EVENT _KEY$5 ,
SHOWN : "shown" + EVENT _KEY$5 ,
FOCUSIN : "focusin" + EVENT _KEY$5 ,
RESIZE : "resize" + EVENT _KEY$5 ,
CLICK _DISMISS : "click.dismiss" + EVENT _KEY$5 ,
KEYDOWN _DISMISS : "keydown.dismiss" + EVENT _KEY$5 ,
MOUSEUP _DISMISS : "mouseup.dismiss" + EVENT _KEY$5 ,
MOUSEDOWN _DISMISS : "mousedown.dismiss" + EVENT _KEY$5 ,
CLICK _DATA _API : "click" + EVENT _KEY$5 + DATA _API _KEY$5
} ;
var ClassName$5 = {
2019-02-11 19:15:34 +00:00
SCROLLABLE : 'modal-dialog-scrollable' ,
2018-11-13 06:41:12 +00:00
SCROLLBAR _MEASURER : 'modal-scrollbar-measure' ,
BACKDROP : 'modal-backdrop' ,
OPEN : 'modal-open' ,
FADE : 'fade' ,
SHOW : 'show'
} ;
var Selector$5 = {
DIALOG : '.modal-dialog' ,
2019-02-11 19:15:34 +00:00
MODAL _BODY : '.modal-body' ,
2018-11-13 06:41:12 +00:00
DATA _TOGGLE : '[data-toggle="modal"]' ,
DATA _DISMISS : '[data-dismiss="modal"]' ,
FIXED _CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top' ,
STICKY _CONTENT : '.sticky-top'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
} ;
var Modal =
/*#__PURE__*/
function ( ) {
function Modal ( element , config ) {
this . _config = this . _getConfig ( config ) ;
this . _element = element ;
2019-03-01 16:31:34 +00:00
this . _dialog = SelectorEngine . findOne ( Selector$5 . DIALOG , element ) ;
2018-11-13 06:41:12 +00:00
this . _backdrop = null ;
this . _isShown = false ;
this . _isBodyOverflowing = false ;
this . _ignoreBackdropClick = false ;
this . _isTransitioning = false ;
this . _scrollbarWidth = 0 ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$5 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
var _proto = Modal . prototype ;
// Public
_proto . toggle = function toggle ( relatedTarget ) {
return this . _isShown ? this . hide ( ) : this . show ( relatedTarget ) ;
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . show = function show ( relatedTarget ) {
var _this = this ;
2016-12-02 18:13:36 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _isShown || this . _isTransitioning ) {
return ;
}
2017-04-02 02:18:29 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _element . classList . contains ( ClassName$5 . FADE ) ) {
2018-11-13 06:41:12 +00:00
this . _isTransitioning = true ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var showEvent = EventHandler . trigger ( this . _element , Event$6 . SHOW , {
2018-11-13 06:41:12 +00:00
relatedTarget : relatedTarget
} ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _isShown || showEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _isShown = true ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _checkScrollbar ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _setScrollbar ( ) ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
this . _adjustDialog ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _setEscapeEvent ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _setResizeEvent ( ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$6 . CLICK _DISMISS , Selector$5 . DATA _DISMISS , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this . hide ( event ) ;
} ) ;
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _dialog , Event$6 . MOUSEDOWN _DISMISS , function ( ) {
EventHandler . one ( _this . _element , Event$6 . MOUSEUP _DISMISS , function ( event ) {
if ( event . target === _this . _element ) {
2018-11-13 06:41:12 +00:00
_this . _ignoreBackdropClick = true ;
}
2018-03-31 20:59:37 +00:00
} ) ;
2018-11-13 06:41:12 +00:00
} ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _showBackdrop ( function ( ) {
return _this . _showElement ( relatedTarget ) ;
} ) ;
} ;
2016-11-01 04:36:10 +00:00
2018-11-13 06:41:12 +00:00
_proto . hide = function hide ( event ) {
var _this2 = this ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( event ) {
event . preventDefault ( ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! this . _isShown || this . _isTransitioning ) {
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var hideEvent = EventHandler . trigger ( this . _element , Event$6 . HIDE ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( ! this . _isShown || hideEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-10-15 22:51:44 +00:00
2018-11-13 06:41:12 +00:00
this . _isShown = false ;
2019-03-01 16:31:34 +00:00
var transition = this . _element . classList . contains ( ClassName$5 . FADE ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( transition ) {
this . _isTransitioning = true ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _setEscapeEvent ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _setResizeEvent ( ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . off ( document , Event$6 . FOCUSIN ) ;
this . _element . classList . remove ( ClassName$5 . SHOW ) ;
EventHandler . off ( this . _element , Event$6 . CLICK _DISMISS ) ;
EventHandler . off ( this . _dialog , Event$6 . MOUSEDOWN _DISMISS ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( transition ) {
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this2 . _hideModal ( event ) ;
2019-03-01 16:31:34 +00:00
} ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
this . _hideModal ( ) ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
[ window , this . _element , this . _dialog ] . forEach ( function ( htmlElement ) {
2019-03-01 16:31:34 +00:00
return EventHandler . off ( htmlElement , EVENT _KEY$5 ) ;
2018-11-13 06:41:12 +00:00
} ) ;
/ * *
* ` document ` has 2 events ` Event.FOCUSIN ` and ` Event.CLICK_DATA_API `
* Do not move ` document ` in ` htmlElements ` array
* It will remove ` Event.CLICK_DATA_API ` event that should remain
* /
2017-03-26 18:26:31 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . off ( document , Event$6 . FOCUSIN ) ;
Data . removeData ( this . _element , DATA _KEY$5 ) ;
2018-11-13 06:41:12 +00:00
this . _config = null ;
this . _element = null ;
this . _dialog = null ;
this . _backdrop = null ;
this . _isShown = null ;
this . _isBodyOverflowing = null ;
this . _ignoreBackdropClick = null ;
this . _isTransitioning = null ;
this . _scrollbarWidth = null ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . handleUpdate = function handleUpdate ( ) {
this . _adjustDialog ( ) ;
2019-01-04 16:29:45 +00:00
} // Private
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getConfig = function _getConfig ( config ) {
config = _objectSpread ( { } , Default$3 , config ) ;
2019-03-01 16:31:34 +00:00
typeCheckConfig ( NAME$5 , config , DefaultType$3 ) ;
2018-11-13 06:41:12 +00:00
return config ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _showElement = function _showElement ( relatedTarget ) {
var _this3 = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var transition = this . _element . classList . contains ( ClassName$5 . FADE ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00: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-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _element . style . display = 'block' ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _element . removeAttribute ( 'aria-hidden' ) ;
2016-10-10 00:26:51 +00:00
2018-12-15 23:13:22 +00:00
this . _element . setAttribute ( 'aria-modal' , true ) ;
2019-03-01 16:31:34 +00:00
if ( this . _dialog . classList . contains ( ClassName$5 . SCROLLABLE ) ) {
SelectorEngine . findOne ( Selector$5 . MODAL _BODY , this . _dialog ) . scrollTop = 0 ;
2019-02-11 19:15:34 +00:00
} else {
this . _element . scrollTop = 0 ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( transition ) {
2019-03-01 16:31:34 +00:00
reflow ( this . _element ) ;
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
this . _element . classList . add ( ClassName$5 . SHOW ) ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _config . focus ) {
this . _enforceFocus ( ) ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
var transitionComplete = function transitionComplete ( ) {
if ( _this3 . _config . focus ) {
_this3 . _element . focus ( ) ;
2015-08-15 19:19:11 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_this3 . _isTransitioning = false ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this3 . _element , Event$6 . SHOWN , {
relatedTarget : relatedTarget
} ) ;
2016-10-10 00:26:51 +00:00
} ;
2018-11-13 06:41:12 +00:00
if ( transition ) {
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( this . _dialog ) ;
EventHandler . one ( this . _dialog , TRANSITION _END , transitionComplete ) ;
emulateTransitionEnd ( this . _dialog , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
transitionComplete ( ) ;
}
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _enforceFocus = function _enforceFocus ( ) {
var _this4 = this ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . off ( document , Event$6 . FOCUSIN ) ; // guard against infinite focus loop
EventHandler . on ( document , Event$6 . FOCUSIN , function ( event ) {
if ( document !== event . target && _this4 . _element !== event . target && ! _this4 . _element . contains ( event . target ) ) {
2018-11-13 06:41:12 +00:00
_this4 . _element . focus ( ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _setEscapeEvent = function _setEscapeEvent ( ) {
var _this5 = this ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _isShown && this . _config . keyboard ) {
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$6 . KEYDOWN _DISMISS , function ( event ) {
2018-11-13 06:41:12 +00:00
if ( event . which === ESCAPE _KEYCODE$1 ) {
event . preventDefault ( ) ;
2016-11-01 04:36:10 +00:00
2018-11-13 06:41:12 +00:00
_this5 . hide ( ) ;
}
} ) ;
} else if ( ! this . _isShown ) {
2019-03-01 16:31:34 +00:00
EventHandler . off ( this . _element , Event$6 . KEYDOWN _DISMISS ) ;
2018-11-13 06:41:12 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _setResizeEvent = function _setResizeEvent ( ) {
var _this6 = this ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _isShown ) {
2019-03-01 16:31:34 +00:00
EventHandler . on ( window , Event$6 . RESIZE , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this6 . handleUpdate ( event ) ;
} ) ;
} else {
2019-03-01 16:31:34 +00:00
EventHandler . off ( window , Event$6 . RESIZE ) ;
2018-11-13 06:41:12 +00:00
}
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _hideModal = function _hideModal ( ) {
var _this7 = this ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _element . style . display = 'none' ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
this . _element . setAttribute ( 'aria-hidden' , true ) ;
2017-09-30 21:28:03 +00:00
2018-12-15 23:13:22 +00:00
this . _element . removeAttribute ( 'aria-modal' ) ;
2018-11-13 06:41:12 +00:00
this . _isTransitioning = false ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _showBackdrop ( function ( ) {
2019-03-01 16:31:34 +00:00
document . body . classList . remove ( ClassName$5 . OPEN ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_this7 . _resetAdjustments ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_this7 . _resetScrollbar ( ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this7 . _element , Event$6 . HIDDEN ) ;
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
_proto . _removeBackdrop = function _removeBackdrop ( ) {
if ( this . _backdrop ) {
2019-03-01 16:31:34 +00:00
this . _backdrop . parentNode . removeChild ( this . _backdrop ) ;
2018-11-13 06:41:12 +00:00
this . _backdrop = null ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _showBackdrop = function _showBackdrop ( callback ) {
var _this8 = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var animate = this . _element . classList . contains ( ClassName$5 . FADE ) ? ClassName$5 . FADE : '' ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _isShown && this . _config . backdrop ) {
this . _backdrop = document . createElement ( 'div' ) ;
this . _backdrop . className = ClassName$5 . BACKDROP ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( animate ) {
this . _backdrop . classList . add ( animate ) ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
document . body . appendChild ( this . _backdrop ) ;
EventHandler . on ( this . _element , Event$6 . CLICK _DISMISS , function ( event ) {
2018-11-13 06:41:12 +00:00
if ( _this8 . _ignoreBackdropClick ) {
_this8 . _ignoreBackdropClick = false ;
2015-08-15 19:19:11 +00:00
return ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( event . target !== event . currentTarget ) {
2015-08-15 19:19:11 +00:00
return ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( _this8 . _config . backdrop === 'static' ) {
_this8 . _element . focus ( ) ;
} else {
_this8 . hide ( ) ;
}
} ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( animate ) {
2019-03-01 16:31:34 +00:00
reflow ( this . _backdrop ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
this . _backdrop . classList . add ( ClassName$5 . SHOW ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! callback ) {
return ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( ! animate ) {
2015-08-15 19:19:11 +00:00
callback ( ) ;
2018-11-13 06:41:12 +00:00
return ;
2015-08-15 19:19:11 +00:00
}
2019-03-01 16:31:34 +00:00
var backdropTransitionDuration = getTransitionDurationFromElement ( this . _backdrop ) ;
EventHandler . one ( this . _backdrop , TRANSITION _END , callback ) ;
emulateTransitionEnd ( this . _backdrop , backdropTransitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else if ( ! this . _isShown && this . _backdrop ) {
2019-03-01 16:31:34 +00:00
this . _backdrop . classList . remove ( ClassName$5 . SHOW ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var callbackRemove = function callbackRemove ( ) {
_this8 . _removeBackdrop ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( callback ) {
callback ( ) ;
}
} ;
2019-03-01 16:31:34 +00:00
if ( this . _element . classList . contains ( ClassName$5 . FADE ) ) {
var _backdropTransitionDuration = getTransitionDurationFromElement ( this . _backdrop ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . one ( this . _backdrop , TRANSITION _END , callbackRemove ) ;
emulateTransitionEnd ( this . _backdrop , _backdropTransitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
callbackRemove ( ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} else if ( callback ) {
callback ( ) ;
}
2019-01-04 16:29:45 +00:00
} // ----------------------------------------------------------------------
2018-11-13 06:41:12 +00:00
// the following methods are used to handle overflowing modals
// ----------------------------------------------------------------------
2019-01-04 16:29:45 +00:00
;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _adjustDialog = function _adjustDialog ( ) {
var isModalOverflowing = this . _element . scrollHeight > document . documentElement . clientHeight ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( ! this . _isBodyOverflowing && isModalOverflowing ) {
this . _element . style . paddingLeft = this . _scrollbarWidth + "px" ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _isBodyOverflowing && ! isModalOverflowing ) {
this . _element . style . paddingRight = this . _scrollbarWidth + "px" ;
}
} ;
2018-06-22 05:55:23 +00:00
2018-11-13 06:41:12 +00:00
_proto . _resetAdjustments = function _resetAdjustments ( ) {
this . _element . style . paddingLeft = '' ;
this . _element . style . paddingRight = '' ;
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
_proto . _checkScrollbar = function _checkScrollbar ( ) {
var rect = document . body . getBoundingClientRect ( ) ;
this . _isBodyOverflowing = rect . left + rect . right < window . innerWidth ;
this . _scrollbarWidth = this . _getScrollbarWidth ( ) ;
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
_proto . _setScrollbar = function _setScrollbar ( ) {
var _this9 = this ;
if ( this . _isBodyOverflowing ) {
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
2019-03-01 16:31:34 +00:00
// Adjust fixed content padding
makeArray ( SelectorEngine . find ( Selector$5 . FIXED _CONTENT ) ) . forEach ( function ( element ) {
2018-11-13 06:41:12 +00:00
var actualPadding = element . style . paddingRight ;
2019-03-01 16:31:34 +00:00
var calculatedPadding = window . getComputedStyle ( element ) [ 'padding-right' ] ;
Manipulator . setDataAttribute ( element , 'padding-right' , actualPadding ) ;
element . style . paddingRight = parseFloat ( calculatedPadding ) + _this9 . _scrollbarWidth + "px" ;
2018-11-13 06:41:12 +00:00
} ) ; // Adjust sticky content margin
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( Selector$5 . STICKY _CONTENT ) ) . forEach ( function ( element ) {
2018-11-13 06:41:12 +00:00
var actualMargin = element . style . marginRight ;
2019-03-01 16:31:34 +00:00
var calculatedMargin = window . getComputedStyle ( element ) [ 'margin-right' ] ;
Manipulator . setDataAttribute ( element , 'margin-right' , actualMargin ) ;
element . style . marginRight = parseFloat ( calculatedMargin ) - _this9 . _scrollbarWidth + "px" ;
2018-11-13 06:41:12 +00:00
} ) ; // Adjust body padding
var actualPadding = document . body . style . paddingRight ;
2019-03-01 16:31:34 +00:00
var calculatedPadding = window . getComputedStyle ( document . body ) [ 'padding-right' ] ;
Manipulator . setDataAttribute ( document . body , 'padding-right' , actualPadding ) ;
document . body . style . paddingRight = parseFloat ( calculatedPadding ) + this . _scrollbarWidth + "px" ;
2018-11-13 06:41:12 +00:00
}
2018-11-24 16:22:59 +00:00
2019-03-01 16:31:34 +00:00
document . body . classList . add ( ClassName$5 . OPEN ) ;
2018-11-13 06:41:12 +00:00
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _resetScrollbar = function _resetScrollbar ( ) {
// Restore fixed content padding
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( Selector$5 . FIXED _CONTENT ) ) . forEach ( function ( element ) {
var padding = Manipulator . getDataAttribute ( element , 'padding-right' ) ;
if ( typeof padding !== 'undefined' ) {
Manipulator . removeDataAttribute ( element , 'padding-right' ) ;
element . style . paddingRight = padding ;
}
} ) ; // Restore sticky content and navbar-toggler margin
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( "" + Selector$5 . STICKY _CONTENT ) ) . forEach ( function ( element ) {
var margin = Manipulator . getDataAttribute ( element , 'margin-right' ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof margin !== 'undefined' ) {
2019-03-01 16:31:34 +00:00
Manipulator . removeDataAttribute ( element , 'margin-right' ) ;
element . style . marginRight = margin ;
2018-11-13 06:41:12 +00:00
}
} ) ; // Restore body padding
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var padding = Manipulator . getDataAttribute ( document . body , 'padding-right' ) ;
2019-03-11 15:13:30 +00:00
if ( typeof padding === 'undefined' ) {
document . body . style . paddingRight = '' ;
} else {
2019-03-01 16:31:34 +00:00
Manipulator . removeDataAttribute ( document . body , 'padding-right' ) ;
document . body . style . paddingRight = padding ;
}
2018-11-13 06:41:12 +00:00
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getScrollbarWidth = function _getScrollbarWidth ( ) {
// thx d.walsh
var scrollDiv = document . createElement ( 'div' ) ;
scrollDiv . className = ClassName$5 . SCROLLBAR _MEASURER ;
document . body . appendChild ( scrollDiv ) ;
var scrollbarWidth = scrollDiv . getBoundingClientRect ( ) . width - scrollDiv . clientWidth ;
document . body . removeChild ( scrollDiv ) ;
return scrollbarWidth ;
2019-01-04 16:29:45 +00:00
} // Static
;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
Modal . _jQueryInterface = function _jQueryInterface ( config , relatedTarget ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$5 ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
var _config = _objectSpread ( { } , Default$3 , Manipulator . getDataAttributes ( this ) , typeof config === 'object' && config ? config : { } ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data ) {
data = new Modal ( this , _config ) ;
}
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2015-08-15 19:19:11 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
data [ config ] ( relatedTarget ) ;
} else if ( _config . show ) {
data . show ( relatedTarget ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
Modal . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$5 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Modal , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$5 ;
}
} , {
key : "Default" ,
get : function get ( ) {
return Default$3 ;
}
} ] ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
return Modal ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$6 . CLICK _DATA _API , Selector$5 . DATA _TOGGLE , function ( event ) {
2018-11-13 06:41:12 +00:00
var _this10 = this ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var target ;
2019-03-01 16:31:34 +00:00
var selector = getSelectorFromElement ( this ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( selector ) {
2019-03-01 16:31:34 +00:00
target = SelectorEngine . findOne ( selector ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var config = Data . getData ( target , DATA _KEY$5 ) ? 'toggle' : _objectSpread ( { } , Manipulator . getDataAttributes ( target ) , Manipulator . getDataAttributes ( this ) ) ;
2018-11-13 06:41:12 +00:00
if ( this . tagName === 'A' || this . tagName === 'AREA' ) {
event . preventDefault ( ) ;
}
2019-03-01 16:31:34 +00:00
EventHandler . one ( target , Event$6 . SHOW , function ( showEvent ) {
if ( showEvent . defaultPrevented ) {
// only register focus restorer if modal will actually get shown
2018-11-13 06:41:12 +00:00
return ;
2015-08-15 19:19:11 +00:00
}
2019-03-01 16:31:34 +00:00
EventHandler . one ( target , Event$6 . HIDDEN , function ( ) {
if ( isVisible ( _this10 ) ) {
2018-11-13 06:41:12 +00:00
_this10 . focus ( ) ;
2015-08-15 19:19:11 +00:00
}
2018-03-31 20:59:37 +00:00
} ) ;
} ) ;
2019-03-01 16:31:34 +00:00
var data = Data . getData ( target , DATA _KEY$5 ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( ! data ) {
data = new Modal ( target , config ) ;
}
data . show ( this ) ;
2018-11-13 06:41:12 +00:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$5 = jQuery . fn [ NAME$5 ] ;
jQuery . fn [ NAME$5 ] = Modal . _jQueryInterface ;
jQuery . fn [ NAME$5 ] . Constructor = Modal ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$5 ] . noConflict = function ( ) {
jQuery . fn [ NAME$5 ] = JQUERY _NO _CONFLICT$5 ;
return Modal . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2019-02-13 16:01:40 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* Bootstrap ( v4 . 3.1 ) : util / sanitizer . js
2019-02-13 16:01:40 +00:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var uriAttrs = [ 'background' , 'cite' , 'href' , 'itemtype' , 'longdesc' , 'poster' , 'src' , 'xlink:href' ] ;
var ARIA _ATTRIBUTE _PATTERN = /^aria-[\w-]*$/i ;
2019-03-01 16:31:34 +00: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
* /
var SAFE _URL _PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi ;
/ * *
* A pattern that matches safe data URLs . Only matches image , video and audio types .
*
* Shoutout to Angular 7 https : //github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
* /
var DATA _URL _PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i ;
var allowedAttribute = function allowedAttribute ( attr , allowedAttributeList ) {
var attrName = attr . nodeName . toLowerCase ( ) ;
if ( allowedAttributeList . indexOf ( attrName ) !== - 1 ) {
if ( uriAttrs . indexOf ( attrName ) !== - 1 ) {
return Boolean ( attr . nodeValue . match ( SAFE _URL _PATTERN ) || attr . nodeValue . match ( DATA _URL _PATTERN ) ) ;
}
return true ;
}
var regExp = allowedAttributeList . filter ( function ( attrRegex ) {
return attrRegex instanceof RegExp ;
} ) ; // Check if a regular expression validates the attribute.
for ( var i = 0 , l = regExp . length ; i < l ; i ++ ) {
if ( attrName . match ( regExp [ i ] ) ) {
return true ;
}
}
return false ;
} ;
2019-02-13 16:01:40 +00:00
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*' : [ 'class' , 'dir' , 'id' , 'lang' , 'role' , ARIA _ATTRIBUTE _PATTERN ] ,
a : [ 'target' , 'href' , 'title' , 'rel' ] ,
area : [ ] ,
b : [ ] ,
br : [ ] ,
col : [ ] ,
code : [ ] ,
div : [ ] ,
em : [ ] ,
hr : [ ] ,
h1 : [ ] ,
h2 : [ ] ,
h3 : [ ] ,
h4 : [ ] ,
h5 : [ ] ,
h6 : [ ] ,
i : [ ] ,
img : [ 'src' , 'alt' , 'title' , 'width' , 'height' ] ,
li : [ ] ,
ol : [ ] ,
p : [ ] ,
pre : [ ] ,
s : [ ] ,
small : [ ] ,
span : [ ] ,
sub : [ ] ,
sup : [ ] ,
strong : [ ] ,
u : [ ] ,
ul : [ ]
} ;
function sanitizeHtml ( unsafeHtml , whiteList , sanitizeFn ) {
2019-03-01 16:31:34 +00:00
if ( ! unsafeHtml . length ) {
2019-02-13 16:01:40 +00:00
return unsafeHtml ;
}
if ( sanitizeFn && typeof sanitizeFn === 'function' ) {
return sanitizeFn ( unsafeHtml ) ;
}
var domParser = new window . DOMParser ( ) ;
var createdDocument = domParser . parseFromString ( unsafeHtml , 'text/html' ) ;
var whitelistKeys = Object . keys ( whiteList ) ;
2019-03-01 16:31:34 +00:00
var elements = makeArray ( createdDocument . body . querySelectorAll ( '*' ) ) ;
2019-02-13 16:01:40 +00:00
var _loop = function _loop ( i , len ) {
var el = elements [ i ] ;
var elName = el . nodeName . toLowerCase ( ) ;
2019-03-01 16:31:34 +00:00
if ( whitelistKeys . indexOf ( elName ) === - 1 ) {
2019-02-13 16:01:40 +00:00
el . parentNode . removeChild ( el ) ;
return "continue" ;
}
2019-03-01 16:31:34 +00:00
var attributeList = makeArray ( el . attributes ) ;
2019-02-13 16:01:40 +00:00
var whitelistedAttributes = [ ] . concat ( whiteList [ '*' ] || [ ] , whiteList [ elName ] || [ ] ) ;
attributeList . forEach ( function ( attr ) {
if ( ! allowedAttribute ( attr , whitelistedAttributes ) ) {
el . removeAttribute ( attr . nodeName ) ;
}
} ) ;
} ;
for ( var i = 0 , len = elements . length ; i < len ; i ++ ) {
var _ret = _loop ( i , len ) ;
if ( _ret === "continue" ) continue ;
}
return createdDocument . body . innerHTML ;
}
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$6 = 'tooltip' ;
2019-02-13 16:01:40 +00:00
var VERSION$6 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
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' ) ;
2019-02-13 16:01:40 +00:00
var DISALLOWED _ATTRIBUTES = [ 'sanitize' , 'whiteList' , 'sanitizeFn' ] ;
2018-11-13 06:41:12 +00: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)' ,
2019-02-11 19:15:34 +00:00
offset : '(number|string|function)' ,
2018-11-13 06:41:12 +00:00
container : '(string|element|boolean)' ,
fallbackPlacement : '(string|array)' ,
2019-02-13 16:01:40 +00:00
boundary : '(string|element)' ,
sanitize : 'boolean' ,
sanitizeFn : '(null|function)' ,
whiteList : 'object'
2018-11-13 06:41:12 +00:00
} ;
var AttachmentMap$1 = {
AUTO : 'auto' ,
TOP : 'top' ,
RIGHT : 'right' ,
BOTTOM : 'bottom' ,
LEFT : 'left'
} ;
var Default$4 = {
animation : true ,
2019-03-01 16:31:34 +00:00
template : '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div></div>' ,
2018-11-13 06:41:12 +00:00
trigger : 'hover focus' ,
title : '' ,
delay : 0 ,
html : false ,
selector : false ,
placement : 'top' ,
offset : 0 ,
container : false ,
fallbackPlacement : 'flip' ,
2019-02-13 16:01:40 +00:00
boundary : 'scrollParent' ,
sanitize : true ,
sanitizeFn : null ,
whiteList : DefaultWhitelist
2018-11-13 06:41:12 +00:00
} ;
var HoverState = {
SHOW : 'show' ,
OUT : 'out'
} ;
2019-03-01 16:31:34 +00:00
var Event$7 = {
2018-11-13 06:41:12 +00: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
} ;
var ClassName$6 = {
FADE : 'fade' ,
SHOW : 'show'
} ;
var Selector$6 = {
2019-07-12 21:56:26 +00:00
TOOLTIP _INNER : '.tooltip-inner'
2018-11-13 06:41:12 +00:00
} ;
var Trigger = {
HOVER : 'hover' ,
FOCUS : 'focus' ,
CLICK : 'click' ,
MANUAL : 'manual'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 06:41:12 +00:00
} ;
var Tooltip =
/*#__PURE__*/
function ( ) {
function Tooltip ( element , config ) {
2017-10-29 23:19:14 +00:00
/ * *
2018-11-13 06:41:12 +00:00
* Check for Popper dependency
* Popper - https : //popper.js.org
2017-10-29 23:19:14 +00:00
* /
2018-11-13 06:41:12 +00:00
if ( typeof Popper === 'undefined' ) {
2019-03-01 16:31:34 +00:00
throw new TypeError ( 'Bootstrap\'s tooltips require Popper.js (https://popper.js.org)' ) ;
2018-11-13 06:41:12 +00:00
} // private
2017-10-29 23:19:14 +00:00
2018-11-13 06:41:12 +00:00
this . _isEnabled = true ;
this . _timeout = 0 ;
this . _hoverState = '' ;
this . _activeTrigger = { } ;
this . _popper = null ; // Protected
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . element = element ;
this . config = this . _getConfig ( config ) ;
this . tip = null ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _setListeners ( ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , this . constructor . DATA _KEY , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Tooltip . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Public
_proto . enable = function enable ( ) {
this . _isEnabled = true ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . disable = function disable ( ) {
this . _isEnabled = false ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . toggleEnabled = function toggleEnabled ( ) {
this . _isEnabled = ! this . _isEnabled ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . toggle = function toggle ( event ) {
if ( ! this . _isEnabled ) {
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( event ) {
var dataKey = this . constructor . DATA _KEY ;
2019-03-01 16:31:34 +00:00
var context = Data . getData ( event . delegateTarget , dataKey ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! context ) {
2019-03-01 16:31:34 +00:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data . setData ( event . delegateTarget , dataKey , context ) ;
2017-09-06 04:05:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
context . _activeTrigger . click = ! context . _activeTrigger . click ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( context . _isWithActiveTrigger ( ) ) {
context . _enter ( null , context ) ;
2017-09-06 04:05:12 +00:00
} else {
2018-11-13 06:41:12 +00:00
context . _leave ( null , context ) ;
}
} else {
2019-03-01 16:31:34 +00:00
if ( this . getTipElement ( ) . classList . contains ( ClassName$6 . SHOW ) ) {
2018-11-13 06:41:12 +00:00
this . _leave ( null , this ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _enter ( null , this ) ;
}
} ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
clearTimeout ( this . _timeout ) ;
2019-03-01 16:31:34 +00:00
Data . removeData ( this . element , this . constructor . DATA _KEY ) ;
EventHandler . off ( this . element , this . constructor . EVENT _KEY ) ;
2019-07-12 21:56:26 +00:00
EventHandler . off ( SelectorEngine . closest ( this . element , '.modal' ) , 'hide.bs.modal' , this . _hideModalHandler ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . tip ) {
2019-03-01 16:31:34 +00:00
this . tip . parentNode . removeChild ( this . tip ) ;
2018-11-13 06:41:12 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _isEnabled = null ;
this . _timeout = null ;
this . _hoverState = null ;
this . _activeTrigger = null ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( this . _popper !== null ) {
this . _popper . destroy ( ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _popper = null ;
this . element = null ;
this . config = null ;
this . tip = null ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . show = function show ( ) {
var _this = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( this . element . style . display === 'none' ) {
2018-11-13 06:41:12 +00:00
throw new Error ( 'Please use show on visible elements' ) ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . isWithContent ( ) && this . _isEnabled ) {
2019-03-01 16:31:34 +00:00
var showEvent = EventHandler . trigger ( this . element , this . constructor . Event . SHOW ) ;
var shadowRoot = findShadowRoot ( this . element ) ;
2019-03-11 15:13:30 +00:00
var isInTheDom = shadowRoot === null ? this . element . ownerDocument . documentElement . contains ( this . element ) : shadowRoot . contains ( this . element ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( showEvent . defaultPrevented || ! isInTheDom ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
var tip = this . getTipElement ( ) ;
2019-03-01 16:31:34 +00:00
var tipId = getUID ( this . constructor . NAME ) ;
2018-11-13 06:41:12 +00:00
tip . setAttribute ( 'id' , tipId ) ;
this . element . setAttribute ( 'aria-describedby' , tipId ) ;
this . setContent ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . config . animation ) {
2019-03-01 16:31:34 +00:00
tip . classList . add ( ClassName$6 . FADE ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var placement = typeof this . config . placement === 'function' ? this . config . placement . call ( this , tip , this . element ) : this . config . placement ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var attachment = this . _getAttachment ( placement ) ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
this . addAttachmentClass ( attachment ) ;
2018-12-15 23:13:22 +00:00
var container = this . _getContainer ( ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( tip , this . constructor . DATA _KEY , this ) ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
if ( ! this . element . ownerDocument . documentElement . contains ( this . tip ) ) {
container . appendChild ( tip ) ;
2018-11-13 06:41:12 +00:00
}
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( this . element , this . constructor . Event . INSERTED ) ;
2018-11-13 06:41:12 +00:00
this . _popper = new Popper ( this . element , tip , {
placement : attachment ,
modifiers : {
2019-02-11 19:15:34 +00:00
offset : this . _getOffset ( ) ,
2018-11-13 06:41:12 +00:00
flip : {
behavior : this . config . fallbackPlacement
} ,
arrow : {
2019-07-12 21:56:26 +00:00
element : "." + this . constructor . NAME + "-arrow"
2017-12-23 00:21:54 +00:00
} ,
2018-11-13 06:41:12 +00:00
preventOverflow : {
boundariesElement : this . config . boundary
}
} ,
onCreate : function onCreate ( data ) {
if ( data . originalPlacement !== data . placement ) {
2017-09-06 04:05:12 +00:00
_this . _handlePopperPlacementChange ( data ) ;
}
2018-11-13 06:41:12 +00:00
} ,
onUpdate : function onUpdate ( data ) {
2018-11-24 16:22:59 +00:00
return _this . _handlePopperPlacementChange ( data ) ;
2017-09-06 04:05:12 +00:00
}
2018-11-13 06:41:12 +00:00
} ) ;
2019-03-01 16:31:34 +00:00
tip . classList . add ( ClassName$6 . SHOW ) ; // If this is a touch-enabled device we add extra
2018-11-13 06:41:12 +00:00
// 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 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( 'ontouchstart' in document . documentElement ) {
2019-03-01 16:31:34 +00:00
makeArray ( document . body . children ) . forEach ( function ( element ) {
EventHandler . on ( element , 'mouseover' , noop ( ) ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
var complete = function complete ( ) {
if ( _this . config . animation ) {
_this . _fixTransition ( ) ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var prevHoverState = _this . _hoverState ;
_this . _hoverState = null ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this . element , _this . constructor . Event . SHOWN ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( prevHoverState === HoverState . OUT ) {
_this . _leave ( null , _this ) ;
2017-09-06 04:05:12 +00:00
}
2018-11-13 06:41:12 +00:00
} ;
2019-03-01 16:31:34 +00:00
if ( this . tip . classList . contains ( ClassName$6 . FADE ) ) {
var transitionDuration = getTransitionDurationFromElement ( this . tip ) ;
EventHandler . one ( this . tip , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . tip , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
complete ( ) ;
2017-09-06 04:05:12 +00:00
}
2018-11-13 06:41:12 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . hide = function hide ( callback ) {
var _this2 = this ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var tip = this . getTipElement ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var complete = function complete ( ) {
if ( _this2 . _hoverState !== HoverState . SHOW && tip . parentNode ) {
tip . parentNode . removeChild ( tip ) ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_this2 . _cleanTipClass ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_this2 . element . removeAttribute ( 'aria-describedby' ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this2 . element , _this2 . constructor . Event . HIDDEN ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( _this2 . _popper !== null ) {
_this2 . _popper . destroy ( ) ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( callback ) {
callback ( ) ;
}
} ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
var hideEvent = EventHandler . trigger ( this . element , this . constructor . Event . HIDE ) ;
2017-09-06 04:05:12 +00:00
2019-03-01 16:31:34 +00:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
tip . classList . remove ( ClassName$6 . SHOW ) ; // If this is a touch-enabled device we remove the extra
2018-11-13 06:41:12 +00:00
// empty mouseover listeners we added for iOS support
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( 'ontouchstart' in document . documentElement ) {
2019-03-01 16:31:34 +00:00
makeArray ( document . body . children ) . forEach ( function ( element ) {
return EventHandler . off ( element , 'mouseover' , noop ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _activeTrigger [ Trigger . CLICK ] = false ;
this . _activeTrigger [ Trigger . FOCUS ] = false ;
this . _activeTrigger [ Trigger . HOVER ] = false ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( this . tip . classList . contains ( ClassName$6 . FADE ) ) {
var transitionDuration = getTransitionDurationFromElement ( tip ) ;
EventHandler . one ( tip , TRANSITION _END , complete ) ;
emulateTransitionEnd ( tip , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
complete ( ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _hoverState = '' ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . update = function update ( ) {
if ( this . _popper !== null ) {
this . _popper . scheduleUpdate ( ) ;
}
2019-01-04 16:29:45 +00:00
} // Protected
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . isWithContent = function isWithContent ( ) {
return Boolean ( this . getTitle ( ) ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . addAttachmentClass = function addAttachmentClass ( attachment ) {
2019-03-01 16:31:34 +00:00
this . getTipElement ( ) . classList . add ( CLASS _PREFIX + "-" + attachment ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . getTipElement = function getTipElement ( ) {
2019-03-01 16:31:34 +00: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 06:41:12 +00:00
return this . tip ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . setContent = function setContent ( ) {
var tip = this . getTipElement ( ) ;
2019-03-01 16:31:34 +00:00
this . setElementContent ( SelectorEngine . findOne ( Selector$6 . TOOLTIP _INNER , tip ) , this . getTitle ( ) ) ;
tip . classList . remove ( ClassName$6 . FADE ) ;
tip . classList . remove ( ClassName$6 . SHOW ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
_proto . setElementContent = function setElementContent ( element , content ) {
if ( element === null ) {
return ;
}
2018-11-13 06:41:12 +00:00
if ( typeof content === 'object' && ( content . nodeType || content . jquery ) ) {
2019-03-01 16:31:34 +00:00
if ( content . jquery ) {
content = content [ 0 ] ;
} // content is a DOM node or a jQuery
2019-02-13 16:01:40 +00:00
if ( this . config . html ) {
2019-03-01 16:31:34 +00:00
if ( content . parentNode !== element ) {
element . innerHTML = '' ;
element . appendChild ( content ) ;
2017-09-06 04:05:12 +00:00
}
} else {
2019-03-01 16:31:34 +00:00
element . innerText = content . textContent ;
2017-09-06 04:05:12 +00:00
}
2019-02-13 16:01:40 +00:00
return ;
}
if ( this . config . html ) {
if ( this . config . sanitize ) {
content = sanitizeHtml ( content , this . config . whiteList , this . config . sanitizeFn ) ;
}
2019-03-01 16:31:34 +00:00
element . innerHTML = content ;
2018-11-13 06:41:12 +00:00
} else {
2019-03-01 16:31:34 +00:00
element . innerText = content ;
2018-11-13 06:41:12 +00:00
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . getTitle = function getTitle ( ) {
var title = this . element . getAttribute ( 'data-original-title' ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! title ) {
title = typeof this . config . title === 'function' ? this . config . title . call ( this . element ) : this . config . title ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return title ;
2019-01-04 16:29:45 +00:00
} // Private
;
2015-08-15 19:19:11 +00:00
2019-02-11 19:15:34 +00:00
_proto . _getOffset = function _getOffset ( ) {
var _this3 = this ;
var offset = { } ;
if ( typeof this . config . offset === 'function' ) {
offset . fn = function ( data ) {
data . offsets = _objectSpread ( { } , data . offsets , _this3 . config . offset ( data . offsets , _this3 . element ) || { } ) ;
return data ;
} ;
} else {
offset . offset = this . config . offset ;
}
return offset ;
} ;
2018-12-15 23:13:22 +00:00
_proto . _getContainer = function _getContainer ( ) {
if ( this . config . container === false ) {
return document . body ;
}
2019-03-01 16:31:34 +00:00
if ( isElement ( this . config . container ) ) {
return this . config . container ;
2018-12-15 23:13:22 +00:00
}
2019-03-01 16:31:34 +00:00
return SelectorEngine . findOne ( this . config . container ) ;
2018-12-15 23:13:22 +00:00
} ;
2018-11-13 06:41:12 +00:00
_proto . _getAttachment = function _getAttachment ( placement ) {
return AttachmentMap$1 [ placement . toUpperCase ( ) ] ;
} ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
_proto . _setListeners = function _setListeners ( ) {
2019-02-11 19:15:34 +00:00
var _this4 = this ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var triggers = this . config . trigger . split ( ' ' ) ;
triggers . forEach ( function ( trigger ) {
if ( trigger === 'click' ) {
2019-03-01 16:31:34 +00:00
EventHandler . on ( _this4 . element , _this4 . constructor . Event . CLICK , _this4 . config . selector , function ( event ) {
2019-02-11 19:15:34 +00:00
return _this4 . toggle ( event ) ;
2017-09-06 04:05:12 +00:00
} ) ;
2018-11-13 06:41:12 +00:00
} else if ( trigger !== Trigger . MANUAL ) {
2019-02-11 19:15:34 +00:00
var eventIn = trigger === Trigger . HOVER ? _this4 . constructor . Event . MOUSEENTER : _this4 . constructor . Event . FOCUSIN ;
var eventOut = trigger === Trigger . HOVER ? _this4 . constructor . Event . MOUSELEAVE : _this4 . constructor . Event . FOCUSOUT ;
2019-03-01 16:31:34 +00:00
EventHandler . on ( _this4 . element , eventIn , _this4 . config . selector , function ( event ) {
2019-02-11 19:15:34 +00:00
return _this4 . _enter ( event ) ;
2019-03-01 16:31:34 +00:00
} ) ;
EventHandler . on ( _this4 . element , eventOut , _this4 . config . selector , function ( event ) {
2019-02-11 19:15:34 +00:00
return _this4 . _leave ( event ) ;
2017-09-06 04:05:12 +00:00
} ) ;
}
2018-11-13 06:41:12 +00:00
} ) ;
2019-07-12 21:56:26 +00:00
this . _hideModalHandler = function ( ) {
2019-02-11 19:15:34 +00:00
if ( _this4 . element ) {
_this4 . hide ( ) ;
2018-11-13 06:41:12 +00:00
}
2019-07-12 21:56:26 +00:00
} ;
EventHandler . on ( SelectorEngine . closest ( this . element , '.modal' ) , 'hide.bs.modal' , this . _hideModalHandler ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( this . config . selector ) {
this . config = _objectSpread ( { } , this . config , {
trigger : 'manual' ,
selector : ''
} ) ;
} else {
this . _fixTitle ( ) ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _fixTitle = function _fixTitle ( ) {
var titleType = typeof this . element . getAttribute ( 'data-original-title' ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( this . element . getAttribute ( 'title' ) || titleType !== 'string' ) {
this . element . setAttribute ( 'data-original-title' , this . element . getAttribute ( 'title' ) || '' ) ;
this . element . setAttribute ( 'title' , '' ) ;
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _enter = function _enter ( event , context ) {
var dataKey = this . constructor . DATA _KEY ;
2019-03-01 16:31:34 +00:00
context = context || Data . getData ( event . delegateTarget , dataKey ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! context ) {
2019-03-01 16:31:34 +00:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data . setData ( event . delegateTarget , dataKey , context ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( event ) {
context . _activeTrigger [ event . type === 'focusin' ? Trigger . FOCUS : Trigger . HOVER ] = true ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( context . getTipElement ( ) . classList . contains ( ClassName$6 . SHOW ) || context . _hoverState === HoverState . SHOW ) {
2017-09-06 04:05:12 +00:00
context . _hoverState = HoverState . SHOW ;
2018-11-13 06:41:12 +00:00
return ;
}
clearTimeout ( context . _timeout ) ;
context . _hoverState = HoverState . SHOW ;
if ( ! context . config . delay || ! context . config . delay . show ) {
context . show ( ) ;
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
context . _timeout = setTimeout ( function ( ) {
if ( context . _hoverState === HoverState . SHOW ) {
2017-09-06 04:05:12 +00:00
context . show ( ) ;
}
2018-11-13 06:41:12 +00:00
} , context . config . delay . show ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _leave = function _leave ( event , context ) {
var dataKey = this . constructor . DATA _KEY ;
2019-03-01 16:31:34 +00:00
context = context || Data . getData ( event . delegateTarget , dataKey ) ;
2016-11-01 04:36:10 +00:00
2018-11-13 06:41:12 +00:00
if ( ! context ) {
2019-03-01 16:31:34 +00:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data . setData ( event . delegateTarget , dataKey , context ) ;
2018-11-13 06:41:12 +00:00
}
2017-08-13 19:59:27 +00:00
2018-11-13 06:41:12 +00:00
if ( event ) {
context . _activeTrigger [ event . type === 'focusout' ? Trigger . FOCUS : Trigger . HOVER ] = false ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( context . _isWithActiveTrigger ( ) ) {
return ;
}
2015-08-19 05:07:45 +00:00
2018-11-13 06:41:12 +00:00
clearTimeout ( context . _timeout ) ;
context . _hoverState = HoverState . OUT ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( ! context . config . delay || ! context . config . delay . hide ) {
context . hide ( ) ;
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
context . _timeout = setTimeout ( function ( ) {
if ( context . _hoverState === HoverState . OUT ) {
2017-09-06 04:05:12 +00:00
context . hide ( ) ;
}
2018-11-13 06:41:12 +00:00
} , context . config . delay . hide ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _isWithActiveTrigger = function _isWithActiveTrigger ( ) {
for ( var trigger in this . _activeTrigger ) {
if ( this . _activeTrigger [ trigger ] ) {
return true ;
2017-09-06 04:05:12 +00:00
}
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
return false ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getConfig = function _getConfig ( config ) {
2019-03-01 16:31:34 +00:00
var dataAttributes = Manipulator . getDataAttributes ( this . element ) ;
2019-02-13 16:01:40 +00:00
Object . keys ( dataAttributes ) . forEach ( function ( dataAttr ) {
if ( DISALLOWED _ATTRIBUTES . indexOf ( dataAttr ) !== - 1 ) {
delete dataAttributes [ dataAttr ] ;
}
} ) ;
2019-03-01 16:31:34 +00:00
if ( config && typeof config . container === 'object' && config . container . jquery ) {
config . container = config . container [ 0 ] ;
}
2019-02-13 16:01:40 +00:00
config = _objectSpread ( { } , this . constructor . Default , dataAttributes , typeof config === 'object' && config ? config : { } ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof config . delay === 'number' ) {
config . delay = {
show : config . delay ,
hide : config . delay
} ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof config . title === 'number' ) {
config . title = config . title . toString ( ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof config . content === 'number' ) {
config . content = config . content . toString ( ) ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
typeCheckConfig ( NAME$6 , config , this . constructor . DefaultType ) ;
2019-02-13 16:01:40 +00:00
if ( config . sanitize ) {
config . template = sanitizeHtml ( config . template , config . whiteList , config . sanitizeFn ) ;
}
2018-11-13 06:41:12 +00:00
return config ;
} ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getDelegateConfig = function _getDelegateConfig ( ) {
var config = { } ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00: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 04:05:12 +00:00
}
}
2018-11-13 06:41:12 +00:00
}
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
return config ;
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _cleanTipClass = function _cleanTipClass ( ) {
2019-03-01 16:31:34 +00:00
var tip = this . getTipElement ( ) ;
var tabClass = tip . getAttribute ( 'class' ) . match ( BSCLS _PREFIX _REGEX ) ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
if ( tabClass !== null && tabClass . length ) {
2019-03-01 16:31:34 +00:00
tabClass . map ( function ( token ) {
return token . trim ( ) ;
} ) . forEach ( function ( tClass ) {
return tip . classList . remove ( tClass ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
} ;
2018-07-12 04:42:55 +00:00
2018-11-13 06:41:12 +00:00
_proto . _handlePopperPlacementChange = function _handlePopperPlacementChange ( popperData ) {
var popperInstance = popperData . instance ;
this . tip = popperInstance . popper ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
this . _cleanTipClass ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . addAttachmentClass ( this . _getAttachment ( popperData . placement ) ) ;
} ;
2017-09-06 04:05:12 +00:00
2018-11-13 06:41:12 +00:00
_proto . _fixTransition = function _fixTransition ( ) {
var tip = this . getTipElement ( ) ;
var initConfigAnimation = this . config . animation ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( tip . getAttribute ( 'x-placement' ) !== null ) {
return ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
tip . classList . remove ( ClassName$6 . FADE ) ;
2018-11-13 06:41:12 +00:00
this . config . animation = false ;
this . hide ( ) ;
this . show ( ) ;
this . config . animation = initConfigAnimation ;
2019-01-04 16:29:45 +00:00
} // Static
;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
Tooltip . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$6 ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _config = typeof config === 'object' && config ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data && /dispose|hide/ . test ( config ) ) {
return ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data ) {
data = new Tooltip ( this , _config ) ;
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
data [ config ] ( ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
Tooltip . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$6 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Tooltip , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$6 ;
}
} , {
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 ( ) {
2019-03-01 16:31:34 +00:00
return Event$7 ;
2018-11-13 06:41:12 +00:00
}
} , {
key : "EVENT_KEY" ,
get : function get ( ) {
return EVENT _KEY$6 ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$4 ;
}
} ] ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
return Tooltip ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . tooltip to jQuery only if jQuery is present
2018-11-13 06:41:12 +00:00
* /
2017-09-30 21:28:03 +00:00
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$6 = jQuery . fn [ NAME$6 ] ;
jQuery . fn [ NAME$6 ] = Tooltip . _jQueryInterface ;
jQuery . fn [ NAME$6 ] . Constructor = Tooltip ;
2015-11-11 06:59:59 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$6 ] . noConflict = function ( ) {
jQuery . fn [ NAME$6 ] = JQUERY _NO _CONFLICT$6 ;
return Tooltip . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$7 = 'popover' ;
2019-02-13 16:01:40 +00:00
var VERSION$7 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
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' ) ;
var Default$5 = _objectSpread ( { } , Tooltip . Default , {
placement : 'right' ,
trigger : 'click' ,
content : '' ,
2019-03-01 16:31:34 +00: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 06:41:12 +00:00
} ) ;
var DefaultType$5 = _objectSpread ( { } , Tooltip . DefaultType , {
content : '(string|element|function)'
} ) ;
var ClassName$7 = {
FADE : 'fade' ,
SHOW : 'show'
} ;
var Selector$7 = {
TITLE : '.popover-header' ,
CONTENT : '.popover-body'
} ;
2019-03-01 16:31:34 +00:00
var Event$8 = {
2018-11-13 06:41:12 +00: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
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var Popover =
/*#__PURE__*/
function ( _Tooltip ) {
_inheritsLoose ( Popover , _Tooltip ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
function Popover ( ) {
return _Tooltip . apply ( this , arguments ) || this ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Popover . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Overrides
_proto . isWithContent = function isWithContent ( ) {
return this . getTitle ( ) || this . _getContent ( ) ;
} ;
2017-11-08 04:45:26 +00:00
2018-11-13 06:41:12 +00:00
_proto . addAttachmentClass = function addAttachmentClass ( attachment ) {
2019-03-01 16:31:34 +00:00
this . getTipElement ( ) . classList . add ( CLASS _PREFIX$1 + "-" + attachment ) ;
2018-11-13 06:41:12 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . setContent = function setContent ( ) {
2019-03-01 16:31:34 +00:00
var tip = this . getTipElement ( ) ; // we use append for html objects to maintain js events
2015-08-19 02:22:46 +00:00
2019-03-01 16:31:34 +00:00
this . setElementContent ( SelectorEngine . findOne ( Selector$7 . TITLE , tip ) , this . getTitle ( ) ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var content = this . _getContent ( ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof content === 'function' ) {
content = content . call ( this . element ) ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
this . setElementContent ( SelectorEngine . findOne ( Selector$7 . CONTENT , tip ) , content ) ;
tip . classList . remove ( ClassName$7 . FADE ) ;
tip . classList . remove ( ClassName$7 . SHOW ) ;
2019-01-04 16:29:45 +00:00
} // Private
;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getContent = function _getContent ( ) {
return this . element . getAttribute ( 'data-content' ) || this . config . content ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _cleanTipClass = function _cleanTipClass ( ) {
2019-03-01 16:31:34 +00:00
var tip = this . getTipElement ( ) ;
var tabClass = tip . getAttribute ( 'class' ) . match ( BSCLS _PREFIX _REGEX$1 ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
if ( tabClass !== null && tabClass . length > 0 ) {
2019-03-01 16:31:34 +00:00
tabClass . map ( function ( token ) {
return token . trim ( ) ;
} ) . forEach ( function ( tClass ) {
return tip . classList . remove ( tClass ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2019-01-04 16:29:45 +00:00
} // Static
;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
Popover . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$7 ) ;
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
var _config = typeof config === 'object' ? config : null ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data && /dispose|hide/ . test ( config ) ) {
return ;
}
2017-04-22 06:58:09 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data ) {
data = new Popover ( this , _config ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( this , DATA _KEY$7 , data ) ;
2018-11-13 06:41:12 +00:00
}
2018-03-31 20:59:37 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-03-31 20:59:37 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
data [ config ] ( ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} ) ;
} ;
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
Popover . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$7 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Popover , null , [ {
key : "VERSION" ,
// Getters
get : function get ( ) {
return VERSION$7 ;
}
} , {
key : "Default" ,
get : function get ( ) {
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 ( ) {
2019-03-01 16:31:34 +00:00
return Event$8 ;
2018-11-13 06:41:12 +00:00
}
} , {
key : "EVENT_KEY" ,
get : function get ( ) {
return EVENT _KEY$7 ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$5 ;
}
} ] ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
return Popover ;
} ( Tooltip ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 21:28:03 +00:00
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$7 = jQuery . fn [ NAME$7 ] ;
jQuery . fn [ NAME$7 ] = Popover . _jQueryInterface ;
jQuery . fn [ NAME$7 ] . Constructor = Popover ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$7 ] . noConflict = function ( ) {
jQuery . fn [ NAME$7 ] = JQUERY _NO _CONFLICT$7 ;
return Popover . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME$8 = 'scrollspy' ;
2019-02-13 16:01:40 +00:00
var VERSION$8 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
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)'
} ;
2019-03-01 16:31:34 +00:00
var Event$9 = {
2018-11-13 06:41:12 +00:00
ACTIVATE : "activate" + EVENT _KEY$8 ,
SCROLL : "scroll" + EVENT _KEY$8 ,
LOAD _DATA _API : "load" + EVENT _KEY$8 + DATA _API _KEY$6
} ;
var ClassName$8 = {
DROPDOWN _ITEM : 'dropdown-item' ,
ACTIVE : 'active'
} ;
var Selector$8 = {
DATA _SPY : '[data-spy="scroll"]' ,
NAV _LIST _GROUP : '.nav, .list-group' ,
NAV _LINKS : '.nav-link' ,
NAV _ITEMS : '.nav-item' ,
LIST _ITEMS : '.list-group-item' ,
DROPDOWN : '.dropdown' ,
DROPDOWN _TOGGLE : '.dropdown-toggle'
} ;
var OffsetMethod = {
OFFSET : 'offset' ,
POSITION : 'position'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 06:41:12 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 06:41:12 +00:00
} ;
var ScrollSpy =
/*#__PURE__*/
function ( ) {
function ScrollSpy ( element , config ) {
var _this = this ;
this . _element = element ;
this . _scrollElement = element . tagName === 'BODY' ? window : element ;
this . _config = this . _getConfig ( config ) ;
2019-03-11 15:13:30 +00:00
this . _selector = this . _config . target + " " + Selector$8 . NAV _LINKS + "," + ( this . _config . target + " " + Selector$8 . LIST _ITEMS + "," ) + ( this . _config . target + " ." + ClassName$8 . DROPDOWN _ITEM ) ;
2018-11-13 06:41:12 +00:00
this . _offsets = [ ] ;
this . _targets = [ ] ;
this . _activeTarget = null ;
this . _scrollHeight = 0 ;
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _scrollElement , Event$9 . SCROLL , function ( event ) {
2018-11-13 06:41:12 +00:00
return _this . _process ( event ) ;
} ) ;
this . refresh ( ) ;
this . _process ( ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$8 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
var _proto = ScrollSpy . prototype ;
// Public
_proto . refresh = function refresh ( ) {
var _this2 = this ;
var autoMethod = this . _scrollElement === this . _scrollElement . window ? OffsetMethod . OFFSET : OffsetMethod . POSITION ;
var offsetMethod = this . _config . method === 'auto' ? autoMethod : this . _config . method ;
var offsetBase = offsetMethod === OffsetMethod . POSITION ? this . _getScrollTop ( ) : 0 ;
this . _offsets = [ ] ;
this . _targets = [ ] ;
this . _scrollHeight = this . _getScrollHeight ( ) ;
2019-03-01 16:31:34 +00:00
var targets = makeArray ( SelectorEngine . find ( this . _selector ) ) ;
2018-11-13 06:41:12 +00:00
targets . map ( function ( element ) {
var target ;
2019-03-01 16:31:34 +00:00
var targetSelector = getSelectorFromElement ( element ) ;
2018-11-13 06:41:12 +00:00
if ( targetSelector ) {
2019-03-01 16:31:34 +00:00
target = SelectorEngine . findOne ( targetSelector ) ;
2018-11-13 06:41:12 +00:00
}
if ( target ) {
var targetBCR = target . getBoundingClientRect ( ) ;
if ( targetBCR . width || targetBCR . height ) {
2019-03-01 16:31:34 +00:00
return [ Manipulator [ offsetMethod ] ( target ) . top + offsetBase , targetSelector ] ;
2018-11-13 06:41:12 +00: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 20:59:37 +00:00
} ;
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
Data . removeData ( this . _element , DATA _KEY$8 ) ;
EventHandler . off ( this . _scrollElement , EVENT _KEY$8 ) ;
2018-11-13 06:41:12 +00:00
this . _element = null ;
this . _scrollElement = null ;
this . _config = null ;
this . _selector = null ;
this . _offsets = null ;
this . _targets = null ;
this . _activeTarget = null ;
this . _scrollHeight = null ;
2019-01-04 16:29:45 +00:00
} // Private
;
2018-11-13 06:41:12 +00:00
_proto . _getConfig = function _getConfig ( config ) {
config = _objectSpread ( { } , Default$6 , typeof config === 'object' && config ? config : { } ) ;
if ( typeof config . target !== 'string' ) {
2019-03-01 16:31:34 +00:00
var id = config . target . id ;
2018-11-13 06:41:12 +00:00
if ( ! id ) {
2019-03-01 16:31:34 +00:00
id = getUID ( NAME$8 ) ;
config . target . id = id ;
2018-11-13 06:41:12 +00:00
}
config . target = "#" + id ;
}
2019-03-01 16:31:34 +00:00
typeCheckConfig ( NAME$8 , config , DefaultType$6 ) ;
2018-11-13 06:41:12 +00:00
return config ;
2018-03-31 20:59:37 +00:00
} ;
2018-11-13 06:41:12 +00:00
_proto . _getScrollTop = function _getScrollTop ( ) {
return this . _scrollElement === window ? this . _scrollElement . pageYOffset : this . _scrollElement . scrollTop ;
2018-03-31 20:59:37 +00:00
} ;
2018-11-13 06:41:12 +00:00
_proto . _getScrollHeight = function _getScrollHeight ( ) {
return this . _scrollElement . scrollHeight || Math . max ( document . body . scrollHeight , document . documentElement . scrollHeight ) ;
2018-03-31 20:59:37 +00:00
} ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
_proto . _getOffsetHeight = function _getOffsetHeight ( ) {
return this . _scrollElement === window ? window . innerHeight : this . _scrollElement . getBoundingClientRect ( ) . height ;
} ;
_proto . _process = function _process ( ) {
var scrollTop = this . _getScrollTop ( ) + this . _config . offset ;
var scrollHeight = this . _getScrollHeight ( ) ;
var maxScroll = this . _config . offset + scrollHeight - this . _getOffsetHeight ( ) ;
if ( this . _scrollHeight !== scrollHeight ) {
this . refresh ( ) ;
}
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 ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var offsetLength = this . _offsets . length ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
for ( var i = offsetLength ; i -- ; ) {
var isActiveTarget = this . _activeTarget !== this . _targets [ i ] && scrollTop >= this . _offsets [ i ] && ( typeof this . _offsets [ i + 1 ] === 'undefined' || scrollTop < this . _offsets [ i + 1 ] ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( isActiveTarget ) {
this . _activate ( this . _targets [ i ] ) ;
}
}
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _activate = function _activate ( target ) {
this . _activeTarget = target ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
this . _clear ( ) ;
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
var queries = this . _selector . split ( ',' ) . map ( function ( selector ) {
return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]" ;
2018-11-13 06:41:12 +00:00
} ) ;
2018-11-24 16:22:59 +00:00
2019-03-01 16:31:34 +00:00
var link = SelectorEngine . findOne ( queries . join ( ',' ) ) ;
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( link . classList . contains ( ClassName$8 . DROPDOWN _ITEM ) ) {
SelectorEngine . findOne ( Selector$8 . DROPDOWN _TOGGLE , SelectorEngine . closest ( link , Selector$8 . DROPDOWN ) ) . classList . add ( ClassName$8 . ACTIVE ) ;
link . classList . add ( ClassName$8 . ACTIVE ) ;
2018-11-13 06:41:12 +00:00
} else {
// Set triggered link as active
2019-03-01 16:31:34 +00:00
link . classList . add ( ClassName$8 . ACTIVE ) ;
SelectorEngine . parents ( link , Selector$8 . NAV _LIST _GROUP ) . forEach ( function ( listGroup ) {
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
SelectorEngine . prev ( listGroup , Selector$8 . NAV _LINKS + ", " + Selector$8 . LIST _ITEMS ) . forEach ( function ( item ) {
return item . classList . add ( ClassName$8 . ACTIVE ) ;
} ) ; // Handle special case when .nav-link is inside .nav-item
SelectorEngine . prev ( listGroup , Selector$8 . NAV _ITEMS ) . forEach ( function ( navItem ) {
SelectorEngine . children ( navItem , Selector$8 . NAV _LINKS ) . forEach ( function ( item ) {
return item . classList . add ( ClassName$8 . ACTIVE ) ;
} ) ;
} ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2018-03-31 20:59:37 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( this . _scrollElement , Event$9 . ACTIVATE , {
2018-11-13 06:41:12 +00:00
relatedTarget : target
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
_proto . _clear = function _clear ( ) {
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( this . _selector ) ) . filter ( function ( node ) {
2018-11-24 16:22:59 +00:00
return node . classList . contains ( ClassName$8 . ACTIVE ) ;
} ) . forEach ( function ( node ) {
return node . classList . remove ( ClassName$8 . ACTIVE ) ;
} ) ;
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
ScrollSpy . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$8 ) ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
var _config = typeof config === 'object' && config ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( ! data ) {
data = new ScrollSpy ( this , _config ) ;
2017-09-06 04:05:12 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
data [ config ] ( ) ;
}
} ) ;
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
ScrollSpy . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$8 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( ScrollSpy , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$8 ;
}
} , {
key : "Default" ,
get : function get ( ) {
return Default$6 ;
}
} ] ) ;
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
return ScrollSpy ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( window , Event$9 . LOAD _DATA _API , function ( ) {
makeArray ( SelectorEngine . find ( Selector$8 . DATA _SPY ) ) . forEach ( function ( spy ) {
return new ScrollSpy ( spy , Manipulator . getDataAttributes ( spy ) ) ;
} ) ;
2018-11-13 06:41:12 +00:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$8 = jQuery . fn [ NAME$8 ] ;
jQuery . fn [ NAME$8 ] = ScrollSpy . _jQueryInterface ;
jQuery . fn [ NAME$8 ] . Constructor = ScrollSpy ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$8 ] . noConflict = function ( ) {
jQuery . fn [ NAME$8 ] = JQUERY _NO _CONFLICT$8 ;
return ScrollSpy . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var NAME$9 = 'tab' ;
2019-02-13 16:01:40 +00:00
var VERSION$9 = '4.3.1' ;
2018-11-13 06:41:12 +00:00
var DATA _KEY$9 = 'bs.tab' ;
var EVENT _KEY$9 = "." + DATA _KEY$9 ;
var DATA _API _KEY$7 = '.data-api' ;
2019-03-01 16:31:34 +00:00
var Event$a = {
2018-11-13 06:41:12 +00:00
HIDE : "hide" + EVENT _KEY$9 ,
HIDDEN : "hidden" + EVENT _KEY$9 ,
SHOW : "show" + EVENT _KEY$9 ,
SHOWN : "shown" + EVENT _KEY$9 ,
CLICK _DATA _API : "click" + EVENT _KEY$9 + DATA _API _KEY$7
} ;
var ClassName$9 = {
DROPDOWN _MENU : 'dropdown-menu' ,
ACTIVE : 'active' ,
DISABLED : 'disabled' ,
FADE : 'fade' ,
SHOW : 'show'
} ;
var Selector$9 = {
DROPDOWN : '.dropdown' ,
NAV _LIST _GROUP : '.nav, .list-group' ,
ACTIVE : '.active' ,
2019-03-01 16:31:34 +00:00
ACTIVE _UL : ':scope > li > .active' ,
2018-11-13 06:41:12 +00:00
DATA _TOGGLE : '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]' ,
DROPDOWN _TOGGLE : '.dropdown-toggle' ,
2019-03-01 16:31:34 +00:00
DROPDOWN _ACTIVE _CHILD : ':scope > .dropdown-menu .active'
2018-11-13 06:41:12 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
var Tab =
/*#__PURE__*/
function ( ) {
function Tab ( element ) {
this . _element = element ;
2019-03-01 16:31:34 +00:00
Data . setData ( this . _element , DATA _KEY$9 , this ) ;
2018-11-13 06:41:12 +00:00
} // Getters
2015-08-15 19:19:11 +00:00
2018-06-22 05:55:23 +00:00
2018-11-13 06:41:12 +00:00
var _proto = Tab . prototype ;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
// Public
_proto . show = function show ( ) {
var _this = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( this . _element . parentNode && this . _element . parentNode . nodeType === Node . ELEMENT _NODE && this . _element . classList . contains ( ClassName$9 . ACTIVE ) || this . _element . classList . contains ( ClassName$9 . DISABLED ) ) {
2018-11-13 06:41:12 +00:00
return ;
}
2016-10-10 00:26:51 +00:00
2018-11-13 06:41:12 +00:00
var target ;
var previous ;
2019-03-01 16:31:34 +00:00
var listElement = SelectorEngine . closest ( this . _element , Selector$9 . NAV _LIST _GROUP ) ;
var selector = getSelectorFromElement ( this . _element ) ;
2018-11-13 06:41:12 +00:00
if ( listElement ) {
2018-11-24 16:22:59 +00:00
var itemSelector = listElement . nodeName === 'UL' || listElement . nodeName === 'OL' ? Selector$9 . ACTIVE _UL : Selector$9 . ACTIVE ;
2019-03-01 16:31:34 +00:00
previous = makeArray ( SelectorEngine . find ( itemSelector , listElement ) ) ;
2018-11-13 06:41:12 +00:00
previous = previous [ previous . length - 1 ] ;
}
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
var hideEvent = null ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( previous ) {
2019-03-01 16:31:34 +00:00
hideEvent = EventHandler . trigger ( previous , Event$a . HIDE , {
relatedTarget : this . _element
} ) ;
2018-11-13 06:41:12 +00:00
}
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
var showEvent = EventHandler . trigger ( this . _element , Event$a . SHOW , {
relatedTarget : previous
} ) ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
if ( showEvent . defaultPrevented || hideEvent !== null && hideEvent . defaultPrevented ) {
2018-11-13 06:41:12 +00:00
return ;
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( selector ) {
2019-03-01 16:31:34 +00:00
target = SelectorEngine . findOne ( selector ) ;
2018-11-13 06:41:12 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
this . _activate ( this . _element , listElement ) ;
2017-05-16 07:59:44 +00:00
2018-11-13 06:41:12 +00:00
var complete = function complete ( ) {
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( previous , Event$a . HIDDEN , {
2018-11-13 06:41:12 +00:00
relatedTarget : _this . _element
2018-03-31 20:59:37 +00:00
} ) ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this . _element , Event$a . SHOWN , {
2018-11-13 06:41:12 +00:00
relatedTarget : previous
} ) ;
2018-03-31 20:59:37 +00:00
} ;
2017-05-16 07:59:44 +00:00
2018-11-13 06:41:12 +00:00
if ( target ) {
this . _activate ( target , target . parentNode , complete ) ;
} else {
complete ( ) ;
}
} ;
2017-05-16 07:59:44 +00:00
2018-11-13 06:41:12 +00:00
_proto . dispose = function dispose ( ) {
2019-03-01 16:31:34 +00:00
Data . removeData ( this . _element , DATA _KEY$9 ) ;
2018-11-13 06:41:12 +00:00
this . _element = null ;
2019-01-04 16:29:45 +00:00
} // Private
;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
_proto . _activate = function _activate ( element , container , callback ) {
var _this2 = this ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
var activeElements = container && ( container . nodeName === 'UL' || container . nodeName === 'OL' ) ? SelectorEngine . find ( Selector$9 . ACTIVE _UL , container ) : SelectorEngine . children ( container , Selector$9 . ACTIVE ) ;
2018-11-13 06:41:12 +00:00
var active = activeElements [ 0 ] ;
2019-03-01 16:31:34 +00:00
var isTransitioning = callback && active && active . classList . contains ( ClassName$9 . FADE ) ;
2018-11-13 06:41:12 +00:00
var complete = function complete ( ) {
return _this2 . _transitionComplete ( element , active , callback ) ;
2018-03-31 20:59:37 +00:00
} ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( active && isTransitioning ) {
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( active ) ;
active . classList . remove ( ClassName$9 . SHOW ) ;
EventHandler . one ( active , TRANSITION _END , complete ) ;
emulateTransitionEnd ( active , transitionDuration ) ;
2018-11-13 06:41:12 +00:00
} else {
complete ( ) ;
}
} ;
_proto . _transitionComplete = function _transitionComplete ( element , active , callback ) {
if ( active ) {
2019-03-01 16:31:34 +00:00
active . classList . remove ( ClassName$9 . ACTIVE ) ;
var dropdownChild = SelectorEngine . findOne ( Selector$9 . DROPDOWN _ACTIVE _CHILD , active . parentNode ) ;
2018-11-13 06:41:12 +00:00
if ( dropdownChild ) {
2019-03-01 16:31:34 +00:00
dropdownChild . classList . remove ( ClassName$9 . ACTIVE ) ;
2016-10-10 00:26:51 +00:00
}
2018-11-13 06:41:12 +00:00
if ( active . getAttribute ( 'role' ) === 'tab' ) {
active . setAttribute ( 'aria-selected' , false ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
}
2017-09-06 04:05:12 +00:00
2019-03-01 16:31:34 +00:00
element . classList . add ( ClassName$9 . ACTIVE ) ;
2018-11-13 06:41:12 +00:00
if ( element . getAttribute ( 'role' ) === 'tab' ) {
element . setAttribute ( 'aria-selected' , true ) ;
}
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
reflow ( element ) ;
2019-02-11 19:15:34 +00:00
if ( element . classList . contains ( ClassName$9 . FADE ) ) {
element . classList . add ( ClassName$9 . SHOW ) ;
}
2017-09-06 04:05:12 +00:00
2019-03-01 16:31:34 +00:00
if ( element . parentNode && element . parentNode . classList . contains ( ClassName$9 . DROPDOWN _MENU ) ) {
var dropdownElement = SelectorEngine . closest ( element , Selector$9 . DROPDOWN ) ;
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( dropdownElement ) {
2019-03-01 16:31:34 +00:00
makeArray ( SelectorEngine . find ( Selector$9 . DROPDOWN _TOGGLE ) ) . forEach ( function ( dropdown ) {
return dropdown . classList . add ( ClassName$9 . ACTIVE ) ;
} ) ;
2018-11-13 06:41:12 +00:00
}
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
element . setAttribute ( 'aria-expanded' , true ) ;
2018-03-31 20:59:37 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-13 06:41:12 +00:00
if ( callback ) {
callback ( ) ;
}
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2018-11-13 06:41:12 +00:00
Tab . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$9 ) || new Tab ( this ) ;
2018-11-13 06:41:12 +00:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
}
data [ config ] ( ) ;
}
} ) ;
2018-03-31 20:59:37 +00:00
} ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
Tab . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$9 ) ;
} ;
2018-11-13 06:41:12 +00:00
_createClass ( Tab , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$9 ;
}
} ] ) ;
return Tab ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2019-03-01 16:31:34 +00:00
EventHandler . on ( document , Event$a . CLICK _DATA _API , Selector$9 . DATA _TOGGLE , function ( event ) {
2018-11-13 06:41:12 +00:00
event . preventDefault ( ) ;
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$9 ) || new Tab ( this ) ;
data . show ( ) ;
2018-11-13 06:41:12 +00:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . tab to jQuery only if jQuery is present
2018-11-13 06:41:12 +00:00
* /
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$9 = jQuery . fn [ NAME$9 ] ;
jQuery . fn [ NAME$9 ] = Tab . _jQueryInterface ;
jQuery . fn [ NAME$9 ] . Constructor = Tab ;
2018-11-13 06:41:12 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$9 ] . noConflict = function ( ) {
jQuery . fn [ NAME$9 ] = JQUERY _NO _CONFLICT$9 ;
return Tab . _jQueryInterface ;
} ;
}
2015-08-15 19:19:11 +00:00
/ * *
2018-11-24 16:22:59 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2015-08-15 19:19:11 +00:00
* /
2018-03-31 20:59:37 +00:00
2018-11-24 16:22:59 +00:00
var NAME$a = 'toast' ;
2019-02-13 16:01:40 +00:00
var VERSION$a = '4.3.1' ;
2018-11-24 16:22:59 +00:00
var DATA _KEY$a = 'bs.toast' ;
var EVENT _KEY$a = "." + DATA _KEY$a ;
2019-03-01 16:31:34 +00:00
var Event$b = {
2018-11-24 16:22:59 +00:00
CLICK _DISMISS : "click.dismiss" + EVENT _KEY$a ,
HIDE : "hide" + EVENT _KEY$a ,
HIDDEN : "hidden" + EVENT _KEY$a ,
SHOW : "show" + EVENT _KEY$a ,
SHOWN : "shown" + EVENT _KEY$a
} ;
var ClassName$a = {
FADE : 'fade' ,
HIDE : 'hide' ,
2018-12-15 23:13:22 +00:00
SHOW : 'show' ,
SHOWING : 'showing'
2018-11-24 16:22:59 +00:00
} ;
var DefaultType$7 = {
animation : 'boolean' ,
autohide : 'boolean' ,
delay : 'number'
} ;
var Default$7 = {
animation : true ,
autohide : true ,
delay : 500
} ;
var Selector$a = {
DATA _DISMISS : '[data-dismiss="toast"]'
2017-09-13 05:24:15 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-24 16:22:59 +00:00
* Class Definition
2017-09-13 05:24:15 +00:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 06:41:12 +00:00
2018-11-24 16:22:59 +00:00
} ;
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
var Toast =
/*#__PURE__*/
function ( ) {
function Toast ( element , config ) {
this . _element = element ;
this . _config = this . _getConfig ( config ) ;
this . _timeout = null ;
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
this . _setListeners ( ) ;
2019-03-01 16:31:34 +00:00
Data . setData ( element , DATA _KEY$a , this ) ;
2018-11-24 16:22:59 +00:00
} // Getters
2015-08-15 19:19:11 +00:00
2017-05-16 07:59:44 +00:00
2018-11-24 16:22:59 +00:00
var _proto = Toast . prototype ;
2018-11-13 06:41:12 +00:00
2018-11-24 16:22:59 +00:00
// Public
_proto . show = function show ( ) {
var _this = this ;
2015-08-15 19:19:11 +00:00
2019-07-12 21:56:26 +00:00
var showEvent = EventHandler . trigger ( this . _element , Event$b . SHOW ) ;
if ( showEvent . defaultPrevented ) {
return ;
}
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
if ( this . _config . animation ) {
this . _element . classList . add ( ClassName$a . FADE ) ;
}
2017-09-06 04:05:12 +00:00
2018-11-24 16:22:59 +00:00
var complete = function complete ( ) {
2018-12-15 23:13:22 +00:00
_this . _element . classList . remove ( ClassName$a . SHOWING ) ;
_this . _element . classList . add ( ClassName$a . SHOW ) ;
2019-03-01 16:31:34 +00:00
EventHandler . trigger ( _this . _element , Event$b . SHOWN ) ;
2017-09-06 04:05:12 +00:00
2018-11-24 16:22:59 +00:00
if ( _this . _config . autohide ) {
2019-04-18 11:47:52 +00:00
_this . _timeout = setTimeout ( function ( ) {
_this . hide ( ) ;
} , _this . _config . delay ) ;
2018-03-31 20:59:37 +00:00
}
2018-11-13 06:41:12 +00:00
} ;
2017-09-06 04:05:12 +00:00
2018-12-15 23:13:22 +00:00
this . _element . classList . remove ( ClassName$a . HIDE ) ;
this . _element . classList . add ( ClassName$a . SHOWING ) ;
2017-09-06 04:05:12 +00:00
2018-11-24 16:22:59 +00:00
if ( this . _config . animation ) {
2019-03-01 16:31:34 +00:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-24 16:22:59 +00:00
} else {
complete ( ) ;
}
} ;
2017-09-06 04:05:12 +00:00
2019-04-18 11:47:52 +00:00
_proto . hide = function hide ( ) {
2018-11-24 16:22:59 +00:00
var _this2 = this ;
2018-03-31 20:59:37 +00:00
2018-11-24 16:22:59 +00:00
if ( ! this . _element . classList . contains ( ClassName$a . SHOW ) ) {
return ;
}
2017-09-06 04:05:12 +00:00
2019-07-12 21:56:26 +00:00
var hideEvent = EventHandler . trigger ( this . _element , Event$b . HIDE ) ;
if ( hideEvent . defaultPrevented ) {
return ;
}
2018-11-13 06:41:12 +00:00
2019-04-18 11:47:52 +00:00
var complete = function complete ( ) {
_this2 . _element . classList . add ( ClassName$a . HIDE ) ;
EventHandler . trigger ( _this2 . _element , Event$b . HIDDEN ) ;
} ;
this . _element . classList . remove ( ClassName$a . SHOW ) ;
if ( this . _config . animation ) {
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-24 16:22:59 +00:00
} else {
2019-04-18 11:47:52 +00:00
complete ( ) ;
2018-11-24 16:22:59 +00:00
}
} ;
2018-11-13 06:41:12 +00:00
2018-11-24 16:22:59 +00:00
_proto . dispose = function dispose ( ) {
clearTimeout ( this . _timeout ) ;
this . _timeout = null ;
2017-09-06 04:05:12 +00:00
2018-11-24 16:22:59 +00:00
if ( this . _element . classList . contains ( ClassName$a . SHOW ) ) {
this . _element . classList . remove ( ClassName$a . SHOW ) ;
}
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . off ( this . _element , Event$b . CLICK _DISMISS ) ;
Data . removeData ( this . _element , DATA _KEY$a ) ;
2018-11-24 16:22:59 +00:00
this . _element = null ;
this . _config = null ;
2019-01-04 16:29:45 +00:00
} // Private
;
2017-09-06 04:05:12 +00:00
2018-11-24 16:22:59 +00:00
_proto . _getConfig = function _getConfig ( config ) {
2019-03-01 16:31:34 +00:00
config = _objectSpread ( { } , Default$7 , Manipulator . getDataAttributes ( this . _element ) , typeof config === 'object' && config ? config : { } ) ;
typeCheckConfig ( NAME$a , config , this . constructor . DefaultType ) ;
2018-11-24 16:22:59 +00:00
return config ;
} ;
2017-09-30 21:28:03 +00:00
2018-11-24 16:22:59 +00:00
_proto . _setListeners = function _setListeners ( ) {
var _this3 = this ;
2017-09-06 04:05:12 +00:00
2019-03-01 16:31:34 +00:00
EventHandler . on ( this . _element , Event$b . CLICK _DISMISS , Selector$a . DATA _DISMISS , function ( ) {
2019-04-18 11:47:52 +00:00
return _this3 . hide ( ) ;
2018-11-24 16:22:59 +00:00
} ) ;
2019-01-04 16:29:45 +00:00
} // Static
;
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
Toast . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
2019-03-01 16:31:34 +00:00
var data = Data . getData ( this , DATA _KEY$a ) ;
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
var _config = typeof config === 'object' && config ;
if ( ! data ) {
data = new Toast ( this , _config ) ;
}
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2015-06-18 22:48:54 +00:00
}
2017-09-30 21:28:03 +00:00
2018-11-24 16:22:59 +00:00
data [ config ] ( this ) ;
2018-11-13 06:41:12 +00:00
}
2018-11-24 16:22:59 +00:00
} ) ;
} ;
2016-10-10 00:26:51 +00:00
2019-03-01 16:31:34 +00:00
Toast . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY$a ) ;
} ;
2018-11-24 16:22:59 +00:00
_createClass ( Toast , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION$a ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType$7 ;
}
2019-02-11 19:15:34 +00:00
} , {
key : "Default" ,
get : function get ( ) {
return Default$7 ;
}
2018-11-24 16:22:59 +00:00
} ] ) ;
2015-08-15 19:19:11 +00:00
2018-11-24 16:22:59 +00:00
return Toast ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 16:31:34 +00:00
* add . toast to jQuery only if jQuery is present
2018-11-24 16:22:59 +00:00
* /
2018-11-13 06:41:12 +00:00
2017-09-30 21:28:03 +00:00
2019-03-01 16:31:34 +00:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT$a = jQuery . fn [ NAME$a ] ;
jQuery . fn [ NAME$a ] = Toast . _jQueryInterface ;
jQuery . fn [ NAME$a ] . Constructor = Toast ;
2015-08-15 19:19:11 +00:00
2019-03-01 16:31:34 +00:00
jQuery . fn [ NAME$a ] . noConflict = function ( ) {
jQuery . fn [ NAME$a ] = JQUERY _NO _CONFLICT$a ;
return Toast . _jQueryInterface ;
} ;
}
2016-10-10 00:26:51 +00:00
2018-03-31 20:59:37 +00:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-11 15:13:30 +00:00
* Bootstrap ( v4 . 3.1 ) : index . umd . js
2018-03-31 20:59:37 +00:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2019-03-11 15:13:30 +00: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 04:05:12 +00:00
2019-03-11 15:13:30 +00:00
return index _umd ;
2017-09-06 04:05:12 +00:00
2019-01-04 16:29:45 +00:00
} ) ) ;
2017-10-19 07:17:08 +00:00
//# sourceMappingURL=bootstrap.js.map