2018-11-13 07:41:12 +01:00
/ * !
2020-05-13 21:36:00 +02:00
* Bootstrap toast . js v5 . 0.0 - alpha1 ( 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
* /
( 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' ) ) :
typeof define === 'function' && define . amd ? define ( [ './dom/data.js' , './dom/event-handler.js' , './dom/manipulator.js' ] , factory ) :
2019-03-01 17:31:34 +01:00
( global = global || self , global . Toast = factory ( global . Data , global . EventHandler , global . Manipulator ) ) ;
2019-11-08 09:11:23 +01:00
} ( this , ( function ( Data , EventHandler , Manipulator ) { 'use strict' ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
Data = Data && Object . prototype . hasOwnProperty . call ( Data , 'default' ) ? Data [ 'default' ] : Data ;
EventHandler = EventHandler && Object . prototype . hasOwnProperty . call ( EventHandler , 'default' ) ? EventHandler [ 'default' ] : EventHandler ;
Manipulator = Manipulator && Object . prototype . hasOwnProperty . call ( Manipulator , 'default' ) ? Manipulator [ 'default' ] : Manipulator ;
2018-11-13 07:41:12 +01:00
2019-03-01 17:31:34 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2020-05-13 21:36:00 +02:00
* Bootstrap ( v5 . 0.0 - alpha1 ) : 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 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 ( ) ;
} ;
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 ) {
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 + "\"." ) ) ;
}
} ) ;
} ;
2019-07-24 08:13:50 +02:00
var reflow = function reflow ( element ) {
return element . offsetHeight ;
} ;
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 ;
} ;
2020-06-14 00:40:28 +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 _objectSpread ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] != null ? arguments [ i ] : { } ; if ( i % 2 ) { ownKeys ( Object ( source ) , true ) . forEach ( function ( key ) { _defineProperty ( target , key , source [ key ] ) ; } ) ; } else if ( Object . getOwnPropertyDescriptors ) { Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ; } else { ownKeys ( Object ( source ) ) . forEach ( function ( key ) { Object . defineProperty ( target , key , Object . getOwnPropertyDescriptor ( source , key ) ) ; } ) ; } } return target ; }
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 ; }
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
/ * *
2018-11-24 17:22:59 +01:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 07:41:12 +01:00
* /
2018-11-24 17:22:59 +01:00
var NAME = 'toast' ;
2020-05-13 21:36:00 +02:00
var VERSION = '5.0.0-alpha1' ;
2018-11-24 17:22:59 +01:00
var DATA _KEY = 'bs.toast' ;
var EVENT _KEY = "." + DATA _KEY ;
2020-03-28 11:29:08 +01:00
var EVENT _CLICK _DISMISS = "click.dismiss" + EVENT _KEY ;
var EVENT _HIDE = "hide" + EVENT _KEY ;
var EVENT _HIDDEN = "hidden" + EVENT _KEY ;
var EVENT _SHOW = "show" + EVENT _KEY ;
var EVENT _SHOWN = "shown" + EVENT _KEY ;
var CLASS _NAME _FADE = 'fade' ;
var CLASS _NAME _HIDE = 'hide' ;
var CLASS _NAME _SHOW = 'show' ;
var CLASS _NAME _SHOWING = 'showing' ;
2018-11-24 17:22:59 +01:00
var DefaultType = {
animation : 'boolean' ,
autohide : 'boolean' ,
delay : 'number'
} ;
var Default = {
animation : true ,
autohide : true ,
delay : 500
} ;
2020-03-28 11:29:08 +01:00
var SELECTOR _DATA _DISMISS = '[data-dismiss="toast"]' ;
2019-10-08 08:39:10 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
var Toast = /*#__PURE__*/ function ( ) {
2018-11-24 17:22:59 +01:00
function Toast ( element , config ) {
this . _element = element ;
this . _config = this . _getConfig ( config ) ;
this . _timeout = null ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
this . _setListeners ( ) ;
2019-03-01 17:31:34 +01:00
Data . setData ( element , DATA _KEY , this ) ;
2018-11-24 17:22:59 +01:00
} // Getters
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
var _proto = Toast . prototype ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
// Public
_proto . show = function show ( ) {
var _this = this ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler . trigger ( this . _element , EVENT _SHOW ) ;
2019-07-12 23:56:26 +02:00
if ( showEvent . defaultPrevented ) {
return ;
}
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
if ( this . _config . animation ) {
2020-03-28 11:29:08 +01:00
this . _element . classList . add ( CLASS _NAME _FADE ) ;
2018-11-24 17:22:59 +01:00
}
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
var complete = function complete ( ) {
2020-03-28 11:29:08 +01:00
_this . _element . classList . remove ( CLASS _NAME _SHOWING ) ;
2018-12-16 00:13:22 +01:00
2020-03-28 11:29:08 +01:00
_this . _element . classList . add ( CLASS _NAME _SHOW ) ;
2018-12-16 00:13:22 +01:00
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( _this . _element , EVENT _SHOWN ) ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
if ( _this . _config . autohide ) {
2019-04-18 13:47:52 +02:00
_this . _timeout = setTimeout ( function ( ) {
_this . hide ( ) ;
} , _this . _config . delay ) ;
2018-11-13 07:41:12 +01:00
}
} ;
2020-03-28 11:29:08 +01:00
this . _element . classList . remove ( CLASS _NAME _HIDE ) ;
2018-12-16 00:13:22 +01:00
2019-07-24 08:13:50 +02:00
reflow ( this . _element ) ;
2020-03-28 11:29:08 +01:00
this . _element . classList . add ( CLASS _NAME _SHOWING ) ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
if ( this . _config . animation ) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-24 17:22:59 +01:00
} else {
complete ( ) ;
}
} ;
2018-11-13 07:41:12 +01:00
2019-04-18 13:47:52 +02:00
_proto . hide = function hide ( ) {
2018-11-24 17:22:59 +01:00
var _this2 = this ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
if ( ! this . _element . classList . contains ( CLASS _NAME _SHOW ) ) {
2018-11-24 17:22:59 +01:00
return ;
}
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
var hideEvent = EventHandler . trigger ( this . _element , EVENT _HIDE ) ;
2019-07-12 23:56:26 +02:00
if ( hideEvent . defaultPrevented ) {
return ;
}
2018-11-13 07:41:12 +01:00
2019-04-18 13:47:52 +02:00
var complete = function complete ( ) {
2020-03-28 11:29:08 +01:00
_this2 . _element . classList . add ( CLASS _NAME _HIDE ) ;
2019-04-18 13:47:52 +02:00
2020-03-28 11:29:08 +01:00
EventHandler . trigger ( _this2 . _element , EVENT _HIDDEN ) ;
2019-04-18 13:47:52 +02:00
} ;
2020-03-28 11:29:08 +01:00
this . _element . classList . remove ( CLASS _NAME _SHOW ) ;
2019-04-18 13:47:52 +02:00
if ( this . _config . animation ) {
var transitionDuration = getTransitionDurationFromElement ( this . _element ) ;
EventHandler . one ( this . _element , TRANSITION _END , complete ) ;
emulateTransitionEnd ( this . _element , transitionDuration ) ;
2018-11-24 17:22:59 +01:00
} else {
2019-04-18 13:47:52 +02:00
complete ( ) ;
2018-11-24 17:22:59 +01:00
}
} ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
_proto . dispose = function dispose ( ) {
clearTimeout ( this . _timeout ) ;
this . _timeout = null ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
if ( this . _element . classList . contains ( CLASS _NAME _SHOW ) ) {
this . _element . classList . remove ( CLASS _NAME _SHOW ) ;
2018-11-24 17:22:59 +01:00
}
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
EventHandler . off ( this . _element , EVENT _CLICK _DISMISS ) ;
2019-03-01 17:31:34 +01:00
Data . removeData ( this . _element , DATA _KEY ) ;
2018-11-24 17:22:59 +01:00
this . _element = null ;
this . _config = null ;
2019-01-04 17:29:45 +01:00
} // Private
;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
_proto . _getConfig = function _getConfig ( config ) {
2020-06-14 00:40:28 +02:00
config = _objectSpread ( _objectSpread ( _objectSpread ( { } , Default ) , Manipulator . getDataAttributes ( this . _element ) ) , typeof config === 'object' && config ? config : { } ) ;
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME , config , this . constructor . DefaultType ) ;
2018-11-24 17:22:59 +01:00
return config ;
} ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
_proto . _setListeners = function _setListeners ( ) {
var _this3 = this ;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
EventHandler . on ( this . _element , EVENT _CLICK _DISMISS , SELECTOR _DATA _DISMISS , function ( ) {
2019-04-18 13:47:52 +02:00
return _this3 . hide ( ) ;
2018-11-24 17:22:59 +01:00
} ) ;
2019-01-04 17:29:45 +01:00
} // Static
;
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
Toast . jQueryInterface = function jQueryInterface ( config ) {
2018-11-24 17:22:59 +01:00
return this . each ( function ( ) {
2019-03-01 17:31:34 +01:00
var data = Data . getData ( this , DATA _KEY ) ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
var _config = typeof config === 'object' && config ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
if ( ! data ) {
data = new Toast ( this , _config ) ;
}
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-11-13 07:41:12 +01:00
}
2018-11-24 17:22:59 +01:00
data [ config ] ( this ) ;
2018-11-13 07:41:12 +01:00
}
2018-11-24 17:22:59 +01:00
} ) ;
} ;
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
Toast . getInstance = function getInstance ( element ) {
2019-03-01 17:31:34 +01:00
return Data . getData ( element , DATA _KEY ) ;
} ;
2018-11-24 17:22:59 +01:00
_createClass ( Toast , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION ;
}
} , {
key : "DefaultType" ,
get : function get ( ) {
return DefaultType ;
}
2019-02-11 20:15:34 +01:00
} , {
key : "Default" ,
get : function get ( ) {
return Default ;
}
2018-11-24 17:22:59 +01:00
} ] ) ;
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
return Toast ;
} ( ) ;
2019-08-27 15:03:21 +02:00
var $ = getjQuery ( ) ;
2018-11-24 17:22:59 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 17:31:34 +01:00
* add . toast to jQuery only if jQuery is present
2018-11-24 17:22:59 +01:00
* /
2018-11-13 07:41:12 +01:00
2019-07-24 08:13:50 +02:00
/* istanbul ignore if */
2019-08-27 15:03:21 +02:00
if ( $ ) {
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
$ . fn [ NAME ] = Toast . jQueryInterface ;
$ . fn [ NAME ] . Constructor = Toast ;
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Toast . jQueryInterface ;
2019-03-01 17:31:34 +01:00
} ;
}
2018-11-13 07:41:12 +01:00
return Toast ;
2019-11-08 09:11:23 +01:00
} ) ) ) ;
2018-11-13 07:41:12 +01:00
//# sourceMappingURL=toast.js.map