2015-05-13 19:13:34 +02:00
( function ( global , factory ) {
if ( typeof define === 'function' && define . amd ) {
define ( [ 'exports' , 'module' ] , factory ) ;
} else if ( typeof exports !== 'undefined' && typeof module !== 'undefined' ) {
factory ( exports , module ) ;
} else {
var mod = {
exports : { }
} ;
factory ( mod . exports , mod ) ;
global . util = mod . exports ;
}
} ) ( this , function ( exports , module ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Bootstrap ( v4 . 0.0 ) : util . js
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
'use strict' ;
var Util = ( function ( $ ) {
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Private TransitionEnd Helpers
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var transition = false ;
var TransitionEndEvent = {
WebkitTransition : 'webkitTransitionEnd' ,
MozTransition : 'transitionend' ,
OTransition : 'oTransitionEnd otransitionend' ,
transition : 'transitionend'
} ;
2015-05-13 23:52:46 +02:00
// shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType ( obj ) {
return ( { } ) . toString . call ( obj ) . match ( /\s([a-zA-Z]+)/ ) [ 1 ] . toLowerCase ( ) ;
}
function isElement ( obj ) {
return ( obj [ 0 ] || obj ) . nodeType ;
}
2015-05-13 19:13:34 +02:00
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 ) ;
}
}
} ;
}
function transitionEndTest ( ) {
if ( window . QUnit ) {
return false ;
}
var el = document . createElement ( 'bootstrap' ) ;
for ( var name in TransitionEndEvent ) {
if ( el . style [ name ] !== undefined ) {
return { end : TransitionEndEvent [ name ] } ;
}
}
return false ;
}
function transitionEndEmulator ( duration ) {
var _this = this ;
var called = false ;
$ ( this ) . one ( Util . TRANSITION _END , function ( ) {
called = true ;
} ) ;
setTimeout ( function ( ) {
if ( ! called ) {
Util . triggerTransitionEnd ( _this ) ;
}
} , duration ) ;
return this ;
}
function setTransitionEndSupport ( ) {
transition = transitionEndTest ( ) ;
$ . fn . emulateTransitionEnd = transitionEndEmulator ;
if ( Util . supportsTransitionEnd ( ) ) {
$ . event . special [ Util . TRANSITION _END ] = getSpecialTransitionEndEvent ( ) ;
}
}
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var Util = {
TRANSITION _END : 'bsTransitionEnd' ,
getUID : function getUID ( prefix ) {
do prefix += ~ ~ ( Math . random ( ) * 1000000 ) ; while ( document . getElementById ( prefix ) ) ;
return prefix ;
} ,
getSelectorFromElement : function getSelectorFromElement ( element ) {
var selector = element . getAttribute ( 'data-target' ) ;
if ( ! selector ) {
selector = element . getAttribute ( 'href' ) || '' ;
selector = /^#[a-z]/i . test ( selector ) ? selector : null ;
}
return selector ;
} ,
reflow : function reflow ( element ) {
new Function ( 'bs' , 'return bs' ) ( element . offsetHeight ) ;
} ,
triggerTransitionEnd : function triggerTransitionEnd ( element ) {
$ ( element ) . trigger ( transition . end ) ;
} ,
supportsTransitionEnd : function supportsTransitionEnd ( ) {
return ! ! transition ;
2015-05-13 23:52:46 +02:00
} ,
typeCheckConfig : function typeCheckConfig ( componentName , config , configTypes ) {
for ( var property in configTypes ) {
var expectedTypes = configTypes [ property ] ;
var value = config [ property ] ;
var valueType = undefined ;
if ( value && isElement ( value ) ) valueType = 'element' ; else valueType = toType ( value ) ;
if ( ! new RegExp ( expectedTypes ) . test ( valueType ) ) {
throw new Error ( '' + componentName . toUpperCase ( ) + ': ' + ( 'Option "' + property + '" provided type "' + valueType + '" ' ) + ( 'but expected type "' + expectedTypes + '".' ) ) ;
}
}
2015-05-13 19:13:34 +02:00
}
} ;
setTransitionEndSupport ( ) ;
return Util ;
} ) ( jQuery ) ;
module . exports = Util ;
} ) ;