2015-05-07 15:48:22 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
2018-01-18 11:21:22 -05:00
* Bootstrap ( v4 . 0.0 ) : util . js
2015-05-07 15:48:22 -04:00
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2017-10-25 15:31:55 -04:00
var Util = function ( $ ) {
2015-05-07 19:34:28 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Private TransitionEnd Helpers
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
var transition = false ;
2018-01-12 01:42:40 -05:00
var MAX _UID = 1000000 ; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2015-05-13 17:46:50 -04:00
2017-09-30 17:28:03 -04:00
function toType ( obj ) {
2018-02-11 17:53:29 -05:00
return { } . toString . call ( obj ) . match ( /\s([a-z]+)/i ) [ 1 ] . toLowerCase ( ) ;
2015-05-13 17:46:50 -04:00
}
2015-05-07 19:34:28 -04:00
function getSpecialTransitionEndEvent ( ) {
return {
bindType : transition . end ,
delegateType : transition . end ,
handle : function handle ( event ) {
if ( $ ( event . target ) . is ( this ) ) {
2017-07-02 13:40:27 -04:00
return event . handleObj . handler . apply ( this , arguments ) ; // eslint-disable-line prefer-rest-params
2015-05-07 19:34:28 -04:00
}
2017-09-30 17:28:03 -04:00
2017-09-06 00:05:12 -04:00
return undefined ; // eslint-disable-line no-undefined
2015-05-07 19:34:28 -04:00
}
} ;
}
2015-05-07 15:48:22 -04:00
2015-05-07 19:34:28 -04:00
function transitionEndTest ( ) {
2018-01-12 01:42:40 -05:00
if ( typeof window !== 'undefined' && window . QUnit ) {
2015-05-07 19:34:28 -04:00
return false ;
2015-05-07 15:48:22 -04:00
}
2017-12-22 19:21:54 -05:00
return {
end : 'transitionend'
} ;
2015-05-07 15:48:22 -04:00
}
2015-05-07 19:34:28 -04:00
function transitionEndEmulator ( duration ) {
var _this = this ;
2015-05-07 15:48:22 -04:00
2015-05-07 19:34:28 -04:00
var called = false ;
$ ( this ) . one ( Util . TRANSITION _END , function ( ) {
called = true ;
} ) ;
setTimeout ( function ( ) {
if ( ! called ) {
2015-05-08 01:26:40 -04:00
Util . triggerTransitionEnd ( _this ) ;
2015-05-07 15:48:22 -04:00
}
2015-05-07 19:34:28 -04:00
} , duration ) ;
return this ;
2015-05-07 15:48:22 -04:00
}
2015-05-07 19:34:28 -04:00
function setTransitionEndSupport ( ) {
transition = transitionEndTest ( ) ;
$ . fn . emulateTransitionEnd = transitionEndEmulator ;
if ( Util . supportsTransitionEnd ( ) ) {
$ . event . special [ Util . TRANSITION _END ] = getSpecialTransitionEndEvent ( ) ;
2015-05-07 15:48:22 -04:00
}
}
2015-05-07 19:34:28 -04:00
/ * *
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* Public Util Api
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
* /
2015-05-07 15:48:22 -04:00
2017-09-30 17:28:03 -04:00
var Util = {
2015-05-07 19:34:28 -04:00
TRANSITION _END : 'bsTransitionEnd' ,
getUID : function getUID ( prefix ) {
2015-08-18 23:28:28 -04:00
do {
2016-11-25 18:00:23 -05:00
// eslint-disable-next-line no-bitwise
2016-10-09 20:26:51 -04:00
prefix += ~ ~ ( Math . random ( ) * MAX _UID ) ; // "~~" acts like a faster Math.floor() here
2015-08-18 23:28:28 -04:00
} while ( document . getElementById ( prefix ) ) ;
2017-09-30 17:28:03 -04:00
2015-05-07 19:34:28 -04:00
return prefix ;
} ,
getSelectorFromElement : function getSelectorFromElement ( element ) {
var selector = element . getAttribute ( 'data-target' ) ;
2017-09-30 17:28:03 -04:00
2017-03-19 22:03:32 -04:00
if ( ! selector || selector === '#' ) {
2015-05-07 19:34:28 -04:00
selector = element . getAttribute ( 'href' ) || '' ;
}
2015-05-07 15:48:22 -04:00
2017-03-19 22:03:32 -04:00
try {
2017-09-06 00:05:12 -04:00
var $selector = $ ( document ) . find ( selector ) ;
2017-03-19 22:03:32 -04:00
return $selector . length > 0 ? selector : null ;
2018-01-12 01:42:40 -05:00
} catch ( err ) {
2017-03-19 22:03:32 -04:00
return null ;
}
2015-05-07 19:34:28 -04:00
} ,
reflow : function reflow ( element ) {
2016-10-30 18:21:53 -04:00
return element . offsetHeight ;
2015-05-07 19:34:28 -04:00
} ,
2015-05-08 01:26:40 -04:00
triggerTransitionEnd : function triggerTransitionEnd ( element ) {
$ ( element ) . trigger ( transition . end ) ;
} ,
2015-05-07 19:34:28 -04:00
supportsTransitionEnd : function supportsTransitionEnd ( ) {
2015-08-18 23:28:28 -04:00
return Boolean ( transition ) ;
2015-05-13 17:46:50 -04:00
} ,
2017-09-30 17:28:03 -04:00
isElement : function isElement ( obj ) {
return ( obj [ 0 ] || obj ) . nodeType ;
} ,
2015-05-13 17:46:50 -04:00
typeCheckConfig : function typeCheckConfig ( componentName , config , configTypes ) {
for ( var property in configTypes ) {
2017-09-06 00:05:12 -04:00
if ( Object . prototype . hasOwnProperty . call ( configTypes , property ) ) {
2015-08-18 23:28:28 -04:00
var expectedTypes = configTypes [ property ] ;
var value = config [ property ] ;
2017-09-30 17:28:03 -04:00
var valueType = value && Util . isElement ( value ) ? 'element' : toType ( value ) ;
2015-08-18 23:28:28 -04:00
if ( ! new RegExp ( expectedTypes ) . test ( valueType ) ) {
2017-09-30 17:28:03 -04:00
throw new Error ( componentName . toUpperCase ( ) + ": " + ( "Option \"" + property + "\" provided type \"" + valueType + "\" " ) + ( "but expected type \"" + expectedTypes + "\"." ) ) ;
2015-08-18 23:28:28 -04:00
}
2015-05-13 17:46:50 -04:00
}
}
2015-05-07 19:34:28 -04:00
}
} ;
setTransitionEndSupport ( ) ;
return Util ;
2017-10-15 18:51:44 -04:00
} ( $ ) ;
2017-04-22 02:58:09 -04:00
//# sourceMappingURL=util.js.map