2018-11-13 07:41:12 +01:00
/ * !
2019-02-13 17:01:40 +01:00
* Bootstrap tooltip . js v4 . 3.1 ( https : //getbootstrap.com/)
2019-01-04 17:29:45 +01:00
* Copyright 2011 - 2019 The Bootstrap Authors ( https : //github.com/twbs/bootstrap/graphs/contributors)
2018-11-13 07:41:12 +01:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* /
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' ) ) :
typeof define === 'function' && define . amd ? define ( [ './dom/data.js' , './dom/event-handler.js' , './dom/manipulator.js' , 'popper.js' , './dom/selector-engine.js' ] , factory ) :
2019-03-01 17:31:34 +01:00
( global = global || self , global . Tooltip = factory ( global . Data , global . EventHandler , global . Manipulator , global . Popper , global . SelectorEngine ) ) ;
} ( this , function ( Data , EventHandler , Manipulator , Popper , SelectorEngine ) { 'use strict' ;
Data = Data && Data . hasOwnProperty ( 'default' ) ? Data [ 'default' ] : Data ;
EventHandler = EventHandler && EventHandler . hasOwnProperty ( 'default' ) ? EventHandler [ 'default' ] : EventHandler ;
Manipulator = Manipulator && Manipulator . hasOwnProperty ( 'default' ) ? Manipulator [ 'default' ] : Manipulator ;
2018-07-24 02:51:14 +02:00
Popper = Popper && Popper . hasOwnProperty ( 'default' ) ? Popper [ 'default' ] : Popper ;
2019-03-01 17:31:34 +01:00
SelectorEngine = SelectorEngine && SelectorEngine . hasOwnProperty ( 'default' ) ? SelectorEngine [ 'default' ] : SelectorEngine ;
2018-07-24 02:51:14 +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 ;
}
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 ;
}
return obj ;
}
2018-03-31 22:59:37 +02:00
2019-07-24 08:13:50 +02:00
function ownKeys ( object , enumerableOnly ) {
var keys = Object . keys ( object ) ;
if ( Object . getOwnPropertySymbols ) {
var symbols = Object . getOwnPropertySymbols ( object ) ;
if ( enumerableOnly ) symbols = symbols . filter ( function ( sym ) {
return Object . getOwnPropertyDescriptor ( object , sym ) . enumerable ;
} ) ;
keys . push . apply ( keys , symbols ) ;
}
return keys ;
}
function _objectSpread2 ( target ) {
2018-07-24 02:51:14 +02:00
for ( var i = 1 ; i < arguments . length ; i ++ ) {
var source = arguments [ i ] != null ? arguments [ i ] : { } ;
2019-07-24 08:13:50 +02:00
if ( i % 2 ) {
ownKeys ( source , true ) . forEach ( function ( key ) {
_defineProperty ( target , key , source [ key ] ) ;
} ) ;
} else if ( Object . getOwnPropertyDescriptors ) {
Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ;
} else {
ownKeys ( source ) . forEach ( function ( key ) {
Object . defineProperty ( target , key , Object . getOwnPropertyDescriptor ( source , key ) ) ;
} ) ;
2018-07-24 02:51:14 +02:00
}
}
2017-09-06 06:05:12 +02:00
2018-07-24 02:51:14 +02:00
return target ;
}
2015-05-12 08:32:37 +02:00
2019-02-13 17:01:40 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 17:31:34 +01:00
* Bootstrap ( v4 . 3.1 ) : util / index . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
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 ) {
return { } . toString . call ( obj ) . match ( /\s([a-z]+)/i ) [ 1 ] . toLowerCase ( ) ;
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var getUID = function getUID ( prefix ) {
do {
prefix += ~ ~ ( Math . random ( ) * MAX _UID ) ; // "~~" acts like a faster Math.floor() here
} 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 ;
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 13:47:52 +02:00
var evt = document . createEvent ( 'HTMLEvents' ) ;
evt . initEvent ( TRANSITION _END , true , true ) ;
element . dispatchEvent ( evt ) ;
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 makeArray = function makeArray ( nodeList ) {
if ( ! nodeList ) {
return [ ] ;
}
return [ ] . slice . call ( nodeList ) ;
} ;
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 ;
if ( jQuery && ! document . body . hasAttribute ( 'data-no-jquery' ) ) {
return jQuery ;
}
return null ;
} ;
2019-03-01 17:31:34 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 3.1 ) : util / sanitizer . js
2019-02-13 17:01:40 +01: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 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
* /
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 17:01:40 +01: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 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' ) ;
var whitelistKeys = Object . keys ( whiteList ) ;
2019-03-01 17:31:34 +01:00
var elements = makeArray ( createdDocument . body . querySelectorAll ( '*' ) ) ;
2019-02-13 17:01:40 +01:00
var _loop = function _loop ( i , len ) {
var el = elements [ i ] ;
var elName = el . nodeName . toLowerCase ( ) ;
2019-03-01 17:31:34 +01:00
if ( whitelistKeys . indexOf ( elName ) === - 1 ) {
2019-02-13 17:01:40 +01:00
el . parentNode . removeChild ( el ) ;
return "continue" ;
}
2019-03-01 17:31:34 +01:00
var attributeList = makeArray ( el . attributes ) ;
2019-02-13 17:01:40 +01: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 ++ ) {
2019-07-24 08:13:50 +02:00
var _ret = _loop ( i ) ;
2019-02-13 17:01:40 +01:00
if ( _ret === "continue" ) continue ;
}
return createdDocument . body . innerHTML ;
}
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'tooltip' ;
2019-02-13 17:01:40 +01:00
var VERSION = '4.3.1' ;
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' ) ;
2019-02-13 17:01:40 +01:00
var DISALLOWED _ATTRIBUTES = [ 'sanitize' , 'whiteList' , '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)' ,
sanitize : 'boolean' ,
sanitizeFn : '(null|function)' ,
2019-08-27 15:03:21 +02:00
whiteList : 'object' ,
popperConfig : '(null|object)'
2018-11-13 07:41:12 +01:00
} ;
var AttachmentMap = {
AUTO : 'auto' ,
TOP : 'top' ,
RIGHT : 'right' ,
BOTTOM : 'bottom' ,
LEFT : 'left'
} ;
var Default = {
animation : true ,
2019-03-01 17:31:34 +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' ,
sanitize : true ,
sanitizeFn : null ,
2019-08-27 15:03:21 +02:00
whiteList : DefaultWhitelist ,
popperConfig : null
2018-11-13 07:41:12 +01:00
} ;
var HoverState = {
SHOW : 'show' ,
OUT : 'out'
} ;
2019-04-18 13:47:52 +02:00
var Event = {
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
} ;
var ClassName = {
FADE : 'fade' ,
SHOW : 'show'
} ;
var Selector = {
2019-07-12 23:56:26 +02:00
TOOLTIP _INNER : '.tooltip-inner'
2018-11-13 07:41:12 +01:00
} ;
var Trigger = {
HOVER : 'hover' ,
FOCUS : 'focus' ,
CLICK : 'click' ,
MANUAL : 'manual'
} ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 07:41:12 +01:00
var Tooltip =
/*#__PURE__*/
function ( ) {
function Tooltip ( element , config ) {
if ( typeof Popper === 'undefined' ) {
2019-03-01 17:31:34 +01:00
throw new TypeError ( 'Bootstrap\'s tooltips require Popper.js (https://popper.js.org)' ) ;
2018-11-13 07:41:12 +01:00
} // private
2017-10-30 00:19:14 +01:00
2018-11-13 07:41:12 +01:00
this . _isEnabled = true ;
this . _timeout = 0 ;
this . _hoverState = '' ;
this . _activeTrigger = { } ;
this . _popper = null ; // Protected
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
this . element = element ;
this . config = this . _getConfig ( config ) ;
this . tip = null ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
this . _setListeners ( ) ;
2019-03-01 17:31:34 +01:00
Data . setData ( element , this . constructor . DATA _KEY , 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 ;
2019-03-01 17:31:34 +01:00
var context = Data . getData ( event . delegateTarget , dataKey ) ;
2015-08-19 05:28:28 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
2019-03-01 17:31:34 +01:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data . 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 {
2019-03-01 17:31:34 +01:00
if ( this . getTipElement ( ) . classList . contains ( ClassName . 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 ) ;
2019-03-01 17:31:34 +01:00
Data . removeData ( this . element , this . constructor . DATA _KEY ) ;
EventHandler . off ( this . element , this . constructor . EVENT _KEY ) ;
2019-07-12 23:56:26 +02:00
EventHandler . off ( SelectorEngine . closest ( this . element , '.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 . element = null ;
this . config = null ;
this . tip = null ;
} ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_proto . show = function show ( ) {
var _this = this ;
2015-05-12 08:32:37 +02:00
2019-03-01 17:31:34 +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 ) {
2019-03-01 17:31:34 +01:00
var showEvent = EventHandler . trigger ( this . element , this . constructor . Event . SHOW ) ;
var shadowRoot = findShadowRoot ( this . element ) ;
2019-03-11 16:13:30 +01:00
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 ) ;
this . element . setAttribute ( 'aria-describedby' , tipId ) ;
this . setContent ( ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( this . config . animation ) {
2019-03-01 17:31:34 +01:00
tip . classList . add ( ClassName . FADE ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +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 ( ) ;
2019-03-01 17:31:34 +01:00
Data . setData ( tip , this . constructor . DATA _KEY , this ) ;
2015-08-19 05:28:28 +02:00
2019-03-01 17:31:34 +01:00
if ( ! this . element . ownerDocument . documentElement . contains ( this . tip ) ) {
container . appendChild ( tip ) ;
2018-11-13 07:41:12 +01:00
}
2016-10-10 02:26:51 +02:00
2019-03-01 17:31:34 +01:00
EventHandler . trigger ( this . element , this . constructor . Event . INSERTED ) ;
2019-08-27 15:03:21 +02:00
this . _popper = new Popper ( this . element , tip , this . _getPopperConfig ( attachment ) ) ;
2019-03-01 17:31:34 +01:00
tip . classList . add ( ClassName . SHOW ) ; // 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
2018-11-13 07:41:12 +01:00
if ( 'ontouchstart' in document . documentElement ) {
2019-03-01 17:31:34 +01:00
makeArray ( document . body . children ) . forEach ( function ( element ) {
EventHandler . on ( element , 'mouseover' , noop ( ) ) ;
} ) ;
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 ( ) {
if ( _this . config . animation ) {
_this . _fixTransition ( ) ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
var prevHoverState = _this . _hoverState ;
_this . _hoverState = null ;
2019-03-01 17:31:34 +01:00
EventHandler . trigger ( _this . element , _this . constructor . Event . SHOWN ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( prevHoverState === HoverState . OUT ) {
_this . _leave ( null , _this ) ;
2015-05-12 08:32:37 +02:00
}
2018-11-13 07:41:12 +01:00
} ;
2019-03-01 17:31:34 +01:00
if ( this . tip . classList . contains ( ClassName . FADE ) ) {
var transitionDuration = getTransitionDurationFromElement ( this . tip ) ;
EventHandler . one ( this . tip , TRANSITION _END , complete ) ;
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 ( ) {
2018-11-13 07:41:12 +01:00
var _this2 = this ;
2015-05-12 08:32:37 +02:00
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 ( ) {
if ( _this2 . _hoverState !== HoverState . SHOW && tip . parentNode ) {
tip . parentNode . removeChild ( tip ) ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
_this2 . _cleanTipClass ( ) ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
_this2 . element . removeAttribute ( 'aria-describedby' ) ;
2015-05-12 08:32:37 +02:00
2019-03-01 17:31:34 +01:00
EventHandler . trigger ( _this2 . element , _this2 . constructor . Event . HIDDEN ) ;
2017-09-30 23:28:03 +02:00
2019-07-24 08:13:50 +02:00
_this2 . _popper . destroy ( ) ;
2018-11-13 07:41:12 +01:00
} ;
2016-10-10 02:26:51 +02:00
2019-03-01 17:31:34 +01:00
var hideEvent = EventHandler . 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
2019-03-01 17:31:34 +01:00
tip . classList . remove ( ClassName . 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 ) {
2019-03-01 17:31:34 +01:00
makeArray ( document . body . children ) . forEach ( function ( element ) {
return EventHandler . off ( element , 'mouseover' , noop ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this . _activeTrigger [ Trigger . CLICK ] = false ;
this . _activeTrigger [ Trigger . FOCUS ] = false ;
this . _activeTrigger [ Trigger . HOVER ] = false ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if ( this . tip . classList . contains ( ClassName . FADE ) ) {
var transitionDuration = getTransitionDurationFromElement ( tip ) ;
EventHandler . one ( tip , TRANSITION _END , complete ) ;
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 ( ) ;
2019-03-01 17:31:34 +01:00
this . setElementContent ( SelectorEngine . findOne ( Selector . TOOLTIP _INNER , tip ) , this . getTitle ( ) ) ;
tip . classList . remove ( ClassName . FADE ) ;
tip . classList . remove ( ClassName . 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 {
2019-03-01 17:31:34 +01:00
element . innerText = 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 ) {
content = sanitizeHtml ( content , this . config . whiteList , this . config . sanitizeFn ) ;
}
2019-03-01 17:31:34 +01:00
element . innerHTML = content ;
2018-11-13 07:41:12 +01:00
} else {
2019-03-01 17:31:34 +01:00
element . innerText = 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 ( ) {
var title = this . element . getAttribute ( 'data-original-title' ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( ! title ) {
title = typeof this . config . title === 'function' ? this . config . title . call ( this . element ) : this . config . title ;
}
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
return title ;
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 ) {
var _this3 = this ;
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 ) {
_this3 . _handlePopperPlacementChange ( data ) ;
}
} ,
onUpdate : function onUpdate ( data ) {
return _this3 . _handlePopperPlacementChange ( data ) ;
}
} ;
return _objectSpread2 ( { } , defaultBsConfig , { } , this . config . popperConfig ) ;
} ;
2019-07-24 08:13:50 +02:00
_proto . _addAttachmentClass = function _addAttachmentClass ( attachment ) {
this . getTipElement ( ) . classList . add ( CLASS _PREFIX + "-" + attachment ) ;
} ;
2019-02-11 20:15:34 +01:00
_proto . _getOffset = function _getOffset ( ) {
2019-08-27 15:03:21 +02:00
var _this4 = this ;
2019-02-11 20:15:34 +01:00
var offset = { } ;
if ( typeof this . config . offset === 'function' ) {
offset . fn = function ( data ) {
2019-08-27 15:03:21 +02:00
data . offsets = _objectSpread2 ( { } , data . offsets , { } , _this4 . config . offset ( data . offsets , _this4 . 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
}
2019-03-01 17:31:34 +01:00
return SelectorEngine . findOne ( this . config . container ) ;
2018-12-16 00:13:22 +01:00
} ;
2018-11-13 07:41:12 +01:00
_proto . _getAttachment = function _getAttachment ( placement ) {
return AttachmentMap [ placement . toUpperCase ( ) ] ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _setListeners = function _setListeners ( ) {
2019-08-27 15:03:21 +02:00
var _this5 = 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' ) {
2019-08-27 15:03:21 +02:00
EventHandler . on ( _this5 . element , _this5 . constructor . Event . CLICK , _this5 . config . selector , function ( event ) {
return _this5 . toggle ( event ) ;
2017-09-30 23:28:03 +02:00
} ) ;
2018-11-13 07:41:12 +01:00
} else if ( trigger !== Trigger . MANUAL ) {
2019-08-27 15:03:21 +02:00
var eventIn = trigger === Trigger . HOVER ? _this5 . constructor . Event . MOUSEENTER : _this5 . constructor . Event . FOCUSIN ;
var eventOut = trigger === Trigger . HOVER ? _this5 . constructor . Event . MOUSELEAVE : _this5 . constructor . Event . FOCUSOUT ;
EventHandler . on ( _this5 . element , eventIn , _this5 . config . selector , function ( event ) {
return _this5 . _enter ( event ) ;
2019-03-01 17:31:34 +01:00
} ) ;
2019-08-27 15:03:21 +02:00
EventHandler . on ( _this5 . element , eventOut , _this5 . config . selector , function ( event ) {
return _this5 . _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 ( ) {
2019-08-27 15:03:21 +02:00
if ( _this5 . element ) {
_this5 . hide ( ) ;
2018-11-13 07:41:12 +01:00
}
2019-07-12 23:56:26 +02:00
} ;
EventHandler . on ( SelectorEngine . closest ( this . element , '.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 ) {
2019-07-24 08:13:50 +02:00
this . config = _objectSpread2 ( { } , 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 ( ) {
var titleType = typeof this . element . getAttribute ( 'data-original-title' ) ;
2015-05-12 08:32:37 +02:00
2018-11-13 07:41:12 +01:00
if ( this . element . getAttribute ( 'title' ) || titleType !== 'string' ) {
this . element . setAttribute ( 'data-original-title' , this . element . getAttribute ( 'title' ) || '' ) ;
this . element . setAttribute ( 'title' , '' ) ;
}
} ;
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 ;
2019-03-01 17:31:34 +01:00
context = context || Data . getData ( event . delegateTarget , dataKey ) ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
2019-03-01 17:31:34 +01:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data . 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 ) {
context . _activeTrigger [ event . type === 'focusin' ? Trigger . FOCUS : Trigger . HOVER ] = true ;
}
2015-05-12 08:32:37 +02:00
2019-03-01 17:31:34 +01:00
if ( context . getTipElement ( ) . classList . contains ( ClassName . SHOW ) || context . _hoverState === HoverState . SHOW ) {
2017-09-06 06:05:12 +02:00
context . _hoverState = HoverState . SHOW ;
2018-11-13 07:41:12 +01:00
return ;
}
clearTimeout ( context . _timeout ) ;
context . _hoverState = HoverState . 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 ( ) {
if ( context . _hoverState === HoverState . 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 ;
2019-03-01 17:31:34 +01:00
context = context || Data . getData ( event . delegateTarget , dataKey ) ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ( ! context ) {
2019-03-01 17:31:34 +01:00
context = new this . constructor ( event . delegateTarget , this . _getDelegateConfig ( ) ) ;
Data . 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 ) {
context . _activeTrigger [ event . type === 'focusout' ? Trigger . FOCUS : Trigger . HOVER ] = false ;
}
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 ) ;
context . _hoverState = HoverState . 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 ( ) {
if ( context . _hoverState === HoverState . 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 ) {
2019-03-01 17:31:34 +01:00
var dataAttributes = Manipulator . getDataAttributes ( this . element ) ;
2019-02-13 17:01:40 +01:00
Object . keys ( dataAttributes ) . forEach ( function ( dataAttr ) {
if ( DISALLOWED _ATTRIBUTES . indexOf ( dataAttr ) !== - 1 ) {
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 ] ;
}
2019-07-24 08:13:50 +02:00
config = _objectSpread2 ( { } , 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 ) {
config . template = sanitizeHtml ( config . template , config . whiteList , config . sanitizeFn ) ;
}
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
2018-11-13 07:41:12 +01:00
if ( tabClass !== null && tabClass . length ) {
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 ) {
var popperInstance = popperData . instance ;
this . tip = popperInstance . 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
2019-03-01 17:31:34 +01:00
tip . classList . remove ( ClassName . 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 ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . 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
2019-08-27 15:03:21 +02:00
Tooltip . getInstance = function getInstance ( element ) {
2019-03-01 17:31:34 +01:00
return Data . getData ( element , DATA _KEY ) ;
} ;
2018-11-13 07:41:12 +01:00
_createClass ( Tooltip , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION ;
}
} , {
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 ( ) {
2019-04-18 13:47:52 +02:00
return Event ;
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 ;
} ( ) ;
2019-08-27 15:03:21 +02:00
var $ = getjQuery ( ) ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 17:31:34 +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
/* istanbul ignore if */
2019-08-27 15:03:21 +02:00
if ( $ ) {
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
$ . fn [ NAME ] = Tooltip . jQueryInterface ;
$ . fn [ NAME ] . Constructor = Tooltip ;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Tooltip . jQueryInterface ;
2019-03-01 17:31:34 +01:00
} ;
}
2015-05-12 08:32:37 +02:00
return Tooltip ;
2018-07-24 02:51:14 +02:00
2019-01-04 17:29:45 +01:00
} ) ) ;
2018-07-24 02:51:14 +02:00
//# sourceMappingURL=tooltip.js.map