2021-03-23 17:26:54 +01:00
/ * !
2021-05-13 18:22:20 +02:00
* Bootstrap offcanvas . js v5 . 0.1 ( https : //getbootstrap.com/)
2021-03-23 17:26:54 +01:00
* Copyright 2011 - 2021 The Bootstrap Authors ( https : //github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
* /
( function ( global , factory ) {
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( require ( './dom/selector-engine.js' ) , require ( './dom/manipulator.js' ) , require ( './dom/data.js' ) , require ( './dom/event-handler.js' ) , require ( './base-component.js' ) ) :
typeof define === 'function' && define . amd ? define ( [ './dom/selector-engine' , './dom/manipulator' , './dom/data' , './dom/event-handler' , './base-component' ] , factory ) :
( global = typeof globalThis !== 'undefined' ? globalThis : global || self , global . Offcanvas = factory ( global . SelectorEngine , global . Manipulator , global . Data , global . EventHandler , global . Base ) ) ;
} ( this , ( function ( SelectorEngine , Manipulator , Data , EventHandler , BaseComponent ) { 'use strict' ;
function _interopDefaultLegacy ( e ) { return e && typeof e === 'object' && 'default' in e ? e : { 'default' : e } ; }
var SelectorEngine _ _default = /*#__PURE__*/ _interopDefaultLegacy ( SelectorEngine ) ;
var Manipulator _ _default = /*#__PURE__*/ _interopDefaultLegacy ( Manipulator ) ;
var Data _ _default = /*#__PURE__*/ _interopDefaultLegacy ( Data ) ;
var EventHandler _ _default = /*#__PURE__*/ _interopDefaultLegacy ( EventHandler ) ;
var BaseComponent _ _default = /*#__PURE__*/ _interopDefaultLegacy ( BaseComponent ) ;
const MILLISECONDS _MULTIPLIER = 1000 ;
2021-05-05 21:32:12 +02:00
const TRANSITION _END = 'transitionend' ; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2021-03-23 17:26:54 +01:00
const toType = obj => {
if ( obj === null || obj === undefined ) {
return ` ${ obj } ` ;
}
return { } . toString . call ( obj ) . match ( /\s([a-z]+)/i ) [ 1 ] . toLowerCase ( ) ;
} ;
const getSelector = element => {
let selector = element . getAttribute ( 'data-bs-target' ) ;
if ( ! selector || selector === '#' ) {
let hrefAttr = element . getAttribute ( 'href' ) ; // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if ( ! hrefAttr || ! hrefAttr . includes ( '#' ) && ! hrefAttr . startsWith ( '.' ) ) {
return null ;
} // Just in case some CMS puts out a full URL with the anchor appended
if ( hrefAttr . includes ( '#' ) && ! hrefAttr . startsWith ( '#' ) ) {
2021-05-05 21:32:12 +02:00
hrefAttr = ` # ${ hrefAttr . split ( '#' ) [ 1 ] } ` ;
2021-03-23 17:26:54 +01:00
}
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr . trim ( ) : null ;
}
return selector ;
} ;
const getElementFromSelector = element => {
const selector = getSelector ( element ) ;
return selector ? document . querySelector ( selector ) : null ;
} ;
const getTransitionDurationFromElement = element => {
if ( ! element ) {
return 0 ;
} // Get transition-duration of the element
let {
transitionDuration ,
transitionDelay
} = window . getComputedStyle ( element ) ;
const floatTransitionDuration = Number . parseFloat ( transitionDuration ) ;
const floatTransitionDelay = Number . 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 ( Number . parseFloat ( transitionDuration ) + Number . parseFloat ( transitionDelay ) ) * MILLISECONDS _MULTIPLIER ;
} ;
2021-05-05 21:32:12 +02:00
const triggerTransitionEnd = element => {
element . dispatchEvent ( new Event ( TRANSITION _END ) ) ;
} ;
2021-05-13 18:22:20 +02:00
const isElement = obj => {
if ( ! obj || typeof obj !== 'object' ) {
return false ;
}
if ( typeof obj . jquery !== 'undefined' ) {
obj = obj [ 0 ] ;
}
return typeof obj . nodeType !== 'undefined' ;
} ;
2021-03-23 17:26:54 +01:00
2021-05-05 21:32:12 +02:00
const emulateTransitionEnd = ( element , duration ) => {
let called = false ;
const durationPadding = 5 ;
const emulatedDuration = duration + durationPadding ;
function listener ( ) {
called = true ;
element . removeEventListener ( TRANSITION _END , listener ) ;
}
element . addEventListener ( TRANSITION _END , listener ) ;
setTimeout ( ( ) => {
if ( ! called ) {
triggerTransitionEnd ( element ) ;
}
} , emulatedDuration ) ;
} ;
2021-03-23 17:26:54 +01:00
const typeCheckConfig = ( componentName , config , configTypes ) => {
Object . keys ( configTypes ) . forEach ( property => {
const expectedTypes = configTypes [ property ] ;
const value = config [ property ] ;
const valueType = value && isElement ( value ) ? 'element' : toType ( value ) ;
if ( ! new RegExp ( expectedTypes ) . test ( valueType ) ) {
2021-05-05 21:32:12 +02:00
throw new TypeError ( ` ${ componentName . toUpperCase ( ) } : Option " ${ property } " provided type " ${ valueType } " but expected type " ${ expectedTypes } ". ` ) ;
2021-03-23 17:26:54 +01:00
}
} ) ;
} ;
const isVisible = element => {
if ( ! element ) {
return false ;
}
if ( element . style && element . parentNode && element . parentNode . style ) {
const elementStyle = getComputedStyle ( element ) ;
const parentNodeStyle = getComputedStyle ( element . parentNode ) ;
return elementStyle . display !== 'none' && parentNodeStyle . display !== 'none' && elementStyle . visibility !== 'hidden' ;
}
return false ;
} ;
const isDisabled = element => {
if ( ! element || element . nodeType !== Node . ELEMENT _NODE ) {
return true ;
}
if ( element . classList . contains ( 'disabled' ) ) {
return true ;
}
if ( typeof element . disabled !== 'undefined' ) {
return element . disabled ;
}
return element . hasAttribute ( 'disabled' ) && element . getAttribute ( 'disabled' ) !== 'false' ;
} ;
2021-05-05 21:32:12 +02:00
const reflow = element => element . offsetHeight ;
2021-03-23 17:26:54 +01:00
const getjQuery = ( ) => {
const {
jQuery
} = window ;
if ( jQuery && ! document . body . hasAttribute ( 'data-bs-no-jquery' ) ) {
return jQuery ;
}
return null ;
} ;
const onDOMContentLoaded = callback => {
if ( document . readyState === 'loading' ) {
document . addEventListener ( 'DOMContentLoaded' , callback ) ;
} else {
callback ( ) ;
}
} ;
2021-05-13 18:22:20 +02:00
const defineJQueryPlugin = plugin => {
2021-03-23 17:26:54 +01:00
onDOMContentLoaded ( ( ) => {
const $ = getjQuery ( ) ;
/* istanbul ignore if */
if ( $ ) {
2021-05-13 18:22:20 +02:00
const name = plugin . NAME ;
2021-03-23 17:26:54 +01:00
const JQUERY _NO _CONFLICT = $ . fn [ name ] ;
$ . fn [ name ] = plugin . jQueryInterface ;
$ . fn [ name ] . Constructor = plugin ;
$ . fn [ name ] . noConflict = ( ) => {
$ . fn [ name ] = JQUERY _NO _CONFLICT ;
return plugin . jQueryInterface ;
} ;
}
} ) ;
} ;
2021-05-05 21:32:12 +02:00
const execute = callback => {
if ( typeof callback === 'function' ) {
callback ( ) ;
}
} ;
2021-03-23 17:26:54 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-05-13 18:22:20 +02:00
* Bootstrap ( v5 . 0.1 ) : util / scrollBar . js
2021-03-23 17:26:54 +01:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/main/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2021-05-05 21:32:12 +02:00
const SELECTOR _FIXED _CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top' ;
2021-03-23 17:26:54 +01:00
const SELECTOR _STICKY _CONTENT = '.sticky-top' ;
const getWidth = ( ) => {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document . documentElement . clientWidth ;
return Math . abs ( window . innerWidth - documentWidth ) ;
} ;
const hide = ( width = getWidth ( ) ) => {
2021-05-05 21:32:12 +02:00
_disableOverFlow ( ) ; // give padding to element to balances the hidden scrollbar width
_setElementAttributes ( 'body' , 'paddingRight' , calculatedValue => calculatedValue + width ) ; // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements, to keep shown fullwidth
2021-03-23 17:26:54 +01:00
_setElementAttributes ( SELECTOR _FIXED _CONTENT , 'paddingRight' , calculatedValue => calculatedValue + width ) ;
_setElementAttributes ( SELECTOR _STICKY _CONTENT , 'marginRight' , calculatedValue => calculatedValue - width ) ;
2021-05-05 21:32:12 +02:00
} ;
2021-03-23 17:26:54 +01:00
2021-05-05 21:32:12 +02:00
const _disableOverFlow = ( ) => {
const actualValue = document . body . style . overflow ;
if ( actualValue ) {
Manipulator _ _default [ 'default' ] . setDataAttribute ( document . body , 'overflow' , actualValue ) ;
}
document . body . style . overflow = 'hidden' ;
2021-03-23 17:26:54 +01:00
} ;
const _setElementAttributes = ( selector , styleProp , callback ) => {
const scrollbarWidth = getWidth ( ) ;
SelectorEngine _ _default [ 'default' ] . find ( selector ) . forEach ( element => {
if ( element !== document . body && window . innerWidth > element . clientWidth + scrollbarWidth ) {
return ;
}
const actualValue = element . style [ styleProp ] ;
const calculatedValue = window . getComputedStyle ( element ) [ styleProp ] ;
Manipulator _ _default [ 'default' ] . setDataAttribute ( element , styleProp , actualValue ) ;
2021-05-05 21:32:12 +02:00
element . style [ styleProp ] = ` ${ callback ( Number . parseFloat ( calculatedValue ) ) } px ` ;
2021-03-23 17:26:54 +01:00
} ) ;
} ;
const reset = ( ) => {
2021-05-05 21:32:12 +02:00
_resetElementAttributes ( 'body' , 'overflow' ) ;
_resetElementAttributes ( 'body' , 'paddingRight' ) ;
2021-03-23 17:26:54 +01:00
_resetElementAttributes ( SELECTOR _FIXED _CONTENT , 'paddingRight' ) ;
_resetElementAttributes ( SELECTOR _STICKY _CONTENT , 'marginRight' ) ;
} ;
const _resetElementAttributes = ( selector , styleProp ) => {
SelectorEngine _ _default [ 'default' ] . find ( selector ) . forEach ( element => {
const value = Manipulator _ _default [ 'default' ] . getDataAttribute ( element , styleProp ) ;
2021-05-05 21:32:12 +02:00
if ( typeof value === 'undefined' ) {
2021-03-23 17:26:54 +01:00
element . style . removeProperty ( styleProp ) ;
} else {
Manipulator _ _default [ 'default' ] . removeDataAttribute ( element , styleProp ) ;
element . style [ styleProp ] = value ;
}
} ) ;
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-05-13 18:22:20 +02:00
* Bootstrap ( v5 . 0.1 ) : util / backdrop . js
2021-05-05 21:32:12 +02:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
const Default$1 = {
isVisible : true ,
// if false, we use the backdrop helper without adding any element to the dom
isAnimated : false ,
rootElement : document . body ,
// give the choice to place backdrop under different elements
clickCallback : null
} ;
const DefaultType$1 = {
isVisible : 'boolean' ,
isAnimated : 'boolean' ,
rootElement : 'element' ,
clickCallback : '(function|null)'
} ;
const NAME$1 = 'backdrop' ;
const CLASS _NAME _BACKDROP = 'modal-backdrop' ;
const CLASS _NAME _FADE = 'fade' ;
const CLASS _NAME _SHOW$1 = 'show' ;
const EVENT _MOUSEDOWN = ` mousedown.bs. ${ NAME$1 } ` ;
class Backdrop {
constructor ( config ) {
this . _config = this . _getConfig ( config ) ;
this . _isAppended = false ;
this . _element = null ;
}
show ( callback ) {
if ( ! this . _config . isVisible ) {
execute ( callback ) ;
return ;
}
this . _append ( ) ;
if ( this . _config . isAnimated ) {
reflow ( this . _getElement ( ) ) ;
}
this . _getElement ( ) . classList . add ( CLASS _NAME _SHOW$1 ) ;
this . _emulateAnimation ( ( ) => {
execute ( callback ) ;
} ) ;
}
hide ( callback ) {
if ( ! this . _config . isVisible ) {
execute ( callback ) ;
return ;
}
this . _getElement ( ) . classList . remove ( CLASS _NAME _SHOW$1 ) ;
this . _emulateAnimation ( ( ) => {
this . dispose ( ) ;
execute ( callback ) ;
} ) ;
} // Private
_getElement ( ) {
if ( ! this . _element ) {
const backdrop = document . createElement ( 'div' ) ;
backdrop . className = CLASS _NAME _BACKDROP ;
if ( this . _config . isAnimated ) {
backdrop . classList . add ( CLASS _NAME _FADE ) ;
}
this . _element = backdrop ;
}
return this . _element ;
}
_getConfig ( config ) {
config = { ... Default$1 ,
... ( typeof config === 'object' ? config : { } )
} ;
2021-05-13 18:22:20 +02:00
config . rootElement = config . rootElement || document . body ;
2021-05-05 21:32:12 +02:00
typeCheckConfig ( NAME$1 , config , DefaultType$1 ) ;
return config ;
}
_append ( ) {
if ( this . _isAppended ) {
return ;
}
this . _config . rootElement . appendChild ( this . _getElement ( ) ) ;
EventHandler _ _default [ 'default' ] . on ( this . _getElement ( ) , EVENT _MOUSEDOWN , ( ) => {
execute ( this . _config . clickCallback ) ;
} ) ;
this . _isAppended = true ;
}
dispose ( ) {
if ( ! this . _isAppended ) {
return ;
}
EventHandler _ _default [ 'default' ] . off ( this . _element , EVENT _MOUSEDOWN ) ;
this . _getElement ( ) . parentNode . removeChild ( this . _element ) ;
this . _isAppended = false ;
}
_emulateAnimation ( callback ) {
if ( ! this . _config . isAnimated ) {
execute ( callback ) ;
return ;
}
const backdropTransitionDuration = getTransitionDurationFromElement ( this . _getElement ( ) ) ;
EventHandler _ _default [ 'default' ] . one ( this . _getElement ( ) , 'transitionend' , ( ) => execute ( callback ) ) ;
emulateTransitionEnd ( this . _getElement ( ) , backdropTransitionDuration ) ;
}
}
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2021-05-13 18:22:20 +02:00
* Bootstrap ( v5 . 0.1 ) : offcanvas . js
2021-03-23 17:26:54 +01:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
const NAME = 'offcanvas' ;
const DATA _KEY = 'bs.offcanvas' ;
const EVENT _KEY = ` . ${ DATA _KEY } ` ;
const DATA _API _KEY = '.data-api' ;
const EVENT _LOAD _DATA _API = ` load ${ EVENT _KEY } ${ DATA _API _KEY } ` ;
const ESCAPE _KEY = 'Escape' ;
const Default = {
backdrop : true ,
keyboard : true ,
scroll : false
} ;
const DefaultType = {
backdrop : 'boolean' ,
keyboard : 'boolean' ,
scroll : 'boolean'
} ;
const CLASS _NAME _SHOW = 'show' ;
const OPEN _SELECTOR = '.offcanvas.show' ;
const EVENT _SHOW = ` show ${ EVENT _KEY } ` ;
const EVENT _SHOWN = ` shown ${ EVENT _KEY } ` ;
const EVENT _HIDE = ` hide ${ EVENT _KEY } ` ;
const EVENT _HIDDEN = ` hidden ${ EVENT _KEY } ` ;
const EVENT _FOCUSIN = ` focusin ${ EVENT _KEY } ` ;
const EVENT _CLICK _DATA _API = ` click ${ EVENT _KEY } ${ DATA _API _KEY } ` ;
const EVENT _CLICK _DISMISS = ` click.dismiss ${ EVENT _KEY } ` ;
2021-05-05 21:32:12 +02:00
const EVENT _KEYDOWN _DISMISS = ` keydown.dismiss ${ EVENT _KEY } ` ;
2021-03-23 17:26:54 +01:00
const SELECTOR _DATA _DISMISS = '[data-bs-dismiss="offcanvas"]' ;
const SELECTOR _DATA _TOGGLE = '[data-bs-toggle="offcanvas"]' ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
class Offcanvas extends BaseComponent _ _default [ 'default' ] {
constructor ( element , config ) {
super ( element ) ;
this . _config = this . _getConfig ( config ) ;
this . _isShown = false ;
2021-05-05 21:32:12 +02:00
this . _backdrop = this . _initializeBackDrop ( ) ;
2021-03-23 17:26:54 +01:00
this . _addEventListeners ( ) ;
} // Getters
2021-05-13 18:22:20 +02:00
static get NAME ( ) {
return NAME ;
2021-03-23 17:26:54 +01:00
}
2021-05-13 18:22:20 +02:00
static get Default ( ) {
return Default ;
2021-03-23 17:26:54 +01:00
} // Public
toggle ( relatedTarget ) {
return this . _isShown ? this . hide ( ) : this . show ( relatedTarget ) ;
}
show ( relatedTarget ) {
if ( this . _isShown ) {
return ;
}
const showEvent = EventHandler _ _default [ 'default' ] . trigger ( this . _element , EVENT _SHOW , {
relatedTarget
} ) ;
if ( showEvent . defaultPrevented ) {
return ;
}
this . _isShown = true ;
this . _element . style . visibility = 'visible' ;
2021-05-05 21:32:12 +02:00
this . _backdrop . show ( ) ;
2021-03-23 17:26:54 +01:00
if ( ! this . _config . scroll ) {
hide ( ) ;
2021-05-05 21:32:12 +02:00
this . _enforceFocusOnElement ( this . _element ) ;
}
2021-03-23 17:26:54 +01:00
this . _element . removeAttribute ( 'aria-hidden' ) ;
this . _element . setAttribute ( 'aria-modal' , true ) ;
this . _element . setAttribute ( 'role' , 'dialog' ) ;
this . _element . classList . add ( CLASS _NAME _SHOW ) ;
const completeCallBack = ( ) => {
EventHandler _ _default [ 'default' ] . trigger ( this . _element , EVENT _SHOWN , {
relatedTarget
} ) ;
} ;
2021-05-13 18:22:20 +02:00
this . _queueCallback ( completeCallBack , this . _element , true ) ;
2021-03-23 17:26:54 +01:00
}
hide ( ) {
if ( ! this . _isShown ) {
return ;
}
const hideEvent = EventHandler _ _default [ 'default' ] . trigger ( this . _element , EVENT _HIDE ) ;
if ( hideEvent . defaultPrevented ) {
return ;
}
EventHandler _ _default [ 'default' ] . off ( document , EVENT _FOCUSIN ) ;
this . _element . blur ( ) ;
this . _isShown = false ;
this . _element . classList . remove ( CLASS _NAME _SHOW ) ;
2021-05-05 21:32:12 +02:00
this . _backdrop . hide ( ) ;
2021-03-23 17:26:54 +01:00
const completeCallback = ( ) => {
this . _element . setAttribute ( 'aria-hidden' , true ) ;
this . _element . removeAttribute ( 'aria-modal' ) ;
this . _element . removeAttribute ( 'role' ) ;
this . _element . style . visibility = 'hidden' ;
if ( ! this . _config . scroll ) {
reset ( ) ;
}
EventHandler _ _default [ 'default' ] . trigger ( this . _element , EVENT _HIDDEN ) ;
} ;
2021-05-13 18:22:20 +02:00
this . _queueCallback ( completeCallback , this . _element , true ) ;
2021-05-05 21:32:12 +02:00
}
dispose ( ) {
this . _backdrop . dispose ( ) ;
super . dispose ( ) ;
EventHandler _ _default [ 'default' ] . off ( document , EVENT _FOCUSIN ) ;
2021-03-23 17:26:54 +01:00
} // Private
_getConfig ( config ) {
config = { ... Default ,
... Manipulator _ _default [ 'default' ] . getDataAttributes ( this . _element ) ,
... ( typeof config === 'object' ? config : { } )
} ;
typeCheckConfig ( NAME , config , DefaultType ) ;
return config ;
}
2021-05-05 21:32:12 +02:00
_initializeBackDrop ( ) {
return new Backdrop ( {
isVisible : this . _config . backdrop ,
isAnimated : true ,
rootElement : this . _element . parentNode ,
clickCallback : ( ) => this . hide ( )
} ) ;
}
2021-03-23 17:26:54 +01:00
_enforceFocusOnElement ( element ) {
EventHandler _ _default [ 'default' ] . off ( document , EVENT _FOCUSIN ) ; // guard against infinite focus loop
EventHandler _ _default [ 'default' ] . on ( document , EVENT _FOCUSIN , event => {
if ( document !== event . target && element !== event . target && ! element . contains ( event . target ) ) {
element . focus ( ) ;
}
} ) ;
element . focus ( ) ;
}
_addEventListeners ( ) {
EventHandler _ _default [ 'default' ] . on ( this . _element , EVENT _CLICK _DISMISS , SELECTOR _DATA _DISMISS , ( ) => this . hide ( ) ) ;
2021-05-05 21:32:12 +02:00
EventHandler _ _default [ 'default' ] . on ( this . _element , EVENT _KEYDOWN _DISMISS , event => {
2021-03-23 17:26:54 +01:00
if ( this . _config . keyboard && event . key === ESCAPE _KEY ) {
this . hide ( ) ;
}
} ) ;
} // Static
static jQueryInterface ( config ) {
return this . each ( function ( ) {
const data = Data _ _default [ 'default' ] . get ( this , DATA _KEY ) || new Offcanvas ( this , typeof config === 'object' ? config : { } ) ;
if ( typeof config !== 'string' ) {
return ;
}
if ( data [ config ] === undefined || config . startsWith ( '_' ) || config === 'constructor' ) {
throw new TypeError ( ` No method named " ${ config } " ` ) ;
}
data [ config ] ( this ) ;
} ) ;
}
}
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
EventHandler _ _default [ 'default' ] . on ( document , EVENT _CLICK _DATA _API , SELECTOR _DATA _TOGGLE , function ( event ) {
const target = getElementFromSelector ( this ) ;
if ( [ 'A' , 'AREA' ] . includes ( this . tagName ) ) {
event . preventDefault ( ) ;
}
if ( isDisabled ( this ) ) {
return ;
}
EventHandler _ _default [ 'default' ] . one ( target , EVENT _HIDDEN , ( ) => {
// focus on trigger when it is closed
if ( isVisible ( this ) ) {
this . focus ( ) ;
}
} ) ; // avoid conflict when clicking a toggler of an offcanvas, while another is open
2021-05-05 21:32:12 +02:00
const allReadyOpen = SelectorEngine _ _default [ 'default' ] . findOne ( OPEN _SELECTOR ) ;
2021-03-23 17:26:54 +01:00
if ( allReadyOpen && allReadyOpen !== target ) {
2021-05-05 21:32:12 +02:00
Offcanvas . getInstance ( allReadyOpen ) . hide ( ) ;
2021-03-23 17:26:54 +01:00
}
const data = Data _ _default [ 'default' ] . get ( target , DATA _KEY ) || new Offcanvas ( target ) ;
data . toggle ( this ) ;
} ) ;
EventHandler _ _default [ 'default' ] . on ( window , EVENT _LOAD _DATA _API , ( ) => {
SelectorEngine _ _default [ 'default' ] . find ( OPEN _SELECTOR ) . forEach ( el => ( Data _ _default [ 'default' ] . get ( el , DATA _KEY ) || new Offcanvas ( el ) ) . show ( ) ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2021-05-13 18:22:20 +02:00
defineJQueryPlugin ( Offcanvas ) ;
2021-03-23 17:26:54 +01:00
return Offcanvas ;
} ) ) ) ;
//# sourceMappingURL=offcanvas.js.map