2018-11-13 07:41:12 +01:00
/ * !
2020-11-11 18:07:37 +01:00
* Bootstrap tooltip . js v5 . 0.0 - alpha3 ( https : //getbootstrap.com/)
2020-03-28 11:29:08 +01:00
* Copyright 2011 - 2020 The Bootstrap Authors ( https : //github.com/twbs/bootstrap/graphs/contributors)
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2018-11-13 07:41:12 +01:00
* /
2018-07-24 02:51:14 +02:00
( function ( global , factory ) {
2019-10-08 08:39:10 +02:00
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( require ( './dom/data.js' ) , require ( './dom/event-handler.js' ) , require ( './dom/manipulator.js' ) , require ( 'popper.js' ) , require ( './dom/selector-engine.js' ) ) :
2020-12-03 15:18:59 +01:00
typeof define === 'function' && define . amd ? define ( [ './dom/data' , './dom/event-handler' , './dom/manipulator' , 'popper.js' , './dom/selector-engine' ] , factory ) :
2020-09-14 17:12:06 +02:00
( global = typeof globalThis !== 'undefined' ? globalThis : global || self , global . Tooltip = factory ( global . Data , global . EventHandler , global . Manipulator , global . Popper , global . SelectorEngine ) ) ;
2019-11-08 09:11:23 +01:00
} ( this , ( function ( Data , EventHandler , Manipulator , Popper , SelectorEngine ) { 'use strict' ;
2019-03-01 17:31:34 +01:00
2020-09-14 17:12:06 +02:00
function _interopDefaultLegacy ( e ) { return e && typeof e === 'object' && 'default' in e ? e : { 'default' : e } ; }
var Data _ _default = /*#__PURE__*/ _interopDefaultLegacy ( Data ) ;
var EventHandler _ _default = /*#__PURE__*/ _interopDefaultLegacy ( EventHandler ) ;
var Manipulator _ _default = /*#__PURE__*/ _interopDefaultLegacy ( Manipulator ) ;
var Popper _ _default = /*#__PURE__*/ _interopDefaultLegacy ( Popper ) ;
var SelectorEngine _ _default = /*#__PURE__*/ _interopDefaultLegacy ( SelectorEngine ) ;
2018-07-24 02:51:14 +02:00
2019-02-13 17:01:40 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* Bootstrap ( v5 . 0.0 - alpha3 ) : util / index . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2019-03-01 17:31:34 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var MAX _UID = 1000000 ;
var MILLISECONDS _MULTIPLIER = 1000 ;
2019-08-27 15:03:21 +02:00
var TRANSITION _END = 'transitionend' ; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2019-03-01 17:31:34 +01:00
var toType = function toType ( obj ) {
2020-03-28 11:29:08 +01:00
if ( obj === null || obj === undefined ) {
return "" + obj ;
}
2019-03-01 17:31:34 +01:00
return { } . toString . call ( obj ) . match ( /\s([a-z]+)/i ) [ 1 ] . toLowerCase ( ) ;
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var getUID = function getUID ( prefix ) {
do {
2020-06-14 00:40:28 +02:00
prefix += Math . floor ( Math . random ( ) * MAX _UID ) ;
2019-03-01 17:31:34 +01:00
} while ( document . getElementById ( prefix ) ) ;
return prefix ;
} ;
var getTransitionDurationFromElement = function getTransitionDurationFromElement ( element ) {
if ( ! element ) {
return 0 ;
} // Get transition-duration of the element
var _window$getComputedSt = window . getComputedStyle ( element ) ,
transitionDuration = _window$getComputedSt . transitionDuration ,
transitionDelay = _window$getComputedSt . transitionDelay ;
2020-11-23 14:17:16 +01:00
var floatTransitionDuration = Number . parseFloat ( transitionDuration ) ;
var floatTransitionDelay = Number . parseFloat ( transitionDelay ) ; // Return 0 if element or transition duration is not found
2019-03-01 17:31:34 +01:00
if ( ! floatTransitionDuration && ! floatTransitionDelay ) {
return 0 ;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration . split ( ',' ) [ 0 ] ;
transitionDelay = transitionDelay . split ( ',' ) [ 0 ] ;
2020-11-23 14:17:16 +01:00
return ( Number . parseFloat ( transitionDuration ) + Number . parseFloat ( transitionDelay ) ) * MILLISECONDS _MULTIPLIER ;
2019-03-01 17:31:34 +01:00
} ;
var triggerTransitionEnd = function triggerTransitionEnd ( element ) {
2020-03-28 11:29:08 +01:00
element . dispatchEvent ( new Event ( TRANSITION _END ) ) ;
2019-03-01 17:31:34 +01:00
} ;
var isElement = function isElement ( obj ) {
return ( obj [ 0 ] || obj ) . nodeType ;
} ;
var emulateTransitionEnd = function emulateTransitionEnd ( element , duration ) {
var called = false ;
var durationPadding = 5 ;
var emulatedDuration = duration + durationPadding ;
function listener ( ) {
called = true ;
element . removeEventListener ( TRANSITION _END , listener ) ;
}
element . addEventListener ( TRANSITION _END , listener ) ;
setTimeout ( function ( ) {
if ( ! called ) {
triggerTransitionEnd ( element ) ;
}
} , 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 findShadowRoot = function findShadowRoot ( element ) {
if ( ! document . documentElement . attachShadow ) {
return null ;
} // Can find the shadow root otherwise it'll return the document
if ( typeof element . getRootNode === 'function' ) {
var root = element . getRootNode ( ) ;
return root instanceof ShadowRoot ? root : null ;
}
if ( element instanceof ShadowRoot ) {
return element ;
} // when we don't find a shadow root
if ( ! element . parentNode ) {
return null ;
}
return findShadowRoot ( element . parentNode ) ;
2019-10-08 08:39:10 +02:00
} ;
2019-03-01 17:31:34 +01:00
var noop = function noop ( ) {
return function ( ) { } ;
} ;
2019-08-27 15:03:21 +02:00
var getjQuery = function getjQuery ( ) {
var _window = window ,
jQuery = _window . jQuery ;
2020-11-23 14:17:16 +01:00
if ( jQuery && ! document . body . hasAttribute ( 'data-bs-no-jquery' ) ) {
2019-08-27 15:03:21 +02:00
return jQuery ;
}
return null ;
} ;
2020-11-11 18:07:37 +01:00
var onDOMContentLoaded = function onDOMContentLoaded ( callback ) {
if ( document . readyState === 'loading' ) {
document . addEventListener ( 'DOMContentLoaded' , callback ) ;
} else {
callback ( ) ;
}
} ;
2020-12-03 14:08:31 +01:00
var isRTL = document . documentElement . dir === 'rtl' ;
2019-03-01 17:31:34 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* Bootstrap ( v5 . 0.0 - alpha3 ) : util / sanitizer . js
2020-06-16 20:50:01 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
2019-02-13 17:01:40 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-11-23 14:17:16 +01:00
var uriAttrs = new Set ( [ 'background' , 'cite' , 'href' , 'itemtype' , 'longdesc' , 'poster' , 'src' , 'xlink:href' ] ) ;
2019-02-13 17:01:40 +01:00
var ARIA _ATTRIBUTE _PATTERN = /^aria-[\w-]*$/i ;
2019-03-01 17:31:34 +01:00
/ * *
* A pattern that recognizes a commonly useful subset of URLs that are safe .
*
* Shoutout to Angular 7 https : //github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
* /
2020-03-28 11:29:08 +01:00
var SAFE _URL _PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi ;
2019-03-01 17:31:34 +01:00
/ * *
* A pattern that matches safe data URLs . Only matches image , video and audio types .
*
* Shoutout to Angular 7 https : //github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
* /
2020-03-28 11:29:08 +01:00
var DATA _URL _PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i ;
2019-03-01 17:31:34 +01:00
var allowedAttribute = function allowedAttribute ( attr , allowedAttributeList ) {
var attrName = attr . nodeName . toLowerCase ( ) ;
2020-11-23 14:17:16 +01:00
if ( allowedAttributeList . includes ( attrName ) ) {
if ( uriAttrs . has ( attrName ) ) {
2020-06-14 00:40:28 +02:00
return Boolean ( attr . nodeValue . match ( SAFE _URL _PATTERN ) || attr . nodeValue . match ( DATA _URL _PATTERN ) ) ;
2019-03-01 17:31:34 +01:00
}
return true ;
}
var regExp = allowedAttributeList . filter ( function ( attrRegex ) {
return attrRegex instanceof RegExp ;
} ) ; // Check if a regular expression validates the attribute.
2020-03-28 11:29:08 +01:00
for ( var i = 0 , len = regExp . length ; i < len ; i ++ ) {
2020-06-14 00:40:28 +02:00
if ( attrName . match ( regExp [ i ] ) ) {
2019-03-01 17:31:34 +01:00
return true ;
}
}
return false ;
} ;
2020-09-14 17:12:06 +02:00
var DefaultAllowlist = {
2019-02-13 17:01:40 +01:00
// Global attributes allowed on any supplied element below.
'*' : [ 'class' , 'dir' , 'id' , 'lang' , 'role' , ARIA _ATTRIBUTE _PATTERN ] ,
a : [ 'target' , 'href' , 'title' , 'rel' ] ,
area : [ ] ,
b : [ ] ,
br : [ ] ,
col : [ ] ,
code : [ ] ,
div : [ ] ,
em : [ ] ,
hr : [ ] ,
h1 : [ ] ,
h2 : [ ] ,
h3 : [ ] ,
h4 : [ ] ,
h5 : [ ] ,
h6 : [ ] ,
i : [ ] ,
2020-03-28 11:29:08 +01:00
img : [ 'src' , 'srcset' , 'alt' , 'title' , 'width' , 'height' ] ,
2019-02-13 17:01:40 +01:00
li : [ ] ,
ol : [ ] ,
p : [ ] ,
pre : [ ] ,
s : [ ] ,
small : [ ] ,
span : [ ] ,
sub : [ ] ,
sup : [ ] ,
strong : [ ] ,
u : [ ] ,
ul : [ ]
} ;
2020-09-14 17:12:06 +02:00
function sanitizeHtml ( unsafeHtml , allowList , sanitizeFn ) {
2020-03-28 11:29:08 +01:00
var _ref ;
2019-03-01 17:31:34 +01:00
if ( ! unsafeHtml . length ) {
2019-02-13 17:01:40 +01:00
return unsafeHtml ;
}
if ( sanitizeFn && typeof sanitizeFn === 'function' ) {
return sanitizeFn ( unsafeHtml ) ;
}
var domParser = new window . DOMParser ( ) ;
var createdDocument = domParser . parseFromString ( unsafeHtml , 'text/html' ) ;
2020-09-14 17:12:06 +02:00
var allowlistKeys = Object . keys ( allowList ) ;
2020-03-28 11:29:08 +01:00
var elements = ( _ref = [ ] ) . concat . apply ( _ref , createdDocument . body . querySelectorAll ( '*' ) ) ;
2019-02-13 17:01:40 +01:00
var _loop = function _loop ( i , len ) {
2020-03-28 11:29:08 +01:00
var _ref2 ;
2019-02-13 17:01:40 +01:00
var el = elements [ i ] ;
var elName = el . nodeName . toLowerCase ( ) ;
2020-11-23 14:17:16 +01:00
if ( ! allowlistKeys . includes ( elName ) ) {
2019-02-13 17:01:40 +01:00
el . parentNode . removeChild ( el ) ;
return "continue" ;
}
2020-03-28 11:29:08 +01:00
var attributeList = ( _ref2 = [ ] ) . concat . apply ( _ref2 , el . attributes ) ;
2020-09-14 17:12:06 +02:00
var allowedAttributes = [ ] . concat ( allowList [ '*' ] || [ ] , allowList [ elName ] || [ ] ) ;
2019-02-13 17:01:40 +01:00
attributeList . forEach ( function ( attr ) {
2020-09-14 17:12:06 +02:00
if ( ! allowedAttribute ( attr , allowedAttributes ) ) {
2019-02-13 17:01:40 +01:00
el . removeAttribute ( attr . nodeName ) ;
}
} ) ;
} ;
for ( var i = 0 , len = elements . length ; i < len ; i ++ ) {
2019-07-24 08:13:50 +02:00
var _ret = _loop ( i ) ;
2019-02-13 17:01:40 +01:00
if ( _ret === "continue" ) continue ;
}
return createdDocument . body . innerHTML ;
}
2020-06-14 00:40:28 +02:00
function _defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } }
function _createClass ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties ( Constructor , staticProps ) ; return Constructor ; }
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2020-11-11 18:07:37 +01:00
var VERSION = '5.0.0-alpha3' ;
2020-12-03 15:18:59 +01:00
var BaseComponent = /*#__PURE__*/ function ( ) {
function BaseComponent ( element ) {
if ( ! element ) {
return ;
}
this . _element = element ;
Data _ _default [ 'default' ] . setData ( element , this . constructor . DATA _KEY , this ) ;
}
var _proto = BaseComponent . prototype ;
_proto . dispose = function dispose ( ) {
Data _ _default [ 'default' ] . removeData ( this . _element , this . constructor . DATA _KEY ) ;
this . _element = null ;
}
/** Static */
;
BaseComponent . getInstance = function getInstance ( element ) {
return Data _ _default [ 'default' ] . getData ( element , this . DATA _KEY ) ;
} ;
_createClass ( BaseComponent , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION ;
}
} ] ) ;
return BaseComponent ;
} ( ) ;
function _extends ( ) { _extends = Object . assign || function ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] ; for ( var key in source ) { if ( Object . prototype . hasOwnProperty . call ( source , key ) ) { target [ key ] = source [ key ] ; } } } return target ; } ; return _extends . apply ( this , arguments ) ; }
function _defineProperties$1 ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } }
function _createClass$1 ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties$1 ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties$1 ( Constructor , staticProps ) ; return Constructor ; }
function _inheritsLoose ( subClass , superClass ) { subClass . prototype = Object . create ( superClass . prototype ) ; subClass . prototype . constructor = subClass ; subClass . _ _proto _ _ = superClass ; }
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'tooltip' ;
2018-11-13 07:41:12 +01:00
var DATA _KEY = 'bs.tooltip' ;
var EVENT _KEY = "." + DATA _KEY ;
var CLASS _PREFIX = 'bs-tooltip' ;
var BSCLS _PREFIX _REGEX = new RegExp ( "(^|\\s)" + CLASS _PREFIX + "\\S+" , 'g' ) ;
2020-11-23 14:17:16 +01:00
var DISALLOWED _ATTRIBUTES = new Set ( [ 'sanitize' , 'allowList' , 'sanitizeFn' ] ) ;
2018-11-13 07:41:12 +01:00
var DefaultType = {
animation : 'boolean' ,
template : 'string' ,
title : '(string|element|function)' ,
trigger : 'string' ,
delay : '(number|object)' ,
html : 'boolean' ,
selector : '(string|boolean)' ,
placement : '(string|function)' ,
2019-02-11 20:15:34 +01:00
offset : '(number|string|function)' ,
2018-11-13 07:41:12 +01:00
container : '(string|element|boolean)' ,
fallbackPlacement : '(string|array)' ,
2019-02-13 17:01:40 +01:00
boundary : '(string|element)' ,
2020-12-03 15:18:59 +01:00
customClass : '(string|function)' ,
2019-02-13 17:01:40 +01:00
sanitize : 'boolean' ,
sanitizeFn : '(null|function)' ,
2020-09-14 17:12:06 +02:00
allowList : 'object' ,
2019-08-27 15:03:21 +02:00
popperConfig : '(null|object)'
2018-11-13 07:41:12 +01:00
} ;
var AttachmentMap = {
AUTO : 'auto' ,
TOP : 'top' ,
2020-12-03 14:08:31 +01:00
RIGHT : isRTL ? 'left' : 'right' ,
2018-11-13 07:41:12 +01:00
BOTTOM : 'bottom' ,
2020-12-03 14:08:31 +01:00
LEFT : isRTL ? 'right' : 'left'
2018-11-13 07:41:12 +01:00
} ;
var Default = {
animation : true ,
2020-12-03 15:18:59 +01:00
template : '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>' ,
2018-11-13 07:41:12 +01:00
trigger : 'hover focus' ,
title : '' ,
delay : 0 ,
html : false ,
selector : false ,
placement : 'top' ,
offset : 0 ,
container : false ,
fallbackPlacement : 'flip' ,
2019-02-13 17:01:40 +01:00
boundary : 'scrollParent' ,
2020-12-03 15:18:59 +01:00
customClass : '' ,
2019-02-13 17:01:40 +01:00
sanitize : true ,
sanitizeFn : null ,
2020-09-14 17:12:06 +02:00
allowList : DefaultAllowlist ,
2019-08-27 15:03:21 +02:00
popperConfig : null
2018-11-13 07:41:12 +01:00
} ;
2020-03-28 11:29:08 +01:00
var Event$1 = {
2018-11-13 07:41:12 +01:00
HIDE : "hide" + EVENT _KEY ,
HIDDEN : "hidden" + EVENT _KEY ,
SHOW : "show" + EVENT _KEY ,
SHOWN : "shown" + EVENT _KEY ,
INSERTED : "inserted" + EVENT _KEY ,
CLICK : "click" + EVENT _KEY ,
FOCUSIN : "focusin" + EVENT _KEY ,
FOCUSOUT : "focusout" + EVENT _KEY ,
MOUSEENTER : "mouseenter" + EVENT _KEY ,
MOUSELEAVE : "mouseleave" + EVENT _KEY
} ;
2020-03-28 11:29:08 +01:00
var CLASS _NAME _FADE = 'fade' ;
var CLASS _NAME _MODAL = 'modal' ;
var CLASS _NAME _SHOW = 'show' ;
var HOVER _STATE _SHOW = 'show' ;
var HOVER _STATE _OUT = 'out' ;
var SELECTOR _TOOLTIP _INNER = '.tooltip-inner' ;
var TRIGGER _HOVER = 'hover' ;
var TRIGGER _FOCUS = 'focus' ;
var TRIGGER _CLICK = 'click' ;
var TRIGGER _MANUAL = 'manual' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
var Tooltip = /*#__PURE__*/ function ( _BaseComponent ) {
_inheritsLoose ( Tooltip , _BaseComponent ) ;
2018-11-13 07:41:12 +01:00
function Tooltip ( element , config ) {
2020-12-03 15:18:59 +01:00
var _this ;
2020-09-14 17:12:06 +02:00
if ( typeof Popper _ _default [ 'default' ] === 'undefined' ) {
2020-11-23 14:17:16 +01:00
throw new TypeError ( 'Bootstrap\'s tooltips require Popper (https://popper.js.org)' ) ;
2020-12-03 15:18:59 +01:00
}
2017-10-30 00:19:14 +01:00
2020-12-03 15:18:59 +01:00
_this = _BaseComponent . call ( this , element ) || this ; // private
2017-10-30 00:19:14 +01:00
2020-12-03 15:18:59 +01:00
_this . _isEnabled = true ;
_this . _timeout = 0 ;
_this . _hoverState = '' ;
_this . _activeTrigger = { } ;
_this . _popper = null ; // Protected
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
_this . config = _this . _getConfig ( config ) ;
_this . tip = null ;
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
_this . _setListeners ( ) ;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this ;
2018-11-13 07:41:12 +01:00
} // Getters
2015-05-12 08:32:37 +02:00
2015-08-13 06:12:03 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Tooltip . prototype ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . enable = function enable ( ) {
this . _isEnabled = true ;
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . disable = function disable ( ) {
this . _isEnabled = false ;
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . toggleEnabled = function toggleEnabled ( ) {
this . _isEnabled = ! this . _isEnabled ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . toggle = function toggle ( event ) {
if ( ! this . _isEnabled ) {
return ;
}
2015-08-19 05:28:28 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
var dataKey = this . constructor . DATA _KEY ;
2020-09-14 17:12:06 +02:00
var context = Data _ _default [ 'default' ] . getData ( event . delegateTarget , dataKey ) ;
2015-08-19 05:28:28 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
2020-09-14 17:12:06 +02:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data _ _default [ 'default' ] . setData ( event . delegateTarget , dataKey , context ) ;
2017-09-30 23:28:03 +02:00
}
2015-05-12 23:28:11 +02:00
2018-11-13 07:41:12 +01:00
context . _activeTrigger . click = ! context . _activeTrigger . click ;
2015-05-12 23:28:11 +02:00
2018-11-13 07:41:12 +01:00
if ( context . _isWithActiveTrigger ( ) ) {
context . _enter ( null , context ) ;
2016-10-10 02:26:51 +02:00
} else {
2018-11-13 07:41:12 +01:00
context . _leave ( null , context ) ;
}
} else {
2020-03-28 11:29:08 +01:00
if ( this . getTipElement ( ) . classList . contains ( CLASS _NAME _SHOW ) ) {
2018-11-13 07:41:12 +01:00
this . _leave ( null , this ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
return ;
2018-07-24 02:51:14 +02:00
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
this . _enter ( null , this ) ;
}
} ;
_proto . dispose = function dispose ( ) {
clearTimeout ( this . _timeout ) ;
2020-12-03 15:18:59 +01:00
EventHandler _ _default [ 'default' ] . off ( this . _element , this . constructor . EVENT _KEY ) ;
EventHandler _ _default [ 'default' ] . off ( this . _element . closest ( "." + CLASS _NAME _MODAL ) , 'hide.bs.modal' , this . _hideModalHandler ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( this . tip ) {
2019-03-01 17:31:34 +01:00
this . tip . parentNode . removeChild ( this . tip ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
this . _isEnabled = null ;
this . _timeout = null ;
this . _hoverState = null ;
this . _activeTrigger = null ;
2015-05-12 08:32:37 +02:00
2019-08-27 15:03:21 +02:00
if ( this . _popper ) {
2018-11-13 07:41:12 +01:00
this . _popper . destroy ( ) ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
this . _popper = null ;
this . config = null ;
this . tip = null ;
2020-12-03 15:18:59 +01:00
_BaseComponent . prototype . dispose . call ( this ) ;
2018-11-13 07:41:12 +01:00
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . show = function show ( ) {
2020-12-03 15:18:59 +01:00
var _this2 = this ;
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
if ( this . _element . style . display === 'none' ) {
2018-11-13 07:41:12 +01:00
throw new Error ( 'Please use show on visible elements' ) ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( this . isWithContent ( ) && this . _isEnabled ) {
2020-12-03 15:18:59 +01:00
var showEvent = EventHandler _ _default [ 'default' ] . trigger ( this . _element , this . constructor . Event . SHOW ) ;
var shadowRoot = findShadowRoot ( this . _element ) ;
var isInTheDom = shadowRoot === null ? this . _element . ownerDocument . documentElement . contains ( this . _element ) : shadowRoot . contains ( this . _element ) ;
2015-05-12 08:32:37 +02:00
2019-03-01 17:31:34 +01:00
if ( showEvent . defaultPrevented || ! isInTheDom ) {
2018-11-13 07:41:12 +01:00
return ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
var tip = this . getTipElement ( ) ;
2019-03-01 17:31:34 +01:00
var tipId = getUID ( this . constructor . NAME ) ;
2018-11-13 07:41:12 +01:00
tip . setAttribute ( 'id' , tipId ) ;
2020-12-03 15:18:59 +01:00
this . _element . setAttribute ( 'aria-describedby' , tipId ) ;
2018-11-13 07:41:12 +01:00
this . setContent ( ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( this . config . animation ) {
2020-03-28 11:29:08 +01:00
tip . classList . add ( CLASS _NAME _FADE ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
var placement = typeof this . config . placement === 'function' ? this . config . placement . call ( this , tip , this . _element ) : this . config . placement ;
2016-11-27 04:17:23 +01:00
2018-11-13 07:41:12 +01:00
var attachment = this . _getAttachment ( placement ) ;
2017-04-02 04:18:29 +02:00
2019-07-24 08:13:50 +02:00
this . _addAttachmentClass ( attachment ) ;
2018-12-16 00:13:22 +01:00
var container = this . _getContainer ( ) ;
2020-09-14 17:12:06 +02:00
Data _ _default [ 'default' ] . setData ( tip , this . constructor . DATA _KEY , this ) ;
2015-08-19 05:28:28 +02:00
2020-12-03 15:18:59 +01:00
if ( ! this . _element . ownerDocument . documentElement . contains ( this . tip ) ) {
2019-03-01 17:31:34 +01:00
container . appendChild ( tip ) ;
2018-11-13 07:41:12 +01:00
}
2016-10-10 02:26:51 +02:00
2020-12-03 15:18:59 +01:00
EventHandler _ _default [ 'default' ] . trigger ( this . _element , this . constructor . Event . INSERTED ) ;
this . _popper = new Popper _ _default [ 'default' ] ( this . _element , tip , this . _getPopperConfig ( attachment ) ) ;
tip . classList . add ( CLASS _NAME _SHOW ) ;
var customClass = typeof this . config . customClass === 'function' ? this . config . customClass ( ) : this . config . customClass ;
if ( customClass ) {
var _tip$classList ;
( _tip$classList = tip . classList ) . add . apply ( _tip$classList , customClass . split ( ' ' ) ) ;
} // If this is a touch-enabled device we add extra
2018-11-13 07:41:12 +01: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
2016-10-10 02:26:51 +02:00
2020-12-03 15:18:59 +01:00
2018-11-13 07:41:12 +01:00
if ( 'ontouchstart' in document . documentElement ) {
2020-03-28 11:29:08 +01:00
var _ref ;
( _ref = [ ] ) . concat . apply ( _ref , document . body . children ) . forEach ( function ( element ) {
2020-09-14 17:12:06 +02:00
EventHandler _ _default [ 'default' ] . on ( element , 'mouseover' , noop ( ) ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-04-22 08:58:09 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
if ( _this2 . config . animation ) {
_this2 . _fixTransition ( ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
var prevHoverState = _this2 . _hoverState ;
_this2 . _hoverState = null ;
EventHandler _ _default [ 'default' ] . trigger ( _this2 . _element , _this2 . constructor . Event . SHOWN ) ;
2015-05-12 08:32:37 +02:00
2020-03-28 11:29:08 +01:00
if ( prevHoverState === HOVER _STATE _OUT ) {
2020-12-03 15:18:59 +01:00
_this2 . _leave ( null , _this2 ) ;
2015-05-12 08:32:37 +02:00
}
2018-11-13 07:41:12 +01:00
} ;
2020-03-28 11:29:08 +01:00
if ( this . tip . classList . contains ( CLASS _NAME _FADE ) ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . tip ) ;
2020-09-14 17:12:06 +02:00
EventHandler _ _default [ 'default' ] . one ( this . tip , TRANSITION _END , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( this . tip , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
complete ( ) ;
2015-05-12 08:32:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
} ;
2015-05-12 08:32:37 +02:00
2019-07-24 08:13:50 +02:00
_proto . hide = function hide ( ) {
2020-12-03 15:18:59 +01:00
var _this3 = this ;
2015-05-12 08:32:37 +02:00
2020-09-29 17:33:00 +02:00
if ( ! this . _popper ) {
return ;
}
2018-11-13 07:41:12 +01:00
var tip = this . getTipElement ( ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2020-12-03 15:18:59 +01:00
if ( _this3 . _hoverState !== HOVER _STATE _SHOW && tip . parentNode ) {
2018-11-13 07:41:12 +01:00
tip . parentNode . removeChild ( tip ) ;
}
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
_this3 . _cleanTipClass ( ) ;
2016-10-10 02:26:51 +02:00
2020-12-03 15:18:59 +01:00
_this3 . _element . removeAttribute ( 'aria-describedby' ) ;
2015-05-12 08:32:37 +02:00
2020-12-03 15:18:59 +01:00
EventHandler _ _default [ 'default' ] . trigger ( _this3 . _element , _this3 . constructor . Event . HIDDEN ) ;
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
_this3 . _popper . destroy ( ) ;
2018-11-13 07:41:12 +01:00
} ;
2016-10-10 02:26:51 +02:00
2020-12-03 15:18:59 +01:00
var hideEvent = EventHandler _ _default [ 'default' ] . trigger ( this . _element , this . constructor . Event . HIDE ) ;
2016-10-10 02:26:51 +02:00
2019-03-01 17:31:34 +01:00
if ( hideEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
tip . classList . remove ( CLASS _NAME _SHOW ) ; // If this is a touch-enabled device we remove the extra
2018-11-13 07:41:12 +01:00
// empty mouseover listeners we added for iOS support
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( 'ontouchstart' in document . documentElement ) {
2020-03-28 11:29:08 +01:00
var _ref2 ;
( _ref2 = [ ] ) . concat . apply ( _ref2 , document . body . children ) . forEach ( function ( element ) {
2020-09-14 17:12:06 +02:00
return EventHandler _ _default [ 'default' ] . off ( element , 'mouseover' , noop ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
this . _activeTrigger [ TRIGGER _CLICK ] = false ;
this . _activeTrigger [ TRIGGER _FOCUS ] = false ;
this . _activeTrigger [ TRIGGER _HOVER ] = false ;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
if ( this . tip . classList . contains ( CLASS _NAME _FADE ) ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( tip ) ;
2020-09-14 17:12:06 +02:00
EventHandler _ _default [ 'default' ] . one ( tip , TRANSITION _END , complete ) ;
2019-03-01 17:31:34 +01:00
emulateTransitionEnd ( tip , transitionDuration ) ;
2018-11-13 07:41:12 +01:00
} else {
complete ( ) ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this . _hoverState = '' ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . update = function update ( ) {
if ( this . _popper !== null ) {
this . _popper . scheduleUpdate ( ) ;
}
2019-01-04 17:29:45 +01:00
} // Protected
;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . isWithContent = function isWithContent ( ) {
return Boolean ( this . getTitle ( ) ) ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . getTipElement = function getTipElement ( ) {
2019-03-01 17:31:34 +01:00
if ( this . tip ) {
return this . tip ;
}
var element = document . createElement ( 'div' ) ;
element . innerHTML = this . config . template ;
this . tip = element . children [ 0 ] ;
2018-11-13 07:41:12 +01:00
return this . tip ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . setContent = function setContent ( ) {
var tip = this . getTipElement ( ) ;
2020-09-14 17:12:06 +02:00
this . setElementContent ( SelectorEngine _ _default [ 'default' ] . findOne ( SELECTOR _TOOLTIP _INNER , tip ) , this . getTitle ( ) ) ;
2020-05-13 20:53:43 +02:00
tip . classList . remove ( CLASS _NAME _FADE , CLASS _NAME _SHOW ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
_proto . setElementContent = function setElementContent ( element , content ) {
if ( element === null ) {
return ;
}
2019-07-24 08:13:50 +02:00
if ( typeof content === 'object' && isElement ( content ) ) {
2019-03-01 17:31:34 +01:00
if ( content . jquery ) {
content = content [ 0 ] ;
} // content is a DOM node or a jQuery
2019-02-13 17:01:40 +01:00
if ( this . config . html ) {
2019-03-01 17:31:34 +01:00
if ( content . parentNode !== element ) {
element . innerHTML = '' ;
element . appendChild ( content ) ;
2015-08-29 23:03:55 +02:00
}
} else {
2020-05-13 20:53:43 +02:00
element . textContent = content . textContent ;
2015-08-29 23:03:55 +02:00
}
2019-02-13 17:01:40 +01:00
return ;
}
if ( this . config . html ) {
if ( this . config . sanitize ) {
2020-09-14 17:12:06 +02:00
content = sanitizeHtml ( content , this . config . allowList , this . config . sanitizeFn ) ;
2019-02-13 17:01:40 +01:00
}
2019-03-01 17:31:34 +01:00
element . innerHTML = content ;
2018-11-13 07:41:12 +01:00
} else {
2020-05-13 20:53:43 +02:00
element . textContent = content ;
2018-11-13 07:41:12 +01:00
}
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . getTitle = function getTitle ( ) {
2020-12-03 15:18:59 +01:00
var title = this . _element . getAttribute ( 'data-bs-original-title' ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( ! title ) {
2020-12-03 15:18:59 +01:00
title = typeof this . config . title === 'function' ? this . config . title . call ( this . _element ) : this . config . title ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
return title ;
2020-12-03 14:08:31 +01:00
} ;
_proto . updateAttachment = function updateAttachment ( attachment ) {
if ( attachment === 'right' ) {
return 'end' ;
}
if ( attachment === 'left' ) {
return 'start' ;
}
return attachment ;
2019-01-04 17:29:45 +01:00
} // Private
;
2016-10-10 02:26:51 +02:00
2019-08-27 15:03:21 +02:00
_proto . _getPopperConfig = function _getPopperConfig ( attachment ) {
2020-12-03 15:18:59 +01:00
var _this4 = this ;
2019-08-27 15:03:21 +02:00
var defaultBsConfig = {
placement : attachment ,
modifiers : {
offset : this . _getOffset ( ) ,
flip : {
behavior : this . config . fallbackPlacement
} ,
arrow : {
element : "." + this . constructor . NAME + "-arrow"
} ,
preventOverflow : {
boundariesElement : this . config . boundary
}
} ,
onCreate : function onCreate ( data ) {
if ( data . originalPlacement !== data . placement ) {
2020-12-03 15:18:59 +01:00
_this4 . _handlePopperPlacementChange ( data ) ;
2019-08-27 15:03:21 +02:00
}
} ,
onUpdate : function onUpdate ( data ) {
2020-12-03 15:18:59 +01:00
return _this4 . _handlePopperPlacementChange ( data ) ;
2019-08-27 15:03:21 +02:00
}
} ;
2020-09-14 17:12:06 +02:00
return _extends ( { } , defaultBsConfig , this . config . popperConfig ) ;
2019-08-27 15:03:21 +02:00
} ;
2019-07-24 08:13:50 +02:00
_proto . _addAttachmentClass = function _addAttachmentClass ( attachment ) {
2020-12-03 14:08:31 +01:00
this . getTipElement ( ) . classList . add ( CLASS _PREFIX + "-" + this . updateAttachment ( attachment ) ) ;
2019-07-24 08:13:50 +02:00
} ;
2019-02-11 20:15:34 +01:00
_proto . _getOffset = function _getOffset ( ) {
2020-12-03 15:18:59 +01:00
var _this5 = this ;
2019-02-11 20:15:34 +01:00
var offset = { } ;
if ( typeof this . config . offset === 'function' ) {
offset . fn = function ( data ) {
2020-12-03 15:18:59 +01:00
data . offsets = _extends ( { } , data . offsets , _this5 . config . offset ( data . offsets , _this5 . _element ) || { } ) ;
2019-02-11 20:15:34 +01:00
return data ;
} ;
} else {
offset . offset = this . config . offset ;
}
return offset ;
} ;
2018-12-16 00:13:22 +01:00
_proto . _getContainer = function _getContainer ( ) {
if ( this . config . container === false ) {
return document . body ;
}
2019-03-01 17:31:34 +01:00
if ( isElement ( this . config . container ) ) {
return this . config . container ;
2018-12-16 00:13:22 +01:00
}
2020-09-14 17:12:06 +02:00
return SelectorEngine _ _default [ 'default' ] . findOne ( this . config . container ) ;
2018-12-16 00:13:22 +01:00
} ;
2018-11-13 07:41:12 +01:00
_proto . _getAttachment = function _getAttachment ( placement ) {
return AttachmentMap [ placement . toUpperCase ( ) ] ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _setListeners = function _setListeners ( ) {
2020-12-03 15:18:59 +01:00
var _this6 = this ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
var triggers = this . config . trigger . split ( ' ' ) ;
triggers . forEach ( function ( trigger ) {
if ( trigger === 'click' ) {
2020-12-03 15:18:59 +01:00
EventHandler _ _default [ 'default' ] . on ( _this6 . _element , _this6 . constructor . Event . CLICK , _this6 . config . selector , function ( event ) {
return _this6 . toggle ( event ) ;
2017-09-30 23:28:03 +02:00
} ) ;
2020-03-28 11:29:08 +01:00
} else if ( trigger !== TRIGGER _MANUAL ) {
2020-12-03 15:18:59 +01:00
var eventIn = trigger === TRIGGER _HOVER ? _this6 . constructor . Event . MOUSEENTER : _this6 . constructor . Event . FOCUSIN ;
var eventOut = trigger === TRIGGER _HOVER ? _this6 . constructor . Event . MOUSELEAVE : _this6 . constructor . Event . FOCUSOUT ;
EventHandler _ _default [ 'default' ] . on ( _this6 . _element , eventIn , _this6 . config . selector , function ( event ) {
return _this6 . _enter ( event ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2020-12-03 15:18:59 +01:00
EventHandler _ _default [ 'default' ] . on ( _this6 . _element , eventOut , _this6 . config . selector , function ( event ) {
return _this6 . _leave ( event ) ;
2017-09-06 06:05:12 +02:00
} ) ;
}
2018-11-13 07:41:12 +01:00
} ) ;
2019-07-12 23:56:26 +02:00
this . _hideModalHandler = function ( ) {
2020-12-03 15:18:59 +01:00
if ( _this6 . _element ) {
_this6 . hide ( ) ;
2018-11-13 07:41:12 +01:00
}
2019-07-12 23:56:26 +02:00
} ;
2020-12-03 15:18:59 +01:00
EventHandler _ _default [ 'default' ] . on ( this . _element . closest ( "." + CLASS _NAME _MODAL ) , 'hide.bs.modal' , this . _hideModalHandler ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . config . selector ) {
2020-09-14 17:12:06 +02:00
this . config = _extends ( { } , this . config , {
2018-11-13 07:41:12 +01:00
trigger : 'manual' ,
selector : ''
} ) ;
} else {
this . _fixTitle ( ) ;
}
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _fixTitle = function _fixTitle ( ) {
2020-12-03 15:18:59 +01:00
var title = this . _element . getAttribute ( 'title' ) ;
var originalTitleType = typeof this . _element . getAttribute ( 'data-bs-original-title' ) ;
2015-05-12 08:32:37 +02:00
2020-11-23 14:17:16 +01:00
if ( title || originalTitleType !== 'string' ) {
2020-12-03 15:18:59 +01:00
this . _element . setAttribute ( 'data-bs-original-title' , title || '' ) ;
if ( title && ! this . _element . getAttribute ( 'aria-label' ) && ! this . _element . textContent ) {
this . _element . setAttribute ( 'aria-label' , title ) ;
}
this . _element . setAttribute ( 'title' , '' ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _enter = function _enter ( event , context ) {
var dataKey = this . constructor . DATA _KEY ;
2020-09-14 17:12:06 +02:00
context = context || Data _ _default [ 'default' ] . getData ( event . delegateTarget , dataKey ) ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
2020-09-14 17:12:06 +02:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data _ _default [ 'default' ] . setData ( event . delegateTarget , dataKey , context ) ;
2018-11-13 07:41:12 +01:00
}
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
2020-03-28 11:29:08 +01:00
context . _activeTrigger [ event . type === 'focusin' ? TRIGGER _FOCUS : TRIGGER _HOVER ] = true ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2020-03-28 11:29:08 +01:00
if ( context . getTipElement ( ) . classList . contains ( CLASS _NAME _SHOW ) || context . _hoverState === HOVER _STATE _SHOW ) {
context . _hoverState = HOVER _STATE _SHOW ;
2018-11-13 07:41:12 +01:00
return ;
}
clearTimeout ( context . _timeout ) ;
2020-03-28 11:29:08 +01:00
context . _hoverState = HOVER _STATE _SHOW ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context . config . delay || ! context . config . delay . show ) {
context . show ( ) ;
return ;
}
context . _timeout = setTimeout ( function ( ) {
2020-03-28 11:29:08 +01:00
if ( context . _hoverState === HOVER _STATE _SHOW ) {
2015-05-12 08:32:37 +02:00
context . show ( ) ;
}
2018-11-13 07:41:12 +01:00
} , context . config . delay . show ) ;
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _leave = function _leave ( event , context ) {
var dataKey = this . constructor . DATA _KEY ;
2020-09-14 17:12:06 +02:00
context = context || Data _ _default [ 'default' ] . getData ( event . delegateTarget , dataKey ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
2020-09-14 17:12:06 +02:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data _ _default [ 'default' ] . setData ( event . delegateTarget , dataKey , context ) ;
2018-11-13 07:41:12 +01:00
}
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( event ) {
2020-03-28 11:29:08 +01:00
context . _activeTrigger [ event . type === 'focusout' ? TRIGGER _FOCUS : TRIGGER _HOVER ] = false ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( context . _isWithActiveTrigger ( ) ) {
return ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
clearTimeout ( context . _timeout ) ;
2020-03-28 11:29:08 +01:00
context . _hoverState = HOVER _STATE _OUT ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context . config . delay || ! context . config . delay . hide ) {
context . hide ( ) ;
return ;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
context . _timeout = setTimeout ( function ( ) {
2020-03-28 11:29:08 +01:00
if ( context . _hoverState === HOVER _STATE _OUT ) {
2017-09-30 23:28:03 +02:00
context . hide ( ) ;
2015-05-12 08:32:37 +02:00
}
2018-11-13 07:41:12 +01:00
} , context . config . delay . hide ) ;
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . _isWithActiveTrigger = function _isWithActiveTrigger ( ) {
for ( var trigger in this . _activeTrigger ) {
if ( this . _activeTrigger [ trigger ] ) {
return true ;
2017-09-30 23:28:03 +02:00
}
2018-11-13 07:41:12 +01:00
}
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
return false ;
} ;
2015-05-13 23:46:50 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-12-03 15:18:59 +01:00
var dataAttributes = Manipulator _ _default [ 'default' ] . getDataAttributes ( this . _element ) ;
2019-02-13 17:01:40 +01:00
Object . keys ( dataAttributes ) . forEach ( function ( dataAttr ) {
2020-11-23 14:17:16 +01:00
if ( DISALLOWED _ATTRIBUTES . has ( dataAttr ) ) {
2019-02-13 17:01:40 +01:00
delete dataAttributes [ dataAttr ] ;
}
} ) ;
2019-03-01 17:31:34 +01:00
if ( config && typeof config . container === 'object' && config . container . jquery ) {
config . container = config . container [ 0 ] ;
}
2020-09-14 17:12:06 +02:00
config = _extends ( { } , this . constructor . Default , dataAttributes , typeof config === 'object' && config ? config : { } ) ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config . delay === 'number' ) {
config . delay = {
show : config . delay ,
hide : config . delay
} ;
}
2017-04-02 04:18:29 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config . title === 'number' ) {
config . title = config . title . toString ( ) ;
}
2017-04-02 04:18:29 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config . content === 'number' ) {
config . content = config . content . toString ( ) ;
}
2016-10-10 02:26:51 +02:00
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME , config , this . constructor . DefaultType ) ;
2019-02-13 17:01:40 +01:00
if ( config . sanitize ) {
2020-09-14 17:12:06 +02:00
config . template = sanitizeHtml ( config . template , config . allowList , config . sanitizeFn ) ;
2019-02-13 17:01:40 +01:00
}
2018-11-13 07:41:12 +01:00
return config ;
} ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getDelegateConfig = function _getDelegateConfig ( ) {
var config = { } ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( this . config ) {
for ( var key in this . config ) {
if ( this . constructor . Default [ key ] !== this . config [ key ] ) {
config [ key ] = this . config [ key ] ;
2015-05-12 08:32:37 +02:00
}
}
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return config ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _cleanTipClass = function _cleanTipClass ( ) {
2019-03-01 17:31:34 +01:00
var tip = this . getTipElement ( ) ;
var tabClass = tip . getAttribute ( 'class' ) . match ( BSCLS _PREFIX _REGEX ) ;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
if ( tabClass !== null && tabClass . length > 0 ) {
2019-03-01 17:31:34 +01:00
tabClass . map ( function ( token ) {
return token . trim ( ) ;
} ) . forEach ( function ( tClass ) {
return tip . classList . remove ( tClass ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2018-07-12 06:42:55 +02:00
2018-11-13 07:41:12 +01:00
_proto . _handlePopperPlacementChange = function _handlePopperPlacementChange ( popperData ) {
2020-09-14 17:12:06 +02:00
this . tip = popperData . instance . popper ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this . _cleanTipClass ( ) ;
2017-09-30 23:28:03 +02:00
2019-07-24 08:13:50 +02:00
this . _addAttachmentClass ( this . _getAttachment ( popperData . placement ) ) ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _fixTransition = function _fixTransition ( ) {
var tip = this . getTipElement ( ) ;
var initConfigAnimation = this . config . animation ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( tip . getAttribute ( 'x-placement' ) !== null ) {
return ;
}
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
tip . classList . remove ( CLASS _NAME _FADE ) ;
2018-11-13 07:41:12 +01:00
this . config . animation = false ;
this . hide ( ) ;
this . show ( ) ;
this . config . animation = initConfigAnimation ;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Tooltip . jQueryInterface = function jQueryInterface ( config ) {
2018-11-13 07:41:12 +01:00
return this . each ( function ( ) {
2020-09-14 17:12:06 +02:00
var data = Data _ _default [ 'default' ] . getData ( this , DATA _KEY ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' && config ;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data && /dispose|hide/ . test ( config ) ) {
return ;
}
2018-07-24 02:51:14 +02:00
2018-11-13 07:41:12 +01:00
if ( ! data ) {
data = new Tooltip ( this , _config ) ;
}
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
data [ config ] ( ) ;
2018-07-24 02:51:14 +02:00
}
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2016-10-10 02:26:51 +02:00
2020-12-03 15:18:59 +01:00
_createClass$1 ( Tooltip , null , [ {
2018-11-13 07:41:12 +01:00
key : "Default" ,
get : function get ( ) {
return Default ;
}
} , {
key : "NAME" ,
get : function get ( ) {
return NAME ;
}
} , {
key : "DATA_KEY" ,
get : function get ( ) {
return DATA _KEY ;
}
} , {
key : "Event" ,
get : function get ( ) {
2020-03-28 11:29:08 +01:00
return Event$1 ;
2018-11-13 07:41:12 +01:00
}
} , {
key : "EVENT_KEY" ,
get : function get ( ) {
return EVENT _KEY ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType ;
}
} ] ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
return Tooltip ;
2020-12-03 15:18:59 +01:00
} ( BaseComponent ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-11-11 18:07:37 +01:00
* add . Tooltip to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2015-05-12 08:32:37 +02:00
2019-07-24 08:13:50 +02:00
2020-11-11 18:07:37 +01:00
onDOMContentLoaded ( function ( ) {
var $ = getjQuery ( ) ;
/* istanbul ignore if */
2017-09-30 23:28:03 +02:00
2020-11-11 18:07:37 +01:00
if ( $ ) {
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
$ . fn [ NAME ] = Tooltip . jQueryInterface ;
$ . fn [ NAME ] . Constructor = Tooltip ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Tooltip . jQueryInterface ;
} ;
}
} ) ;
2015-05-12 08:32:37 +02:00
return Tooltip ;
2018-07-24 02:51:14 +02:00
2019-11-08 09:11:23 +01:00
} ) ) ) ;
2018-07-24 02:51:14 +02:00
//# sourceMappingURL=tooltip.js.map