| Current Path : /home/xbodynamge/www/wp-content/themes/hestia/assets/bootstrap/js/ |
| Current File : /home/xbodynamge/www/wp-content/themes/hestia/assets/bootstrap/js/bootstrap.js |
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*!
* Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.3/customize/?id=3ba9eab9c3b2ad561568dda25968bfe3)
* Config saved to config.json and https://gist.github.com/3ba9eab9c3b2ad561568dda25968bfe3
*/
if (typeof jQuery === 'undefined') {
throw new Error( 'Bootstrap\'s JavaScript requires jQuery' )
}
+ function ($) {
'use strict';
var version = $.fn.jquery.split( ' ' )[0].split( '.' )
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
throw new Error( 'Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4' )
}
}(jQuery);
/* ========================================================================
* Bootstrap: carousel.js v3.3.7
* http://getbootstrap.com/javascript/#carousel
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+ function ($) {
'use strict';
// CAROUSEL CLASS DEFINITION
// =========================
var Carousel = function (element, options) {
this.$element = $( element )
this.$indicators = this.$element.find( '.carousel-indicators' )
this.options = options
this.paused = null
this.sliding = null
this.interval = null
this.$active = null
this.$items = null
this.options.keyboard && this.$element.on( 'keydown.bs.carousel', $.proxy( this.keydown, this ) )
this.options.pause == 'hover' && ! ('ontouchstart' in document.documentElement) && this.$element
.on( 'mouseenter.bs.carousel', $.proxy( this.pause, this ) )
.on( 'mouseleave.bs.carousel', $.proxy( this.cycle, this ) )
}
Carousel.VERSION = '3.3.7'
Carousel.TRANSITION_DURATION = 600
Carousel.DEFAULTS = {
interval: 5000,
pause: 'hover',
wrap: true,
keyboard: true
}
Carousel.prototype.keydown = function (e) {
if (/input|textarea/i.test( e.target.tagName )) {
return
switch (e.which) {
case 37: this.prev(); break
case 39: this.next(); break
default: return
}
}
e.preventDefault()
}
Carousel.prototype.cycle = function (e) {
e || (this.paused = false)
this.interval && clearInterval( this.interval )
this.options.interval
&& ! this.paused
&& (this.interval = setInterval( $.proxy( this.next, this ), this.options.interval ))
return this
}
Carousel.prototype.getItemIndex = function (item) {
this.$items = item.parent().children( '.item' )
return this.$items.index( item || this.$active )
}
Carousel.prototype.getItemForDirection = function (direction, active) {
var activeIndex = this.getItemIndex( active )
var willWrap = (direction == 'prev' && activeIndex === 0)
|| (direction == 'next' && activeIndex == (this.$items.length - 1))
if (willWrap && ! this.options.wrap) {
return active
var delta = direction == 'prev' ? -1 : 1
var itemIndex = (activeIndex + delta) % this.$items.length
return this.$items.eq( itemIndex )
}
}
Carousel.prototype.to = function (pos) {
var that = this
var activeIndex = this.getItemIndex( this.$active = this.$element.find( '.item.active' ) )
if (pos > (this.$items.length - 1) || pos < 0) {
return
if (this.sliding) {
return this.$element.one( 'slid.bs.carousel', function () { that.to( pos ) } ) // yes, "slid"
if (activeIndex == pos) {
return this.pause().cycle()
return this.slide( pos > activeIndex ? 'next' : 'prev', this.$items.eq( pos ) )
}
}
}
}
Carousel.prototype.pause = function (e) {
e || (this.paused = true)
if (this.$element.find( '.next, .prev' ).length && $.support.transition) {
this.$element.trigger( $.support.transition.end )
this.cycle( true )
}
this.interval = clearInterval( this.interval )
return this
}
Carousel.prototype.next = function () {
if (this.sliding) {
return
return this.slide( 'next' )
}
}
Carousel.prototype.prev = function () {
if (this.sliding) {
return
return this.slide( 'prev' )
}
}
Carousel.prototype.slide = function (type, next) {
var $active = this.$element.find( '.item.active' )
var $next = next || this.getItemForDirection( type, $active )
var isCycling = this.interval
var direction = type == 'next' ? 'left' : 'right'
var that = this
if ($next.hasClass( 'active' )) {
return (this.sliding = false)
var relatedTarget = $next[0]
var slideEvent = $.Event(
'slide.bs.carousel', {
relatedTarget: relatedTarget,
direction: direction
}
)
this.$element.trigger( slideEvent )
if (slideEvent.isDefaultPrevented()) {
return
this.sliding = true
isCycling && this.pause()
if (this.$indicators.length) {
this.$indicators.find( '.active' ).removeClass( 'active' )
var $nextIndicator = $( this.$indicators.children()[this.getItemIndex( $next )] )
$nextIndicator && $nextIndicator.addClass( 'active' )
}
}
}
var slidEvent = $.Event( 'slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction } ) // yes, "slid"
if ($.support.transition && this.$element.hasClass( 'slide' )) {
$next.addClass( type )
$next[0].offsetWidth // force reflow
$active.addClass( direction )
$next.addClass( direction )
$active
.one(
'bsTransitionEnd', function () {
$next.removeClass( [type, direction].join( ' ' ) ).addClass( 'active' )
$active.removeClass( ['active', direction].join( ' ' ) )
that.sliding = false
setTimeout(
function () {
that.$element.trigger( slidEvent )
}, 0
)
}
)
.emulateTransitionEnd( Carousel.TRANSITION_DURATION )
} else {
$active.removeClass( 'active' )
$next.addClass( 'active' )
this.sliding = false
this.$element.trigger( slidEvent )
}
isCycling && this.cycle()
return this
}
// CAROUSEL PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(
function () {
var $this = $( this )
var data = $this.data( 'bs.carousel' )
var options = $.extend( {}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option )
var action = typeof option == 'string' ? option : options.slide
if ( ! data) $this.data( 'bs.carousel', (data = new Carousel( this, options )) )
if (typeof option == 'number') data.to( option )
else if (action) data[action]()
else if (options.interval) {
data.pause().cycle()
}
}
)
}
var old = $.fn.carousel
$.fn.carousel = Plugin
$.fn.carousel.Constructor = Carousel
// CAROUSEL NO CONFLICT
// ====================
$.fn.carousel.noConflict = function () {
$.fn.carousel = old
return this
}
// CAROUSEL DATA-API
// =================
var clickHandler = function (e) {
var href
var $this = $( this )
var $target = $( $this.attr( 'data-target' ) || (href = $this.attr( 'href' )) && href.replace( /.*(?=#[^\s]+$)/, '' ) ) // strip for ie7
if ( ! $target.hasClass( 'carousel' )) {
return
var options = $.extend( {}, $target.data(), $this.data() )
var slideIndex = $this.attr( 'data-slide-to' )
if (slideIndex) {
options.interval = false
Plugin.call( $target, options )
if (slideIndex) {
$target.data( 'bs.carousel' ).to( slideIndex )
}
}
}
e.preventDefault()
}
$( document )
.on( 'click.bs.carousel.data-api', '[data-slide]', clickHandler )
.on( 'click.bs.carousel.data-api', '[data-slide-to]', clickHandler )
$( window ).on(
'load', function () {
$( '[data-ride="carousel"]' ).each(
function () {
var $carousel = $( this )
Plugin.call( $carousel, $carousel.data() )
}
)
}
)
}(jQuery);
/* ========================================================================
* Bootstrap: dropdown.js v3.3.7
* http://getbootstrap.com/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+ function ($) {
'use strict';
// DROPDOWN CLASS DEFINITION
// =========================
var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) {
$( element ).on( 'click.bs.dropdown', this.toggle )
}
Dropdown.VERSION = '3.3.7'
function getParent($this) {
var selector = $this.attr( 'data-target' )
if ( ! selector) {
selector = $this.attr( 'href' )
selector = selector && /#[A-Za-z]/.test( selector ) && selector.replace( /.*(?=#[^\s]*$)/, '' ) // strip for ie7
}
var $parent = selector && $( selector )
return $parent && $parent.length ? $parent : $this.parent()
}
function clearMenus(e) {
if (e && e.which === 3) {
return
$( backdrop ).remove()
$( toggle ).each(
function () {
var $this = $( this )
var $parent = getParent( $this )
var relatedTarget = { relatedTarget: this }
if ( ! $parent.hasClass( 'open' )) {
return
if (e && e.type == 'click' && /input|textarea/i.test( e.target.tagName ) && $.contains( $parent[0], e.target )) {
return
$parent.trigger( e = $.Event( 'hide.bs.dropdown', relatedTarget ) )
if (e.isDefaultPrevented()) {
return
$this.attr( 'aria-expanded', 'false' )
$parent.removeClass( 'open' ).trigger( $.Event( 'hidden.bs.dropdown', relatedTarget ) )
}
}
}
}
)
}
}
Dropdown.prototype.toggle = function (e) {
var $this = $( this )
if ($this.is( '.disabled, :disabled' )) {
return
var $parent = getParent( $this )
var isActive = $parent.hasClass( 'open' )
clearMenus()
if ( ! isActive) {
if ('ontouchstart' in document.documentElement && ! $parent.closest( '.navbar-nav' ).length) {
// if mobile we use a backdrop because click events don't delegate
$( document.createElement( 'div' ) )
.addClass( 'dropdown-backdrop' )
.insertAfter( $( this ) )
.on( 'click', clearMenus )
}
var relatedTarget = { relatedTarget: this }
$parent.trigger( e = $.Event( 'show.bs.dropdown', relatedTarget ) )
if (e.isDefaultPrevented()) {
return
$this
.trigger( 'focus' )
.attr( 'aria-expanded', 'true' )
$parent
.toggleClass( 'open' )
.trigger( $.Event( 'shown.bs.dropdown', relatedTarget ) )
}
}
}
return false
}
Dropdown.prototype.keydown = function (e) {
if ( ! / (38 | 40 | 27 | 32) / .test( e.which ) || /input|textarea/i.test( e.target.tagName )) {
return
var $this = $( this )
e.preventDefault()
e.stopPropagation()
if ($this.is( '.disabled, :disabled' )) {
return
var $parent = getParent( $this )
var isActive = $parent.hasClass( 'open' )
if ( ! isActive && e.which != 27 || isActive && e.which == 27) {
if (e.which == 27) {
$parent.find( toggle ).trigger( 'focus' )
return $this.trigger( 'click' )
}
}
}
}
var desc = ' li:not(.disabled):visible a'
var $items = $parent.find( '.dropdown-menu' + desc )
if ( ! $items.length) {
return
var index = $items.index( e.target )
if (e.which == 38 && index > 0) {
index-- // up
if (e.which == 40 && index < $items.length - 1) {
index++ // down
if ( ! ~index) {
index = 0
$items.eq( index ).trigger( 'focus' )
}
}
}
}
}
// DROPDOWN PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(
function () {
var $this = $( this )
var data = $this.data( 'bs.dropdown' )
if ( ! data) {
$this.data( 'bs.dropdown', (data = new Dropdown( this )) )
if (typeof option == 'string') {
data[option].call( $this )
}
}
}
)
}
var old = $.fn.dropdown
$.fn.dropdown = Plugin
$.fn.dropdown.Constructor = Dropdown
// DROPDOWN NO CONFLICT
// ====================
$.fn.dropdown.noConflict = function () {
$.fn.dropdown = old
return this
}
// APPLY TO STANDARD DROPDOWN ELEMENTS
// ===================================
$( document )
.on( 'click.bs.dropdown.data-api', clearMenus )
.on( 'click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() } )
.on( 'click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle )
.on( 'keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown )
.on( 'keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown )
}(jQuery);
/* ========================================================================
* Bootstrap: modal.js v3.3.7
* http://getbootstrap.com/javascript/#modals
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+ function ($) {
'use strict';
// MODAL CLASS DEFINITION
// ======================
var Modal = function (element, options) {
this.options = options
this.$body = $( document.body )
this.$element = $( element )
this.$dialog = this.$element.find( '.modal-dialog' )
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.ignoreBackdropClick = false
if (this.options.remote) {
this.$element
.find( '.modal-content' )
.load(
this.options.remote, $.proxy(
function () {
this.$element.trigger( 'loaded.bs.modal' )
}, this
)
)
}
}
Modal.VERSION = '3.3.7'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
Modal.DEFAULTS = {
backdrop: true,
keyboard: true,
show: true
}
Modal.prototype.toggle = function (_relatedTarget) {
return this.isShown ? this.hide() : this.show( _relatedTarget )
}
Modal.prototype.show = function (_relatedTarget) {
var that = this
var e = $.Event( 'show.bs.modal', { relatedTarget: _relatedTarget } )
this.$element.trigger( e )
if (this.isShown || e.isDefaultPrevented()) {
return
this.isShown = true
this.checkScrollbar()
this.setScrollbar()
this.$body.addClass( 'modal-open' )
this.escape()
this.resize()
this.$element.on( 'click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy( this.hide, this ) )
this.$dialog.on(
'mousedown.dismiss.bs.modal', function () {
that.$element.one(
'mouseup.dismiss.bs.modal', function (e) {
if ($( e.target ).is( that.$element )) {
that.ignoreBackdropClick = true
}
}
)
}
)
this.backdrop(
function () {
var transition = $.support.transition && that.$element.hasClass( 'fade' )
if ( ! that.$element.parent().length) {
that.$element.appendTo( that.$body ) // don't move modals dom position
}
that.$element
.show()
.scrollTop( 0 )
that.adjustDialog()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass( 'in' )
that.enforceFocus()
var e = $.Event( 'shown.bs.modal', { relatedTarget: _relatedTarget } )
transition ?
that.$dialog // wait for modal to slide in
.one(
'bsTransitionEnd', function () {
that.$element.trigger( 'focus' ).trigger( e )
}
)
.emulateTransitionEnd( Modal.TRANSITION_DURATION ) :
that.$element.trigger( 'focus' ).trigger( e )
}
)
}
}
Modal.prototype.hide = function (e) {
if (e) {
e.preventDefault()
e = $.Event( 'hide.bs.modal' )
this.$element.trigger( e )
if ( ! this.isShown || e.isDefaultPrevented()) {
return
this.isShown = false
this.escape()
this.resize()
$( document ).off( 'focusin.bs.modal' )
this.$element
.removeClass( 'in' )
.off( 'click.dismiss.bs.modal' )
.off( 'mouseup.dismiss.bs.modal' )
this.$dialog.off( 'mousedown.dismiss.bs.modal' )
$.support.transition && this.$element.hasClass( 'fade' ) ?
this.$element
.one( 'bsTransitionEnd', $.proxy( this.hideModal, this ) )
.emulateTransitionEnd( Modal.TRANSITION_DURATION ) :
this.hideModal()
}
}
}
Modal.prototype.enforceFocus = function () {
$( document )
.off( 'focusin.bs.modal' ) // guard against infinite focus loop
.on(
'focusin.bs.modal', $.proxy(
function (e) {
if (document !== e.target &&
this.$element[0] !== e.target &&
! this.$element.has( e.target ).length) {
this.$element.trigger( 'focus' )
}
}, this
)
)
}
Modal.prototype.escape = function () {
if (this.isShown && this.options.keyboard) {
this.$element.on(
'keydown.dismiss.bs.modal', $.proxy(
function (e) {
e.which == 27 && this.hide()
}, this
)
)
} else if ( ! this.isShown) {
this.$element.off( 'keydown.dismiss.bs.modal' )
}
}
Modal.prototype.resize = function () {
if (this.isShown) {
$( window ).on( 'resize.bs.modal', $.proxy( this.handleUpdate, this ) )
} else {
$( window ).off( 'resize.bs.modal' )
}
}
Modal.prototype.hideModal = function () {
var that = this
this.$element.hide()
this.backdrop(
function () {
that.$body.removeClass( 'modal-open' )
that.resetAdjustments()
that.resetScrollbar()
that.$element.trigger( 'hidden.bs.modal' )
}
)
}
Modal.prototype.removeBackdrop = function () {
this.$backdrop && this.$backdrop.remove()
this.$backdrop = null
}
Modal.prototype.backdrop = function (callback) {
var that = this
var animate = this.$element.hasClass( 'fade' ) ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $( document.createElement( 'div' ) )
.addClass( 'modal-backdrop ' + animate )
.appendTo( this.$body )
this.$element.on(
'click.dismiss.bs.modal', $.proxy(
function (e) {
if (this.ignoreBackdropClick) {
this.ignoreBackdropClick = false
return
}
if (e.target !== e.currentTarget) {
return
this.options.backdrop == 'static'
? this.$element[0].focus()
: this.hide()
}
}, this
)
)
if (doAnimate) {
this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass( 'in' )
if ( ! callback) {
return
doAnimate ?
this.$backdrop
.one( 'bsTransitionEnd', callback )
.emulateTransitionEnd( Modal.BACKDROP_TRANSITION_DURATION ) :
callback()
}
} } else if ( ! this.isShown && this.$backdrop) {
this.$backdrop.removeClass( 'in' )
var callbackRemove = function () {
that.removeBackdrop()
callback && callback()
}
$.support.transition && this.$element.hasClass( 'fade' ) ?
this.$backdrop
.one( 'bsTransitionEnd', callbackRemove )
.emulateTransitionEnd( Modal.BACKDROP_TRANSITION_DURATION ) :
callbackRemove()
} else if (callback) {
callback()
}
}
// these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
this.adjustDialog()
}
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css(
{
paddingLeft: ! this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && ! modalIsOverflowing ? this.scrollbarWidth : ''
}
)
}
Modal.prototype.resetAdjustments = function () {
this.$element.css(
{
paddingLeft: '',
paddingRight: ''
}
)
}
Modal.prototype.checkScrollbar = function () {
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.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
this.scrollbarWidth = this.measureScrollbar()
}
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt( (this.$body.css( 'padding-right' ) || 0), 10 )
this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) {
this.$body.css( 'padding-right', bodyPad + this.scrollbarWidth )
}
}
Modal.prototype.resetScrollbar = function () {
this.$body.css( 'padding-right', this.originalBodyPad )
}
Modal.prototype.measureScrollbar = function () { // thx walsh
var scrollDiv = document.createElement( 'div' )
scrollDiv.className = 'modal-scrollbar-measure'
this.$body.append( scrollDiv )
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
this.$body[0].removeChild( scrollDiv )
return scrollbarWidth
}
// MODAL PLUGIN DEFINITION
// =======================
function Plugin(option, _relatedTarget) {
return this.each(
function () {
var $this = $( this )
var data = $this.data( 'bs.modal' )
var options = $.extend( {}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option )
if ( ! data) $this.data( 'bs.modal', (data = new Modal( this, options )) )
if (typeof option == 'string') data[option](_relatedTarget)
else if (options.show) {
data.show( _relatedTarget )
}
}
)
}
var old = $.fn.modal
$.fn.modal = Plugin
$.fn.modal.Constructor = Modal
// MODAL NO CONFLICT
// =================
$.fn.modal.noConflict = function () {
$.fn.modal = old
return this
}
// MODAL DATA-API
// ==============
$( document ).on(
'click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $( this )
var href = $this.attr( 'href' )
var $target = $( $this.attr( 'data-target' ) || (href && href.replace( /.*(?=#[^\s]+$)/, '' )) ) // strip for ie7
var option = $target.data( 'bs.modal' ) ? 'toggle' : $.extend( { remote : ! / # / .test( href ) && href }, $target.data(), $this.data() )
if ($this.is( 'a' )) {
e.preventDefault()
$target.one(
'show.bs.modal', function (showEvent) {
if (showEvent.isDefaultPrevented()) {
return // only register focus restorer if modal will actually get shown
$target.one(
'hidden.bs.modal', function () {
$this.is( ':visible' ) && $this.trigger( 'focus' )
}
)
}
}
)
Plugin.call( $target, option, this )
}
}
)
}(jQuery);
/* ========================================================================
* Bootstrap: tooltip.js v3.3.7
* http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+ function ($) {
'use strict';
// TOOLTIP PUBLIC CLASS DEFINITION
// ===============================
var Tooltip = function (element, options) {
this.type = null
this.options = null
this.enabled = null
this.timeout = null
this.hoverState = null
this.$element = null
this.inState = null
this.init( 'tooltip', element, options )
}
Tooltip.VERSION = '3.3.7'
Tooltip.TRANSITION_DURATION = 150
Tooltip.DEFAULTS = {
animation: true,
placement: 'top',
selector: false,
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,
container: false,
viewport: {
selector: 'body',
padding: 0
}
}
Tooltip.prototype.init = function (type, element, options) {
this.enabled = true
this.type = type
this.$element = $( element )
this.options = this.getOptions( options )
this.$viewport = this.options.viewport && $( $.isFunction( this.options.viewport ) ? this.options.viewport.call( this, this.$element ) : (this.options.viewport.selector || this.options.viewport) )
this.inState = { click: false, hover: false, focus: false }
if (this.$element[0] instanceof document.constructor && ! this.options.selector) {
throw new Error( '`selector` option must be specified when initializing ' + this.type + ' on the window.document object!' )
}
var triggers = this.options.trigger.split( ' ' )
for (var i = triggers.length; i--;) {
var trigger = triggers[i]
if (trigger == 'click') {
this.$element.on( 'click.' + this.type, this.options.selector, $.proxy( this.toggle, this ) )
} else if (trigger != 'manual') {
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
this.$element.on( eventIn + '.' + this.type, this.options.selector, $.proxy( this.enter, this ) )
this.$element.on( eventOut + '.' + this.type, this.options.selector, $.proxy( this.leave, this ) )
}
}
this.options.selector ?
(this._options = $.extend( {}, this.options, { trigger: 'manual', selector: '' } )) :
this.fixTitle()
}
Tooltip.prototype.getDefaults = function () {
return Tooltip.DEFAULTS
}
Tooltip.prototype.getOptions = function (options) {
options = $.extend( {}, this.getDefaults(), this.$element.data(), options )
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay,
hide: options.delay
}
}
return options
}
Tooltip.prototype.getDelegateOptions = function () {
var options = {}
var defaults = this.getDefaults()
this._options && $.each(
this._options, function (key, value) {
if (defaults[key] != value) {
options[key] = value
}
}
)
return options
}
Tooltip.prototype.enter = function (obj) {
var self = obj instanceof this.constructor ?
obj : $( obj.currentTarget ).data( 'bs.' + this.type )
if ( ! self) {
self = new this.constructor( obj.currentTarget, this.getDelegateOptions() )
$( obj.currentTarget ).data( 'bs.' + this.type, self )
}
if (obj instanceof $.Event) {
self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
}
if (self.tip().hasClass( 'in' ) || self.hoverState == 'in') {
self.hoverState = 'in'
return
}
clearTimeout( self.timeout )
self.hoverState = 'in'
if ( ! self.options.delay || ! self.options.delay.show) {
return self.show()
self.timeout = setTimeout(
function () {
if (self.hoverState == 'in') {
self.show()
}
}, self.options.delay.show
)
}
}
Tooltip.prototype.isInStateTrue = function () {
for (var key in this.inState) {
if (this.inState[key]) {
return true
}
}
return false
}
Tooltip.prototype.leave = function (obj) {
var self = obj instanceof this.constructor ?
obj : $( obj.currentTarget ).data( 'bs.' + this.type )
if ( ! self) {
self = new this.constructor( obj.currentTarget, this.getDelegateOptions() )
$( obj.currentTarget ).data( 'bs.' + this.type, self )
}
if (obj instanceof $.Event) {
self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
}
if (self.isInStateTrue()) {
return
clearTimeout( self.timeout )
self.hoverState = 'out'
if ( ! self.options.delay || ! self.options.delay.hide) {
return self.hide()
self.timeout = setTimeout(
function () {
if (self.hoverState == 'out') {
self.hide()
}
}, self.options.delay.hide
)
}
}
}
Tooltip.prototype.show = function () {
var e = $.Event( 'show.bs.' + this.type )
if (this.hasContent() && this.enabled) {
this.$element.trigger( e )
var inDom = $.contains( this.$element[0].ownerDocument.documentElement, this.$element[0] )
if (e.isDefaultPrevented() || ! inDom) {
return
var that = this
var $tip = this.tip()
var tipId = this.getUID( this.type )
this.setContent()
$tip.attr( 'id', tipId )
this.$element.attr( 'aria-describedby', tipId )
if (this.options.animation) {
$tip.addClass( 'fade' )
var placement = typeof this.options.placement == 'function' ?
this.options.placement.call( this, $tip[0], this.$element[0] ) :
this.options.placement
var autoToken = /\s?auto?\s?/i
var autoPlace = autoToken.test( placement )
if (autoPlace) {
placement = placement.replace( autoToken, '' ) || 'top'
$tip
.detach()
.css( { top: 0, left: 0, display: 'block' } )
.addClass( placement )
.data( 'bs.' + this.type, this )
this.options.container ? $tip.appendTo( this.options.container ) : $tip.insertAfter( this.$element )
this.$element.trigger( 'inserted.bs.' + this.type )
var pos = this.getPosition()
var actualWidth = $tip[0].offsetWidth
var actualHeight = $tip[0].offsetHeight
if (autoPlace) {
var orgPlacement = placement
var viewportDim = this.getPosition( this.$viewport )
placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
placement
$tip
.removeClass( orgPlacement )
.addClass( placement )
}
}
}
}
var calculatedOffset = this.getCalculatedOffset( placement, pos, actualWidth, actualHeight )
this.applyPlacement( calculatedOffset, placement )
var complete = function () {
var prevHoverState = that.hoverState
that.$element.trigger( 'shown.bs.' + that.type )
that.hoverState = null
if (prevHoverState == 'out') {
that.leave( that )
}
}
$.support.transition && this.$tip.hasClass( 'fade' ) ?
$tip
.one( 'bsTransitionEnd', complete )
.emulateTransitionEnd( Tooltip.TRANSITION_DURATION ) :
complete()
}
}
Tooltip.prototype.applyPlacement = function (offset, placement) {
var $tip = this.tip()
var width = $tip[0].offsetWidth
var height = $tip[0].offsetHeight
// manually read margins because getBoundingClientRect includes difference
var marginTop = parseInt( $tip.css( 'margin-top' ), 10 )
var marginLeft = parseInt( $tip.css( 'margin-left' ), 10 )
// we must check for NaN for ie 8/9
if (isNaN( marginTop )) {
marginTop = 0
if (isNaN( marginLeft )) {
marginLeft = 0
offset.top += marginTop
offset.left += marginLeft
// $.fn.offset doesn't round pixel values
// so we use setOffset directly with our own function B-0
$.offset.setOffset(
$tip[0], $.extend(
{
using: function (props) {
$tip.css(
{
top: Math.round( props.top ),
left: Math.round( props.left )
}
)
}
}, offset
), 0
)
$tip.addClass( 'in' )
// check to see if placing tip in new offset caused the tip to resize itself
var actualWidth = $tip[0].offsetWidth
var actualHeight = $tip[0].offsetHeight
if (placement == 'top' && actualHeight != height) {
offset.top = offset.top + height - actualHeight
}
}
}
var delta = this.getViewportAdjustedDelta( placement, offset, actualWidth, actualHeight )
if (delta.left) {
offset.left += delta.left
else {
offset.top += delta.top
var isVertical = /top|bottom/.test( placement )
var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
$tip.offset( offset )
this.replaceArrow( arrowDelta, $tip[0][arrowOffsetPosition], isVertical )
}
}
}
Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
this.arrow()
.css( isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%' )
.css( isVertical ? 'top' : 'left', '' )
}
Tooltip.prototype.setContent = function () {
var $tip = this.tip()
var title = this.getTitle()
$tip.find( '.tooltip-inner' )[this.options.html ? 'html' : 'text'](title)
$tip.removeClass( 'fade in top bottom left right' )
}
Tooltip.prototype.hide = function (callback) {
var that = this
var $tip = $( this.$tip )
var e = $.Event( 'hide.bs.' + this.type )
function complete() {
if (that.hoverState != 'in') {
$tip.detach()
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
that.$element
.removeAttr( 'aria-describedby' )
.trigger( 'hidden.bs.' + that.type )
}
}
callback && callback()
}
this.$element.trigger( e )
if (e.isDefaultPrevented()) {
return
$tip.removeClass( 'in' )
$.support.transition && $tip.hasClass( 'fade' ) ?
$tip
.one( 'bsTransitionEnd', complete )
.emulateTransitionEnd( Tooltip.TRANSITION_DURATION ) :
complete()
this.hoverState = null
return this
}
}
Tooltip.prototype.fixTitle = function () {
var $e = this.$element
if ($e.attr( 'title' ) || typeof $e.attr( 'data-original-title' ) != 'string') {
$e.attr( 'data-original-title', $e.attr( 'title' ) || '' ).attr( 'title', '' )
}
}
Tooltip.prototype.hasContent = function () {
return this.getTitle()
}
Tooltip.prototype.getPosition = function ($element) {
$element = $element || this.$element
var el = $element[0]
var isBody = el.tagName == 'BODY'
var elRect = el.getBoundingClientRect()
if (elRect.width == null) {
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
elRect = $.extend( {}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top } )
}
var isSvg = window.SVGElement && el instanceof window.SVGElement
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
// See https://github.com/twbs/bootstrap/issues/20280
var elOffset = isBody ? { top : 0, left : 0 } : (isSvg ? null : $element.offset())
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
var outerDims = isBody ? { width : $( window ).width(), height : $( window ).height() } : null
return $.extend( {}, elRect, scroll, outerDims, elOffset )
}
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
return placement == 'bottom' ? { top : pos.top + pos.height, left : pos.left + pos.width / 2 - actualWidth / 2 } :
placement == 'top' ? { top : pos.top - actualHeight, left : pos.left + pos.width / 2 - actualWidth / 2 } :
placement == 'left' ? { top : pos.top + pos.height / 2 - actualHeight / 2, left : pos.left - actualWidth } :
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
}
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
var delta = { top: 0, left: 0 }
if ( ! this.$viewport) {
return delta
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
var viewportDimensions = this.getPosition( this.$viewport )
if (/right|left/.test( placement )) {
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
if (topEdgeOffset < viewportDimensions.top) { // top overflow
delta.top = viewportDimensions.top - topEdgeOffset
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
}
} else {
var leftEdgeOffset = pos.left - viewportPadding
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
delta.left = viewportDimensions.left - leftEdgeOffset
} else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
}
}
}
return delta
}
Tooltip.prototype.getTitle = function () {
var title
var $e = this.$element
var o = this.options
title = $e.attr( 'data-original-title' )
|| (typeof o.title == 'function' ? o.title.call( $e[0] ) : o.title)
return title
}
Tooltip.prototype.getUID = function (prefix) {
do {
prefix += ~~( Math.random() * 1000000 )
while (document.getElementById( prefix )) {
return prefix
}
} }
Tooltip.prototype.tip = function () {
if ( ! this.$tip) {
this.$tip = $( this.options.template )
if (this.$tip.length != 1) {
throw new Error( this.type + ' `template` option must consist of exactly 1 top-level element!' )
}
}
return this.$tip
}
Tooltip.prototype.arrow = function () {
return (this.$arrow = this.$arrow || this.tip().find( '.tooltip-arrow' ))
}
Tooltip.prototype.enable = function () {
this.enabled = true
}
Tooltip.prototype.disable = function () {
this.enabled = false
}
Tooltip.prototype.toggleEnabled = function () {
this.enabled = ! this.enabled
}
Tooltip.prototype.toggle = function (e) {
var self = this
if (e) {
self = $( e.currentTarget ).data( 'bs.' + this.type )
if ( ! self) {
self = new this.constructor( e.currentTarget, this.getDelegateOptions() )
$( e.currentTarget ).data( 'bs.' + this.type, self )
}
}
if (e) {
self.inState.click = ! self.inState.click
if (self.isInStateTrue()) {
self.enter( self )
else {
self.leave( self )
}
} } else {
self.tip().hasClass( 'in' ) ? self.leave( self ) : self.enter( self )
}
}
Tooltip.prototype.destroy = function () {
var that = this
clearTimeout( this.timeout )
this.hide(
function () {
that.$element.off( '.' + that.type ).removeData( 'bs.' + that.type )
if (that.$tip) {
that.$tip.detach()
}
that.$tip = null
that.$arrow = null
that.$viewport = null
that.$element = null
}
)
}
// TOOLTIP PLUGIN DEFINITION
// =========================
function Plugin(option) {
return this.each(
function () {
var $this = $( this )
var data = $this.data( 'bs.tooltip' )
var options = typeof option == 'object' && option
if ( ! data && /destroy|hide/.test( option )) {
return
if ( ! data) {
$this.data( 'bs.tooltip', (data = new Tooltip( this, options )) )
if (typeof option == 'string') {
data[option]()
}
}
}
}
)
}
var old = $.fn.tooltip
$.fn.tooltip = Plugin
$.fn.tooltip.Constructor = Tooltip
// TOOLTIP NO CONFLICT
// ===================
$.fn.tooltip.noConflict = function () {
$.fn.tooltip = old
return this
}
}( jQuery );
/* ========================================================================
* Bootstrap: collapse.js v3.3.7
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
/* jshint latedef: false */
+ function ($) {
'use strict';
// COLLAPSE PUBLIC CLASS DEFINITION
// ================================
var Collapse = function (element, options) {
this.$element = $( element )
this.options = $.extend( {}, Collapse.DEFAULTS, options )
this.$trigger = $(
'[data-toggle="collapse"][href="#' + element.id + '"],' +
'[data-toggle="collapse"][data-target="#' + element.id + '"]'
)
this.transitioning = null
if (this.options.parent) {
this.$parent = this.getParent()
} else {
this.addAriaAndCollapsedClass( this.$element, this.$trigger )
}
if (this.options.toggle) {
this.toggle()
}
}
Collapse.VERSION = '3.3.7'
Collapse.TRANSITION_DURATION = 350
Collapse.DEFAULTS = {
toggle: true
}
Collapse.prototype.dimension = function () {
var hasWidth = this.$element.hasClass( 'width' )
return hasWidth ? 'width' : 'height'
}
Collapse.prototype.show = function () {
if (this.transitioning || this.$element.hasClass( 'in' )) {
return
var activesData
var actives = this.$parent && this.$parent.children( '.panel' ).children( '.in, .collapsing' )
if (actives && actives.length) {
activesData = actives.data( 'bs.collapse' )
if (activesData && activesData.transitioning) {
return
}
}
}
var startEvent = $.Event( 'show.bs.collapse' )
this.$element.trigger( startEvent )
if (startEvent.isDefaultPrevented()) {
return
if (actives && actives.length) {
Plugin.call( actives, 'hide' )
activesData || actives.data( 'bs.collapse', null )
}
}
var dimension = this.dimension()
this.$element
.removeClass( 'collapse' )
.addClass( 'collapsing' )[dimension](0)
.attr( 'aria-expanded', true )
this.$trigger
.removeClass( 'collapsed' )
.attr( 'aria-expanded', true )
this.transitioning = 1
var complete = function () {
this.$element
.removeClass( 'collapsing' )
.addClass( 'collapse in' )[dimension]('')
this.transitioning = 0
this.$element
.trigger( 'shown.bs.collapse' )
}
if ( ! $.support.transition) {
return complete.call( this )
var scrollSize = $.camelCase( ['scroll', dimension].join( '-' ) )
this.$element
.one( 'bsTransitionEnd', $.proxy( complete, this ) )
.emulateTransitionEnd( Collapse.TRANSITION_DURATION )[dimension](this.$element[0][scrollSize])
}
}
Collapse.prototype.hide = function () {
if (this.transitioning || ! this.$element.hasClass( 'in' )) {
return
var startEvent = $.Event( 'hide.bs.collapse' )
this.$element.trigger( startEvent )
if (startEvent.isDefaultPrevented()) {
return
var dimension = this.dimension()
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element
.addClass( 'collapsing' )
.removeClass( 'collapse in' )
.attr( 'aria-expanded', false )
this.$trigger
.addClass( 'collapsed' )
.attr( 'aria-expanded', false )
this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element
.removeClass( 'collapsing' )
.addClass( 'collapse' )
.trigger( 'hidden.bs.collapse' )
}
}
}
if ( ! $.support.transition) {
return complete.call( this )
this.$element
[dimension](0)
.one( 'bsTransitionEnd', $.proxy( complete, this ) )
.emulateTransitionEnd( Collapse.TRANSITION_DURATION )
}
}
Collapse.prototype.toggle = function () {
this[this.$element.hasClass( 'in' ) ? 'hide' : 'show']()
}
Collapse.prototype.getParent = function () {
return $( this.options.parent )
.find( '[data-toggle="collapse"][data-parent="' + this.options.parent + '"]' )
.each(
$.proxy(
function (i, element) {
var $element = $( element )
this.addAriaAndCollapsedClass( getTargetFromTrigger( $element ), $element )
}, this
)
)
.end()
}
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
var isOpen = $element.hasClass( 'in' )
$element.attr( 'aria-expanded', isOpen )
$trigger
.toggleClass( 'collapsed', ! isOpen )
.attr( 'aria-expanded', isOpen )
}
function getTargetFromTrigger($trigger) {
var href
var target = $trigger.attr( 'data-target' )
|| (href = $trigger.attr( 'href' )) && href.replace( /.*(?=#[^\s]+$)/, '' ) // strip for ie7
return $( target )
}
// COLLAPSE PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(
function () {
var $this = $( this )
var data = $this.data( 'bs.collapse' )
var options = $.extend( {}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option )
if ( ! data && options.toggle && /show|hide/.test( option )) {
options.toggle = false
if ( ! data) {
$this.data( 'bs.collapse', (data = new Collapse( this, options )) )
if (typeof option == 'string') {
data[option]()
}
}
}
}
)
}
var old = $.fn.collapse
$.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
// COLLAPSE NO CONFLICT
// ====================
$.fn.collapse.noConflict = function () {
$.fn.collapse = old
return this
}
// COLLAPSE DATA-API
// =================
$( document ).on(
'click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
var $this = $( this )
if ( ! $this.attr( 'data-target' )) {
e.preventDefault()
var $target = getTargetFromTrigger( $this )
var data = $target.data( 'bs.collapse' )
var option = data ? 'toggle' : $this.data()
Plugin.call( $target, option )
}
}
)
}(jQuery);
/* ========================================================================
* Bootstrap: transition.js v3.3.7
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+ function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function transitionEnd() {
var el = document.createElement( 'bootstrap' )
var transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd otransitionend',
transition : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
$( this ).one( 'bsTransitionEnd', function () { called = true } )
var callback = function () { if ( ! called) {
$( $el ).trigger( $.support.transition.end ) }
}
setTimeout( callback, duration )
return this
}
$(
function () {
$.support.transition = transitionEnd()
if ( ! $.support.transition) {
return
$.event.special.bsTransitionEnd = {
bindType: $.support.transition.end,
delegateType: $.support.transition.end,
handle: function (e) {
if ($( e.target ).is( this )) {
return e.handleObj.handler.apply( this, arguments )
}
}
}
}
}
)
}(jQuery);