2023-10-24 09:53:42 +00:00
/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
! function ( e , t ) { "object" == typeof module && "object" == typeof module . exports ? module . exports = e . document ? t ( e , ! 0 ) : function ( e ) { if ( ! e . document ) throw new Error ( "jQuery requires a window with a document" ) ; return t ( e ) } : t ( e ) ; } ( "undefined" != typeof window ? window : undefined , function ( ie , e ) { var oe = [ ] , r = Object . getPrototypeOf , ae = oe . slice , g = oe . flat ? function ( e ) { return oe . flat . call ( e ) } : function ( e ) { return oe . concat . apply ( [ ] , e ) } , s = oe . push , se = oe . indexOf , n = { } , i = n . toString , ue = n . hasOwnProperty , o = ue . toString , a = o . call ( Object ) , le = { } , v = function ( e ) { return "function" == typeof e && "number" != typeof e . nodeType && "function" != typeof e . item } , y = function ( e ) { return null != e && e === e . window } , C = ie . document , u = { type : ! 0 , src : ! 0 , nonce : ! 0 , noModule : ! 0 } ; function m ( e , t , n ) { var r , i , o = ( n = n || C ) . createElement ( "script" ) ; if ( o . text = e , t ) for ( r in u ) ( i = t [ r ] || t . getAttribute && t . getAttribute ( r ) ) && o . setAttribute ( r , i ) ; n . head . appendChild ( o ) . parentNode . removeChild ( o ) ; } function x ( e ) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n [ i . call ( e ) ] || "object" : typeof e } var t = "3.7.1" , l = /HTML$/i , ce = function ( e , t ) { return new ce . fn . init ( e , t ) } ; function c ( e ) { var t = ! ! e && "length" in e && e . length , n = x ( e ) ; return ! v ( e ) && ! y ( e ) && ( "array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e ) } function fe ( e , t ) { return e . nodeName && e . nodeName . toLowerCase ( ) === t . toLowerCase ( ) } ce . fn = ce . prototype = { jquery : t , constructor : ce , length : 0 , toArray : function ( ) { return ae . call ( this ) } , get : function ( e ) { return null == e ? ae . call ( this ) : e < 0 ? this [ e + this . length ] : this [ e ] } , pushStack : function ( e ) { var t = ce . merge ( this . constructor ( ) , e ) ; return t . prevObject = this , t } , each : function ( e ) { return ce . each ( this , e ) } , map : function ( n ) { return this . pushStack ( ce . map ( this , function ( e , t ) { return n . call ( e , t , e ) } ) ) } , slice : function ( ) { return this . pushStack ( ae . apply ( this , arguments ) ) } , first : function ( ) { return this . eq ( 0 ) } , last : function ( ) { return this . eq ( - 1 ) } , even : function ( ) { return this . pushStack ( ce . grep ( this , function ( e , t ) { return ( t + 1 ) % 2 } ) ) } , odd : function ( ) { return this . pushStack ( ce . grep ( this , function ( e , t ) { return t % 2 } ) ) } , eq : function ( e ) { var t = this . length , n = + e + ( e < 0 ? t : 0 ) ; return this . pushStack ( 0 <= n && n < t ? [ this [ n ] ] : [ ] ) } , end : function ( ) { return this . prevObject || this . constructor ( ) } , push : s , sort : oe . sort , splice : oe . splice } , ce . extend = ce . fn . extend = function ( ) { var e , t , n , r , i , o , a = arguments [ 0 ] || { } , s = 1 , u = arguments . length , l = ! 1 ; for ( "boolean" == typeof a && ( l = a , a = arguments [ s ] || { } , s ++ ) , "object" == typeof a || v ( a ) || ( a = { } ) , s === u && ( a = this , s -- ) ; s < u ; s ++ ) if ( null != ( e = arguments [ s ] ) ) for ( t in e ) r = e [ t ] , "__proto__" !== t && a !== r && ( l && r && ( ce . isPlainObject ( r ) || ( i = Array . isArray ( r ) ) ) ? ( n = a [ t ] , o = i && ! Array . isArray ( n ) ? [ ] : i || ce . isPlainObject ( n ) ? n : { } , i = ! 1 , a [ t ] = ce . extend ( l , o , r ) ) : void 0 !== r && ( a [ t ] = r ) ) ; return a } , ce . extend ( { expando : "jQuery" + ( t + Math . random ( ) ) . replace ( /\D/g , "" ) , isReady : ! 0 , error : function ( e ) { throw new Error ( e ) } , noop : function ( ) { } , isPlainObject : function ( e ) { var t , n ; return ! ( ! e || "[object Object]" !== i . call ( e ) ) && ( ! ( t = r ( e ) ) || "function" == typeof ( n = ue . call ( t , "constructor" ) && t . constructor ) && o . call ( n ) === a ) } , isEmptyObject : function ( e ) { var t ; for ( t in e ) return ! 1 ; return ! 0 } , globalEval : function ( e , t , n ) { m ( e , { nonce : t && t . nonce } , n ) ; } , each : function ( e , t ) { var n , r = 0 ; if ( c ( e ) ) { for ( n = e . length ; r < n ; r ++ ) if ( ! 1 === t . call ( e [ r ] , r , e [ r ] ) ) break } else for ( r in e ) if ( ! 1 === t . call ( e [ r ] , r , e [ r ] ) ) break ; return e } , text : function ( e ) { var t , n = "" , r = 0 , i = e . nodeType ; if ( ! i ) while ( t = e [ r ++ ] ) n += ce . text ( t ) ; return 1 === i || 11 === i ? e . textContent : 9 === i ? e . documentElement . textContent : 3 === i || 4 === i ? e . nodeValue : n } , makeArray : function ( e , t ) { var n = t || [ ] ; return null != e && ( c ( Object ( e ) ) ? ce . merge ( n , "string" == typeof e ? [ e ] : e ) : s . call ( n , e ) ) , n } , inArray : function ( e , t , n ) { return null == t ? - 1 : se . call ( t , e , n ) } , isXMLDoc : function ( e ) { var t = e && e . namespaceURI , n = e && ( e . ownerDocument || e ) . documentElement ; return ! l . test ( t || n && n . nodeName || "HTML" ) } , merge : function ( e , t ) { for ( var n = + t . length , r = 0 , i = e . length ; r < n ; r ++ ) e [ i ++ ] = t [ r ] ; return e . length = i , e } , grep : function ( e , t , n ) { for ( var r = [ ] , i = 0 , o = e . length , a = ! n ; i < o ; i ++ ) ! t ( e [ i ] , i ) !== a && r . push ( e [ i ] ) ; return r } , map : function ( e , t , n ) { var r , i , o = 0 , a = [ ] ; if ( c ( e ) ) for ( r = e . length ; o < r ; o ++ ) null != ( i = t ( e [ o ] , o , n ) ) && a . push ( i ) ; else for ( o in e ) null != ( i = t ( e [ o ] , o , n ) ) && a . push ( i ) ; return g ( a ) } , guid : 1 , support : le } ) , "function" == typeof Symbol && ( ce
/ *
_ _ _ _
_ _ _ | ( _ ) _ _ _ | | _ _ ( _ ) _ _ _
/ __| | |/ _ _ | | / / | / _ _ |
\ _ _ \ | | ( _ _ | < _ | \ _ _ \
| _ _ _ / _ | _ | \ _ _ _ | _ | \ _ ( _ ) / | _ _ _ /
| _ _ /
Version : 1.6 . 0
Author : Ken Wheeler
Website : http : //kenwheeler.github.io
Docs : http : //kenwheeler.github.io/slick
Repo : http : //github.com/kenwheeler/slick
Issues : http : //github.com/kenwheeler/slick/issues
* /
/* global window, document, define, jQuery, setInterval, clearInterval */
( function ( factory ) {
if ( typeof define === 'function' && define . amd ) {
define ( [ 'jquery' ] , factory ) ;
} else if ( typeof exports !== 'undefined' ) {
module . exports = factory ( require ( 'jquery' ) ) ;
} else {
factory ( jQuery ) ;
}
} ( function ( $ ) {
var Slick = window . Slick || { } ;
Slick = ( function ( ) {
var instanceUid = 0 ;
function Slick ( element , settings ) {
var _ = this , dataSettings ;
_ . defaults = {
accessibility : true ,
adaptiveHeight : false ,
appendArrows : $ ( element ) ,
appendDots : $ ( element ) ,
arrows : true ,
asNavFor : null ,
prevArrow : '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>' ,
nextArrow : '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>' ,
autoplay : false ,
autoplaySpeed : 3000 ,
centerMode : false ,
centerPadding : '50px' ,
cssEase : 'ease' ,
customPaging : function ( slider , i ) {
return $ ( '<button type="button" data-role="none" role="button" tabindex="0" />' ) . text ( i + 1 ) ;
} ,
dots : false ,
dotsClass : 'slick-dots' ,
draggable : true ,
easing : 'linear' ,
edgeFriction : 0.35 ,
fade : false ,
focusOnSelect : false ,
infinite : true ,
initialSlide : 0 ,
lazyLoad : 'ondemand' ,
mobileFirst : false ,
pauseOnHover : true ,
pauseOnFocus : true ,
pauseOnDotsHover : false ,
respondTo : 'window' ,
responsive : null ,
rows : 1 ,
rtl : false ,
slide : '' ,
slidesPerRow : 1 ,
slidesToShow : 1 ,
slidesToScroll : 1 ,
speed : 500 ,
swipe : true ,
swipeToSlide : false ,
touchMove : true ,
touchThreshold : 5 ,
useCSS : true ,
useTransform : true ,
variableWidth : false ,
vertical : false ,
verticalSwiping : false ,
waitForAnimate : true ,
zIndex : 1000
} ;
_ . initials = {
animating : false ,
dragging : false ,
autoPlayTimer : null ,
currentDirection : 0 ,
currentLeft : null ,
currentSlide : 0 ,
direction : 1 ,
$dots : null ,
listWidth : null ,
listHeight : null ,
loadIndex : 0 ,
$nextArrow : null ,
$prevArrow : null ,
slideCount : null ,
slideWidth : null ,
$slideTrack : null ,
$slides : null ,
sliding : false ,
slideOffset : 0 ,
swipeLeft : null ,
$list : null ,
touchObject : { } ,
transformsEnabled : false ,
unslicked : false
} ;
$ . extend ( _ , _ . initials ) ;
_ . activeBreakpoint = null ;
_ . animType = null ;
_ . animProp = null ;
_ . breakpoints = [ ] ;
_ . breakpointSettings = [ ] ;
_ . cssTransitions = false ;
_ . focussed = false ;
_ . interrupted = false ;
_ . hidden = 'hidden' ;
_ . paused = true ;
_ . positionProp = null ;
_ . respondTo = null ;
_ . rowCount = 1 ;
_ . shouldClick = true ;
_ . $slider = $ ( element ) ;
_ . $slidesCache = null ;
_ . transformType = null ;
_ . transitionType = null ;
_ . visibilityChange = 'visibilitychange' ;
_ . windowWidth = 0 ;
_ . windowTimer = null ;
dataSettings = $ ( element ) . data ( 'slick' ) || { } ;
_ . options = $ . extend ( { } , _ . defaults , settings , dataSettings ) ;
_ . currentSlide = _ . options . initialSlide ;
_ . originalSettings = _ . options ;
if ( typeof document . mozHidden !== 'undefined' ) {
_ . hidden = 'mozHidden' ;
_ . visibilityChange = 'mozvisibilitychange' ;
} else if ( typeof document . webkitHidden !== 'undefined' ) {
_ . hidden = 'webkitHidden' ;
_ . visibilityChange = 'webkitvisibilitychange' ;
}
_ . autoPlay = $ . proxy ( _ . autoPlay , _ ) ;
_ . autoPlayClear = $ . proxy ( _ . autoPlayClear , _ ) ;
_ . autoPlayIterator = $ . proxy ( _ . autoPlayIterator , _ ) ;
_ . changeSlide = $ . proxy ( _ . changeSlide , _ ) ;
_ . clickHandler = $ . proxy ( _ . clickHandler , _ ) ;
_ . selectHandler = $ . proxy ( _ . selectHandler , _ ) ;
_ . setPosition = $ . proxy ( _ . setPosition , _ ) ;
_ . swipeHandler = $ . proxy ( _ . swipeHandler , _ ) ;
_ . dragHandler = $ . proxy ( _ . dragHandler , _ ) ;
_ . keyHandler = $ . proxy ( _ . keyHandler , _ ) ;
_ . instanceUid = instanceUid ++ ;
// A simple way to check for HTML strings
// Strict HTML recognition (must start with <)
// Extracted from jQuery v1.11 source
_ . htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/ ;
_ . registerBreakpoints ( ) ;
_ . init ( true ) ;
}
return Slick ;
} ( ) ) ;
Slick . prototype . activateADA = function ( ) {
var _ = this ;
_ . $slideTrack . find ( '.slick-active' ) . attr ( {
'aria-hidden' : 'false'
} ) . find ( 'a, input, button, select' ) . attr ( {
'tabindex' : '0'
} ) ;
} ;
Slick . prototype . addSlide = Slick . prototype . slickAdd = function ( markup , index , addBefore ) {
var _ = this ;
if ( typeof ( index ) === 'boolean' ) {
addBefore = index ;
index = null ;
} else if ( index < 0 || ( index >= _ . slideCount ) ) {
return false ;
}
_ . unload ( ) ;
if ( typeof ( index ) === 'number' ) {
if ( index === 0 && _ . $slides . length === 0 ) {
$ ( markup ) . appendTo ( _ . $slideTrack ) ;
} else if ( addBefore ) {
$ ( markup ) . insertBefore ( _ . $slides . eq ( index ) ) ;
} else {
$ ( markup ) . insertAfter ( _ . $slides . eq ( index ) ) ;
}
} else {
if ( addBefore === true ) {
$ ( markup ) . prependTo ( _ . $slideTrack ) ;
} else {
$ ( markup ) . appendTo ( _ . $slideTrack ) ;
}
}
_ . $slides = _ . $slideTrack . children ( this . options . slide ) ;
_ . $slideTrack . children ( this . options . slide ) . detach ( ) ;
_ . $slideTrack . append ( _ . $slides ) ;
_ . $slides . each ( function ( index , element ) {
$ ( element ) . attr ( 'data-slick-index' , index ) ;
} ) ;
_ . $slidesCache = _ . $slides ;
_ . reinit ( ) ;
} ;
Slick . prototype . animateHeight = function ( ) {
var _ = this ;
if ( _ . options . slidesToShow === 1 && _ . options . adaptiveHeight === true && _ . options . vertical === false ) {
var targetHeight = _ . $slides . eq ( _ . currentSlide ) . outerHeight ( true ) ;
_ . $list . animate ( {
height : targetHeight
} , _ . options . speed ) ;
}
} ;
Slick . prototype . animateSlide = function ( targetLeft , callback ) {
var animProps = { } ,
_ = this ;
_ . animateHeight ( ) ;
if ( _ . options . rtl === true && _ . options . vertical === false ) {
targetLeft = - targetLeft ;
}
if ( _ . transformsEnabled === false ) {
if ( _ . options . vertical === false ) {
_ . $slideTrack . animate ( {
left : targetLeft
} , _ . options . speed , _ . options . easing , callback ) ;
} else {
_ . $slideTrack . animate ( {
top : targetLeft
} , _ . options . speed , _ . options . easing , callback ) ;
}
} else {
if ( _ . cssTransitions === false ) {
if ( _ . options . rtl === true ) {
_ . currentLeft = - ( _ . currentLeft ) ;
}
$ ( {
animStart : _ . currentLeft
} ) . animate ( {
animStart : targetLeft
} , {
duration : _ . options . speed ,
easing : _ . options . easing ,
step : function ( now ) {
now = Math . ceil ( now ) ;
if ( _ . options . vertical === false ) {
animProps [ _ . animType ] = 'translate(' +
now + 'px, 0px)' ;
_ . $slideTrack . css ( animProps ) ;
} else {
animProps [ _ . animType ] = 'translate(0px,' +
now + 'px)' ;
_ . $slideTrack . css ( animProps ) ;
}
} ,
complete : function ( ) {
if ( callback ) {
callback . call ( ) ;
}
}
} ) ;
} else {
_ . applyTransition ( ) ;
targetLeft = Math . ceil ( targetLeft ) ;
if ( _ . options . vertical === false ) {
animProps [ _ . animType ] = 'translate3d(' + targetLeft + 'px, 0px, 0px)' ;
} else {
animProps [ _ . animType ] = 'translate3d(0px,' + targetLeft + 'px, 0px)' ;
}
_ . $slideTrack . css ( animProps ) ;
if ( callback ) {
setTimeout ( function ( ) {
_ . disableTransition ( ) ;
callback . call ( ) ;
} , _ . options . speed ) ;
}
}
}
} ;
Slick . prototype . getNavTarget = function ( ) {
var _ = this ,
asNavFor = _ . options . asNavFor ;
if ( asNavFor && asNavFor !== null ) {
asNavFor = $ ( asNavFor ) . not ( _ . $slider ) ;
}
return asNavFor ;
} ;
Slick . prototype . asNavFor = function ( index ) {
var _ = this ,
asNavFor = _ . getNavTarget ( ) ;
if ( asNavFor !== null && typeof asNavFor === 'object' ) {
asNavFor . each ( function ( ) {
var target = $ ( this ) . slick ( 'getSlick' ) ;
if ( ! target . unslicked ) {
target . slideHandler ( index , true ) ;
}
} ) ;
}
} ;
Slick . prototype . applyTransition = function ( slide ) {
var _ = this ,
transition = { } ;
if ( _ . options . fade === false ) {
transition [ _ . transitionType ] = _ . transformType + ' ' + _ . options . speed + 'ms ' + _ . options . cssEase ;
} else {
transition [ _ . transitionType ] = 'opacity ' + _ . options . speed + 'ms ' + _ . options . cssEase ;
}
if ( _ . options . fade === false ) {
_ . $slideTrack . css ( transition ) ;
} else {
_ . $slides . eq ( slide ) . css ( transition ) ;
}
} ;
Slick . prototype . autoPlay = function ( ) {
var _ = this ;
_ . autoPlayClear ( ) ;
if ( _ . slideCount > _ . options . slidesToShow ) {
_ . autoPlayTimer = setInterval ( _ . autoPlayIterator , _ . options . autoplaySpeed ) ;
}
} ;
Slick . prototype . autoPlayClear = function ( ) {
var _ = this ;
if ( _ . autoPlayTimer ) {
clearInterval ( _ . autoPlayTimer ) ;
}
} ;
Slick . prototype . autoPlayIterator = function ( ) {
var _ = this ,
slideTo = _ . currentSlide + _ . options . slidesToScroll ;
if ( ! _ . paused && ! _ . interrupted && ! _ . focussed ) {
if ( _ . options . infinite === false ) {
if ( _ . direction === 1 && ( _ . currentSlide + 1 ) === ( _ . slideCount - 1 ) ) {
_ . direction = 0 ;
}
else if ( _ . direction === 0 ) {
slideTo = _ . currentSlide - _ . options . slidesToScroll ;
if ( _ . currentSlide - 1 === 0 ) {
_ . direction = 1 ;
}
}
}
_ . slideHandler ( slideTo ) ;
}
} ;
Slick . prototype . buildArrows = function ( ) {
var _ = this ;
if ( _ . options . arrows === true ) {
_ . $prevArrow = $ ( _ . options . prevArrow ) . addClass ( 'slick-arrow' ) ;
_ . $nextArrow = $ ( _ . options . nextArrow ) . addClass ( 'slick-arrow' ) ;
if ( _ . slideCount > _ . options . slidesToShow ) {
_ . $prevArrow . removeClass ( 'slick-hidden' ) . removeAttr ( 'aria-hidden tabindex' ) ;
_ . $nextArrow . removeClass ( 'slick-hidden' ) . removeAttr ( 'aria-hidden tabindex' ) ;
if ( _ . htmlExpr . test ( _ . options . prevArrow ) ) {
_ . $prevArrow . prependTo ( _ . options . appendArrows ) ;
}
if ( _ . htmlExpr . test ( _ . options . nextArrow ) ) {
_ . $nextArrow . appendTo ( _ . options . appendArrows ) ;
}
if ( _ . options . infinite !== true ) {
_ . $prevArrow
. addClass ( 'slick-disabled' )
. attr ( 'aria-disabled' , 'true' ) ;
}
} else {
_ . $prevArrow . add ( _ . $nextArrow )
. addClass ( 'slick-hidden' )
. attr ( {
'aria-disabled' : 'true' ,
'tabindex' : '-1'
} ) ;
}
}
} ;
Slick . prototype . buildDots = function ( ) {
var _ = this ,
i , dot ;
if ( _ . options . dots === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $slider . addClass ( 'slick-dotted' ) ;
dot = $ ( '<ul />' ) . addClass ( _ . options . dotsClass ) ;
for ( i = 0 ; i <= _ . getDotCount ( ) ; i += 1 ) {
dot . append ( $ ( '<li />' ) . append ( _ . options . customPaging . call ( this , _ , i ) ) ) ;
}
_ . $dots = dot . appendTo ( _ . options . appendDots ) ;
_ . $dots . find ( 'li' ) . first ( ) . addClass ( 'slick-active' ) . attr ( 'aria-hidden' , 'false' ) ;
}
} ;
Slick . prototype . buildOut = function ( ) {
var _ = this ;
_ . $slides =
_ . $slider
. children ( _ . options . slide + ':not(.slick-cloned)' )
. addClass ( 'slick-slide' ) ;
_ . slideCount = _ . $slides . length ;
_ . $slides . each ( function ( index , element ) {
$ ( element )
. attr ( 'data-slick-index' , index )
. data ( 'originalStyling' , $ ( element ) . attr ( 'style' ) || '' ) ;
} ) ;
_ . $slider . addClass ( 'slick-slider' ) ;
_ . $slideTrack = ( _ . slideCount === 0 ) ?
$ ( '<div class="slick-track"/>' ) . appendTo ( _ . $slider ) :
_ . $slides . wrapAll ( '<div class="slick-track"/>' ) . parent ( ) ;
_ . $list = _ . $slideTrack . wrap (
'<div aria-live="polite" class="slick-list"/>' ) . parent ( ) ;
_ . $slideTrack . css ( 'opacity' , 0 ) ;
if ( _ . options . centerMode === true || _ . options . swipeToSlide === true ) {
_ . options . slidesToScroll = 1 ;
}
$ ( 'img[data-lazy]' , _ . $slider ) . not ( '[src]' ) . addClass ( 'slick-loading' ) ;
_ . setupInfinite ( ) ;
_ . buildArrows ( ) ;
_ . buildDots ( ) ;
_ . updateDots ( ) ;
_ . setSlideClasses ( typeof _ . currentSlide === 'number' ? _ . currentSlide : 0 ) ;
if ( _ . options . draggable === true ) {
_ . $list . addClass ( 'draggable' ) ;
}
} ;
Slick . prototype . buildRows = function ( ) {
var _ = this , a , b , c , newSlides , numOfSlides , originalSlides , slidesPerSection ;
newSlides = document . createDocumentFragment ( ) ;
originalSlides = _ . $slider . children ( ) ;
if ( _ . options . rows > 1 ) {
slidesPerSection = _ . options . slidesPerRow * _ . options . rows ;
numOfSlides = Math . ceil (
originalSlides . length / slidesPerSection
) ;
for ( a = 0 ; a < numOfSlides ; a ++ ) {
var slide = document . createElement ( 'div' ) ;
for ( b = 0 ; b < _ . options . rows ; b ++ ) {
var row = document . createElement ( 'div' ) ;
for ( c = 0 ; c < _ . options . slidesPerRow ; c ++ ) {
var target = ( a * slidesPerSection + ( ( b * _ . options . slidesPerRow ) + c ) ) ;
if ( originalSlides . get ( target ) ) {
row . appendChild ( originalSlides . get ( target ) ) ;
}
}
slide . appendChild ( row ) ;
}
newSlides . appendChild ( slide ) ;
}
_ . $slider . empty ( ) . append ( newSlides ) ;
_ . $slider . children ( ) . children ( ) . children ( )
. css ( {
'width' : ( 100 / _ . options . slidesPerRow ) + '%' ,
'display' : 'inline-block'
} ) ;
}
} ;
Slick . prototype . checkResponsive = function ( initial , forceUpdate ) {
var _ = this ,
breakpoint , targetBreakpoint , respondToWidth , triggerBreakpoint = false ;
var sliderWidth = _ . $slider . width ( ) ;
var windowWidth = window . innerWidth || $ ( window ) . width ( ) ;
if ( _ . respondTo === 'window' ) {
respondToWidth = windowWidth ;
} else if ( _ . respondTo === 'slider' ) {
respondToWidth = sliderWidth ;
} else if ( _ . respondTo === 'min' ) {
respondToWidth = Math . min ( windowWidth , sliderWidth ) ;
}
if ( _ . options . responsive &&
_ . options . responsive . length &&
_ . options . responsive !== null ) {
targetBreakpoint = null ;
for ( breakpoint in _ . breakpoints ) {
if ( _ . breakpoints . hasOwnProperty ( breakpoint ) ) {
if ( _ . originalSettings . mobileFirst === false ) {
if ( respondToWidth < _ . breakpoints [ breakpoint ] ) {
targetBreakpoint = _ . breakpoints [ breakpoint ] ;
}
} else {
if ( respondToWidth > _ . breakpoints [ breakpoint ] ) {
targetBreakpoint = _ . breakpoints [ breakpoint ] ;
}
}
}
}
if ( targetBreakpoint !== null ) {
if ( _ . activeBreakpoint !== null ) {
if ( targetBreakpoint !== _ . activeBreakpoint || forceUpdate ) {
_ . activeBreakpoint =
targetBreakpoint ;
if ( _ . breakpointSettings [ targetBreakpoint ] === 'unslick' ) {
_ . unslick ( targetBreakpoint ) ;
} else {
_ . options = $ . extend ( { } , _ . originalSettings ,
_ . breakpointSettings [
targetBreakpoint ] ) ;
if ( initial === true ) {
_ . currentSlide = _ . options . initialSlide ;
}
_ . refresh ( initial ) ;
}
triggerBreakpoint = targetBreakpoint ;
}
} else {
_ . activeBreakpoint = targetBreakpoint ;
if ( _ . breakpointSettings [ targetBreakpoint ] === 'unslick' ) {
_ . unslick ( targetBreakpoint ) ;
} else {
_ . options = $ . extend ( { } , _ . originalSettings ,
_ . breakpointSettings [
targetBreakpoint ] ) ;
if ( initial === true ) {
_ . currentSlide = _ . options . initialSlide ;
}
_ . refresh ( initial ) ;
}
triggerBreakpoint = targetBreakpoint ;
}
} else {
if ( _ . activeBreakpoint !== null ) {
_ . activeBreakpoint = null ;
_ . options = _ . originalSettings ;
if ( initial === true ) {
_ . currentSlide = _ . options . initialSlide ;
}
_ . refresh ( initial ) ;
triggerBreakpoint = targetBreakpoint ;
}
}
// only trigger breakpoints during an actual break. not on initialize.
if ( ! initial && triggerBreakpoint !== false ) {
_ . $slider . trigger ( 'breakpoint' , [ _ , triggerBreakpoint ] ) ;
}
}
} ;
Slick . prototype . changeSlide = function ( event , dontAnimate ) {
var _ = this ,
$target = $ ( event . currentTarget ) ,
indexOffset , slideOffset , unevenOffset ;
// If target is a link, prevent default action.
if ( $target . is ( 'a' ) ) {
event . preventDefault ( ) ;
}
// If target is not the <li> element (ie: a child), find the <li>.
if ( ! $target . is ( 'li' ) ) {
$target = $target . closest ( 'li' ) ;
}
unevenOffset = ( _ . slideCount % _ . options . slidesToScroll !== 0 ) ;
indexOffset = unevenOffset ? 0 : ( _ . slideCount - _ . currentSlide ) % _ . options . slidesToScroll ;
switch ( event . data . message ) {
case 'previous' :
slideOffset = indexOffset === 0 ? _ . options . slidesToScroll : _ . options . slidesToShow - indexOffset ;
if ( _ . slideCount > _ . options . slidesToShow ) {
_ . slideHandler ( _ . currentSlide - slideOffset , false , dontAnimate ) ;
}
break ;
case 'next' :
slideOffset = indexOffset === 0 ? _ . options . slidesToScroll : indexOffset ;
if ( _ . slideCount > _ . options . slidesToShow ) {
_ . slideHandler ( _ . currentSlide + slideOffset , false , dontAnimate ) ;
}
break ;
case 'index' :
var index = event . data . index === 0 ? 0 :
event . data . index || $target . index ( ) * _ . options . slidesToScroll ;
_ . slideHandler ( _ . checkNavigable ( index ) , false , dontAnimate ) ;
$target . children ( ) . trigger ( 'focus' ) ;
break ;
default :
return ;
}
} ;
Slick . prototype . checkNavigable = function ( index ) {
var _ = this ,
navigables , prevNavigable ;
navigables = _ . getNavigableIndexes ( ) ;
prevNavigable = 0 ;
if ( index > navigables [ navigables . length - 1 ] ) {
index = navigables [ navigables . length - 1 ] ;
} else {
for ( var n in navigables ) {
if ( index < navigables [ n ] ) {
index = prevNavigable ;
break ;
}
prevNavigable = navigables [ n ] ;
}
}
return index ;
} ;
Slick . prototype . cleanUpEvents = function ( ) {
var _ = this ;
if ( _ . options . dots && _ . $dots !== null ) {
$ ( 'li' , _ . $dots )
. off ( 'click.slick' , _ . changeSlide )
. off ( 'mouseenter.slick' , $ . proxy ( _ . interrupt , _ , true ) )
. off ( 'mouseleave.slick' , $ . proxy ( _ . interrupt , _ , false ) ) ;
}
_ . $slider . off ( 'focus.slick blur.slick' ) ;
if ( _ . options . arrows === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $prevArrow && _ . $prevArrow . off ( 'click.slick' , _ . changeSlide ) ;
_ . $nextArrow && _ . $nextArrow . off ( 'click.slick' , _ . changeSlide ) ;
}
_ . $list . off ( 'touchstart.slick mousedown.slick' , _ . swipeHandler ) ;
_ . $list . off ( 'touchmove.slick mousemove.slick' , _ . swipeHandler ) ;
_ . $list . off ( 'touchend.slick mouseup.slick' , _ . swipeHandler ) ;
_ . $list . off ( 'touchcancel.slick mouseleave.slick' , _ . swipeHandler ) ;
_ . $list . off ( 'click.slick' , _ . clickHandler ) ;
$ ( document ) . off ( _ . visibilityChange , _ . visibility ) ;
_ . cleanUpSlideEvents ( ) ;
if ( _ . options . accessibility === true ) {
_ . $list . off ( 'keydown.slick' , _ . keyHandler ) ;
}
if ( _ . options . focusOnSelect === true ) {
$ ( _ . $slideTrack ) . children ( ) . off ( 'click.slick' , _ . selectHandler ) ;
}
$ ( window ) . off ( 'orientationchange.slick.slick-' + _ . instanceUid , _ . orientationChange ) ;
$ ( window ) . off ( 'resize.slick.slick-' + _ . instanceUid , _ . resize ) ;
$ ( '[draggable!=true]' , _ . $slideTrack ) . off ( 'dragstart' , _ . preventDefault ) ;
$ ( window ) . off ( 'load.slick.slick-' + _ . instanceUid , _ . setPosition ) ;
$ ( document ) . off ( 'ready.slick.slick-' + _ . instanceUid , _ . setPosition ) ;
} ;
Slick . prototype . cleanUpSlideEvents = function ( ) {
var _ = this ;
_ . $list . off ( 'mouseenter.slick' , $ . proxy ( _ . interrupt , _ , true ) ) ;
_ . $list . off ( 'mouseleave.slick' , $ . proxy ( _ . interrupt , _ , false ) ) ;
} ;
Slick . prototype . cleanUpRows = function ( ) {
var _ = this , originalSlides ;
if ( _ . options . rows > 1 ) {
originalSlides = _ . $slides . children ( ) . children ( ) ;
originalSlides . removeAttr ( 'style' ) ;
_ . $slider . empty ( ) . append ( originalSlides ) ;
}
} ;
Slick . prototype . clickHandler = function ( event ) {
var _ = this ;
if ( _ . shouldClick === false ) {
event . stopImmediatePropagation ( ) ;
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
}
} ;
Slick . prototype . destroy = function ( refresh ) {
var _ = this ;
_ . autoPlayClear ( ) ;
_ . touchObject = { } ;
_ . cleanUpEvents ( ) ;
$ ( '.slick-cloned' , _ . $slider ) . detach ( ) ;
if ( _ . $dots ) {
_ . $dots . remove ( ) ;
}
if ( _ . $prevArrow && _ . $prevArrow . length ) {
_ . $prevArrow
. removeClass ( 'slick-disabled slick-arrow slick-hidden' )
. removeAttr ( 'aria-hidden aria-disabled tabindex' )
. css ( 'display' , '' ) ;
if ( _ . htmlExpr . test ( _ . options . prevArrow ) ) {
_ . $prevArrow . remove ( ) ;
}
}
if ( _ . $nextArrow && _ . $nextArrow . length ) {
_ . $nextArrow
. removeClass ( 'slick-disabled slick-arrow slick-hidden' )
. removeAttr ( 'aria-hidden aria-disabled tabindex' )
. css ( 'display' , '' ) ;
if ( _ . htmlExpr . test ( _ . options . nextArrow ) ) {
_ . $nextArrow . remove ( ) ;
}
}
if ( _ . $slides ) {
_ . $slides
. removeClass ( 'slick-slide slick-active slick-center slick-visible slick-current' )
. removeAttr ( 'aria-hidden' )
. removeAttr ( 'data-slick-index' )
. each ( function ( ) {
$ ( this ) . attr ( 'style' , $ ( this ) . data ( 'originalStyling' ) ) ;
} ) ;
_ . $slideTrack . children ( this . options . slide ) . detach ( ) ;
_ . $slideTrack . detach ( ) ;
_ . $list . detach ( ) ;
_ . $slider . append ( _ . $slides ) ;
}
_ . cleanUpRows ( ) ;
_ . $slider . removeClass ( 'slick-slider' ) ;
_ . $slider . removeClass ( 'slick-initialized' ) ;
_ . $slider . removeClass ( 'slick-dotted' ) ;
_ . unslicked = true ;
if ( ! refresh ) {
_ . $slider . trigger ( 'destroy' , [ _ ] ) ;
}
} ;
Slick . prototype . disableTransition = function ( slide ) {
var _ = this ,
transition = { } ;
transition [ _ . transitionType ] = '' ;
if ( _ . options . fade === false ) {
_ . $slideTrack . css ( transition ) ;
} else {
_ . $slides . eq ( slide ) . css ( transition ) ;
}
} ;
Slick . prototype . fadeSlide = function ( slideIndex , callback ) {
var _ = this ;
if ( _ . cssTransitions === false ) {
_ . $slides . eq ( slideIndex ) . css ( {
zIndex : _ . options . zIndex
} ) ;
_ . $slides . eq ( slideIndex ) . animate ( {
opacity : 1
} , _ . options . speed , _ . options . easing , callback ) ;
} else {
_ . applyTransition ( slideIndex ) ;
_ . $slides . eq ( slideIndex ) . css ( {
opacity : 1 ,
zIndex : _ . options . zIndex
} ) ;
if ( callback ) {
setTimeout ( function ( ) {
_ . disableTransition ( slideIndex ) ;
callback . call ( ) ;
} , _ . options . speed ) ;
}
}
} ;
Slick . prototype . fadeSlideOut = function ( slideIndex ) {
var _ = this ;
if ( _ . cssTransitions === false ) {
_ . $slides . eq ( slideIndex ) . animate ( {
opacity : 0 ,
zIndex : _ . options . zIndex - 2
} , _ . options . speed , _ . options . easing ) ;
} else {
_ . applyTransition ( slideIndex ) ;
_ . $slides . eq ( slideIndex ) . css ( {
opacity : 0 ,
zIndex : _ . options . zIndex - 2
} ) ;
}
} ;
Slick . prototype . filterSlides = Slick . prototype . slickFilter = function ( filter ) {
var _ = this ;
if ( filter !== null ) {
_ . $slidesCache = _ . $slides ;
_ . unload ( ) ;
_ . $slideTrack . children ( this . options . slide ) . detach ( ) ;
_ . $slidesCache . filter ( filter ) . appendTo ( _ . $slideTrack ) ;
_ . reinit ( ) ;
}
} ;
Slick . prototype . focusHandler = function ( ) {
var _ = this ;
_ . $slider
. off ( 'focus.slick blur.slick' )
. on ( 'focus.slick blur.slick' ,
'*:not(.slick-arrow)' , function ( event ) {
event . stopImmediatePropagation ( ) ;
var $sf = $ ( this ) ;
setTimeout ( function ( ) {
if ( _ . options . pauseOnFocus ) {
_ . focussed = $sf . is ( ':focus' ) ;
_ . autoPlay ( ) ;
}
} , 0 ) ;
} ) ;
} ;
Slick . prototype . getCurrent = Slick . prototype . slickCurrentSlide = function ( ) {
var _ = this ;
return _ . currentSlide ;
} ;
Slick . prototype . getDotCount = function ( ) {
var _ = this ;
var breakPoint = 0 ;
var counter = 0 ;
var pagerQty = 0 ;
if ( _ . options . infinite === true ) {
while ( breakPoint < _ . slideCount ) {
++ pagerQty ;
breakPoint = counter + _ . options . slidesToScroll ;
counter += _ . options . slidesToScroll <= _ . options . slidesToShow ? _ . options . slidesToScroll : _ . options . slidesToShow ;
}
} else if ( _ . options . centerMode === true ) {
pagerQty = _ . slideCount ;
} else if ( ! _ . options . asNavFor ) {
pagerQty = 1 + Math . ceil ( ( _ . slideCount - _ . options . slidesToShow ) / _ . options . slidesToScroll ) ;
} else {
while ( breakPoint < _ . slideCount ) {
++ pagerQty ;
breakPoint = counter + _ . options . slidesToScroll ;
counter += _ . options . slidesToScroll <= _ . options . slidesToShow ? _ . options . slidesToScroll : _ . options . slidesToShow ;
}
}
return pagerQty - 1 ;
} ;
Slick . prototype . getLeft = function ( slideIndex ) {
var _ = this ,
targetLeft ,
verticalHeight ,
verticalOffset = 0 ,
targetSlide ;
_ . slideOffset = 0 ;
verticalHeight = _ . $slides . first ( ) . outerHeight ( true ) ;
if ( _ . options . infinite === true ) {
if ( _ . slideCount > _ . options . slidesToShow ) {
_ . slideOffset = ( _ . slideWidth * _ . options . slidesToShow ) * - 1 ;
verticalOffset = ( verticalHeight * _ . options . slidesToShow ) * - 1 ;
}
if ( _ . slideCount % _ . options . slidesToScroll !== 0 ) {
if ( slideIndex + _ . options . slidesToScroll > _ . slideCount && _ . slideCount > _ . options . slidesToShow ) {
if ( slideIndex > _ . slideCount ) {
_ . slideOffset = ( ( _ . options . slidesToShow - ( slideIndex - _ . slideCount ) ) * _ . slideWidth ) * - 1 ;
verticalOffset = ( ( _ . options . slidesToShow - ( slideIndex - _ . slideCount ) ) * verticalHeight ) * - 1 ;
} else {
_ . slideOffset = ( ( _ . slideCount % _ . options . slidesToScroll ) * _ . slideWidth ) * - 1 ;
verticalOffset = ( ( _ . slideCount % _ . options . slidesToScroll ) * verticalHeight ) * - 1 ;
}
}
}
} else {
if ( slideIndex + _ . options . slidesToShow > _ . slideCount ) {
_ . slideOffset = ( ( slideIndex + _ . options . slidesToShow ) - _ . slideCount ) * _ . slideWidth ;
verticalOffset = ( ( slideIndex + _ . options . slidesToShow ) - _ . slideCount ) * verticalHeight ;
}
}
if ( _ . slideCount <= _ . options . slidesToShow ) {
_ . slideOffset = 0 ;
verticalOffset = 0 ;
}
if ( _ . options . centerMode === true && _ . options . infinite === true ) {
_ . slideOffset += _ . slideWidth * Math . floor ( _ . options . slidesToShow / 2 ) - _ . slideWidth ;
} else if ( _ . options . centerMode === true ) {
_ . slideOffset = 0 ;
_ . slideOffset += _ . slideWidth * Math . floor ( _ . options . slidesToShow / 2 ) ;
}
if ( _ . options . vertical === false ) {
targetLeft = ( ( slideIndex * _ . slideWidth ) * - 1 ) + _ . slideOffset ;
} else {
targetLeft = ( ( slideIndex * verticalHeight ) * - 1 ) + verticalOffset ;
}
if ( _ . options . variableWidth === true ) {
if ( _ . slideCount <= _ . options . slidesToShow || _ . options . infinite === false ) {
targetSlide = _ . $slideTrack . children ( '.slick-slide' ) . eq ( slideIndex ) ;
} else {
targetSlide = _ . $slideTrack . children ( '.slick-slide' ) . eq ( slideIndex + _ . options . slidesToShow ) ;
}
if ( _ . options . rtl === true ) {
if ( targetSlide [ 0 ] ) {
targetLeft = ( _ . $slideTrack . width ( ) - targetSlide [ 0 ] . offsetLeft - targetSlide . width ( ) ) * - 1 ;
} else {
targetLeft = 0 ;
}
} else {
targetLeft = targetSlide [ 0 ] ? targetSlide [ 0 ] . offsetLeft * - 1 : 0 ;
}
if ( _ . options . centerMode === true ) {
if ( _ . slideCount <= _ . options . slidesToShow || _ . options . infinite === false ) {
targetSlide = _ . $slideTrack . children ( '.slick-slide' ) . eq ( slideIndex ) ;
} else {
targetSlide = _ . $slideTrack . children ( '.slick-slide' ) . eq ( slideIndex + _ . options . slidesToShow + 1 ) ;
}
if ( _ . options . rtl === true ) {
if ( targetSlide [ 0 ] ) {
targetLeft = ( _ . $slideTrack . width ( ) - targetSlide [ 0 ] . offsetLeft - targetSlide . width ( ) ) * - 1 ;
} else {
targetLeft = 0 ;
}
} else {
targetLeft = targetSlide [ 0 ] ? targetSlide [ 0 ] . offsetLeft * - 1 : 0 ;
}
targetLeft += ( _ . $list . width ( ) - targetSlide . outerWidth ( ) ) / 2 ;
}
}
return targetLeft ;
} ;
Slick . prototype . getOption = Slick . prototype . slickGetOption = function ( option ) {
var _ = this ;
return _ . options [ option ] ;
} ;
Slick . prototype . getNavigableIndexes = function ( ) {
var _ = this ,
breakPoint = 0 ,
counter = 0 ,
indexes = [ ] ,
max ;
if ( _ . options . infinite === false ) {
max = _ . slideCount ;
} else {
breakPoint = _ . options . slidesToScroll * - 1 ;
counter = _ . options . slidesToScroll * - 1 ;
max = _ . slideCount * 2 ;
}
while ( breakPoint < max ) {
indexes . push ( breakPoint ) ;
breakPoint = counter + _ . options . slidesToScroll ;
counter += _ . options . slidesToScroll <= _ . options . slidesToShow ? _ . options . slidesToScroll : _ . options . slidesToShow ;
}
return indexes ;
} ;
Slick . prototype . getSlick = function ( ) {
return this ;
} ;
Slick . prototype . getSlideCount = function ( ) {
var _ = this ,
slidesTraversed , swipedSlide , centerOffset ;
centerOffset = _ . options . centerMode === true ? _ . slideWidth * Math . floor ( _ . options . slidesToShow / 2 ) : 0 ;
if ( _ . options . swipeToSlide === true ) {
_ . $slideTrack . find ( '.slick-slide' ) . each ( function ( index , slide ) {
if ( slide . offsetLeft - centerOffset + ( $ ( slide ) . outerWidth ( ) / 2 ) > ( _ . swipeLeft * - 1 ) ) {
swipedSlide = slide ;
return false ;
}
} ) ;
slidesTraversed = Math . abs ( $ ( swipedSlide ) . attr ( 'data-slick-index' ) - _ . currentSlide ) || 1 ;
return slidesTraversed ;
} else {
return _ . options . slidesToScroll ;
}
} ;
Slick . prototype . goTo = Slick . prototype . slickGoTo = function ( slide , dontAnimate ) {
var _ = this ;
_ . changeSlide ( {
data : {
message : 'index' ,
index : parseInt ( slide )
}
} , dontAnimate ) ;
} ;
Slick . prototype . init = function ( creation ) {
var _ = this ;
if ( ! $ ( _ . $slider ) . hasClass ( 'slick-initialized' ) ) {
$ ( _ . $slider ) . addClass ( 'slick-initialized' ) ;
_ . buildRows ( ) ;
_ . buildOut ( ) ;
_ . setProps ( ) ;
_ . startLoad ( ) ;
_ . loadSlider ( ) ;
_ . initializeEvents ( ) ;
_ . updateArrows ( ) ;
_ . updateDots ( ) ;
_ . checkResponsive ( true ) ;
_ . focusHandler ( ) ;
}
if ( creation ) {
_ . $slider . trigger ( 'init' , [ _ ] ) ;
}
if ( _ . options . accessibility === true ) {
_ . initADA ( ) ;
}
if ( _ . options . autoplay ) {
_ . paused = false ;
_ . autoPlay ( ) ;
}
} ;
Slick . prototype . initADA = function ( ) {
var _ = this ;
_ . $slides . add ( _ . $slideTrack . find ( '.slick-cloned' ) ) . attr ( {
'aria-hidden' : 'true' ,
'tabindex' : '-1'
} ) . find ( 'a, input, button, select' ) . attr ( {
'tabindex' : '-1'
} ) ;
_ . $slideTrack . attr ( 'role' , 'listbox' ) ;
_ . $slides . not ( _ . $slideTrack . find ( '.slick-cloned' ) ) . each ( function ( i ) {
$ ( this ) . attr ( {
'role' : 'option' ,
'aria-describedby' : 'slick-slide' + _ . instanceUid + i + ''
} ) ;
} ) ;
if ( _ . $dots !== null ) {
_ . $dots . attr ( 'role' , 'tablist' ) . find ( 'li' ) . each ( function ( i ) {
$ ( this ) . attr ( {
'role' : 'presentation' ,
'aria-selected' : 'false' ,
'aria-controls' : 'navigation' + _ . instanceUid + i + '' ,
'id' : 'slick-slide' + _ . instanceUid + i + ''
} ) ;
} )
. first ( ) . attr ( 'aria-selected' , 'true' ) . end ( )
. find ( 'button' ) . attr ( 'role' , 'button' ) . end ( )
. closest ( 'div' ) . attr ( 'role' , 'toolbar' ) ;
}
_ . activateADA ( ) ;
} ;
Slick . prototype . initArrowEvents = function ( ) {
var _ = this ;
if ( _ . options . arrows === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $prevArrow
. off ( 'click.slick' )
. on ( 'click.slick' , {
message : 'previous'
} , _ . changeSlide ) ;
_ . $nextArrow
. off ( 'click.slick' )
. on ( 'click.slick' , {
message : 'next'
} , _ . changeSlide ) ;
}
} ;
Slick . prototype . initDotEvents = function ( ) {
var _ = this ;
if ( _ . options . dots === true && _ . slideCount > _ . options . slidesToShow ) {
$ ( 'li' , _ . $dots ) . on ( 'click.slick' , {
message : 'index'
} , _ . changeSlide ) ;
}
if ( _ . options . dots === true && _ . options . pauseOnDotsHover === true ) {
$ ( 'li' , _ . $dots )
. on ( 'mouseenter.slick' , $ . proxy ( _ . interrupt , _ , true ) )
. on ( 'mouseleave.slick' , $ . proxy ( _ . interrupt , _ , false ) ) ;
}
} ;
Slick . prototype . initSlideEvents = function ( ) {
var _ = this ;
if ( _ . options . pauseOnHover ) {
_ . $list . on ( 'mouseenter.slick' , $ . proxy ( _ . interrupt , _ , true ) ) ;
_ . $list . on ( 'mouseleave.slick' , $ . proxy ( _ . interrupt , _ , false ) ) ;
}
} ;
Slick . prototype . initializeEvents = function ( ) {
var _ = this ;
_ . initArrowEvents ( ) ;
_ . initDotEvents ( ) ;
_ . initSlideEvents ( ) ;
_ . $list . on ( 'touchstart.slick mousedown.slick' , {
action : 'start'
} , _ . swipeHandler ) ;
_ . $list . on ( 'touchmove.slick mousemove.slick' , {
action : 'move'
} , _ . swipeHandler ) ;
_ . $list . on ( 'touchend.slick mouseup.slick' , {
action : 'end'
} , _ . swipeHandler ) ;
_ . $list . on ( 'touchcancel.slick mouseleave.slick' , {
action : 'end'
} , _ . swipeHandler ) ;
_ . $list . on ( 'click.slick' , _ . clickHandler ) ;
$ ( document ) . on ( _ . visibilityChange , $ . proxy ( _ . visibility , _ ) ) ;
if ( _ . options . accessibility === true ) {
_ . $list . on ( 'keydown.slick' , _ . keyHandler ) ;
}
if ( _ . options . focusOnSelect === true ) {
$ ( _ . $slideTrack ) . children ( ) . on ( 'click.slick' , _ . selectHandler ) ;
}
$ ( window ) . on ( 'orientationchange.slick.slick-' + _ . instanceUid , $ . proxy ( _ . orientationChange , _ ) ) ;
$ ( window ) . on ( 'resize.slick.slick-' + _ . instanceUid , $ . proxy ( _ . resize , _ ) ) ;
$ ( '[draggable!=true]' , _ . $slideTrack ) . on ( 'dragstart' , _ . preventDefault ) ;
$ ( window ) . on ( 'load.slick.slick-' + _ . instanceUid , _ . setPosition ) ;
$ ( document ) . on ( 'ready.slick.slick-' + _ . instanceUid , _ . setPosition ) ;
} ;
Slick . prototype . initUI = function ( ) {
var _ = this ;
if ( _ . options . arrows === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $prevArrow . show ( ) ;
_ . $nextArrow . show ( ) ;
}
if ( _ . options . dots === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $dots . show ( ) ;
}
} ;
Slick . prototype . keyHandler = function ( event ) {
var _ = this ;
//Dont slide if the cursor is inside the form fields and arrow keys are pressed
if ( ! event . target . tagName . match ( 'TEXTAREA|INPUT|SELECT' ) ) {
if ( event . keyCode === 37 && _ . options . accessibility === true ) {
_ . changeSlide ( {
data : {
message : _ . options . rtl === true ? 'next' : 'previous'
}
} ) ;
} else if ( event . keyCode === 39 && _ . options . accessibility === true ) {
_ . changeSlide ( {
data : {
message : _ . options . rtl === true ? 'previous' : 'next'
}
} ) ;
}
}
} ;
Slick . prototype . lazyLoad = function ( ) {
var _ = this ,
loadRange , cloneRange , rangeStart , rangeEnd ;
function loadImages ( imagesScope ) {
$ ( 'img[data-lazy]' , imagesScope ) . each ( function ( ) {
var image = $ ( this ) ,
imageSource = $ ( this ) . attr ( 'data-lazy' ) ,
imageToLoad = document . createElement ( 'img' ) ;
imageToLoad . onload = function ( ) {
image
. animate ( { opacity : 0 } , 100 , function ( ) {
image
. attr ( 'src' , imageSource )
. animate ( { opacity : 1 } , 200 , function ( ) {
image
. removeAttr ( 'data-lazy' )
. removeClass ( 'slick-loading' ) ;
} ) ;
_ . $slider . trigger ( 'lazyLoaded' , [ _ , image , imageSource ] ) ;
} ) ;
} ;
imageToLoad . onerror = function ( ) {
image
. removeAttr ( 'data-lazy' )
. removeClass ( 'slick-loading' )
. addClass ( 'slick-lazyload-error' ) ;
_ . $slider . trigger ( 'lazyLoadError' , [ _ , image , imageSource ] ) ;
} ;
imageToLoad . src = imageSource ;
} ) ;
}
if ( _ . options . centerMode === true ) {
if ( _ . options . infinite === true ) {
rangeStart = _ . currentSlide + ( _ . options . slidesToShow / 2 + 1 ) ;
rangeEnd = rangeStart + _ . options . slidesToShow + 2 ;
} else {
rangeStart = Math . max ( 0 , _ . currentSlide - ( _ . options . slidesToShow / 2 + 1 ) ) ;
rangeEnd = 2 + ( _ . options . slidesToShow / 2 + 1 ) + _ . currentSlide ;
}
} else {
rangeStart = _ . options . infinite ? _ . options . slidesToShow + _ . currentSlide : _ . currentSlide ;
rangeEnd = Math . ceil ( rangeStart + _ . options . slidesToShow ) ;
if ( _ . options . fade === true ) {
if ( rangeStart > 0 ) rangeStart -- ;
if ( rangeEnd <= _ . slideCount ) rangeEnd ++ ;
}
}
loadRange = _ . $slider . find ( '.slick-slide' ) . slice ( rangeStart , rangeEnd ) ;
loadImages ( loadRange ) ;
if ( _ . slideCount <= _ . options . slidesToShow ) {
cloneRange = _ . $slider . find ( '.slick-slide' ) ;
loadImages ( cloneRange ) ;
} else
if ( _ . currentSlide >= _ . slideCount - _ . options . slidesToShow ) {
cloneRange = _ . $slider . find ( '.slick-cloned' ) . slice ( 0 , _ . options . slidesToShow ) ;
loadImages ( cloneRange ) ;
} else if ( _ . currentSlide === 0 ) {
cloneRange = _ . $slider . find ( '.slick-cloned' ) . slice ( _ . options . slidesToShow * - 1 ) ;
loadImages ( cloneRange ) ;
}
} ;
Slick . prototype . loadSlider = function ( ) {
var _ = this ;
_ . setPosition ( ) ;
_ . $slideTrack . css ( {
opacity : 1
} ) ;
_ . $slider . removeClass ( 'slick-loading' ) ;
_ . initUI ( ) ;
if ( _ . options . lazyLoad === 'progressive' ) {
_ . progressiveLazyLoad ( ) ;
}
} ;
Slick . prototype . next = Slick . prototype . slickNext = function ( ) {
var _ = this ;
_ . changeSlide ( {
data : {
message : 'next'
}
} ) ;
} ;
Slick . prototype . orientationChange = function ( ) {
var _ = this ;
_ . checkResponsive ( ) ;
_ . setPosition ( ) ;
} ;
Slick . prototype . pause = Slick . prototype . slickPause = function ( ) {
var _ = this ;
_ . autoPlayClear ( ) ;
_ . paused = true ;
} ;
Slick . prototype . play = Slick . prototype . slickPlay = function ( ) {
var _ = this ;
_ . autoPlay ( ) ;
_ . options . autoplay = true ;
_ . paused = false ;
_ . focussed = false ;
_ . interrupted = false ;
} ;
Slick . prototype . postSlide = function ( index ) {
var _ = this ;
if ( ! _ . unslicked ) {
_ . $slider . trigger ( 'afterChange' , [ _ , index ] ) ;
_ . animating = false ;
_ . setPosition ( ) ;
_ . swipeLeft = null ;
if ( _ . options . autoplay ) {
_ . autoPlay ( ) ;
}
if ( _ . options . accessibility === true ) {
_ . initADA ( ) ;
}
}
} ;
Slick . prototype . prev = Slick . prototype . slickPrev = function ( ) {
var _ = this ;
_ . changeSlide ( {
data : {
message : 'previous'
}
} ) ;
} ;
Slick . prototype . preventDefault = function ( event ) {
event . preventDefault ( ) ;
} ;
Slick . prototype . progressiveLazyLoad = function ( tryCount ) {
tryCount = tryCount || 1 ;
var _ = this ,
$imgsToLoad = $ ( 'img[data-lazy]' , _ . $slider ) ,
image ,
imageSource ,
imageToLoad ;
if ( $imgsToLoad . length ) {
image = $imgsToLoad . first ( ) ;
imageSource = image . attr ( 'data-lazy' ) ;
imageToLoad = document . createElement ( 'img' ) ;
imageToLoad . onload = function ( ) {
image
. attr ( 'src' , imageSource )
. removeAttr ( 'data-lazy' )
. removeClass ( 'slick-loading' ) ;
if ( _ . options . adaptiveHeight === true ) {
_ . setPosition ( ) ;
}
_ . $slider . trigger ( 'lazyLoaded' , [ _ , image , imageSource ] ) ;
_ . progressiveLazyLoad ( ) ;
} ;
imageToLoad . onerror = function ( ) {
if ( tryCount < 3 ) {
/ * *
* try to load the image 3 times ,
* leave a slight delay so we don ' t get
* servers blocking the request .
* /
setTimeout ( function ( ) {
_ . progressiveLazyLoad ( tryCount + 1 ) ;
} , 500 ) ;
} else {
image
. removeAttr ( 'data-lazy' )
. removeClass ( 'slick-loading' )
. addClass ( 'slick-lazyload-error' ) ;
_ . $slider . trigger ( 'lazyLoadError' , [ _ , image , imageSource ] ) ;
_ . progressiveLazyLoad ( ) ;
}
} ;
imageToLoad . src = imageSource ;
} else {
_ . $slider . trigger ( 'allImagesLoaded' , [ _ ] ) ;
}
} ;
Slick . prototype . refresh = function ( initializing ) {
var _ = this , currentSlide , lastVisibleIndex ;
lastVisibleIndex = _ . slideCount - _ . options . slidesToShow ;
// in non-infinite sliders, we don't want to go past the
// last visible index.
if ( ! _ . options . infinite && ( _ . currentSlide > lastVisibleIndex ) ) {
_ . currentSlide = lastVisibleIndex ;
}
// if less slides than to show, go to start.
if ( _ . slideCount <= _ . options . slidesToShow ) {
_ . currentSlide = 0 ;
}
currentSlide = _ . currentSlide ;
_ . destroy ( true ) ;
$ . extend ( _ , _ . initials , { currentSlide : currentSlide } ) ;
_ . init ( ) ;
if ( ! initializing ) {
_ . changeSlide ( {
data : {
message : 'index' ,
index : currentSlide
}
} , false ) ;
}
} ;
Slick . prototype . registerBreakpoints = function ( ) {
var _ = this , breakpoint , currentBreakpoint , l ,
responsiveSettings = _ . options . responsive || null ;
if ( $ . type ( responsiveSettings ) === 'array' && responsiveSettings . length ) {
_ . respondTo = _ . options . respondTo || 'window' ;
for ( breakpoint in responsiveSettings ) {
l = _ . breakpoints . length - 1 ;
currentBreakpoint = responsiveSettings [ breakpoint ] . breakpoint ;
if ( responsiveSettings . hasOwnProperty ( breakpoint ) ) {
// loop through the breakpoints and cut out any existing
// ones with the same breakpoint number, we don't want dupes.
while ( l >= 0 ) {
if ( _ . breakpoints [ l ] && _ . breakpoints [ l ] === currentBreakpoint ) {
_ . breakpoints . splice ( l , 1 ) ;
}
l -- ;
}
_ . breakpoints . push ( currentBreakpoint ) ;
_ . breakpointSettings [ currentBreakpoint ] = responsiveSettings [ breakpoint ] . settings ;
}
}
_ . breakpoints . sort ( function ( a , b ) {
return ( _ . options . mobileFirst ) ? a - b : b - a ;
} ) ;
}
} ;
Slick . prototype . reinit = function ( ) {
var _ = this ;
_ . $slides =
_ . $slideTrack
. children ( _ . options . slide )
. addClass ( 'slick-slide' ) ;
_ . slideCount = _ . $slides . length ;
if ( _ . currentSlide >= _ . slideCount && _ . currentSlide !== 0 ) {
_ . currentSlide = _ . currentSlide - _ . options . slidesToScroll ;
}
if ( _ . slideCount <= _ . options . slidesToShow ) {
_ . currentSlide = 0 ;
}
_ . registerBreakpoints ( ) ;
_ . setProps ( ) ;
_ . setupInfinite ( ) ;
_ . buildArrows ( ) ;
_ . updateArrows ( ) ;
_ . initArrowEvents ( ) ;
_ . buildDots ( ) ;
_ . updateDots ( ) ;
_ . initDotEvents ( ) ;
_ . cleanUpSlideEvents ( ) ;
_ . initSlideEvents ( ) ;
_ . checkResponsive ( false , true ) ;
if ( _ . options . focusOnSelect === true ) {
$ ( _ . $slideTrack ) . children ( ) . on ( 'click.slick' , _ . selectHandler ) ;
}
_ . setSlideClasses ( typeof _ . currentSlide === 'number' ? _ . currentSlide : 0 ) ;
_ . setPosition ( ) ;
_ . focusHandler ( ) ;
_ . paused = ! _ . options . autoplay ;
_ . autoPlay ( ) ;
_ . $slider . trigger ( 'reInit' , [ _ ] ) ;
} ;
Slick . prototype . resize = function ( ) {
var _ = this ;
if ( $ ( window ) . width ( ) !== _ . windowWidth ) {
clearTimeout ( _ . windowDelay ) ;
_ . windowDelay = window . setTimeout ( function ( ) {
_ . windowWidth = $ ( window ) . width ( ) ;
_ . checkResponsive ( ) ;
if ( ! _ . unslicked ) { _ . setPosition ( ) ; }
} , 50 ) ;
}
} ;
Slick . prototype . removeSlide = Slick . prototype . slickRemove = function ( index , removeBefore , removeAll ) {
var _ = this ;
if ( typeof ( index ) === 'boolean' ) {
removeBefore = index ;
index = removeBefore === true ? 0 : _ . slideCount - 1 ;
} else {
index = removeBefore === true ? -- index : index ;
}
if ( _ . slideCount < 1 || index < 0 || index > _ . slideCount - 1 ) {
return false ;
}
_ . unload ( ) ;
if ( removeAll === true ) {
_ . $slideTrack . children ( ) . remove ( ) ;
} else {
_ . $slideTrack . children ( this . options . slide ) . eq ( index ) . remove ( ) ;
}
_ . $slides = _ . $slideTrack . children ( this . options . slide ) ;
_ . $slideTrack . children ( this . options . slide ) . detach ( ) ;
_ . $slideTrack . append ( _ . $slides ) ;
_ . $slidesCache = _ . $slides ;
_ . reinit ( ) ;
} ;
Slick . prototype . setCSS = function ( position ) {
var _ = this ,
positionProps = { } ,
x , y ;
if ( _ . options . rtl === true ) {
position = - position ;
}
x = _ . positionProp == 'left' ? Math . ceil ( position ) + 'px' : '0px' ;
y = _ . positionProp == 'top' ? Math . ceil ( position ) + 'px' : '0px' ;
positionProps [ _ . positionProp ] = position ;
if ( _ . transformsEnabled === false ) {
_ . $slideTrack . css ( positionProps ) ;
} else {
positionProps = { } ;
if ( _ . cssTransitions === false ) {
positionProps [ _ . animType ] = 'translate(' + x + ', ' + y + ')' ;
_ . $slideTrack . css ( positionProps ) ;
} else {
positionProps [ _ . animType ] = 'translate3d(' + x + ', ' + y + ', 0px)' ;
_ . $slideTrack . css ( positionProps ) ;
}
}
} ;
Slick . prototype . setDimensions = function ( ) {
var _ = this ;
if ( _ . options . vertical === false ) {
if ( _ . options . centerMode === true ) {
_ . $list . css ( {
padding : ( '0px ' + _ . options . centerPadding )
} ) ;
}
} else {
_ . $list . height ( _ . $slides . first ( ) . outerHeight ( true ) * _ . options . slidesToShow ) ;
if ( _ . options . centerMode === true ) {
_ . $list . css ( {
padding : ( _ . options . centerPadding + ' 0px' )
} ) ;
}
}
_ . listWidth = _ . $list . width ( ) ;
_ . listHeight = _ . $list . height ( ) ;
if ( _ . options . vertical === false && _ . options . variableWidth === false ) {
_ . slideWidth = Math . ceil ( _ . listWidth / _ . options . slidesToShow ) ;
_ . $slideTrack . width ( Math . ceil ( ( _ . slideWidth * _ . $slideTrack . children ( '.slick-slide' ) . length ) ) ) ;
} else if ( _ . options . variableWidth === true ) {
_ . $slideTrack . width ( 5000 * _ . slideCount ) ;
} else {
_ . slideWidth = Math . ceil ( _ . listWidth ) ;
_ . $slideTrack . height ( Math . ceil ( ( _ . $slides . first ( ) . outerHeight ( true ) * _ . $slideTrack . children ( '.slick-slide' ) . length ) ) ) ;
}
var offset = _ . $slides . first ( ) . outerWidth ( true ) - _ . $slides . first ( ) . width ( ) ;
if ( _ . options . variableWidth === false ) _ . $slideTrack . children ( '.slick-slide' ) . width ( _ . slideWidth - offset ) ;
} ;
Slick . prototype . setFade = function ( ) {
var _ = this ,
targetLeft ;
_ . $slides . each ( function ( index , element ) {
targetLeft = ( _ . slideWidth * index ) * - 1 ;
if ( _ . options . rtl === true ) {
$ ( element ) . css ( {
position : 'relative' ,
right : targetLeft ,
top : 0 ,
zIndex : _ . options . zIndex - 2 ,
opacity : 0
} ) ;
} else {
$ ( element ) . css ( {
position : 'relative' ,
left : targetLeft ,
top : 0 ,
zIndex : _ . options . zIndex - 2 ,
opacity : 0
} ) ;
}
} ) ;
_ . $slides . eq ( _ . currentSlide ) . css ( {
zIndex : _ . options . zIndex - 1 ,
opacity : 1
} ) ;
} ;
Slick . prototype . setHeight = function ( ) {
var _ = this ;
if ( _ . options . slidesToShow === 1 && _ . options . adaptiveHeight === true && _ . options . vertical === false ) {
var targetHeight = _ . $slides . eq ( _ . currentSlide ) . outerHeight ( true ) ;
_ . $list . css ( 'height' , targetHeight ) ;
}
} ;
Slick . prototype . setOption =
Slick . prototype . slickSetOption = function ( ) {
/ * *
* accepts arguments in format of :
*
* - for changing a single option ' s value :
* . slick ( "setOption" , option , value , refresh )
*
* - for changing a set of responsive options :
* . slick ( "setOption" , 'responsive' , [ { } , ... ] , refresh )
*
* - for updating multiple values at once ( not responsive )
* . slick ( "setOption" , { 'option' : value , ... } , refresh )
* /
var _ = this , l , item , option , value , refresh = false , type ;
if ( $ . type ( arguments [ 0 ] ) === 'object' ) {
option = arguments [ 0 ] ;
refresh = arguments [ 1 ] ;
type = 'multiple' ;
} else if ( $ . type ( arguments [ 0 ] ) === 'string' ) {
option = arguments [ 0 ] ;
value = arguments [ 1 ] ;
refresh = arguments [ 2 ] ;
if ( arguments [ 0 ] === 'responsive' && $ . type ( arguments [ 1 ] ) === 'array' ) {
type = 'responsive' ;
} else if ( typeof arguments [ 1 ] !== 'undefined' ) {
type = 'single' ;
}
}
if ( type === 'single' ) {
_ . options [ option ] = value ;
} else if ( type === 'multiple' ) {
$ . each ( option , function ( opt , val ) {
_ . options [ opt ] = val ;
} ) ;
} else if ( type === 'responsive' ) {
for ( item in value ) {
if ( $ . type ( _ . options . responsive ) !== 'array' ) {
_ . options . responsive = [ value [ item ] ] ;
} else {
l = _ . options . responsive . length - 1 ;
// loop through the responsive object and splice out duplicates.
while ( l >= 0 ) {
if ( _ . options . responsive [ l ] . breakpoint === value [ item ] . breakpoint ) {
_ . options . responsive . splice ( l , 1 ) ;
}
l -- ;
}
_ . options . responsive . push ( value [ item ] ) ;
}
}
}
if ( refresh ) {
_ . unload ( ) ;
_ . reinit ( ) ;
}
} ;
Slick . prototype . setPosition = function ( ) {
var _ = this ;
_ . setDimensions ( ) ;
_ . setHeight ( ) ;
if ( _ . options . fade === false ) {
_ . setCSS ( _ . getLeft ( _ . currentSlide ) ) ;
} else {
_ . setFade ( ) ;
}
_ . $slider . trigger ( 'setPosition' , [ _ ] ) ;
} ;
Slick . prototype . setProps = function ( ) {
var _ = this ,
bodyStyle = document . body . style ;
_ . positionProp = _ . options . vertical === true ? 'top' : 'left' ;
if ( _ . positionProp === 'top' ) {
_ . $slider . addClass ( 'slick-vertical' ) ;
} else {
_ . $slider . removeClass ( 'slick-vertical' ) ;
}
if ( bodyStyle . WebkitTransition !== undefined ||
bodyStyle . MozTransition !== undefined ||
bodyStyle . msTransition !== undefined ) {
if ( _ . options . useCSS === true ) {
_ . cssTransitions = true ;
}
}
if ( _ . options . fade ) {
if ( typeof _ . options . zIndex === 'number' ) {
if ( _ . options . zIndex < 3 ) {
_ . options . zIndex = 3 ;
}
} else {
_ . options . zIndex = _ . defaults . zIndex ;
}
}
if ( bodyStyle . OTransform !== undefined ) {
_ . animType = 'OTransform' ;
_ . transformType = '-o-transform' ;
_ . transitionType = 'OTransition' ;
if ( bodyStyle . perspectiveProperty === undefined && bodyStyle . webkitPerspective === undefined ) _ . animType = false ;
}
if ( bodyStyle . MozTransform !== undefined ) {
_ . animType = 'MozTransform' ;
_ . transformType = '-moz-transform' ;
_ . transitionType = 'MozTransition' ;
if ( bodyStyle . perspectiveProperty === undefined && bodyStyle . MozPerspective === undefined ) _ . animType = false ;
}
if ( bodyStyle . webkitTransform !== undefined ) {
_ . animType = 'webkitTransform' ;
_ . transformType = '-webkit-transform' ;
_ . transitionType = 'webkitTransition' ;
if ( bodyStyle . perspectiveProperty === undefined && bodyStyle . webkitPerspective === undefined ) _ . animType = false ;
}
if ( bodyStyle . msTransform !== undefined ) {
_ . animType = 'msTransform' ;
_ . transformType = '-ms-transform' ;
_ . transitionType = 'msTransition' ;
if ( bodyStyle . msTransform === undefined ) _ . animType = false ;
}
if ( bodyStyle . transform !== undefined && _ . animType !== false ) {
_ . animType = 'transform' ;
_ . transformType = 'transform' ;
_ . transitionType = 'transition' ;
}
_ . transformsEnabled = _ . options . useTransform && ( _ . animType !== null && _ . animType !== false ) ;
} ;
Slick . prototype . setSlideClasses = function ( index ) {
var _ = this ,
centerOffset , allSlides , indexOffset , remainder ;
allSlides = _ . $slider
. find ( '.slick-slide' )
. removeClass ( 'slick-active slick-center slick-current' )
. attr ( 'aria-hidden' , 'true' ) ;
_ . $slides
. eq ( index )
. addClass ( 'slick-current' ) ;
if ( _ . options . centerMode === true ) {
centerOffset = Math . floor ( _ . options . slidesToShow / 2 ) ;
if ( _ . options . infinite === true ) {
if ( index >= centerOffset && index <= ( _ . slideCount - 1 ) - centerOffset ) {
_ . $slides
. slice ( index - centerOffset , index + centerOffset + 1 )
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
} else {
indexOffset = _ . options . slidesToShow + index ;
allSlides
. slice ( indexOffset - centerOffset + 1 , indexOffset + centerOffset + 2 )
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
}
if ( index === 0 ) {
allSlides
. eq ( allSlides . length - 1 - _ . options . slidesToShow )
. addClass ( 'slick-center' ) ;
} else if ( index === _ . slideCount - 1 ) {
allSlides
. eq ( _ . options . slidesToShow )
. addClass ( 'slick-center' ) ;
}
}
_ . $slides
. eq ( index )
. addClass ( 'slick-center' ) ;
} else {
if ( index >= 0 && index <= ( _ . slideCount - _ . options . slidesToShow ) ) {
_ . $slides
. slice ( index , index + _ . options . slidesToShow )
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
} else if ( allSlides . length <= _ . options . slidesToShow ) {
allSlides
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
} else {
remainder = _ . slideCount % _ . options . slidesToShow ;
indexOffset = _ . options . infinite === true ? _ . options . slidesToShow + index : index ;
if ( _ . options . slidesToShow == _ . options . slidesToScroll && ( _ . slideCount - index ) < _ . options . slidesToShow ) {
allSlides
. slice ( indexOffset - ( _ . options . slidesToShow - remainder ) , indexOffset + remainder )
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
} else {
allSlides
. slice ( indexOffset , indexOffset + _ . options . slidesToShow )
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
}
}
}
if ( _ . options . lazyLoad === 'ondemand' ) {
_ . lazyLoad ( ) ;
}
} ;
Slick . prototype . setupInfinite = function ( ) {
var _ = this ,
i , slideIndex , infiniteCount ;
if ( _ . options . fade === true ) {
_ . options . centerMode = false ;
}
if ( _ . options . infinite === true && _ . options . fade === false ) {
slideIndex = null ;
if ( _ . slideCount > _ . options . slidesToShow ) {
if ( _ . options . centerMode === true ) {
infiniteCount = _ . options . slidesToShow + 1 ;
} else {
infiniteCount = _ . options . slidesToShow ;
}
for ( i = _ . slideCount ; i > ( _ . slideCount -
infiniteCount ) ; i -= 1 ) {
slideIndex = i - 1 ;
$ ( _ . $slides [ slideIndex ] ) . clone ( true ) . attr ( 'id' , '' )
. attr ( 'data-slick-index' , slideIndex - _ . slideCount )
. prependTo ( _ . $slideTrack ) . addClass ( 'slick-cloned' ) ;
}
for ( i = 0 ; i < infiniteCount ; i += 1 ) {
slideIndex = i ;
$ ( _ . $slides [ slideIndex ] ) . clone ( true ) . attr ( 'id' , '' )
. attr ( 'data-slick-index' , slideIndex + _ . slideCount )
. appendTo ( _ . $slideTrack ) . addClass ( 'slick-cloned' ) ;
}
_ . $slideTrack . find ( '.slick-cloned' ) . find ( '[id]' ) . each ( function ( ) {
$ ( this ) . attr ( 'id' , '' ) ;
} ) ;
}
}
} ;
Slick . prototype . interrupt = function ( toggle ) {
var _ = this ;
if ( ! toggle ) {
_ . autoPlay ( ) ;
}
_ . interrupted = toggle ;
} ;
Slick . prototype . selectHandler = function ( event ) {
var _ = this ;
var targetElement =
$ ( event . target ) . is ( '.slick-slide' ) ?
$ ( event . target ) :
$ ( event . target ) . parents ( '.slick-slide' ) ;
var index = parseInt ( targetElement . attr ( 'data-slick-index' ) ) ;
if ( ! index ) index = 0 ;
if ( _ . slideCount <= _ . options . slidesToShow ) {
_ . setSlideClasses ( index ) ;
_ . asNavFor ( index ) ;
return ;
}
_ . slideHandler ( index ) ;
} ;
Slick . prototype . slideHandler = function ( index , sync , dontAnimate ) {
var targetSlide , animSlide , oldSlide , slideLeft , targetLeft = null ,
_ = this , navTarget ;
sync = sync || false ;
if ( _ . animating === true && _ . options . waitForAnimate === true ) {
return ;
}
if ( _ . options . fade === true && _ . currentSlide === index ) {
return ;
}
if ( _ . slideCount <= _ . options . slidesToShow ) {
return ;
}
if ( sync === false ) {
_ . asNavFor ( index ) ;
}
targetSlide = index ;
targetLeft = _ . getLeft ( targetSlide ) ;
slideLeft = _ . getLeft ( _ . currentSlide ) ;
_ . currentLeft = _ . swipeLeft === null ? slideLeft : _ . swipeLeft ;
if ( _ . options . infinite === false && _ . options . centerMode === false && ( index < 0 || index > _ . getDotCount ( ) * _ . options . slidesToScroll ) ) {
if ( _ . options . fade === false ) {
targetSlide = _ . currentSlide ;
if ( dontAnimate !== true ) {
_ . animateSlide ( slideLeft , function ( ) {
_ . postSlide ( targetSlide ) ;
} ) ;
} else {
_ . postSlide ( targetSlide ) ;
}
}
return ;
} else if ( _ . options . infinite === false && _ . options . centerMode === true && ( index < 0 || index > ( _ . slideCount - _ . options . slidesToScroll ) ) ) {
if ( _ . options . fade === false ) {
targetSlide = _ . currentSlide ;
if ( dontAnimate !== true ) {
_ . animateSlide ( slideLeft , function ( ) {
_ . postSlide ( targetSlide ) ;
} ) ;
} else {
_ . postSlide ( targetSlide ) ;
}
}
return ;
}
if ( _ . options . autoplay ) {
clearInterval ( _ . autoPlayTimer ) ;
}
if ( targetSlide < 0 ) {
if ( _ . slideCount % _ . options . slidesToScroll !== 0 ) {
animSlide = _ . slideCount - ( _ . slideCount % _ . options . slidesToScroll ) ;
} else {
animSlide = _ . slideCount + targetSlide ;
}
} else if ( targetSlide >= _ . slideCount ) {
if ( _ . slideCount % _ . options . slidesToScroll !== 0 ) {
animSlide = 0 ;
} else {
animSlide = targetSlide - _ . slideCount ;
}
} else {
animSlide = targetSlide ;
}
_ . animating = true ;
_ . $slider . trigger ( 'beforeChange' , [ _ , _ . currentSlide , animSlide ] ) ;
oldSlide = _ . currentSlide ;
_ . currentSlide = animSlide ;
_ . setSlideClasses ( _ . currentSlide ) ;
if ( _ . options . asNavFor ) {
navTarget = _ . getNavTarget ( ) ;
navTarget = navTarget . slick ( 'getSlick' ) ;
if ( navTarget . slideCount <= navTarget . options . slidesToShow ) {
navTarget . setSlideClasses ( _ . currentSlide ) ;
}
}
_ . updateDots ( ) ;
_ . updateArrows ( ) ;
if ( _ . options . fade === true ) {
if ( dontAnimate !== true ) {
_ . fadeSlideOut ( oldSlide ) ;
_ . fadeSlide ( animSlide , function ( ) {
_ . postSlide ( animSlide ) ;
} ) ;
} else {
_ . postSlide ( animSlide ) ;
}
_ . animateHeight ( ) ;
return ;
}
if ( dontAnimate !== true ) {
_ . animateSlide ( targetLeft , function ( ) {
_ . postSlide ( animSlide ) ;
} ) ;
} else {
_ . postSlide ( animSlide ) ;
}
} ;
Slick . prototype . startLoad = function ( ) {
var _ = this ;
if ( _ . options . arrows === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $prevArrow . hide ( ) ;
_ . $nextArrow . hide ( ) ;
}
if ( _ . options . dots === true && _ . slideCount > _ . options . slidesToShow ) {
_ . $dots . hide ( ) ;
}
_ . $slider . addClass ( 'slick-loading' ) ;
} ;
Slick . prototype . swipeDirection = function ( ) {
var xDist , yDist , r , swipeAngle , _ = this ;
xDist = _ . touchObject . startX - _ . touchObject . curX ;
yDist = _ . touchObject . startY - _ . touchObject . curY ;
r = Math . atan2 ( yDist , xDist ) ;
swipeAngle = Math . round ( r * 180 / Math . PI ) ;
if ( swipeAngle < 0 ) {
swipeAngle = 360 - Math . abs ( swipeAngle ) ;
}
if ( ( swipeAngle <= 45 ) && ( swipeAngle >= 0 ) ) {
return ( _ . options . rtl === false ? 'left' : 'right' ) ;
}
if ( ( swipeAngle <= 360 ) && ( swipeAngle >= 315 ) ) {
return ( _ . options . rtl === false ? 'left' : 'right' ) ;
}
if ( ( swipeAngle >= 135 ) && ( swipeAngle <= 225 ) ) {
return ( _ . options . rtl === false ? 'right' : 'left' ) ;
}
if ( _ . options . verticalSwiping === true ) {
if ( ( swipeAngle >= 35 ) && ( swipeAngle <= 135 ) ) {
return 'down' ;
} else {
return 'up' ;
}
}
return 'vertical' ;
} ;
Slick . prototype . swipeEnd = function ( event ) {
var _ = this ,
slideCount ,
direction ;
_ . dragging = false ;
_ . interrupted = false ;
_ . shouldClick = ( _ . touchObject . swipeLength > 10 ) ? false : true ;
if ( _ . touchObject . curX === undefined ) {
return false ;
}
if ( _ . touchObject . edgeHit === true ) {
_ . $slider . trigger ( 'edge' , [ _ , _ . swipeDirection ( ) ] ) ;
}
if ( _ . touchObject . swipeLength >= _ . touchObject . minSwipe ) {
direction = _ . swipeDirection ( ) ;
switch ( direction ) {
case 'left' :
case 'down' :
slideCount =
_ . options . swipeToSlide ?
_ . checkNavigable ( _ . currentSlide + _ . getSlideCount ( ) ) :
_ . currentSlide + _ . getSlideCount ( ) ;
_ . currentDirection = 0 ;
break ;
case 'right' :
case 'up' :
slideCount =
_ . options . swipeToSlide ?
_ . checkNavigable ( _ . currentSlide - _ . getSlideCount ( ) ) :
_ . currentSlide - _ . getSlideCount ( ) ;
_ . currentDirection = 1 ;
break ;
}
if ( direction != 'vertical' ) {
_ . slideHandler ( slideCount ) ;
_ . touchObject = { } ;
_ . $slider . trigger ( 'swipe' , [ _ , direction ] ) ;
}
} else {
if ( _ . touchObject . startX !== _ . touchObject . curX ) {
_ . slideHandler ( _ . currentSlide ) ;
_ . touchObject = { } ;
}
}
} ;
Slick . prototype . swipeHandler = function ( event ) {
var _ = this ;
if ( ( _ . options . swipe === false ) || ( 'ontouchend' in document && _ . options . swipe === false ) ) {
return ;
} else if ( _ . options . draggable === false && event . type . indexOf ( 'mouse' ) !== - 1 ) {
return ;
}
_ . touchObject . fingerCount = event . originalEvent && event . originalEvent . touches !== undefined ?
event . originalEvent . touches . length : 1 ;
_ . touchObject . minSwipe = _ . listWidth / _ . options
. touchThreshold ;
if ( _ . options . verticalSwiping === true ) {
_ . touchObject . minSwipe = _ . listHeight / _ . options
. touchThreshold ;
}
switch ( event . data . action ) {
case 'start' :
_ . swipeStart ( event ) ;
break ;
case 'move' :
_ . swipeMove ( event ) ;
break ;
case 'end' :
_ . swipeEnd ( event ) ;
break ;
}
} ;
Slick . prototype . swipeMove = function ( event ) {
var _ = this ,
curLeft , swipeDirection , swipeLength , positionOffset , touches ;
touches = event . originalEvent !== undefined ? event . originalEvent . touches : null ;
if ( ! _ . dragging || touches && touches . length !== 1 ) {
return false ;
}
curLeft = _ . getLeft ( _ . currentSlide ) ;
_ . touchObject . curX = touches !== undefined ? touches [ 0 ] . pageX : event . clientX ;
_ . touchObject . curY = touches !== undefined ? touches [ 0 ] . pageY : event . clientY ;
_ . touchObject . swipeLength = Math . round ( Math . sqrt (
Math . pow ( _ . touchObject . curX - _ . touchObject . startX , 2 ) ) ) ;
if ( _ . options . verticalSwiping === true ) {
_ . touchObject . swipeLength = Math . round ( Math . sqrt (
Math . pow ( _ . touchObject . curY - _ . touchObject . startY , 2 ) ) ) ;
}
swipeDirection = _ . swipeDirection ( ) ;
if ( swipeDirection === 'vertical' ) {
return ;
}
if ( event . originalEvent !== undefined && _ . touchObject . swipeLength > 4 ) {
event . preventDefault ( ) ;
}
positionOffset = ( _ . options . rtl === false ? 1 : - 1 ) * ( _ . touchObject . curX > _ . touchObject . startX ? 1 : - 1 ) ;
if ( _ . options . verticalSwiping === true ) {
positionOffset = _ . touchObject . curY > _ . touchObject . startY ? 1 : - 1 ;
}
swipeLength = _ . touchObject . swipeLength ;
_ . touchObject . edgeHit = false ;
if ( _ . options . infinite === false ) {
if ( ( _ . currentSlide === 0 && swipeDirection === 'right' ) || ( _ . currentSlide >= _ . getDotCount ( ) && swipeDirection === 'left' ) ) {
swipeLength = _ . touchObject . swipeLength * _ . options . edgeFriction ;
_ . touchObject . edgeHit = true ;
}
}
if ( _ . options . vertical === false ) {
_ . swipeLeft = curLeft + swipeLength * positionOffset ;
} else {
_ . swipeLeft = curLeft + ( swipeLength * ( _ . $list . height ( ) / _ . listWidth ) ) * positionOffset ;
}
if ( _ . options . verticalSwiping === true ) {
_ . swipeLeft = curLeft + swipeLength * positionOffset ;
}
if ( _ . options . fade === true || _ . options . touchMove === false ) {
return false ;
}
if ( _ . animating === true ) {
_ . swipeLeft = null ;
return false ;
}
_ . setCSS ( _ . swipeLeft ) ;
} ;
Slick . prototype . swipeStart = function ( event ) {
var _ = this ,
touches ;
_ . interrupted = true ;
if ( _ . touchObject . fingerCount !== 1 || _ . slideCount <= _ . options . slidesToShow ) {
_ . touchObject = { } ;
return false ;
}
if ( event . originalEvent !== undefined && event . originalEvent . touches !== undefined ) {
touches = event . originalEvent . touches [ 0 ] ;
}
_ . touchObject . startX = _ . touchObject . curX = touches !== undefined ? touches . pageX : event . clientX ;
_ . touchObject . startY = _ . touchObject . curY = touches !== undefined ? touches . pageY : event . clientY ;
_ . dragging = true ;
} ;
Slick . prototype . unfilterSlides = Slick . prototype . slickUnfilter = function ( ) {
var _ = this ;
if ( _ . $slidesCache !== null ) {
_ . unload ( ) ;
_ . $slideTrack . children ( this . options . slide ) . detach ( ) ;
_ . $slidesCache . appendTo ( _ . $slideTrack ) ;
_ . reinit ( ) ;
}
} ;
Slick . prototype . unload = function ( ) {
var _ = this ;
$ ( '.slick-cloned' , _ . $slider ) . remove ( ) ;
if ( _ . $dots ) {
_ . $dots . remove ( ) ;
}
if ( _ . $prevArrow && _ . htmlExpr . test ( _ . options . prevArrow ) ) {
_ . $prevArrow . remove ( ) ;
}
if ( _ . $nextArrow && _ . htmlExpr . test ( _ . options . nextArrow ) ) {
_ . $nextArrow . remove ( ) ;
}
_ . $slides
. removeClass ( 'slick-slide slick-active slick-visible slick-current' )
. attr ( 'aria-hidden' , 'true' )
. css ( 'width' , '' ) ;
} ;
Slick . prototype . unslick = function ( fromBreakpoint ) {
var _ = this ;
_ . $slider . trigger ( 'unslick' , [ _ , fromBreakpoint ] ) ;
_ . destroy ( ) ;
} ;
Slick . prototype . updateArrows = function ( ) {
var _ = this ;
Math . floor ( _ . options . slidesToShow / 2 ) ;
if ( _ . options . arrows === true &&
_ . slideCount > _ . options . slidesToShow &&
! _ . options . infinite ) {
_ . $prevArrow . removeClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'false' ) ;
_ . $nextArrow . removeClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'false' ) ;
if ( _ . currentSlide === 0 ) {
_ . $prevArrow . addClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'true' ) ;
_ . $nextArrow . removeClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'false' ) ;
} else if ( _ . currentSlide >= _ . slideCount - _ . options . slidesToShow && _ . options . centerMode === false ) {
_ . $nextArrow . addClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'true' ) ;
_ . $prevArrow . removeClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'false' ) ;
} else if ( _ . currentSlide >= _ . slideCount - 1 && _ . options . centerMode === true ) {
_ . $nextArrow . addClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'true' ) ;
_ . $prevArrow . removeClass ( 'slick-disabled' ) . attr ( 'aria-disabled' , 'false' ) ;
}
}
} ;
Slick . prototype . updateDots = function ( ) {
var _ = this ;
if ( _ . $dots !== null ) {
_ . $dots
. find ( 'li' )
. removeClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'true' ) ;
_ . $dots
. find ( 'li' )
. eq ( Math . floor ( _ . currentSlide / _ . options . slidesToScroll ) )
. addClass ( 'slick-active' )
. attr ( 'aria-hidden' , 'false' ) ;
}
} ;
Slick . prototype . visibility = function ( ) {
var _ = this ;
if ( _ . options . autoplay ) {
if ( document [ _ . hidden ] ) {
_ . interrupted = true ;
} else {
_ . interrupted = false ;
}
}
} ;
$ . fn . slick = function ( ) {
var _ = this ,
opt = arguments [ 0 ] ,
args = Array . prototype . slice . call ( arguments , 1 ) ,
l = _ . length ,
i ,
ret ;
for ( i = 0 ; i < l ; i ++ ) {
if ( typeof opt == 'object' || typeof opt == 'undefined' )
_ [ i ] . slick = new Slick ( _ [ i ] , opt ) ;
else
ret = _ [ i ] . slick [ opt ] . apply ( _ [ i ] . slick , args ) ;
if ( typeof ret != 'undefined' ) return ret ;
}
return _ ;
} ;
2016-08-18 16:37:38 +00:00
} ) ) ;
2023-10-24 09:53:42 +00:00
///@ts-check
2016-08-18 16:37:38 +00:00
// https://github.com/ghiculescu/jekyll-table-of-contents
( function ( $ ) {
$ . fn . toc = function ( options ) {
var defaults = {
noBackToTopLinks : false ,
title : "<h2>Table of contents</h2>" ,
minimumHeaders : 3 ,
headers : "h1, h2, h3, h4, h5, h6" ,
listType : "ol" , // values: [ol|ul]
showEffect : "show" , // values: [show|slideDown|fadeIn|none]
showSpeed : "slow" // set to 0 to deactivate effect
} ,
settings = $ . extend ( defaults , options ) ;
function fixedEncodeURIComponent ( str ) {
return encodeURIComponent ( str ) . replace ( /[!"()*]/g , function ( c ) {
return "%" + c . charCodeAt ( 0 ) . toString ( 16 ) ;
} ) ;
}
var headers = $ ( settings . headers ) . filter ( function ( ) {
// get all headers with an ID
var previousSiblingName = $ ( this ) . prev ( ) . attr ( "name" ) ;
if ( ! this . id && previousSiblingName ) {
this . id = $ ( this ) . attr ( "id" , previousSiblingName . replace ( /\./g , "-" ) ) ;
}
return this . id ;
} ) , output = $ ( this ) ;
if ( ! headers . length || headers . length < settings . minimumHeaders || ! output . length ) {
return ;
}
if ( 0 === settings . showSpeed ) {
settings . showEffect = "none" ;
}
var render = {
show : function ( ) {
output . hide ( ) . html ( html ) . show ( settings . showSpeed ) ;
} ,
slideDown : function ( ) {
output . hide ( ) . html ( html ) . slideDown ( settings . showSpeed ) ;
} ,
fadeIn : function ( ) {
output . hide ( ) . html ( html ) . fadeIn ( settings . showSpeed ) ;
} ,
none : function ( ) {
output . html ( html ) ;
}
} ;
var get _level = function ( ele ) {
return parseInt ( ele . nodeName . replace ( "H" , "" ) , 10 ) ;
2023-10-24 09:53:42 +00:00
} ;
2016-08-18 16:37:38 +00:00
var highest _level = headers . map ( function ( _ , ele ) {
return get _level ( ele ) ;
} ) . get ( ) . sort ( ) [ 0 ] ;
var return _to _top = "<i class=\"fa fa-caret-up back-to-top\"> </i>" ;
var level = get _level ( headers [ 0 ] ) ,
this _level ,
html = "<" + settings . listType + ">" ;
headers . on ( "click" , function ( ) {
if ( ! settings . noBackToTopLinks ) {
window . location . hash = this . id ;
}
} )
. addClass ( "clickable-header" )
. each ( function ( _ , header ) {
this _level = get _level ( header ) ;
if ( ! settings . noBackToTopLinks && this _level === highest _level ) {
$ ( header ) . addClass ( "top-level-header" ) . after ( return _to _top ) ;
}
if ( this _level === level ) // same level as before; same indenting
html += "<li><a href=\"#" + fixedEncodeURIComponent ( header . id ) + "\">" + header . innerHTML + "</a>" ;
else if ( this _level <= level ) { // higher level than before; end parent ol
2023-10-24 09:53:42 +00:00
for ( let i = this _level ; i < level ; i ++ ) {
html += "</li></" + settings . listType + ">" ;
2016-08-18 16:37:38 +00:00
}
html += "<li><a href=\"#" + fixedEncodeURIComponent ( header . id ) + "\">" + header . innerHTML + "</a>" ;
}
else if ( this _level > level ) { // lower level than before; expand the previous to contain a ol
2023-10-24 09:53:42 +00:00
for ( let i = this _level ; i > level ; i -- ) {
html += "<" + settings . listType + "><li>" ;
2016-08-18 16:37:38 +00:00
}
html += "<a href=\"#" + fixedEncodeURIComponent ( header . id ) + "\">" + header . innerHTML + "</a>" ;
}
level = this _level ; // update for the next one
} ) ;
html += "</" + settings . listType + ">" ;
if ( ! settings . noBackToTopLinks ) {
$ ( document ) . on ( "click" , ".back-to-top" , function ( ) {
$ ( window ) . scrollTop ( 0 ) ;
window . location . hash = "" ;
return false ;
} ) ;
}
render [ settings . showEffect ] ( ) ;
} ;
} ) ( jQuery ) ;
2023-10-24 09:53:42 +00:00
String . format = function ( ) {
var myString = arguments [ 0 ] ;
for ( var i = 1 ; i < arguments . length ; i ++ ) {
var regX = new RegExp ( "\\{" + ( i - 1 ) + "\\}" , "gm" ) ;
myString = myString . replace ( regX , arguments [ i ] ) ;
}
return myString ;
} ;
Date . prototype . addHours = function ( hours ) {
return new Date (
this . getFullYear ( ) ,
this . getMonth ( ) ,
this . getDate ( ) ,
this . getHours ( ) + hours ,
this . getMinutes ( ) ,
this . getSeconds ( ) ,
this . getMilliseconds ( )
) ;
} ;
window . utils = window . utils || { } ;
utils . getQueryParam = function ( name ) {
name = name . replace ( /[\[]/ , "\\[" ) . replace ( /[\]]/ , "\\]" ) ;
var regex = new RegExp ( "[\\?&]" + name + "=([^&#]*)" ) ,
results = regex . exec ( location . search ) ;
return results === null ? "" : decodeURIComponent ( results [ 1 ] . replace ( /\+/g , " " ) ) ;
} ;
utils . countOccurrences = function ( text , searchTerm ) {
text += "" ;
searchTerm += "" ;
if ( searchTerm . length <= 0 ) return text . length + 1 ;
var n = 0 , pos = 0 ;
var step = searchTerm . length ;
while ( true ) {
pos = text . indexOf ( searchTerm , pos ) ;
if ( pos >= 0 ) {
n ++ ;
pos += step ;
} else break ;
}
return ( n ) ;
2016-08-18 16:37:38 +00:00
} ;
2023-10-24 09:53:42 +00:00
window . app = window . app || { } ;
window . app . storage = ( function ( ) {
var prefix = "ace3_" ;
var timeToInvalidateItem = 1 ; // 1h
// gets an item from sessionStorage and checks if the time to invalidate the item is over
function getItem ( key ) {
var currentItem = window . sessionStorage . getItem ( prefix + key ) ;
if ( ! currentItem ) {
return null ;
}
currentItem = JSON . parse ( currentItem ) ;
// item is valid
if ( new Date ( currentItem . date ) . addHours ( timeToInvalidateItem ) > new Date ( ) ) {
return currentItem . item ;
}
return null ;
}
// saves an item in the sessionStorage and adds a timestamp
function setItem ( key , value ) {
var itemToSave = {
date : new Date ( ) ,
item : value
} ;
var currentItem = JSON . stringify ( itemToSave ) ;
window . sessionStorage . setItem ( prefix + key , currentItem ) ;
}
return {
getItem : getItem ,
setItem : setItem
} ;
2016-08-18 16:37:38 +00:00
} ) ( ) ;
2023-10-24 09:53:42 +00:00
window . app = window . app || { } ;
window . app . contentSearch = ( function ( $ ) {
var searchJsonUrl = "/js/search.json" ;
var storageKeyName = "searchResult" ;
var searchTermParamName = "searchTerm" ;
var _searchStartLength = 3 ;
var _maxEntriesLive = 10 ;
var _maxEntriesContent = 25 ;
var _maxDescriptionLengthLive = 80 ;
var _maxDescriptionLengthContent = 140 ;
var _searchTerm = "" ;
var _searchTermCombined = "" ;
var _timeOutID ;
var $liveSearch = $ ( "#liveSearch" ) ;
var $liveSearchField = $liveSearch . find ( ".liveSearch-field" ) ;
var $liveSearchResultList = $liveSearch . find ( ".liveSearch-result-list" ) ;
var $liveSearchButton = $liveSearch . find ( ".liveSearch-button" ) ;
var $contentSearchField = $liveSearch . find ( ".contentSearch-field" ) ;
var $contentSearchResultList = $ ( ".searchPage-result-list" ) ;
function init ( ) {
updateSearchFieldFromQueryParams ( ) ;
$liveSearchField . on ( "keyup" , handleLiveKeyDown ) ;
$liveSearchField . on ( "blur" , function ( ) {
setTimeout ( hideLiveResultList , 300 ) ;
} ) ;
$liveSearchButton . on ( "click" , openSearchPage ) ;
$contentSearchField . on ( "keyup" , handleContentKeyDown ) ;
}
/ *
===
UTIL
===
* /
function findSearchTermInArray ( response , maxEntries ) {
var results = [ ] ,
i = 0 ,
j = 0 ,
length = response . length ,
text = "" ,
multiplier = 0 ;
for ( i ; i < length ; i ++ ) {
var found = false ;
if ( results . length >= maxEntries ) {
break ;
}
var currentPage = response [ i ] ;
currentPage . value = 0 ;
var occurrences = 0 ;
for ( j = 0 ; j < 4 ; j ++ ) {
occurrences = 0 ;
switch ( j ) {
case 0 :
text = currentPage . description . toLowerCase ( ) ;
multiplier = 100 ;
break ;
case 1 :
text = currentPage . title . toLowerCase ( ) ;
multiplier = 1000 ;
break ;
case 2 :
text = currentPage . group . toLowerCase ( ) ;
multiplier = 10 ;
break ;
case 3 :
text = currentPage . content . toLowerCase ( ) ;
multiplier = 1 ;
}
if ( text . indexOf ( _searchTerm ) >= 0 || text . indexOf ( _searchTermCombined ) >= 0 ) {
found = true ;
occurrences = utils . countOccurrences ( text , _searchTerm ) ;
if ( _searchTermCombined !== _searchTerm ) {
occurrences += utils . countOccurrences ( text , _searchTermCombined ) ;
}
if ( occurrences > 0 ) {
currentPage . value += ( occurrences * multiplier ) ;
}
}
}
if ( found ) {
results . push ( currentPage ) ;
}
}
results = results . sort ( function ( x , y ) {
if ( x . value > y . value ) {
return - 1 ;
} else if ( y . value > x . value ) {
return 1 ;
} else {
return 0 ;
}
} ) ;
return results ;
}
function getSearchResults ( ) {
return $ . getJSON ( searchJsonUrl ) ;
}
function searchTermValid ( searchTerm ) {
if ( searchTerm === "" || searchTerm . length < _searchStartLength ) {
return false ;
} else {
return true ;
}
}
/ *
===
LIVE SEARCH
===
* /
function handleLiveKeyDown ( e ) {
// arrow down, arrow up
if ( e . keyCode === 38 || e . keyCode === 40 ) {
e . preventDefault ( ) ;
return false ;
}
// enter
if ( e . keyCode === 13 ) {
e . preventDefault ( ) ;
openSearchPage ( e ) ;
return false ;
}
// delays input and makes sure that only a complete search is sent
clearTimeout ( _timeOutID ) ;
_timeOutID = setTimeout ( search , 300 ) ;
}
function showLiveResultList ( results ) {
if ( ! results ) {
$liveSearchResultList . removeClass ( "hidden" ) ;
return ;
}
var i = 0 ,
length = results . length ;
var html = "" ;
for ( i ; i < length ; i ++ ) {
var currentPage = results [ i ] ;
var description = currentPage . description ;
if ( description . length > _maxDescriptionLengthLive ) {
description = description . substr ( 0 , _maxDescriptionLengthLive ) + "…" ;
}
html += String . format ( "<li><a href=\"{1}\">{0}<br><small>{2}</small></a></li>" , currentPage . title , currentPage . url , description ) ;
}
$liveSearchResultList . empty ( ) . append ( html ) . removeClass ( "hidden" ) ;
}
function hideLiveResultList ( ) {
$liveSearchResultList . addClass ( "hidden" ) ;
}
function search ( ) {
var term = $liveSearchField . val ( ) ;
_searchTerm = term . trim ( ) . toLowerCase ( ) ;
_searchTermCombined = _searchTerm . replace ( " " , "" ) ;
if ( ! searchTermValid ( _searchTerm ) ) {
$liveSearchResultList . empty ( ) ;
return false ;
}
startLiveSearch ( ) ;
}
function startLiveSearch ( ) {
var cachedSearchResults = app . storage . getItem ( storageKeyName ) ;
if ( ! cachedSearchResults ) {
getSearchResults ( ) . done ( function ( response ) {
app . storage . setItem ( storageKeyName , response ) ;
handleLiveSearchResult ( response ) ;
} ) ;
} else {
handleLiveSearchResult ( cachedSearchResults ) ;
}
}
function handleLiveSearchResult ( response ) {
var results = findSearchTermInArray ( response , _maxEntriesLive ) ;
showLiveResultList ( results ) ;
}
function openSearchPage ( e ) {
e . preventDefault ( ) ;
var searchTerm = $liveSearchField . val ( ) . trim ( ) ;
document . location . href = String . format ( "search.html?{0}={1}" , searchTermParamName , encodeURIComponent ( searchTerm ) ) ;
return false ;
}
/ *
===
CONTENT SEARCH
===
* /
function handleContentKeyDown ( e ) {
// arrow down, arrow up
if ( e . keyCode === 38 || e . keyCode === 40 ) {
e . preventDefault ( ) ;
return false ;
}
// enter
if ( e . keyCode === 13 ) {
e . preventDefault ( ) ;
contentSearch ( ) ;
return false ;
}
// delays input and makes sure that only a complete search is sent
clearTimeout ( _timeOutID ) ;
_timeOutID = setTimeout ( contentSearch , 300 ) ;
}
function contentSearch ( ) {
var term = $contentSearchField . val ( ) ;
_searchTerm = term . trim ( ) . toLowerCase ( ) ;
_searchTermCombined = _searchTerm . replace ( " " , "" ) ;
if ( ! searchTermValid ( _searchTerm ) ) {
return false ;
}
startContentSearch ( ) ;
}
function updateSearchFieldFromQueryParams ( ) {
_searchTerm = utils . getQueryParam ( searchTermParamName ) ;
_searchTermCombined = _searchTerm . replace ( " " , "" ) ;
$contentSearchField . val ( _searchTerm ) ;
if ( searchTermValid ( _searchTerm ) ) {
startContentSearch ( ) ;
}
}
function startContentSearch ( ) {
var cachedSearchResults = app . storage . getItem ( storageKeyName ) ;
if ( ! cachedSearchResults ) {
getSearchResults ( ) . done ( function ( response ) {
app . storage . setItem ( storageKeyName , response ) ;
handleContentSearchResult ( response ) ;
} ) ;
} else {
handleContentSearchResult ( cachedSearchResults ) ;
}
}
function handleContentSearchResult ( response ) {
var results = findSearchTermInArray ( response , _maxEntriesContent ) ;
showContentResultList ( results ) ;
}
function showContentResultList ( results ) {
var i = 0 ,
length = results . length ;
var html = "" ;
for ( i ; i < length ; i ++ ) {
var currentPage = results [ i ] ;
var description = currentPage . description ;
if ( description . length > _maxDescriptionLengthContent ) {
description = description . substr ( 0 , _maxDescriptionLengthContent ) + "…" ;
}
html += String . format ( "<li><a href=\"{1}\">{0}</a><span class=\"additionalInfo\"><br><small><span class=\"url\">{3}</span><br><span class\"description\">{2}</small></small></span></li>" , currentPage . title , currentPage . url , description , document . location . origin + currentPage . url ) ;
}
$contentSearchResultList . empty ( ) . append ( html ) ;
}
return {
init : init
} ;
2016-08-18 16:37:38 +00:00
} ) ( jQuery ) ;
2023-10-24 09:53:42 +00:00
jQuery ( document ) . ready ( function ( ) {
const $navigation = jQuery ( "nav.top-bar" ) ;
const $navigationToggle = $navigation . find ( ".toggle-topbar a" ) ;
$navigationToggle . on ( "click" , ( e ) => {
e . preventDefault ( ) ;
$navigation . toggleClass ( "expanded" ) ;
} ) ;
var $slider = jQuery ( ".slider" ) ;
if ( $slider . length > 0 ) {
$slider . slick ( {
arrows : true ,
dots : true ,
slidesToShow : 1 ,
slidesToScroll : 1 ,
autoplay : true ,
autoplaySpeed : 6000 ,
responsive : [
{
breakpoint : 640 ,
settings : {
arrows : false
}
}
]
} ) ;
}
var $toc = jQuery ( "#toc" ) ;
if ( $toc . length > 0 ) {
$toc . toc ( {
headers : "#content h2, #content h3, #content h4, #content h5, #content h6" ,
showEffect : "none" ,
noBackToTopLinks : true
} ) ;
if ( $toc . html ( ) === "" ) {
jQuery ( ".js-expandToc" ) . remove ( ) ;
jQuery ( ".toc-header" ) . remove ( ) ;
}
}
var $tables = $ ( "#content table" ) ;
$tables . each ( function ( index , item ) {
var $table = $ ( item ) ;
$table . wrap ( "<div class=\"table-wrapper\">" ) ;
} ) ;
} ) ;
window . app = window . app || { } ;
2016-08-18 16:37:38 +00:00
window . app . contentSearch . init ( ) ;