/*! * 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: '