2018-11-13 07:41:12 +01:00
/ * !
2019-02-13 17:01:40 +01:00
* Bootstrap collapse . 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-03-01 17:31:34 +01:00
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( require ( './dom/data.js' ) , require ( './dom/eventHandler.js' ) , require ( './dom/manipulator.js' ) , require ( './dom/selectorEngine.js' ) ) :
typeof define === 'function' && define . amd ? define ( [ './dom/data.js' , './dom/eventHandler.js' , './dom/manipulator.js' , './dom/selectorEngine.js' ] , factory ) :
( global = global || self , global . Collapse = factory ( global . Data , global . EventHandler , global . Manipulator , global . SelectorEngine ) ) ;
} ( this , function ( Data , EventHandler , Manipulator , SelectorEngine ) { 'use strict' ;
2018-07-24 02:51:14 +02:00
2019-03-01 17:31:34 +01:00
Data = Data && Data . hasOwnProperty ( 'default' ) ? Data [ 'default' ] : Data ;
EventHandler = EventHandler && EventHandler . hasOwnProperty ( 'default' ) ? EventHandler [ 'default' ] : EventHandler ;
Manipulator = Manipulator && Manipulator . hasOwnProperty ( 'default' ) ? Manipulator [ 'default' ] : Manipulator ;
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
2018-07-24 02:51:14 +02:00
function _objectSpread ( target ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
var source = arguments [ i ] != null ? arguments [ i ] : { } ;
var ownKeys = Object . keys ( source ) ;
2017-12-23 01:21:54 +01:00
2018-07-24 02:51:14 +02:00
if ( typeof Object . getOwnPropertySymbols === 'function' ) {
ownKeys = ownKeys . concat ( Object . getOwnPropertySymbols ( source ) . filter ( function ( sym ) {
return Object . getOwnPropertyDescriptor ( source , sym ) . enumerable ;
} ) ) ;
}
ownKeys . forEach ( function ( key ) {
_defineProperty ( target , key , source [ key ] ) ;
} ) ;
}
2017-09-06 06:05:12 +02:00
2018-07-24 02:51:14 +02:00
return target ;
}
2015-05-10 08:00:59 +02: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 MILLISECONDS _MULTIPLIER = 1000 ;
var TRANSITION _END = 'transitionend' ;
2019-03-11 16:13:30 +01:00
var _window = window ,
jQuery = _window . jQuery ; // 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 ( ) ;
} ;
var getSelectorFromElement = function getSelectorFromElement ( element ) {
var selector = element . getAttribute ( 'data-target' ) ;
if ( ! selector || selector === '#' ) {
var hrefAttr = element . getAttribute ( 'href' ) ;
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr . trim ( ) : '' ;
}
try {
return document . querySelector ( selector ) ? selector : null ;
2019-03-11 16:13:30 +01:00
} catch ( error ) {
2019-03-01 17:31:34 +01:00
return null ;
}
} ;
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 reflow = function reflow ( element ) {
return element . offsetHeight ;
} ;
2018-11-13 07:41:12 +01:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'collapse' ;
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.collapse' ;
var EVENT _KEY = "." + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
var Default = {
toggle : true ,
parent : ''
} ;
var DefaultType = {
toggle : 'boolean' ,
parent : '(string|element)'
} ;
2019-04-18 13:47:52 +02:00
var Event = {
2018-11-13 07:41:12 +01:00
SHOW : "show" + EVENT _KEY ,
SHOWN : "shown" + EVENT _KEY ,
HIDE : "hide" + EVENT _KEY ,
HIDDEN : "hidden" + EVENT _KEY ,
CLICK _DATA _API : "click" + EVENT _KEY + DATA _API _KEY
} ;
var ClassName = {
SHOW : 'show' ,
COLLAPSE : 'collapse' ,
COLLAPSING : 'collapsing' ,
COLLAPSED : 'collapsed'
} ;
var Dimension = {
WIDTH : 'width' ,
HEIGHT : 'height'
} ;
var Selector = {
ACTIVES : '.show, .collapsing' ,
DATA _TOGGLE : '[data-toggle="collapse"]'
2017-09-13 07:24:15 +02:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-11-13 07:41:12 +01:00
* Class Definition
2017-09-13 07:24:15 +02:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2018-01-04 01:03:22 +01:00
2018-11-13 07:41:12 +01:00
} ;
var Collapse =
/*#__PURE__*/
function ( ) {
function Collapse ( element , config ) {
this . _isTransitioning = false ;
this . _element = element ;
this . _config = this . _getConfig ( config ) ;
2019-03-01 17:31:34 +01:00
this . _triggerArray = makeArray ( SelectorEngine . find ( "[data-toggle=\"collapse\"][href=\"#" + element . id + "\"]," + ( "[data-toggle=\"collapse\"][data-target=\"#" + element . id + "\"]" ) ) ) ;
var toggleList = makeArray ( SelectorEngine . find ( Selector . DATA _TOGGLE ) ) ;
2018-11-13 07:41:12 +01:00
for ( var i = 0 , len = toggleList . length ; i < len ; i ++ ) {
var elem = toggleList [ i ] ;
2019-03-01 17:31:34 +01:00
var selector = getSelectorFromElement ( elem ) ;
var filterElement = makeArray ( SelectorEngine . find ( selector ) ) . filter ( function ( foundElem ) {
2018-11-13 07:41:12 +01:00
return foundElem === element ;
} ) ;
2017-05-16 09:59:44 +02:00
2019-03-01 17:31:34 +01:00
if ( selector !== null && filterElement . length ) {
2018-11-13 07:41:12 +01:00
this . _selector = selector ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
this . _triggerArray . push ( elem ) ;
2018-07-24 02:51:14 +02:00
}
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
this . _parent = this . _config . parent ? this . _getParent ( ) : null ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( ! this . _config . parent ) {
this . _addAriaAndCollapsedClass ( this . _element , this . _triggerArray ) ;
}
2015-08-13 06:12:03 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _config . toggle ) {
this . toggle ( ) ;
}
2019-03-01 17:31:34 +01:00
Data . setData ( element , DATA _KEY , this ) ;
2018-11-13 07:41:12 +01:00
} // Getters
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Collapse . prototype ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto . toggle = function toggle ( ) {
2019-03-01 17:31:34 +01:00
if ( this . _element . classList . contains ( ClassName . SHOW ) ) {
2018-11-13 07:41:12 +01:00
this . hide ( ) ;
} else {
this . show ( ) ;
}
} ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
_proto . show = function show ( ) {
var _this = this ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( this . _isTransitioning || this . _element . classList . contains ( ClassName . SHOW ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2018-09-17 21:34:34 +02:00
2018-11-13 07:41:12 +01:00
var actives ;
var activesData ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( this . _parent ) {
2019-03-01 17:31:34 +01:00
actives = makeArray ( SelectorEngine . find ( Selector . ACTIVES , this . _parent ) ) . filter ( function ( elem ) {
2018-11-13 07:41:12 +01:00
if ( typeof _this . _config . parent === 'string' ) {
return elem . getAttribute ( 'data-parent' ) === _this . _config . parent ;
2018-07-24 02:51:14 +02:00
}
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
return elem . classList . contains ( ClassName . COLLAPSE ) ;
} ) ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( actives . length === 0 ) {
actives = null ;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
var container = SelectorEngine . findOne ( this . _selector ) ;
2018-11-13 07:41:12 +01:00
if ( actives ) {
2019-03-01 17:31:34 +01:00
var tempActiveData = actives . filter ( function ( elem ) {
return container !== elem ;
} ) ;
activesData = tempActiveData [ 0 ] ? Data . getData ( tempActiveData [ 0 ] , DATA _KEY ) : null ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( activesData && activesData . _isTransitioning ) {
2018-07-24 02:51:14 +02:00
return ;
}
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2019-04-18 13:47:52 +02:00
var startEvent = EventHandler . trigger ( this . _element , Event . SHOW ) ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( startEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( actives ) {
2019-03-01 17:31:34 +01:00
actives . forEach ( function ( elemActive ) {
if ( container !== elemActive ) {
Collapse . _collapseInterface ( elemActive , 'hide' ) ;
}
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( ! activesData ) {
Data . setData ( elemActive , DATA _KEY , null ) ;
}
} ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
var dimension = this . _getDimension ( ) ;
2019-03-01 17:31:34 +01:00
this . _element . classList . remove ( ClassName . COLLAPSE ) ;
this . _element . classList . add ( ClassName . COLLAPSING ) ;
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = 0 ;
if ( this . _triggerArray . length ) {
2019-03-01 17:31:34 +01:00
this . _triggerArray . forEach ( function ( element ) {
element . classList . remove ( ClassName . COLLAPSED ) ;
element . setAttribute ( 'aria-expanded' , true ) ;
} ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
this . setTransitioning ( true ) ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
2019-03-01 17:31:34 +01:00
_this . _element . classList . remove ( ClassName . COLLAPSING ) ;
_this . _element . classList . add ( ClassName . COLLAPSE ) ;
_this . _element . classList . add ( ClassName . SHOW ) ;
2018-11-13 07:41:12 +01:00
_this . _element . style [ dimension ] = '' ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
_this . setTransitioning ( false ) ;
2015-05-10 08:00:59 +02:00
2019-04-18 13:47:52 +02:00
EventHandler . trigger ( _this . _element , Event . SHOWN ) ;
2018-07-24 02:51:14 +02:00
} ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
var capitalizedDimension = dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ;
var scrollSize = "scroll" + capitalizedDimension ;
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-13 07:41:12 +01:00
this . _element . style [ dimension ] = this . _element [ scrollSize ] + "px" ;
} ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
_proto . hide = function hide ( ) {
var _this2 = this ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( this . _isTransitioning || ! this . _element . classList . contains ( ClassName . SHOW ) ) {
2018-11-13 07:41:12 +01:00
return ;
}
2015-05-10 08:00:59 +02:00
2019-04-18 13:47:52 +02:00
var startEvent = EventHandler . trigger ( this . _element , Event . HIDE ) ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( startEvent . defaultPrevented ) {
2018-11-13 07:41:12 +01:00
return ;
}
var dimension = this . _getDimension ( ) ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = this . _element . getBoundingClientRect ( ) [ dimension ] + "px" ;
2019-03-01 17:31:34 +01:00
reflow ( this . _element ) ;
this . _element . classList . add ( ClassName . COLLAPSING ) ;
this . _element . classList . remove ( ClassName . COLLAPSE ) ;
this . _element . classList . remove ( ClassName . SHOW ) ;
2018-11-13 07:41:12 +01:00
var triggerArrayLength = this . _triggerArray . length ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( triggerArrayLength > 0 ) {
for ( var i = 0 ; i < triggerArrayLength ; i ++ ) {
var trigger = this . _triggerArray [ i ] ;
2019-03-01 17:31:34 +01:00
var selector = getSelectorFromElement ( trigger ) ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
if ( selector !== null ) {
2019-03-01 17:31:34 +01:00
var elem = SelectorEngine . findOne ( selector ) ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( ! elem . classList . contains ( ClassName . SHOW ) ) {
trigger . classList . add ( ClassName . COLLAPSED ) ;
trigger . setAttribute ( 'aria-expanded' , false ) ;
2017-09-06 06:05:12 +02:00
}
}
}
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
this . setTransitioning ( true ) ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete ( ) {
_this2 . setTransitioning ( false ) ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
_this2 . _element . classList . remove ( ClassName . COLLAPSING ) ;
_this2 . _element . classList . add ( ClassName . COLLAPSE ) ;
2019-04-18 13:47:52 +02:00
EventHandler . trigger ( _this2 . _element , Event . HIDDEN ) ;
2018-07-24 02:51:14 +02:00
} ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
this . _element . style [ dimension ] = '' ;
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-13 07:41:12 +01:00
} ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
_proto . setTransitioning = function setTransitioning ( isTransitioning ) {
this . _isTransitioning = isTransitioning ;
} ;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
_proto . dispose = function dispose ( ) {
2019-03-01 17:31:34 +01:00
Data . removeData ( this . _element , DATA _KEY ) ;
2018-11-13 07:41:12 +01:00
this . _config = null ;
this . _parent = null ;
this . _element = null ;
this . _triggerArray = null ;
this . _isTransitioning = null ;
2019-01-04 17:29:45 +01:00
} // Private
;
2016-10-10 02:26:51 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getConfig = function _getConfig ( config ) {
config = _objectSpread ( { } , Default , config ) ;
config . toggle = Boolean ( config . toggle ) ; // Coerce string values
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
typeCheckConfig ( NAME , config , DefaultType ) ;
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 . _getDimension = function _getDimension ( ) {
2019-03-01 17:31:34 +01:00
var hasWidth = this . _element . classList . contains ( Dimension . WIDTH ) ;
2018-11-13 07:41:12 +01:00
return hasWidth ? Dimension . WIDTH : Dimension . HEIGHT ;
} ;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto . _getParent = function _getParent ( ) {
var _this3 = this ;
2017-09-30 23:28:03 +02:00
2019-03-11 16:13:30 +01:00
var parent = this . _config . parent ;
2017-09-30 23:28:03 +02:00
2019-03-11 16:13:30 +01:00
if ( isElement ( parent ) ) {
// it's a jQuery object
if ( typeof parent . jquery !== 'undefined' || typeof parent [ 0 ] !== 'undefined' ) {
parent = parent [ 0 ] ;
2015-05-10 08:00:59 +02:00
}
2018-11-13 07:41:12 +01:00
} else {
2019-03-11 16:13:30 +01:00
parent = SelectorEngine . findOne ( parent ) ;
2018-11-13 07:41:12 +01:00
}
2015-05-10 08:00:59 +02:00
2019-03-11 16:13:30 +01:00
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + parent + "\"]" ;
2019-03-01 17:31:34 +01:00
makeArray ( SelectorEngine . find ( selector , parent ) ) . forEach ( function ( element ) {
2018-11-13 07:41:12 +01:00
_this3 . _addAriaAndCollapsedClass ( Collapse . _getTargetFromElement ( element ) , [ element ] ) ;
} ) ;
return parent ;
} ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
_proto . _addAriaAndCollapsedClass = function _addAriaAndCollapsedClass ( element , triggerArray ) {
2019-03-01 17:31:34 +01:00
if ( element ) {
var isOpen = element . classList . contains ( ClassName . SHOW ) ;
if ( triggerArray . length ) {
triggerArray . forEach ( function ( elem ) {
2019-03-11 16:13:30 +01:00
if ( isOpen ) {
2019-03-01 17:31:34 +01:00
elem . classList . remove ( ClassName . COLLAPSED ) ;
2019-03-11 16:13:30 +01:00
} else {
elem . classList . add ( ClassName . COLLAPSED ) ;
2019-03-01 17:31:34 +01:00
}
2016-10-10 02:26:51 +02:00
2019-03-01 17:31:34 +01:00
elem . setAttribute ( 'aria-expanded' , isOpen ) ;
} ) ;
}
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
Collapse . _getTargetFromElement = function _getTargetFromElement ( element ) {
2019-03-01 17:31:34 +01:00
var selector = getSelectorFromElement ( element ) ;
return selector ? SelectorEngine . findOne ( selector ) : null ;
2018-11-13 07:41:12 +01:00
} ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
Collapse . _collapseInterface = function _collapseInterface ( element , config ) {
var data = Data . getData ( element , DATA _KEY ) ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
var _config = _objectSpread ( { } , Default , Manipulator . getDataAttributes ( element ) , typeof config === 'object' && config ? config : { } ) ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if ( ! data && _config . toggle && /show|hide/ . test ( config ) ) {
_config . toggle = false ;
}
if ( ! data ) {
data = new Collapse ( element , _config ) ;
}
2018-07-24 02:51:14 +02:00
2019-03-01 17:31:34 +01:00
if ( typeof config === 'string' ) {
if ( typeof data [ config ] === 'undefined' ) {
2019-03-11 16:13:30 +01:00
throw new TypeError ( "No method named \"" + config + "\"" ) ;
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
data [ config ] ( ) ;
}
} ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
Collapse . _jQueryInterface = function _jQueryInterface ( config ) {
return this . each ( function ( ) {
Collapse . _collapseInterface ( this , config ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ;
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
Collapse . _getInstance = function _getInstance ( element ) {
return Data . getData ( element , DATA _KEY ) ;
} ;
2018-11-13 07:41:12 +01:00
_createClass ( Collapse , null , [ {
key : "VERSION" ,
get : function get ( ) {
return VERSION ;
}
} , {
key : "Default" ,
get : function get ( ) {
return Default ;
}
} ] ) ;
2015-05-10 08:00:59 +02:00
2018-11-13 07:41:12 +01:00
return Collapse ;
} ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-09-30 23:28:03 +02:00
2015-05-10 08:00:59 +02:00
2019-04-18 13:47:52 +02:00
EventHandler . on ( document , Event . CLICK _DATA _API , Selector . DATA _TOGGLE , function ( event ) {
2018-11-13 07:41:12 +01:00
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
2019-03-01 17:31:34 +01:00
if ( event . target . tagName === 'A' ) {
2018-11-13 07:41:12 +01:00
event . preventDefault ( ) ;
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
var triggerData = Manipulator . getDataAttributes ( this ) ;
var selector = getSelectorFromElement ( this ) ;
var selectorElements = makeArray ( SelectorEngine . find ( selector ) ) ;
selectorElements . forEach ( function ( element ) {
var data = Data . getData ( element , DATA _KEY ) ;
var config ;
if ( data ) {
// update parent attribute
if ( data . _parent === null && typeof triggerData . parent === 'string' ) {
data . _config . parent = triggerData . parent ;
data . _parent = data . _getParent ( ) ;
}
config = 'toggle' ;
} else {
config = triggerData ;
}
2018-07-24 02:51:14 +02:00
2019-03-01 17:31:34 +01:00
Collapse . _collapseInterface ( element , config ) ;
2018-11-13 07:41:12 +01:00
} ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2019-03-01 17:31:34 +01:00
* add . collapse to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
* /
2015-05-10 08:00:59 +02:00
2019-03-01 17:31:34 +01:00
if ( typeof jQuery !== 'undefined' ) {
var JQUERY _NO _CONFLICT = jQuery . fn [ NAME ] ;
jQuery . fn [ NAME ] = Collapse . _jQueryInterface ;
jQuery . fn [ NAME ] . Constructor = Collapse ;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
jQuery . fn [ NAME ] . noConflict = function ( ) {
jQuery . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Collapse . _jQueryInterface ;
} ;
}
2015-05-10 08:00:59 +02:00
return Collapse ;
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=collapse.js.map