2013-09-10 22:21:44 -04:00
/ * !
2015-01-19 17:55:25 -05:00
* Bootstrap v4 . 0.0 - alpha ( http : //getbootstrap.com)
2015-01-01 15:02:02 -05:00
* Copyright 2011 - 2015 Twitter , Inc .
2013-12-18 18:08:16 -05:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
2013-10-03 13:42:55 -04:00
* /
2013-10-24 13:32:41 -04:00
2014-10-23 00:39:51 -04:00
if ( typeof jQuery === 'undefined' ) {
throw new Error ( 'Bootstrap\'s JavaScript requires jQuery' )
}
+ function ( $ ) {
var version = $ . fn . jquery . split ( ' ' ) [ 0 ] . split ( '.' )
if ( ( version [ 0 ] < 2 && version [ 1 ] < 9 ) || ( version [ 0 ] == 1 && version [ 1 ] == 9 && version [ 2 ] < 1 ) ) {
throw new Error ( 'Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher' )
}
} ( jQuery ) ;
2013-07-26 04:15:41 -04:00
2012-04-15 20:03:33 -04:00
2015-05-06 16:34:14 -04:00
+ function ( $ ) {
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
'use strict' ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var _createClass = ( function ( ) { 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 ) ; } } return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor ; } ; } ) ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
function _inherits ( subClass , superClass ) { if ( typeof superClass !== 'function' && superClass !== null ) { throw new TypeError ( 'Super expression must either be null or a function, not ' + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) subClass . _ _proto _ _ = superClass ; }
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( 'Cannot call a class as a function' ) ; } }
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : util . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var Util = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Private TransitionEnd Helpers
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var transition = false ;
var TransitionEndEvent = {
WebkitTransition : 'webkitTransitionEnd' ,
MozTransition : 'transitionend' ,
OTransition : 'oTransitionEnd otransitionend' ,
transition : 'transitionend'
} ;
function getSpecialTransitionEndEvent ( ) {
return {
bindType : transition . end ,
delegateType : transition . end ,
handle : function handle ( event ) {
if ( $ ( event . target ) . is ( this ) ) {
return event . handleObj . handler . apply ( this , arguments ) ;
}
}
} ;
2015-01-03 16:58:44 -05:00
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
function transitionEndTest ( ) {
if ( window . QUnit ) {
return false ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var el = document . createElement ( 'bootstrap' ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
for ( var name in TransitionEndEvent ) {
if ( el . style [ name ] !== undefined ) {
return { end : TransitionEndEvent [ name ] } ;
2015-05-06 16:34:14 -04:00
}
2015-01-03 16:58:44 -05:00
}
2015-05-12 19:52:54 -04:00
return false ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
function transitionEndEmulator ( duration ) {
var _this = this ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var called = false ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
$ ( this ) . one ( Util . TRANSITION _END , function ( ) {
called = true ;
} ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
setTimeout ( function ( ) {
if ( ! called ) {
Util . triggerTransitionEnd ( _this ) ;
}
} , duration ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
return this ;
2015-05-06 16:34:14 -04:00
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
function setTransitionEndSupport ( ) {
transition = transitionEndTest ( ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
$ . fn . emulateTransitionEnd = transitionEndEmulator ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( Util . supportsTransitionEnd ( ) ) {
$ . event . special [ Util . TRANSITION _END ] = getSpecialTransitionEndEvent ( ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var Util = {
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
TRANSITION _END : 'bsTransitionEnd' ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
getUID : function getUID ( prefix ) {
do prefix += ~ ~ ( Math . random ( ) * 1000000 ) ; while ( document . getElementById ( prefix ) ) ;
return prefix ;
} ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
getSelectorFromElement : function getSelectorFromElement ( element ) {
var selector = element . getAttribute ( 'data-target' ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( ! selector ) {
selector = element . getAttribute ( 'href' ) || '' ;
selector = /^#[a-z]/i . test ( selector ) ? selector : null ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
return selector ;
} ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
reflow : function reflow ( element ) {
new Function ( 'bs' , 'return bs' ) ( element . offsetHeight ) ;
} ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
triggerTransitionEnd : function triggerTransitionEnd ( element ) {
$ ( element ) . trigger ( transition . end ) ;
} ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
supportsTransitionEnd : function supportsTransitionEnd ( ) {
return ! ! transition ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
} ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
setTransitionEndSupport ( ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
return Util ;
} ) ( jQuery ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : alert . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var Alert = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'alert' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.alert' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 150 ;
var Selector = {
DISMISS : '[data-dismiss="alert"]'
} ;
var Event = {
2015-05-13 15:48:34 -04:00
CLOSE : 'close' + EVENT _KEY ,
CLOSED : 'closed' + EVENT _KEY ,
CLICK _DATA _API : 'click' + EVENT _KEY + '' + DATA _API _KEY
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
ALERT : 'alert' ,
FADE : 'fade' ,
IN : 'in'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Alert = ( function ( ) {
function Alert ( element ) {
_classCallCheck ( this , Alert ) ;
this . _element = element ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
_createClass ( Alert , [ {
key : 'close' ,
2014-05-13 00:19:01 -04:00
2015-05-12 19:52:54 -04:00
// public
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function close ( element ) {
element = element || this . _element ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var rootElement = this . _getRootElement ( element ) ;
var customEvent = this . _triggerCloseEvent ( rootElement ) ;
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
if ( customEvent . isDefaultPrevented ( ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _removeElement ( rootElement ) ;
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeData ( this . _element , DATA _KEY ) ;
this . _element = null ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_getRootElement' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// private
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
value : function _getRootElement ( element ) {
var parent = false ;
var selector = Util . getSelectorFromElement ( element ) ;
2014-10-28 23:30:31 -04:00
2015-05-12 19:52:54 -04:00
if ( selector ) {
parent = $ ( selector ) [ 0 ] ;
}
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
if ( ! parent ) {
parent = $ ( element ) . closest ( '.' + ClassName . ALERT ) [ 0 ] ;
}
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
return parent ;
}
} , {
key : '_triggerCloseEvent' ,
value : function _triggerCloseEvent ( element ) {
var closeEvent = $ . Event ( Event . CLOSE ) ;
$ ( element ) . trigger ( closeEvent ) ;
return closeEvent ;
}
} , {
key : '_removeElement' ,
value : function _removeElement ( element ) {
$ ( element ) . removeClass ( ClassName . IN ) ;
if ( ! Util . supportsTransitionEnd ( ) || ! $ ( element ) . hasClass ( ClassName . FADE ) ) {
this . _destroyElement ( element ) ;
return ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
$ ( element ) . one ( Util . TRANSITION _END , this . _destroyElement . bind ( this , element ) ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
}
} , {
key : '_destroyElement' ,
value : function _destroyElement ( element ) {
$ ( element ) . detach ( ) . trigger ( Event . CLOSED ) . remove ( ) ;
}
} ] , [ {
key : 'VERSION' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// getters
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : '_jQueryInterface' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// static
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var $element = $ ( this ) ;
var data = $element . data ( DATA _KEY ) ;
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
data = new Alert ( this ) ;
$element . data ( DATA _KEY , data ) ;
}
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
if ( config === 'close' ) {
data [ config ] ( this ) ;
}
} ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : '_handleDismiss' ,
value : function _handleDismiss ( alertInstance ) {
return function ( event ) {
if ( event ) {
event . preventDefault ( ) ;
}
alertInstance . close ( this ) ;
} ;
}
} ] ) ;
return Alert ;
} ) ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . CLICK _DATA _API , Selector . DISMISS , Alert . _handleDismiss ( new Alert ( ) ) ) ;
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Alert . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Alert ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Alert . _jQueryInterface ;
} ;
return Alert ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : button . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var Button = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'button' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.button' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 150 ;
var ClassName = {
ACTIVE : 'active' ,
BUTTON : 'btn' ,
FOCUS : 'focus'
} ;
var Selector = {
DATA _TOGGLE _CARROT : '[data-toggle^="button"]' ,
DATA _TOGGLE : '[data-toggle="buttons"]' ,
INPUT : 'input' ,
ACTIVE : '.active' ,
BUTTON : '.btn'
} ;
var Event = {
2015-05-13 15:48:34 -04:00
CLICK _DATA _API : 'click' + EVENT _KEY + '' + DATA _API _KEY ,
FOCUS _BLUR _DATA _API : 'focus' + EVENT _KEY + '' + DATA _API _KEY + ' ' + ( 'blur' + EVENT _KEY + '' + DATA _API _KEY )
2015-05-12 19:52:54 -04:00
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Button = ( function ( ) {
function Button ( element ) {
_classCallCheck ( this , Button ) ;
this . _element = element ;
2015-05-06 16:34:14 -04:00
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
_createClass ( Button , [ {
key : 'toggle' ,
// public
value : function toggle ( ) {
var triggerChangeEvent = true ;
var rootElement = $ ( this . _element ) . closest ( Selector . DATA _TOGGLE ) [ 0 ] ;
if ( rootElement ) {
var input = $ ( this . _element ) . find ( Selector . INPUT ) [ 0 ] ;
if ( input ) {
if ( input . type === 'radio' ) {
if ( input . checked && $ ( this . _element ) . hasClass ( ClassName . ACTIVE ) ) {
triggerChangeEvent = false ;
} else {
var activeElement = $ ( rootElement ) . find ( Selector . ACTIVE ) [ 0 ] ;
if ( activeElement ) {
$ ( activeElement ) . removeClass ( ClassName . ACTIVE ) ;
}
}
}
if ( triggerChangeEvent ) {
input . checked = ! $ ( this . _element ) . hasClass ( ClassName . ACTIVE ) ;
$ ( this . _element ) . trigger ( 'change' ) ;
}
}
} else {
this . _element . setAttribute ( 'aria-pressed' , ! $ ( this . _element ) . hasClass ( ClassName . ACTIVE ) ) ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( triggerChangeEvent ) {
$ ( this . _element ) . toggleClass ( ClassName . ACTIVE ) ;
}
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeData ( this . _element , DATA _KEY ) ;
this . _element = null ;
}
2015-05-12 19:52:54 -04:00
} ] , [ {
key : 'VERSION' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// getters
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : '_jQueryInterface' ,
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
// static
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
data = new Button ( this ) ;
$ ( this ) . data ( DATA _KEY , data ) ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( config === 'toggle' ) {
data [ config ] ( ) ;
}
} ) ;
}
} ] ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
return Button ;
} ) ( ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-01-03 16:58:44 -05:00
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . CLICK _DATA _API , Selector . DATA _TOGGLE _CARROT , function ( event ) {
2015-05-12 19:52:54 -04:00
event . preventDefault ( ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var button = event . target ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( ! $ ( button ) . hasClass ( ClassName . BUTTON ) ) {
button = $ ( button ) . closest ( Selector . BUTTON ) ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
Button . _jQueryInterface . call ( $ ( button ) , 'toggle' ) ;
2015-05-13 15:48:34 -04:00
} ) . on ( Event . FOCUS _BLUR _DATA _API , Selector . DATA _TOGGLE _CARROT , function ( event ) {
2015-05-12 19:52:54 -04:00
var button = $ ( event . target ) . closest ( Selector . BUTTON ) [ 0 ] ;
$ ( button ) . toggleClass ( ClassName . FOCUS , /^focus(in)?$/ . test ( event . type ) ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Button . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Button ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Button . _jQueryInterface ;
} ;
return Button ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : carousel . js
2013-12-18 18:28:08 -05:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
2015-05-12 19:52:54 -04:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var Carousel = ( function ( $ ) {
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
var NAME = 'carousel' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.carousel' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 600 ;
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
var Default = {
2015-05-06 16:34:14 -04:00
interval : 5000 ,
2015-05-12 19:52:54 -04:00
keyboard : true ,
slide : false ,
2015-05-06 16:34:14 -04:00
pause : 'hover' ,
2015-05-12 19:52:54 -04:00
wrap : true
} ;
var Direction = {
NEXT : 'next' ,
PREVIOUS : 'prev'
} ;
var Event = {
2015-05-13 15:48:34 -04:00
SLIDE : 'slide' + EVENT _KEY ,
SLID : 'slid' + EVENT _KEY ,
KEYDOWN : 'keydown' + EVENT _KEY ,
MOUSEENTER : 'mouseenter' + EVENT _KEY ,
MOUSELEAVE : 'mouseleave' + EVENT _KEY ,
LOAD _DATA _API : 'load' + EVENT _KEY + '' + DATA _API _KEY ,
CLICK _DATA _API : 'click' + EVENT _KEY + '' + DATA _API _KEY
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
CAROUSEL : 'carousel' ,
ACTIVE : 'active' ,
SLIDE : 'slide' ,
RIGHT : 'right' ,
LEFT : 'left' ,
ITEM : 'carousel-item'
} ;
var Selector = {
ACTIVE : '.active' ,
ACTIVE _ITEM : '.active.carousel-item' ,
ITEM : '.carousel-item' ,
NEXT _PREV : '.next, .prev' ,
INDICATORS : '.carousel-indicators' ,
DATA _SLIDE : '[data-slide], [data-slide-to]' ,
DATA _RIDE : '[data-ride="carousel"]'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Carousel = ( function ( ) {
function Carousel ( element , config ) {
_classCallCheck ( this , Carousel ) ;
this . _items = null ;
this . _interval = null ;
this . _activeElement = null ;
this . _isPaused = false ;
this . _isSliding = false ;
this . _config = config ;
this . _element = $ ( element ) [ 0 ] ;
this . _indicatorsElement = $ ( this . _element ) . find ( Selector . INDICATORS ) [ 0 ] ;
this . _addEventListeners ( ) ;
2012-04-15 20:03:33 -04:00
}
2015-05-12 19:52:54 -04:00
_createClass ( Carousel , [ {
key : 'next' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// public
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function next ( ) {
if ( ! this . _isSliding ) {
this . _slide ( Direction . NEXT ) ;
}
}
} , {
key : 'prev' ,
value : function prev ( ) {
if ( ! this . _isSliding ) {
this . _slide ( Direction . PREVIOUS ) ;
}
}
} , {
key : 'pause' ,
value : function pause ( event ) {
if ( ! event ) {
this . _isPaused = true ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( $ ( this . _element ) . find ( Selector . NEXT _PREV ) [ 0 ] && Util . supportsTransitionEnd ( ) ) {
Util . triggerTransitionEnd ( this . _element ) ;
this . cycle ( true ) ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
clearInterval ( this . _interval ) ;
this . _interval = null ;
}
} , {
key : 'cycle' ,
value : function cycle ( event ) {
if ( ! event ) {
this . _isPaused = false ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( this . _interval ) {
clearInterval ( this . _interval ) ;
this . _interval = null ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( this . _config . interval && ! this . _isPaused ) {
2015-05-13 13:13:34 -04:00
this . _interval = setInterval ( $ . proxy ( this . next , this ) , this . _config . interval ) ;
2015-05-12 19:52:54 -04:00
}
}
} , {
key : 'to' ,
value : function to ( index ) {
var _this2 = this ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _activeElement = $ ( this . _element ) . find ( Selector . ACTIVE _ITEM ) [ 0 ] ;
2012-10-18 01:26:44 -04:00
2015-05-12 19:52:54 -04:00
var activeIndex = this . _getItemIndex ( this . _activeElement ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( index > this . _items . length - 1 || index < 0 ) {
return ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( this . _isSliding ) {
$ ( this . _element ) . one ( Event . SLID , function ( ) {
return _this2 . to ( index ) ;
} ) ;
return ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( activeIndex == index ) {
this . pause ( ) ;
this . cycle ( ) ;
return ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var direction = index > activeIndex ? Direction . NEXT : Direction . PREVIOUS ;
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
this . _slide ( direction , this . _items [ index ] ) ;
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ ( this . _element ) . off ( EVENT _KEY ) ;
$ . removeData ( this . _element , DATA _KEY ) ;
this . _items = null ;
this . _config = null ;
this . _element = null ;
this . _interval = null ;
this . _isPaused = null ;
this . _isSliding = null ;
this . _activeElement = null ;
this . _indicatorsElement = null ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_addEventListeners' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// private
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function _addEventListeners ( ) {
if ( this . _config . keyboard ) {
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . on ( Event . KEYDOWN , $ . proxy ( this . _keydown , this ) ) ;
2015-05-12 19:52:54 -04:00
}
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _config . pause == 'hover' && ! ( 'ontouchstart' in document . documentElement ) ) {
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . on ( Event . MOUSEENTER , $ . proxy ( this . pause , this ) ) . on ( Event . MOUSELEAVE , $ . proxy ( this . cycle , this ) ) ;
2015-05-12 19:52:54 -04:00
}
}
} , {
key : '_keydown' ,
value : function _keydown ( event ) {
event . preventDefault ( ) ;
if ( /input|textarea/i . test ( event . target . tagName ) ) return ;
switch ( event . which ) {
case 37 :
this . prev ( ) ; break ;
case 39 :
this . next ( ) ; break ;
default :
return ;
}
}
} , {
key : '_getItemIndex' ,
value : function _getItemIndex ( element ) {
this . _items = $ . makeArray ( $ ( element ) . parent ( ) . find ( Selector . ITEM ) ) ;
return this . _items . indexOf ( element ) ;
}
} , {
key : '_getItemByDirection' ,
value : function _getItemByDirection ( direction , activeElement ) {
var isNextDirection = direction === Direction . NEXT ;
var isPrevDirection = direction === Direction . PREVIOUS ;
var activeIndex = this . _getItemIndex ( activeElement ) ;
var lastItemIndex = this . _items . length - 1 ;
var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex == lastItemIndex ;
if ( isGoingToWrap && ! this . _config . wrap ) {
return activeElement ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var delta = direction == Direction . PREVIOUS ? - 1 : 1 ;
var itemIndex = ( activeIndex + delta ) % this . _items . length ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
return itemIndex === - 1 ? this . _items [ this . _items . length - 1 ] : this . _items [ itemIndex ] ;
}
} , {
key : '_triggerSlideEvent' ,
value : function _triggerSlideEvent ( relatedTarget , directionalClassname ) {
var slideEvent = $ . Event ( Event . SLIDE , {
relatedTarget : relatedTarget ,
direction : directionalClassname
} ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . trigger ( slideEvent ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
return slideEvent ;
}
} , {
key : '_setActiveIndicatorElement' ,
value : function _setActiveIndicatorElement ( element ) {
if ( this . _indicatorsElement ) {
$ ( this . _indicatorsElement ) . find ( Selector . ACTIVE ) . removeClass ( ClassName . ACTIVE ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var nextIndicator = this . _indicatorsElement . children [ this . _getItemIndex ( element ) ] ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( nextIndicator ) {
$ ( nextIndicator ) . addClass ( ClassName . ACTIVE ) ;
}
}
}
} , {
key : '_slide' ,
value : function _slide ( direction , element ) {
var _this3 = this ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var activeElement = $ ( this . _element ) . find ( Selector . ACTIVE _ITEM ) [ 0 ] ;
var nextElement = element || activeElement && this . _getItemByDirection ( direction , activeElement ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var isCycling = ! ! this . _interval ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var directionalClassName = direction == Direction . NEXT ? ClassName . LEFT : ClassName . RIGHT ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( nextElement && $ ( nextElement ) . hasClass ( ClassName . ACTIVE ) ) {
this . _isSliding = false ;
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var slideEvent = this . _triggerSlideEvent ( nextElement , directionalClassName ) ;
if ( slideEvent . isDefaultPrevented ( ) ) {
return ;
}
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
if ( ! activeElement || ! nextElement ) {
// some weirdness is happening, so we bail
return ;
}
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
this . _isSliding = true ;
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
if ( isCycling ) {
this . pause ( ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _setActiveIndicatorElement ( nextElement ) ;
2012-12-21 22:45:19 -05:00
2015-05-12 19:52:54 -04:00
var slidEvent = $ . Event ( Event . SLID , {
relatedTarget : nextElement ,
direction : directionalClassName
} ) ;
2012-12-21 22:45:19 -05:00
2015-05-12 19:52:54 -04:00
if ( Util . supportsTransitionEnd ( ) && $ ( this . _element ) . hasClass ( ClassName . SLIDE ) ) {
2012-12-21 22:45:19 -05:00
2015-05-12 19:52:54 -04:00
$ ( nextElement ) . addClass ( direction ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
Util . reflow ( nextElement ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
$ ( activeElement ) . addClass ( directionalClassName ) ;
$ ( nextElement ) . addClass ( directionalClassName ) ;
2013-05-27 15:45:13 -04:00
2015-05-12 19:52:54 -04:00
$ ( activeElement ) . one ( Util . TRANSITION _END , function ( ) {
$ ( nextElement ) . removeClass ( directionalClassName ) . removeClass ( direction ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( nextElement ) . addClass ( ClassName . ACTIVE ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( activeElement ) . removeClass ( ClassName . ACTIVE ) . removeClass ( direction ) . removeClass ( directionalClassName ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
_this3 . _isSliding = false ;
2013-05-16 15:50:06 -04:00
2015-05-12 19:52:54 -04:00
setTimeout ( function ( ) {
return $ ( _this3 . _element ) . trigger ( slidEvent ) ;
} , 0 ) ;
} ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
} else {
$ ( activeElement ) . removeClass ( ClassName . ACTIVE ) ;
$ ( nextElement ) . addClass ( ClassName . ACTIVE ) ;
2014-05-13 00:19:01 -04:00
2015-05-12 19:52:54 -04:00
this . _isSliding = false ;
$ ( this . _element ) . trigger ( slidEvent ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( isCycling ) {
this . cycle ( ) ;
}
}
} ] , [ {
key : 'VERSION' ,
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
// getters
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : '_jQueryInterface' ,
// static
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
var _config = $ . extend ( { } , Default , $ ( this ) . data ( ) ) ;
if ( typeof config === 'object' ) {
$ . extend ( _config , config ) ;
}
var action = typeof config === 'string' ? config : _config . slide ;
if ( ! data ) {
data = new Carousel ( this , _config ) ;
$ ( this ) . data ( DATA _KEY , data ) ;
}
if ( typeof config == 'number' ) {
data . to ( config ) ;
} else if ( action ) {
data [ action ] ( ) ;
} else if ( _config . interval ) {
data . pause ( ) ;
data . cycle ( ) ;
}
} ) ;
}
} , {
key : '_dataApiClickHandler' ,
value : function _dataApiClickHandler ( event ) {
var selector = Util . getSelectorFromElement ( this ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( ! selector ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var target = $ ( selector ) [ 0 ] ;
2014-10-21 22:28:16 -04:00
2015-05-12 19:52:54 -04:00
if ( ! target || ! $ ( target ) . hasClass ( ClassName . CAROUSEL ) ) {
return ;
}
2013-07-26 23:34:39 -04:00
2015-05-12 19:52:54 -04:00
var config = $ . extend ( { } , $ ( target ) . data ( ) , $ ( this ) . data ( ) ) ;
2013-07-26 23:34:39 -04:00
2015-05-12 19:52:54 -04:00
var slideIndex = this . getAttribute ( 'data-slide-to' ) ;
if ( slideIndex ) {
config . interval = false ;
}
2013-07-26 23:34:39 -04:00
2015-05-12 19:52:54 -04:00
Carousel . _jQueryInterface . call ( $ ( target ) , config ) ;
if ( slideIndex ) {
$ ( target ) . data ( DATA _KEY ) . to ( slideIndex ) ;
}
2013-07-26 23:34:39 -04:00
2015-05-12 19:52:54 -04:00
event . preventDefault ( ) ;
}
} ] ) ;
return Carousel ;
} ) ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . CLICK _DATA _API , Selector . DATA _SLIDE , Carousel . _dataApiClickHandler ) ;
2015-05-12 19:52:54 -04:00
2015-05-13 15:48:34 -04:00
$ ( window ) . on ( Event . LOAD _DATA _API , function ( ) {
2015-05-12 19:52:54 -04:00
$ ( Selector . DATA _RIDE ) . each ( function ( ) {
var $carousel = $ ( this ) ;
Carousel . _jQueryInterface . call ( $carousel , $carousel . data ( ) ) ;
} ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Carousel . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Carousel ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Carousel . _jQueryInterface ;
} ;
return Carousel ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : collapse . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
var Collapse = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'collapse' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.collapse' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 600 ;
var Default = {
toggle : true ,
parent : null
} ;
var Event = {
2015-05-13 15:48:34 -04: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
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
IN : 'in' ,
COLLAPSE : 'collapse' ,
COLLAPSING : 'collapsing' ,
COLLAPSED : 'collapsed'
} ;
var Dimension = {
WIDTH : 'width' ,
HEIGHT : 'height'
} ;
var Selector = {
ACTIVES : '.panel > .in, .panel > .collapsing' ,
DATA _TOGGLE : '[data-toggle="collapse"]'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Collapse = ( function ( ) {
function Collapse ( element , config ) {
_classCallCheck ( this , Collapse ) ;
this . _isTransitioning = false ;
this . _element = element ;
this . _config = $ . extend ( { } , Default , config ) ;
this . _triggerArray = $ . makeArray ( $ ( '[data-toggle="collapse"][href="#' + element . id + '"],' + ( '[data-toggle="collapse"][data-target="#' + element . id + '"]' ) ) ) ;
this . _parent = this . _config . parent ? this . _getParent ( ) : null ;
if ( ! this . _config . parent ) {
this . _addAriaAndCollapsedClass ( this . _element , this . _triggerArray ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _config . toggle ) {
this . toggle ( ) ;
}
2014-06-17 21:23:14 -04:00
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
_createClass ( Collapse , [ {
key : 'toggle' ,
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
// public
2013-07-17 22:33:21 -04:00
2015-05-12 19:52:54 -04:00
value : function toggle ( ) {
if ( $ ( this . _element ) . hasClass ( ClassName . IN ) ) {
this . hide ( ) ;
} else {
this . show ( ) ;
}
}
} , {
key : 'show' ,
value : function show ( ) {
var _this4 = this ;
2013-07-17 22:33:21 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _isTransitioning || $ ( this . _element ) . hasClass ( ClassName . IN ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var actives = undefined ;
2015-05-13 15:48:34 -04:00
var activesData = undefined ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _parent ) {
actives = $ . makeArray ( $ ( Selector . ACTIVES ) ) ;
if ( ! actives . length ) {
actives = null ;
}
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( actives ) {
activesData = $ ( actives ) . data ( DATA _KEY ) ;
if ( activesData && activesData . _isTransitioning ) {
return ;
}
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var startEvent = $ . Event ( Event . SHOW ) ;
$ ( this . _element ) . trigger ( startEvent ) ;
if ( startEvent . isDefaultPrevented ( ) ) {
return ;
}
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
if ( actives ) {
Collapse . _jQueryInterface . call ( $ ( actives ) , 'hide' ) ;
if ( ! activesData ) {
$ ( actives ) . data ( DATA _KEY , null ) ;
}
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var dimension = this . _getDimension ( ) ;
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . removeClass ( ClassName . COLLAPSE ) . addClass ( ClassName . COLLAPSING ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _element . style [ dimension ] = 0 ;
this . _element . setAttribute ( 'aria-expanded' , true ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _triggerArray . length ) {
$ ( this . _triggerArray ) . removeClass ( ClassName . COLLAPSED ) . attr ( 'aria-expanded' , true ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . setTransitioning ( true ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var complete = function complete ( ) {
$ ( _this4 . _element ) . removeClass ( ClassName . COLLAPSING ) . addClass ( ClassName . COLLAPSE ) . addClass ( ClassName . IN ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
_this4 . _element . style [ dimension ] = '' ;
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
_this4 . setTransitioning ( false ) ;
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( _this4 . _element ) . trigger ( Event . SHOWN ) ;
} ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( ! Util . supportsTransitionEnd ( ) ) {
complete ( ) ;
return ;
}
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var scrollSize = 'scroll' + ( dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ) ;
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . one ( Util . TRANSITION _END , complete ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
this . _element . style [ dimension ] = this . _element [ scrollSize ] + 'px' ;
}
} , {
key : 'hide' ,
value : function hide ( ) {
var _this5 = this ;
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _isTransitioning || ! $ ( this . _element ) . hasClass ( ClassName . IN ) ) {
return ;
}
2013-05-16 15:50:06 -04:00
2015-05-12 19:52:54 -04:00
var startEvent = $ . Event ( Event . HIDE ) ;
$ ( this . _element ) . trigger ( startEvent ) ;
if ( startEvent . isDefaultPrevented ( ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var dimension = this . _getDimension ( ) ;
var offsetDimension = dimension === Dimension . WIDTH ? 'offsetWidth' : 'offsetHeight' ;
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
this . _element . style [ dimension ] = this . _element [ offsetDimension ] + 'px' ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
Util . reflow ( this . _element ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . addClass ( ClassName . COLLAPSING ) . removeClass ( ClassName . COLLAPSE ) . removeClass ( ClassName . IN ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _element . setAttribute ( 'aria-expanded' , false ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
if ( this . _triggerArray . length ) {
$ ( this . _triggerArray ) . addClass ( ClassName . COLLAPSED ) . attr ( 'aria-expanded' , false ) ;
}
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
this . setTransitioning ( true ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
var complete = function complete ( ) {
_this5 . setTransitioning ( false ) ;
$ ( _this5 . _element ) . removeClass ( ClassName . COLLAPSING ) . addClass ( ClassName . COLLAPSE ) . trigger ( Event . HIDDEN ) ;
} ;
2013-05-16 15:50:06 -04:00
2015-05-12 19:52:54 -04:00
this . _element . style [ dimension ] = 0 ;
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
if ( ! Util . supportsTransitionEnd ( ) ) {
return complete ( ) ;
}
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . one ( Util . TRANSITION _END , complete ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
}
} , {
key : 'setTransitioning' ,
value : function setTransitioning ( isTransitioning ) {
this . _isTransitioning = isTransitioning ;
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeData ( this . _element , DATA _KEY ) ;
this . _config = null ;
this . _parent = null ;
this . _element = null ;
this . _triggerArray = null ;
this . _isTransitioning = null ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_getDimension' ,
2014-10-28 23:44:52 -04:00
2015-05-12 19:52:54 -04:00
// private
2013-07-17 23:29:41 -04:00
2015-05-12 19:52:54 -04:00
value : function _getDimension ( ) {
var hasWidth = $ ( this . _element ) . hasClass ( Dimension . WIDTH ) ;
return hasWidth ? Dimension . WIDTH : Dimension . HEIGHT ;
}
} , {
key : '_getParent' ,
value : function _getParent ( ) {
var _this6 = this ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var parent = $ ( this . _config . parent ) [ 0 ] ;
var selector = '[data-toggle="collapse"][data-parent="' + this . _config . parent + '"]' ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( parent ) . find ( selector ) . each ( function ( i , element ) {
_this6 . _addAriaAndCollapsedClass ( Collapse . _getTargetFromElement ( element ) , [ element ] ) ;
} ) ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
return parent ;
}
} , {
key : '_addAriaAndCollapsedClass' ,
value : function _addAriaAndCollapsedClass ( element , triggerArray ) {
if ( element ) {
var isOpen = $ ( element ) . hasClass ( ClassName . IN ) ;
element . setAttribute ( 'aria-expanded' , isOpen ) ;
if ( triggerArray . length ) {
$ ( triggerArray ) . toggleClass ( ClassName . COLLAPSED , ! isOpen ) . attr ( 'aria-expanded' , isOpen ) ;
}
}
}
} ] , [ {
key : 'VERSION' ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
// getters
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : '_getTargetFromElement' ,
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
// static
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
value : function _getTargetFromElement ( element ) {
var selector = Util . getSelectorFromElement ( element ) ;
return selector ? $ ( selector ) [ 0 ] : null ;
}
} , {
key : '_jQueryInterface' ,
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var $this = $ ( this ) ;
var data = $this . data ( DATA _KEY ) ;
var _config = $ . extend ( { } , Default , $this . data ( ) , typeof config === 'object' && config ) ;
if ( ! data && _config . toggle && /show|hide/ . test ( config ) ) {
_config . toggle = false ;
}
if ( ! data ) {
data = new Collapse ( this , _config ) ;
$this . data ( DATA _KEY , data ) ;
}
if ( typeof config === 'string' ) {
data [ config ] ( ) ;
}
} ) ;
}
} ] ) ;
2014-06-10 21:11:26 -04:00
2015-05-12 19:52:54 -04:00
return Collapse ;
} ) ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2014-05-13 00:19:01 -04:00
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . CLICK _DATA _API , Selector . DATA _TOGGLE , function ( event ) {
2015-05-12 19:52:54 -04:00
event . preventDefault ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var target = Collapse . _getTargetFromElement ( this ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var data = $ ( target ) . data ( DATA _KEY ) ;
var config = data ? 'toggle' : $ ( this ) . data ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
Collapse . _jQueryInterface . call ( $ ( target ) , config ) ;
} ) ;
2012-12-07 18:37:32 -05:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-05-25 02:15:04 -04:00
2015-05-12 19:52:54 -04:00
$ . fn [ NAME ] = Collapse . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Collapse ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Collapse . _jQueryInterface ;
} ;
return Collapse ;
} ) ( jQuery ) ;
2013-05-25 02:15:04 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : dropdown . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-05-25 02:15:04 -04:00
2015-05-12 19:52:54 -04:00
var Dropdown = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'dropdown' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.dropdown' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var Event = {
2015-05-13 15:48:34 -04:00
HIDE : 'hide' + EVENT _KEY ,
HIDDEN : 'hidden' + EVENT _KEY ,
SHOW : 'show' + EVENT _KEY ,
SHOWN : 'shown' + EVENT _KEY ,
CLICK : 'click' + EVENT _KEY ,
CLICK _DATA _API : 'click' + EVENT _KEY + '' + DATA _API _KEY ,
KEYDOWN _DATA _API : 'keydown' + EVENT _KEY + '' + DATA _API _KEY
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
BACKDROP : 'dropdown-backdrop' ,
DISABLED : 'disabled' ,
OPEN : 'open'
} ;
var Selector = {
BACKDROP : '.dropdown-backdrop' ,
DATA _TOGGLE : '[data-toggle="dropdown"]' ,
FORM _CHILD : '.dropdown form' ,
ROLE _MENU : '[role="menu"]' ,
ROLE _LISTBOX : '[role="listbox"]' ,
NAVBAR _NAV : '.navbar-nav' ,
VISIBLE _ITEMS : '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Dropdown = ( function ( ) {
function Dropdown ( element ) {
_classCallCheck ( this , Dropdown ) ;
2015-05-13 15:48:34 -04:00
this . _element = element ;
this . _addEventListeners ( ) ;
2015-05-12 19:52:54 -04:00
}
2014-04-09 02:59:17 -04:00
2015-05-12 19:52:54 -04:00
_createClass ( Dropdown , [ {
key : 'toggle' ,
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
// public
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
value : function toggle ( ) {
if ( this . disabled || $ ( this ) . hasClass ( ClassName . DISABLED ) ) {
return ;
}
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
var parent = Dropdown . _getParentFromElement ( this ) ;
var isActive = $ ( parent ) . hasClass ( ClassName . OPEN ) ;
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
Dropdown . _clearMenus ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( isActive ) {
return false ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( 'ontouchstart' in document . documentElement && ! $ ( parent ) . closest ( Selector . NAVBAR _NAV ) . length ) {
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// if mobile we use a backdrop because click events don't delegate
var dropdown = document . createElement ( 'div' ) ;
dropdown . className = ClassName . BACKDROP ;
$ ( dropdown ) . insertBefore ( this ) ;
$ ( dropdown ) . on ( 'click' , Dropdown . _clearMenus ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var relatedTarget = { relatedTarget : this } ;
var showEvent = $ . Event ( Event . SHOW , relatedTarget ) ;
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
$ ( parent ) . trigger ( showEvent ) ;
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
if ( showEvent . isDefaultPrevented ( ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . focus ( ) ;
this . setAttribute ( 'aria-expanded' , 'true' ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( parent ) . toggleClass ( ClassName . OPEN ) ;
$ ( parent ) . trigger ( Event . SHOWN , relatedTarget ) ;
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
return false ;
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeData ( this . _element , DATA _KEY ) ;
$ ( this . _element ) . off ( EVENT _KEY ) ;
this . _element = null ;
}
} , {
key : '_addEventListeners' ,
// private
value : function _addEventListeners ( ) {
$ ( this . _element ) . on ( Event . CLICK , this . toggle ) ;
}
2015-05-12 19:52:54 -04:00
} ] , [ {
key : 'VERSION' ,
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
// getters
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : '_jQueryInterface' ,
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
// static
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
$ ( this ) . data ( DATA _KEY , data = new Dropdown ( this ) ) ;
}
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
if ( typeof config === 'string' ) {
data [ config ] . call ( this ) ;
}
} ) ;
}
} , {
key : '_clearMenus' ,
value : function _clearMenus ( event ) {
if ( event && event . which === 3 ) {
return ;
}
2012-05-17 03:23:11 -04:00
2015-05-12 19:52:54 -04:00
var backdrop = $ ( Selector . BACKDROP ) [ 0 ] ;
if ( backdrop ) {
backdrop . parentNode . removeChild ( backdrop ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var toggles = $ . makeArray ( $ ( Selector . DATA _TOGGLE ) ) ;
2013-05-16 15:50:06 -04:00
2015-05-12 19:52:54 -04:00
for ( var i = 0 ; i < toggles . length ; i ++ ) {
var _parent = Dropdown . _getParentFromElement ( toggles [ i ] ) ;
var relatedTarget = { relatedTarget : toggles [ i ] } ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( ! $ ( _parent ) . hasClass ( ClassName . OPEN ) ) {
continue ;
}
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( event && event . type === 'click' && /input|textarea/i . test ( event . target . tagName ) && $ . contains ( _parent , event . target ) ) {
continue ;
}
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
var hideEvent = $ . Event ( Event . HIDE , relatedTarget ) ;
$ ( _parent ) . trigger ( hideEvent ) ;
if ( hideEvent . isDefaultPrevented ( ) ) {
continue ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
toggles [ i ] . setAttribute ( 'aria-expanded' , 'false' ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( _parent ) . removeClass ( ClassName . OPEN ) . trigger ( Event . HIDDEN , relatedTarget ) ;
}
}
} , {
key : '_getParentFromElement' ,
value : function _getParentFromElement ( element ) {
var parent = undefined ;
var selector = Util . getSelectorFromElement ( element ) ;
if ( selector ) {
parent = $ ( selector ) [ 0 ] ;
}
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
return parent || element . parentNode ;
}
} , {
key : '_dataApiKeydownHandler' ,
value : function _dataApiKeydownHandler ( event ) {
if ( ! /(38|40|27|32)/ . test ( event . which ) || /input|textarea/i . test ( event . target . tagName ) ) {
return ;
}
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
if ( this . disabled || $ ( this ) . hasClass ( ClassName . DISABLED ) ) {
return ;
}
2013-05-16 15:50:06 -04:00
2015-05-12 19:52:54 -04:00
var parent = Dropdown . _getParentFromElement ( this ) ;
var isActive = $ ( parent ) . hasClass ( ClassName . OPEN ) ;
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
if ( ! isActive && event . which !== 27 || isActive && event . which === 27 ) {
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( event . which === 27 ) {
var toggle = $ ( parent ) . find ( Selector . DATA _TOGGLE ) [ 0 ] ;
$ ( toggle ) . trigger ( 'focus' ) ;
}
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( this ) . trigger ( 'click' ) ;
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var items = $ . makeArray ( $ ( Selector . VISIBLE _ITEMS ) ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
items = items . filter ( function ( item ) {
return item . offsetWidth || item . offsetHeight ;
} ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( ! items . length ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var index = items . indexOf ( event . target ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( event . which === 38 && index > 0 ) index -- ; // up
if ( event . which === 40 && index < items . length - 1 ) index ++ ; // down
if ( ! ~ index ) index = 0 ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
items [ index ] . focus ( ) ;
}
} ] ) ;
return Dropdown ;
} ) ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . KEYDOWN _DATA _API , Selector . DATA _TOGGLE , Dropdown . _dataApiKeydownHandler ) . on ( Event . KEYDOWN _DATA _API , Selector . ROLE _MENU , Dropdown . _dataApiKeydownHandler ) . on ( Event . KEYDOWN _DATA _API , Selector . ROLE _LISTBOX , Dropdown . _dataApiKeydownHandler ) . on ( Event . CLICK _DATA _API , Dropdown . _clearMenus ) . on ( Event . CLICK _DATA _API , Selector . DATA _TOGGLE , Dropdown . prototype . toggle ) . on ( Event . CLICK _DATA _API , Selector . FORM _CHILD , function ( e ) {
2015-05-12 19:52:54 -04:00
e . stopPropagation ( ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Dropdown . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Dropdown ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Dropdown . _jQueryInterface ;
} ;
return Dropdown ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : modal . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Modal = ( function ( $ ) {
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var NAME = 'modal' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.modal' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 300 ;
var BACKDROP _TRANSITION _DURATION = 150 ;
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var Default = {
2015-05-06 16:34:14 -04:00
backdrop : true ,
keyboard : true ,
show : true
2015-05-12 19:52:54 -04:00
} ;
var Event = {
2015-05-13 15:48:34 -04:00
HIDE : 'hide' + EVENT _KEY ,
HIDDEN : 'hidden' + EVENT _KEY ,
SHOW : 'show' + EVENT _KEY ,
SHOWN : 'shown' + EVENT _KEY ,
FOCUSIN : 'focusin' + EVENT _KEY ,
RESIZE : 'resize' + EVENT _KEY ,
CLICK _DISMISS : 'click.dismiss' + EVENT _KEY ,
KEYDOWN _DISMISS : 'keydown.dismiss' + EVENT _KEY ,
MOUSEUP _DISMISS : 'mouseup.dismiss' + EVENT _KEY ,
MOUSEDOWN _DISMISS : 'mousedown.dismiss' + EVENT _KEY ,
CLICK _DATA _API : 'click' + EVENT _KEY + '' + DATA _API _KEY
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
BACKDROP : 'modal-backdrop' ,
OPEN : 'modal-open' ,
FADE : 'fade' ,
IN : 'in'
} ;
var Selector = {
DIALOG : '.modal-dialog' ,
DATA _TOGGLE : '[data-toggle="modal"]' ,
DATA _DISMISS : '[data-dismiss="modal"]' ,
SCROLLBAR _MEASURER : 'modal-scrollbar-measure'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Modal = ( function ( ) {
function Modal ( element , config ) {
_classCallCheck ( this , Modal ) ;
this . _config = config ;
this . _element = element ;
this . _dialog = $ ( element ) . find ( Selector . DIALOG ) [ 0 ] ;
this . _backdrop = null ;
this . _isShown = false ;
this . _isBodyOverflowing = false ;
this . _ignoreBackdropClick = false ;
this . _originalBodyPadding = 0 ;
this . _scrollbarWidth = 0 ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
_createClass ( Modal , [ {
key : 'toggle' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// public
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function toggle ( relatedTarget ) {
return this . _isShown ? this . hide ( ) : this . show ( relatedTarget ) ;
}
} , {
key : 'show' ,
value : function show ( relatedTarget ) {
var _this7 = this ;
2014-03-16 21:44:58 -04:00
2015-05-12 19:52:54 -04:00
var showEvent = $ . Event ( Event . SHOW , {
relatedTarget : relatedTarget
} ) ;
2012-05-16 22:09:57 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . trigger ( showEvent ) ;
2013-08-17 17:25:04 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _isShown || showEvent . isDefaultPrevented ( ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _isShown = true ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _checkScrollbar ( ) ;
this . _setScrollbar ( ) ;
2012-05-16 22:09:57 -04:00
2015-05-12 19:52:54 -04:00
$ ( document . body ) . addClass ( ClassName . OPEN ) ;
2013-08-09 03:16:47 -04:00
2015-05-12 19:52:54 -04:00
this . _setEscapeEvent ( ) ;
this . _setResizeEvent ( ) ;
2014-11-04 18:36:52 -05:00
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . on ( Event . CLICK _DISMISS , Selector . DATA _DISMISS , $ . proxy ( this . hide , this ) ) ;
2012-04-15 20:03:33 -04:00
2015-05-13 15:48:34 -04:00
$ ( this . _dialog ) . on ( Event . MOUSEDOWN _DISMISS , function ( ) {
$ ( _this7 . _element ) . one ( Event . MOUSEUP _DISMISS , function ( event ) {
2015-05-12 19:52:54 -04:00
if ( $ ( event . target ) . is ( _this7 . _element ) ) {
that . _ignoreBackdropClick = true ;
}
} ) ;
} ) ;
2012-04-15 20:03:33 -04:00
2015-05-13 13:13:34 -04:00
this . _showBackdrop ( $ . proxy ( this . _showElement , this , relatedTarget ) ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : 'hide' ,
value : function hide ( event ) {
if ( event ) {
event . preventDefault ( ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var hideEvent = $ . Event ( Event . HIDE ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . trigger ( hideEvent ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( ! this . _isShown || hideEvent . isDefaultPrevented ( ) ) {
return ;
}
2014-03-16 21:44:58 -04:00
2015-05-12 19:52:54 -04:00
this . _isShown = false ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _setEscapeEvent ( ) ;
this . _setResizeEvent ( ) ;
2012-05-16 22:43:22 -04:00
2015-05-12 19:52:54 -04:00
$ ( document ) . off ( Event . FOCUSIN ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . removeClass ( ClassName . IN ) ;
2014-06-17 21:23:14 -04:00
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . off ( Event . CLICK _DISMISS ) ;
$ ( this . _dialog ) . off ( Event . MOUSEDOWN _DISMISS ) ;
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
if ( Util . supportsTransitionEnd ( ) && $ ( this . _element ) . hasClass ( ClassName . FADE ) ) {
2012-04-15 20:03:33 -04:00
2015-05-13 13:13:34 -04:00
$ ( this . _element ) . one ( Util . TRANSITION _END , $ . proxy ( this . _hideModal , this ) ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
2015-05-12 19:52:54 -04:00
} else {
this . _hideModal ( ) ;
}
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeData ( this . _element , DATA _KEY ) ;
$ ( window ) . off ( EVENT _KEY ) ;
$ ( document ) . off ( EVENT _KEY ) ;
$ ( this . _element ) . off ( EVENT _KEY ) ;
$ ( this . _backdrop ) . off ( EVENT _KEY ) ;
this . _config = null ;
this . _element = null ;
this . _dialog = null ;
this . _backdrop = null ;
this . _isShown = null ;
this . _isBodyOverflowing = null ;
this . _ignoreBackdropClick = null ;
this . _originalBodyPadding = null ;
this . _scrollbarWidth = null ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_showElement' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// private
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
value : function _showElement ( relatedTarget ) {
var _this8 = this ;
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
var transition = Util . supportsTransitionEnd ( ) && $ ( this . _element ) . hasClass ( ClassName . FADE ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( ! this . _element . parentNode || this . _element . parentNode . nodeType !== Node . ELEMENT _NODE ) {
// don't move modals dom position
document . body . appendChild ( this . _element ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
this . _element . style . display = 'block' ;
this . _element . scrollTop = 0 ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( transition ) {
Util . reflow ( this . _element ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . addClass ( ClassName . IN ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _enforceFocus ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var shownEvent = $ . Event ( Event . SHOWN , {
relatedTarget : relatedTarget
} ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var transitionComplete = function transitionComplete ( ) {
_this8 . _element . focus ( ) ;
$ ( _this8 . _element ) . trigger ( shownEvent ) ;
} ;
2013-02-07 22:45:42 -05:00
2015-05-12 19:52:54 -04:00
if ( transition ) {
$ ( this . _dialog ) . one ( Util . TRANSITION _END , transitionComplete ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
} else {
transitionComplete ( ) ;
}
}
} , {
key : '_enforceFocus' ,
value : function _enforceFocus ( ) {
var _this9 = this ;
$ ( document ) . off ( Event . FOCUSIN ) // guard against infinite focus loop
. on ( Event . FOCUSIN , function ( event ) {
if ( _this9 . _element !== event . target && ! $ ( _this9 . _element ) . has ( event . target ) . length ) {
_this9 . _element . focus ( ) ;
}
} ) ;
}
} , {
key : '_setEscapeEvent' ,
value : function _setEscapeEvent ( ) {
var _this10 = this ;
if ( this . _isShown && this . _config . keyboard ) {
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . on ( Event . KEYDOWN _DISMISS , function ( event ) {
2015-05-12 19:52:54 -04:00
if ( event . which === 27 ) {
_this10 . hide ( ) ;
}
} ) ;
} else if ( ! this . _isShown ) {
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . off ( Event . KEYDOWN _DISMISS ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
}
} , {
key : '_setResizeEvent' ,
value : function _setResizeEvent ( ) {
if ( this . _isShown ) {
2015-05-13 13:13:34 -04:00
$ ( window ) . on ( Event . RESIZE , $ . proxy ( this . _handleUpdate , this ) ) ;
2015-05-12 19:52:54 -04:00
} else {
$ ( window ) . off ( Event . RESIZE ) ;
}
}
} , {
key : '_hideModal' ,
value : function _hideModal ( ) {
var _this11 = this ;
this . _element . style . display = 'none' ;
this . _showBackdrop ( function ( ) {
$ ( document . body ) . removeClass ( ClassName . OPEN ) ;
_this11 . _resetAdjustments ( ) ;
_this11 . _resetScrollbar ( ) ;
$ ( _this11 . _element ) . trigger ( Event . HIDDEN ) ;
} ) ;
}
} , {
key : '_removeBackdrop' ,
value : function _removeBackdrop ( ) {
if ( this . _backdrop ) {
$ ( this . _backdrop ) . remove ( ) ;
this . _backdrop = null ;
}
}
} , {
key : '_showBackdrop' ,
value : function _showBackdrop ( callback ) {
var _this12 = this ;
var animate = $ ( this . _element ) . hasClass ( ClassName . FADE ) ? ClassName . FADE : '' ;
if ( this . _isShown && this . _config . backdrop ) {
var doAnimate = Util . supportsTransitionEnd ( ) && animate ;
this . _backdrop = document . createElement ( 'div' ) ;
this . _backdrop . className = ClassName . BACKDROP ;
if ( animate ) {
$ ( this . _backdrop ) . addClass ( animate ) ;
}
$ ( this . _backdrop ) . appendTo ( this . $body ) ;
2015-05-13 15:48:34 -04:00
$ ( this . _element ) . on ( Event . CLICK _DISMISS , function ( event ) {
2015-05-12 19:52:54 -04:00
if ( _this12 . _ignoreBackdropClick ) {
_this12 . _ignoreBackdropClick = false ;
return ;
}
if ( event . target !== event . currentTarget ) {
return ;
}
if ( _this12 . _config . backdrop === 'static' ) {
_this12 . _element . focus ( ) ;
} else {
_this12 . hide ( ) ;
}
} ) ;
if ( doAnimate ) {
Util . reflow ( this . _backdrop ) ;
}
$ ( this . _backdrop ) . addClass ( ClassName . IN ) ;
if ( ! callback ) {
return ;
}
if ( ! doAnimate ) {
callback ( ) ;
return ;
}
$ ( this . _backdrop ) . one ( Util . TRANSITION _END , callback ) . emulateTransitionEnd ( BACKDROP _TRANSITION _DURATION ) ;
} else if ( ! this . _isShown && this . _backdrop ) {
$ ( this . _backdrop ) . removeClass ( ClassName . IN ) ;
var callbackRemove = function callbackRemove ( ) {
_this12 . _removeBackdrop ( ) ;
if ( callback ) {
callback ( ) ;
}
} ;
if ( Util . supportsTransitionEnd ( ) && $ ( this . _element ) . hasClass ( ClassName . FADE ) ) {
$ ( this . _backdrop ) . one ( Util . TRANSITION _END , callbackRemove ) . emulateTransitionEnd ( BACKDROP _TRANSITION _DURATION ) ;
} else {
callbackRemove ( ) ;
}
} else if ( callback ) {
callback ( ) ;
}
}
} , {
key : '_handleUpdate' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js
// ----------------------------------------------------------------------
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function _handleUpdate ( ) {
this . _adjustDialog ( ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : '_adjustDialog' ,
value : function _adjustDialog ( ) {
var isModalOverflowing = this . _element . scrollHeight > document . documentElement . clientHeight ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( ! this . _isBodyOverflowing && isModalOverflowing ) {
this . _element . style . paddingLeft = this . _scrollbarWidth + 'px' ;
}
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _isBodyOverflowing && ! isModalOverflowing ) {
this . _element . style . paddingRight = this . _scrollbarWidth + 'px' ;
}
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : '_resetAdjustments' ,
value : function _resetAdjustments ( ) {
this . _element . style . paddingLeft = '' ;
this . _element . style . paddingRight = '' ;
}
} , {
key : '_checkScrollbar' ,
value : function _checkScrollbar ( ) {
var fullWindowWidth = window . innerWidth ;
if ( ! fullWindowWidth ) {
// workaround for missing window.innerWidth in IE8
var documentElementRect = document . documentElement . getBoundingClientRect ( ) ;
fullWindowWidth = documentElementRect . right - Math . abs ( documentElementRect . left ) ;
}
this . _isBodyOverflowing = document . body . clientWidth < fullWindowWidth ;
this . _scrollbarWidth = this . _getScrollbarWidth ( ) ;
}
} , {
key : '_setScrollbar' ,
value : function _setScrollbar ( ) {
var bodyPadding = parseInt ( $ ( document . body ) . css ( 'padding-right' ) || 0 , 10 ) ;
2013-02-28 23:39:07 -05:00
2015-05-12 19:52:54 -04:00
this . _originalBodyPadding = document . body . style . paddingRight || '' ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _isBodyOverflowing ) {
document . body . style . paddingRight = bodyPadding + this . _scrollbarWidth + 'px' ;
}
}
} , {
key : '_resetScrollbar' ,
value : function _resetScrollbar ( ) {
document . body . style . paddingRight = this . _originalBodyPadding ;
}
} , {
key : '_getScrollbarWidth' ,
value : function _getScrollbarWidth ( ) {
// thx d.walsh
var scrollDiv = document . createElement ( 'div' ) ;
scrollDiv . className = Selector . SCROLLBAR _MEASURER ;
document . body . appendChild ( scrollDiv ) ;
var scrollbarWidth = scrollDiv . offsetWidth - scrollDiv . clientWidth ;
document . body . removeChild ( scrollDiv ) ;
return scrollbarWidth ;
}
} ] , [ {
key : 'VERSION' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// getters
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : '_jQueryInterface' ,
// static
value : function _jQueryInterface ( config , relatedTarget ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
var _config = $ . extend ( { } , Modal . Default , $ ( this ) . data ( ) , typeof config === 'object' && config ) ;
if ( ! data ) {
data = new Modal ( this , _config ) ;
$ ( this ) . data ( DATA _KEY , data ) ;
}
if ( typeof config === 'string' ) {
data [ config ] ( relatedTarget ) ;
} else if ( _config . show ) {
data . show ( relatedTarget ) ;
}
} ) ;
}
} ] ) ;
2013-07-24 23:10:16 -04:00
2015-05-12 19:52:54 -04:00
return Modal ;
} ) ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-05-27 15:48:16 -04:00
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . CLICK _DATA _API , Selector . DATA _TOGGLE , function ( event ) {
2015-05-12 19:52:54 -04:00
var _this13 = this ;
2013-08-10 17:09:05 -04:00
2015-05-12 19:52:54 -04:00
var target = undefined ;
var selector = Util . getSelectorFromElement ( this ) ;
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
if ( selector ) {
target = $ ( selector ) [ 0 ] ;
2015-05-06 16:34:14 -04:00
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
var config = $ ( target ) . data ( DATA _KEY ) ? 'toggle' : $ . extend ( { } , $ ( target ) . data ( ) , $ ( this ) . data ( ) ) ;
2014-09-08 02:04:10 -04:00
2015-05-12 19:52:54 -04:00
if ( this . tagName === 'A' ) {
event . preventDefault ( ) ;
2014-04-30 22:35:47 -04:00
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var $target = $ ( target ) . one ( Event . SHOW , function ( showEvent ) {
if ( showEvent . isDefaultPrevented ( ) ) {
// only register focus restorer if modal will actually get shown
return ;
}
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
$target . one ( Event . HIDDEN , function ( ) {
if ( $ ( _this13 ) . is ( ':visible' ) ) {
_this13 . focus ( ) ;
}
} ) ;
} ) ;
Modal . _jQueryInterface . call ( $ ( target ) , config , this ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Modal . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Modal ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Modal . _jQueryInterface ;
} ;
return Modal ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : scrollspy . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var ScrollSpy = ( function ( $ ) {
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var NAME = 'scrollspy' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.scrollspy' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
var Default = {
offset : 10
} ;
var Event = {
2015-05-13 15:48:34 -04:00
ACTIVATE : 'activate' + EVENT _KEY ,
SCROLL : 'scroll' + EVENT _KEY ,
LOAD _DATA _API : 'load' + EVENT _KEY + '' + DATA _API _KEY
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
DROPDOWN _MENU : 'dropdown-menu' ,
ACTIVE : 'active'
} ;
var Selector = {
DATA _SPY : '[data-spy="scroll"]' ,
ACTIVE : '.active' ,
LI _DROPDOWN : 'li.dropdown' ,
LI : 'li'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var ScrollSpy = ( function ( ) {
function ScrollSpy ( element , config ) {
_classCallCheck ( this , ScrollSpy ) ;
2015-05-13 15:48:34 -04:00
this . _element = element ;
2015-05-12 19:52:54 -04:00
this . _scrollElement = element . tagName === 'BODY' ? window : element ;
this . _config = $ . extend ( { } , Default , config ) ;
this . _selector = '' + ( this . _config . target || '' ) + ' .nav li > a' ;
this . _offsets = [ ] ;
this . _targets = [ ] ;
this . _activeTarget = null ;
this . _scrollHeight = 0 ;
2015-05-13 13:13:34 -04:00
$ ( this . _scrollElement ) . on ( Event . SCROLL , $ . proxy ( this . _process , this ) ) ;
2015-05-12 19:52:54 -04:00
this . refresh ( ) ;
this . _process ( ) ;
2015-05-06 16:34:14 -04:00
}
2012-12-26 10:36:07 -05:00
2015-05-12 19:52:54 -04:00
_createClass ( ScrollSpy , [ {
key : 'refresh' ,
2013-07-24 02:50:23 -04:00
2015-05-12 19:52:54 -04:00
// public
2013-07-24 02:50:23 -04:00
2015-05-12 19:52:54 -04:00
value : function refresh ( ) {
var _this14 = this ;
2013-07-24 02:50:23 -04:00
2015-05-12 19:52:54 -04:00
var offsetMethod = 'offset' ;
var offsetBase = 0 ;
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _scrollElement !== this . _scrollElement . window ) {
offsetMethod = 'position' ;
offsetBase = this . _getScrollTop ( ) ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
this . _offsets = [ ] ;
this . _targets = [ ] ;
this . _scrollHeight = this . _getScrollHeight ( ) ;
var targets = $ . makeArray ( $ ( this . _selector ) ) ;
targets . map ( function ( element ) {
var target = undefined ;
var targetSelector = Util . getSelectorFromElement ( element ) ;
if ( targetSelector ) {
target = $ ( targetSelector ) [ 0 ] ;
}
if ( target && ( target . offsetWidth || target . offsetHeight ) ) {
// todo (fat): remove sketch reliance on jQuery position/offset
return [ $ ( target ) [ offsetMethod ] ( ) . top + offsetBase , targetSelector ] ;
}
} ) . filter ( function ( item ) {
return item ;
} ) . sort ( function ( a , b ) {
return a [ 0 ] - b [ 0 ] ;
} ) . forEach ( function ( item ) {
_this14 . _offsets . push ( item [ 0 ] ) ;
_this14 . _targets . push ( item [ 1 ] ) ;
} ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeData ( this . _element , DATA _KEY ) ;
$ ( this . _scrollElement ) . off ( EVENT _KEY ) ;
this . _element = null ;
this . _scrollElement = null ;
this . _config = null ;
this . _selector = null ;
this . _offsets = null ;
this . _targets = null ;
this . _activeTarget = null ;
this . _scrollHeight = null ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_getScrollTop' ,
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
// private
2013-12-25 23:04:49 -05:00
2015-05-12 19:52:54 -04:00
value : function _getScrollTop ( ) {
return this . _scrollElement === window ? this . _scrollElement . scrollY : this . _scrollElement . scrollTop ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : '_getScrollHeight' ,
value : function _getScrollHeight ( ) {
return this . _scrollElement . scrollHeight || Math . max ( document . body . scrollHeight , document . documentElement . scrollHeight ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} , {
key : '_process' ,
value : function _process ( ) {
var scrollTop = this . _getScrollTop ( ) + this . _config . offset ;
var scrollHeight = this . _getScrollHeight ( ) ;
var maxScroll = this . _config . offset + scrollHeight - this . _scrollElement . offsetHeight ;
if ( this . _scrollHeight !== scrollHeight ) {
this . refresh ( ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( scrollTop >= maxScroll ) {
var target = this . _targets [ this . _targets . length - 1 ] ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _activeTarget !== target ) {
this . _activate ( target ) ;
}
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _activeTarget && scrollTop < this . _offsets [ 0 ] ) {
this . _activeTarget = null ;
this . _clear ( ) ;
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
for ( var i = this . _offsets . length ; i -- ; ) {
var isActiveTarget = this . _activeTarget !== this . _targets [ i ] && scrollTop >= this . _offsets [ i ] && ( this . _offsets [ i + 1 ] === undefined || scrollTop < this . _offsets [ i + 1 ] ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( isActiveTarget ) {
this . _activate ( this . _targets [ i ] ) ;
}
}
}
} , {
key : '_activate' ,
value : function _activate ( target ) {
this . _activeTarget = target ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _clear ( ) ;
2014-07-06 18:08:37 -04:00
2015-05-12 19:52:54 -04:00
var selector = '' + this . _selector + '[data-target="' + target + '"],' + ( '' + this . _selector + '[href="' + target + '"]' ) ;
2014-07-06 18:08:37 -04:00
2015-05-12 19:52:54 -04:00
// todo (fat): getting all the raw li's up the tree is not great.
var parentListItems = $ ( selector ) . parents ( Selector . LI ) ;
2014-07-06 18:08:37 -04:00
2015-05-12 19:52:54 -04:00
for ( var i = parentListItems . length ; i -- ; ) {
$ ( parentListItems [ i ] ) . addClass ( ClassName . ACTIVE ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var itemParent = parentListItems [ i ] . parentNode ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( itemParent && $ ( itemParent ) . hasClass ( ClassName . DROPDOWN _MENU ) ) {
var closestDropdown = $ ( itemParent ) . closest ( Selector . LI _DROPDOWN ) [ 0 ] ;
$ ( closestDropdown ) . addClass ( ClassName . ACTIVE ) ;
}
}
2014-03-24 22:08:05 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _scrollElement ) . trigger ( Event . ACTIVATE , {
relatedTarget : target
} ) ;
}
} , {
key : '_clear' ,
value : function _clear ( ) {
var activeParents = $ ( this . _selector ) . parentsUntil ( this . _config . target , Selector . ACTIVE ) ;
2014-03-24 22:08:05 -04:00
2015-05-12 19:52:54 -04:00
for ( var i = activeParents . length ; i -- ; ) {
$ ( activeParents [ i ] ) . removeClass ( ClassName . ACTIVE ) ;
}
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} ] , [ {
key : 'VERSION' ,
2013-08-04 20:22:49 -04:00
2015-05-12 19:52:54 -04:00
// getters
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : '_jQueryInterface' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// static
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
var _config = typeof config === 'object' && config || null ;
2012-06-21 02:46:29 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
data = new ScrollSpy ( this , _config ) ;
$ ( this ) . data ( DATA _KEY , data ) ;
}
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
if ( typeof config === 'string' ) {
data [ config ] ( ) ;
}
} ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} ] ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
return ScrollSpy ;
} ) ( ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-05-16 20:44:50 -04:00
2015-05-13 15:48:34 -04:00
$ ( window ) . on ( Event . LOAD _DATA _API , function ( ) {
2015-05-12 19:52:54 -04:00
var scrollSpys = $ . makeArray ( $ ( Selector . DATA _SPY ) ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
for ( var i = scrollSpys . length ; i -- ; ) {
var $spy = $ ( scrollSpys [ i ] ) ;
ScrollSpy . _jQueryInterface . call ( $spy , $spy . data ( ) ) ;
2015-05-06 16:34:14 -04:00
}
2015-05-12 19:52:54 -04:00
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = ScrollSpy . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = ScrollSpy ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return ScrollSpy . _jQueryInterface ;
} ;
return ScrollSpy ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : tab . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
var Tab = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var NAME = 'tab' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.tab' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
var DATA _API _KEY = '.data-api' ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 150 ;
var Event = {
2015-05-13 15:48:34 -04:00
HIDE : 'hide' + EVENT _KEY ,
HIDDEN : 'hidden' + EVENT _KEY ,
SHOW : 'show' + EVENT _KEY ,
SHOWN : 'shown' + EVENT _KEY ,
CLICK _DATA _API : 'click' + EVENT _KEY + '' + DATA _API _KEY
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
DROPDOWN _MENU : 'dropdown-menu' ,
ACTIVE : 'active' ,
FADE : 'fade' ,
IN : 'in'
} ;
var Selector = {
A : 'a' ,
LI : 'li' ,
LI _DROPDOWN : 'li.dropdown' ,
UL : 'ul:not(.dropdown-menu)' ,
FADE _CHILD : '> .fade' ,
ACTIVE : '.active' ,
ACTIVE _CHILD : '> .active' ,
DATA _TOGGLE : '[data-toggle="tab"], [data-toggle="pill"]' ,
DROPDOWN _ACTIVE _CHILD : '> .dropdown-menu > .active'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Tab = ( function ( ) {
function Tab ( element ) {
_classCallCheck ( this , Tab ) ;
this . _element = element ;
2015-01-03 16:58:44 -05:00
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
_createClass ( Tab , [ {
key : 'show' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// public
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function show ( ) {
var _this15 = this ;
2014-06-10 21:11:26 -04:00
2015-05-12 19:52:54 -04:00
if ( this . _element . parentNode && this . _element . parentNode . nodeType == Node . ELEMENT _NODE && $ ( this . _element ) . parent ( ) . hasClass ( ClassName . ACTIVE ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var target = undefined ;
var previous = undefined ;
var ulElement = $ ( this . _element ) . closest ( Selector . UL ) [ 0 ] ;
var selector = Util . getSelectorFromElement ( this . _element ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( ulElement ) {
previous = $ . makeArray ( $ ( ulElement ) . find ( Selector . ACTIVE ) ) ;
previous = previous [ previous . length - 1 ] ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( previous ) {
previous = $ ( previous ) . find ( Selector . A ) [ 0 ] ;
}
}
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
var hideEvent = $ . Event ( Event . HIDE , {
relatedTarget : this . _element
} ) ;
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
var showEvent = $ . Event ( Event . SHOW , {
relatedTarget : previous
} ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( previous ) {
$ ( previous ) . trigger ( hideEvent ) ;
}
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . _element ) . trigger ( showEvent ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( showEvent . isDefaultPrevented ( ) || hideEvent . isDefaultPrevented ( ) ) {
return ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( selector ) {
target = $ ( selector ) [ 0 ] ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
this . _activate ( $ ( this . _element ) . closest ( Selector . LI ) [ 0 ] , ulElement ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var complete = function complete ( ) {
var hiddenEvent = $ . Event ( Event . HIDDEN , {
relatedTarget : _this15 . _element
} ) ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
var shownEvent = $ . Event ( Event . SHOWN , {
relatedTarget : previous
} ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
$ ( previous ) . trigger ( hiddenEvent ) ;
$ ( _this15 . _element ) . trigger ( shownEvent ) ;
} ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
if ( target ) {
this . _activate ( target , target . parentNode , complete ) ;
} else {
complete ( ) ;
}
}
2015-05-13 15:48:34 -04:00
} , {
key : 'dispose' ,
value : function dispose ( ) {
$ . removeClass ( this . _element , DATA _KEY ) ;
this . _element = null ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_activate' ,
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
// private
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
value : function _activate ( element , container , callback ) {
var active = $ ( container ) . find ( Selector . ACTIVE _CHILD ) [ 0 ] ;
var isTransitioning = callback && Util . supportsTransitionEnd ( ) && ( active && $ ( active ) . hasClass ( ClassName . FADE ) || ! ! $ ( container ) . find ( Selector . FADE _CHILD ) [ 0 ] ) ;
2013-08-04 20:22:49 -04:00
2015-05-13 13:13:34 -04:00
var complete = $ . proxy ( this . _transitionComplete , this , element , active , isTransitioning , callback ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( active && isTransitioning ) {
$ ( active ) . one ( Util . TRANSITION _END , complete ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
} else {
complete ( ) ;
}
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
if ( active ) {
$ ( active ) . removeClass ( ClassName . IN ) ;
}
}
} , {
key : '_transitionComplete' ,
value : function _transitionComplete ( element , active , isTransitioning , callback ) {
if ( active ) {
$ ( active ) . removeClass ( ClassName . ACTIVE ) ;
var dropdownChild = $ ( active ) . find ( Selector . DROPDOWN _ACTIVE _CHILD ) [ 0 ] ;
if ( dropdownChild ) {
$ ( dropdownChild ) . removeClass ( ClassName . ACTIVE ) ;
}
var activeToggle = $ ( active ) . find ( Selector . DATA _TOGGLE ) [ 0 ] ;
if ( activeToggle ) {
activeToggle . setAttribute ( 'aria-expanded' , false ) ;
}
}
2012-04-18 16:35:14 -04:00
2015-05-12 19:52:54 -04:00
$ ( element ) . addClass ( ClassName . ACTIVE ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var elementToggle = $ ( element ) . find ( Selector . DATA _TOGGLE ) [ 0 ] ;
if ( elementToggle ) {
elementToggle . setAttribute ( 'aria-expanded' , true ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( isTransitioning ) {
Util . reflow ( element ) ;
$ ( element ) . addClass ( ClassName . IN ) ;
} else {
$ ( element ) . removeClass ( ClassName . FADE ) ;
}
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
if ( element . parentNode && $ ( element . parentNode ) . hasClass ( ClassName . DROPDOWN _MENU ) ) {
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var dropdownElement = $ ( element ) . closest ( Selector . LI _DROPDOWN ) [ 0 ] ;
if ( dropdownElement ) {
$ ( dropdownElement ) . addClass ( ClassName . ACTIVE ) ;
}
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
elementToggle = $ ( element ) . find ( Selector . DATA _TOGGLE ) [ 0 ] ;
if ( elementToggle ) {
elementToggle . setAttribute ( 'aria-expanded' , true ) ;
}
}
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
if ( callback ) {
callback ( ) ;
}
}
} ] , [ {
key : 'VERSION' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// getters
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : '_jQueryInterface' ,
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
// static
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var $this = $ ( this ) ;
var data = $this . data ( DATA _KEY ) ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
data = data = new Tab ( this ) ;
$this . data ( DATA _KEY , data ) ;
}
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
if ( typeof config === 'string' ) {
data [ config ] ( ) ;
}
} ) ;
}
} ] ) ;
return Tab ;
} ) ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Data Api implementation
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-05-13 15:48:34 -04:00
$ ( document ) . on ( Event . CLICK _DATA _API , Selector . DATA _TOGGLE , function ( event ) {
2015-05-12 19:52:54 -04:00
event . preventDefault ( ) ;
Tab . _jQueryInterface . call ( $ ( this ) , 'show' ) ;
} ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Tab . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Tab ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Tab . _jQueryInterface ;
} ;
return Tab ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : tooltip . js
2013-12-18 18:28:08 -05:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
2015-05-12 19:52:54 -04:00
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var Tooltip = ( function ( $ ) {
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var NAME = 'tooltip' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.tooltip' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
var TRANSITION _DURATION = 150 ;
var CLASS _PREFIX = 'bs-tether' ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var Default = {
animation : true ,
template : '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div></div>' ,
trigger : 'hover focus' ,
title : '' ,
delay : 0 ,
html : false ,
selector : false ,
placement : 'top' ,
offset : '0 0' ,
constraints : null
} ;
var AttachmentMap = {
TOP : 'bottom center' ,
RIGHT : 'middle left' ,
BOTTOM : 'top center' ,
LEFT : 'middle right'
} ;
var HoverState = {
IN : 'in' ,
OUT : 'out'
} ;
var Event = {
2015-05-13 15:48:34 -04: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
2015-05-12 19:52:54 -04:00
} ;
var ClassName = {
FADE : 'fade' ,
IN : 'in'
} ;
var Selector = {
TOOLTIP : '.tooltip' ,
TOOLTIP _INNER : '.tooltip-inner'
} ;
var TetherClass = {
element : false ,
enabled : false
} ;
var Trigger = {
HOVER : 'hover' ,
FOCUS : 'focus' ,
CLICK : 'click' ,
MANUAL : 'manual'
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Tooltip = ( function ( ) {
function Tooltip ( element , config ) {
_classCallCheck ( this , Tooltip ) ;
// private
this . _isEnabled = true ;
this . _timeout = 0 ;
this . _hoverState = '' ;
this . _activeTrigger = { } ;
this . _tether = null ;
// protected
this . element = element ;
this . config = this . _getConfig ( config ) ;
this . tip = null ;
this . _setListeners ( ) ;
2014-06-17 21:23:14 -04:00
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
_createClass ( Tooltip , [ {
key : 'enable' ,
2014-10-25 22:17:19 -04:00
2015-05-12 19:52:54 -04:00
// public
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
value : function enable ( ) {
this . _isEnabled = true ;
}
} , {
key : 'disable' ,
value : function disable ( ) {
this . _isEnabled = false ;
}
} , {
key : 'toggleEnabled' ,
value : function toggleEnabled ( ) {
this . _isEnabled = ! this . _isEnabled ;
}
} , {
key : 'toggle' ,
value : function toggle ( event ) {
var context = this ;
var dataKey = this . constructor . DATA _KEY ;
if ( event ) {
context = $ ( event . currentTarget ) . data ( dataKey ) ;
if ( ! context ) {
context = new this . constructor ( event . currentTarget , this . _getDelegateConfig ( ) ) ;
$ ( event . currentTarget ) . data ( dataKey , context ) ;
}
context . _activeTrigger . click = ! context . _activeTrigger . click ;
if ( context . _isWithActiveTrigger ( ) ) {
context . _enter ( null , context ) ;
} else {
context . _leave ( null , context ) ;
}
} else {
$ ( context . getTipElement ( ) ) . hasClass ( ClassName . IN ) ? context . _leave ( null , context ) : context . _enter ( null , context ) ;
}
}
} , {
2015-05-13 15:48:34 -04:00
key : 'dispose' ,
value : function dispose ( ) {
2015-05-12 19:52:54 -04:00
clearTimeout ( this . _timeout ) ;
2013-05-04 10:55:52 -04:00
2015-05-13 15:48:34 -04:00
this . cleanupTether ( ) ;
2013-07-26 04:07:56 -04:00
2015-05-13 15:48:34 -04:00
$ . removeData ( this . element , this . constructor . DATA _KEY ) ;
$ ( this . element ) . off ( this . constructor . EVENT _KEY ) ;
if ( this . tip ) {
$ ( this . tip ) . remove ( ) ;
}
this . _isEnabled = null ;
this . _timeout = null ;
this . _hoverState = null ;
this . _activeTrigger = null ;
this . _tether = null ;
this . element = null ;
this . config = null ;
this . tip = null ;
2015-05-12 19:52:54 -04:00
}
} , {
key : 'show' ,
value : function show ( ) {
2015-05-13 15:48:34 -04:00
var _this16 = this ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
var showEvent = $ . Event ( this . constructor . Event . SHOW ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
if ( this . isWithContent ( ) && this . _isEnabled ) {
$ ( this . element ) . trigger ( showEvent ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
var isInTheDom = $ . contains ( this . element . ownerDocument . documentElement , this . element ) ;
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
if ( showEvent . isDefaultPrevented ( ) || ! isInTheDom ) {
return ;
}
2014-06-17 21:23:14 -04:00
2015-05-12 19:52:54 -04:00
var tip = this . getTipElement ( ) ;
var tipId = Util . getUID ( this . constructor . NAME ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
tip . setAttribute ( 'id' , tipId ) ;
this . element . setAttribute ( 'aria-describedby' , tipId ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
this . setContent ( ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
if ( this . config . animation ) {
$ ( tip ) . addClass ( ClassName . FADE ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var placement = typeof this . config . placement === 'function' ? this . config . placement . call ( this , tip , this . element ) : this . config . placement ;
2014-06-10 21:11:26 -04:00
2015-05-12 19:52:54 -04:00
var attachment = this . _getAttachment ( placement ) ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . data ( this . constructor . DATA _KEY , this ) . appendTo ( document . body ) ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
$ ( this . element ) . trigger ( this . constructor . Event . INSERTED ) ;
2014-05-13 00:19:01 -04:00
2015-05-12 19:52:54 -04:00
this . _tether = new Tether ( {
element : tip ,
target : this . element ,
attachment : attachment ,
classes : TetherClass ,
classPrefix : CLASS _PREFIX ,
offset : this . config . offset ,
constraints : this . config . constraints
} ) ;
2014-08-02 16:05:11 -04:00
2015-05-12 19:52:54 -04:00
Util . reflow ( tip ) ;
this . _tether . position ( ) ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . addClass ( ClassName . IN ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
var complete = function complete ( ) {
2015-05-13 15:48:34 -04:00
var prevHoverState = _this16 . _hoverState ;
_this16 . _hoverState = null ;
2012-04-15 20:03:33 -04:00
2015-05-13 15:48:34 -04:00
$ ( _this16 . element ) . trigger ( _this16 . constructor . Event . SHOWN ) ;
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
if ( prevHoverState === HoverState . OUT ) {
2015-05-13 15:48:34 -04:00
_this16 . _leave ( null , _this16 ) ;
2015-05-12 19:52:54 -04:00
}
} ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
Util . supportsTransitionEnd ( ) && $ ( this . tip ) . hasClass ( ClassName . FADE ) ? $ ( this . tip ) . one ( Util . TRANSITION _END , complete ) . emulateTransitionEnd ( Tooltip . _TRANSITION _DURATION ) : complete ( ) ;
}
}
} , {
key : 'hide' ,
value : function hide ( callback ) {
2015-05-13 15:48:34 -04:00
var _this17 = this ;
2015-05-12 19:52:54 -04:00
var tip = this . getTipElement ( ) ;
var hideEvent = $ . Event ( this . constructor . Event . HIDE ) ;
var complete = function complete ( ) {
2015-05-13 15:48:34 -04:00
if ( _this17 . _hoverState !== HoverState . IN && tip . parentNode ) {
2015-05-12 19:52:54 -04:00
tip . parentNode . removeChild ( tip ) ;
}
2015-05-13 15:48:34 -04:00
_this17 . element . removeAttribute ( 'aria-describedby' ) ;
$ ( _this17 . element ) . trigger ( _this17 . constructor . Event . HIDDEN ) ;
_this17 . cleanupTether ( ) ;
2015-05-12 19:52:54 -04:00
if ( callback ) {
callback ( ) ;
}
} ;
$ ( this . element ) . trigger ( hideEvent ) ;
if ( hideEvent . isDefaultPrevented ( ) ) {
return ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . removeClass ( ClassName . IN ) ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
if ( Util . supportsTransitionEnd ( ) && $ ( this . tip ) . hasClass ( ClassName . FADE ) ) {
2013-05-16 20:44:50 -04:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . one ( Util . TRANSITION _END , complete ) . emulateTransitionEnd ( TRANSITION _DURATION ) ;
} else {
complete ( ) ;
}
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
this . _hoverState = '' ;
}
} , {
key : 'isWithContent' ,
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
// protected
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
value : function isWithContent ( ) {
return ! ! this . getTitle ( ) ;
}
} , {
key : 'getTipElement' ,
value : function getTipElement ( ) {
return this . tip = this . tip || $ ( this . config . template ) [ 0 ] ;
}
} , {
key : 'setContent' ,
value : function setContent ( ) {
var tip = this . getTipElement ( ) ;
var title = this . getTitle ( ) ;
var method = this . config . html ? 'innerHTML' : 'innerText' ;
2012-04-15 20:03:33 -04:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . find ( Selector . TOOLTIP _INNER ) [ 0 ] [ method ] = title ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . removeClass ( ClassName . FADE ) . removeClass ( ClassName . IN ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
this . cleanupTether ( ) ;
}
} , {
key : 'getTitle' ,
value : function getTitle ( ) {
var title = this . element . getAttribute ( 'data-original-title' ) ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( ! title ) {
title = typeof this . config . title === 'function' ? this . config . title . call ( this . element ) : this . config . title ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
return title ;
}
} , {
key : 'cleanupTether' ,
value : function cleanupTether ( ) {
if ( this . _tether ) {
this . _tether . destroy ( ) ;
// clean up after tether's junk classes
// remove after they fix issue
// (https://github.com/HubSpot/tether/issues/36)
$ ( this . element ) . removeClass ( this . _removeTetherClasses ) ;
$ ( this . tip ) . removeClass ( this . _removeTetherClasses ) ;
}
}
} , {
key : '_getAttachment' ,
2014-06-24 12:00:14 -04:00
2015-05-12 19:52:54 -04:00
// private
2014-10-28 23:56:02 -04:00
2015-05-12 19:52:54 -04:00
value : function _getAttachment ( placement ) {
return AttachmentMap [ placement . toUpperCase ( ) ] ;
}
} , {
key : '_setListeners' ,
value : function _setListeners ( ) {
2015-05-13 15:48:34 -04:00
var _this18 = this ;
2015-05-12 19:52:54 -04:00
var triggers = this . config . trigger . split ( ' ' ) ;
triggers . forEach ( function ( trigger ) {
if ( trigger === 'click' ) {
2015-05-13 15:48:34 -04:00
$ ( _this18 . element ) . on ( _this18 . constructor . Event . CLICK , _this18 . config . selector , $ . proxy ( _this18 . toggle , _this18 ) ) ;
2015-05-12 19:52:54 -04:00
} else if ( trigger !== Trigger . MANUAL ) {
2015-05-13 15:48:34 -04:00
var eventIn = trigger == Trigger . HOVER ? _this18 . constructor . Event . MOUSEENTER : _this18 . constructor . Event . FOCUSIN ;
var eventOut = trigger == Trigger . HOVER ? _this18 . constructor . Event . MOUSELEAVE : _this18 . constructor . Event . FOCUSOUT ;
2015-05-12 19:52:54 -04:00
2015-05-13 15:48:34 -04:00
$ ( _this18 . element ) . on ( eventIn , _this18 . config . selector , $ . proxy ( _this18 . _enter , _this18 ) ) . on ( eventOut , _this18 . config . selector , $ . proxy ( _this18 . _leave , _this18 ) ) ;
2015-05-12 19:52:54 -04:00
}
} ) ;
if ( this . config . selector ) {
this . config = $ . extend ( { } , this . config , {
trigger : 'manual' ,
selector : ''
} ) ;
} else {
this . _fixTitle ( ) ;
}
}
} , {
key : '_removeTetherClasses' ,
value : function _removeTetherClasses ( i , css ) {
return ( ( css . baseVal || css ) . match ( new RegExp ( '(^|\\s)' + CLASS _PREFIX + '-\\S+' , 'g' ) ) || [ ] ) . join ( ' ' ) ;
}
} , {
key : '_fixTitle' ,
value : function _fixTitle ( ) {
var titleType = typeof this . element . getAttribute ( 'data-original-title' ) ;
if ( this . element . getAttribute ( 'title' ) || titleType !== 'string' ) {
this . element . setAttribute ( 'data-original-title' , this . element . getAttribute ( 'title' ) || '' ) ;
this . element . setAttribute ( 'title' , '' ) ;
}
}
} , {
key : '_enter' ,
value : function _enter ( event , context ) {
var dataKey = this . constructor . DATA _KEY ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
context = context || $ ( event . currentTarget ) . data ( dataKey ) ;
2013-05-04 10:55:52 -04:00
2015-05-12 19:52:54 -04:00
if ( ! context ) {
context = new this . constructor ( event . currentTarget , this . _getDelegateConfig ( ) ) ;
$ ( event . currentTarget ) . data ( dataKey , context ) ;
}
2012-08-15 17:49:55 -04:00
2015-05-12 19:52:54 -04:00
if ( event ) {
context . _activeTrigger [ event . type == 'focusin' ? Trigger . FOCUS : Trigger . HOVER ] = true ;
}
2012-08-15 17:49:55 -04:00
2015-05-12 19:52:54 -04:00
if ( $ ( context . getTipElement ( ) ) . hasClass ( ClassName . IN ) || context . _hoverState === HoverState . IN ) {
context . _hoverState = HoverState . IN ;
return ;
}
2014-06-10 21:11:26 -04:00
2015-05-12 19:52:54 -04:00
clearTimeout ( context . _timeout ) ;
2012-08-15 17:49:55 -04:00
2015-05-12 19:52:54 -04:00
context . _hoverState = HoverState . IN ;
2012-08-15 17:49:55 -04:00
2015-05-12 19:52:54 -04:00
if ( ! context . config . delay || ! context . config . delay . show ) {
context . show ( ) ;
return ;
}
2014-05-22 02:37:06 -04:00
2015-05-12 19:52:54 -04:00
context . _timeout = setTimeout ( function ( ) {
if ( context . _hoverState === HoverState . IN ) {
context . show ( ) ;
}
} , context . config . delay . show ) ;
}
} , {
key : '_leave' ,
value : function _leave ( event , context ) {
var dataKey = this . constructor . DATA _KEY ;
2013-07-26 02:30:13 -04:00
2015-05-12 19:52:54 -04:00
context = context || $ ( event . currentTarget ) . data ( dataKey ) ;
2013-05-16 14:06:30 -04:00
2015-05-12 19:52:54 -04:00
if ( ! context ) {
context = new this . constructor ( event . currentTarget , this . _getDelegateConfig ( ) ) ;
$ ( event . currentTarget ) . data ( dataKey , context ) ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( event ) {
context . _activeTrigger [ event . type == 'focusout' ? Trigger . FOCUS : Trigger . HOVER ] = false ;
}
2014-05-13 00:19:01 -04:00
2015-05-12 19:52:54 -04:00
if ( context . _isWithActiveTrigger ( ) ) {
return ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
clearTimeout ( context . _timeout ) ;
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
context . _hoverState = HoverState . OUT ;
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
if ( ! context . config . delay || ! context . config . delay . hide ) {
context . hide ( ) ;
return ;
}
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
context . _timeout = setTimeout ( function ( ) {
if ( context . _hoverState === HoverState . OUT ) {
context . hide ( ) ;
}
} , context . config . delay . hide ) ;
}
} , {
key : '_isWithActiveTrigger' ,
value : function _isWithActiveTrigger ( ) {
for ( var trigger in this . _activeTrigger ) {
if ( this . _activeTrigger [ trigger ] ) {
return true ;
}
}
2014-07-23 23:32:05 -04:00
2015-05-12 19:52:54 -04:00
return false ;
}
} , {
key : '_getConfig' ,
value : function _getConfig ( config ) {
config = $ . extend ( { } , this . constructor . Default , $ ( this . element ) . data ( ) , config ) ;
if ( config . delay && typeof config . delay === 'number' ) {
config . delay = {
show : config . delay ,
hide : config . delay
} ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
return config ;
}
} , {
key : '_getDelegateConfig' ,
value : function _getDelegateConfig ( ) {
var config = { } ;
if ( this . config ) {
for ( var key in this . config ) {
var value = this . config [ key ] ;
if ( this . constructor . Default [ key ] !== value ) {
config [ key ] = value ;
}
}
}
2013-12-24 15:32:06 -05:00
2015-05-12 19:52:54 -04:00
return config ;
}
} ] , [ {
key : 'VERSION' ,
2015-01-03 16:58:44 -05:00
2015-05-12 19:52:54 -04:00
// getters
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : 'NAME' ,
get : function ( ) {
return NAME ;
}
} , {
key : 'DATA_KEY' ,
get : function ( ) {
return DATA _KEY ;
}
} , {
key : 'Event' ,
get : function ( ) {
return Event ;
}
2015-05-13 15:48:34 -04:00
} , {
key : 'EVENT_KEY' ,
get : function ( ) {
return EVENT _KEY ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_jQueryInterface' ,
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
// static
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
var _config = typeof config === 'object' ? config : null ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data && /destroy|hide/ . test ( config ) ) {
return ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
data = new Tooltip ( this , _config ) ;
$ ( this ) . data ( DATA _KEY , data ) ;
}
2013-12-24 19:29:51 -05:00
2015-05-12 19:52:54 -04:00
if ( typeof config === 'string' ) {
data [ config ] ( ) ;
}
} ) ;
}
} ] ) ;
return Tooltip ;
} ) ( ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Tooltip . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Tooltip ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Tooltip . _jQueryInterface ;
} ;
return Tooltip ;
} ) ( jQuery ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : popover . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-12-24 19:29:51 -05:00
2015-05-12 19:52:54 -04:00
var Popover = ( function ( $ ) {
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Constants
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2013-12-24 19:29:51 -05:00
2015-05-12 19:52:54 -04:00
var NAME = 'popover' ;
var VERSION = '4.0.0' ;
var DATA _KEY = 'bs.popover' ;
2015-05-13 15:48:34 -04:00
var EVENT _KEY = '.' + DATA _KEY ;
2015-05-12 19:52:54 -04:00
var JQUERY _NO _CONFLICT = $ . fn [ NAME ] ;
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
var Default = $ . extend ( { } , Tooltip . Default , {
placement : 'right' ,
trigger : 'click' ,
content : '' ,
template : '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
} ) ;
var ClassName = {
FADE : 'fade' ,
IN : 'in'
} ;
var Selector = {
TITLE : '.popover-title' ,
CONTENT : '.popover-content' ,
ARROW : '.popover-arrow'
} ;
var Event = {
2015-05-13 15:48:34 -04: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
2015-05-12 19:52:54 -04:00
} ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Class Definition
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Popover = ( function ( _Tooltip ) {
function Popover ( ) {
_classCallCheck ( this , Popover ) ;
if ( _Tooltip != null ) {
_Tooltip . apply ( this , arguments ) ;
}
2014-07-23 23:32:05 -04:00
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
_inherits ( Popover , _Tooltip ) ;
2012-08-15 17:49:55 -04:00
2015-05-12 19:52:54 -04:00
_createClass ( Popover , [ {
key : 'isWithContent' ,
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
// overrides
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
value : function isWithContent ( ) {
return this . getTitle ( ) || this . _getContent ( ) ;
}
} , {
key : 'getTipElement' ,
value : function getTipElement ( ) {
return this . tip = this . tip || $ ( this . config . template ) [ 0 ] ;
}
} , {
key : 'setContent' ,
value : function setContent ( ) {
var tip = this . getTipElement ( ) ;
var title = this . getTitle ( ) ;
var content = this . _getContent ( ) ;
var titleElement = $ ( tip ) . find ( Selector . TITLE ) [ 0 ] ;
if ( titleElement ) {
titleElement [ this . config . html ? 'innerHTML' : 'innerText' ] = title ;
}
2015-05-06 16:34:14 -04:00
2015-05-12 19:52:54 -04:00
// we use append for html objects to maintain js events
$ ( tip ) . find ( Selector . CONTENT ) . children ( ) . detach ( ) . end ( ) [ this . config . html ? typeof content === 'string' ? 'html' : 'append' : 'text' ] ( content ) ;
2012-12-07 17:06:01 -05:00
2015-05-12 19:52:54 -04:00
$ ( tip ) . removeClass ( ClassName . FADE ) . removeClass ( ClassName . IN ) ;
2014-04-30 22:35:47 -04:00
2015-05-12 19:52:54 -04:00
this . cleanupTether ( ) ;
}
} , {
key : '_getContent' ,
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
// private
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
value : function _getContent ( ) {
return this . element . getAttribute ( 'data-content' ) || ( typeof this . config . content == 'function' ? this . config . content . call ( this . element ) : this . config . content ) ;
}
} ] , [ {
key : 'VERSION' ,
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
// getters
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
get : function ( ) {
return VERSION ;
}
} , {
key : 'Default' ,
get : function ( ) {
return Default ;
}
} , {
key : 'NAME' ,
get : function ( ) {
return NAME ;
}
} , {
key : 'DATA_KEY' ,
get : function ( ) {
return DATA _KEY ;
}
} , {
key : 'Event' ,
get : function ( ) {
return Event ;
}
2015-05-13 15:48:34 -04:00
} , {
key : 'EVENT_KEY' ,
get : function ( ) {
return EVENT _KEY ;
}
2015-05-12 19:52:54 -04:00
} , {
key : '_jQueryInterface' ,
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
// static
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
value : function _jQueryInterface ( config ) {
return this . each ( function ( ) {
var data = $ ( this ) . data ( DATA _KEY ) ;
var _config = typeof config === 'object' ? config : null ;
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data && /destroy|hide/ . test ( config ) ) {
return ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( ! data ) {
data = new Popover ( this , _config ) ;
$ ( this ) . data ( DATA _KEY , data ) ;
}
2013-07-26 04:07:56 -04:00
2015-05-12 19:52:54 -04:00
if ( typeof config === 'string' ) {
data [ config ] ( ) ;
}
} ) ;
}
} ] ) ;
return Popover ;
} ) ( Tooltip ) ;
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* jQuery
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
$ . fn [ NAME ] = Popover . _jQueryInterface ;
$ . fn [ NAME ] . Constructor = Popover ;
$ . fn [ NAME ] . noConflict = function ( ) {
$ . fn [ NAME ] = JQUERY _NO _CONFLICT ;
return Popover . _jQueryInterface ;
} ;
return Popover ;
} ) ( jQuery ) ;
2012-08-15 17:49:55 -04:00
2015-05-06 16:34:14 -04:00
} ( jQuery ) ;