2021-04-07 08:12:42 +00:00
( function ( ) { "use strict" ; function e ( ) { } function t ( e , t ) { for ( var n = e . length ; n -- ; ) if ( e [ n ] . listener === t ) return n ; return - 1 } var n = e . prototype ; n . getListeners = function ( e ) { var t , n , i = this . _getEvents ( ) ; if ( "object" == typeof e ) { t = { } ; for ( n in i ) i . hasOwnProperty ( n ) && e . test ( n ) && ( t [ n ] = i [ n ] ) } else t = i [ e ] || ( i [ e ] = [ ] ) ; return t } , n . flattenListeners = function ( e ) { var t , n = [ ] ; for ( t = 0 ; e . length > t ; t += 1 ) n . push ( e [ t ] . listener ) ; return n } , n . getListenersAsObject = function ( e ) { var t , n = this . getListeners ( e ) ; return n instanceof Array && ( t = { } , t [ e ] = n ) , t || n } , n . addListener = function ( e , n ) { var i , r = this . getListenersAsObject ( e ) , o = "object" == typeof n ; for ( i in r ) r . hasOwnProperty ( i ) && - 1 === t ( r [ i ] , n ) && r [ i ] . push ( o ? n : { listener : n , once : false } ) ; return this } , n . on = n . addListener , n . addOnceListener = function ( e , t ) { return this . addListener ( e , { listener : t , once : true } ) } , n . once = n . addOnceListener , n . defineEvent = function ( e ) { return this . getListeners ( e ) , this } , n . defineEvents = function ( e ) { for ( var t = 0 ; e . length > t ; t += 1 ) this . defineEvent ( e [ t ] ) ; return this } , n . removeListener = function ( e , n ) { var i , r , o = this . getListenersAsObject ( e ) ; for ( r in o ) o . hasOwnProperty ( r ) && ( i = t ( o [ r ] , n ) , - 1 !== i && o [ r ] . splice ( i , 1 ) ) ; return this } , n . off = n . removeListener , n . addListeners = function ( e , t ) { return this . manipulateListeners ( false , e , t ) } , n . removeListeners = function ( e , t ) { return this . manipulateListeners ( true , e , t ) } , n . manipulateListeners = function ( e , t , n ) { var i , r , o = e ? this . removeListener : this . addListener , s = e ? this . removeListeners : this . addListeners ; if ( "object" != typeof t || t instanceof RegExp ) for ( i = n . length ; i -- ; ) o . call ( this , t , n [ i ] ) ; else for ( i in t ) t . hasOwnProperty ( i ) && ( r = t [ i ] ) && ( "function" == typeof r ? o . call ( this , i , r ) : s . call ( this , i , r ) ) ; return this } , n . removeEvent = function ( e ) { var t , n = typeof e , i = this . _getEvents ( ) ; if ( "string" === n ) delete i [ e ] ; else if ( "object" === n ) for ( t in i ) i . hasOwnProperty ( t ) && e . test ( t ) && delete i [ t ] ; else delete this . _events ; return this } , n . emitEvent = function ( e , t ) { var n , i , r , o , s = this . getListenersAsObject ( e ) ; for ( r in s ) if ( s . hasOwnProperty ( r ) ) for ( i = s [ r ] . length ; i -- ; ) n = s [ r ] [ i ] , o = n . listener . apply ( this , t || [ ] ) , ( o === this . _getOnceReturnValue ( ) || n . once === true ) && this . removeListener ( e , s [ r ] [ i ] . listener ) ; return this } , n . trigger = n . emitEvent , n . emit = function ( e ) { var t = Array . prototype . slice . call ( arguments , 1 ) ; return this . emitEvent ( e , t ) } , n . setOnceReturnValue = function ( e ) { return this . _onceReturnValue = e , this } , n . _getOnceReturnValue = function ( ) { return this . hasOwnProperty ( "_onceReturnValue" ) ? this . _onceReturnValue : true } , n . _getEvents = function ( ) { return this . _events || ( this . _events = { } ) } , "function" == typeof define && define . amd ? define ( function ( ) { return e } ) : "undefined" != typeof module && module . exports ? module . exports = e : this . EventEmitter = e } ) . call ( this ) , function ( e ) { "use strict" ; var t = document . documentElement , n = function ( ) { } ; t . addEventListener ? n = function ( e , t , n ) { e . addEventListener ( t , n , false ) } : t . attachEvent && ( n = function ( t , n , i ) { t [ n + i ] = i . handleEvent ? function ( ) { var t = e . event ; t . target = t . target || t . srcElement , i . handleEvent . call ( i , t ) } : function ( ) { var n = e . event ; n . target = n . target || n . srcElement , i . call ( t , n ) } , t . attachEvent ( "on" + n , t [ n + i ] ) } ) ; var i = function ( ) { } ; t . removeEventListener ? i = function ( e , t , n ) { e . removeEventListener ( t , n , false ) } : t . detachEvent && ( i = function ( e , t , n ) { e . detachEvent ( "on" + t , e [ t + n ] ) ; try { delete e [ t + n ] } catch ( i ) { e [ t + n ] = void 0 } } ) ; var r = { bind : n , unbind : i } ; "function" == typeof define && define . amd ? define ( r ) : e . eventie = r } ( this ) , function ( e ) { "use strict" ; function t ( e , t ) { for ( var n in t ) e [ n ] = t [ n ] ; return e } function n ( e ) { return "[object Array]" === c . call ( e ) } function i ( e ) { var t = [ ] ; if ( n ( e ) ) t = e ; else if ( "number" == typ
var slice = Array . prototype . slice ; function noop ( ) { }
function defineBridget ( $ ) {
if ( ! $ ) { return }
function addOptionMethod ( PluginClass ) {
if ( PluginClass . prototype . option ) { return }
PluginClass . prototype . option = function ( opts ) {
if ( ! $ . isPlainObject ( opts ) ) { return }
this . options = $ . extend ( true , this . options , opts )
}
}
var logError = typeof console === 'undefined' ? noop : function ( message ) { console . error ( message ) } ; function bridge ( namespace , PluginClass ) {
$ . fn [ namespace ] = function ( options ) {
if ( typeof options === 'string' ) {
var args = slice . call ( arguments , 1 ) ; for ( var i = 0 , len = this . length ; i < len ; i ++ ) {
var elem = this [ i ] ; var instance = $ . data ( elem , namespace ) ; if ( ! instance ) { logError ( "cannot call methods on " + namespace + " prior to initialization; " + "attempted to call '" + options + "'" ) ; continue }
if ( ! $ . isFunction ( instance [ options ] ) || options . charAt ( 0 ) === '_' ) { logError ( "no such method '" + options + "' for " + namespace + " instance" ) ; continue }
var returnValue = instance [ options ] . apply ( instance , args ) ; if ( returnValue !== undefined ) { return returnValue }
}
return this
} else { return this . each ( function ( ) { var instance = $ . data ( this , namespace ) ; if ( instance ) { instance . option ( options ) ; instance . _init ( ) } else { instance = new PluginClass ( this , options ) ; $ . data ( this , namespace , instance ) } } ) }
}
}
$ . bridget = function ( namespace , PluginClass ) { addOptionMethod ( PluginClass ) ; bridge ( namespace , PluginClass ) } ; return $ . bridget
}
if ( typeof define === 'function' && define . amd ) { define ( 'jquery-bridget/jquery.bridget' , [ 'jquery' ] , defineBridget ) } else if ( typeof exports === 'object' ) { defineBridget ( require ( 'jquery' ) ) } else { defineBridget ( window . jQuery ) }
} ) ( window ) ;
( function ( window ) {
var docElem = document . documentElement ; var bind = function ( ) { } ; function getIEEvent ( obj ) { var event = window . event ; event . target = event . target || event . srcElement || obj ; return event }
if ( docElem . addEventListener ) { bind = function ( obj , type , fn ) { obj . addEventListener ( type , fn , false ) } } else if ( docElem . attachEvent ) { bind = function ( obj , type , fn ) { obj [ type + fn ] = fn . handleEvent ? function ( ) { var event = getIEEvent ( obj ) ; fn . handleEvent . call ( fn , event ) } : function ( ) { var event = getIEEvent ( obj ) ; fn . call ( obj , event ) } ; obj . attachEvent ( "on" + type , obj [ type + fn ] ) } }
var unbind = function ( ) { } ; if ( docElem . removeEventListener ) { unbind = function ( obj , type , fn ) { obj . removeEventListener ( type , fn , false ) } } else if ( docElem . detachEvent ) { unbind = function ( obj , type , fn ) { obj . detachEvent ( "on" + type , obj [ type + fn ] ) ; try { delete obj [ type + fn ] } catch ( err ) { obj [ type + fn ] = undefined } } }
var eventie = { bind : bind , unbind : unbind } ; if ( typeof define === 'function' && define . amd ) { define ( 'eventie/eventie' , eventie ) } else if ( typeof exports === 'object' ) { module . exports = eventie } else { window . eventie = eventie }
} ) ( window ) ; ( function ( ) {
'use strict' ; function EventEmitter ( ) { }
var proto = EventEmitter . prototype ; var exports = this ; var originalGlobalValue = exports . EventEmitter ; function indexOfListener ( listeners , listener ) {
var i = listeners . length ; while ( i -- ) { if ( listeners [ i ] . listener === listener ) { return i } }
return - 1
}
function alias ( name ) { return function aliasClosure ( ) { return this [ name ] . apply ( this , arguments ) } }
proto . getListeners = function getListeners ( evt ) {
var events = this . _getEvents ( ) ; var response ; var key ; if ( evt instanceof RegExp ) { response = { } ; for ( key in events ) { if ( events . hasOwnProperty ( key ) && evt . test ( key ) ) { response [ key ] = events [ key ] } } }
else { response = events [ evt ] || ( events [ evt ] = [ ] ) }
return response
} ; proto . flattenListeners = function flattenListeners ( listeners ) {
var flatListeners = [ ] ; var i ; for ( i = 0 ; i < listeners . length ; i += 1 ) { flatListeners . push ( listeners [ i ] . listener ) }
return flatListeners
} ; proto . getListenersAsObject = function getListenersAsObject ( evt ) {
var listeners = this . getListeners ( evt ) ; var response ; if ( listeners instanceof Array ) { response = { } ; response [ evt ] = listeners }
return response || listeners
} ; proto . addListener = function addListener ( evt , listener ) {
var listeners = this . getListenersAsObject ( evt ) ; var listenerIsWrapped = typeof listener === 'object' ; var key ; for ( key in listeners ) { if ( listeners . hasOwnProperty ( key ) && indexOfListener ( listeners [ key ] , listener ) === - 1 ) { listeners [ key ] . push ( listenerIsWrapped ? listener : { listener : listener , once : false } ) } }
return this
} ; proto . on = alias ( 'addListener' ) ; proto . addOnceListener = function addOnceListener ( evt , listener ) { return this . addListener ( evt , { listener : listener , once : true } ) } ; proto . once = alias ( 'addOnceListener' ) ; proto . defineEvent = function defineEvent ( evt ) { this . getListeners ( evt ) ; return this } ; proto . defineEvents = function defineEvents ( evts ) {
for ( var i = 0 ; i < evts . length ; i += 1 ) { this . defineEvent ( evts [ i ] ) }
return this
} ; proto . removeListener = function removeListener ( evt , listener ) {
var listeners = this . getListenersAsObject ( evt ) ; var index ; var key ; for ( key in listeners ) { if ( listeners . hasOwnProperty ( key ) ) { index = indexOfListener ( listeners [ key ] , listener ) ; if ( index !== - 1 ) { listeners [ key ] . splice ( index , 1 ) } } }
return this
} ; proto . off = alias ( 'removeListener' ) ; proto . addListeners = function addListeners ( evt , listeners ) { return this . manipulateListeners ( false , evt , listeners ) } ; proto . removeListeners = function removeListeners ( evt , listeners ) { return this . manipulateListeners ( true , evt , listeners ) } ; proto . manipulateListeners = function manipulateListeners ( remove , evt , listeners ) {
var i ; var value ; var single = remove ? this . removeListener : this . addListener ; var multiple = remove ? this . removeListeners : this . addListeners ; if ( typeof evt === 'object' && ! ( evt instanceof RegExp ) ) {
for ( i in evt ) {
if ( evt . hasOwnProperty ( i ) && ( value = evt [ i ] ) ) {
if ( typeof value === 'function' ) { single . call ( this , i , value ) }
else { multiple . call ( this , i , value ) }
}
}
}
else { i = listeners . length ; while ( i -- ) { single . call ( this , evt , listeners [ i ] ) } }
return this
} ; proto . removeEvent = function removeEvent ( evt ) {
var type = typeof evt ; var events = this . _getEvents ( ) ; var key ; if ( type === 'string' ) { delete events [ evt ] }
else if ( evt instanceof RegExp ) { for ( key in events ) { if ( events . hasOwnProperty ( key ) && evt . test ( key ) ) { delete events [ key ] } } }
else { delete this . _events }
return this
} ; proto . removeAllListeners = alias ( 'removeEvent' ) ; proto . emitEvent = function emitEvent ( evt , args ) {
var listeners = this . getListenersAsObject ( evt ) ; var listener ; var i ; var key ; var response ; for ( key in listeners ) {
if ( listeners . hasOwnProperty ( key ) ) {
i = listeners [ key ] . length ; while ( i -- ) {
listener = listeners [ key ] [ i ] ; if ( listener . once === true ) { this . removeListener ( evt , listener . listener ) }
response = listener . listener . apply ( this , args || [ ] ) ; if ( response === this . _getOnceReturnValue ( ) ) { this . removeListener ( evt , listener . listener ) }
}
}
}
return this
} ; proto . trigger = alias ( 'emitEvent' ) ; proto . emit = function emit ( evt ) { var args = Array . prototype . slice . call ( arguments , 1 ) ; return this . emitEvent ( evt , args ) } ; proto . setOnceReturnValue = function setOnceReturnValue ( value ) { this . _onceReturnValue = value ; return this } ; proto . _getOnceReturnValue = function _getOnceReturnValue ( ) {
if ( this . hasOwnProperty ( '_onceReturnValue' ) ) { return this . _onceReturnValue }
else { return true }
} ; proto . _getEvents = function _getEvents ( ) { return this . _events || ( this . _events = { } ) } ; EventEmitter . noConflict = function noConflict ( ) { exports . EventEmitter = originalGlobalValue ; return EventEmitter } ; if ( typeof define === 'function' && define . amd ) { define ( 'eventEmitter/EventEmitter' , [ ] , function ( ) { return EventEmitter } ) }
else if ( typeof module === 'object' && module . exports ) { module . exports = EventEmitter }
else { exports . EventEmitter = EventEmitter }
} . call ( this ) ) ; ( function ( window ) {
var prefixes = 'Webkit Moz ms Ms O' . split ( ' ' ) ; var docElemStyle = document . documentElement . style ; function getStyleProperty ( propName ) {
if ( ! propName ) { return }
if ( typeof docElemStyle [ propName ] === 'string' ) { return propName }
propName = propName . charAt ( 0 ) . toUpperCase ( ) + propName . slice ( 1 ) ; var prefixed ; for ( var i = 0 , len = prefixes . length ; i < len ; i ++ ) { prefixed = prefixes [ i ] + propName ; if ( typeof docElemStyle [ prefixed ] === 'string' ) { return prefixed } }
}
if ( typeof define === 'function' && define . amd ) { define ( 'get-style-property/get-style-property' , [ ] , function ( ) { return getStyleProperty } ) } else if ( typeof exports === 'object' ) { module . exports = getStyleProperty } else { window . getStyleProperty = getStyleProperty }
} ) ( window ) ; ( function ( window , undefined ) {
function getStyleSize ( value ) { var num = parseFloat ( value ) ; var isValid = value . indexOf ( '%' ) === - 1 && ! isNaN ( num ) ; return isValid && num }
function noop ( ) { }
var logError = typeof console === 'undefined' ? noop : function ( message ) { console . error ( message ) } ; var measurements = [ 'paddingLeft' , 'paddingRight' , 'paddingTop' , 'paddingBottom' , 'marginLeft' , 'marginRight' , 'marginTop' , 'marginBottom' , 'borderLeftWidth' , 'borderRightWidth' , 'borderTopWidth' , 'borderBottomWidth' ] ; function getZeroSize ( ) {
var size = { width : 0 , height : 0 , innerWidth : 0 , innerHeight : 0 , outerWidth : 0 , outerHeight : 0 } ; for ( var i = 0 , len = measurements . length ; i < len ; i ++ ) { var measurement = measurements [ i ] ; size [ measurement ] = 0 }
return size
}
function defineGetSize ( getStyleProperty ) {
var isSetup = false ; var getStyle , boxSizingProp , isBoxSizeOuter ; function setup ( ) {
if ( isSetup ) { return }
isSetup = true ; var getComputedStyle = window . getComputedStyle ; getStyle = ( function ( ) {
var getStyleFn = getComputedStyle ? function ( elem ) { return getComputedStyle ( elem , null ) } : function ( elem ) { return elem . currentStyle } ; return function getStyle ( elem ) {
var style = getStyleFn ( elem ) ; if ( ! style ) { logError ( 'Style returned ' + style + '. Are you running this code in a hidden iframe on Firefox? ' + 'See http://bit.ly/getsizebug1' ) }
return style
}
} ) ( ) ; boxSizingProp = getStyleProperty ( 'boxSizing' ) ; if ( boxSizingProp ) { var div = document . createElement ( 'div' ) ; div . style . width = '200px' ; div . style . padding = '1px 2px 3px 4px' ; div . style . borderStyle = 'solid' ; div . style . borderWidth = '1px 2px 3px 4px' ; div . style [ boxSizingProp ] = 'border-box' ; var body = document . body || document . documentElement ; body . appendChild ( div ) ; var style = getStyle ( div ) ; isBoxSizeOuter = getStyleSize ( style . width ) === 200 ; body . removeChild ( div ) }
}
function getSize ( elem ) {
setup ( ) ; if ( typeof elem === 'string' ) { elem = document . querySelector ( elem ) }
if ( ! elem || typeof elem !== 'object' || ! elem . nodeType ) { return }
var style = getStyle ( elem ) ; if ( style . display === 'none' ) { return getZeroSize ( ) }
var size = { } ; size . width = elem . offsetWidth ; size . height = elem . offsetHeight ; var isBorderBox = size . isBorderBox = ! ! ( boxSizingProp && style [ boxSizingProp ] && style [ boxSizingProp ] === 'border-box' ) ; for ( var i = 0 , len = measurements . length ; i < len ; i ++ ) { var measurement = measurements [ i ] ; var value = style [ measurement ] ; value = mungeNonPixel ( elem , value ) ; var num = parseFloat ( value ) ; size [ measurement ] = ! isNaN ( num ) ? num : 0 }
var paddingWidth = size . paddingLeft + size . paddingRight ; var paddingHeight = size . paddingTop + size . paddingBottom ; var marginWidth = size . marginLeft + size . marginRight ; var marginHeight = size . marginTop + size . marginBottom ; var borderWidth = size . borderLeftWidth + size . borderRightWidth ; var borderHeight = size . borderTopWidth + size . borderBottomWidth ; var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter ; var styleWidth = getStyleSize ( style . width ) ; if ( styleWidth !== false ) { size . width = styleWidth + ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth ) }
var styleHeight = getStyleSize ( style . height ) ; if ( styleHeight !== false ) { size . height = styleHeight + ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight ) }
size . innerWidth = size . width - ( paddingWidth + borderWidth ) ; size . innerHeight = size . height - ( paddingHeight + borderHeight ) ; size . outerWidth = size . width + marginWidth ; size . outerHeight = size . height + marginHeight ; return size
}
function mungeNonPixel ( elem , value ) {
if ( window . getComputedStyle || value . indexOf ( '%' ) === - 1 ) { return value }
var style = elem . style ; var left = style . left ; var rs = elem . runtimeStyle ; var rsLeft = rs && rs . left ; if ( rsLeft ) { rs . left = elem . currentStyle . left }
style . left = value ; value = style . pixelLeft ; style . left = left ; if ( rsLeft ) { rs . left = rsLeft }
return value
}
return getSize
}
if ( typeof define === 'function' && define . amd ) { define ( 'get-size/get-size' , [ 'get-style-property/get-style-property' ] , defineGetSize ) } else if ( typeof exports === 'object' ) { module . exports = defineGetSize ( require ( 'desandro-get-style-property' ) ) } else { window . getSize = defineGetSize ( window . getStyleProperty ) }
} ) ( window ) ; ( function ( window ) {
var document = window . document ; var queue = [ ] ; function docReady ( fn ) {
if ( typeof fn !== 'function' ) { return }
if ( docReady . isReady ) { fn ( ) } else { queue . push ( fn ) }
}
docReady . isReady = false ; function onReady ( event ) {
var isIE8NotReady = event . type === 'readystatechange' && document . readyState !== 'complete' ; if ( docReady . isReady || isIE8NotReady ) { return }
trigger ( )
}
function trigger ( ) { docReady . isReady = true ; for ( var i = 0 , len = queue . length ; i < len ; i ++ ) { var fn = queue [ i ] ; fn ( ) } }
function defineDocReady ( eventie ) {
if ( document . readyState === 'complete' ) { trigger ( ) } else { eventie . bind ( document , 'DOMContentLoaded' , onReady ) ; eventie . bind ( document , 'readystatechange' , onReady ) ; eventie . bind ( window , 'load' , onReady ) }
return docReady
}
if ( typeof define === 'function' && define . amd ) { define ( 'doc-ready/doc-ready' , [ 'eventie/eventie' ] , defineDocReady ) } else if ( typeof exports === 'object' ) { module . exports = defineDocReady ( require ( 'eventie' ) ) } else { window . docReady = defineDocReady ( window . eventie ) }
} ) ( window ) ; ( function ( ElemProto ) {
'use strict' ; var matchesMethod = ( function ( ) {
if ( ElemProto . matches ) { return 'matches' }
if ( ElemProto . matchesSelector ) { return 'matchesSelector' }
var prefixes = [ 'webkit' , 'moz' , 'ms' , 'o' ] ; for ( var i = 0 , len = prefixes . length ; i < len ; i ++ ) { var prefix = prefixes [ i ] ; var method = prefix + 'MatchesSelector' ; if ( ElemProto [ method ] ) { return method } }
} ) ( ) ; function match ( elem , selector ) { return elem [ matchesMethod ] ( selector ) }
function checkParent ( elem ) {
if ( elem . parentNode ) { return }
var fragment = document . createDocumentFragment ( ) ; fragment . appendChild ( elem )
}
function query ( elem , selector ) {
checkParent ( elem ) ; var elems = elem . parentNode . querySelectorAll ( selector ) ; for ( var i = 0 , len = elems . length ; i < len ; i ++ ) { if ( elems [ i ] === elem ) { return true } }
return false
}
function matchChild ( elem , selector ) { checkParent ( elem ) ; return match ( elem , selector ) }
var matchesSelector ; if ( matchesMethod ) { var div = document . createElement ( 'div' ) ; var supportsOrphans = match ( div , 'div' ) ; matchesSelector = supportsOrphans ? match : matchChild } else { matchesSelector = query }
if ( typeof define === 'function' && define . amd ) { define ( 'matches-selector/matches-selector' , [ ] , function ( ) { return matchesSelector } ) } else if ( typeof exports === 'object' ) { module . exports = matchesSelector }
else { window . matchesSelector = matchesSelector }
} ) ( Element . prototype ) ;
( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'fizzy-ui-utils/utils' , [ 'doc-ready/doc-ready' , 'matches-selector/matches-selector' ] , function ( docReady , matchesSelector ) { return factory ( window , docReady , matchesSelector ) } ) } else if ( typeof exports == 'object' ) { module . exports = factory ( window , require ( 'doc-ready' ) , require ( 'desandro-matches-selector' ) ) } else { window . fizzyUIUtils = factory ( window , window . docReady , window . matchesSelector ) } } ( window , function factory ( window , docReady , matchesSelector ) {
var utils = { } ; utils . extend = function ( a , b ) {
for ( var prop in b ) { a [ prop ] = b [ prop ] }
return a
} ; utils . modulo = function ( num , div ) { return ( ( num % div ) + div ) % div } ; var objToString = Object . prototype . toString ; utils . isArray = function ( obj ) { return objToString . call ( obj ) == '[object Array]' } ; utils . makeArray = function ( obj ) {
var ary = [ ] ; if ( utils . isArray ( obj ) ) { ary = obj } else if ( obj && typeof obj . length == 'number' ) { for ( var i = 0 , len = obj . length ; i < len ; i ++ ) { ary . push ( obj [ i ] ) } } else { ary . push ( obj ) }
return ary
} ; utils . indexOf = Array . prototype . indexOf ? function ( ary , obj ) { return ary . indexOf ( obj ) } : function ( ary , obj ) {
for ( var i = 0 , len = ary . length ; i < len ; i ++ ) { if ( ary [ i ] === obj ) { return i } }
return - 1
} ; utils . removeFrom = function ( ary , obj ) { var index = utils . indexOf ( ary , obj ) ; if ( index != - 1 ) { ary . splice ( index , 1 ) } } ; utils . isElement = ( typeof HTMLElement == 'function' || typeof HTMLElement == 'object' ) ? function isElementDOM2 ( obj ) { return obj instanceof HTMLElement } : function isElementQuirky ( obj ) { return obj && typeof obj == 'object' && obj . nodeType == 1 && typeof obj . nodeName == 'string' } ; utils . setText = ( function ( ) {
var setTextProperty ; function setText ( elem , text ) { setTextProperty = setTextProperty || ( document . documentElement . textContent !== undefined ? 'textContent' : 'innerText' ) ; elem [ setTextProperty ] = text }
return setText
} ) ( ) ; utils . getParent = function ( elem , selector ) { while ( elem != document . body ) { elem = elem . parentNode ; if ( matchesSelector ( elem , selector ) ) { return elem } } } ; utils . getQueryElement = function ( elem ) {
if ( typeof elem == 'string' ) { return document . querySelector ( elem ) }
return elem
} ; utils . handleEvent = function ( event ) { var method = 'on' + event . type ; if ( this [ method ] ) { this [ method ] ( event ) } } ; utils . filterFindElements = function ( elems , selector ) {
elems = utils . makeArray ( elems ) ; var ffElems = [ ] ; for ( var i = 0 , len = elems . length ; i < len ; i ++ ) {
var elem = elems [ i ] ; if ( ! utils . isElement ( elem ) ) { continue }
if ( selector ) {
if ( matchesSelector ( elem , selector ) ) { ffElems . push ( elem ) }
var childElems = elem . querySelectorAll ( selector ) ; for ( var j = 0 , jLen = childElems . length ; j < jLen ; j ++ ) { ffElems . push ( childElems [ j ] ) }
} else { ffElems . push ( elem ) }
}
return ffElems
} ; utils . debounceMethod = function ( _class , methodName , threshold ) {
var method = _class . prototype [ methodName ] ; var timeoutName = methodName + 'Timeout' ; _class . prototype [ methodName ] = function ( ) {
var timeout = this [ timeoutName ] ; if ( timeout ) { clearTimeout ( timeout ) }
var args = arguments ; var _this = this ; this [ timeoutName ] = setTimeout ( function ( ) { method . apply ( _this , args ) ; delete _this [ timeoutName ] } , threshold || 100 )
}
} ; utils . toDashed = function ( str ) { return str . replace ( /(.)([A-Z])/g , function ( match , $1 , $2 ) { return $1 + '-' + $2 } ) . toLowerCase ( ) } ; var console = window . console ; utils . htmlInit = function ( WidgetClass , namespace ) {
docReady ( function ( ) {
var dashedNamespace = utils . toDashed ( namespace ) ; var elems = document . querySelectorAll ( '.js-' + dashedNamespace ) ; var dataAttr = 'data-' + dashedNamespace + '-options' ; for ( var i = 0 , len = elems . length ; i < len ; i ++ ) {
var elem = elems [ i ] ; var attr = elem . getAttribute ( dataAttr ) ; var options ; try { options = attr && JSON . parse ( attr ) } catch ( error ) {
if ( console ) { console . error ( 'Error parsing ' + dataAttr + ' on ' + elem . nodeName . toLowerCase ( ) + ( elem . id ? '#' + elem . id : '' ) + ': ' + error ) }
continue
}
var instance = new WidgetClass ( elem , options ) ; var jQuery = window . jQuery ; if ( jQuery ) { jQuery . data ( elem , namespace , instance ) }
}
} )
} ; return utils
} ) ) ;
( function ( window , factory ) {
'use strict' ;
if ( typeof define === 'function' && define . amd ) {
define ( 'outlayer/item' ,
[ 'eventEmitter/EventEmitter' , 'get-size/get-size' ,
'get-style-property/get-style-property' , 'fizzy-ui-utils/utils' ] ,
function ( EventEmitter , getSize , getStyleProperty , utils ) {
return factory ( window , EventEmitter , getSize , getStyleProperty , utils )
}
)
}
else if ( typeof exports === 'object' ) {
module . exports = factory ( window , require ( 'wolfy87-eventemitter' ) , require ( 'get-size' ) , require ( 'desandro-get-style-property' ) , require ( 'fizzy-ui-utils' ) )
}
else {
window . Outlayer = { } ;
window . Outlayer . Item = factory ( window , window . EventEmitter , window . getSize , window . getStyleProperty , window . fizzyUIUtils )
}
} ( window , function factory ( window , EventEmitter , getSize , getStyleProperty , utils ) {
'use strict' ;
var getComputedStyle = window . getComputedStyle ;
var getStyle = getComputedStyle ? function ( elem ) { return getComputedStyle ( elem , null ) } : function ( elem ) { return elem . currentStyle } ; function isEmptyObj ( obj ) {
for ( var prop in obj ) {
return false
}
prop = null ;
return true ;
}
var transitionProperty = getStyleProperty ( 'transition' ) ;
var transformProperty = getStyleProperty ( 'transform' ) ;
var supportsCSS3 = transitionProperty && transformProperty ;
var is3d = ! ! getStyleProperty ( 'perspective' ) ;
var transitionEndEvent = { WebkitTransition : 'webkitTransitionEnd' ,
MozTransition : 'transitionend' ,
OTransition : 'otransitionend' ,
transition : 'transitionend' } [ transitionProperty ] ;
var prefixableProperties = [ 'transform' , 'transition' , 'transitionDuration' , 'transitionProperty' ] ;
var vendorProperties = ( function ( ) {
var cache = { } ;
for ( var i = 0 , len = prefixableProperties . length ; i < len ; i ++ ) {
var prop = prefixableProperties [ i ] ;
var supportedProp = getStyleProperty ( prop ) ;
if ( supportedProp && supportedProp !== prop ) { cache [ prop ] = supportedProp }
}
return cache
} ) ( ) ;
function Item ( element , layout ) {
if ( ! element ) { return }
this . element = element ; this . layout = layout ; this . position = { x : 0 , y : 0 } ; this . _create ( )
}
utils . extend ( Item . prototype , EventEmitter . prototype ) ;
Item . prototype . _create = function ( ) {
this . _transn = { ingProperties : { } , clean : { } , onEnd : { } } ;
this . css ( { position : 'absolute' } )
} ;
Item . prototype . handleEvent = function ( event ) {
var method = 'on' + event . type ;
if ( this [ method ] ) {
this [ method ] ( event )
}
} ;
Item . prototype . getSize = function ( ) {
this . size = getSize ( this . element )
} ;
Item . prototype . css = function ( style ) {
var elemStyle = this . element . style ;
for ( var prop in style ) {
var supportedProp = vendorProperties [ prop ] || prop ; elemStyle [ supportedProp ] = style [ prop ]
}
} ;
Item . prototype . getPosition = function ( ) {
var style = getStyle ( this . element ) ;
var layoutOptions = this . layout . options ;
var isOriginLeft = layoutOptions . isOriginLeft ;
var isOriginTop = layoutOptions . isOriginTop ;
var xValue = style [ isOriginLeft ? 'left' : 'right' ] ;
var yValue = style [ isOriginTop ? 'top' : 'bottom' ] ;
var layoutSize = this . layout . size ;
var x = xValue . indexOf ( '%' ) != - 1 ? ( parseFloat ( xValue ) / 100 ) * layoutSize . width : parseInt ( xValue , 10 ) ;
var y = yValue . indexOf ( '%' ) != - 1 ? ( parseFloat ( yValue ) / 100 ) * layoutSize . height : parseInt ( yValue , 10 ) ;
x = isNaN ( x ) ? 0 : x ; y = isNaN ( y ) ? 0 : y ;
x -= isOriginLeft ? layoutSize . paddingLeft : layoutSize . paddingRight ;
y -= isOriginTop ? layoutSize . paddingTop : layoutSize . paddingBottom ;
this . position . x = x ; this . position . y = y
} ;
Item . prototype . layoutPosition = function ( ) {
var layoutSize = this . layout . size ;
var layoutOptions = this . layout . options ;
var style = { } ;
var xPadding = layoutOptions . isOriginLeft ? 'paddingLeft' : 'paddingRight' ;
var xProperty = layoutOptions . isOriginLeft ? 'left' : 'right' ;
var xResetProperty = layoutOptions . isOriginLeft ? 'right' : 'left' ;
var x = this . position . x + layoutSize [ xPadding ] ; style [ xProperty ] = this . getXValue ( x ) ;
style [ xResetProperty ] = '' ;
var yPadding = layoutOptions . isOriginTop ? 'paddingTop' : 'paddingBottom' ;
var yProperty = layoutOptions . isOriginTop ? 'top' : 'bottom' ;
var yResetProperty = layoutOptions . isOriginTop ? 'bottom' : 'top' ;
var y = this . position . y + layoutSize [ yPadding ] ; style [ yProperty ] = this . getYValue ( y ) ;
style [ yResetProperty ] = '' ;
this . css ( style ) ;
this . emitEvent ( 'layout' , [ this ] )
} ;
Item . prototype . getXValue = function ( x ) {
var layoutOptions = this . layout . options ;
return layoutOptions . percentPosition && ! layoutOptions . isHorizontal ? ( ( x / this . layout . size . width ) * 100 ) + '%' : x + 'px' } ; Item . prototype . getYValue = function ( y ) { var layoutOptions = this . layout . options ; return layoutOptions . percentPosition && layoutOptions . isHorizontal ? ( ( y / this . layout . size . height ) * 100 ) + '%' : y + 'px' } ; Item . prototype . _transitionTo = function ( x , y ) {
this . getPosition ( ) ;
var curX = this . position . x ;
var curY = this . position . y ; var compareX = parseInt ( x , 10 ) ;
var compareY = parseInt ( y , 10 ) ;
var didNotMove = compareX === this . position . x && compareY === this . position . y ;
this . setPosition ( x , y ) ;
if ( didNotMove && ! this . isTransitioning ) {
this . layoutPosition ( ) ;
return
}
var transX = x - curX ;
var transY = y - curY ;
var transitionStyle = { } ;
transitionStyle . transform = this . getTranslate ( transX , transY ) ;
this . transition ( { to : transitionStyle , onTransitionEnd : { transform : this . layoutPosition } , isCleaning : true } )
} ;
Item . prototype . getTranslate = function ( x , y ) {
var layoutOptions = this . layout . options ;
x = layoutOptions . isOriginLeft ? x : - x ;
y = layoutOptions . isOriginTop ? y : - y ;
if ( is3d ) {
return 'translate3d(' + x + 'px, ' + y + 'px, 0)' ;
}
return 'translate(' + x + 'px, ' + y + 'px)' ;
} ;
Item . prototype . goTo = function ( x , y ) {
this . setPosition ( x , y ) ;
this . layoutPosition ( ) ;
} ;
Item . prototype . moveTo = supportsCSS3 ? Item . prototype . _transitionTo : Item . prototype . goTo ;
Item . prototype . setPosition = function ( x , y ) {
this . position . x = parseInt ( x , 10 ) ;
this . position . y = parseInt ( y , 10 )
} ;
Item . prototype . _nonTransition = function ( args ) {
this . css ( args . to ) ;
if ( args . isCleaning ) {
this . _removeStyles ( args . to )
}
for ( var prop in args . onTransitionEnd ) {
args . onTransitionEnd [ prop ] . call ( this )
}
} ;
Item . prototype . _transition = function ( args ) {
if ( ! parseFloat ( this . layout . options . transitionDuration ) ) {
this . _nonTransition ( args ) ; return
}
var _transition = this . _transn ;
for ( var prop in args . onTransitionEnd ) {
_transition . onEnd [ prop ] = args . onTransitionEnd [ prop ] ;
}
for ( prop in args . to ) {
_transition . ingProperties [ prop ] = true ;
if ( args . isCleaning ) {
_transition . clean [ prop ] = true
}
}
if ( args . from ) {
this . css ( args . from ) ;
var h = this . element . offsetHeight ;
h = null
}
this . enableTransition ( args . to ) ;
this . css ( args . to ) ;
this . isTransitioning = true ;
} ;
function toDashedAll ( str ) {
return str . replace ( /([A-Z])/g , function ( $1 ) {
return '-' + $1 . toLowerCase ( )
} )
}
var transitionProps = 'opacity,' + toDashedAll ( vendorProperties . transform || 'transform' ) ;
Item . prototype . enableTransition = function ( ) {
if ( this . isTransitioning ) {
return
}
this . css ( { transitionProperty : transitionProps ,
transitionDuration : this . layout . options . transitionDuration
} ) ;
this . element . addEventListener ( transitionEndEvent , this , false ) ;
} ;
Item . prototype . transition = Item . prototype [ transitionProperty ? '_transition' : '_nonTransition' ] ;
Item . prototype . onwebkitTransitionEnd = function ( event ) {
this . ontransitionend ( event )
} ;
Item . prototype . onotransitionend = function ( event ) {
this . ontransitionend ( event )
} ;
var dashedVendorProperties = { '-webkit-transform' : 'transform' ,
'-moz-transform' : 'transform' ,
'-o-transform' : 'transform' } ;
Item . prototype . ontransitionend = function ( event ) {
if ( event . target !== this . element ) {
return
}
var _transition = this . _transn ;
var propertyName = dashedVendorProperties [ event . propertyName ] || event . propertyName ;
delete _transition . ingProperties [ propertyName ] ;
if ( isEmptyObj ( _transition . ingProperties ) ) {
this . disableTransition ( )
}
if ( propertyName in _transition . clean ) {
this . element . style [ event . propertyName ] = '' ;
delete _transition . clean [ propertyName ]
}
if ( propertyName in _transition . onEnd ) {
var onTransitionEnd = _transition . onEnd [ propertyName ] ;
onTransitionEnd . call ( this ) ;
delete _transition . onEnd [ propertyName ]
}
this . emitEvent ( 'transitionEnd' , [ this ] )
} ;
Item . prototype . disableTransition = function ( ) {
this . removeTransitionStyles ( ) ;
this . element . removeEventListener ( transitionEndEvent , this , false ) ;
this . isTransitioning = false } ;
Item . prototype . _removeStyles = function ( style ) {
var cleanStyle = { } ;
for ( var prop in style ) {
cleanStyle [ prop ] = '' ;
}
this . css ( cleanStyle ) ;
} ;
var cleanTransitionStyle = { transitionProperty : '' , transitionDuration : '' } ;
Item . prototype . removeTransitionStyles = function ( ) { this . css ( cleanTransitionStyle ) } ;
Item . prototype . removeElem = function ( ) {
this . element . parentNode . removeChild ( this . element ) ; this . css ( { display : '' } ) ;
this . emitEvent ( 'remove' , [ this ] )
} ;
Item . prototype . remove = function ( ) {
if ( ! transitionProperty || ! parseFloat ( this . layout . options . transitionDuration ) ) {
this . removeElem ( ) ; return
}
var _this = this ; this . once ( 'transitionEnd' , function ( ) { _this . removeElem ( ) } ) ;
this . hide ( )
} ;
Item . prototype . reveal = function ( ) {
delete this . isHidden ;
this . css ( { display : '' } ) ;
var options = this . layout . options ; var onTransitionEnd = { } ;
var transitionEndProperty = this . getHideRevealTransitionEndProperty ( 'visibleStyle' ) ;
onTransitionEnd [ transitionEndProperty ] = this . onRevealTransitionEnd ;
this . transition ( { from : options . hiddenStyle , to : options . visibleStyle ,
isCleaning : true , onTransitionEnd : onTransitionEnd
} )
} ;
Item . prototype . onRevealTransitionEnd = function ( ) {
if ( ! this . isHidden ) {
this . emitEvent ( 'reveal' )
}
} ;
Item . prototype . getHideRevealTransitionEndProperty = function ( styleProperty ) {
var optionStyle = this . layout . options [ styleProperty ] ;
if ( optionStyle . opacity ) {
return 'opacity'
}
for ( var prop in optionStyle ) {
return prop
}
} ;
Item . prototype . hide = function ( ) {
this . isHidden = true ;
this . css ( { display : '' } ) ;
var options = this . layout . options ;
var onTransitionEnd = { } ;
var transitionEndProperty = this . getHideRevealTransitionEndProperty ( 'hiddenStyle' ) ;
onTransitionEnd [ transitionEndProperty ] = this . onHideTransitionEnd ;
this . transition ( { from : options . visibleStyle , to : options . hiddenStyle , isCleaning : true , onTransitionEnd : onTransitionEnd } )
} ;
Item . prototype . onHideTransitionEnd = function ( ) {
if ( this . isHidden ) { this . css ( { display : 'none' } ) ; this . emitEvent ( 'hide' ) }
} ;
Item . prototype . destroy = function ( ) {
this . css ( { position : '' , left : '' , right : '' , top : '' , bottom : '' , transition : '' , transform : '' } )
} ;
return Item ;
} ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'outlayer/outlayer' , [ 'eventie/eventie' , 'eventEmitter/EventEmitter' , 'get-size/get-size' , 'fizzy-ui-utils/utils' , './item' ] , function ( eventie , EventEmitter , getSize , utils , Item ) { return factory ( window , eventie , EventEmitter , getSize , utils , Item ) } ) } else if ( typeof exports == 'object' ) { module . exports = factory ( window , require ( 'eventie' ) , require ( 'wolfy87-eventemitter' ) , require ( 'get-size' ) , require ( 'fizzy-ui-utils' ) , require ( './item' ) ) } else { window . Outlayer = factory ( window , window . eventie , window . EventEmitter , window . getSize , window . fizzyUIUtils , window . Outlayer . Item ) } } ( window , function factory ( window , eventie , EventEmitter , getSize , utils , Item ) {
'use strict' ; var console = window . console ; var jQuery = window . jQuery ; var noop = function ( ) { } ; var GUID = 0 ; var instances = { } ; function Outlayer ( element , options ) {
var queryElement = utils . getQueryElement ( element ) ; if ( ! queryElement ) {
if ( console ) { console . error ( 'Bad element for ' + this . constructor . namespace + ': ' + ( queryElement || element ) ) }
return
}
this . element = queryElement ; if ( jQuery ) { this . $element = jQuery ( this . element ) }
this . options = utils . extend ( { } , this . constructor . defaults ) ; this . option ( options ) ; var id = ++ GUID ; this . element . outlayerGUID = id ; instances [ id ] = this ; this . _create ( ) ; if ( this . options . isInitLayout ) { this . layout ( ) }
}
Outlayer . namespace = 'outlayer' ; Outlayer . Item = Item ; Outlayer . defaults = { containerStyle : { position : 'relative' } , isInitLayout : true , isOriginLeft : true , isOriginTop : true , isResizeBound : true , isResizingContainer : true , transitionDuration : '0.4s' , hiddenStyle : { opacity : 0 , transform : 'scale(0.001)' } , visibleStyle : { opacity : 1 , transform : 'scale(1)' } } ; utils . extend ( Outlayer . prototype , EventEmitter . prototype ) ; Outlayer . prototype . option = function ( opts ) { utils . extend ( this . options , opts ) } ; Outlayer . prototype . _create = function ( ) { this . reloadItems ( ) ; this . stamps = [ ] ; this . stamp ( this . options . stamp ) ; utils . extend ( this . element . style , this . options . containerStyle ) ; if ( this . options . isResizeBound ) { this . bindResize ( ) } } ; Outlayer . prototype . reloadItems = function ( ) { this . items = this . _itemize ( this . element . children ) } ; Outlayer . prototype . _itemize = function ( elems ) {
var itemElems = this . _filterFindItemElements ( elems ) ; var Item = this . constructor . Item ; var items = [ ] ; for ( var i = 0 , len = itemElems . length ; i < len ; i ++ ) { var elem = itemElems [ i ] ; var item = new Item ( elem , this ) ; items . push ( item ) }
return items
} ; Outlayer . prototype . _filterFindItemElements = function ( elems ) { return utils . filterFindElements ( elems , this . options . itemSelector ) } ; Outlayer . prototype . getItemElements = function ( ) {
var elems = [ ] ; for ( var i = 0 , len = this . items . length ; i < len ; i ++ ) { elems . push ( this . items [ i ] . element ) }
return elems
} ; Outlayer . prototype . layout = function ( ) { this . _resetLayout ( ) ; this . _manageStamps ( ) ; var isInstant = this . options . isLayoutInstant !== undefined ? this . options . isLayoutInstant : ! this . _isLayoutInited ; this . layoutItems ( this . items , isInstant ) ; this . _isLayoutInited = true } ; Outlayer . prototype . _init = Outlayer . prototype . layout ; Outlayer . prototype . _resetLayout = function ( ) { this . getSize ( ) } ; Outlayer . prototype . getSize = function ( ) { this . size = getSize ( this . element ) } ; Outlayer . prototype . _getMeasurement = function ( measurement , size ) {
var option = this . options [ measurement ] ; var elem ; if ( ! option ) { this [ measurement ] = 0 } else {
if ( typeof option === 'string' ) { elem = this . element . querySelector ( option ) } else if ( utils . isElement ( option ) ) { elem = option }
this [ measurement ] = elem ? getSize ( elem ) [ size ] : option
}
} ; Outlayer . prototype . layoutItems = function ( items , isInstant ) { items = this . _getItemsForLayout ( items ) ; this . _layoutItems ( items , isInstant ) ; this . _postLayout ( ) } ; Outlayer . prototype . _getItemsForLayout = function ( items ) {
var layoutItems = [ ] ; for ( var i = 0 , len = items . length ; i < len ; i ++ ) { var item = items [ i ] ; if ( ! item . isIgnored ) { layoutItems . push ( item ) } }
return layoutItems
} ; Outlayer . prototype . _layoutItems = function ( items , isInstant ) {
this . _emitCompleteOnItems ( 'layout' , items ) ; if ( ! items || ! items . length ) { return }
var queue = [ ] ; for ( var i = 0 , len = items . length ; i < len ; i ++ ) { var item = items [ i ] ; var position = this . _getItemLayoutPosition ( item ) ; position . item = item ; position . isInstant = isInstant || item . isLayoutInstant ; queue . push ( position ) }
this . _processLayoutQueue ( queue )
} ; Outlayer . prototype . _getItemLayoutPosition = function ( ) { return { x : 0 , y : 0 } } ; Outlayer . prototype . _processLayoutQueue = function ( queue ) { for ( var i = 0 , len = queue . length ; i < len ; i ++ ) { var obj = queue [ i ] ; this . _positionItem ( obj . item , obj . x , obj . y , obj . isInstant ) } } ; Outlayer . prototype . _positionItem = function ( item , x , y , isInstant ) { if ( isInstant ) { item . goTo ( x , y ) } else { item . moveTo ( x , y ) } } ; Outlayer . prototype . _postLayout = function ( ) { this . resizeContainer ( ) } ; Outlayer . prototype . resizeContainer = function ( ) {
if ( ! this . options . isResizingContainer ) { return }
var size = this . _getContainerSize ( ) ; if ( size ) { this . _setContainerMeasure ( size . width , true ) ; this . _setContainerMeasure ( size . height , false ) }
} ; Outlayer . prototype . _getContainerSize = noop ; Outlayer . prototype . _setContainerMeasure = function ( measure , isWidth ) {
if ( measure === undefined ) { return }
var elemSize = this . size ; if ( elemSize . isBorderBox ) { measure += isWidth ? elemSize . paddingLeft + elemSize . paddingRight + elemSize . borderLeftWidth + elemSize . borderRightWidth : elemSize . paddingBottom + elemSize . paddingTop + elemSize . borderTopWidth + elemSize . borderBottomWidth }
measure = Math . max ( measure , 0 ) ; this . element . style [ isWidth ? 'width' : 'height' ] = measure + 'px'
} ; Outlayer . prototype . _emitCompleteOnItems = function ( eventName , items ) {
var _this = this ; function onComplete ( ) { _this . dispatchEvent ( eventName + 'Complete' , null , [ items ] ) }
var count = items . length ; if ( ! items || ! count ) { onComplete ( ) ; return }
var doneCount = 0 ; function tick ( ) { doneCount ++ ; if ( doneCount === count ) { onComplete ( ) } }
for ( var i = 0 , len = items . length ; i < len ; i ++ ) { var item = items [ i ] ; item . once ( eventName , tick ) }
} ; Outlayer . prototype . dispatchEvent = function ( type , event , args ) { var emitArgs = event ? [ event ] . concat ( args ) : args ; this . emitEvent ( type , emitArgs ) ; if ( jQuery ) { this . $element = this . $element || jQuery ( this . element ) ; if ( event ) { var $event = jQuery . Event ( event ) ; $event . type = type ; this . $element . trigger ( $event , args ) } else { this . $element . trigger ( type , args ) } } } ; Outlayer . prototype . ignore = function ( elem ) { var item = this . getItem ( elem ) ; if ( item ) { item . isIgnored = true } } ; Outlayer . prototype . unignore = function ( elem ) { var item = this . getItem ( elem ) ; if ( item ) { delete item . isIgnored } } ; Outlayer . prototype . stamp = function ( elems ) {
elems = this . _find ( elems ) ; if ( ! elems ) { return }
this . stamps = this . stamps . concat ( elems ) ; for ( var i = 0 , len = elems . length ; i < len ; i ++ ) { var elem = elems [ i ] ; this . ignore ( elem ) }
} ; Outlayer . prototype . unstamp = function ( elems ) {
elems = this . _find ( elems ) ; if ( ! elems ) { return }
for ( var i = 0 , len = elems . length ; i < len ; i ++ ) { var elem = elems [ i ] ; utils . removeFrom ( this . stamps , elem ) ; this . unignore ( elem ) }
} ; Outlayer . prototype . _find = function ( elems ) {
if ( ! elems ) { return }
if ( typeof elems === 'string' ) { elems = this . element . querySelectorAll ( elems ) }
elems = utils . makeArray ( elems ) ; return elems
} ; Outlayer . prototype . _manageStamps = function ( ) {
if ( ! this . stamps || ! this . stamps . length ) { return }
this . _getBoundingRect ( ) ; for ( var i = 0 , len = this . stamps . length ; i < len ; i ++ ) { var stamp = this . stamps [ i ] ; this . _manageStamp ( stamp ) }
} ;
Outlayer . prototype . _getBoundingRect = function ( ) { var boundingRect = this . element . getBoundingClientRect ( ) ; var size = this . size ; this . _boundingRect = { left : boundingRect . left + size . paddingLeft + size . borderLeftWidth , top : boundingRect . top + size . paddingTop + size . borderTopWidth , right : boundingRect . right - ( size . paddingRight + size . borderRightWidth ) , bottom : boundingRect . bottom - ( size . paddingBottom + size . borderBottomWidth ) } } ; Outlayer . prototype . _manageStamp = noop ; Outlayer . prototype . _getElementOffset = function ( elem ) { var boundingRect = elem . getBoundingClientRect ( ) ; var thisRect = this . _boundingRect ; var size = getSize ( elem ) ; var offset = { left : boundingRect . left - thisRect . left - size . marginLeft , top : boundingRect . top - thisRect . top - size . marginTop , right : thisRect . right - boundingRect . right - size . marginRight , bottom : thisRect . bottom - boundingRect . bottom - size . marginBottom } ; return offset } ; Outlayer . prototype . handleEvent = function ( event ) { var method = 'on' + event . type ; if ( this [ method ] ) { this [ method ] ( event ) } } ;
Outlayer . prototype . bindResize = function ( ) {
if ( this . isResizeBound ) { return }
eventie . bind ( window , 'resize' , this ) ; this . isResizeBound = true
} ; Outlayer . prototype . unbindResize = function ( ) {
if ( this . isResizeBound ) { eventie . unbind ( window , 'resize' , this ) }
this . isResizeBound = false
} ; Outlayer . prototype . onresize = function ( ) {
if ( this . resizeTimeout ) { clearTimeout ( this . resizeTimeout ) }
var _this = this ; function delayed ( ) { _this . resize ( ) ; delete _this . resizeTimeout }
this . resizeTimeout = setTimeout ( delayed , 100 )
} ; Outlayer . prototype . resize = function ( ) {
if ( ! this . isResizeBound || ! this . needsResizeLayout ( ) ) { return }
this . layout ( )
} ; Outlayer . prototype . needsResizeLayout = function ( ) { var size = getSize ( this . element ) ; var hasSizes = this . size && size ; return hasSizes && size . innerWidth !== this . size . innerWidth } ; Outlayer . prototype . addItems = function ( elems ) {
var items = this . _itemize ( elems ) ; if ( items . length ) { this . items = this . items . concat ( items ) }
return items
} ; Outlayer . prototype . appended = function ( elems ) {
var items = this . addItems ( elems ) ; if ( ! items . length ) { return }
this . layoutItems ( items , true ) ; this . reveal ( items )
} ; Outlayer . prototype . prepended = function ( elems ) {
var items = this . _itemize ( elems ) ; if ( ! items . length ) { return }
var previousItems = this . items . slice ( 0 ) ; this . items = items . concat ( previousItems ) ; this . _resetLayout ( ) ; this . _manageStamps ( ) ; this . layoutItems ( items , true ) ; this . reveal ( items ) ; this . layoutItems ( previousItems )
} ; Outlayer . prototype . reveal = function ( items ) { this . _emitCompleteOnItems ( 'reveal' , items ) ; var len = items && items . length ; for ( var i = 0 ; len && i < len ; i ++ ) { var item = items [ i ] ; item . reveal ( ) } } ; Outlayer . prototype . hide = function ( items ) { this . _emitCompleteOnItems ( 'hide' , items ) ; var len = items && items . length ; for ( var i = 0 ; len && i < len ; i ++ ) { var item = items [ i ] ; item . hide ( ) } } ; Outlayer . prototype . revealItemElements = function ( elems ) { var items = this . getItems ( elems ) ; this . reveal ( items ) } ; Outlayer . prototype . hideItemElements = function ( elems ) { var items = this . getItems ( elems ) ; this . hide ( items ) } ; Outlayer . prototype . getItem = function ( elem ) { for ( var i = 0 , len = this . items . length ; i < len ; i ++ ) { var item = this . items [ i ] ; if ( item . element === elem ) { return item } } } ; Outlayer . prototype . getItems = function ( elems ) {
elems = utils . makeArray ( elems ) ; var items = [ ] ; for ( var i = 0 , len = elems . length ; i < len ; i ++ ) { var elem = elems [ i ] ; var item = this . getItem ( elem ) ; if ( item ) { items . push ( item ) } }
return items
} ; Outlayer . prototype . remove = function ( elems ) {
var removeItems = this . getItems ( elems ) ; this . _emitCompleteOnItems ( 'remove' , removeItems ) ; if ( ! removeItems || ! removeItems . length ) { return }
for ( var i = 0 , len = removeItems . length ; i < len ; i ++ ) { var item = removeItems [ i ] ; item . remove ( ) ; utils . removeFrom ( this . items , item ) }
} ; Outlayer . prototype . destroy = function ( ) {
var style = this . element . style ; style . height = '' ; style . position = '' ; style . width = '' ; for ( var i = 0 , len = this . items . length ; i < len ; i ++ ) { var item = this . items [ i ] ; item . destroy ( ) }
this . unbindResize ( ) ; var id = this . element . outlayerGUID ; delete instances [ id ] ; delete this . element . outlayerGUID ; if ( jQuery ) { jQuery . removeData ( this . element , this . constructor . namespace ) }
} ; Outlayer . data = function ( elem ) { elem = utils . getQueryElement ( elem ) ; var id = elem && elem . outlayerGUID ; return id && instances [ id ] } ;
Outlayer . create = function ( namespace , options ) {
function Layout ( ) {
Outlayer . apply ( this , arguments )
}
if ( Object . create ) {
Layout . prototype = Object . create ( Outlayer . prototype )
} else {
utils . extend ( Layout . prototype , Outlayer . prototype )
}
Layout . prototype . constructor = Layout ;
Layout . defaults = utils . extend ( { } , Outlayer . defaults ) ;
utils . extend ( Layout . defaults , options ) ; Layout . prototype . settings = { } ;
Layout . namespace = namespace ;
Layout . data = Outlayer . data ;
Layout . Item = function LayoutItem ( ) {
Item . apply ( this , arguments )
} ;
Layout . Item . prototype = new Item ( ) ;
utils . htmlInit ( Layout , namespace ) ;
if ( jQuery && jQuery . bridget ) {
jQuery . bridget ( namespace , Layout )
}
return Layout
} ;
Outlayer . Item = Item ;
return Outlayer
} ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'isotope/js/item' , [ 'outlayer/outlayer' ] , factory ) } else if ( typeof exports == 'object' ) { module . exports = factory ( require ( 'outlayer' ) ) } else { window . Isotope = window . Isotope || { } ; window . Isotope . Item = factory ( window . Outlayer ) } } ( window , function factory ( Outlayer ) {
'use strict' ; function Item ( ) { Outlayer . Item . apply ( this , arguments ) }
Item . prototype = new Outlayer . Item ( ) ; Item . prototype . _create = function ( ) { this . id = this . layout . itemGUID ++ ; Outlayer . Item . prototype . _create . call ( this ) ; this . sortData = { } } ; Item . prototype . updateSortData = function ( ) {
if ( this . isIgnored ) { return }
this . sortData . id = this . id ; this . sortData [ 'original-order' ] = this . id ; this . sortData . random = Math . random ( ) ; var getSortData = this . layout . options . getSortData ; var sorters = this . layout . _sorters ; for ( var key in getSortData ) { var sorter = sorters [ key ] ; this . sortData [ key ] = sorter ( this . element , this ) }
} ; var _destroy = Item . prototype . destroy ; Item . prototype . destroy = function ( ) { _destroy . apply ( this , arguments ) ; this . css ( { display : '' } ) } ; return Item
} ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'isotope/js/layout-mode' , [ 'get-size/get-size' , 'outlayer/outlayer' ] , factory ) } else if ( typeof exports == 'object' ) { module . exports = factory ( require ( 'get-size' ) , require ( 'outlayer' ) ) } else { window . Isotope = window . Isotope || { } ; window . Isotope . LayoutMode = factory ( window . getSize , window . Outlayer ) } } ( window , function factory ( getSize , Outlayer ) {
'use strict' ; function LayoutMode ( isotope ) { this . isotope = isotope ; if ( isotope ) { this . options = isotope . options [ this . namespace ] ; this . element = isotope . element ; this . items = isotope . filteredItems ; this . size = isotope . size } } ( function ( ) {
var facadeMethods = [ '_resetLayout' , '_getItemLayoutPosition' , '_manageStamp' , '_getContainerSize' , '_getElementOffset' , 'needsResizeLayout' ] ; for ( var i = 0 , len = facadeMethods . length ; i < len ; i ++ ) { var methodName = facadeMethods [ i ] ; LayoutMode . prototype [ methodName ] = getOutlayerMethod ( methodName ) }
function getOutlayerMethod ( methodName ) { return function ( ) { return Outlayer . prototype [ methodName ] . apply ( this . isotope , arguments ) } }
} ) ( ) ; LayoutMode . prototype . needsVerticalResizeLayout = function ( ) { var size = getSize ( this . isotope . element ) ; var hasSizes = this . isotope . size && size ; return hasSizes && size . innerHeight != this . isotope . size . innerHeight } ; LayoutMode . prototype . _getMeasurement = function ( ) { this . isotope . _getMeasurement . apply ( this , arguments ) } ; LayoutMode . prototype . getColumnWidth = function ( ) { this . getSegmentSize ( 'column' , 'Width' ) } ; LayoutMode . prototype . getRowHeight = function ( ) { this . getSegmentSize ( 'row' , 'Height' ) } ; LayoutMode . prototype . getSegmentSize = function ( segment , size ) {
var segmentName = segment + size ; var outerSize = 'outer' + size ; this . _getMeasurement ( segmentName , outerSize ) ; if ( this [ segmentName ] ) { return }
var firstItemSize = this . getFirstItemSize ( ) ; this [ segmentName ] = firstItemSize && firstItemSize [ outerSize ] || this . isotope . size [ 'inner' + size ]
} ; LayoutMode . prototype . getFirstItemSize = function ( ) { var firstItem = this . isotope . filteredItems [ 0 ] ; return firstItem && firstItem . element && getSize ( firstItem . element ) } ; LayoutMode . prototype . layout = function ( ) { this . isotope . layout . apply ( this . isotope , arguments ) } ; LayoutMode . prototype . getSize = function ( ) { this . isotope . getSize ( ) ; this . size = this . isotope . size } ; LayoutMode . modes = { } ; LayoutMode . create = function ( namespace , options ) {
function Mode ( ) { LayoutMode . apply ( this , arguments ) }
Mode . prototype = new LayoutMode ( ) ; if ( options ) { Mode . options = options }
Mode . prototype . namespace = namespace ; LayoutMode . modes [ namespace ] = Mode ; return Mode
} ; return LayoutMode
} ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define === 'function' && define . amd ) { define ( 'masonry/masonry' , [ 'outlayer/outlayer' , 'get-size/get-size' , 'fizzy-ui-utils/utils' ] , factory ) } else if ( typeof exports === 'object' ) { module . exports = factory ( require ( 'outlayer' ) , require ( 'get-size' ) , require ( 'fizzy-ui-utils' ) ) } else { window . Masonry = factory ( window . Outlayer , window . getSize , window . fizzyUIUtils ) } } ( window , function factory ( Outlayer , getSize , utils ) {
var Masonry = Outlayer . create ( 'masonry' ) ; Masonry . prototype . _resetLayout = function ( ) {
this . getSize ( ) ; this . _getMeasurement ( 'columnWidth' , 'outerWidth' ) ; this . _getMeasurement ( 'gutter' , 'outerWidth' ) ; this . measureColumns ( ) ; var i = this . cols ; this . colYs = [ ] ; while ( i -- ) { this . colYs . push ( 0 ) }
this . maxY = 0
} ; Masonry . prototype . measureColumns = function ( ) {
this . getContainerWidth ( ) ; if ( ! this . columnWidth ) { var firstItem = this . items [ 0 ] ; var firstItemElem = firstItem && firstItem . element ; this . columnWidth = firstItemElem && getSize ( firstItemElem ) . outerWidth || this . containerWidth }
var columnWidth = this . columnWidth += this . gutter ; var containerWidth = this . containerWidth + this . gutter ; var cols = containerWidth / columnWidth ; var excess = columnWidth - containerWidth % columnWidth ; var mathMethod = excess && excess < 1 ? 'round' : 'floor' ; cols = Math [ mathMethod ] ( cols ) ; this . cols = Math . max ( cols , 1 )
} ; Masonry . prototype . getContainerWidth = function ( ) { var container = this . options . isFitWidth ? this . element . parentNode : this . element ; var size = getSize ( container ) ; this . containerWidth = size && size . innerWidth } ; Masonry . prototype . _getItemLayoutPosition = function ( item ) {
item . getSize ( ) ; var remainder = item . size . outerWidth % this . columnWidth ; var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil' ; var colSpan = Math [ mathMethod ] ( item . size . outerWidth / this . columnWidth ) ; colSpan = Math . min ( colSpan , this . cols ) ; var colGroup = this . _getColGroup ( colSpan ) ; var minimumY = Math . min . apply ( Math , colGroup ) ; var shortColIndex = utils . indexOf ( colGroup , minimumY ) ; var position = { x : this . columnWidth * shortColIndex , y : minimumY } ; var setHeight = minimumY + item . size . outerHeight ; var setSpan = this . cols + 1 - colGroup . length ; for ( var i = 0 ; i < setSpan ; i ++ ) { this . colYs [ shortColIndex + i ] = setHeight }
return position
} ; Masonry . prototype . _getColGroup = function ( colSpan ) {
if ( colSpan < 2 ) { return this . colYs }
var colGroup = [ ] ; var groupCount = this . cols + 1 - colSpan ; for ( var i = 0 ; i < groupCount ; i ++ ) { var groupColYs = this . colYs . slice ( i , i + colSpan ) ; colGroup [ i ] = Math . max . apply ( Math , groupColYs ) }
return colGroup
} ; Masonry . prototype . _manageStamp = function ( stamp ) { var stampSize = getSize ( stamp ) ; var offset = this . _getElementOffset ( stamp ) ; var firstX = this . options . isOriginLeft ? offset . left : offset . right ; var lastX = firstX + stampSize . outerWidth ; var firstCol = Math . floor ( firstX / this . columnWidth ) ; firstCol = Math . max ( 0 , firstCol ) ; var lastCol = Math . floor ( lastX / this . columnWidth ) ; lastCol -= lastX % this . columnWidth ? 0 : 1 ; lastCol = Math . min ( this . cols - 1 , lastCol ) ; var stampMaxY = ( this . options . isOriginTop ? offset . top : offset . bottom ) + stampSize . outerHeight ; for ( var i = firstCol ; i <= lastCol ; i ++ ) { this . colYs [ i ] = Math . max ( stampMaxY , this . colYs [ i ] ) } } ; Masonry . prototype . _getContainerSize = function ( ) {
this . maxY = Math . max . apply ( Math , this . colYs ) ; var size = { height : this . maxY } ; if ( this . options . isFitWidth ) { size . width = this . _getContainerFitWidth ( ) }
return size
} ; Masonry . prototype . _getContainerFitWidth = function ( ) {
var unusedCols = 0 ; var i = this . cols ; while ( -- i ) {
if ( this . colYs [ i ] !== 0 ) { break }
unusedCols ++
}
return ( this . cols - unusedCols ) * this . columnWidth - this . gutter
} ; Masonry . prototype . needsResizeLayout = function ( ) { var previousWidth = this . containerWidth ; this . getContainerWidth ( ) ; return previousWidth !== this . containerWidth } ; return Masonry
} ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'isotope/js/layout-modes/masonry' , [ '../layout-mode' , 'masonry/masonry' ] , factory ) } else if ( typeof exports == 'object' ) { module . exports = factory ( require ( '../layout-mode' ) , require ( 'masonry-layout' ) ) } else { factory ( window . Isotope . LayoutMode , window . Masonry ) } } ( window , function factory ( LayoutMode , Masonry ) {
'use strict' ; function extend ( a , b ) {
for ( var prop in b ) { a [ prop ] = b [ prop ] }
return a
}
var MasonryMode = LayoutMode . create ( 'masonry' ) ; var _getElementOffset = MasonryMode . prototype . _getElementOffset ; var layout = MasonryMode . prototype . layout ; var _getMeasurement = MasonryMode . prototype . _getMeasurement ; extend ( MasonryMode . prototype , Masonry . prototype ) ; MasonryMode . prototype . _getElementOffset = _getElementOffset ; MasonryMode . prototype . layout = layout ; MasonryMode . prototype . _getMeasurement = _getMeasurement ; var measureColumns = MasonryMode . prototype . measureColumns ; MasonryMode . prototype . measureColumns = function ( ) { this . items = this . isotope . filteredItems ; measureColumns . call ( this ) } ; var _manageStamp = MasonryMode . prototype . _manageStamp ; MasonryMode . prototype . _manageStamp = function ( ) { this . options . isOriginLeft = this . isotope . options . isOriginLeft ; this . options . isOriginTop = this . isotope . options . isOriginTop ; _manageStamp . apply ( this , arguments ) } ; return MasonryMode
} ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'isotope/js/layout-modes/fit-rows' , [ '../layout-mode' ] , factory ) } else if ( typeof exports == 'object' ) { module . exports = factory ( require ( '../layout-mode' ) ) } else { factory ( window . Isotope . LayoutMode ) } } ( window , function factory ( LayoutMode ) {
'use strict' ; var FitRows = LayoutMode . create ( 'fitRows' ) ; FitRows . prototype . _resetLayout = function ( ) { this . x = 0 ; this . y = 0 ; this . maxY = 0 ; this . _getMeasurement ( 'gutter' , 'outerWidth' ) } ; FitRows . prototype . _getItemLayoutPosition = function ( item ) {
item . getSize ( ) ; var itemWidth = item . size . outerWidth + this . gutter ; var containerWidth = this . isotope . size . innerWidth + this . gutter ; if ( this . x !== 0 && itemWidth + this . x > containerWidth ) { this . x = 0 ; this . y = this . maxY }
var position = { x : this . x , y : this . y } ; this . maxY = Math . max ( this . maxY , this . y + item . size . outerHeight ) ; this . x += itemWidth ; return position
} ; FitRows . prototype . _getContainerSize = function ( ) { return { height : this . maxY } } ; return FitRows
} ) ) ;
( function ( window , factory ) {
'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( 'isotope/js/layout-modes/vertical' , [ '../layout-mode' ] , factory ) } else if ( typeof exports == 'object' ) { module . exports = factory ( require ( '../layout-mode' ) ) } else { factory ( window . Isotope . LayoutMode ) } } ( window , function factory ( LayoutMode ) { 'use strict' ; var Vertical = LayoutMode . create ( 'vertical' , { horizontalAlignment : 0 } ) ; Vertical . prototype . _resetLayout = function ( ) { this . y = 0 } ; Vertical . prototype . _getItemLayoutPosition = function ( item ) { item . getSize ( ) ; var x = ( this . isotope . size . innerWidth - item . size . outerWidth ) * this . options . horizontalAlignment ; var y = this . y ; this . y += item . size . outerHeight ; return { x : x , y : y } } ; Vertical . prototype . _getContainerSize = function ( ) { return { height : this . y } } ; return Vertical } ) ) ; ( function ( window , factory ) { 'use strict' ; if ( typeof define == 'function' && define . amd ) { define ( [ 'outlayer/outlayer' , 'get-size/get-size' , 'matches-selector/matches-selector' , 'fizzy-ui-utils/utils' , 'isotope/js/item' , 'isotope/js/layout-mode' , 'isotope/js/layout-modes/masonry' , 'isotope/js/layout-modes/fit-rows' , 'isotope/js/layout-modes/vertical' ] , function ( Outlayer , getSize , matchesSelector , utils , Item , LayoutMode ) { return factory ( window , Outlayer , getSize , matchesSelector , utils , Item , LayoutMode ) } ) } else if ( typeof exports == 'object' ) { module . exports = factory ( window , require ( 'outlayer' ) , require ( 'get-size' ) , require ( 'desandro-matches-selector' ) , require ( 'fizzy-ui-utils' ) , require ( './item' ) , require ( './layout-mode' ) , require ( './layout-modes/masonry' ) , require ( './layout-modes/fit-rows' ) , require ( './layout-modes/vertical' ) ) } else { window . Isotope = factory ( window , window . Outlayer , window . getSize , window . matchesSelector , window . fizzyUIUtils , window . Isotope . Item , window . Isotope . LayoutMode ) } } ( window , function factory ( window , Outlayer , getSize , matchesSelector , utils , Item , LayoutMode ) {
var jQuery = window . jQuery ; var trim = String . prototype . trim ? function ( str ) { return str . trim ( ) } : function ( str ) { return str . replace ( /^\s+|\s+$/g , '' ) } ; var docElem = document . documentElement ; var getText = docElem . textContent ? function ( elem ) { return elem . textContent } : function ( elem ) { return elem . innerText } ; var Isotope = Outlayer . create ( 'isotope' , { layoutMode : "masonry" , isJQueryFiltering : true , sortAscending : true } ) ; Isotope . Item = Item ; Isotope . LayoutMode = LayoutMode ; Isotope . prototype . _create = function ( ) { this . itemGUID = 0 ; this . _sorters = { } ; this . _getSorters ( ) ; Outlayer . prototype . _create . call ( this ) ; this . modes = { } ; this . filteredItems = this . items ; this . sortHistory = [ 'original-order' ] ; for ( var name in LayoutMode . modes ) { this . _initLayoutMode ( name ) } } ; Isotope . prototype . reloadItems = function ( ) { this . itemGUID = 0 ; Outlayer . prototype . reloadItems . call ( this ) } ; Isotope . prototype . _itemize = function ( ) {
var items = Outlayer . prototype . _itemize . apply ( this , arguments ) ; for ( var i = 0 , len = items . length ; i < len ; i ++ ) { var item = items [ i ] ; item . id = this . itemGUID ++ }
this . _updateItemsSortData ( items ) ; return items
} ; Isotope . prototype . _initLayoutMode = function ( name ) { var Mode = LayoutMode . modes [ name ] ; var initialOpts = this . options [ name ] || { } ; this . options [ name ] = Mode . options ? utils . extend ( Mode . options , initialOpts ) : initialOpts ; this . modes [ name ] = new Mode ( this ) } ; Isotope . prototype . layout = function ( ) {
if ( ! this . _isLayoutInited && this . options . isInitLayout ) { this . arrange ( ) ; return }
this . _layout ( )
} ; Isotope . prototype . _layout = function ( ) { var isInstant = this . _getIsInstant ( ) ; this . _resetLayout ( ) ; this . _manageStamps ( ) ; this . layoutItems ( this . filteredItems , isInstant ) ; this . _isLayoutInited = true } ; Isotope . prototype . arrange = function ( opts ) {
this . option ( opts ) ; this . _getIsInstant ( ) ; var filtered = this . _filter ( this . items ) ; this . filteredItems = filtered . matches ; var _this = this ; function hideReveal ( ) { _this . reveal ( filtered . needReveal ) ; _this . hide ( filtered . needHide ) }
this . _bindArrangeComplete ( ) ; if ( this . _isInstant ) { this . _noTransition ( hideReveal ) } else { hideReveal ( ) }
this . _sort ( ) ; this . _layout ( )
} ; Isotope . prototype . _init = Isotope . prototype . arrange ; Isotope . prototype . _getIsInstant = function ( ) { var isInstant = this . options . isLayoutInstant !== undefined ? this . options . isLayoutInstant : ! this . _isLayoutInited ; this . _isInstant = isInstant ; return isInstant } ; Isotope . prototype . _bindArrangeComplete = function ( ) {
var isLayoutComplete , isHideComplete , isRevealComplete ; var _this = this ; function arrangeParallelCallback ( ) { if ( isLayoutComplete && isHideComplete && isRevealComplete ) { _this . dispatchEvent ( 'arrangeComplete' , null , [ _this . filteredItems ] ) } }
this . once ( 'layoutComplete' , function ( ) { isLayoutComplete = true ; arrangeParallelCallback ( ) } ) ; this . once ( 'hideComplete' , function ( ) { isHideComplete = true ; arrangeParallelCallback ( ) } ) ; this . once ( 'revealComplete' , function ( ) { isRevealComplete = true ; arrangeParallelCallback ( ) } )
} ; Isotope . prototype . _filter = function ( items ) {
var filter = this . options . filter ; filter = filter || '*' ; var matches = [ ] ; var hiddenMatched = [ ] ; var visibleUnmatched = [ ] ; var test = this . _getFilterTest ( filter ) ; for ( var i = 0 , len = items . length ; i < len ; i ++ ) {
var item = items [ i ] ; if ( item . isIgnored ) { continue }
var isMatched = test ( item ) ; if ( isMatched ) { matches . push ( item ) }
if ( isMatched && item . isHidden ) { hiddenMatched . push ( item ) } else if ( ! isMatched && ! item . isHidden ) { visibleUnmatched . push ( item ) }
}
return { matches : matches , needReveal : hiddenMatched , needHide : visibleUnmatched }
} ; Isotope . prototype . _getFilterTest = function ( filter ) {
if ( jQuery && this . options . isJQueryFiltering ) { return function ( item ) { return jQuery ( item . element ) . is ( filter ) } }
if ( typeof filter == 'function' ) { return function ( item ) { return filter ( item . element ) } }
return function ( item ) { return matchesSelector ( item . element , filter ) }
} ; Isotope . prototype . updateSortData = function ( elems ) {
var items ; if ( elems ) { elems = utils . makeArray ( elems ) ; items = this . getItems ( elems ) } else { items = this . items }
this . _getSorters ( ) ; this . _updateItemsSortData ( items )
} ; Isotope . prototype . _getSorters = function ( ) { var getSortData = this . options . getSortData ; for ( var key in getSortData ) { var sorter = getSortData [ key ] ; this . _sorters [ key ] = mungeSorter ( sorter ) } } ; Isotope . prototype . _updateItemsSortData = function ( items ) { var len = items && items . length ; for ( var i = 0 ; len && i < len ; i ++ ) { var item = items [ i ] ; item . updateSortData ( ) } } ; var mungeSorter = ( function ( ) {
function mungeSorter ( sorter ) {
if ( typeof sorter != 'string' ) { return sorter }
var args = trim ( sorter ) . split ( ' ' ) ; var query = args [ 0 ] ; var attrMatch = query . match ( /^\[(.+)\]$/ ) ; var attr = attrMatch && attrMatch [ 1 ] ; var getValue = getValueGetter ( attr , query ) ; var parser = Isotope . sortDataParsers [ args [ 1 ] ] ; sorter = parser ? function ( elem ) { return elem && parser ( getValue ( elem ) ) } : function ( elem ) { return elem && getValue ( elem ) } ; return sorter
}
function getValueGetter ( attr , query ) {
var getValue ; if ( attr ) { getValue = function ( elem ) { return elem . getAttribute ( attr ) } } else { getValue = function ( elem ) { var child = elem . querySelector ( query ) ; return child && getText ( child ) } }
return getValue
}
return mungeSorter
} ) ( ) ; Isotope . sortDataParsers = { 'parseInt' : function ( val ) { return parseInt ( val , 10 ) } , 'parseFloat' : function ( val ) { return parseFloat ( val ) } } ; Isotope . prototype . _sort = function ( ) {
var sortByOpt = this . options . sortBy ; if ( ! sortByOpt ) { return }
var sortBys = [ ] . concat . apply ( sortByOpt , this . sortHistory ) ; var itemSorter = getItemSorter ( sortBys , this . options . sortAscending ) ; this . filteredItems . sort ( itemSorter ) ; if ( sortByOpt != this . sortHistory [ 0 ] ) { this . sortHistory . unshift ( sortByOpt ) }
} ; function getItemSorter ( sortBys , sortAsc ) {
return function sorter ( itemA , itemB ) {
for ( var i = 0 , len = sortBys . length ; i < len ; i ++ ) { var sortBy = sortBys [ i ] ; var a = itemA . sortData [ sortBy ] ; var b = itemB . sortData [ sortBy ] ; if ( a > b || a < b ) { var isAscending = sortAsc [ sortBy ] !== undefined ? sortAsc [ sortBy ] : sortAsc ; var direction = isAscending ? 1 : - 1 ; return ( a > b ? 1 : - 1 ) * direction } }
return 0
}
}
Isotope . prototype . _mode = function ( ) {
var layoutMode = this . options . layoutMode ; var mode = this . modes [ layoutMode ] ; if ( ! mode ) { throw new Error ( 'No layout mode: ' + layoutMode ) }
mode . options = this . options [ layoutMode ] ; return mode
} ;
Isotope . prototype . _resetLayout = function ( ) { Outlayer . prototype . _resetLayout . call ( this ) ; this . _mode ( ) . _resetLayout ( ) } ; Isotope . prototype . _getItemLayoutPosition = function ( item ) { return this . _mode ( ) . _getItemLayoutPosition ( item ) } ; Isotope . prototype . _manageStamp = function ( stamp ) { this . _mode ( ) . _manageStamp ( stamp ) } ; Isotope . prototype . _getContainerSize = function ( ) { return this . _mode ( ) . _getContainerSize ( ) } ;
Isotope . prototype . needsResizeLayout = function ( ) {
return this . _mode ( ) . needsResizeLayout ( )
} ;
Isotope . prototype . appended = function ( elems ) {
var items = this . addItems ( elems ) ; if ( ! items . length ) { return }
var filteredItems = this . _filterRevealAdded ( items ) ; this . filteredItems = this . filteredItems . concat ( filteredItems )
} ; Isotope . prototype . prepended = function ( elems ) {
var items = this . _itemize ( elems ) ; if ( ! items . length ) { return }
this . _resetLayout ( ) ; this . _manageStamps ( ) ; var filteredItems = this . _filterRevealAdded ( items ) ; this . layoutItems ( this . filteredItems ) ; this . filteredItems = filteredItems . concat ( this . filteredItems ) ; this . items = items . concat ( this . items )
} ; Isotope . prototype . _filterRevealAdded = function ( items ) { var filtered = this . _filter ( items ) ; this . hide ( filtered . needHide ) ; this . reveal ( filtered . matches ) ; this . layoutItems ( filtered . matches , true ) ; return filtered . matches } ; Isotope . prototype . insert = function ( elems ) {
var items = this . addItems ( elems ) ; if ( ! items . length ) { return }
var i , item ; var len = items . length ; for ( i = 0 ; i < len ; i ++ ) { item = items [ i ] ; this . element . appendChild ( item . element ) }
var filteredInsertItems = this . _filter ( items ) . matches ; for ( i = 0 ; i < len ; i ++ ) { items [ i ] . isLayoutInstant = true }
this . arrange ( ) ; for ( i = 0 ; i < len ; i ++ ) { delete items [ i ] . isLayoutInstant }
this . reveal ( filteredInsertItems )
} ; var _remove = Isotope . prototype . remove ; Isotope . prototype . remove = function ( elems ) {
elems = utils . makeArray ( elems ) ; var removeItems = this . getItems ( elems ) ; _remove . call ( this , elems ) ; var len = removeItems && removeItems . length ; if ( ! len ) { return }
for ( var i = 0 ; i < len ; i ++ ) { var item = removeItems [ i ] ; utils . removeFrom ( this . filteredItems , item ) }
} ; Isotope . prototype . shuffle = function ( ) {
for ( var i = 0 , len = this . items . length ; i < len ; i ++ ) { var item = this . items [ i ] ; item . sortData . random = Math . random ( ) }
this . options . sortBy = 'random' ; this . _sort ( ) ; this . _layout ( )
} ; Isotope . prototype . _noTransition = function ( fn ) { var transitionDuration = this . options . transitionDuration ; this . options . transitionDuration = 0 ; var returnValue = fn . call ( this ) ; this . options . transitionDuration = transitionDuration ; return returnValue } ; Isotope . prototype . getFilteredItemElements = function ( ) {
var elems = [ ] ; for ( var i = 0 , len = this . filteredItems . length ; i < len ; i ++ ) { elems . push ( this . filteredItems [ i ] . element ) }
return elems
} ; return Isotope
} ) ) ; ( function ( factory ) { if ( typeof define === "function" && define . amd ) { define ( [ 'jquery' ] , function ( $ ) { return factory ( $ ) } ) } else if ( typeof module === "object" && typeof module . exports === "object" ) { exports = factory ( require ( 'jquery' ) ) } else { factory ( jQuery ) } } ) ( function ( $ ) {
$ . easing . jswing = $ . easing . swing ; $ . extend ( $ . easing , {
def : 'easeOutQuad' , swing : function ( x , t , b , c , d ) { return $ . easing [ $ . easing . def ] ( x , t , b , c , d ) } , easeInQuad : function ( x , t , b , c , d ) { return c * ( t /= d ) * t + b } , easeOutQuad : function ( x , t , b , c , d ) { return - c * ( t /= d ) * ( t - 2 ) + b } , easeInOutQuad : function ( x , t , b , c , d ) { if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t + b ; return - c / 2 * ( ( -- t ) * ( t - 2 ) - 1 ) + b } , easeInCubic : function ( x , t , b , c , d ) { return c * ( t /= d ) * t * t + b } , easeOutCubic : function ( x , t , b , c , d ) { return c * ( ( t = t / d - 1 ) * t * t + 1 ) + b } , easeInOutCubic : function ( x , t , b , c , d ) { if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t + b ; return c / 2 * ( ( t -= 2 ) * t * t + 2 ) + b } , easeInQuart : function ( x , t , b , c , d ) { return c * ( t /= d ) * t * t * t + b } , easeOutQuart : function ( x , t , b , c , d ) { return - c * ( ( t = t / d - 1 ) * t * t * t - 1 ) + b } , easeInOutQuart : function ( x , t , b , c , d ) { if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t * t + b ; return - c / 2 * ( ( t -= 2 ) * t * t * t - 2 ) + b } , easeInQuint : function ( x , t , b , c , d ) { return c * ( t /= d ) * t * t * t * t + b } , easeOutQuint : function ( x , t , b , c , d ) { return c * ( ( t = t / d - 1 ) * t * t * t * t + 1 ) + b } , easeInOutQuint : function ( x , t , b , c , d ) { if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t * t * t + b ; return c / 2 * ( ( t -= 2 ) * t * t * t * t + 2 ) + b } , easeInSine : function ( x , t , b , c , d ) { return - c * Math . cos ( t / d * ( Math . PI / 2 ) ) + c + b } , easeOutSine : function ( x , t , b , c , d ) { return c * Math . sin ( t / d * ( Math . PI / 2 ) ) + b } , easeInOutSine : function ( x , t , b , c , d ) { return - c / 2 * ( Math . cos ( Math . PI * t / d ) - 1 ) + b } , easeInExpo : function ( x , t , b , c , d ) { return ( t == 0 ) ? b : c * Math . pow ( 2 , 10 * ( t / d - 1 ) ) + b } , easeOutExpo : function ( x , t , b , c , d ) { return ( t == d ) ? b + c : c * ( - Math . pow ( 2 , - 10 * t / d ) + 1 ) + b } , easeInOutExpo : function ( x , t , b , c , d ) { if ( t == 0 ) return b ; if ( t == d ) return b + c ; if ( ( t /= d / 2 ) < 1 ) return c / 2 * Math . pow ( 2 , 10 * ( t - 1 ) ) + b ; return c / 2 * ( - Math . pow ( 2 , - 10 * -- t ) + 2 ) + b } , easeInCirc : function ( x , t , b , c , d ) { return - c * ( Math . sqrt ( 1 - ( t /= d ) * t ) - 1 ) + b } , easeOutCirc : function ( x , t , b , c , d ) { return c * Math . sqrt ( 1 - ( t = t / d - 1 ) * t ) + b } , easeInOutCirc : function ( x , t , b , c , d ) { if ( ( t /= d / 2 ) < 1 ) return - c / 2 * ( Math . sqrt ( 1 - t * t ) - 1 ) + b ; return c / 2 * ( Math . sqrt ( 1 - ( t -= 2 ) * t ) + 1 ) + b } , easeInElastic : function ( x , t , b , c , d ) {
var s = 1.70158 ; var p = 0 ; var a = c ; if ( t == 0 ) return b ; if ( ( t /= d ) == 1 ) return b + c ; if ( ! p ) p = d * . 3 ; if ( a < Math . abs ( c ) ) { a = c ; var s = p / 4 }
else var s = p / ( 2 * Math . PI ) * Math . asin ( c / a ) ; return - ( a * Math . pow ( 2 , 10 * ( t -= 1 ) ) * Math . sin ( ( t * d - s ) * ( 2 * Math . PI ) / p ) ) + b
} , easeOutElastic : function ( x , t , b , c , d ) {
var s = 1.70158 ; var p = 0 ; var a = c ; if ( t == 0 ) return b ; if ( ( t /= d ) == 1 ) return b + c ; if ( ! p ) p = d * . 3 ; if ( a < Math . abs ( c ) ) { a = c ; var s = p / 4 }
else var s = p / ( 2 * Math . PI ) * Math . asin ( c / a ) ; return a * Math . pow ( 2 , - 10 * t ) * Math . sin ( ( t * d - s ) * ( 2 * Math . PI ) / p ) + c + b
} , easeInOutElastic : function ( x , t , b , c , d ) {
var s = 1.70158 ; var p = 0 ; var a = c ; if ( t == 0 ) return b ; if ( ( t /= d / 2 ) == 2 ) return b + c ; if ( ! p ) p = d * ( . 3 * 1.5 ) ; if ( a < Math . abs ( c ) ) { a = c ; var s = p / 4 }
else var s = p / ( 2 * Math . PI ) * Math . asin ( c / a ) ; if ( t < 1 ) return - . 5 * ( a * Math . pow ( 2 , 10 * ( t -= 1 ) ) * Math . sin ( ( t * d - s ) * ( 2 * Math . PI ) / p ) ) + b ; return a * Math . pow ( 2 , - 10 * ( t -= 1 ) ) * Math . sin ( ( t * d - s ) * ( 2 * Math . PI ) / p ) * . 5 + c + b
} , easeInBack : function ( x , t , b , c , d , s ) { if ( s == undefined ) s = 1.70158 ; return c * ( t /= d ) * t * ( ( s + 1 ) * t - s ) + b } , easeOutBack : function ( x , t , b , c , d , s ) { if ( s == undefined ) s = 1.70158 ; return c * ( ( t = t / d - 1 ) * t * ( ( s + 1 ) * t + s ) + 1 ) + b } , easeInOutBack : function ( x , t , b , c , d , s ) { if ( s == undefined ) s = 1.70158 ; if ( ( t /= d / 2 ) < 1 ) return c / 2 * ( t * t * ( ( ( s *= ( 1.525 ) ) + 1 ) * t - s ) ) + b ; return c / 2 * ( ( t -= 2 ) * t * ( ( ( s *= ( 1.525 ) ) + 1 ) * t + s ) + 2 ) + b } , easeInBounce : function ( x , t , b , c , d ) { return c - $ . easing . easeOutBounce ( x , d - t , 0 , c , d ) + b } , easeOutBounce : function ( x , t , b , c , d ) { if ( ( t /= d ) < ( 1 / 2.75 ) ) { return c * ( 7.5625 * t * t ) + b } else if ( t < ( 2 / 2.75 ) ) { return c * ( 7.5625 * ( t -= ( 1.5 / 2.75 ) ) * t + . 75 ) + b } else if ( t < ( 2.5 / 2.75 ) ) { return c * ( 7.5625 * ( t -= ( 2.25 / 2.75 ) ) * t + . 9375 ) + b } else { return c * ( 7.5625 * ( t -= ( 2.625 / 2.75 ) ) * t + . 984375 ) + b } } , easeInOutBounce : function ( x , t , b , c , d ) { if ( t < d / 2 ) return $ . easing . easeInBounce ( x , t * 2 , 0 , c , d ) * . 5 + b ; return $ . easing . easeOutBounce ( x , t * 2 - d , 0 , c , d ) * . 5 + c * . 5 + b }
} )
} ) ; ( function ( $ ) {
var types = [ 'DOMMouseScroll' , 'mousewheel' ] ; if ( $ . event . fixHooks ) { for ( var i = types . length ; i ; ) { $ . event . fixHooks [ types [ -- i ] ] = $ . event . mouseHooks } }
$ . event . special . mousewheel = { setup : function ( ) { if ( this . addEventListener ) { for ( var i = types . length ; i ; ) { this . addEventListener ( types [ -- i ] , handler , false ) } } else { this . onmousewheel = handler } } , teardown : function ( ) { if ( this . removeEventListener ) { for ( var i = types . length ; i ; ) { this . removeEventListener ( types [ -- i ] , handler , false ) } } else { this . onmousewheel = null } } } ; $ . fn . extend ( { mousewheel : function ( fn ) { return fn ? this . bind ( "mousewheel" , fn ) : this . trigger ( "mousewheel" ) } , unmousewheel : function ( fn ) { return this . unbind ( "mousewheel" , fn ) } } ) ; function handler ( event ) {
var orgEvent = event || window . event , args = [ ] . slice . call ( arguments , 1 ) , delta = 0 , returnValue = true , deltaX = 0 , deltaY = 0 ; event = $ . event . fix ( orgEvent ) ; event . type = "mousewheel" ; if ( orgEvent . wheelDelta ) { delta = orgEvent . wheelDelta / 120 }
if ( orgEvent . detail ) { delta = - orgEvent . detail / 3 }
deltaY = delta ; if ( orgEvent . axis !== undefined && orgEvent . axis === orgEvent . HORIZONTAL _AXIS ) { deltaY = 0 ; deltaX = - 1 * delta }
if ( orgEvent . wheelDeltaY !== undefined ) { deltaY = orgEvent . wheelDeltaY / 120 }
if ( orgEvent . wheelDeltaX !== undefined ) { deltaX = - 1 * orgEvent . wheelDeltaX / 120 }
args . unshift ( event , delta , deltaX , deltaY ) ; return ( $ . event . dispatch || $ . event . handle ) . apply ( this , args )
}
} ) ( jQuery ) ; ( function ( window , $ ) {
"use strict" ; $ . SliderPro = { modules : [ ] , addModule : function ( name , module ) { this . modules . push ( name ) ; $ . extend ( SliderPro . prototype , module ) } } ; var NS = $ . SliderPro . namespace = 'SliderPro' ; var SliderPro = function ( instance , options ) { this . instance = instance ; this . $slider = $ ( this . instance ) ; this . $slides = null ; this . $slidesMask = null ; this . $slidesContainer = null ; this . slides = [ ] ; this . slidesOrder = [ ] ; this . options = options ; this . settings = { } ; this . originalSettings = { } ; this . originalGotoSlide = null ; this . selectedSlideIndex = 0 ; this . previousSlideIndex = 0 ; this . middleSlidePosition = 0 ; this . supportedAnimation = null ; this . vendorPrefix = null ; this . transitionEvent = null ; this . positionProperty = null ; this . sizeProperty = null ; this . isIE = null ; this . slidesPosition = 0 ; this . slidesSize = 0 ; this . averageSlideSize = 0 ; this . slideWidth = 0 ; this . slideHeight = 0 ; this . previousSlideWidth = 0 ; this . previousSlideHeight = 0 ; this . previousWindowWidth = 0 ; this . previousWindowHeight = 0 ; this . allowResize = true ; this . uniqueId = new Date ( ) . valueOf ( ) ; this . breakpoints = [ ] ; this . currentBreakpoint = - 1 ; this . shuffledIndexes = [ ] ; this . _init ( ) } ; SliderPro . prototype = {
_init : function ( ) {
var that = this ; this . supportedAnimation = SliderProUtils . getSupportedAnimation ( ) ; this . vendorPrefix = SliderProUtils . getVendorPrefix ( ) ; this . transitionEvent = SliderProUtils . getTransitionEvent ( ) ; this . isIE = SliderProUtils . checkIE ( ) ; this . $slider . removeClass ( 'sp-no-js' ) ; if ( window . navigator . userAgent . match ( /(iPad|iPhone|iPod)/g ) ) { this . $slider . addClass ( 'ios' ) }
var rmsie = /(msie) ([\w.]+)/ , ieVersion = rmsie . exec ( window . navigator . userAgent . toLowerCase ( ) ) ; if ( this . isIE ) { this . $slider . addClass ( 'ie' ) }
if ( ieVersion !== null ) { this . $slider . addClass ( 'ie' + parseInt ( ieVersion [ 2 ] , 10 ) ) }
this . $slidesContainer = $ ( '<div class="sp-slides-container"></div>' ) . appendTo ( this . $slider ) ; this . $slidesMask = $ ( '<div class="sp-mask"></div>' ) . appendTo ( this . $slidesContainer ) ; this . $slides = this . $slider . find ( '.sp-slides' ) . appendTo ( this . $slidesMask ) ; this . $slider . find ( '.sp-slide' ) . appendTo ( this . $slides ) ; var modules = $ . SliderPro . modules ; if ( typeof modules !== 'undefined' ) { for ( var i = 0 ; i < modules . length ; i ++ ) { var defaults = modules [ i ] . substring ( 0 , 1 ) . toLowerCase ( ) + modules [ i ] . substring ( 1 ) + 'Defaults' ; if ( typeof this [ defaults ] !== 'undefined' ) { $ . extend ( this . defaults , this [ defaults ] ) } } }
this . settings = $ . extend ( { } , this . defaults , this . options ) ; if ( typeof modules !== 'undefined' ) { for ( var j = 0 ; j < modules . length ; j ++ ) { if ( typeof this [ 'init' + modules [ j ] ] !== 'undefined' ) { this [ 'init' + modules [ j ] ] ( ) } } }
this . originalSettings = $ . extend ( { } , this . settings ) ; this . originalGotoSlide = this . gotoSlide ; if ( this . settings . breakpoints !== null ) {
for ( var sizes in this . settings . breakpoints ) { this . breakpoints . push ( { size : parseInt ( sizes , 10 ) , properties : this . settings . breakpoints [ sizes ] } ) }
this . breakpoints = this . breakpoints . sort ( function ( a , b ) { return a . size >= b . size ? 1 : - 1 } )
}
this . selectedSlideIndex = this . settings . startSlide ; if ( this . settings . shuffle === true ) {
var slides = this . $slides . find ( '.sp-slide' ) , shuffledSlides = [ ] ; slides . each ( function ( index ) { that . shuffledIndexes . push ( index ) } ) ; for ( var k = this . shuffledIndexes . length - 1 ; k > 0 ; k -- ) { var l = Math . floor ( Math . random ( ) * ( k + 1 ) ) , temp = this . shuffledIndexes [ k ] ; this . shuffledIndexes [ k ] = this . shuffledIndexes [ l ] ; this . shuffledIndexes [ l ] = temp }
$ . each ( this . shuffledIndexes , function ( index , element ) { shuffledSlides . push ( slides [ element ] ) } ) ; this . $slides . empty ( ) . append ( shuffledSlides )
}
$ ( window ) . on ( 'resize.' + this . uniqueId + '.' + NS , function ( ) {
var newWindowWidth = $ ( window ) . width ( ) , newWindowHeight = $ ( window ) . height ( ) ; if ( that . allowResize === false || ( that . previousWindowWidth === newWindowWidth && that . previousWindowHeight === newWindowHeight ) ) { return }
that . previousWindowWidth = newWindowWidth ; that . previousWindowHeight = newWindowHeight ; that . allowResize = false ; setTimeout ( function ( ) { that . resize ( ) ; that . allowResize = true } , 200 )
} ) ; this . on ( 'update.' + NS , function ( ) { that . previousSlideWidth = 0 ; that . resize ( ) } ) ; this . update ( ) ; this . $slides . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . addClass ( 'sp-selected' ) ; this . trigger ( { type : 'init' } ) ; if ( $ . isFunction ( this . settings . init ) ) { this . settings . init . call ( this , { type : 'init' } ) }
} , update : function ( ) {
var that = this ; if ( this . settings . orientation === 'horizontal' ) { this . $slider . removeClass ( 'sp-vertical' ) . addClass ( 'sp-horizontal' ) ; this . $slider . css ( { 'height' : '' , 'max-height' : '' } ) ; this . $slides . find ( '.sp-slide' ) . css ( 'top' , '' ) } else if ( this . settings . orientation === 'vertical' ) { this . $slider . removeClass ( 'sp-horizontal' ) . addClass ( 'sp-vertical' ) ; this . $slides . find ( '.sp-slide' ) . css ( 'left' , '' ) }
if ( this . settings . rightToLeft === true ) { this . $slider . addClass ( 'sp-rtl' ) } else { this . $slider . removeClass ( 'sp-rtl' ) }
this . positionProperty = this . settings . orientation === 'horizontal' ? 'left' : 'top' ; this . sizeProperty = this . settings . orientation === 'horizontal' ? 'width' : 'height' ; this . gotoSlide = this . originalGotoSlide ; for ( var i = this . slides . length - 1 ; i >= 0 ; i -- ) { if ( this . $slider . find ( '.sp-slide[data-index="' + i + '"]' ) . length === 0 ) { var slide = this . slides [ i ] ; slide . off ( 'imagesLoaded.' + NS ) ; slide . destroy ( ) ; this . slides . splice ( i , 1 ) } }
this . slidesOrder . length = 0 ; this . $slider . find ( '.sp-slide' ) . each ( function ( index ) {
var $slide = $ ( this ) ; if ( typeof $slide . attr ( 'data-init' ) === 'undefined' ) { that . _createSlide ( index , $slide ) } else { that . slides [ index ] . setIndex ( index ) }
that . slidesOrder . push ( index )
} ) ; this . middleSlidePosition = parseInt ( ( that . slidesOrder . length - 1 ) / 2 , 10 ) ; if ( this . settings . loop === true ) { this . _updateSlidesOrder ( ) }
this . trigger ( { type : 'update' } ) ; if ( $ . isFunction ( this . settings . update ) ) { this . settings . update . call ( this , { type : 'update' } ) }
} , _createSlide : function ( index , element ) {
var that = this , slide = new SliderProSlide ( $ ( element ) , index , this . settings ) ; this . slides . splice ( index , 0 , slide ) ; slide . on ( 'imagesLoaded.' + NS , function ( event ) {
if ( that . $slides . hasClass ( 'sp-animated' ) === false ) { that . _resetSlidesPosition ( ) }
that . _calculateSlidesSize ( ) ; if ( that . settings . autoHeight === true && event . index === that . selectedSlideIndex ) { that . _resizeHeightTo ( slide . getSize ( ) . height ) }
} )
} , _updateSlidesOrder : function ( ) { var slicedItems , i , distance = $ . inArray ( this . selectedSlideIndex , this . slidesOrder ) - this . middleSlidePosition ; if ( distance < 0 ) { slicedItems = this . slidesOrder . splice ( distance , Math . abs ( distance ) ) ; for ( i = slicedItems . length - 1 ; i >= 0 ; i -- ) { this . slidesOrder . unshift ( slicedItems [ i ] ) } } else if ( distance > 0 ) { slicedItems = this . slidesOrder . splice ( 0 , distance ) ; for ( i = 0 ; i <= slicedItems . length - 1 ; i ++ ) { this . slidesOrder . push ( slicedItems [ i ] ) } } } , _updateSlidesPosition : function ( ) {
var selectedSlidePixelPosition = parseInt ( this . $slides . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . css ( this . positionProperty ) , 10 ) , slide , $slideElement , slideIndex , slideSize , previousPosition = selectedSlidePixelPosition ; if ( this . settings . rightToLeft === true && this . settings . orientation === 'horizontal' ) {
for ( slideIndex = this . middleSlidePosition ; slideIndex >= 0 ; slideIndex -- ) { slide = this . getSlideAt ( this . slidesOrder [ slideIndex ] ) ; $slideElement = slide . $slide ; $slideElement . css ( this . positionProperty , previousPosition ) ; previousPosition = parseInt ( $slideElement . css ( this . positionProperty ) , 10 ) + slide . getSize ( ) [ this . sizeProperty ] + this . settings . slideDistance }
previousPosition = selectedSlidePixelPosition ; for ( slideIndex = this . middleSlidePosition + 1 ; slideIndex < this . slidesOrder . length ; slideIndex ++ ) { slide = this . getSlideAt ( this . slidesOrder [ slideIndex ] ) ; $slideElement = slide . $slide ; $slideElement . css ( this . positionProperty , previousPosition - ( slide . getSize ( ) [ this . sizeProperty ] + this . settings . slideDistance ) ) ; previousPosition = parseInt ( $slideElement . css ( this . positionProperty ) , 10 ) }
} else {
for ( slideIndex = this . middleSlidePosition - 1 ; slideIndex >= 0 ; slideIndex -- ) { slide = this . getSlideAt ( this . slidesOrder [ slideIndex ] ) ; $slideElement = slide . $slide ; $slideElement . css ( this . positionProperty , previousPosition - ( slide . getSize ( ) [ this . sizeProperty ] + this . settings . slideDistance ) ) ; previousPosition = parseInt ( $slideElement . css ( this . positionProperty ) , 10 ) }
previousPosition = selectedSlidePixelPosition ; for ( slideIndex = this . middleSlidePosition ; slideIndex < this . slidesOrder . length ; slideIndex ++ ) { slide = this . getSlideAt ( this . slidesOrder [ slideIndex ] ) ; $slideElement = slide . $slide ; $slideElement . css ( this . positionProperty , previousPosition ) ; previousPosition = parseInt ( $slideElement . css ( this . positionProperty ) , 10 ) + slide . getSize ( ) [ this . sizeProperty ] + this . settings . slideDistance }
}
} , _resetSlidesPosition : function ( ) {
var previousPosition = 0 , slide , $slideElement , slideIndex ; if ( this . settings . rightToLeft === true && this . settings . orientation === 'horizontal' ) { for ( slideIndex = 0 ; slideIndex < this . slidesOrder . length ; slideIndex ++ ) { slide = this . getSlideAt ( this . slidesOrder [ slideIndex ] ) ; $slideElement = slide . $slide ; $slideElement . css ( this . positionProperty , previousPosition - ( slide . getSize ( ) [ this . sizeProperty ] + this . settings . slideDistance ) ) ; previousPosition = parseInt ( $slideElement . css ( this . positionProperty ) , 10 ) } } else { for ( slideIndex = 0 ; slideIndex < this . slidesOrder . length ; slideIndex ++ ) { slide = this . getSlideAt ( this . slidesOrder [ slideIndex ] ) ; $slideElement = slide . $slide ; $slideElement . css ( this . positionProperty , previousPosition ) ; previousPosition = parseInt ( $slideElement . css ( this . positionProperty ) , 10 ) + slide . getSize ( ) [ this . sizeProperty ] + this . settings . slideDistance } }
var selectedSlideOffset = this . settings . centerSelectedSlide === true ? Math . round ( ( parseInt ( this . $slidesMask . css ( this . sizeProperty ) , 10 ) - this . getSlideAt ( this . selectedSlideIndex ) . getSize ( ) [ this . sizeProperty ] ) / 2 ) : 0 , newSlidesPosition = - parseInt ( this . $slides . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . css ( this . positionProperty ) , 10 ) + selectedSlideOffset ; this . _moveTo ( newSlidesPosition , true )
} , _calculateSlidesSize : function ( ) { var firstSlide = this . $slides . find ( '.sp-slide' ) . eq ( this . slidesOrder [ 0 ] ) , firstSlidePosition = parseInt ( firstSlide . css ( this . positionProperty ) , 10 ) , lastSlide = this . $slides . find ( '.sp-slide' ) . eq ( this . slidesOrder [ this . slidesOrder . length - 1 ] ) , lastSlidePosition = parseInt ( lastSlide . css ( this . positionProperty ) , 10 ) + ( this . settings . rightToLeft === true && this . settings . orientation === 'horizontal' ? - 1 : 1 ) * parseInt ( lastSlide . css ( this . sizeProperty ) , 10 ) ; this . slidesSize = Math . abs ( lastSlidePosition - firstSlidePosition ) ; this . averageSlideSize = Math . round ( this . slidesSize / this . slides . length ) } , resize : function ( ) {
var that = this ; if ( this . settings . breakpoints !== null && this . breakpoints . length > 0 ) {
if ( $ ( window ) . width ( ) > this . breakpoints [ this . breakpoints . length - 1 ] . size && this . currentBreakpoint !== - 1 ) { this . currentBreakpoint = - 1 ; this . _setProperties ( this . originalSettings , false ) } else {
for ( var i = 0 , n = this . breakpoints . length ; i < n ; i ++ ) {
if ( $ ( window ) . width ( ) <= this . breakpoints [ i ] . size ) {
if ( this . currentBreakpoint !== this . breakpoints [ i ] . size ) {
var eventObject = { type : 'breakpointReach' , size : this . breakpoints [ i ] . size , settings : this . breakpoints [ i ] . properties } ; this . trigger ( eventObject ) ; if ( $ . isFunction ( this . settings . breakpointReach ) )
this . settings . breakpointReach . call ( this , eventObject ) ; this . currentBreakpoint = this . breakpoints [ i ] . size ; var settings = $ . extend ( { } , this . originalSettings , this . breakpoints [ i ] . properties ) ; this . _setProperties ( settings , false ) ; return
}
break
}
}
}
}
if ( this . settings . responsive === true ) { if ( ( this . settings . forceSize === 'fullWidth' || this . settings . forceSize === 'fullWindow' ) && ( this . settings . visibleSize === 'auto' || this . settings . visibleSize !== 'auto' && this . settings . orientation === 'vertical' ) ) { this . $slider . css ( 'margin' , 0 ) ; this . $slider . css ( { 'width' : $ ( window ) . width ( ) , 'max-width' : '' , 'marginLeft' : - this . $slider . offset ( ) . left } ) } else { this . $slider . css ( { 'width' : '100%' , 'max-width' : this . settings . width , 'marginLeft' : '' } ) } } else { this . $slider . css ( { 'width' : this . settings . width } ) }
if ( this . settings . aspectRatio === - 1 ) { this . settings . aspectRatio = this . settings . width / this . settings . height }
this . slideWidth = this . $slider . width ( ) ; if ( this . settings . forceSize === 'fullWindow' ) { this . slideHeight = $ ( window ) . height ( ) } else { this . slideHeight = isNaN ( this . settings . aspectRatio ) ? this . settings . height : this . slideWidth / this . settings . aspectRatio }
if ( this . previousSlideWidth !== this . slideWidth || this . previousSlideHeight !== this . slideHeight || this . settings . visibleSize !== 'auto' || this . $slider . outerWidth ( ) > this . $slider . parent ( ) . width ( ) || this . $slider . width ( ) !== this . $slidesMask . width ( ) ) { this . previousSlideWidth = this . slideWidth ; this . previousSlideHeight = this . slideHeight } else { return }
this . _resizeSlides ( ) ; this . $slidesMask . css ( { 'width' : this . slideWidth , 'height' : this . slideHeight } ) ; if ( this . settings . autoHeight === true ) { setTimeout ( function ( ) { that . _resizeHeight ( ) } , 1 ) } else { this . $slidesMask . css ( this . vendorPrefix + 'transition' , '' ) }
if ( this . settings . visibleSize !== 'auto' ) {
if ( this . settings . orientation === 'horizontal' ) {
if ( this . settings . forceSize === 'fullWidth' || this . settings . forceSize === 'fullWindow' ) { this . $slider . css ( 'margin' , 0 ) ; this . $slider . css ( { 'width' : $ ( window ) . width ( ) , 'max-width' : '' , 'marginLeft' : - this . $slider . offset ( ) . left } ) } else { this . $slider . css ( { 'width' : this . settings . visibleSize , 'max-width' : '100%' , 'marginLeft' : 0 } ) }
this . $slidesMask . css ( 'width' , this . $slider . width ( ) )
} else {
if ( this . settings . forceSize === 'fullWindow' ) { this . $slider . css ( { 'height' : $ ( window ) . height ( ) , 'max-height' : '' } ) } else { this . $slider . css ( { 'height' : this . settings . visibleSize , 'max-height' : '100%' } ) }
this . $slidesMask . css ( 'height' , this . $slider . height ( ) )
}
}
this . _resetSlidesPosition ( ) ; this . _calculateSlidesSize ( ) ; this . trigger ( { type : 'sliderResize' } ) ; if ( $ . isFunction ( this . settings . sliderResize ) ) { this . settings . sliderResize . call ( this , { type : 'sliderResize' } ) }
} , _resizeSlides : function ( ) {
var slideWidth = this . slideWidth , slideHeight = this . slideHeight ; if ( this . settings . autoSlideSize === true ) { if ( this . settings . orientation === 'horizontal' ) { slideWidth = 'auto' } else if ( this . settings . orientation === 'vertical' ) { slideHeight = 'auto' } } else if ( this . settings . autoHeight === true ) { slideHeight = 'auto' }
$ . each ( this . slides , function ( index , element ) { element . setSize ( slideWidth , slideHeight ) } )
} , _resizeHeight : function ( ) { var that = this , selectedSlide = this . getSlideAt ( this . selectedSlideIndex ) ; this . _resizeHeightTo ( selectedSlide . getSize ( ) . height ) } , gotoSlide : function ( index ) {
if ( index === this . selectedSlideIndex || typeof this . slides [ index ] === 'undefined' ) { return }
var that = this ; this . previousSlideIndex = this . selectedSlideIndex ; this . selectedSlideIndex = index ; this . $slides . find ( '.sp-selected' ) . removeClass ( 'sp-selected' ) ; this . $slides . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . addClass ( 'sp-selected' ) ; if ( this . settings . loop === true ) { this . _updateSlidesOrder ( ) ; this . _updateSlidesPosition ( ) }
if ( this . settings . autoHeight === true ) { this . _resizeHeight ( ) }
var selectedSlideOffset = this . settings . centerSelectedSlide === true ? Math . round ( ( parseInt ( this . $slidesMask . css ( this . sizeProperty ) , 10 ) - this . getSlideAt ( this . selectedSlideIndex ) . getSize ( ) [ this . sizeProperty ] ) / 2 ) : 0 , newSlidesPosition = - parseInt ( this . $slides . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . css ( this . positionProperty ) , 10 ) + selectedSlideOffset ; this . _moveTo ( newSlidesPosition , false , function ( ) { that . _resetSlidesPosition ( ) ; that . trigger ( { type : 'gotoSlideComplete' , index : index , previousIndex : that . previousSlideIndex } ) ; if ( $ . isFunction ( that . settings . gotoSlideComplete ) ) { that . settings . gotoSlideComplete . call ( that , { type : 'gotoSlideComplete' , index : index , previousIndex : that . previousSlideIndex } ) } } ) ; this . trigger ( { type : 'gotoSlide' , index : index , previousIndex : this . previousSlideIndex } ) ; if ( $ . isFunction ( this . settings . gotoSlide ) ) { this . settings . gotoSlide . call ( this , { type : 'gotoSlide' , index : index , previousIndex : this . previousSlideIndex } ) }
} , nextSlide : function ( ) { var index = ( this . selectedSlideIndex >= this . getTotalSlides ( ) - 1 ) ? 0 : ( this . selectedSlideIndex + 1 ) ; this . gotoSlide ( index ) } , previousSlide : function ( ) { var index = this . selectedSlideIndex <= 0 ? ( this . getTotalSlides ( ) - 1 ) : ( this . selectedSlideIndex - 1 ) ; this . gotoSlide ( index ) } , _moveTo : function ( position , instant , callback ) {
var that = this , css = { } ; if ( position === this . slidesPosition ) { return }
this . slidesPosition = position ; if ( ( this . supportedAnimation === 'css-3d' || this . supportedAnimation === 'css-2d' ) && this . isIE === false ) {
var transition , left = this . settings . orientation === 'horizontal' ? position : 0 , top = this . settings . orientation === 'horizontal' ? 0 : position ; if ( this . supportedAnimation === 'css-3d' ) { css [ this . vendorPrefix + 'transform' ] = 'translate3d(' + left + 'px, ' + top + 'px, 0)' } else { css [ this . vendorPrefix + 'transform' ] = 'translate(' + left + 'px, ' + top + 'px)' }
if ( typeof instant !== 'undefined' && instant === true ) { transition = '' } else {
this . $slides . addClass ( 'sp-animated' ) ; transition = this . vendorPrefix + 'transform ' + this . settings . slideAnimationDuration / 1000 + 's' ; this . $slides . on ( this . transitionEvent , function ( event ) {
if ( event . target !== event . currentTarget ) { return }
that . $slides . off ( that . transitionEvent ) ; that . $slides . removeClass ( 'sp-animated' ) ; if ( typeof callback === 'function' ) { callback ( ) }
} )
}
css [ this . vendorPrefix + 'transition' ] = transition ; this . $slides . css ( css )
} else { css [ 'margin-' + this . positionProperty ] = position ; if ( typeof instant !== 'undefined' && instant === true ) { this . $slides . css ( css ) } else { this . $slides . addClass ( 'sp-animated' ) ; this . $slides . animate ( css , this . settings . slideAnimationDuration , function ( ) { that . $slides . removeClass ( 'sp-animated' ) ; if ( typeof callback === 'function' ) { callback ( ) } } ) } }
} , _stopMovement : function ( ) {
var css = { } ; if ( ( this . supportedAnimation === 'css-3d' || this . supportedAnimation === 'css-2d' ) && this . isIE === false ) {
var matrixString = this . $slides . css ( this . vendorPrefix + 'transform' ) , matrixType = matrixString . indexOf ( 'matrix3d' ) !== - 1 ? 'matrix3d' : 'matrix' , matrixArray = matrixString . replace ( matrixType , '' ) . match ( /-?[0-9\.]+/g ) , left = matrixType === 'matrix3d' ? parseInt ( matrixArray [ 12 ] , 10 ) : parseInt ( matrixArray [ 4 ] , 10 ) , top = matrixType === 'matrix3d' ? parseInt ( matrixArray [ 13 ] , 10 ) : parseInt ( matrixArray [ 5 ] , 10 ) ; if ( this . supportedAnimation === 'css-3d' ) { css [ this . vendorPrefix + 'transform' ] = 'translate3d(' + left + 'px, ' + top + 'px, 0)' } else { css [ this . vendorPrefix + 'transform' ] = 'translate(' + left + 'px, ' + top + 'px)' }
css [ this . vendorPrefix + 'transition' ] = '' ; this . $slides . css ( css ) ; this . $slides . off ( this . transitionEvent ) ; this . slidesPosition = this . settings . orientation === 'horizontal' ? left : top
} else { this . $slides . stop ( ) ; this . slidesPosition = parseInt ( this . $slides . css ( 'margin-' + this . positionProperty ) , 10 ) }
this . $slides . removeClass ( 'sp-animated' )
} , _resizeHeightTo : function ( height ) {
var that = this , css = { 'height' : height } ; if ( this . supportedAnimation === 'css-3d' || this . supportedAnimation === 'css-2d' ) {
css [ this . vendorPrefix + 'transition' ] = 'height ' + this . settings . heightAnimationDuration / 1000 + 's' ; this . $slidesMask . off ( this . transitionEvent ) ; this . $slidesMask . on ( this . transitionEvent , function ( event ) {
if ( event . target !== event . currentTarget ) { return }
that . $slidesMask . off ( that . transitionEvent ) ; that . trigger ( { type : 'resizeHeightComplete' } ) ; if ( $ . isFunction ( that . settings . resizeHeightComplete ) ) { that . settings . resizeHeightComplete . call ( that , { type : 'resizeHeightComplete' } ) }
} ) ; this . $slidesMask . css ( css )
} else { this . $slidesMask . stop ( ) . animate ( css , this . settings . heightAnimationDuration , function ( event ) { that . trigger ( { type : 'resizeHeightComplete' } ) ; if ( $ . isFunction ( that . settings . resizeHeightComplete ) ) { that . settings . resizeHeightComplete . call ( that , { type : 'resizeHeightComplete' } ) } } ) }
} , destroy : function ( ) {
this . $slider . removeData ( 'sliderPro' ) ; this . $slider . removeAttr ( 'style' ) ; this . $slides . removeAttr ( 'style' ) ; this . off ( 'update.' + NS ) ; $ ( window ) . off ( 'resize.' + this . uniqueId + '.' + NS ) ; var modules = $ . SliderPro . modules ; if ( typeof modules !== 'undefined' ) { for ( var i = 0 ; i < modules . length ; i ++ ) { if ( typeof this [ 'destroy' + modules [ i ] ] !== 'undefined' ) { this [ 'destroy' + modules [ i ] ] ( ) } } }
$ . each ( this . slides , function ( index , element ) { element . destroy ( ) } ) ; this . slides . length = 0 ; this . $slides . prependTo ( this . $slider ) ; this . $slidesContainer . remove ( )
} , _setProperties : function ( properties , store ) {
for ( var prop in properties ) { this . settings [ prop ] = properties [ prop ] ; if ( store !== false ) { this . originalSettings [ prop ] = properties [ prop ] } }
this . update ( )
} , on : function ( type , callback ) { return this . $slider . on ( type , callback ) } , off : function ( type ) { return this . $slider . off ( type ) } , trigger : function ( data ) { return this . $slider . triggerHandler ( data ) } , getSlideAt : function ( index ) { return this . slides [ index ] } , getSelectedSlide : function ( ) { return this . selectedSlideIndex } , getTotalSlides : function ( ) { return this . slides . length } , defaults : { width : 500 , height : 300 , responsive : true , aspectRatio : - 1 , imageScaleMode : 'cover' , centerImage : true , allowScaleUp : true , autoHeight : false , autoSlideSize : false , startSlide : 0 , shuffle : false , orientation : 'horizontal' , forceSize : 'none' , loop : true , slideDistance : 10 , slideAnimationDuration : 700 , heightAnimationDuration : 700 , visibleSize : 'auto' , centerSelectedSlide : true , rightToLeft : false , breakpoints : null , init : function ( ) { } , update : function ( ) { } , sliderResize : function ( ) { } , gotoSlide : function ( ) { } , gotoSlideComplete : function ( ) { } , resizeHeightComplete : function ( ) { } , breakpointReach : function ( ) { } }
} ; var SliderProSlide = function ( slide , index , settings ) { this . $slide = slide ; this . $mainImage = null ; this . $imageContainer = null ; this . hasMainImage = false ; this . isMainImageLoaded = false ; this . isMainImageLoading = false ; this . hasImages = false ; this . areImagesLoaded = false ; this . areImagesLoading = false ; this . width = 0 ; this . height = 0 ; this . settings = settings ; this . setIndex ( index ) ; this . _init ( ) } ; SliderProSlide . prototype = {
_init : function ( ) {
var that = this ; this . $slide . attr ( 'data-init' , true ) ; this . $mainImage = this . $slide . find ( '.sp-image' ) . length !== 0 ? this . $slide . find ( '.sp-image' ) : null ; if ( this . $mainImage !== null ) { this . hasMainImage = true ; this . $imageContainer = $ ( '<div class="sp-image-container"></div>' ) . prependTo ( this . $slide ) ; if ( this . $mainImage . parent ( 'a' ) . length !== 0 ) { this . $mainImage . parent ( 'a' ) . appendTo ( this . $imageContainer ) } else { this . $mainImage . appendTo ( this . $imageContainer ) } }
this . hasImages = this . $slide . find ( 'img' ) . length !== 0 ? true : false
} , setSize : function ( width , height ) { var that = this ; this . width = width ; this . height = height ; this . $slide . css ( { 'width' : this . width , 'height' : this . height } ) ; if ( this . hasMainImage === true ) { this . $imageContainer . css ( { 'width' : this . settings . width , 'height' : this . settings . height } ) ; if ( typeof this . $mainImage . attr ( 'data-src' ) === 'undefined' ) { this . resizeMainImage ( ) } } } , getSize : function ( ) {
var that = this , size ; if ( this . hasImages === true && this . areImagesLoaded === false && this . areImagesLoading === false ) { this . areImagesLoading = true ; var status = SliderProUtils . checkImagesStatus ( this . $slide ) ; if ( status !== 'complete' ) { SliderProUtils . checkImagesComplete ( this . $slide , function ( ) { that . areImagesLoaded = true ; that . areImagesLoading = false ; that . trigger ( { type : 'imagesLoaded.' + NS , index : that . index } ) } ) ; return { 'width' : this . settings . width , 'height' : this . settings . height } } }
size = this . calculateSize ( ) ; return { 'width' : size . width , 'height' : size . height }
} , calculateSize : function ( ) {
var width = this . $slide . width ( ) , height = this . $slide . height ( ) ; this . $slide . children ( ) . each ( function ( index , element ) {
var child = $ ( element ) ; if ( child . is ( ':hidden' ) === true ) { return }
var rect = element . getBoundingClientRect ( ) , bottom = child . position ( ) . top + ( rect . bottom - rect . top ) , right = child . position ( ) . left + ( rect . right - rect . left ) ; if ( bottom > height ) { height = bottom }
if ( right > width ) { width = right }
} ) ; return { width : width , height : height }
} , resizeMainImage : function ( isNewImage ) {
var that = this ; if ( isNewImage === true ) { this . isMainImageLoaded = false ; this . isMainImageLoading = false }
if ( this . isMainImageLoaded === false && this . isMainImageLoading === false ) { this . isMainImageLoading = true ; SliderProUtils . checkImagesComplete ( this . $mainImage , function ( ) { that . isMainImageLoaded = true ; that . isMainImageLoading = false ; that . resizeMainImage ( ) ; that . trigger ( { type : 'imagesLoaded.' + NS , index : that . index } ) } ) ; return }
this . $imageContainer . css ( { 'width' : this . width , 'height' : this . height } ) ; if ( this . settings . allowScaleUp === false ) { this . $mainImage . css ( { 'width' : '' , 'height' : '' , 'maxWidth' : '' , 'maxHeight' : '' } ) ; this . $mainImage . css ( { 'maxWidth' : this . $mainImage . width ( ) , 'maxHeight' : this . $mainImage . height ( ) } ) }
if ( this . settings . autoSlideSize === true ) { if ( this . settings . orientation === 'horizontal' ) { this . $mainImage . css ( { width : 'auto' , height : '100%' } ) } else if ( this . settings . orientation === 'vertical' ) { this . $mainImage . css ( { width : '100%' , height : 'auto' } ) } } else if ( this . settings . autoHeight === true ) { this . $mainImage . css ( { width : '100%' , height : 'auto' } ) } else {
if ( this . settings . imageScaleMode === 'cover' ) { if ( this . $mainImage . width ( ) / this . $mainImage . height ( ) <= this . width / this . height ) { this . $mainImage . css ( { width : '100%' , height : 'auto' } ) } else { this . $mainImage . css ( { width : 'auto' , height : '100%' } ) } } else if ( this . settings . imageScaleMode === 'contain' ) { if ( this . $mainImage . width ( ) / this . $mainImage . height ( ) >= this . width / this . height ) { this . $mainImage . css ( { width : '100%' , height : 'auto' } ) } else { this . $mainImage . css ( { width : 'auto' , height : '100%' } ) } } else if ( this . settings . imageScaleMode === 'exact' ) { this . $mainImage . css ( { width : '100%' , height : '100%' } ) }
if ( this . settings . centerImage === true ) { this . $mainImage . css ( { 'marginLeft' : ( this . $imageContainer . width ( ) - this . $mainImage . width ( ) ) * 0.5 , 'marginTop' : ( this . $imageContainer . height ( ) - this . $mainImage . height ( ) ) * 0.5 } ) }
}
} , destroy : function ( ) { this . $slide . removeAttr ( 'style' ) ; this . $slide . removeAttr ( 'data-init' ) ; this . $slide . removeAttr ( 'data-index' ) ; this . $slide . removeAttr ( 'data-loaded' ) ; if ( this . hasMainImage === true ) { this . $slide . find ( '.sp-image' ) . removeAttr ( 'style' ) . appendTo ( this . $slide ) ; this . $slide . find ( '.sp-image-container' ) . remove ( ) } } , getIndex : function ( ) { return this . index } , setIndex : function ( index ) { this . index = index ; this . $slide . attr ( 'data-index' , this . index ) } , on : function ( type , callback ) { return this . $slide . on ( type , callback ) } , off : function ( type ) { return this . $slide . off ( type ) } , trigger : function ( data ) { return this . $slide . triggerHandler ( data ) }
} ; window . SliderPro = SliderPro ; window . SliderProSlide = SliderProSlide ; $ . fn . sliderPro = function ( options ) { var args = Array . prototype . slice . call ( arguments , 1 ) ; return this . each ( function ( ) { if ( typeof $ ( this ) . data ( 'sliderPro' ) === 'undefined' ) { var newInstance = new SliderPro ( this , options ) ; $ ( this ) . data ( 'sliderPro' , newInstance ) } else if ( typeof options !== 'undefined' ) { var currentInstance = $ ( this ) . data ( 'sliderPro' ) ; if ( typeof currentInstance [ options ] === 'function' ) { currentInstance [ options ] . apply ( currentInstance , args ) } else if ( typeof currentInstance . settings [ options ] !== 'undefined' ) { var obj = { } ; obj [ options ] = args [ 0 ] ; currentInstance . _setProperties ( obj ) } else if ( typeof options === 'object' ) { currentInstance . _setProperties ( options ) } else { $ . error ( options + ' does not exist in sliderPro.' ) } } } ) } ; var SliderProUtils = {
supportedAnimation : null , vendorPrefix : null , transitionEvent : null , isIE : null , getSupportedAnimation : function ( ) {
if ( this . supportedAnimation !== null ) { return this . supportedAnimation }
var element = document . body || document . documentElement , elementStyle = element . style , isCSSTransitions = typeof elementStyle . transition !== 'undefined' || typeof elementStyle . WebkitTransition !== 'undefined' || typeof elementStyle . MozTransition !== 'undefined' || typeof elementStyle . OTransition !== 'undefined' ; if ( isCSSTransitions === true ) {
var div = document . createElement ( 'div' ) ; if ( typeof div . style . WebkitPerspective !== 'undefined' || typeof div . style . perspective !== 'undefined' ) { this . supportedAnimation = 'css-3d' }
if ( this . supportedAnimation === 'css-3d' && typeof div . styleWebkitPerspective !== 'undefined' ) {
var style = document . createElement ( 'style' ) ; style . textContent = '@media (transform-3d),(-webkit-transform-3d){#test-3d{left:9px;position:absolute;height:5px;margin:0;padding:0;border:0;}}' ; document . getElementsByTagName ( 'head' ) [ 0 ] . appendChild ( style ) ; div . id = 'test-3d' ; document . body . appendChild ( div ) ; if ( ! ( div . offsetLeft === 9 && div . offsetHeight === 5 ) ) { this . supportedAnimation = null }
style . parentNode . removeChild ( style ) ; div . parentNode . removeChild ( div )
}
if ( this . supportedAnimation === null && ( typeof div . style [ '-webkit-transform' ] !== 'undefined' || typeof div . style . transform !== 'undefined' ) ) { this . supportedAnimation = 'css-2d' }
} else { this . supportedAnimation = 'javascript' }
return this . supportedAnimation
} , getVendorPrefix : function ( ) {
if ( this . vendorPrefix !== null ) { return this . vendorPrefix }
var div = document . createElement ( 'div' ) , prefixes = [ 'Webkit' , 'Moz' , 'ms' , 'O' ] ; if ( 'transform' in div . style ) { this . vendorPrefix = '' ; return this . vendorPrefix }
for ( var i = 0 ; i < prefixes . length ; i ++ ) { if ( ( prefixes [ i ] + 'Transform' ) in div . style ) { this . vendorPrefix = '-' + prefixes [ i ] . toLowerCase ( ) + '-' ; break } }
return this . vendorPrefix
} , getTransitionEvent : function ( ) {
if ( this . transitionEvent !== null ) { return this . transitionEvent }
var div = document . createElement ( 'div' ) , transitions = { 'transition' : 'transitionend' , 'WebkitTransition' : 'webkitTransitionEnd' , 'MozTransition' : 'transitionend' , 'OTransition' : 'oTransitionEnd' } ; for ( var transition in transitions ) { if ( transition in div . style ) { this . transitionEvent = transitions [ transition ] ; break } }
return this . transitionEvent
} , checkImagesComplete : function ( target , callback ) {
var that = this , status = this . checkImagesStatus ( target ) ; if ( status === 'loading' ) { var checkImages = setInterval ( function ( ) { status = that . checkImagesStatus ( target ) ; if ( status === 'complete' ) { clearInterval ( checkImages ) ; if ( typeof callback === 'function' ) { callback ( ) } } } , 100 ) } else if ( typeof callback === 'function' ) { callback ( ) }
return status
} , checkImagesStatus : function ( target ) {
var status = 'complete' ; if ( target . is ( 'img' ) && target [ 0 ] . complete === false ) { status = 'loading' } else { target . find ( 'img' ) . each ( function ( index ) { var image = $ ( this ) [ 0 ] ; if ( image . complete === false ) { status = 'loading' } } ) }
return status
} , checkIE : function ( ) {
if ( this . isIE !== null ) { return this . isIE }
var userAgent = window . navigator . userAgent , msie = userAgent . indexOf ( 'MSIE' ) ; if ( userAgent . indexOf ( 'MSIE' ) !== - 1 || userAgent . match ( /Trident.*rv\:11\./ ) ) { this . isIE = true } else { this . isIE = false }
return this . isIE
}
} ; window . SliderProUtils = SliderProUtils
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Thumbnails.' + $ . SliderPro . namespace ; var Thumbnails = {
$thumbnails : null , $thumbnailsContainer : null , thumbnails : null , selectedThumbnailIndex : 0 , thumbnailsSize : 0 , thumbnailsContainerSize : 0 , thumbnailsPosition : 0 , thumbnailsOrientation : null , thumbnailsPositionProperty : null , isThumbnailScroller : false , initThumbnails : function ( ) { var that = this ; this . thumbnails = [ ] ; this . on ( 'update.' + NS , $ . proxy ( this . _thumbnailsOnUpdate , this ) ) ; this . on ( 'sliderResize.' + NS , $ . proxy ( this . _thumbnailsOnResize , this ) ) ; this . on ( 'gotoSlide.' + NS , function ( event ) { that . _gotoThumbnail ( event . index ) } ) } , _thumbnailsOnUpdate : function ( ) {
var that = this ; if ( this . $slider . find ( '.sp-thumbnail' ) . length === 0 && this . thumbnails . length === 0 ) { this . isThumbnailScroller = false ; return }
this . isThumbnailScroller = true ; if ( this . $thumbnailsContainer === null ) { this . $thumbnailsContainer = $ ( '<div class="sp-thumbnails-container"></div>' ) . insertAfter ( this . $slidesContainer ) }
if ( this . $thumbnails === null ) {
if ( this . $slider . find ( '.sp-thumbnails' ) . length !== 0 ) {
this . $thumbnails = this . $slider . find ( '.sp-thumbnails' ) . appendTo ( this . $thumbnailsContainer ) ; if ( this . settings . shuffle === true ) {
var thumbnails = this . $thumbnails . find ( '.sp-thumbnail' ) , shuffledThumbnails = [ ] ; $ . each ( this . shuffledIndexes , function ( index , element ) {
var $thumbnail = $ ( thumbnails [ element ] ) ; if ( $thumbnail . parent ( 'a' ) . length !== 0 ) { $thumbnail = $thumbnail . parent ( 'a' ) }
shuffledThumbnails . push ( $thumbnail )
} ) ; this . $thumbnails . empty ( ) . append ( shuffledThumbnails )
}
} else { this . $thumbnails = $ ( '<div class="sp-thumbnails"></div>' ) . appendTo ( this . $thumbnailsContainer ) }
}
this . $slides . find ( '.sp-thumbnail' ) . each ( function ( index ) {
var $thumbnail = $ ( this ) , thumbnailIndex = $thumbnail . parents ( '.sp-slide' ) . index ( ) , lastThumbnailIndex = that . $thumbnails . find ( '.sp-thumbnail' ) . length - 1 ; if ( $thumbnail . parent ( 'a' ) . length !== 0 ) { $thumbnail = $thumbnail . parent ( 'a' ) }
if ( thumbnailIndex > lastThumbnailIndex ) { $thumbnail . appendTo ( that . $thumbnails ) } else { $thumbnail . insertBefore ( that . $thumbnails . find ( '.sp-thumbnail' ) . eq ( thumbnailIndex ) ) }
} ) ; for ( var i = this . thumbnails . length - 1 ; i >= 0 ; i -- ) { if ( this . $thumbnails . find ( '.sp-thumbnail[data-index="' + i + '"]' ) . length === 0 ) { var thumbnail = this . thumbnails [ i ] ; thumbnail . destroy ( ) ; this . thumbnails . splice ( i , 1 ) } }
this . $thumbnails . find ( '.sp-thumbnail' ) . each ( function ( index ) { var $thumbnail = $ ( this ) ; if ( typeof $thumbnail . attr ( 'data-init' ) === 'undefined' ) { that . _createThumbnail ( $thumbnail , index ) } else { that . thumbnails [ index ] . setIndex ( index ) } } ) ; this . $thumbnailsContainer . removeClass ( 'sp-top-thumbnails sp-bottom-thumbnails sp-left-thumbnails sp-right-thumbnails' ) ; if ( this . settings . thumbnailsPosition === 'top' ) { this . $thumbnailsContainer . addClass ( 'sp-top-thumbnails' ) ; this . thumbnailsOrientation = 'horizontal' } else if ( this . settings . thumbnailsPosition === 'bottom' ) { this . $thumbnailsContainer . addClass ( 'sp-bottom-thumbnails' ) ; this . thumbnailsOrientation = 'horizontal' } else if ( this . settings . thumbnailsPosition === 'left' ) { this . $thumbnailsContainer . addClass ( 'sp-left-thumbnails' ) ; this . thumbnailsOrientation = 'vertical' } else if ( this . settings . thumbnailsPosition === 'right' ) { this . $thumbnailsContainer . addClass ( 'sp-right-thumbnails' ) ; this . thumbnailsOrientation = 'vertical' }
if ( this . settings . thumbnailPointer === true ) { this . $thumbnailsContainer . addClass ( 'sp-has-pointer' ) } else { this . $thumbnailsContainer . removeClass ( 'sp-has-pointer' ) }
this . selectedThumbnailIndex = this . selectedSlideIndex ; this . $thumbnails . find ( '.sp-thumbnail-container' ) . eq ( this . selectedThumbnailIndex ) . addClass ( 'sp-selected-thumbnail' ) ; this . thumbnailsSize = 0 ; $ . each ( this . thumbnails , function ( index , thumbnail ) { thumbnail . setSize ( that . settings . thumbnailWidth , that . settings . thumbnailHeight ) ; that . thumbnailsSize += that . thumbnailsOrientation === 'horizontal' ? thumbnail . getSize ( ) . width : thumbnail . getSize ( ) . height } ) ; if ( this . thumbnailsOrientation === 'horizontal' ) { this . $thumbnails . css ( { 'width' : this . thumbnailsSize , 'height' : this . settings . thumbnailHeight } ) ; this . $thumbnailsContainer . css ( 'height' , '' ) ; this . thumbnailsPositionProperty = 'left' } else { this . $thumbnails . css ( { 'width' : this . settings . thumbnailWidth , 'height' : this . thumbnailsSize } ) ; this . $thumbnailsContainer . css ( 'width' , '' ) ; this . thumbnailsPositionProperty = 'top' }
this . trigger ( { type : 'thumbnailsUpdate' } ) ; if ( $ . isFunction ( this . settings . thumbnailsUpdate ) ) { this . settings . thumbnailsUpdate . call ( this , { type : 'thumbnailsUpdate' } ) }
} , _createThumbnail : function ( element , index ) { var that = this , thumbnail = new Thumbnail ( element , this . $thumbnails , index ) ; thumbnail . on ( 'thumbnailClick.' + NS , function ( event ) { that . gotoSlide ( event . index ) } ) ; this . thumbnails . splice ( index , 0 , thumbnail ) } , _thumbnailsOnResize : function ( ) {
if ( this . isThumbnailScroller === false ) { return }
var that = this , newThumbnailsPosition ; if ( this . thumbnailsOrientation === 'horizontal' ) { this . thumbnailsContainerSize = Math . min ( this . $slidesMask . width ( ) , this . thumbnailsSize ) ; this . $thumbnailsContainer . css ( 'width' , this . thumbnailsContainerSize ) ; if ( this . settings . forceSize === 'fullWindow' ) { this . $slidesMask . css ( 'height' , this . $slidesMask . height ( ) - this . $thumbnailsContainer . outerHeight ( true ) ) ; this . slideHeight = this . $slidesMask . height ( ) ; this . _resizeSlides ( ) ; this . _resetSlidesPosition ( ) } } else if ( this . thumbnailsOrientation === 'vertical' ) {
if ( this . $slidesMask . width ( ) + this . $thumbnailsContainer . outerWidth ( true ) > this . $slider . parent ( ) . width ( ) ) {
if ( this . settings . forceSize === 'fullWidth' || this . settings . forceSize === 'fullWindow' ) { this . $slider . css ( 'max-width' , $ ( window ) . width ( ) - this . $thumbnailsContainer . outerWidth ( true ) ) } else { this . $slider . css ( 'max-width' , this . $slider . parent ( ) . width ( ) - this . $thumbnailsContainer . outerWidth ( true ) ) }
this . $slidesMask . css ( 'width' , this . $slider . width ( ) ) ; if ( this . settings . orientation === 'vertical' ) { this . slideWidth = this . $slider . width ( ) ; this . _resizeSlides ( ) }
this . _resetSlidesPosition ( )
}
this . thumbnailsContainerSize = Math . min ( this . $slidesMask . height ( ) , this . thumbnailsSize ) ; this . $thumbnailsContainer . css ( 'height' , this . thumbnailsContainerSize )
}
if ( this . thumbnailsSize <= this . thumbnailsContainerSize || this . $thumbnails . find ( '.sp-selected-thumbnail' ) . length === 0 ) { newThumbnailsPosition = 0 } else { newThumbnailsPosition = Math . max ( - this . thumbnails [ this . selectedThumbnailIndex ] . getPosition ( ) [ this . thumbnailsPositionProperty ] , this . thumbnailsContainerSize - this . thumbnailsSize ) }
if ( this . settings . thumbnailsPosition === 'top' ) { this . $slider . css ( { 'paddingTop' : this . $thumbnailsContainer . outerHeight ( true ) , 'paddingLeft' : '' , 'paddingRight' : '' } ) } else if ( this . settings . thumbnailsPosition === 'bottom' ) { this . $slider . css ( { 'paddingTop' : '' , 'paddingLeft' : '' , 'paddingRight' : '' } ) } else if ( this . settings . thumbnailsPosition === 'left' ) { this . $slider . css ( { 'paddingTop' : '' , 'paddingLeft' : this . $thumbnailsContainer . outerWidth ( true ) , 'paddingRight' : '' } ) } else if ( this . settings . thumbnailsPosition === 'right' ) { this . $slider . css ( { 'paddingTop' : '' , 'paddingLeft' : '' , 'paddingRight' : this . $thumbnailsContainer . outerWidth ( true ) } ) }
this . _moveThumbnailsTo ( newThumbnailsPosition , true )
} , _gotoThumbnail : function ( index ) {
if ( this . isThumbnailScroller === false || typeof this . thumbnails [ index ] === 'undefined' ) { return }
var previousIndex = this . selectedThumbnailIndex , newThumbnailsPosition = this . thumbnailsPosition ; this . selectedThumbnailIndex = index ; this . $thumbnails . find ( '.sp-selected-thumbnail' ) . removeClass ( 'sp-selected-thumbnail' ) ; this . $thumbnails . find ( '.sp-thumbnail-container' ) . eq ( this . selectedThumbnailIndex ) . addClass ( 'sp-selected-thumbnail' ) ; if ( this . settings . rightToLeft === true && this . thumbnailsOrientation === 'horizontal' ) { if ( this . selectedThumbnailIndex >= previousIndex ) { var rtlNextThumbnailIndex = this . selectedThumbnailIndex === this . thumbnails . length - 1 ? this . selectedThumbnailIndex : this . selectedThumbnailIndex + 1 , rtlNextThumbnail = this . thumbnails [ rtlNextThumbnailIndex ] ; if ( rtlNextThumbnail . getPosition ( ) . left < - this . thumbnailsPosition ) { newThumbnailsPosition = - rtlNextThumbnail . getPosition ( ) . left } } else if ( this . selectedThumbnailIndex < previousIndex ) { var rtlPreviousThumbnailIndex = this . selectedThumbnailIndex === 0 ? this . selectedThumbnailIndex : this . selectedThumbnailIndex - 1 , rtlPreviousThumbnail = this . thumbnails [ rtlPreviousThumbnailIndex ] , rtlThumbnailsRightPosition = - this . thumbnailsPosition + this . thumbnailsContainerSize ; if ( rtlPreviousThumbnail . getPosition ( ) . right > rtlThumbnailsRightPosition ) { newThumbnailsPosition = this . thumbnailsPosition - ( rtlPreviousThumbnail . getPosition ( ) . right - rtlThumbnailsRightPosition ) } } } else { if ( this . selectedThumbnailIndex >= previousIndex ) { var nextThumbnailIndex = this . selectedThumbnailIndex === this . thumbnails . length - 1 ? this . selectedThumbnailIndex : this . selectedThumbnailIndex + 1 , nextThumbnail = this . thumbnails [ nextThumbnailIndex ] , nextThumbnailPosition = this . thumbnailsOrientation === 'horizontal' ? nextThumbnail . getPosition ( ) . right : nextThumbnail . getPosition ( ) . bottom , thumbnailsRightPosition = - this . thumbnailsPosition + this . thumbnailsContainerSize ; if ( nextThumbnailPosition > thumbnailsRightPosition ) { newThumbnailsPosition = this . thumbnailsPosition - ( nextThumbnailPosition - thumbnailsRightPosition ) } } else if ( this . selectedThumbnailIndex < previousIndex ) { var previousThumbnailIndex = this . selectedThumbnailIndex === 0 ? this . selectedThumbnailIndex : this . selectedThumbnailIndex - 1 , previousThumbnail = this . thumbnails [ previousThumbnailIndex ] , previousThumbnailPosition = this . thumbnailsOrientation === 'horizontal' ? previousThumbnail . getPosition ( ) . left : previousThumbnail . getPosition ( ) . top ; if ( previousThumbnailPosition < - this . thumbnailsPosition ) { newThumbnailsPosition = - previousThumbnailPosition } } }
this . _moveThumbnailsTo ( newThumbnailsPosition ) ; this . trigger ( { type : 'gotoThumbnail' } ) ; if ( $ . isFunction ( this . settings . gotoThumbnail ) ) { this . settings . gotoThumbnail . call ( this , { type : 'gotoThumbnail' } ) }
} , _moveThumbnailsTo : function ( position , instant , callback ) {
var that = this , css = { } ; if ( position === this . thumbnailsPosition ) { return }
this . thumbnailsPosition = position ; if ( this . supportedAnimation === 'css-3d' || this . supportedAnimation === 'css-2d' ) {
var transition , left = this . thumbnailsOrientation === 'horizontal' ? position : 0 , top = this . thumbnailsOrientation === 'horizontal' ? 0 : position ; if ( this . supportedAnimation === 'css-3d' ) { css [ this . vendorPrefix + 'transform' ] = 'translate3d(' + left + 'px, ' + top + 'px, 0)' } else { css [ this . vendorPrefix + 'transform' ] = 'translate(' + left + 'px, ' + top + 'px)' }
if ( typeof instant !== 'undefined' && instant === true ) { transition = '' } else {
this . $thumbnails . addClass ( 'sp-animated' ) ; transition = this . vendorPrefix + 'transform ' + 700 / 1000 + 's' ; this . $thumbnails . on ( this . transitionEvent , function ( event ) {
if ( event . target !== event . currentTarget ) { return }
that . $thumbnails . off ( that . transitionEvent ) ; that . $thumbnails . removeClass ( 'sp-animated' ) ; if ( typeof callback === 'function' ) { callback ( ) }
that . trigger ( { type : 'thumbnailsMoveComplete' } ) ; if ( $ . isFunction ( that . settings . thumbnailsMoveComplete ) ) { that . settings . thumbnailsMoveComplete . call ( that , { type : 'thumbnailsMoveComplete' } ) }
} )
}
css [ this . vendorPrefix + 'transition' ] = transition ; this . $thumbnails . css ( css )
} else {
css [ 'margin-' + this . thumbnailsPositionProperty ] = position ; if ( typeof instant !== 'undefined' && instant === true ) { this . $thumbnails . css ( css ) } else {
this . $thumbnails . addClass ( 'sp-animated' ) . animate ( css , 700 , function ( ) {
that . $thumbnails . removeClass ( 'sp-animated' ) ; if ( typeof callback === 'function' ) { callback ( ) }
that . trigger ( { type : 'thumbnailsMoveComplete' } ) ; if ( $ . isFunction ( that . settings . thumbnailsMoveComplete ) ) { that . settings . thumbnailsMoveComplete . call ( that , { type : 'thumbnailsMoveComplete' } ) }
} )
}
}
} , _stopThumbnailsMovement : function ( ) {
var css = { } ; if ( this . supportedAnimation === 'css-3d' || this . supportedAnimation === 'css-2d' ) {
var matrixString = this . $thumbnails . css ( this . vendorPrefix + 'transform' ) , matrixType = matrixString . indexOf ( 'matrix3d' ) !== - 1 ? 'matrix3d' : 'matrix' , matrixArray = matrixString . replace ( matrixType , '' ) . match ( /-?[0-9\.]+/g ) , left = matrixType === 'matrix3d' ? parseInt ( matrixArray [ 12 ] , 10 ) : parseInt ( matrixArray [ 4 ] , 10 ) , top = matrixType === 'matrix3d' ? parseInt ( matrixArray [ 13 ] , 10 ) : parseInt ( matrixArray [ 5 ] , 10 ) ; if ( this . supportedAnimation === 'css-3d' ) { css [ this . vendorPrefix + 'transform' ] = 'translate3d(' + left + 'px, ' + top + 'px, 0)' } else { css [ this . vendorPrefix + 'transform' ] = 'translate(' + left + 'px, ' + top + 'px)' }
css [ this . vendorPrefix + 'transition' ] = '' ; this . $thumbnails . css ( css ) ; this . $thumbnails . off ( this . transitionEvent ) ; this . thumbnailsPosition = this . thumbnailsOrientation === 'horizontal' ? parseInt ( matrixArray [ 4 ] , 10 ) : parseInt ( matrixArray [ 5 ] , 10 )
} else { this . $thumbnails . stop ( ) ; this . thumbnailsPosition = parseInt ( this . $thumbnails . css ( 'margin-' + this . thumbnailsPositionProperty ) , 10 ) }
this . $thumbnails . removeClass ( 'sp-animated' )
} , destroyThumbnails : function ( ) {
var that = this ; this . off ( 'update.' + NS ) ; if ( this . isThumbnailScroller === false ) { return }
this . off ( 'sliderResize.' + NS ) ; this . off ( 'gotoSlide.' + NS ) ; $ ( window ) . off ( 'resize.' + this . uniqueId + '.' + NS ) ; this . $thumbnails . find ( '.sp-thumbnail' ) . each ( function ( ) { var $thumbnail = $ ( this ) , index = parseInt ( $thumbnail . attr ( 'data-index' ) , 10 ) , thumbnail = that . thumbnails [ index ] ; thumbnail . off ( 'thumbnailClick.' + NS ) ; thumbnail . destroy ( ) } ) ; this . thumbnails . length = 0 ; this . $thumbnails . appendTo ( this . $slider ) ; this . $thumbnailsContainer . remove ( ) ; this . $slider . css ( { 'paddingTop' : '' , 'paddingLeft' : '' , 'paddingRight' : '' } )
} , thumbnailsDefaults : { thumbnailWidth : 100 , thumbnailHeight : 80 , thumbnailsPosition : 'bottom' , thumbnailPointer : false , thumbnailsUpdate : function ( ) { } , gotoThumbnail : function ( ) { } , thumbnailsMoveComplete : function ( ) { } }
} ; var Thumbnail = function ( thumbnail , thumbnails , index ) { this . $thumbnail = thumbnail ; this . $thumbnails = thumbnails ; this . $thumbnailContainer = null ; this . width = 0 ; this . height = 0 ; this . isImageLoaded = false ; this . setIndex ( index ) ; this . _init ( ) } ; Thumbnail . prototype = {
_init : function ( ) {
var that = this ; this . $thumbnail . attr ( 'data-init' , true ) ; this . $thumbnailContainer = $ ( '<div class="sp-thumbnail-container"></div>' ) . appendTo ( this . $thumbnails ) ; if ( this . $thumbnail . parent ( 'a' ) . length !== 0 ) { this . $thumbnail . parent ( 'a' ) . appendTo ( this . $thumbnailContainer ) } else { this . $thumbnail . appendTo ( this . $thumbnailContainer ) }
this . $thumbnailContainer . on ( 'click.' + NS , function ( ) { that . trigger ( { type : 'thumbnailClick.' + NS , index : that . index } ) } )
} , setSize : function ( width , height ) { this . width = width ; this . height = height ; this . $thumbnailContainer . css ( { 'width' : this . width , 'height' : this . height } ) ; if ( this . $thumbnail . is ( 'img' ) && typeof this . $thumbnail . attr ( 'data-src' ) === 'undefined' ) { this . resizeImage ( ) } } , getSize : function ( ) { return { width : this . $thumbnailContainer . outerWidth ( true ) , height : this . $thumbnailContainer . outerHeight ( true ) } } , getPosition : function ( ) { return { left : this . $thumbnailContainer . position ( ) . left + parseInt ( this . $thumbnailContainer . css ( 'marginLeft' ) , 10 ) , right : this . $thumbnailContainer . position ( ) . left + parseInt ( this . $thumbnailContainer . css ( 'marginLeft' ) , 10 ) + this . $thumbnailContainer . outerWidth ( ) , top : this . $thumbnailContainer . position ( ) . top + parseInt ( this . $thumbnailContainer . css ( 'marginTop' ) , 10 ) , bottom : this . $thumbnailContainer . position ( ) . top + parseInt ( this . $thumbnailContainer . css ( 'marginTop' ) , 10 ) + this . $thumbnailContainer . outerHeight ( ) } } , setIndex : function ( index ) { this . index = index ; this . $thumbnail . attr ( 'data-index' , this . index ) } , resizeImage : function ( ) {
var that = this ; if ( this . isImageLoaded === false ) { SliderProUtils . checkImagesComplete ( this . $thumbnailContainer , function ( ) { that . isImageLoaded = true ; that . resizeImage ( ) } ) ; return }
this . $thumbnail = this . $thumbnailContainer . find ( '.sp-thumbnail' ) ; var imageWidth = this . $thumbnail . width ( ) , imageHeight = this . $thumbnail . height ( ) ; if ( imageWidth / imageHeight <= this . width / this . height ) { this . $thumbnail . css ( { width : '100%' , height : 'auto' } ) } else { this . $thumbnail . css ( { width : 'auto' , height : '100%' } ) }
this . $thumbnail . css ( { 'marginLeft' : ( this . $thumbnailContainer . width ( ) - this . $thumbnail . width ( ) ) * 0.5 , 'marginTop' : ( this . $thumbnailContainer . height ( ) - this . $thumbnail . height ( ) ) * 0.5 } )
} , destroy : function ( ) {
this . $thumbnailContainer . off ( 'click.' + NS ) ; this . $thumbnail . removeAttr ( 'data-init' ) ; this . $thumbnail . removeAttr ( 'data-index' ) ; if ( this . $thumbnail . parent ( 'a' ) . length !== 0 ) { this . $thumbnail . parent ( 'a' ) . insertBefore ( this . $thumbnailContainer ) } else { this . $thumbnail . insertBefore ( this . $thumbnailContainer ) }
this . $thumbnailContainer . remove ( )
} , on : function ( type , callback ) { return this . $thumbnailContainer . on ( type , callback ) } , off : function ( type ) { return this . $thumbnailContainer . off ( type ) } , trigger : function ( data ) { return this . $thumbnailContainer . triggerHandler ( data ) }
} ; $ . SliderPro . addModule ( 'Thumbnails' , Thumbnails )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'ConditionalImages.' + $ . SliderPro . namespace ; var ConditionalImages = {
previousImageSize : null , currentImageSize : null , isRetinaScreen : false , initConditionalImages : function ( ) { this . currentImageSize = this . previousImageSize = 'default' ; this . isRetinaScreen = ( typeof this . _isRetina !== 'undefined' ) && ( this . _isRetina ( ) === true ) ; this . on ( 'update.' + NS , $ . proxy ( this . _conditionalImagesOnUpdate , this ) ) ; this . on ( 'sliderResize.' + NS , $ . proxy ( this . _conditionalImagesOnResize , this ) ) } , _conditionalImagesOnUpdate : function ( ) { $ . each ( this . slides , function ( index , element ) { var $slide = element . $slide ; $slide . find ( 'img:not([ data-default ])' ) . each ( function ( ) { var $image = $ ( this ) ; if ( typeof $image . attr ( 'data-src' ) !== 'undefined' ) { $image . attr ( 'data-default' , $image . attr ( 'data-src' ) ) } else { $image . attr ( 'data-default' , $image . attr ( 'src' ) ) } } ) } ) } , _conditionalImagesOnResize : function ( ) {
if ( this . slideWidth <= this . settings . smallSize ) { this . currentImageSize = 'small' } else if ( this . slideWidth <= this . settings . mediumSize ) { this . currentImageSize = 'medium' } else if ( this . slideWidth <= this . settings . largeSize ) { this . currentImageSize = 'large' } else { this . currentImageSize = 'default' }
if ( this . previousImageSize !== this . currentImageSize ) {
var that = this ; $ . each ( this . slides , function ( index , element ) {
var $slide = element . $slide ; $slide . find ( 'img' ) . each ( function ( ) {
var $image = $ ( this ) , imageSource = '' ; if ( that . isRetinaScreen === true && typeof $image . attr ( 'data-retina' + that . currentImageSize ) !== 'undefined' ) { imageSource = $image . attr ( 'data-retina' + that . currentImageSize ) ; if ( typeof $image . attr ( 'data-retina' ) !== 'undefined' && $image . attr ( 'data-retina' ) !== imageSource ) { $image . attr ( 'data-retina' , imageSource ) } } else if ( ( that . isRetinaScreen === false || that . isRetinaScreen === true && typeof $image . attr ( 'data-retina' ) === 'undefined' ) && typeof $image . attr ( 'data-' + that . currentImageSize ) !== 'undefined' ) { imageSource = $image . attr ( 'data-' + that . currentImageSize ) ; if ( typeof $image . attr ( 'data-src' ) !== 'undefined' && $image . attr ( 'data-src' ) !== imageSource ) { $image . attr ( 'data-src' , imageSource ) } }
if ( imageSource !== '' ) { if ( typeof $image . attr ( 'data-src' ) === 'undefined' && $image . attr ( 'src' ) !== imageSource ) { that . _loadConditionalImage ( $image , imageSource , function ( newImage ) { if ( newImage . hasClass ( 'sp-image' ) ) { element . $mainImage = newImage ; element . resizeMainImage ( true ) } } ) } }
} )
} ) ; this . previousImageSize = this . currentImageSize
}
} , _loadConditionalImage : function ( image , source , callback ) {
var newImage = $ ( new Image ( ) ) ; newImage . attr ( 'class' , image . attr ( 'class' ) ) ; newImage . attr ( 'style' , image . attr ( 'style' ) ) ; $ . each ( image . data ( ) , function ( name , value ) { newImage . attr ( 'data-' + name , value ) } ) ; if ( typeof image . attr ( 'width' ) !== 'undefined' ) { newImage . attr ( 'width' , image . attr ( 'width' ) ) }
if ( typeof image . attr ( 'height' ) !== 'undefined' ) { newImage . attr ( 'height' , image . attr ( 'height' ) ) }
if ( typeof image . attr ( 'alt' ) !== 'undefined' ) { newImage . attr ( 'alt' , image . attr ( 'alt' ) ) }
if ( typeof image . attr ( 'title' ) !== 'undefined' ) { newImage . attr ( 'title' , image . attr ( 'title' ) ) }
newImage . attr ( 'src' , source ) ; newImage . insertAfter ( image ) ; image . remove ( ) ; image = null ; if ( typeof callback === 'function' ) { callback ( newImage ) }
} , destroyConditionalImages : function ( ) { this . off ( 'update.' + NS ) ; this . off ( 'sliderResize.' + NS ) } , conditionalImagesDefaults : { smallSize : 480 , mediumSize : 768 , largeSize : 1024 }
} ; $ . SliderPro . addModule ( 'ConditionalImages' , ConditionalImages )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Retina.' + $ . SliderPro . namespace ; var Retina = {
initRetina : function ( ) {
var that = this ; if ( this . _isRetina ( ) === false ) { return }
this . on ( 'update.' + NS , $ . proxy ( this . _checkRetinaImages , this ) ) ; if ( this . $slider . find ( '.sp-thumbnail' ) . length !== 0 ) { this . on ( 'update.Thumbnails.' + NS , $ . proxy ( this . _checkRetinaThumbnailImages , this ) ) }
} , _isRetina : function ( ) {
if ( window . devicePixelRatio >= 2 ) { return true }
if ( window . matchMedia && ( window . matchMedia ( "(-webkit-min-device-pixel-ratio: 2),(min-resolution: 2dppx)" ) . matches ) ) { return true }
return false
} , _checkRetinaImages : function ( ) { var that = this ; $ . each ( this . slides , function ( index , element ) { var $slide = element . $slide ; if ( typeof $slide . attr ( 'data-retina-loaded' ) === 'undefined' ) { $slide . attr ( 'data-retina-loaded' , true ) ; $slide . find ( 'img[data-retina]' ) . each ( function ( ) { var $image = $ ( this ) ; if ( typeof $image . attr ( 'data-src' ) !== 'undefined' ) { $image . attr ( 'data-src' , $image . attr ( 'data-retina' ) ) } else { that . _loadRetinaImage ( $image , function ( newImage ) { if ( newImage . hasClass ( 'sp-image' ) ) { element . $mainImage = newImage ; element . resizeMainImage ( true ) } } ) } } ) } } ) } , _checkRetinaThumbnailImages : function ( ) { var that = this ; $ . each ( this . thumbnails , function ( index , element ) { var $thumbnail = element . $thumbnailContainer ; if ( typeof $thumbnail . attr ( 'data-retina-loaded' ) === 'undefined' ) { $thumbnail . attr ( 'data-retina-loaded' , true ) ; $thumbnail . find ( 'img[data-retina]' ) . each ( function ( ) { var $image = $ ( this ) ; if ( typeof $image . attr ( 'data-src' ) !== 'undefined' ) { $image . attr ( 'data-src' , $image . attr ( 'data-retina' ) ) } else { that . _loadRetinaImage ( $image , function ( newImage ) { if ( newImage . hasClass ( 'sp-thumbnail' ) ) { element . resizeImage ( ) } } ) } } ) } } ) } , _loadRetinaImage : function ( image , callback ) {
var retinaFound = false , newImagePath = '' ; if ( typeof image . attr ( 'data-retina' ) !== 'undefined' ) { retinaFound = true ; newImagePath = image . attr ( 'data-retina' ) }
if ( typeof image . attr ( 'data-src' ) !== 'undefined' ) {
if ( retinaFound === false ) { newImagePath = image . attr ( 'data-src' ) }
image . removeAttr ( 'data-src' )
}
if ( newImagePath === '' ) { return }
var newImage = $ ( new Image ( ) ) ; newImage . attr ( 'class' , image . attr ( 'class' ) ) ; newImage . attr ( 'style' , image . attr ( 'style' ) ) ; $ . each ( image . data ( ) , function ( name , value ) { newImage . attr ( 'data-' + name , value ) } ) ; if ( typeof image . attr ( 'width' ) !== 'undefined' ) { newImage . attr ( 'width' , image . attr ( 'width' ) ) }
if ( typeof image . attr ( 'height' ) !== 'undefined' ) { newImage . attr ( 'height' , image . attr ( 'height' ) ) }
if ( typeof image . attr ( 'alt' ) !== 'undefined' ) { newImage . attr ( 'alt' , image . attr ( 'alt' ) ) }
if ( typeof image . attr ( 'title' ) !== 'undefined' ) { newImage . attr ( 'title' , image . attr ( 'title' ) ) }
newImage . insertAfter ( image ) ; image . remove ( ) ; image = null ; newImage . attr ( 'src' , newImagePath ) ; if ( typeof callback === 'function' ) { callback ( newImage ) }
} , destroyRetina : function ( ) { this . off ( 'update.' + NS ) ; this . off ( 'update.Thumbnails.' + NS ) }
} ; $ . SliderPro . addModule ( 'Retina' , Retina )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'LazyLoading.' + $ . SliderPro . namespace ; var LazyLoading = {
allowLazyLoadingCheck : true , initLazyLoading : function ( ) { var that = this ; this . on ( 'sliderResize.' + NS , $ . proxy ( this . _lazyLoadingOnResize , this ) ) ; this . on ( 'gotoSlide.' + NS , $ . proxy ( this . _checkAndLoadVisibleImages , this ) ) ; this . on ( 'thumbnailsUpdate.' + NS + ' ' + 'thumbnailsMoveComplete.' + NS , $ . proxy ( this . _checkAndLoadVisibleThumbnailImages , this ) ) } , _lazyLoadingOnResize : function ( ) {
var that = this ; if ( this . allowLazyLoadingCheck === false ) { return }
this . allowLazyLoadingCheck = false ; this . _checkAndLoadVisibleImages ( ) ; if ( this . $slider . find ( '.sp-thumbnail' ) . length !== 0 ) { this . _checkAndLoadVisibleThumbnailImages ( ) }
setTimeout ( function ( ) { that . allowLazyLoadingCheck = true } , 500 )
} , _checkAndLoadVisibleImages : function ( ) {
if ( this . $slider . find ( '.sp-slide:not([ data-loaded ])' ) . length === 0 ) { return }
var that = this , referencePosition = this . settings . loop === true ? this . middleSlidePosition : this . selectedSlideIndex , visibleOnSides = Math . ceil ( ( parseInt ( this . $slidesMask . css ( this . sizeProperty ) , 10 ) - this . averageSlideSize ) / 2 / this . averageSlideSize ) , from = referencePosition - visibleOnSides - 1 > 0 ? referencePosition - visibleOnSides - 1 : 0 , to = referencePosition + visibleOnSides + 1 < this . getTotalSlides ( ) - 1 ? referencePosition + visibleOnSides + 1 : this . getTotalSlides ( ) - 1 , slidesToCheck = this . slidesOrder . slice ( from , to + 1 ) ; $ . each ( slidesToCheck , function ( index , element ) { var slide = that . slides [ element ] , $slide = slide . $slide ; if ( typeof $slide . attr ( 'data-loaded' ) === 'undefined' ) { $slide . attr ( 'data-loaded' , true ) ; $slide . find ( 'img[ data-src ]' ) . each ( function ( ) { var image = $ ( this ) ; that . _loadImage ( image , function ( newImage ) { if ( newImage . hasClass ( 'sp-image' ) ) { slide . $mainImage = newImage ; slide . resizeMainImage ( true ) } } ) } ) } } )
} , _checkAndLoadVisibleThumbnailImages : function ( ) {
if ( this . $slider . find ( '.sp-thumbnail-container:not([ data-loaded ])' ) . length === 0 ) { return }
var that = this , thumbnailSize = this . thumbnailsSize / this . thumbnails . length , from = Math . floor ( Math . abs ( this . thumbnailsPosition / thumbnailSize ) ) , to = Math . floor ( ( - this . thumbnailsPosition + this . thumbnailsContainerSize ) / thumbnailSize ) , thumbnailsToCheck = this . thumbnails . slice ( from , to + 1 ) ; $ . each ( thumbnailsToCheck , function ( index , element ) { var $thumbnailContainer = element . $thumbnailContainer ; if ( typeof $thumbnailContainer . attr ( 'data-loaded' ) === 'undefined' ) { $thumbnailContainer . attr ( 'data-loaded' , true ) ; $thumbnailContainer . find ( 'img[ data-src ]' ) . each ( function ( ) { var image = $ ( this ) ; that . _loadImage ( image , function ( ) { element . resizeImage ( ) } ) } ) } } )
} , _loadImage : function ( image , callback ) {
var newImage = $ ( new Image ( ) ) ; newImage . attr ( 'class' , image . attr ( 'class' ) ) ; newImage . attr ( 'style' , image . attr ( 'style' ) ) ; $ . each ( image . data ( ) , function ( name , value ) { newImage . attr ( 'data-' + name , value ) } ) ; if ( typeof image . attr ( 'width' ) !== 'undefined' ) { newImage . attr ( 'width' , image . attr ( 'width' ) ) }
if ( typeof image . attr ( 'height' ) !== 'undefined' ) { newImage . attr ( 'height' , image . attr ( 'height' ) ) }
if ( typeof image . attr ( 'alt' ) !== 'undefined' ) { newImage . attr ( 'alt' , image . attr ( 'alt' ) ) }
if ( typeof image . attr ( 'title' ) !== 'undefined' ) { newImage . attr ( 'title' , image . attr ( 'title' ) ) }
newImage . attr ( 'src' , image . attr ( 'data-src' ) ) ; newImage . removeAttr ( 'data-src' ) ; newImage . insertAfter ( image ) ; image . remove ( ) ; image = null ; if ( typeof callback === 'function' ) { callback ( newImage ) }
} , destroyLazyLoading : function ( ) { this . off ( 'update.' + NS ) ; this . off ( 'gotoSlide.' + NS ) ; this . off ( 'sliderResize.' + NS ) ; this . off ( 'thumbnailsUpdate.' + NS ) ; this . off ( 'thumbnailsMoveComplete.' + NS ) }
} ; $ . SliderPro . addModule ( 'LazyLoading' , LazyLoading )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Layers.' + $ . SliderPro . namespace ; var Layers = {
layersGotoSlideReference : null , waitForLayersTimer : null , initLayers : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _layersOnUpdate , this ) ) ; this . on ( 'sliderResize.' + NS , $ . proxy ( this . _layersOnResize , this ) ) ; this . on ( 'gotoSlide.' + NS , $ . proxy ( this . _layersOnGotoSlide , this ) ) } , _layersOnUpdate : function ( event ) {
var that = this ; $ . each ( this . slides , function ( index , element ) {
var $slide = element . $slide ; this . $slide . find ( '.sp-layer:not([ data-layer-init ])' ) . each ( function ( ) {
var layer = new Layer ( $ ( this ) ) ; if ( typeof element . layers === 'undefined' ) { element . layers = [ ] }
element . layers . push ( layer ) ; if ( $ ( this ) . hasClass ( 'sp-static' ) === false ) {
if ( typeof element . animatedLayers === 'undefined' ) { element . animatedLayers = [ ] }
element . animatedLayers . push ( layer )
}
} )
} ) ; if ( this . settings . waitForLayers === true ) { clearTimeout ( this . waitForLayersTimer ) ; this . waitForLayersTimer = setTimeout ( function ( ) { that . layersGotoSlideReference = that . gotoSlide ; that . gotoSlide = that . _layersGotoSlide } , 1 ) }
setTimeout ( function ( ) { that . showLayers ( that . selectedSlideIndex ) } , 1 )
} , _layersOnResize : function ( ) {
var that = this , autoScaleReference , useAutoScale = this . settings . autoScaleLayers , scaleRatio ; if ( this . settings . autoScaleLayers === false ) { return }
if ( this . settings . autoScaleReference === - 1 ) { if ( typeof this . settings . width === 'string' && this . settings . width . indexOf ( '%' ) !== - 1 ) { useAutoScale = false } else { autoScaleReference = parseInt ( this . settings . width , 10 ) } } else { autoScaleReference = this . settings . autoScaleReference }
if ( useAutoScale === true && this . slideWidth < autoScaleReference ) { scaleRatio = that . slideWidth / autoScaleReference } else { scaleRatio = 1 }
$ . each ( this . slides , function ( index , slide ) { if ( typeof slide . layers !== 'undefined' ) { $ . each ( slide . layers , function ( index , layer ) { layer . scale ( scaleRatio ) } ) } } )
} , _layersGotoSlide : function ( index ) { var that = this , animatedLayers = this . slides [ this . selectedSlideIndex ] . animatedLayers ; if ( this . $slider . hasClass ( 'sp-swiping' ) || typeof animatedLayers === 'undefined' || animatedLayers . length === 0 ) { this . layersGotoSlideReference ( index ) } else { this . on ( 'hideLayersComplete.' + NS , function ( ) { that . off ( 'hideLayersComplete.' + NS ) ; that . layersGotoSlideReference ( index ) } ) ; this . hideLayers ( this . selectedSlideIndex ) } } , _layersOnGotoSlide : function ( event ) {
if ( this . previousSlideIndex !== this . selectedSlideIndex ) { this . hideLayers ( this . previousSlideIndex ) }
this . showLayers ( this . selectedSlideIndex )
} , showLayers : function ( index ) {
var that = this , animatedLayers = this . slides [ index ] . animatedLayers , layerCounter = 0 ; if ( typeof animatedLayers === 'undefined' ) { return }
$ . each ( animatedLayers , function ( index , element ) { if ( element . isVisible ( ) === true ) { layerCounter ++ ; if ( layerCounter === animatedLayers . length ) { that . trigger ( { type : 'showLayersComplete' , index : index } ) ; if ( $ . isFunction ( that . settings . showLayersComplete ) ) { that . settings . showLayersComplete . call ( that , { type : 'showLayersComplete' , index : index } ) } } } else { element . show ( function ( ) { layerCounter ++ ; if ( layerCounter === animatedLayers . length ) { that . trigger ( { type : 'showLayersComplete' , index : index } ) ; if ( $ . isFunction ( that . settings . showLayersComplete ) ) { that . settings . showLayersComplete . call ( that , { type : 'showLayersComplete' , index : index } ) } } } ) } } )
} , hideLayers : function ( index ) {
var that = this , animatedLayers = this . slides [ index ] . animatedLayers , layerCounter = 0 ; if ( typeof animatedLayers === 'undefined' ) { return }
$ . each ( animatedLayers , function ( index , element ) { if ( element . isVisible ( ) === false ) { layerCounter ++ ; if ( layerCounter === animatedLayers . length ) { that . trigger ( { type : 'hideLayersComplete' , index : index } ) ; if ( $ . isFunction ( that . settings . hideLayersComplete ) ) { that . settings . hideLayersComplete . call ( that , { type : 'hideLayersComplete' , index : index } ) } } } else { element . hide ( function ( ) { layerCounter ++ ; if ( layerCounter === animatedLayers . length ) { that . trigger ( { type : 'hideLayersComplete' , index : index } ) ; if ( $ . isFunction ( that . settings . hideLayersComplete ) ) { that . settings . hideLayersComplete . call ( that , { type : 'hideLayersComplete' , index : index } ) } } } ) } } )
} , destroyLayers : function ( ) { this . off ( 'update.' + NS ) ; this . off ( 'resize.' + NS ) ; this . off ( 'gotoSlide.' + NS ) ; this . off ( 'hideLayersComplete.' + NS ) } , layersDefaults : { waitForLayers : false , autoScaleLayers : true , autoScaleReference : - 1 , showLayersComplete : function ( ) { } , hideLayersComplete : function ( ) { } }
} ; var slideDestroy = window . SliderProSlide . prototype . destroy ; window . SliderProSlide . prototype . destroy = function ( ) {
if ( typeof this . layers !== 'undefined' ) { $ . each ( this . layers , function ( index , element ) { element . destroy ( ) } ) ; this . layers . length = 0 }
if ( typeof this . animatedLayers !== 'undefined' ) { this . animatedLayers . length = 0 }
slideDestroy . apply ( this )
} ; var Layer = function ( layer ) { this . $layer = layer ; this . visible = false ; this . styled = false ; this . data = null ; this . position = null ; this . horizontalProperty = null ; this . verticalProperty = null ; this . horizontalPosition = null ; this . verticalPosition = null ; this . scaleRatio = 1 ; this . supportedAnimation = SliderProUtils . getSupportedAnimation ( ) ; this . vendorPrefix = SliderProUtils . getVendorPrefix ( ) ; this . transitionEvent = SliderProUtils . getTransitionEvent ( ) ; this . stayTimer = null ; this . _init ( ) } ; Layer . prototype = {
_init : function ( ) { this . $layer . attr ( 'data-layer-init' , true ) ; if ( this . $layer . hasClass ( 'sp-static' ) ) { this . _setStyle ( ) } else { this . $layer . css ( { 'visibility' : 'hidden' } ) } } , _setStyle : function ( ) {
this . styled = true ; this . data = this . $layer . data ( ) ; if ( typeof this . data . width !== 'undefined' ) { this . $layer . css ( 'width' , this . data . width ) }
if ( typeof this . data . height !== 'undefined' ) { this . $layer . css ( 'height' , this . data . height ) }
if ( typeof this . data . depth !== 'undefined' ) { this . $layer . css ( 'z-index' , this . data . depth ) }
this . position = this . data . position ? ( this . data . position ) . toLowerCase ( ) : 'topleft' ; if ( this . position . indexOf ( 'right' ) !== - 1 ) { this . horizontalProperty = 'right' } else if ( this . position . indexOf ( 'left' ) !== - 1 ) { this . horizontalProperty = 'left' } else { this . horizontalProperty = 'center' }
if ( this . position . indexOf ( 'bottom' ) !== - 1 ) { this . verticalProperty = 'bottom' } else if ( this . position . indexOf ( 'top' ) !== - 1 ) { this . verticalProperty = 'top' } else { this . verticalProperty = 'center' }
this . _setPosition ( ) ; this . scale ( this . scaleRatio )
} , _setPosition : function ( ) {
var inlineStyle = this . $layer . attr ( 'style' ) ; this . horizontalPosition = typeof this . data . horizontal !== 'undefined' ? this . data . horizontal : 0 ; this . verticalPosition = typeof this . data . vertical !== 'undefined' ? this . data . vertical : 0 ; if ( this . horizontalProperty === 'center' ) {
if ( this . $layer . is ( 'img' ) === false && ( typeof inlineStyle === 'undefined' || ( typeof inlineStyle !== 'undefined' && inlineStyle . indexOf ( 'width' ) === - 1 ) ) ) { this . $layer . css ( 'white-space' , 'nowrap' ) ; this . $layer . css ( 'width' , this . $layer . outerWidth ( true ) ) }
this . $layer . css ( { 'marginLeft' : 'auto' , 'marginRight' : 'auto' , 'left' : this . horizontalPosition , 'right' : 0 } )
} else { this . $layer . css ( this . horizontalProperty , this . horizontalPosition ) }
if ( this . verticalProperty === 'center' ) {
if ( this . $layer . is ( 'img' ) === false && ( typeof inlineStyle === 'undefined' || ( typeof inlineStyle !== 'undefined' && inlineStyle . indexOf ( 'height' ) === - 1 ) ) ) { this . $layer . css ( 'white-space' , 'nowrap' ) ; this . $layer . css ( 'height' , this . $layer . outerHeight ( true ) ) }
this . $layer . css ( { 'marginTop' : 'auto' , 'marginBottom' : 'auto' , 'top' : this . verticalPosition , 'bottom' : 0 } )
} else { this . $layer . css ( this . verticalProperty , this . verticalPosition ) }
} , scale : function ( ratio ) {
if ( this . $layer . hasClass ( 'sp-no-scale' ) ) { return }
this . scaleRatio = ratio ; if ( this . styled === false ) { return }
var horizontalProperty = this . horizontalProperty === 'center' ? 'left' : this . horizontalProperty , verticalProperty = this . verticalProperty === 'center' ? 'top' : this . verticalProperty , css = { } ; css [ this . vendorPrefix + 'transform-origin' ] = this . horizontalProperty + ' ' + this . verticalProperty ; css [ this . vendorPrefix + 'transform' ] = 'scale(' + this . scaleRatio + ')' ; if ( typeof this . horizontalPosition !== 'string' ) { css [ horizontalProperty ] = this . horizontalPosition * this . scaleRatio }
if ( typeof this . verticalPosition !== 'string' ) { css [ verticalProperty ] = this . verticalPosition * this . scaleRatio }
if ( typeof this . data . width === 'string' && this . data . width . indexOf ( '%' ) !== - 1 ) { css . width = ( parseInt ( this . data . width , 10 ) / this . scaleRatio ) . toString ( ) + '%' }
if ( typeof this . data . height === 'string' && this . data . height . indexOf ( '%' ) !== - 1 ) { css . height = ( parseInt ( this . data . height , 10 ) / this . scaleRatio ) . toString ( ) + '%' }
this . $layer . css ( css )
} , show : function ( callback ) {
if ( this . visible === true ) { return }
this . visible = true ; if ( this . styled === false ) { this . _setStyle ( ) }
var that = this , offset = typeof this . data . showOffset !== 'undefined' ? this . data . showOffset : 50 , duration = typeof this . data . showDuration !== 'undefined' ? this . data . showDuration / 1000 : 0.4 , delay = typeof this . data . showDelay !== 'undefined' ? this . data . showDelay : 10 , stayDuration = typeof that . data . stayDuration !== 'undefined' ? parseInt ( that . data . stayDuration , 10 ) : - 1 ; if ( this . supportedAnimation === 'javascript' ) {
this . $layer . stop ( ) . delay ( delay ) . css ( { 'opacity' : 0 , 'visibility' : 'visible' } ) . animate ( { 'opacity' : 1 } , duration * 1000 , function ( ) {
if ( stayDuration !== - 1 ) { that . stayTimer = setTimeout ( function ( ) { that . hide ( ) ; that . stayTimer = null } , stayDuration ) }
if ( typeof callback !== 'undefined' ) { callback ( ) }
} )
} else {
var start = { 'opacity' : 0 , 'visibility' : 'visible' } , target = { 'opacity' : 1 } , transformValues = '' ; start [ this . vendorPrefix + 'transform' ] = 'scale(' + this . scaleRatio + ')' ; target [ this . vendorPrefix + 'transform' ] = 'scale(' + this . scaleRatio + ')' ; target [ this . vendorPrefix + 'transition' ] = 'opacity ' + duration + 's' ; if ( typeof this . data . showTransition !== 'undefined' ) {
if ( this . data . showTransition === 'left' ) { transformValues = offset + 'px, 0' } else if ( this . data . showTransition === 'right' ) { transformValues = '-' + offset + 'px, 0' } else if ( this . data . showTransition === 'up' ) { transformValues = '0, ' + offset + 'px' } else if ( this . data . showTransition === 'down' ) { transformValues = '0, -' + offset + 'px' }
start [ this . vendorPrefix + 'transform' ] += this . supportedAnimation === 'css-3d' ? ' translate3d(' + transformValues + ', 0)' : ' translate(' + transformValues + ')' ; target [ this . vendorPrefix + 'transform' ] += this . supportedAnimation === 'css-3d' ? ' translate3d(0, 0, 0)' : ' translate(0, 0)' ; target [ this . vendorPrefix + 'transition' ] += ', ' + this . vendorPrefix + 'transform ' + duration + 's'
}
this . $layer . on ( this . transitionEvent , function ( event ) {
if ( event . target !== event . currentTarget ) { return }
that . $layer . off ( that . transitionEvent ) . css ( that . vendorPrefix + 'transition' , '' ) ; if ( stayDuration !== - 1 ) { that . stayTimer = setTimeout ( function ( ) { that . hide ( ) ; that . stayTimer = null } , stayDuration ) }
if ( typeof callback !== 'undefined' ) { callback ( ) }
} ) ; this . $layer . css ( start ) ; setTimeout ( function ( ) { that . $layer . css ( target ) } , delay )
}
} , hide : function ( callback ) {
if ( this . visible === false ) { return }
var that = this , offset = typeof this . data . hideOffset !== 'undefined' ? this . data . hideOffset : 50 , duration = typeof this . data . hideDuration !== 'undefined' ? this . data . hideDuration / 1000 : 0.4 , delay = typeof this . data . hideDelay !== 'undefined' ? this . data . hideDelay : 10 ; this . visible = false ; if ( this . stayTimer !== null ) { clearTimeout ( this . stayTimer ) }
if ( this . supportedAnimation === 'javascript' ) { this . $layer . stop ( ) . delay ( delay ) . animate ( { 'opacity' : 0 } , duration * 1000 , function ( ) { $ ( this ) . css ( 'visibility' , 'hidden' ) ; if ( typeof callback !== 'undefined' ) { callback ( ) } } ) } else {
var transformValues = '' , target = { 'opacity' : 0 } ; target [ this . vendorPrefix + 'transform' ] = 'scale(' + this . scaleRatio + ')' ; target [ this . vendorPrefix + 'transition' ] = 'opacity ' + duration + 's' ; if ( typeof this . data . hideTransition !== 'undefined' ) {
if ( this . data . hideTransition === 'left' ) { transformValues = '-' + offset + 'px, 0' } else if ( this . data . hideTransition === 'right' ) { transformValues = offset + 'px, 0' } else if ( this . data . hideTransition === 'up' ) { transformValues = '0, -' + offset + 'px' } else if ( this . data . hideTransition === 'down' ) { transformValues = '0, ' + offset + 'px' }
target [ this . vendorPrefix + 'transform' ] += this . supportedAnimation === 'css-3d' ? ' translate3d(' + transformValues + ', 0)' : ' translate(' + transformValues + ')' ; target [ this . vendorPrefix + 'transition' ] += ', ' + this . vendorPrefix + 'transform ' + duration + 's'
}
this . $layer . on ( this . transitionEvent , function ( event ) {
if ( event . target !== event . currentTarget ) { return }
that . $layer . off ( that . transitionEvent ) . css ( that . vendorPrefix + 'transition' , '' ) ; if ( that . visible === false ) { that . $layer . css ( 'visibility' , 'hidden' ) }
if ( typeof callback !== 'undefined' ) { callback ( ) }
} ) ; setTimeout ( function ( ) { that . $layer . css ( target ) } , delay )
}
} , isVisible : function ( ) {
if ( this . visible === false || this . $layer . is ( ':hidden' ) ) { return false }
return true
} , destroy : function ( ) { this . $layer . removeAttr ( 'style' ) ; this . $layer . removeAttr ( 'data-layer-init' ) }
} ; $ . SliderPro . addModule ( 'Layers' , Layers )
} ) ( window , jQuery ) ;
( function ( window , $ ) {
"use strict" ; var NS = 'TouchSwipe.' + $ . SliderPro . namespace ; var TouchSwipe = {
touchStartPoint : { x : 0 , y : 0 } , touchEndPoint : { x : 0 , y : 0 } , touchDistance : { x : 0 , y : 0 } , touchStartPosition : 0 , isTouchMoving : false , touchSwipeEvents : { startEvent : '' , moveEvent : '' , endEvent : '' } , initTouchSwipe : function ( ) {
var that = this ; if ( this . settings . touchSwipe === false ) { return }
this . touchSwipeEvents . startEvent = 'touchstart' + '.' + NS + ' mousedown' + '.' + NS ; this . touchSwipeEvents . moveEvent = 'touchmove' + '.' + NS + ' mousemove' + '.' + NS ; this . touchSwipeEvents . endEvent = 'touchend' + '.' + this . uniqueId + '.' + NS + ' mouseup' + '.' + this . uniqueId + '.' + NS ; this . $slidesMask . on ( this . touchSwipeEvents . startEvent , $ . proxy ( this . _onTouchStart , this ) ) ; this . $slidesMask . on ( 'dragstart.' + NS , function ( event ) { event . preventDefault ( ) } ) ; this . $slidesMask . addClass ( 'sp-grab' )
} , _onTouchStart : function ( event ) {
if ( $ ( event . target ) . closest ( '.sp-selectable' ) . length >= 1 ) { return }
var that = this , eventObject = typeof event . originalEvent . touches !== 'undefined' ? event . originalEvent . touches [ 0 ] : event . originalEvent ; if ( typeof event . originalEvent . touches === 'undefined' ) { event . preventDefault ( ) }
$ ( event . target ) . parents ( '.sp-slide' ) . find ( 'a' ) . one ( 'click.' + NS , function ( event ) { event . preventDefault ( ) } ) ; this . touchStartPoint . x = eventObject . pageX || eventObject . clientX ; this . touchStartPoint . y = eventObject . pageY || eventObject . clientY ; this . touchStartPosition = this . slidesPosition ; this . touchDistance . x = this . touchDistance . y = 0 ; if ( this . $slides . hasClass ( 'sp-animated' ) ) { this . isTouchMoving = true ; this . _stopMovement ( ) ; this . touchStartPosition = this . slidesPosition }
this . $slidesMask . on ( this . touchSwipeEvents . moveEvent , $ . proxy ( this . _onTouchMove , this ) ) ; $ ( document ) . on ( this . touchSwipeEvents . endEvent , $ . proxy ( this . _onTouchEnd , this ) ) ; this . $slidesMask . removeClass ( 'sp-grab' ) . addClass ( 'sp-grabbing' ) ; this . $slider . addClass ( 'sp-swiping' )
} , _onTouchMove : function ( event ) {
var eventObject = typeof event . originalEvent . touches !== 'undefined' ? event . originalEvent . touches [ 0 ] : event . originalEvent ; this . isTouchMoving = true ; this . touchEndPoint . x = eventObject . pageX || eventObject . clientX ; this . touchEndPoint . y = eventObject . pageY || eventObject . clientY ; this . touchDistance . x = this . touchEndPoint . x - this . touchStartPoint . x ; this . touchDistance . y = this . touchEndPoint . y - this . touchStartPoint . y ; var distance = this . settings . orientation === 'horizontal' ? this . touchDistance . x : this . touchDistance . y , oppositeDistance = this . settings . orientation === 'horizontal' ? this . touchDistance . y : this . touchDistance . x ; if ( Math . abs ( distance ) > Math . abs ( oppositeDistance ) ) { event . preventDefault ( ) } else { return }
if ( this . settings . loop === false ) { if ( ( this . slidesPosition > this . touchStartPosition && this . selectedSlideIndex === 0 ) || ( this . slidesPosition < this . touchStartPosition && this . selectedSlideIndex === this . getTotalSlides ( ) - 1 ) ) { distance = distance * 0.2 } }
this . _moveTo ( this . touchStartPosition + distance , true )
} , _onTouchEnd : function ( event ) {
var that = this , touchDistance = this . settings . orientation === 'horizontal' ? this . touchDistance . x : this . touchDistance . y ; this . $slidesMask . off ( this . touchSwipeEvents . moveEvent ) ; $ ( document ) . off ( this . touchSwipeEvents . endEvent ) ; this . $slidesMask . removeClass ( 'sp-grabbing' ) . addClass ( 'sp-grab' ) ; if ( this . isTouchMoving === false || this . isTouchMoving === true && Math . abs ( this . touchDistance . x ) < 10 && Math . abs ( this . touchDistance . y ) < 10 ) { $ ( event . target ) . parents ( '.sp-slide' ) . find ( 'a' ) . off ( 'click.' + NS ) ; this . $slider . removeClass ( 'sp-swiping' ) }
setTimeout ( function ( ) { that . $slider . removeClass ( 'sp-swiping' ) } , 1 ) ; if ( this . isTouchMoving === false ) { return }
this . isTouchMoving = false ; $ ( event . target ) . parents ( '.sp-slide' ) . one ( 'click' , function ( event ) { event . preventDefault ( ) } ) ; var selectedSlideOffset = this . settings . centerSelectedSlide === true ? Math . round ( ( parseInt ( this . $slidesMask . css ( this . sizeProperty ) , 10 ) - this . getSlideAt ( this . selectedSlideIndex ) . getSize ( ) [ this . sizeProperty ] ) / 2 ) : 0 , oldSlidesPosition = - parseInt ( this . $slides . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . css ( this . positionProperty ) , 10 ) + selectedSlideOffset ; if ( Math . abs ( touchDistance ) < this . settings . touchSwipeThreshold ) { this . _moveTo ( oldSlidesPosition ) } else { var slideArrayDistance = ( this . settings . rightToLeft === true && this . settings . orientation === 'horizontal' ? - 1 : 1 ) * touchDistance / ( this . averageSlideSize + this . settings . slideDistance ) ; slideArrayDistance = parseInt ( slideArrayDistance , 10 ) + ( slideArrayDistance > 0 ? 1 : - 1 ) ; var nextSlideIndex = this . slidesOrder [ $ . inArray ( this . selectedSlideIndex , this . slidesOrder ) - slideArrayDistance ] ; if ( this . settings . loop === true ) { this . gotoSlide ( nextSlideIndex ) } else { if ( typeof nextSlideIndex !== 'undefined' ) { this . gotoSlide ( nextSlideIndex ) } else { this . _moveTo ( oldSlidesPosition ) } } }
} , destroyTouchSwipe : function ( ) { this . $slidesMask . off ( this . touchSwipeEvents . startEvent ) ; this . $slidesMask . off ( this . touchSwipeEvents . moveEvent ) ; this . $slidesMask . off ( 'dragstart.' + NS ) ; $ ( document ) . off ( this . touchSwipeEvents . endEvent ) ; this . $slidesMask . removeClass ( 'sp-grab' ) } , touchSwipeDefaults : { touchSwipe : true , touchSwipeThreshold : 50 }
} ; $ . SliderPro . addModule ( 'TouchSwipe' , TouchSwipe )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Caption.' + $ . SliderPro . namespace ; var Caption = {
$captionContainer : null , captionContent : '' , initCaption : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _captionOnUpdate , this ) ) ; this . on ( 'gotoSlide.' + NS , $ . proxy ( this . _updateCaptionContent , this ) ) } , _captionOnUpdate : function ( ) {
this . $captionContainer = this . $slider . find ( '.sp-caption-container' ) ; if ( this . $slider . find ( '.sp-caption' ) . length && this . $captionContainer . length === 0 ) { this . $captionContainer = $ ( '<div class="sp-caption-container"></div>' ) . appendTo ( this . $slider ) ; this . _updateCaptionContent ( ) }
this . $slides . find ( '.sp-caption' ) . each ( function ( ) { $ ( this ) . css ( 'display' , 'none' ) } )
} , _updateCaptionContent : function ( ) {
var that = this , newCaptionField = this . $slider . find ( '.sp-slide' ) . eq ( this . selectedSlideIndex ) . find ( '.sp-caption' ) , newCaptionContent = newCaptionField . length !== 0 ? newCaptionField . html ( ) : '' ; if ( this . settings . fadeCaption === true ) {
if ( this . captionContent !== '' ) {
if ( parseFloat ( this . $captionContainer . css ( 'opacity' ) , 10 ) === 0 ) { this . $captionContainer . css ( this . vendorPrefix + 'transition' , '' ) ; this . $captionContainer . css ( 'opacity' , 1 ) }
this . _fadeCaptionTo ( 0 , function ( ) { that . captionContent = newCaptionContent ; if ( newCaptionContent !== '' ) { that . $captionContainer . html ( that . captionContent ) ; that . _fadeCaptionTo ( 1 ) } else { that . $captionContainer . empty ( ) } } )
} else { this . captionContent = newCaptionContent ; this . $captionContainer . html ( this . captionContent ) ; this . $captionContainer . css ( 'opacity' , 0 ) ; this . _fadeCaptionTo ( 1 ) }
} else { this . captionContent = newCaptionContent ; this . $captionContainer . html ( this . captionContent ) }
} , _fadeCaptionTo : function ( opacity , callback ) {
var that = this ; if ( this . supportedAnimation === 'css-3d' || this . supportedAnimation === 'css-2d' ) {
setTimeout ( function ( ) { var css = { 'opacity' : opacity } ; css [ that . vendorPrefix + 'transition' ] = 'opacity ' + that . settings . captionFadeDuration / 1000 + 's' ; that . $captionContainer . css ( css ) } , 1 ) ; this . $captionContainer . on ( this . transitionEvent , function ( event ) {
if ( event . target !== event . currentTarget ) { return }
that . $captionContainer . off ( that . transitionEvent ) ; that . $captionContainer . css ( that . vendorPrefix + 'transition' , '' ) ; if ( typeof callback === 'function' ) { callback ( ) }
} )
} else { this . $captionContainer . stop ( ) . animate ( { 'opacity' : opacity } , this . settings . captionFadeDuration , function ( ) { if ( typeof callback === 'function' ) { callback ( ) } } ) }
} , destroyCaption : function ( ) { this . off ( 'update.' + NS ) ; this . off ( 'gotoSlide.' + NS ) ; this . $captionContainer . remove ( ) ; this . $slider . find ( '.sp-caption' ) . each ( function ( ) { $ ( this ) . css ( 'display' , '' ) } ) } , captionDefaults : { fadeCaption : true , captionFadeDuration : 500 }
} ; $ . SliderPro . addModule ( 'Caption' , Caption )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'DeepLinking.' + $ . SliderPro . namespace ; var DeepLinking = {
initDeepLinking : function ( ) {
var that = this ; this . on ( 'init.' + NS , function ( ) { that . _gotoHash ( window . location . hash ) } ) ; this . on ( 'gotoSlide.' + NS , function ( event ) {
if ( that . settings . updateHash === true ) {
var slideId = that . $slider . find ( '.sp-slide' ) . eq ( event . index ) . attr ( 'id' ) ; if ( typeof slideId === 'undefined' ) { slideId = event . index }
window . location . hash = that . $slider . attr ( 'id' ) + '/' + slideId
}
} ) ; $ ( window ) . on ( 'hashchange.' + this . uniqueId + '.' + NS , function ( ) { that . _gotoHash ( window . location . hash ) } )
} , _parseHash : function ( hash ) {
if ( hash !== '' ) { hash = hash . substring ( 1 ) ; var values = hash . split ( '/' ) , slideId = values . pop ( ) , sliderId = hash . slice ( 0 , - slideId . toString ( ) . length - 1 ) ; if ( this . $slider . attr ( 'id' ) === sliderId ) { return { 'sliderID' : sliderId , 'slideId' : slideId } } }
return false
} , _gotoHash : function ( hash ) {
var result = this . _parseHash ( hash ) ; if ( result === false ) { return }
var slideId = result . slideId , slideIdNumber = parseInt ( slideId , 10 ) ; if ( isNaN ( slideIdNumber ) ) { var slideIndex = this . $slider . find ( '.sp-slide#' + slideId ) . index ( ) ; if ( slideIndex !== - 1 && slideIndex !== this . selectedSlideIndex ) { this . gotoSlide ( slideIndex ) } } else if ( slideIdNumber !== this . selectedSlideIndex ) { this . gotoSlide ( slideIdNumber ) }
} , destroyDeepLinking : function ( ) { this . off ( 'init.' + NS ) ; this . off ( 'gotoSlide.' + NS ) ; $ ( window ) . off ( 'hashchange.' + this . uniqueId + '.' + NS ) } , deepLinkingDefaults : { updateHash : false }
} ; $ . SliderPro . addModule ( 'DeepLinking' , DeepLinking )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Autoplay.' + $ . SliderPro . namespace ; var Autoplay = {
autoplayTimer : null , isTimerRunning : false , isTimerPaused : false , initAutoplay : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _autoplayOnUpdate , this ) ) } , _autoplayOnUpdate : function ( event ) { if ( this . settings . autoplay === true ) { this . on ( 'gotoSlide.' + NS , $ . proxy ( this . _autoplayOnGotoSlide , this ) ) ; this . on ( 'mouseenter.' + NS , $ . proxy ( this . _autoplayOnMouseEnter , this ) ) ; this . on ( 'mouseleave.' + NS , $ . proxy ( this . _autoplayOnMouseLeave , this ) ) ; this . startAutoplay ( ) } else { this . off ( 'gotoSlide.' + NS ) ; this . off ( 'mouseenter.' + NS ) ; this . off ( 'mouseleave.' + NS ) ; this . stopAutoplay ( ) } } , _autoplayOnGotoSlide : function ( event ) {
if ( this . isTimerRunning === true ) { this . stopAutoplay ( ) }
if ( this . isTimerPaused === false ) { this . startAutoplay ( ) }
} , _autoplayOnMouseEnter : function ( event ) { if ( this . isTimerRunning && ( this . settings . autoplayOnHover === 'pause' || this . settings . autoplayOnHover === 'stop' ) ) { this . stopAutoplay ( ) ; this . isTimerPaused = true } } , _autoplayOnMouseLeave : function ( event ) { if ( this . settings . autoplay === true && this . isTimerRunning === false && this . settings . autoplayOnHover !== 'stop' ) { this . startAutoplay ( ) ; this . isTimerPaused = false } } , startAutoplay : function ( ) { var that = this ; this . isTimerRunning = true ; this . autoplayTimer = setTimeout ( function ( ) { if ( that . settings . autoplayDirection === 'normal' ) { that . nextSlide ( ) } else if ( that . settings . autoplayDirection === 'backwards' ) { that . previousSlide ( ) } } , this . settings . autoplayDelay ) } , stopAutoplay : function ( ) { this . isTimerRunning = false ; this . isTimerPaused = false ; clearTimeout ( this . autoplayTimer ) } , destroyAutoplay : function ( ) { clearTimeout ( this . autoplayTimer ) ; this . off ( 'update.' + NS ) ; this . off ( 'gotoSlide.' + NS ) ; this . off ( 'mouseenter.' + NS ) ; this . off ( 'mouseleave.' + NS ) } , autoplayDefaults : { autoplay : true , autoplayDelay : 5000 , autoplayDirection : 'normal' , autoplayOnHover : 'pause' }
} ; $ . SliderPro . addModule ( 'Autoplay' , Autoplay )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Keyboard.' + $ . SliderPro . namespace ; var Keyboard = {
initKeyboard : function ( ) {
var that = this , hasFocus = false ; if ( this . settings . keyboard === false ) { return }
this . $slider . on ( 'focus.' + NS , function ( ) { hasFocus = true } ) ; this . $slider . on ( 'blur.' + NS , function ( ) { hasFocus = false } ) ; $ ( document ) . on ( 'keydown.' + this . uniqueId + '.' + NS , function ( event ) {
if ( that . settings . keyboardOnlyOnFocus === true && hasFocus === false ) { return }
if ( event . which === 37 ) { that . previousSlide ( ) } else if ( event . which === 39 ) { that . nextSlide ( ) } else if ( event . which === 13 ) { var link = that . $slider . find ( '.sp-slide' ) . eq ( that . selectedSlideIndex ) . find ( '.sp-image-container a' ) ; if ( link . length !== 0 ) { link [ 0 ] . click ( ) } }
} )
} , destroyKeyboard : function ( ) { this . $slider . off ( 'focus.' + NS ) ; this . $slider . off ( 'blur.' + NS ) ; $ ( document ) . off ( 'keydown.' + this . uniqueId + '.' + NS ) } , keyboardDefaults : { keyboard : true , keyboardOnlyOnFocus : false }
} ; $ . SliderPro . addModule ( 'Keyboard' , Keyboard )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'FullScreen.' + $ . SliderPro . namespace ; var FullScreen = {
isFullScreen : false , $fullScreenButton : null , sizeBeforeFullScreen : { } , initFullScreen : function ( ) {
if ( ! ( document . fullscreenEnabled || document . webkitFullscreenEnabled || document . mozFullScreenEnabled || document . msFullscreenEnabled ) ) { return }
this . on ( 'update.' + NS , $ . proxy ( this . _fullScreenOnUpdate , this ) )
} , _fullScreenOnUpdate : function ( ) {
if ( this . settings . fullScreen === true && this . $fullScreenButton === null ) { this . _addFullScreen ( ) } else if ( this . settings . fullScreen === false && this . $fullScreenButton !== null ) { this . _removeFullScreen ( ) }
if ( this . settings . fullScreen === true ) { if ( this . settings . fadeFullScreen === true ) { this . $fullScreenButton . addClass ( 'sp-fade-full-screen' ) } else if ( this . settings . fadeFullScreen === false ) { this . $fullScreenButton . removeClass ( 'sp-fade-full-screen' ) } }
} , _addFullScreen : function ( ) { this . $fullScreenButton = $ ( '<div class="sp-full-screen-button"></div>' ) . appendTo ( this . $slider ) ; this . $fullScreenButton . on ( 'click.' + NS , $ . proxy ( this . _onFullScreenButtonClick , this ) ) ; document . addEventListener ( 'fullscreenchange' , $ . proxy ( this . _onFullScreenChange , this ) ) ; document . addEventListener ( 'mozfullscreenchange' , $ . proxy ( this . _onFullScreenChange , this ) ) ; document . addEventListener ( 'webkitfullscreenchange' , $ . proxy ( this . _onFullScreenChange , this ) ) ; document . addEventListener ( 'MSFullscreenChange' , $ . proxy ( this . _onFullScreenChange , this ) ) } , _removeFullScreen : function ( ) { if ( this . $fullScreenButton !== null ) { this . $fullScreenButton . off ( 'click.' + NS ) ; this . $fullScreenButton . remove ( ) ; this . $fullScreenButton = null ; document . removeEventListener ( 'fullscreenchange' , this . _onFullScreenChange ) ; document . removeEventListener ( 'mozfullscreenchange' , this . _onFullScreenChange ) ; document . removeEventListener ( 'webkitfullscreenchange' , this . _onFullScreenChange ) ; document . removeEventListener ( 'MSFullscreenChange' , this . _onFullScreenChange ) } } , _onFullScreenButtonClick : function ( ) { if ( this . isFullScreen === false ) { if ( this . instance . requestFullScreen ) { this . instance . requestFullScreen ( ) } else if ( this . instance . mozRequestFullScreen ) { this . instance . mozRequestFullScreen ( ) } else if ( this . instance . webkitRequestFullScreen ) { this . instance . webkitRequestFullScreen ( ) } else if ( this . instance . msRequestFullscreen ) { this . instance . msRequestFullscreen ( ) } } else { if ( document . exitFullScreen ) { document . exitFullScreen ( ) } else if ( document . mozCancelFullScreen ) { document . mozCancelFullScreen ( ) } else if ( document . webkitCancelFullScreen ) { document . webkitCancelFullScreen ( ) } else if ( document . msExitFullscreen ) { document . msExitFullscreen ( ) } } } , _onFullScreenChange : function ( ) {
this . isFullScreen = document . fullscreenElement || document . webkitFullscreenElement || document . mozFullScreenElement || document . msFullscreenElement ? true : false ; if ( this . isFullScreen === true ) { this . sizeBeforeFullScreen = { forceSize : this . settings . forceSize , autoHeight : this . settings . autoHeight } ; this . $slider . addClass ( 'sp-full-screen' ) ; this . settings . forceSize = 'fullWindow' ; this . settings . autoHeight = false } else { this . $slider . css ( 'margin' , '' ) ; this . $slider . removeClass ( 'sp-full-screen' ) ; this . settings . forceSize = this . sizeBeforeFullScreen . forceSize ; this . settings . autoHeight = this . sizeBeforeFullScreen . autoHeight }
this . resize ( )
} , destroyFullScreen : function ( ) { this . off ( 'update.' + NS ) ; this . _removeFullScreen ( ) } , fullScreenDefaults : { fullScreen : false , fadeFullScreen : true }
} ; $ . SliderPro . addModule ( 'FullScreen' , FullScreen )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Buttons.' + $ . SliderPro . namespace ; var Buttons = {
$buttons : null , initButtons : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _buttonsOnUpdate , this ) ) } , _buttonsOnUpdate : function ( ) { this . $buttons = this . $slider . find ( '.sp-buttons' ) ; if ( this . settings . buttons === true && this . getTotalSlides ( ) > 1 && this . $buttons . length === 0 ) { this . _createButtons ( ) } else if ( this . settings . buttons === true && this . getTotalSlides ( ) !== this . $buttons . find ( '.sp-button' ) . length && this . $buttons . length !== 0 ) { this . _adjustButtons ( ) } else if ( this . settings . buttons === false || ( this . getTotalSlides ( ) <= 1 && this . $buttons . length !== 0 ) ) { this . _removeButtons ( ) } } , _createButtons : function ( ) {
var that = this ; this . $buttons = $ ( '<div class="sp-buttons"></div>' ) . appendTo ( this . $slider ) ; for ( var i = 0 ; i < this . getTotalSlides ( ) ; i ++ ) { $ ( '<div class="sp-button"></div>' ) . appendTo ( this . $buttons ) }
this . $buttons . on ( 'click.' + NS , '.sp-button' , function ( ) { that . gotoSlide ( $ ( this ) . index ( ) ) } ) ; this . $buttons . find ( '.sp-button' ) . eq ( this . selectedSlideIndex ) . addClass ( 'sp-selected-button' ) ; this . on ( 'gotoSlide.' + NS , function ( event ) { that . $buttons . find ( '.sp-selected-button' ) . removeClass ( 'sp-selected-button' ) ; that . $buttons . find ( '.sp-button' ) . eq ( event . index ) . addClass ( 'sp-selected-button' ) } ) ; this . $slider . addClass ( 'sp-has-buttons' )
} , _adjustButtons : function ( ) {
this . $buttons . empty ( ) ; for ( var i = 0 ; i < this . getTotalSlides ( ) ; i ++ ) { $ ( '<div class="sp-button"></div>' ) . appendTo ( this . $buttons ) }
this . $buttons . find ( '.sp-selected-button' ) . removeClass ( 'sp-selected-button' ) ; this . $buttons . find ( '.sp-button' ) . eq ( this . selectedSlideIndex ) . addClass ( 'sp-selected-button' )
} , _removeButtons : function ( ) { this . $buttons . off ( 'click.' + NS , '.sp-button' ) ; this . off ( 'gotoSlide.' + NS ) ; this . $buttons . remove ( ) ; this . $slider . removeClass ( 'sp-has-buttons' ) } , destroyButtons : function ( ) { this . _removeButtons ( ) ; this . off ( 'update.' + NS ) } , buttonsDefaults : { buttons : true }
} ; $ . SliderPro . addModule ( 'Buttons' , Buttons )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Arrows.' + $ . SliderPro . namespace ; var Arrows = {
$arrows : null , $previousArrow : null , $nextArrow : null , initArrows : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _arrowsOnUpdate , this ) ) ; this . on ( 'gotoSlide.' + NS , $ . proxy ( this . _checkArrowsVisibility , this ) ) } , _arrowsOnUpdate : function ( ) {
var that = this ; if ( this . settings . arrows === true && this . $arrows === null ) { this . $arrows = $ ( '<div class="sp-arrows"></div>' ) . appendTo ( this . $slidesContainer ) ; this . $previousArrow = $ ( '<div class="sp-arrow sp-previous-arrow"></div>' ) . appendTo ( this . $arrows ) ; this . $nextArrow = $ ( '<div class="sp-arrow sp-next-arrow"></div>' ) . appendTo ( this . $arrows ) ; this . $previousArrow . on ( 'click.' + NS , function ( ) { that . previousSlide ( ) } ) ; this . $nextArrow . on ( 'click.' + NS , function ( ) { that . nextSlide ( ) } ) ; this . _checkArrowsVisibility ( ) } else if ( this . settings . arrows === false && this . $arrows !== null ) { this . _removeArrows ( ) }
if ( this . settings . arrows === true ) { if ( this . settings . fadeArrows === true ) { this . $arrows . addClass ( 'sp-fade-arrows' ) } else if ( this . settings . fadeArrows === false ) { this . $arrows . removeClass ( 'sp-fade-arrows' ) } }
} , _checkArrowsVisibility : function ( ) {
if ( this . settings . arrows === false || this . settings . loop === true ) { return }
if ( this . selectedSlideIndex === 0 ) { this . $previousArrow . css ( 'display' , 'none' ) } else { this . $previousArrow . css ( 'display' , 'block' ) }
if ( this . selectedSlideIndex === this . getTotalSlides ( ) - 1 ) { this . $nextArrow . css ( 'display' , 'none' ) } else { this . $nextArrow . css ( 'display' , 'block' ) }
} , _removeArrows : function ( ) { if ( this . $arrows !== null ) { this . $previousArrow . off ( 'click.' + NS ) ; this . $nextArrow . off ( 'click.' + NS ) ; this . $arrows . remove ( ) ; this . $arrows = null } } , destroyArrows : function ( ) { this . _removeArrows ( ) ; this . off ( 'update.' + NS ) ; this . off ( 'gotoSlide.' + NS ) } , arrowsDefaults : { arrows : false , fadeArrows : true }
} ; $ . SliderPro . addModule ( 'Arrows' , Arrows )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'ThumbnailTouchSwipe.' + $ . SliderPro . namespace ; var ThumbnailTouchSwipe = {
thumbnailTouchStartPoint : { x : 0 , y : 0 } , thumbnailTouchEndPoint : { x : 0 , y : 0 } , thumbnailTouchDistance : { x : 0 , y : 0 } , thumbnailTouchStartPosition : 0 , isThumbnailTouchMoving : false , isThumbnailTouchSwipe : false , thumbnailTouchSwipeEvents : { startEvent : '' , moveEvent : '' , endEvent : '' } , initThumbnailTouchSwipe : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _thumbnailTouchSwipeOnUpdate , this ) ) } , _thumbnailTouchSwipeOnUpdate : function ( ) {
if ( this . isThumbnailScroller === false ) { return }
if ( this . settings . thumbnailTouchSwipe === true && this . isThumbnailTouchSwipe === false ) { this . isThumbnailTouchSwipe = true ; this . thumbnailTouchSwipeEvents . startEvent = 'touchstart' + '.' + NS + ' mousedown' + '.' + NS ; this . thumbnailTouchSwipeEvents . moveEvent = 'touchmove' + '.' + NS + ' mousemove' + '.' + NS ; this . thumbnailTouchSwipeEvents . endEvent = 'touchend' + '.' + this . uniqueId + '.' + NS + ' mouseup' + '.' + this . uniqueId + '.' + NS ; this . $thumbnails . on ( this . thumbnailTouchSwipeEvents . startEvent , $ . proxy ( this . _onThumbnailTouchStart , this ) ) ; this . $thumbnails . on ( 'dragstart.' + NS , function ( event ) { event . preventDefault ( ) } ) ; this . $thumbnails . addClass ( 'sp-grab' ) }
$ . each ( this . thumbnails , function ( index , thumbnail ) { thumbnail . off ( 'thumbnailClick' ) } )
} , _onThumbnailTouchStart : function ( event ) {
if ( $ ( event . target ) . closest ( '.sp-selectable' ) . length >= 1 ) { return }
var that = this , eventObject = typeof event . originalEvent . touches !== 'undefined' ? event . originalEvent . touches [ 0 ] : event . originalEvent ; if ( typeof event . originalEvent . touches === 'undefined' ) { event . preventDefault ( ) }
$ ( event . target ) . parents ( '.sp-thumbnail-container' ) . find ( 'a' ) . one ( 'click.' + NS , function ( event ) { event . preventDefault ( ) } ) ; this . thumbnailTouchStartPoint . x = eventObject . pageX || eventObject . clientX ; this . thumbnailTouchStartPoint . y = eventObject . pageY || eventObject . clientY ; this . thumbnailTouchStartPosition = this . thumbnailsPosition ; this . thumbnailTouchDistance . x = this . thumbnailTouchDistance . y = 0 ; if ( this . $thumbnails . hasClass ( 'sp-animated' ) ) { this . isThumbnailTouchMoving = true ; this . _stopThumbnailsMovement ( ) ; this . thumbnailTouchStartPosition = this . thumbnailsPosition }
this . $thumbnails . on ( this . thumbnailTouchSwipeEvents . moveEvent , $ . proxy ( this . _onThumbnailTouchMove , this ) ) ; $ ( document ) . on ( this . thumbnailTouchSwipeEvents . endEvent , $ . proxy ( this . _onThumbnailTouchEnd , this ) ) ; this . $thumbnails . removeClass ( 'sp-grab' ) . addClass ( 'sp-grabbing' ) ; this . $thumbnailsContainer . addClass ( 'sp-swiping' )
} , _onThumbnailTouchMove : function ( event ) {
var eventObject = typeof event . originalEvent . touches !== 'undefined' ? event . originalEvent . touches [ 0 ] : event . originalEvent ; this . isThumbnailTouchMoving = true ; this . thumbnailTouchEndPoint . x = eventObject . pageX || eventObject . clientX ; this . thumbnailTouchEndPoint . y = eventObject . pageY || eventObject . clientY ; this . thumbnailTouchDistance . x = this . thumbnailTouchEndPoint . x - this . thumbnailTouchStartPoint . x ; this . thumbnailTouchDistance . y = this . thumbnailTouchEndPoint . y - this . thumbnailTouchStartPoint . y ; var distance = this . thumbnailsOrientation === 'horizontal' ? this . thumbnailTouchDistance . x : this . thumbnailTouchDistance . y , oppositeDistance = this . thumbnailsOrientation === 'horizontal' ? this . thumbnailTouchDistance . y : this . thumbnailTouchDistance . x ; if ( Math . abs ( distance ) > Math . abs ( oppositeDistance ) ) { event . preventDefault ( ) } else { return }
if ( this . thumbnailsPosition >= 0 ) { var infOffset = - this . thumbnailTouchStartPosition ; distance = infOffset + ( distance - infOffset ) * 0.2 } else if ( this . thumbnailsPosition <= - this . thumbnailsSize + this . thumbnailsContainerSize ) { var supOffset = this . thumbnailsSize - this . thumbnailsContainerSize + this . thumbnailTouchStartPosition ; distance = - supOffset + ( distance + supOffset ) * 0.2 }
this . _moveThumbnailsTo ( this . thumbnailTouchStartPosition + distance , true )
} , _onThumbnailTouchEnd : function ( event ) {
var that = this , thumbnailTouchDistance = this . thumbnailsOrientation === 'horizontal' ? this . thumbnailTouchDistance . x : this . thumbnailTouchDistance . y ; this . $thumbnails . off ( this . thumbnailTouchSwipeEvents . moveEvent ) ; $ ( document ) . off ( this . thumbnailTouchSwipeEvents . endEvent ) ; this . $thumbnails . removeClass ( 'sp-grabbing' ) . addClass ( 'sp-grab' ) ; if ( this . isThumbnailTouchMoving === false || this . isThumbnailTouchMoving === true && Math . abs ( this . thumbnailTouchDistance . x ) < 10 && Math . abs ( this . thumbnailTouchDistance . y ) < 10 ) {
var targetThumbnail = $ ( event . target ) . hasClass ( 'sp-thumbnail-container' ) ? $ ( event . target ) : $ ( event . target ) . parents ( '.sp-thumbnail-container' ) , index = targetThumbnail . index ( ) ; if ( $ ( event . target ) . parents ( 'a' ) . length !== 0 ) { $ ( event . target ) . parents ( 'a' ) . off ( 'click.' + NS ) ; this . $thumbnailsContainer . removeClass ( 'sp-swiping' ) } else if ( index !== this . selectedThumbnailIndex && index !== - 1 ) { this . gotoSlide ( index ) }
return
}
this . isThumbnailTouchMoving = false ; $ ( event . target ) . parents ( '.sp-thumbnail' ) . one ( 'click' , function ( event ) { event . preventDefault ( ) } ) ; setTimeout ( function ( ) { that . $thumbnailsContainer . removeClass ( 'sp-swiping' ) } , 1 ) ; if ( this . thumbnailsPosition > 0 ) { this . _moveThumbnailsTo ( 0 ) } else if ( this . thumbnailsPosition < this . thumbnailsContainerSize - this . thumbnailsSize ) { this . _moveThumbnailsTo ( this . thumbnailsContainerSize - this . thumbnailsSize ) }
this . trigger ( { type : 'thumbnailsMoveComplete' } ) ; if ( $ . isFunction ( this . settings . thumbnailsMoveComplete ) ) { this . settings . thumbnailsMoveComplete . call ( this , { type : 'thumbnailsMoveComplete' } ) }
} , destroyThumbnailTouchSwipe : function ( ) {
this . off ( 'update.' + NS ) ; if ( this . isThumbnailScroller === false ) { return }
this . $thumbnails . off ( this . thumbnailTouchSwipeEvents . startEvent ) ; this . $thumbnails . off ( this . thumbnailTouchSwipeEvents . moveEvent ) ; this . $thumbnails . off ( 'dragstart.' + NS ) ; $ ( document ) . off ( this . thumbnailTouchSwipeEvents . endEvent ) ; this . $thumbnails . removeClass ( 'sp-grab' )
} , thumbnailTouchSwipeDefaults : { thumbnailTouchSwipe : true }
} ; $ . SliderPro . addModule ( 'ThumbnailTouchSwipe' , ThumbnailTouchSwipe )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'ThumbnailArrows.' + $ . SliderPro . namespace ; var ThumbnailArrows = {
$thumbnailArrows : null , $previousThumbnailArrow : null , $nextThumbnailArrow : null , initThumbnailArrows : function ( ) { var that = this ; this . on ( 'update.' + NS , $ . proxy ( this . _thumbnailArrowsOnUpdate , this ) ) ; this . on ( 'sliderResize.' + NS + ' ' + 'thumbnailsMoveComplete.' + NS , function ( ) { if ( that . isThumbnailScroller === true && that . settings . thumbnailArrows === true ) { that . _checkThumbnailArrowsVisibility ( ) } } ) } , _thumbnailArrowsOnUpdate : function ( ) {
var that = this ; if ( this . isThumbnailScroller === false ) { return }
if ( this . settings . thumbnailArrows === true && this . $thumbnailArrows === null ) { this . $thumbnailArrows = $ ( '<div class="sp-thumbnail-arrows"></div>' ) . appendTo ( this . $thumbnailsContainer ) ; this . $previousThumbnailArrow = $ ( '<div class="sp-thumbnail-arrow sp-previous-thumbnail-arrow"></div>' ) . appendTo ( this . $thumbnailArrows ) ; this . $nextThumbnailArrow = $ ( '<div class="sp-thumbnail-arrow sp-next-thumbnail-arrow"></div>' ) . appendTo ( this . $thumbnailArrows ) ; this . $previousThumbnailArrow . on ( 'click.' + NS , function ( ) { var previousPosition = Math . min ( 0 , that . thumbnailsPosition + that . thumbnailsContainerSize ) ; that . _moveThumbnailsTo ( previousPosition ) } ) ; this . $nextThumbnailArrow . on ( 'click.' + NS , function ( ) { var nextPosition = Math . max ( that . thumbnailsContainerSize - that . thumbnailsSize , that . thumbnailsPosition - that . thumbnailsContainerSize ) ; that . _moveThumbnailsTo ( nextPosition ) } ) } else if ( this . settings . thumbnailArrows === false && this . $thumbnailArrows !== null ) { this . _removeThumbnailArrows ( ) }
if ( this . settings . thumbnailArrows === true ) {
if ( this . settings . fadeThumbnailArrows === true ) { this . $thumbnailArrows . addClass ( 'sp-fade-thumbnail-arrows' ) } else if ( this . settings . fadeThumbnailArrows === false ) { this . $thumbnailArrows . removeClass ( 'sp-fade-thumbnail-arrows' ) }
this . _checkThumbnailArrowsVisibility ( )
}
} , _checkThumbnailArrowsVisibility : function ( ) {
if ( this . thumbnailsPosition === 0 ) { this . $previousThumbnailArrow . css ( 'display' , 'none' ) } else { this . $previousThumbnailArrow . css ( 'display' , 'block' ) }
if ( this . thumbnailsPosition === this . thumbnailsContainerSize - this . thumbnailsSize ) { this . $nextThumbnailArrow . css ( 'display' , 'none' ) } else { this . $nextThumbnailArrow . css ( 'display' , 'block' ) }
} , _removeThumbnailArrows : function ( ) { if ( this . $thumbnailArrows !== null ) { this . $previousThumbnailArrow . off ( 'click.' + NS ) ; this . $nextThumbnailArrow . off ( 'click.' + NS ) ; this . $thumbnailArrows . remove ( ) ; this . $thumbnailArrows = null } } , destroyThumbnailArrows : function ( ) { this . _removeThumbnailArrows ( ) ; this . off ( 'update.' + NS ) ; this . off ( 'sliderResize.' + NS ) ; this . off ( 'thumbnailsMoveComplete.' + NS ) } , thumbnailArrowsDefaults : { thumbnailArrows : false , fadeThumbnailArrows : true }
} ; $ . SliderPro . addModule ( 'ThumbnailArrows' , ThumbnailArrows )
} ) ( window , jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'Video.' + $ . SliderPro . namespace ; var Video = {
firstInit : false , initVideo : function ( ) { this . on ( 'update.' + NS , $ . proxy ( this . _videoOnUpdate , this ) ) ; this . on ( 'gotoSlideComplete.' + NS , $ . proxy ( this . _videoOnGotoSlideComplete , this ) ) } , _videoOnUpdate : function ( ) { var that = this ; this . $slider . find ( '.sp-video' ) . not ( 'a, [data-video-init]' ) . each ( function ( ) { var video = $ ( this ) ; that . _initVideo ( video ) } ) ; this . $slider . find ( 'a.sp-video' ) . not ( '[data-video-preinit]' ) . each ( function ( ) { var video = $ ( this ) ; that . _preinitVideo ( video ) } ) ; if ( this . firstInit === false ) { this . firstInit = true ; this . _videoOnGotoSlideComplete ( { index : this . selectedSlideIndex , previousIndex : - 1 } ) } } , _initVideo : function ( video ) {
var that = this ; video . attr ( 'data-video-init' , true ) . videoController ( ) ; video . on ( 'videoPlay.' + NS , function ( ) {
if ( that . settings . playVideoAction === 'stopAutoplay' && typeof that . stopAutoplay !== 'undefined' ) { that . stopAutoplay ( ) ; that . settings . autoplay = false }
var eventObject = { type : 'videoPlay' , video : video } ; that . trigger ( eventObject ) ; if ( $ . isFunction ( that . settings . videoPlay ) ) { that . settings . videoPlay . call ( that , eventObject ) }
} ) ; video . on ( 'videoPause.' + NS , function ( ) {
if ( that . settings . pauseVideoAction === 'startAutoplay' && typeof that . startAutoplay !== 'undefined' ) { that . startAutoplay ( ) ; that . settings . autoplay = true }
var eventObject = { type : 'videoPause' , video : video } ; that . trigger ( eventObject ) ; if ( $ . isFunction ( that . settings . videoPause ) ) { that . settings . videoPause . call ( that , eventObject ) }
} ) ; video . on ( 'videoEnded.' + NS , function ( ) {
if ( that . settings . endVideoAction === 'startAutoplay' && typeof that . startAutoplay !== 'undefined' ) { that . startAutoplay ( ) ; that . settings . autoplay = true } else if ( that . settings . endVideoAction === 'nextSlide' ) { that . nextSlide ( ) } else if ( that . settings . endVideoAction === 'replayVideo' ) { video . videoController ( 'replay' ) }
var eventObject = { type : 'videoEnd' , video : video } ; that . trigger ( eventObject ) ; if ( $ . isFunction ( that . settings . videoEnd ) ) { that . settings . videoEnd . call ( that , eventObject ) }
} )
} , _preinitVideo : function ( video ) {
var that = this ; video . attr ( 'data-video-preinit' , true ) ; video . on ( 'click.' + NS , function ( event ) {
if ( that . $slider . hasClass ( 'sp-swiping' ) ) { return }
event . preventDefault ( ) ; var href = video . attr ( 'href' ) , iframe , provider , regExp , match , id , src , videoAttributes , videoWidth = video . children ( 'img' ) . attr ( 'width' ) || video . children ( 'img' ) . width ( ) , videoHeight = video . children ( 'img' ) . attr ( 'height' ) || video . children ( 'img' ) . height ( ) ; if ( href . indexOf ( 'youtube' ) !== - 1 || href . indexOf ( 'youtu.be' ) !== - 1 ) { provider = 'youtube' } else if ( href . indexOf ( 'vimeo' ) !== - 1 ) { provider = 'vimeo' }
regExp = provider === 'youtube' ? /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ : /http:\/\/(www\.)?vimeo.com\/(\d+)/ ; match = href . match ( regExp ) ; id = match [ 2 ] ; src = provider === 'youtube' ? '//www.youtube.com/embed/' + id + '?enablejsapi=1&wmode=opaque' : '//player.vimeo.com/video/' + id + '?api=1' ; videoAttributes = href . split ( '?' ) [ 1 ] ; if ( typeof videoAttributes !== 'undefined' ) { videoAttributes = videoAttributes . split ( '&' ) ; $ . each ( videoAttributes , function ( index , value ) { if ( value . indexOf ( id ) === - 1 ) { src += '&' + value } } ) }
iframe = $ ( '<iframe></iframe>' ) . attr ( { 'src' : src , 'width' : videoWidth , 'height' : videoHeight , 'class' : video . attr ( 'class' ) , 'frameborder' : 0 , 'allowfullscreen' : 'allowfullscreen' } ) . insertBefore ( video ) ; that . _initVideo ( iframe ) ; iframe . videoController ( 'play' ) ; video . css ( 'display' , 'none' )
} )
} , _videoOnGotoSlideComplete : function ( event ) {
var previousVideo = this . $slides . find ( '.sp-slide' ) . eq ( event . previousIndex ) . find ( '.sp-video[data-video-init]' ) ; if ( event . previousIndex !== - 1 && previousVideo . length !== 0 ) { if ( this . settings . leaveVideoAction === 'stopVideo' ) { previousVideo . videoController ( 'stop' ) } else if ( this . settings . leaveVideoAction === 'pauseVideo' ) { previousVideo . videoController ( 'pause' ) } else if ( this . settings . leaveVideoAction === 'removeVideo' ) { if ( previousVideo . siblings ( 'a.sp-video' ) . length !== 0 ) { previousVideo . siblings ( 'a.sp-video' ) . css ( 'display' , '' ) ; previousVideo . videoController ( 'destroy' ) ; previousVideo . remove ( ) } else { previousVideo . videoController ( 'stop' ) } } }
if ( this . settings . reachVideoAction === 'playVideo' ) { var loadedVideo = this . $slides . find ( '.sp-slide' ) . eq ( event . index ) . find ( '.sp-video[data-video-init]' ) , unloadedVideo = this . $slides . find ( '.sp-slide' ) . eq ( event . index ) . find ( '.sp-video[data-video-preinit]' ) ; if ( loadedVideo . length !== 0 ) { loadedVideo . videoController ( 'play' ) } else if ( unloadedVideo . length !== 0 ) { unloadedVideo . trigger ( 'click.' + NS ) } }
} , destroyVideo : function ( ) { this . $slider . find ( '.sp-video[ data-video-preinit ]' ) . each ( function ( ) { var video = $ ( this ) ; video . removeAttr ( 'data-video-preinit' ) ; video . off ( 'click.' + NS ) } ) ; this . $slider . find ( '.sp-video[ data-video-init ]' ) . each ( function ( ) { var video = $ ( this ) ; video . removeAttr ( 'data-video-init' ) ; video . off ( 'Video' ) ; video . videoController ( 'destroy' ) } ) ; this . off ( 'update.' + NS ) ; this . off ( 'gotoSlideComplete.' + NS ) } , videoDefaults : { reachVideoAction : 'none' , leaveVideoAction : 'pauseVideo' , playVideoAction : 'stopAutoplay' , pauseVideoAction : 'none' , endVideoAction : 'none' , videoPlay : function ( ) { } , videoPause : function ( ) { } , videoEnd : function ( ) { } }
} ; $ . SliderPro . addModule ( 'Video' , Video )
} ) ( window , jQuery ) ; ( function ( $ ) {
"use strict" ; var isIOS = window . navigator . userAgent . match ( /(iPad|iPhone|iPod)/g ) ? true : false ; var VideoController = function ( instance , options ) { this . $video = $ ( instance ) ; this . options = options ; this . settings = { } ; this . player = null ; this . _init ( ) } ; VideoController . prototype = {
_init : function ( ) {
this . settings = $ . extend ( { } , this . defaults , this . options ) ; var that = this , players = $ . VideoController . players , videoID = this . $video . attr ( 'id' ) ; for ( var name in players ) { if ( typeof players [ name ] !== 'undefined' && players [ name ] . isType ( this . $video ) ) { this . player = new players [ name ] ( this . $video ) ; break } }
if ( this . player === null ) { return }
var events = [ 'ready' , 'start' , 'play' , 'pause' , 'ended' ] ; $ . each ( events , function ( index , element ) { var event = 'video' + element . charAt ( 0 ) . toUpperCase ( ) + element . slice ( 1 ) ; that . player . on ( element , function ( ) { that . trigger ( { type : event , video : videoID } ) ; if ( $ . isFunction ( that . settings [ event ] ) ) { that . settings [ event ] . call ( that , { type : event , video : videoID } ) } } ) } )
} , play : function ( ) {
if ( isIOS === true && this . player . isStarted ( ) === false || this . player . getState ( ) === 'playing' ) { return }
this . player . play ( )
} , stop : function ( ) {
if ( isIOS === true && this . player . isStarted ( ) === false || this . player . getState ( ) === 'stopped' ) { return }
this . player . stop ( )
} , pause : function ( ) {
if ( isIOS === true && this . player . isStarted ( ) === false || this . player . getState ( ) === 'paused' ) { return }
this . player . pause ( )
} , replay : function ( ) {
if ( isIOS === true && this . player . isStarted ( ) === false ) { return }
this . player . replay ( )
} , on : function ( type , callback ) { return this . $video . on ( type , callback ) } , off : function ( type ) { return this . $video . off ( type ) } , trigger : function ( data ) { return this . $video . triggerHandler ( data ) } , destroy : function ( ) {
if ( this . player . isStarted ( ) === true ) { this . stop ( ) }
this . player . off ( 'ready' ) ; this . player . off ( 'start' ) ; this . player . off ( 'play' ) ; this . player . off ( 'pause' ) ; this . player . off ( 'ended' ) ; this . $video . removeData ( 'videoController' )
} , defaults : { videoReady : function ( ) { } , videoStart : function ( ) { } , videoPlay : function ( ) { } , videoPause : function ( ) { } , videoEnded : function ( ) { } }
} ; $ . VideoController = { players : { } , addPlayer : function ( name , player ) { this . players [ name ] = player } } ; $ . fn . videoController = function ( options ) { var args = Array . prototype . slice . call ( arguments , 1 ) ; return this . each ( function ( ) { if ( typeof $ ( this ) . data ( 'videoController' ) === 'undefined' ) { var newInstance = new VideoController ( this , options ) ; $ ( this ) . data ( 'videoController' , newInstance ) } else if ( typeof options !== 'undefined' ) { var currentInstance = $ ( this ) . data ( 'videoController' ) ; if ( typeof currentInstance [ options ] === 'function' ) { currentInstance [ options ] . apply ( currentInstance , args ) } else { $ . error ( options + ' does not exist in videoController.' ) } } } ) } ; var Video = function ( video ) { this . $video = video ; this . player = null ; this . ready = false ; this . started = false ; this . state = '' ; this . events = $ ( { } ) ; this . _init ( ) } ; Video . prototype = { _init : function ( ) { } , play : function ( ) { } , pause : function ( ) { } , stop : function ( ) { } , replay : function ( ) { } , isType : function ( ) { } , isReady : function ( ) { return this . ready } , isStarted : function ( ) { return this . started } , getState : function ( ) { return this . state } , on : function ( type , callback ) { return this . events . on ( type , callback ) } , off : function ( type ) { return this . events . off ( type ) } , trigger : function ( data ) { return this . events . triggerHandler ( data ) } } ; var YoutubeVideoHelper = { youtubeAPIAdded : false , youtubeVideos : [ ] } ; var YoutubeVideo = function ( video ) { this . init = false ; var youtubeAPILoaded = window . YT && window . YT . Player ; if ( typeof youtubeAPILoaded !== 'undefined' ) { Video . call ( this , video ) } else { YoutubeVideoHelper . youtubeVideos . push ( { 'video' : video , 'scope' : this } ) ; if ( YoutubeVideoHelper . youtubeAPIAdded === false ) { YoutubeVideoHelper . youtubeAPIAdded = true ; var tag = document . createElement ( 'script' ) ; tag . src = "//www.youtube.com/player_api" ; var firstScriptTag = document . getElementsByTagName ( 'script' ) [ 0 ] ; firstScriptTag . parentNode . insertBefore ( tag , firstScriptTag ) ; window . onYouTubePlayerAPIReady = function ( ) { $ . each ( YoutubeVideoHelper . youtubeVideos , function ( index , element ) { Video . call ( element . scope , element . video ) } ) } } } } ; YoutubeVideo . prototype = new Video ( ) ; YoutubeVideo . prototype . constructor = YoutubeVideo ; $ . VideoController . addPlayer ( 'YoutubeVideo' , YoutubeVideo ) ; YoutubeVideo . isType = function ( video ) {
if ( video . is ( 'iframe' ) ) { var src = video . attr ( 'src' ) ; if ( src . indexOf ( 'youtube.com' ) !== - 1 || src . indexOf ( 'youtu.be' ) !== - 1 ) { return true } }
return false
} ; YoutubeVideo . prototype . _init = function ( ) { this . init = true ; this . _setup ( ) } ; YoutubeVideo . prototype . _setup = function ( ) {
var that = this ; this . player = new YT . Player ( this . $video [ 0 ] , {
events : {
'onReady' : function ( ) { that . trigger ( { type : 'ready' } ) ; that . ready = true } , 'onStateChange' : function ( event ) {
switch ( event . data ) {
case YT . PlayerState . PLAYING : if ( that . started === false ) { that . started = true ; that . trigger ( { type : 'start' } ) }
that . state = 'playing' ; that . trigger ( { type : 'play' } ) ; break ; case YT . PlayerState . PAUSED : that . state = 'paused' ; that . trigger ( { type : 'pause' } ) ; break ; case YT . PlayerState . ENDED : that . state = 'ended' ; that . trigger ( { type : 'ended' } ) ; break
}
}
}
} )
} ; YoutubeVideo . prototype . play = function ( ) { var that = this ; if ( this . ready === true ) { this . player . playVideo ( ) } else { var timer = setInterval ( function ( ) { if ( that . ready === true ) { clearInterval ( timer ) ; that . player . playVideo ( ) } } , 100 ) } } ; YoutubeVideo . prototype . pause = function ( ) { if ( isIOS === true ) { this . stop ( ) } else { this . player . pauseVideo ( ) } } ; YoutubeVideo . prototype . stop = function ( ) { this . player . seekTo ( 1 ) ; this . player . stopVideo ( ) ; this . state = 'stopped' } ; YoutubeVideo . prototype . replay = function ( ) { this . player . seekTo ( 1 ) ; this . player . playVideo ( ) } ; YoutubeVideo . prototype . on = function ( type , callback ) { var that = this ; if ( this . init === true ) { Video . prototype . on . call ( this , type , callback ) } else { var timer = setInterval ( function ( ) { if ( that . init === true ) { clearInterval ( timer ) ; Video . prototype . on . call ( that , type , callback ) } } , 100 ) } } ; var VimeoVideoHelper = { vimeoAPIAdded : false , vimeoVideos : [ ] } ; var VimeoVideo = function ( video ) { this . init = false ; if ( typeof window . Froogaloop !== 'undefined' ) { Video . call ( this , video ) } else { VimeoVideoHelper . vimeoVideos . push ( { 'video' : video , 'scope' : this } ) ; if ( VimeoVideoHelper . vimeoAPIAdded === false ) { VimeoVideoHelper . vimeoAPIAdded = true ; var tag = document . createElement ( 'script' ) ; tag . src = "//a.vimeocdn.com/js/froogaloop2.min.js" ; var firstScriptTag = document . getElementsByTagName ( 'script' ) [ 0 ] ; firstScriptTag . parentNode . insertBefore ( tag , firstScriptTag ) ; var checkVimeoAPITimer = setInterval ( function ( ) { if ( typeof window . Froogaloop !== 'undefined' ) { clearInterval ( checkVimeoAPITimer ) ; $ . each ( VimeoVideoHelper . vimeoVideos , function ( index , element ) { Video . call ( element . scope , element . video ) } ) } } , 100 ) } } } ; VimeoVideo . prototype = new Video ( ) ; VimeoVideo . prototype . constructor = VimeoVideo ; $ . VideoController . addPlayer ( 'VimeoVideo' , VimeoVideo ) ; VimeoVideo . isType = function ( video ) {
if ( video . is ( 'iframe' ) ) { var src = video . attr ( 'src' ) ; if ( src . indexOf ( 'vimeo.com' ) !== - 1 ) { return true } }
return false
} ; VimeoVideo . prototype . _init = function ( ) { this . init = true ; this . _setup ( ) } ; VimeoVideo . prototype . _setup = function ( ) {
var that = this ; this . player = $f ( this . $video [ 0 ] ) ; this . player . addEvent ( 'ready' , function ( ) {
that . ready = true ; that . trigger ( { type : 'ready' } ) ; that . player . addEvent ( 'play' , function ( ) {
if ( that . started === false ) { that . started = true ; that . trigger ( { type : 'start' } ) }
that . state = 'playing' ; that . trigger ( { type : 'play' } )
} ) ; that . player . addEvent ( 'pause' , function ( ) { that . state = 'paused' ; that . trigger ( { type : 'pause' } ) } ) ; that . player . addEvent ( 'finish' , function ( ) { that . state = 'ended' ; that . trigger ( { type : 'ended' } ) } )
} )
} ; VimeoVideo . prototype . play = function ( ) { var that = this ; if ( this . ready === true ) { this . player . api ( 'play' ) } else { var timer = setInterval ( function ( ) { if ( that . ready === true ) { clearInterval ( timer ) ; that . player . api ( 'play' ) } } , 100 ) } } ; VimeoVideo . prototype . pause = function ( ) { this . player . api ( 'pause' ) } ; VimeoVideo . prototype . stop = function ( ) { this . player . api ( 'seekTo' , 0 ) ; this . player . api ( 'pause' ) ; this . state = 'stopped' } ; VimeoVideo . prototype . replay = function ( ) { this . player . api ( 'seekTo' , 0 ) ; this . player . api ( 'play' ) } ; VimeoVideo . prototype . on = function ( type , callback ) { var that = this ; if ( this . init === true ) { Video . prototype . on . call ( this , type , callback ) } else { var timer = setInterval ( function ( ) { if ( that . init === true ) { clearInterval ( timer ) ; Video . prototype . on . call ( that , type , callback ) } } , 100 ) } } ; var HTML5Video = function ( video ) { Video . call ( this , video ) } ; HTML5Video . prototype = new Video ( ) ; HTML5Video . prototype . constructor = HTML5Video ; $ . VideoController . addPlayer ( 'HTML5Video' , HTML5Video ) ; HTML5Video . isType = function ( video ) {
if ( video . is ( 'video' ) && video . hasClass ( 'video-js' ) === false && video . hasClass ( 'sublime' ) === false ) { return true }
return false
} ; HTML5Video . prototype . _init = function ( ) {
var that = this ; this . player = this . $video [ 0 ] ; var checkVideoReady = setInterval ( function ( ) {
if ( that . player . readyState === 4 ) {
clearInterval ( checkVideoReady ) ; that . ready = true ; that . trigger ( { type : 'ready' } ) ; that . player . addEventListener ( 'play' , function ( ) {
if ( that . started === false ) { that . started = true ; that . trigger ( { type : 'start' } ) }
that . state = 'playing' ; that . trigger ( { type : 'play' } )
} ) ; that . player . addEventListener ( 'pause' , function ( ) { that . state = 'paused' ; that . trigger ( { type : 'pause' } ) } ) ; that . player . addEventListener ( 'ended' , function ( ) { that . state = 'ended' ; that . trigger ( { type : 'ended' } ) } )
}
} , 100 )
} ; HTML5Video . prototype . play = function ( ) { var that = this ; if ( this . ready === true ) { this . player . play ( ) } else { var timer = setInterval ( function ( ) { if ( that . ready === true ) { clearInterval ( timer ) ; that . player . play ( ) } } , 100 ) } } ; HTML5Video . prototype . pause = function ( ) { this . player . pause ( ) } ; HTML5Video . prototype . stop = function ( ) { this . player . currentTime = 0 ; this . player . pause ( ) ; this . state = 'stopped' } ; HTML5Video . prototype . replay = function ( ) { this . player . currentTime = 0 ; this . player . play ( ) } ; var VideoJSVideo = function ( video ) { Video . call ( this , video ) } ; VideoJSVideo . prototype = new Video ( ) ; VideoJSVideo . prototype . constructor = VideoJSVideo ; $ . VideoController . addPlayer ( 'VideoJSVideo' , VideoJSVideo ) ; VideoJSVideo . isType = function ( video ) {
if ( ( typeof video . attr ( 'data-videojs-id' ) !== 'undefined' || video . hasClass ( 'video-js' ) ) && typeof videojs !== 'undefined' ) { return true }
return false
} ; VideoJSVideo . prototype . _init = function ( ) {
var that = this , videoID = this . $video . hasClass ( 'video-js' ) ? this . $video . attr ( 'id' ) : this . $video . attr ( 'data-videojs-id' ) ; this . player = videojs ( videoID ) ; this . player . ready ( function ( ) {
that . ready = true ; that . trigger ( { type : 'ready' } ) ; that . player . on ( 'play' , function ( ) {
if ( that . started === false ) { that . started = true ; that . trigger ( { type : 'start' } ) }
that . state = 'playing' ; that . trigger ( { type : 'play' } )
} ) ; that . player . on ( 'pause' , function ( ) { that . state = 'paused' ; that . trigger ( { type : 'pause' } ) } ) ; that . player . on ( 'ended' , function ( ) { that . state = 'ended' ; that . trigger ( { type : 'ended' } ) } )
} )
} ; VideoJSVideo . prototype . play = function ( ) { this . player . play ( ) } ; VideoJSVideo . prototype . pause = function ( ) { this . player . pause ( ) } ; VideoJSVideo . prototype . stop = function ( ) { this . player . currentTime ( 0 ) ; this . player . pause ( ) ; this . state = 'stopped' } ; VideoJSVideo . prototype . replay = function ( ) { this . player . currentTime ( 0 ) ; this . player . play ( ) } ; var SublimeVideo = function ( video ) { Video . call ( this , video ) } ; SublimeVideo . prototype = new Video ( ) ; SublimeVideo . prototype . constructor = SublimeVideo ; $ . VideoController . addPlayer ( 'SublimeVideo' , SublimeVideo ) ; SublimeVideo . isType = function ( video ) {
if ( video . hasClass ( 'sublime' ) && typeof sublime !== 'undefined' ) { return true }
return false
} ; SublimeVideo . prototype . _init = function ( ) {
var that = this ; sublime . ready ( function ( ) {
that . player = sublime . player ( that . $video . attr ( 'id' ) ) ; that . ready = true ; that . trigger ( { type : 'ready' } ) ; that . player . on ( 'play' , function ( ) {
if ( that . started === false ) { that . started = true ; that . trigger ( { type : 'start' } ) }
that . state = 'playing' ; that . trigger ( { type : 'play' } )
} ) ; that . player . on ( 'pause' , function ( ) { that . state = 'paused' ; that . trigger ( { type : 'pause' } ) } ) ; that . player . on ( 'stop' , function ( ) { that . state = 'stopped' ; that . trigger ( { type : 'stop' } ) } ) ; that . player . on ( 'end' , function ( ) { that . state = 'ended' ; that . trigger ( { type : 'ended' } ) } )
} )
} ; SublimeVideo . prototype . play = function ( ) { this . player . play ( ) } ; SublimeVideo . prototype . pause = function ( ) { this . player . pause ( ) } ; SublimeVideo . prototype . stop = function ( ) { this . player . stop ( ) } ; SublimeVideo . prototype . replay = function ( ) { this . player . stop ( ) ; this . player . play ( ) } ; var JWPlayerVideo = function ( video ) { Video . call ( this , video ) } ; JWPlayerVideo . prototype = new Video ( ) ; JWPlayerVideo . prototype . constructor = JWPlayerVideo ; $ . VideoController . addPlayer ( 'JWPlayerVideo' , JWPlayerVideo ) ; JWPlayerVideo . isType = function ( video ) {
if ( ( typeof video . attr ( 'data-jwplayer-id' ) !== 'undefined' || video . hasClass ( 'jwplayer' ) || video . find ( "object[data*='jwplayer']" ) . length !== 0 ) && typeof jwplayer !== 'undefined' ) { return true }
return false
} ; JWPlayerVideo . prototype . _init = function ( ) {
var that = this , videoID ; if ( this . $video . hasClass ( 'jwplayer' ) ) { videoID = this . $video . attr ( 'id' ) } else if ( typeof this . $video . attr ( 'data-jwplayer-id' ) !== 'undefined' ) { videoID = this . $video . attr ( 'data-jwplayer-id' ) } else if ( this . $video . find ( "object[data*='jwplayer']" ) . length !== 0 ) { videoID = this . $video . find ( 'object' ) . attr ( 'id' ) }
this . player = jwplayer ( videoID ) ; this . player . onReady ( function ( ) {
that . ready = true ; that . trigger ( { type : 'ready' } ) ; that . player . onPlay ( function ( ) {
if ( that . started === false ) { that . started = true ; that . trigger ( { type : 'start' } ) }
that . state = 'playing' ; that . trigger ( { type : 'play' } )
} ) ; that . player . onPause ( function ( ) { that . state = 'paused' ; that . trigger ( { type : 'pause' } ) } ) ; that . player . onComplete ( function ( ) { that . state = 'ended' ; that . trigger ( { type : 'ended' } ) } )
} )
} ; JWPlayerVideo . prototype . play = function ( ) { this . player . play ( true ) } ; JWPlayerVideo . prototype . pause = function ( ) { this . player . pause ( true ) } ; JWPlayerVideo . prototype . stop = function ( ) { this . player . stop ( ) ; this . state = 'stopped' } ; JWPlayerVideo . prototype . replay = function ( ) { this . player . seek ( 0 ) ; this . player . play ( true ) }
} ) ( jQuery ) ; ( function ( window , $ ) {
"use strict" ; var NS = 'ThumbnailsNc.' + $ . SliderPro . namespace ; var ThumbnailsNc = {
$thumbnailsNc : null , $thumbnailsNcContainer : null , thumbnailsNc : null , selectedThumbnailNcIndex : 0 , thumbnailsNcPositionProperty : null , initThumbnailsNc : function ( ) {
var that = this ; if ( ! this . $slider . children ( '.sp-nc-thumbnails' ) . length ) { return }
this . thumbnailsNc = [ ] ; this . on ( 'update.' + NS , $ . proxy ( this . _thumbnailsOnUpdateNc , this ) ) ; this . on ( 'gotoSlide.' + NS , function ( event ) { that . _gotoThumbnailNc ( event . index ) } )
} , _thumbnailsOnUpdateNc : function ( ) {
var that = this ; if ( this . $thumbnailsNcContainer === null ) { this . $thumbnailsNcContainer = $ ( '<div class="sp-nc-thumbnails-container"></div>' ) . insertAfter ( this . $slidesContainer ) }
if ( this . $thumbnailsNc === null ) {
if ( this . $slider . find ( '.sp-nc-thumbnails' ) . length !== 0 ) {
this . $thumbnailsNc = this . $slider . find ( '.sp-nc-thumbnails' ) . appendTo ( this . $thumbnailsNcContainer ) ; if ( this . settings . shuffle === true ) {
var thumbnailsNc = this . $thumbnailsNc . find ( '.sp-nc-thumbnail' ) , shuffledThumbnails = [ ] ; $ . each ( this . shuffledIndexes , function ( index , element ) {
var $thumbnail = $ ( thumbnailsNc [ element ] ) ; if ( $thumbnail . parent ( 'a' ) . length !== 0 ) { $thumbnail = $thumbnail . parent ( 'a' ) }
shuffledThumbnails . push ( $thumbnail )
} ) ; this . $thumbnailsNc . empty ( ) . append ( shuffledThumbnails )
}
} else { this . $thumbnailsNc = $ ( '<div class="sp-nc-thumbnails"></div>' ) . appendTo ( this . $thumbnailsNcContainer ) }
}
this . $slides . find ( '.sp-nc-thumbnail' ) . each ( function ( index ) {
var $thumbnail = $ ( this ) , thumbnailIndex = $thumbnail . parents ( '.sp-slide' ) . index ( ) , lastThumbnailIndex = that . $thumbnailsNc . find ( '.sp-nc-thumbnail' ) . length - 1 ; if ( $thumbnail . parent ( 'a' ) . length !== 0 ) { $thumbnail = $thumbnail . parent ( 'a' ) }
if ( thumbnailIndex > lastThumbnailIndex ) { $thumbnail . appendTo ( that . $thumbnailsNc ) } else { $thumbnail . insertBefore ( that . $thumbnailsNc . find ( '.sp-nc-thumbnail' ) . eq ( thumbnailIndex ) ) }
} ) ; for ( var i = this . thumbnailsNc . length - 1 ; i >= 0 ; i -- ) { if ( this . $thumbnailsNc . find ( '.sp-nc-thumbnail[data-index="' + i + '"]' ) . length === 0 ) { var thumbnail = this . thumbnailsNc [ i ] ; thumbnail . destroy ( ) ; this . thumbnailsNc . splice ( i , 1 ) } }
this . $thumbnailsNc . find ( '.sp-nc-thumbnail' ) . each ( function ( index ) { var $thumbnail = $ ( this ) ; if ( typeof $thumbnail . attr ( 'data-init' ) === 'undefined' ) { that . _createThumbnailNc ( $thumbnail , index ) } else { that . thumbnailsNc [ index ] . setIndexNc ( index ) } } ) ; if ( this . settings . thumbnailPointer === true ) { this . $thumbnailsNcContainer . addClass ( 'sp-has-pointer' ) } else { this . $thumbnailsNcContainer . removeClass ( 'sp-has-pointer' ) }
this . selectedThumbnailNcIndex = this . selectedSlideIndex ; this . $thumbnailsNc . find ( '.sp-nc-thumbnail-container' ) . eq ( this . selectedThumbnailNcIndex ) . addClass ( 'sp-nc-selected-thumbnail' )
} , _createThumbnailNc : function ( element , index ) { var that = this , thumbnail = new ThumbnailNc ( element , this . $thumbnailsNc , index ) ; thumbnail . on ( 'thumbnailClick.' + NS , function ( event ) { that . gotoSlide ( event . index ) } ) ; this . thumbnailsNc . splice ( index , 0 , thumbnail ) } , _gotoThumbnailNc : function ( index ) { var previousIndex = this . selectedThumbnailNcIndex ; this . selectedThumbnailNcIndex = index ; this . $thumbnailsNc . find ( '.sp-nc-selected-thumbnail' ) . removeClass ( 'sp-nc-selected-thumbnail' ) ; this . $thumbnailsNc . find ( '.sp-nc-thumbnail-container' ) . eq ( this . selectedThumbnailNcIndex ) . addClass ( 'sp-nc-selected-thumbnail' ) ; this . trigger ( { type : 'gotoThumbnail' } ) ; if ( $ . isFunction ( this . settings . gotoThumbnail ) ) { this . settings . gotoThumbnail . call ( this , { type : 'gotoThumbnail' } ) } } , thumbnailsNcDefaults : { thumbnailWidth : 100 , thumbnailHeight : 80 , thumbnailPointer : false , gotoThumbnail : function ( ) { } , }
} ; var ThumbnailNc = function ( thumbnail , thumbnailsNc , index ) { this . $thumbnail = thumbnail ; this . $thumbnailsNc = thumbnailsNc ; this . $thumbnailContainer = null ; this . width = 0 ; this . height = 0 ; this . isImageLoaded = false ; this . setIndexNc ( index ) ; this . _init ( ) } ; ThumbnailNc . prototype = { _init : function ( ) { var that = this ; this . $thumbnail . attr ( 'data-init' , true ) ; this . $thumbnailContainer = $ ( '<div class="sp-nc-thumbnail-container"></div>' ) . appendTo ( this . $thumbnailsNc ) ; this . $thumbnail . appendTo ( this . $thumbnailContainer ) ; this . $thumbnailContainer . on ( 'click.' + NS , function ( ) { that . trigger ( { type : 'thumbnailClick.' + NS , index : that . index } ) } ) } , setIndexNc : function ( index ) { this . index = index ; this . $thumbnail . attr ( 'data-index' , this . index ) } , on : function ( type , callback ) { return this . $thumbnailContainer . on ( type , callback ) } , off : function ( type ) { return this . $thumbnailContainer . off ( type ) } , trigger : function ( data ) { return this . $thumbnailContainer . triggerHandler ( data ) } } ; $ . SliderPro . addModule ( 'ThumbnailsNc' , ThumbnailsNc )
} ) ( window , jQuery ) ; ( function ( $ ) {
$ . fn . wpexEqualHeights = function ( options ) {
var $items = this ,
$window = $ ( window ) , $targets = null ;
var $settings = $ . extend ( { children : '' , mobileBreakPoint : '' , reset : false } , options ) ;
if ( ! $ ( $settings . children ) . length ) { return }
function setHeights ( el , reset ) {
var $tallest = 0 ; if ( $settings . children ) {
var $children = el . find ( $settings . children ) . not ( '.vc_row.vc_inner .vc_column-inner' ) ;
$children . each ( function ( ) {
var $child = $ ( this ) ; if ( reset ) { $child . css ( 'height' , '' ) }
$height = $child . outerHeight ( true ) ;
if ( $child . children ( ) . length != 0 ) {
$height = 0 ;
var childs = $child . children ( ) ;
for ( var i = 0 ; i < childs . length ; i ++ ) {
$height = $height + childs . eq ( i ) . outerHeight ( true ) ;
}
}
if ( $height > $tallest ) { $tallest = $height }
if ( ! window . wpexAnimsition . equal _height ) {
$child . css ( "height" , $height + 'px' ) ;
}
} ) ;
if ( window . wpexAnimsition . equal _height ) {
$children . css ( 'height' , $tallest + 'px' )
}
}
}
$items . each ( function ( ) {
var $this = $ ( this ) ;
if ( $this . is ( window . wpexAnimsition . container _block ) ) {
setHeights ( $this , false )
} else {
$this . imagesLoaded ( function ( ) {
setHeights ( $this , false ) } )
}
} ) ;
$window . resize ( function ( ) {
$items . each ( function ( ) {
setHeights ( $ ( this ) , true )
} )
} )
}
} ( jQuery ) ) ; ( function ( $ ) {
$ . fn . extend ( {
leanerModal : function ( options ) {
function close _modal ( modal _id ) { $ ( modal _id ) . removeClass ( 'active' ) ; $ ( "#lean_overlay" ) . fadeOut ( ) ; $ ( modal _id ) . css ( { display : "none" } ) }
var defaults = { overlay : . 5 , closeButton : ".modal_close" } ; var overlay = $ ( '<div id="lean_overlay"></div>' ) ; if ( ! $ ( "#lean_overlay" ) . length ) { $ ( "body" ) . append ( overlay ) }
options = $ . extend ( defaults , options ) ; return this . each ( function ( ) { var _options = options ; $ ( this ) . on ( "click" , function ( e ) { var modal _id = _options . id ; $ ( "#lean_overlay" ) . on ( "click" , function ( ) { close _modal ( modal _id ) } ) ; $ ( _options . closeButton ) . on ( "click" , function ( ) { close _modal ( modal _id ) } ) ; var modal _height = $ ( modal _id ) . outerHeight ( ) ; var modal _width = $ ( modal _id ) . outerWidth ( ) ; $ ( "#lean_overlay" ) . css ( { display : "block" , opacity : 0 } ) ; $ ( "#lean_overlay" ) . stop ( true , true ) . fadeTo ( 200 , _options . overlay ) ; $ ( modal _id ) . css ( { display : "block" , position : "fixed" , opacity : 0 , "z-index" : 11e3 , left : 50 + "%" , "margin-left" : - ( modal _width / 2 ) + "px" } ) ; $ ( modal _id ) . stop ( true , true ) . fadeTo ( 200 , 1 ) . addClass ( 'active' ) ; return false } ) } )
}
} )
} ) ( jQuery ) ; ( function ( $ , window , document , undefined ) {
var pluginName = 'scrolly2' ; function Plugin ( element , options ) { this . $element = $ ( element ) ; this . init ( ) }
Plugin . prototype . init = function ( ) { var self = this ; this . startPosition = 0 ; this . offsetTop = this . $element . offset ( ) . top ; this . height = this . $element . outerHeight ( true ) ; this . velocity = this . $element . attr ( 'data-velocity' ) ; this . direction = this . $element . attr ( 'data-direction' ) ; $ ( window ) . bind ( 'scroll' , function ( ) { self . scrolly2 ( ) } ) } ; Plugin . prototype . scrolly2 = function ( ) {
var viewTop = $ ( window ) . scrollTop ( ) - 20 ; var viewBottom = $ ( window ) . scrollTop ( ) + $ ( window ) . height ( ) + 20 ; var elemTop = this . $element . offset ( ) . top ; var elemBottom = this . $element . offset ( ) . top + this . $element . height ( ) ; if ( elemTop >= viewBottom || elemBottom <= viewTop ) { return }
if ( this . $element . offset ( ) . top > $ ( window ) . height ( ) ) { if ( this . direction !== 'none' ) { this . startPosition = ( this . $element . offset ( ) . top - $ ( window ) . height ( ) ) * Math . abs ( this . velocity ) } }
var position = this . startPosition + $ ( window ) . scrollTop ( ) * this . velocity ; var xPos = "50%" ; var yPos = "50%" ; if ( this . direction === 'left' ) { xPos = position + 'px' } else if ( this . direction === 'right' ) { xPos = 'calc(100% + ' + - position + 'px)' } else if ( this . direction === 'down' ) { var offset = - ( $ ( window ) . height ( ) - this . $element . offset ( ) . top - this . $element . height ( ) - parseInt ( this . $element . css ( 'paddingTop' ) ) - parseInt ( this . $element . css ( 'paddingBottom' ) ) ) ; yPos = 'calc(100% + ' + ( offset - $ ( window ) . scrollTop ( ) - position ) + 'px)' } else { yPos = ( this . $element . offset ( ) . top - $ ( window ) . scrollTop ( ) + position ) + 'px' }
this . $element . css ( { backgroundPosition : xPos + ' ' + yPos } )
} ; $ . fn [ pluginName ] = function ( options ) { return this . each ( function ( ) { if ( ! $ . data ( this , 'plugin_' + pluginName ) ) { $ . data ( this , 'plugin_' + pluginName , new Plugin ( this , options ) ) } } ) }
} ) ( jQuery , window , document ) ; ( function ( ) {
'use strict' ; var babelHelpers = { } ; babelHelpers . classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) } } ; babelHelpers . createClass = function ( ) {
function defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) } }
return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor }
} ( ) ; babelHelpers ; var sidrStatus = { moving : false , opened : false } ; var helper = {
isUrl : function isUrl ( str ) { var pattern = new RegExp ( '^(https?:\\/\\/)?' + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|' + '((\\d{1,3}\\.){3}\\d{1,3}))' + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + '(\\?[;&a-z\\d%_.~+=-]*)?' + '(\\#[-a-z\\d_]*)?$' , 'i' ) ; if ( pattern . test ( str ) ) { return true } else { return false } } , addPrefixes : function addPrefixes ( $element ) { this . addPrefix ( $element , 'id' ) ; this . addPrefix ( $element , 'class' ) ; $element . removeAttr ( 'style' ) } , addPrefix : function addPrefix ( $element , attribute ) { var toReplace = $element . attr ( attribute ) ; if ( typeof toReplace === 'string' && toReplace !== '' && toReplace !== 'sidr-inner' ) { $element . attr ( attribute , toReplace . replace ( /([A-Za-z0-9_.\-]+)/g , 'sidr-' + attribute + '-$1' ) ) } } , transitions : function ( ) {
var body = document . body || document . documentElement , style = body . style , supported = false , property = 'transition' ; if ( property in style ) { supported = true } else {
( function ( ) {
var prefixes = [ 'moz' , 'webkit' , 'o' , 'ms' ] , prefix = undefined , i = undefined ; property = property . charAt ( 0 ) . toUpperCase ( ) + property . substr ( 1 ) ; supported = function ( ) {
for ( i = 0 ; i < prefixes . length ; i ++ ) { prefix = prefixes [ i ] ; if ( prefix + property in style ) { return true } }
return false
} ( ) ; property = supported ? '-' + prefix . toLowerCase ( ) + '-' + property . toLowerCase ( ) : null
} ) ( )
}
return { supported : supported , property : property }
} ( )
} ; var $$2 = jQuery ; var bodyAnimationClass = 'sidr-animating' ; var openAction = 'open' ; var closeAction = 'close' ; var transitionEndEvent = 'webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend' ; var Menu = function ( ) {
function Menu ( name ) { babelHelpers . classCallCheck ( this , Menu ) ; this . name = name ; this . item = $$2 ( '#' + name ) ; this . openClass = name === 'sidr' ? 'sidr-open' : 'sidr-open ' + name + '-open' ; this . menuWidth = this . item . outerWidth ( true ) ; this . speed = this . item . data ( 'speed' ) ; this . side = this . item . data ( 'side' ) ; this . displace = this . item . data ( 'displace' ) ; this . timing = this . item . data ( 'timing' ) ; this . method = this . item . data ( 'method' ) ; this . onOpenCallback = this . item . data ( 'onOpen' ) ; this . onCloseCallback = this . item . data ( 'onClose' ) ; this . onOpenEndCallback = this . item . data ( 'onOpenEnd' ) ; this . onCloseEndCallback = this . item . data ( 'onCloseEnd' ) ; this . body = $$2 ( this . item . data ( 'body' ) ) }
babelHelpers . createClass ( Menu , [ {
key : 'getAnimation' , value : function getAnimation ( action , element ) {
var animation = { } , prop = this . side ; if ( action === 'open' && element === 'body' ) { animation [ prop ] = this . menuWidth + 'px' } else if ( action === 'close' && element === 'menu' ) { animation [ prop ] = '-' + this . menuWidth + 'px' } else { animation [ prop ] = 0 }
return animation
}
} , { key : 'prepareBody' , value : function prepareBody ( action ) { var prop = action === 'open' ? 'hidden' : '' ; if ( this . body . is ( 'body' ) ) { var $html = $$2 ( 'html' ) , scrollTop = $html . scrollTop ( ) ; if ( this . displace ) { $html . css ( 'overflow-x' , prop ) . scrollTop ( scrollTop ) } else { $html . css ( 'overflow' , prop ) . scrollTop ( scrollTop ) } } } } , { key : 'openBody' , value : function openBody ( ) { if ( this . displace ) { var transitions = helper . transitions , $body = this . body ; if ( transitions . supported ) { $body . css ( transitions . property , this . side + ' ' + this . speed / 1000 + 's ' + this . timing ) . css ( this . side , 0 ) . css ( { width : $body . width ( ) , position : 'absolute' } ) ; $body . css ( this . side , this . menuWidth + 'px' ) } else { var bodyAnimation = this . getAnimation ( openAction , 'body' ) ; $body . css ( { width : $body . width ( ) , position : 'absolute' } ) . animate ( bodyAnimation , { queue : false , duration : this . speed } ) } } } } , {
key : 'onCloseBody' , value : function onCloseBody ( ) {
var transitions = helper . transitions , resetStyles = { width : '' , position : '' , right : '' , left : '' } ; if ( transitions . supported ) { resetStyles [ transitions . property ] = '' }
this . body . css ( resetStyles ) . unbind ( transitionEndEvent )
}
} , { key : 'closeBody' , value : function closeBody ( ) { var _this = this ; if ( this . displace ) { if ( helper . transitions . supported ) { this . body . css ( this . side , 0 ) . one ( transitionEndEvent , function ( ) { _this . onCloseBody ( ) } ) } else { var bodyAnimation = this . getAnimation ( closeAction , 'body' ) ; this . body . animate ( bodyAnimation , { queue : false , duration : this . speed , complete : function complete ( ) { _this . onCloseBody ( ) } } ) } } } } , { key : 'moveBody' , value : function moveBody ( action ) { if ( action === openAction ) { this . openBody ( ) } else { this . closeBody ( ) } } } , { key : 'onOpenMenu' , value : function onOpenMenu ( callback ) { var name = this . name ; sidrStatus . moving = false ; sidrStatus . opened = name ; this . item . unbind ( transitionEndEvent ) ; this . body . removeClass ( bodyAnimationClass ) . addClass ( this . openClass ) ; this . onOpenEndCallback ( ) ; if ( typeof callback === 'function' ) { callback ( name ) } } } , { key : 'openMenu' , value : function openMenu ( callback ) { var _this2 = this ; var $item = this . item ; if ( helper . transitions . supported ) { $item . css ( this . side , 0 ) . one ( transitionEndEvent , function ( ) { _this2 . onOpenMenu ( callback ) } ) } else { var menuAnimation = this . getAnimation ( openAction , 'menu' ) ; $item . css ( 'display' , 'block' ) . animate ( menuAnimation , { queue : false , duration : this . speed , complete : function complete ( ) { _this2 . onOpenMenu ( callback ) } } ) } } } , { key : 'onCloseMenu' , value : function onCloseMenu ( callback ) { this . item . css ( { left : '' , right : '' } ) . unbind ( transitionEndEvent ) ; sidrStatus . moving = false ; sidrStatus . opened = false ; this . body . removeClass ( bodyAnimationClass ) . removeClass ( this . openClass ) ; $$2 ( 'html' ) . css ( 'overflow' , '' ) ; this . onCloseEndCallback ( ) ; if ( typeof callback === 'function' ) { callback ( name ) } } } , { key : 'closeMenu' , value : function closeMenu ( callback ) { var _this3 = this ; var item = this . item ; if ( helper . transitions . supported ) { item . css ( this . side , '' ) . one ( transitionEndEvent , function ( ) { _this3 . onCloseMenu ( callback ) } ) } else { var menuAnimation = this . getAnimation ( closeAction , 'menu' ) ; item . animate ( menuAnimation , { queue : false , duration : this . speed , complete : function complete ( ) { _this3 . onCloseMenu ( ) } } ) } } } , { key : 'moveMenu' , value : function moveMenu ( action , callback ) { this . body . addClass ( bodyAnimationClass ) ; if ( action === openAction ) { this . openMenu ( callback ) } else { this . closeMenu ( callback ) } } } , { key : 'move' , value : function move ( action , callback ) { sidrStatus . moving = true ; this . prepareBody ( action ) ; this . moveBody ( action ) ; this . moveMenu ( action , callback ) } } , {
key : 'open' , value : function open ( callback ) {
var _this4 = this ; if ( sidrStatus . opened === this . name || sidrStatus . moving ) { return }
if ( sidrStatus . opened !== false ) { var alreadyOpenedMenu = new Menu ( sidrStatus . opened ) ; alreadyOpenedMenu . close ( function ( ) { _this4 . open ( callback ) } ) ; return }
this . move ( 'open' , callback ) ; this . onOpenCallback ( )
}
} , {
key : 'close' , value : function close ( callback ) {
if ( sidrStatus . opened !== this . name || sidrStatus . moving ) { return }
this . move ( 'close' , callback ) ; this . onCloseCallback ( )
}
} , { key : 'toggle' , value : function toggle ( callback ) { if ( sidrStatus . opened === this . name ) { this . close ( callback ) } else { this . open ( callback ) } } } ] ) ; return Menu
} ( ) ; var $$1 = jQuery ; function execute ( action , name , callback ) { var sidr = new Menu ( name ) ; switch ( action ) { case 'open' : sidr . open ( callback ) ; break ; case 'close' : sidr . close ( callback ) ; break ; case 'toggle' : sidr . toggle ( callback ) ; break ; default : $$1 . error ( 'Method ' + action + ' does not exist on jQuery.sidr' ) ; break } }
var i ; var $ = jQuery ; var publicMethods = [ 'open' , 'close' , 'toggle' ] ; var methodName ; var methods = { } ; var getMethod = function getMethod ( methodName ) {
return function ( name , callback ) {
if ( typeof name === 'function' ) { callback = name ; name = 'sidr' } else if ( ! name ) { name = 'sidr' }
execute ( methodName , name , callback )
}
} ; for ( i = 0 ; i < publicMethods . length ; i ++ ) { methodName = publicMethods [ i ] ; methods [ methodName ] = getMethod ( methodName ) }
function sidr ( method ) { if ( method === 'status' ) { return sidrStatus } else if ( methods [ method ] ) { return methods [ method ] . apply ( this , Array . prototype . slice . call ( arguments , 1 ) ) } else if ( typeof method === 'function' || typeof method === 'string' || ! method ) { return methods . toggle . apply ( this , arguments ) } else { $ . error ( 'Method ' + method + ' does not exist on jQuery.sidr' ) } }
var $$3 = jQuery ; function fillContent ( $sideMenu , settings ) {
if ( typeof settings . source === 'function' ) { var newContent = settings . source ( name ) ; $sideMenu . html ( newContent ) } else if ( typeof settings . source === 'string' && helper . isUrl ( settings . source ) ) { $$3 . get ( settings . source , function ( data ) { $sideMenu . html ( data ) } ) } else if ( typeof settings . source === 'string' ) {
var htmlContent = '' , selectors = settings . source . split ( ',' ) ; $$3 . each ( selectors , function ( index , element ) { htmlContent += '<div class="sidr-inner">' + $$3 ( element ) . html ( ) + '</div>' } ) ; if ( settings . renaming ) { var $htmlContent = $$3 ( '<div />' ) . html ( htmlContent ) ; $htmlContent . find ( '*' ) . each ( function ( index , element ) { var $element = $$3 ( element ) ; helper . addPrefixes ( $element ) } ) ; htmlContent = $htmlContent . html ( ) }
$sideMenu . html ( htmlContent )
} else if ( settings . source !== null ) { $$3 . error ( 'Invalid Sidr Source' ) }
return $sideMenu
}
function fnSidr ( options ) {
var transitions = helper . transitions , settings = $$3 . extend ( { name : 'sidr' , speed : 200 , side : 'left' , source : null , renaming : true , body : 'body' , displace : true , timing : 'ease' , method : 'toggle' , bind : 'touchstart click' , onOpen : function onOpen ( ) { } , onClose : function onClose ( ) { } , onOpenEnd : function onOpenEnd ( ) { } , onCloseEnd : function onCloseEnd ( ) { } } , options ) , name = settings . name , $sideMenu = $$3 ( '#' + name ) ; if ( $sideMenu . length === 0 ) { $sideMenu = $$3 ( '<div />' ) . attr ( 'id' , name ) . appendTo ( $$3 ( 'body' ) ) }
if ( transitions . supported ) { $sideMenu . css ( transitions . property , settings . side + ' ' + settings . speed / 1000 + 's ' + settings . timing ) }
$sideMenu . addClass ( 'sidr' ) . addClass ( settings . side ) . data ( { speed : settings . speed , side : settings . side , body : settings . body , displace : settings . displace , timing : settings . timing , method : settings . method , onOpen : settings . onOpen , onClose : settings . onClose , onOpenEnd : settings . onOpenEnd , onCloseEnd : settings . onCloseEnd } ) ; $sideMenu = fillContent ( $sideMenu , settings ) ; return this . each ( function ( ) { var $this = $$3 ( this ) , data = $this . data ( 'sidr' ) , flag = false ; if ( ! data ) { sidrStatus . moving = false ; sidrStatus . opened = false ; $this . data ( 'sidr' , name ) ; $this . bind ( settings . bind , function ( event ) { event . preventDefault ( ) ; if ( ! flag ) { flag = true ; sidr ( settings . method , name ) ; setTimeout ( function ( ) { flag = false } , 100 ) } } ) } } )
}
jQuery . sidr = sidr ; jQuery . fn . sidr = fnSidr
} ( ) ) ; ( function ( $ , w ) {
"use strict" ; var methods = ( function ( ) {
var c = { bcClass : 'sf-breadcrumb' , menuClass : 'sf-js-enabled' , anchorClass : 'sf-with-ul' , menuArrowClass : 'sf-arrows' } , ios = ( function ( ) {
var ios = /^(?![\w\W]*Windows Phone)[\w\W]*(iPhone|iPad|iPod)/i . test ( navigator . userAgent ) ; if ( ios ) { $ ( 'html' ) . css ( 'cursor' , 'pointer' ) . on ( 'click' , $ . noop ) }
return ios
} ) ( ) , wp7 = ( function ( ) { var style = document . documentElement . style ; return ( 'behavior' in style && 'fill' in style && /iemobile/i . test ( navigator . userAgent ) ) } ) ( ) , unprefixedPointerEvents = ( function ( ) { return ( ! ! w . PointerEvent ) } ) ( ) , toggleMenuClasses = function ( $menu , o , add ) {
var classes = c . menuClass , method ; if ( o . cssArrows ) { classes += ' ' + c . menuArrowClass }
method = ( add ) ? 'addClass' : 'removeClass' ; $menu [ method ] ( classes )
} , setPathToCurrent = function ( $menu , o ) { return $menu . find ( 'li.' + o . pathClass ) . slice ( 0 , o . pathLevels ) . addClass ( o . hoverClass + ' ' + c . bcClass ) . filter ( function ( ) { return ( $ ( this ) . children ( o . popUpSelector ) . hide ( ) . show ( ) . length ) } ) . removeClass ( o . pathClass ) } , toggleAnchorClass = function ( $li , add ) { var method = ( add ) ? 'addClass' : 'removeClass' ; $li . children ( 'a' ) [ method ] ( c . anchorClass ) } , toggleTouchAction = function ( $menu ) { var msTouchAction = $menu . css ( 'ms-touch-action' ) ; var touchAction = $menu . css ( 'touch-action' ) ; touchAction = touchAction || msTouchAction ; touchAction = ( touchAction === 'pan-y' ) ? 'auto' : 'pan-y' ; $menu . css ( { 'ms-touch-action' : touchAction , 'touch-action' : touchAction } ) } , getMenu = function ( $el ) { return $el . closest ( '.' + c . menuClass ) } , getOptions = function ( $el ) { return getMenu ( $el ) . data ( 'sfOptions' ) } , over = function ( ) { var $this = $ ( this ) , o = getOptions ( $this ) ; clearTimeout ( o . sfTimer ) ; $this . siblings ( ) . superfish ( 'hide' ) . end ( ) . superfish ( 'show' ) } , close = function ( o ) { o . retainPath = ( $ . inArray ( this [ 0 ] , o . $path ) > - 1 ) ; this . superfish ( 'hide' ) ; if ( ! this . parents ( '.' + o . hoverClass ) . length ) { o . onIdle . call ( getMenu ( this ) ) ; if ( o . $path . length ) { $ . proxy ( over , o . $path ) ( ) } } } , out = function ( ) {
var $this = $ ( this ) , o = getOptions ( $this ) ; if ( ios ) { $ . proxy ( close , $this , o ) ( ) }
else { clearTimeout ( o . sfTimer ) ; o . sfTimer = setTimeout ( $ . proxy ( close , $this , o ) , o . delay ) }
} , touchHandler = function ( e ) {
var $this = $ ( this ) , o = getOptions ( $this ) , $ul = $this . siblings ( e . data . popUpSelector ) ; if ( o . onHandleTouch . call ( $ul ) === false ) { return this }
if ( $ul . length > 0 && $ul . is ( ':hidden' ) ) { $this . one ( 'click.superfish' , false ) ; if ( e . type === 'MSPointerDown' || e . type === 'pointerdown' ) { $this . trigger ( 'focus' ) } else { $ . proxy ( over , $this . parent ( 'li' ) ) ( ) } }
} , applyHandlers = function ( $menu , o ) {
var targets = 'li:has(' + o . popUpSelector + ')' ; if ( $ . fn . hoverIntent && ! o . disableHI ) { $menu . hoverIntent ( over , out , targets ) }
else { $menu . on ( 'mouseenter.superfish' , targets , over ) . on ( 'mouseleave.superfish' , targets , out ) }
var touchevent = 'MSPointerDown.superfish' ; if ( unprefixedPointerEvents ) { touchevent = 'pointerdown.superfish' }
if ( ! ios ) { touchevent += ' touchend.superfish' }
if ( wp7 ) { touchevent += ' mousedown.superfish' }
$menu . on ( 'focusin.superfish' , 'li' , over ) . on ( 'focusout.superfish' , 'li' , out ) . on ( touchevent , 'a' , o , touchHandler )
} ; return {
hide : function ( instant ) {
if ( this . length ) {
var $this = this , o = getOptions ( $this ) ; if ( ! o ) { return this }
var not = ( o . retainPath === true ) ? o . $path : '' , $ul = $this . find ( 'li.' + o . hoverClass ) . add ( this ) . not ( not ) . removeClass ( o . hoverClass ) . children ( o . popUpSelector ) , speed = o . speedOut ; if ( instant ) { $ul . show ( ) ; speed = 0 }
o . retainPath = false ; if ( o . onBeforeHide . call ( $ul ) === false ) { return this }
$ul . stop ( true , true ) . animate ( o . animationOut , speed , function ( ) { var $this = $ ( this ) ; o . onHide . call ( $this ) } )
}
return this
} , show : function ( ) {
var o = getOptions ( this ) ; if ( ! o ) { return this }
var $this = this . addClass ( o . hoverClass ) , $ul = $this . children ( o . popUpSelector ) ; if ( o . onBeforeShow . call ( $ul ) === false ) { return this }
$ul . stop ( true , true ) . animate ( o . animation , o . speed , function ( ) { o . onShow . call ( $ul ) } ) ; return this
} , destroy : function ( ) {
return this . each ( function ( ) {
var $this = $ ( this ) , o = $this . data ( 'sfOptions' ) , $hasPopUp ; if ( ! o ) { return false }
$hasPopUp = $this . find ( o . popUpSelector ) . parent ( 'li' ) ; clearTimeout ( o . sfTimer ) ; toggleMenuClasses ( $this , o ) ; toggleAnchorClass ( $hasPopUp ) ; toggleTouchAction ( $this ) ; $this . off ( '.superfish' ) . off ( '.hoverIntent' ) ; $hasPopUp . children ( o . popUpSelector ) . attr ( 'style' , function ( i , style ) { return style . replace ( /display[^;]+;?/g , '' ) } ) ; o . $path . removeClass ( o . hoverClass + ' ' + c . bcClass ) . addClass ( o . pathClass ) ; $this . find ( '.' + o . hoverClass ) . removeClass ( o . hoverClass ) ; o . onDestroy . call ( $this ) ; $this . removeData ( 'sfOptions' )
} )
} , init : function ( op ) {
return this . each ( function ( ) {
var $this = $ ( this ) ; if ( $this . data ( 'sfOptions' ) ) { return false }
var o = $ . extend ( { } , $ . fn . superfish . defaults , op ) , $hasPopUp = $this . find ( o . popUpSelector ) . parent ( 'li' ) ; o . $path = setPathToCurrent ( $this , o ) ; $this . data ( 'sfOptions' , o ) ; toggleMenuClasses ( $this , o , true ) ; toggleAnchorClass ( $hasPopUp , true ) ; toggleTouchAction ( $this ) ; applyHandlers ( $this , o ) ; $hasPopUp . not ( '.' + c . bcClass ) . superfish ( 'hide' , true ) ; o . onInit . call ( this )
} )
}
}
} ) ( ) ; $ . fn . superfish = function ( method , args ) {
if ( methods [ method ] ) { return methods [ method ] . apply ( this , Array . prototype . slice . call ( arguments , 1 ) ) }
else if ( typeof method === 'object' || ! method ) { return methods . init . apply ( this , arguments ) }
else { return $ . error ( 'Method ' + method + ' does not exist on jQuery.fn.superfish' ) }
} ; $ . fn . superfish . defaults = { popUpSelector : 'ul,.sf-mega' , hoverClass : 'sfHover' , pathClass : 'overrideThisToUse' , pathLevels : 1 , delay : 800 , animation : { opacity : 'show' } , animationOut : { opacity : 'hide' } , speed : 'normal' , speedOut : 'fast' , cssArrows : true , disableHI : false , onInit : $ . noop , onBeforeShow : $ . noop , onShow : $ . noop , onBeforeHide : $ . noop , onHide : $ . noop , onIdle : $ . noop , onDestroy : $ . noop , onHandleTouch : $ . noop }
} ) ( jQuery , window ) ; ( function ( $ ) { $ . fn . supersubs = function ( options ) { var opts = $ . extend ( { } , $ . fn . supersubs . defaults , options ) ; return this . each ( function ( ) { var $$ = $ ( this ) ; var o = $ . meta ? $ . extend ( { } , opts , $$ . data ( ) ) : opts ; $ULs = $$ . find ( "ul" ) . show ( ) ; var fontsize = $ ( '<li id="menu-fontsize">—</li>' ) . css ( { "padding" : 0 , "position" : "absolute" , "top" : "-999em" , "width" : "auto" } ) . appendTo ( $$ ) [ 0 ] . clientWidth ; $ ( "#menu-fontsize" ) . remove ( ) ; $ULs . each ( function ( i ) { var $ul = $ ( this ) ; var $LIs = $ul . children ( ) ; var $As = $LIs . children ( "a" ) ; var liFloat = $LIs . css ( "white-space" , "nowrap" ) . css ( "float" ) ; $ul . add ( $LIs ) . add ( $As ) . css ( { "float" : "none" , "width" : "auto" } ) ; var emWidth = $ul [ 0 ] . clientWidth / fontsize ; emWidth += o . extraWidth ; if ( emWidth > o . maxWidth ) emWidth = o . maxWidth ; else if ( emWidth < o . minWidth ) emWidth = o . minWidth ; emWidth += "em" ; $ul . css ( "width" , emWidth ) ; $LIs . css ( { "float" : liFloat , "width" : "100%" , "white-space" : "normal" } ) . each ( function ( ) { var $childUl = $ ( this ) . children ( "ul" ) ; var offsetDirection = $childUl . css ( "left" ) !== undefined ? "left" : "right" ; $childUl . css ( offsetDirection , "100%" ) } ) } ) . hide ( ) } ) } ; $ . fn . supersubs . defaults = { minWidth : 9 , maxWidth : 25 , extraWidth : 0 } } ) ( jQuery ) ; ( function ( $ ) { function maybeCall ( thing , ctx ) { return typeof thing == "function" ? thing . call ( ctx ) : thing } function isElementInDOM ( ele ) { while ( ele = ele . parentNode ) if ( ele == document ) return true ; return false } function Tipsy ( element , options ) { this . $element = $ ( element ) ; this . options = options ; this . enabled = true ; this . fixTitle ( ) } Tipsy . prototype = { show : function ( ) { var title = this . getTitle ( ) ; if ( title && this . enabled ) { var $tip = this . tip ( ) ; $tip . find ( ".tipsy-inner" ) [ this . options . html ? "html" : "text" ] ( title ) ; $tip [ 0 ] . className = "tipsy" ; $tip . remove ( ) . css ( { top : 0 , left : 0 , visibility : "hidden" , display : "block" } ) . prependTo ( document . body ) ; var pos = $ . extend ( { } , this . $element . offset ( ) , { width : this . $element [ 0 ] . offsetWidth , height : this . $element [ 0 ] . offsetHeight } ) ; var actualWidth = $tip [ 0 ] . offsetWidth , actualHeight = $tip [ 0 ] . offsetHeight , gravity = maybeCall ( this . options . gravity , this . $element [ 0 ] ) ; var tp ; switch ( gravity . charAt ( 0 ) ) { case "n" : tp = { top : pos . top + pos . height + this . options . offset , left : pos . left + pos . width / 2 - actualWidth / 2 } ; break ; case "s" : tp = { top : pos . top - actualHeight - this . options . offset , left : pos . left + pos . width / 2 - actualWidth / 2 } ; break ; case "e" : tp = { top : pos . top + pos . height / 2 - actualHeight / 2 , left : pos . left - actualWidth - this . options . offset } ; break ; case "w" : tp = { top : pos . top + pos . height / 2 - actualHeight / 2 , left : pos . left + pos . width + this . options . offset } ; break } if ( gravity . length == 2 ) if ( gravity . charAt ( 1 ) == "w" ) tp . left = pos . left + pos . width / 2 - 15 ; else tp . left = pos . left + pos . width / 2 - actualWidth + 15 ; $tip . css ( tp ) . addClass ( "tipsy-" + gravity ) ; $tip . find ( ".tipsy-arrow" ) [ 0 ] . className = "tipsy-arrow tipsy-arrow-" + gravity . charAt ( 0 ) ; if ( this . options . className ) $tip . addClass ( maybeCall ( this . options . className , this . $element [ 0 ] ) ) ; if ( this . options . fade ) $tip . stop ( ) . css ( { opacity : 0 , display : "block" , visibility : "visible" } ) . animate ( { opacity : this . options . opacity } ) ; else $tip . css ( { visibility : "visible" , opacity : this . options . opacity } ) } } , hide : function ( ) { if ( this . options . fade ) this . tip ( ) . stop ( ) . fadeOut ( function ( ) { $ ( this ) . remove ( ) } ) ; else this . tip ( ) . remove ( ) } , fixTitle : function ( ) { var $e = this . $element ; if ( $e . attr ( "title" ) || typeof $e . attr ( "original-title" ) != "string" ) $e . attr ( "original-title" , $e . attr ( "title" ) || "" ) . removeAttr ( "title" ) } , getTitle : function ( ) { var title , $e = this . $element , o = this . options ; this . fixTitle ( ) ; var title , o = this . options ; if ( typeof o . title == "string" ) title = $e . attr ( o . title == "title" ? "original-title" : o . title ) ; else if ( typeof o . title == "function" ) title = o . title . call ( $e [ 0 ] ) ; title = ( "" + title ) . replace ( /(^\s*|\s*$)/ , "" ) ; return title || o . fallback } , tip : function ( ) { if ( ! this . $tip ) { this . $tip = $ ( ' < div class = "tipsy" > < / d
"use strict" ; var Typed = function ( el , options ) { this . el = $ ( el ) ; this . options = $ . extend ( { } , $ . fn . typed . defaults , options ) ; this . isInput = this . el . is ( 'input' ) ; this . attr = this . options . attr ; this . showCursor = this . isInput ? false : this . options . showCursor ; this . elContent = this . attr ? this . el . attr ( this . attr ) : this . el . text ( ) ; this . contentType = this . options . contentType ; this . typeSpeed = this . options . typeSpeed ; this . startDelay = this . options . startDelay ; this . backSpeed = this . options . backSpeed ; this . backDelay = this . options . backDelay ; this . stringsElement = this . options . stringsElement ; this . strings = this . options . strings ; this . strPos = 0 ; this . arrayPos = 0 ; this . stopNum = 0 ; this . loop = this . options . loop ; this . loopCount = this . options . loopCount ; this . curLoop = 0 ; this . stop = false ; this . cursorChar = this . options . cursorChar ; this . shuffle = this . options . shuffle ; this . sequence = [ ] ; this . build ( ) } ; Typed . prototype = {
constructor : Typed , init : function ( ) { var self = this ; self . timeout = setTimeout ( function ( ) { for ( var i = 0 ; i < self . strings . length ; ++ i ) self . sequence [ i ] = i ; if ( self . shuffle ) self . sequence = self . shuffleArray ( self . sequence ) ; self . typewrite ( self . strings [ self . sequence [ self . arrayPos ] ] , self . strPos ) } , self . startDelay ) } , build : function ( ) {
var self = this ; if ( this . showCursor === true ) { this . cursor = $ ( "<span class=\"typed-cursor\">" + this . cursorChar + "</span>" ) ; this . el . after ( this . cursor ) }
if ( this . stringsElement ) { this . strings = [ ] ; this . stringsElement . hide ( ) ; console . log ( this . stringsElement . children ( ) ) ; var strings = this . stringsElement . children ( ) ; $ . each ( strings , function ( key , value ) { self . strings . push ( $ ( value ) . html ( ) ) } ) }
this . init ( )
} , typewrite : function ( curString , curStrPos ) {
if ( this . stop === true ) { return }
var humanize = Math . round ( Math . random ( ) * ( 100 - 30 ) ) + this . typeSpeed ; var self = this ; self . timeout = setTimeout ( function ( ) {
var charPause = 0 ; var substr = curString . substr ( curStrPos ) ; if ( substr . charAt ( 0 ) === '^' ) {
var skip = 1 ; if ( /^\^\d+/ . test ( substr ) ) { substr = /\d+/ . exec ( substr ) [ 0 ] ; skip += substr . length ; charPause = parseInt ( substr ) }
curString = curString . substring ( 0 , curStrPos ) + curString . substring ( curStrPos + skip )
}
if ( self . contentType === 'html' ) {
var curChar = curString . substr ( curStrPos ) . charAt ( 0 )
if ( curChar === '<' || curChar === '&' ) {
var tag = '' ; var endTag = '' ; if ( curChar === '<' ) { endTag = '>' }
else { endTag = ';' }
while ( curString . substr ( curStrPos + 1 ) . charAt ( 0 ) !== endTag ) { tag += curString . substr ( curStrPos ) . charAt ( 0 ) ; curStrPos ++ ; if ( curStrPos + 1 > curString . length ) { break } }
curStrPos ++ ; tag += endTag
}
}
self . timeout = setTimeout ( function ( ) {
if ( curStrPos === curString . length ) {
self . options . onStringTyped ( self . arrayPos ) ; if ( self . arrayPos === self . strings . length - 1 ) {
self . options . callback ( ) ; self . curLoop ++ ; if ( self . loop === false || self . curLoop === self . loopCount )
return
}
self . timeout = setTimeout ( function ( ) { self . backspace ( curString , curStrPos ) } , self . backDelay )
} else {
if ( curStrPos === 0 ) { self . options . preStringTyped ( self . arrayPos ) }
var nextString = curString . substr ( 0 , curStrPos + 1 ) ; if ( self . attr ) { self . el . attr ( self . attr , nextString ) } else { if ( self . isInput ) { self . el . val ( nextString ) } else if ( self . contentType === 'html' ) { self . el . html ( nextString ) } else { self . el . text ( nextString ) } }
curStrPos ++ ; self . typewrite ( curString , curStrPos )
}
} , charPause )
} , humanize )
} , backspace : function ( curString , curStrPos ) {
if ( this . stop === true ) { return }
var humanize = Math . round ( Math . random ( ) * ( 100 - 30 ) ) + this . backSpeed ; var self = this ; self . timeout = setTimeout ( function ( ) {
if ( self . contentType === 'html' ) {
if ( curString . substr ( curStrPos ) . charAt ( 0 ) === '>' ) {
var tag = '' ; while ( curString . substr ( curStrPos - 1 ) . charAt ( 0 ) !== '<' ) { tag -= curString . substr ( curStrPos ) . charAt ( 0 ) ; curStrPos -- ; if ( curStrPos < 0 ) { break } }
curStrPos -- ; tag += '<'
}
}
var nextString = curString . substr ( 0 , curStrPos ) ; if ( self . attr ) { self . el . attr ( self . attr , nextString ) } else { if ( self . isInput ) { self . el . val ( nextString ) } else if ( self . contentType === 'html' ) { self . el . html ( nextString ) } else { self . el . text ( nextString ) } }
if ( curStrPos > self . stopNum ) { curStrPos -- ; self . backspace ( curString , curStrPos ) }
else if ( curStrPos <= self . stopNum ) { self . arrayPos ++ ; if ( self . arrayPos === self . strings . length ) { self . arrayPos = 0 ; if ( self . shuffle ) self . sequence = self . shuffleArray ( self . sequence ) ; self . init ( ) } else self . typewrite ( self . strings [ self . sequence [ self . arrayPos ] ] , curStrPos ) }
} , humanize )
} , shuffleArray : function ( array ) {
var tmp , current , top = array . length ; if ( top ) while ( -- top ) { current = Math . floor ( Math . random ( ) * ( top + 1 ) ) ; tmp = array [ current ] ; array [ current ] = array [ top ] ; array [ top ] = tmp }
return array
} , reset : function ( ) {
var self = this ; clearInterval ( self . timeout ) ; var id = this . el . attr ( 'id' ) ; this . el . empty ( ) ; if ( typeof this . cursor !== 'undefined' ) { this . cursor . remove ( ) }
this . strPos = 0 ; this . arrayPos = 0 ; this . curLoop = 0 ; this . options . resetCallback ( )
}
} ; $ . fn . typed = function ( option ) {
return this . each ( function ( ) {
var $this = $ ( this ) , data = $this . data ( 'typed' ) , options = typeof option == 'object' && option ; if ( data ) { data . reset ( ) }
$this . data ( 'typed' , ( data = new Typed ( this , options ) ) ) ; if ( typeof option == 'string' ) data [ option ] ( )
} )
} ; $ . fn . typed . defaults = { strings : [ "These are the default values..." , "You know what you should do?" , "Use your own!" , "Have a great day!" ] , stringsElement : null , typeSpeed : 0 , startDelay : 0 , backSpeed : 0 , shuffle : false , backDelay : 500 , loop : false , loopCount : false , showCursor : true , cursorChar : "|" , attr : null , contentType : 'html' , callback : function ( ) { } , preStringTyped : function ( ) { } , onStringTyped : function ( ) { } , resetCallback : function ( ) { } }
} ( window . jQuery ) ; ( function ( $ , window , document , undefined ) {
function wpexOwl ( element , options ) { this . settings = null ; this . options = $ . extend ( { } , wpexOwl . Defaults , options ) ; this . $element = $ ( element ) ; this . _handlers = { } ; this . _plugins = { } ; this . _supress = { } ; this . _current = null ; this . _speed = null ; this . _coordinates = [ ] ; this . _breakpoint = null ; this . _width = null ; this . _items = [ ] ; this . _clones = [ ] ; this . _mergers = [ ] ; this . _widths = [ ] ; this . _invalidated = { } ; this . _pipe = [ ] ; this . _drag = { time : null , target : null , pointer : null , stage : { start : null , current : null } , direction : null } ; this . _states = { current : { } , tags : { 'initializing' : [ 'busy' ] , 'animating' : [ 'busy' ] , 'dragging' : [ 'interacting' ] } } ; $ . each ( [ 'onResize' , 'onThrottledResize' ] , $ . proxy ( function ( i , handler ) { this . _handlers [ handler ] = $ . proxy ( this [ handler ] , this ) } , this ) ) ; $ . each ( wpexOwl . Plugins , $ . proxy ( function ( key , plugin ) { this . _plugins [ key . charAt ( 0 ) . toLowerCase ( ) + key . slice ( 1 ) ] = new plugin ( this ) } , this ) ) ; $ . each ( wpexOwl . Workers , $ . proxy ( function ( priority , worker ) { this . _pipe . push ( { 'filter' : worker . filter , 'run' : $ . proxy ( worker . run , this ) } ) } , this ) ) ; this . setup ( ) ; this . initialize ( ) }
wpexOwl . Defaults = { items : 3 , loop : false , center : false , rewind : false , mouseDrag : true , touchDrag : true , pullDrag : true , freeDrag : false , margin : 0 , stagePadding : 0 , merge : false , mergeFit : true , autoWidth : false , startPosition : 0 , rtl : false , smartSpeed : 250 , fluidSpeed : false , dragEndSpeed : false , responsive : { } , responsiveRefreshRate : 200 , responsiveBaseElement : window , fallbackEasing : 'swing' , info : false , nestedItemSelector : false , itemElement : 'div' , stageElement : 'div' , refreshClass : 'owl-refresh' , loadedClass : 'owl-loaded' , loadingClass : 'owl-loading' , rtlClass : 'owl-rtl' , responsiveClass : 'owl-responsive' , dragClass : 'owl-drag' , itemClass : 'owl-item' , stageClass : 'owl-stage' , stageOuterClass : 'owl-stage-outer' , grabClass : 'owl-grab' } ; wpexOwl . Width = { Default : 'default' , Inner : 'inner' , Outer : 'outer' } ; wpexOwl . Type = { Event : 'event' , State : 'state' } ; wpexOwl . Plugins = { } ; wpexOwl . Workers = [ { filter : [ 'width' , 'settings' ] , run : function ( ) { this . _width = this . $element . width ( ) } } , { filter : [ 'width' , 'items' , 'settings' ] , run : function ( cache ) { cache . current = this . _items && this . _items [ this . relative ( this . _current ) ] } } , { filter : [ 'items' , 'settings' ] , run : function ( ) { this . $stage . children ( '.cloned' ) . remove ( ) } } , { filter : [ 'width' , 'items' , 'settings' ] , run : function ( cache ) { var margin = this . settings . margin || '' , grid = ! this . settings . autoWidth , rtl = this . settings . rtl , css = { 'width' : 'auto' , 'margin-left' : rtl ? margin : '' , 'margin-right' : rtl ? '' : margin } ; ! grid && this . $stage . children ( ) . css ( css ) ; cache . css = css } } , {
filter : [ 'width' , 'items' , 'settings' ] , run : function ( cache ) {
var width = ( this . width ( ) / this . settings . items ) . toFixed ( 3 ) - this . settings . margin , merge = null , iterator = this . _items . length , grid = ! this . settings . autoWidth , widths = [ ] ; cache . items = { merge : false , width : width } ; while ( iterator -- ) { merge = this . _mergers [ iterator ] ; merge = this . settings . mergeFit && Math . min ( merge , this . settings . items ) || merge ; cache . items . merge = merge > 1 || cache . items . merge ; widths [ iterator ] = ! grid ? this . _items [ iterator ] . width ( ) : width * merge }
this . _widths = widths
}
} , {
filter : [ 'items' , 'settings' ] , run : function ( ) {
var clones = [ ] , items = this . _items , settings = this . settings , view = Math . max ( settings . items * 2 , 4 ) , size = Math . ceil ( items . length / 2 ) * 2 , repeat = settings . loop && items . length ? settings . rewind ? view : Math . max ( view , size ) : 0 , append = '' , prepend = '' ; repeat /= 2 ; while ( repeat -- ) { clones . push ( this . normalize ( clones . length / 2 , true ) ) ; append = append + items [ clones [ clones . length - 1 ] ] [ 0 ] . outerHTML ; clones . push ( this . normalize ( items . length - 1 - ( clones . length - 1 ) / 2 , true ) ) ; prepend = items [ clones [ clones . length - 1 ] ] [ 0 ] . outerHTML + prepend }
this . _clones = clones ; $ ( append ) . addClass ( 'cloned' ) . appendTo ( this . $stage ) ; $ ( prepend ) . addClass ( 'cloned' ) . prependTo ( this . $stage )
}
} , {
filter : [ 'width' , 'items' , 'settings' ] , run : function ( ) {
var rtl = this . settings . rtl ? 1 : - 1 , size = this . _clones . length + this . _items . length , iterator = - 1 , previous = 0 , current = 0 , coordinates = [ ] ; while ( ++ iterator < size ) { previous = coordinates [ iterator - 1 ] || 0 ; current = this . _widths [ this . relative ( iterator ) ] + this . settings . margin ; coordinates . push ( previous + current * rtl ) }
this . _coordinates = coordinates
}
} , { filter : [ 'width' , 'items' , 'settings' ] , run : function ( ) { var padding = this . settings . stagePadding , coordinates = this . _coordinates , css = { 'width' : Math . ceil ( Math . abs ( coordinates [ coordinates . length - 1 ] ) ) + padding * 2 , 'padding-left' : padding || '' , 'padding-right' : padding || '' } ; this . $stage . css ( css ) } } , { filter : [ 'width' , 'items' , 'settings' ] , run : function ( cache ) { var iterator = this . _coordinates . length , grid = ! this . settings . autoWidth , items = this . $stage . children ( ) ; if ( grid && cache . items . merge ) { while ( iterator -- ) { cache . css . width = this . _widths [ this . relative ( iterator ) ] ; items . eq ( iterator ) . css ( cache . css ) } } else if ( grid ) { cache . css . width = cache . items . width ; items . css ( cache . css ) } } } , { filter : [ 'items' ] , run : function ( ) { this . _coordinates . length < 1 && this . $stage . removeAttr ( 'style' ) } } , { filter : [ 'width' , 'items' , 'settings' ] , run : function ( cache ) { cache . current = cache . current ? this . $stage . children ( ) . index ( cache . current ) : 0 ; cache . current = Math . max ( this . minimum ( ) , Math . min ( this . maximum ( ) , cache . current ) ) ; this . reset ( cache . current ) } } , { filter : [ 'position' ] , run : function ( ) { this . animate ( this . coordinates ( this . _current ) ) } } , {
filter : [ 'width' , 'position' , 'items' , 'settings' ] , run : function ( ) {
var rtl = this . settings . rtl ? 1 : - 1 , padding = this . settings . stagePadding * 2 , begin = this . coordinates ( this . current ( ) ) + padding , end = begin + this . width ( ) * rtl , inner , outer , matches = [ ] , i , n ; for ( i = 0 , n = this . _coordinates . length ; i < n ; i ++ ) { inner = this . _coordinates [ i - 1 ] || 0 ; outer = Math . abs ( this . _coordinates [ i ] ) + padding * rtl ; if ( ( this . op ( inner , '<=' , begin ) && ( this . op ( inner , '>' , end ) ) ) || ( this . op ( outer , '<' , begin ) && this . op ( outer , '>' , end ) ) ) { matches . push ( i ) } }
this . $stage . children ( '.active' ) . removeClass ( 'active' ) ; this . $stage . children ( ':eq(' + matches . join ( '), :eq(' ) + ')' ) . addClass ( 'active' ) ; if ( this . settings . center ) { this . $stage . children ( '.center' ) . removeClass ( 'center' ) ; this . $stage . children ( ) . eq ( this . current ( ) ) . addClass ( 'center' ) }
}
} ] ; wpexOwl . prototype . initialize = function ( ) {
this . enter ( 'initializing' ) ; this . trigger ( 'initialize' ) ; this . $element . toggleClass ( this . settings . rtlClass , this . settings . rtl ) ; if ( this . settings . autoWidth && ! this . is ( 'pre-loading' ) ) { var imgs , nestedSelector , width ; imgs = this . $element . find ( 'img' ) ; nestedSelector = this . settings . nestedItemSelector ? '.' + this . settings . nestedItemSelector : undefined ; width = this . $element . children ( nestedSelector ) . width ( ) ; if ( imgs . length && width <= 0 ) { this . preloadAutoWidthImages ( imgs ) } }
this . $element . addClass ( this . options . loadingClass ) ; this . $stage = $ ( '<' + this . settings . stageElement + ' class="' + this . settings . stageClass + '"/>' ) . wrap ( '<div class="' + this . settings . stageOuterClass + '"/>' ) ; this . $element . append ( this . $stage . parent ( ) ) ; this . replace ( this . $element . children ( ) . not ( this . $stage . parent ( ) ) ) ; if ( this . $element . is ( ':visible' ) ) { this . refresh ( ) } else { this . invalidate ( 'width' ) }
this . $element . removeClass ( this . options . loadingClass ) . addClass ( this . options . loadedClass ) ; this . registerEventHandlers ( ) ; this . leave ( 'initializing' ) ; this . trigger ( 'initialized' )
} ; wpexOwl . prototype . setup = function ( ) {
var viewport = this . viewport ( ) , overwrites = this . options . responsive , match = - 1 , settings = null ; if ( ! overwrites ) { settings = $ . extend ( { } , this . options ) } else { $ . each ( overwrites , function ( breakpoint ) { if ( breakpoint <= viewport && breakpoint > match ) { match = Number ( breakpoint ) } } ) ; settings = $ . extend ( { } , this . options , overwrites [ match ] ) ; delete settings . responsive ; if ( settings . responsiveClass ) { this . $element . attr ( 'class' , this . $element . attr ( 'class' ) . replace ( new RegExp ( '(' + this . options . responsiveClass + '-)\\S+\\s' , 'g' ) , '$1' + match ) ) } }
if ( this . settings === null || this . _breakpoint !== match ) { this . trigger ( 'change' , { property : { name : 'settings' , value : settings } } ) ; this . _breakpoint = match ; this . settings = settings ; this . invalidate ( 'settings' ) ; this . trigger ( 'changed' , { property : { name : 'settings' , value : this . settings } } ) }
} ; wpexOwl . prototype . optionsLogic = function ( ) { if ( this . settings . autoWidth ) { this . settings . stagePadding = false ; this . settings . merge = false } } ; wpexOwl . prototype . prepare = function ( item ) {
var event = this . trigger ( 'prepare' , { content : item } ) ; if ( ! event . data ) { event . data = $ ( '<' + this . settings . itemElement + '/>' ) . addClass ( this . options . itemClass ) . append ( item ) }
this . trigger ( 'prepared' , { content : event . data } ) ; return event . data
} ; wpexOwl . prototype . update = function ( ) {
var i = 0 , n = this . _pipe . length , filter = $ . proxy ( function ( p ) { return this [ p ] } , this . _invalidated ) , cache = { } ; while ( i < n ) {
if ( this . _invalidated . all || $ . grep ( this . _pipe [ i ] . filter , filter ) . length > 0 ) { this . _pipe [ i ] . run ( cache ) }
i ++
}
this . _invalidated = { } ; ! this . is ( 'valid' ) && this . enter ( 'valid' )
} ; wpexOwl . prototype . width = function ( dimension ) { dimension = dimension || wpexOwl . Width . Default ; switch ( dimension ) { case wpexOwl . Width . Inner : case wpexOwl . Width . Outer : return this . _width ; default : return this . _width - this . settings . stagePadding * 2 + this . settings . margin } } ; wpexOwl . prototype . refresh = function ( ) { this . enter ( 'refreshing' ) ; this . trigger ( 'refresh' ) ; this . setup ( ) ; this . optionsLogic ( ) ; this . $element . addClass ( this . options . refreshClass ) ; this . update ( ) ; this . $element . removeClass ( this . options . refreshClass ) ; this . leave ( 'refreshing' ) ; this . trigger ( 'refreshed' ) } ; wpexOwl . prototype . onThrottledResize = function ( ) { window . clearTimeout ( this . resizeTimer ) ; this . resizeTimer = window . setTimeout ( this . _handlers . onResize , this . settings . responsiveRefreshRate ) } ; wpexOwl . prototype . onResize = function ( ) {
if ( ! this . _items . length ) { return false }
if ( this . _width === this . $element . width ( ) ) { return false }
if ( ! this . $element . is ( ':visible' ) ) { return false }
this . enter ( 'resizing' ) ; if ( this . trigger ( 'resize' ) . isDefaultPrevented ( ) ) { this . leave ( 'resizing' ) ; return false }
this . invalidate ( 'width' ) ; this . refresh ( ) ; this . leave ( 'resizing' ) ; this . trigger ( 'resized' )
} ; wpexOwl . prototype . registerEventHandlers = function ( ) {
if ( $ . support . transition ) { this . $stage . on ( $ . support . transition . end + '.owl.core' , $ . proxy ( this . onTransitionEnd , this ) ) }
if ( this . settings . responsive !== false ) { this . on ( window , 'resize' , this . _handlers . onThrottledResize ) }
if ( this . settings . mouseDrag ) { this . $element . addClass ( this . options . dragClass ) ; this . $stage . on ( 'mousedown.owl.core' , $ . proxy ( this . onDragStart , this ) ) ; this . $stage . on ( 'dragstart.owl.core selectstart.owl.core' , function ( ) { return false } ) }
if ( this . settings . touchDrag ) { this . $stage . on ( 'touchstart.owl.core' , $ . proxy ( this . onDragStart , this ) ) ; this . $stage . on ( 'touchcancel.owl.core' , $ . proxy ( this . onDragEnd , this ) ) }
} ; wpexOwl . prototype . onDragStart = function ( event ) {
var stage = null ; if ( event . which === 3 ) { return }
if ( $ . support . transform ) { stage = this . $stage . css ( 'transform' ) . replace ( /.*\(|\)| /g , '' ) . split ( ',' ) ; stage = { x : stage [ stage . length === 16 ? 12 : 4 ] , y : stage [ stage . length === 16 ? 13 : 5 ] } } else { stage = this . $stage . position ( ) ; stage = { x : this . settings . rtl ? stage . left + this . $stage . width ( ) - this . width ( ) + this . settings . margin : stage . left , y : stage . top } }
if ( this . is ( 'animating' ) ) {
$ . support . transform ? this . animate ( stage . x ) : this . $stage . stop ( )
this . invalidate ( 'position' )
}
this . $element . toggleClass ( this . options . grabClass , event . type === 'mousedown' ) ; this . speed ( 0 ) ; this . _drag . time = new Date ( ) . getTime ( ) ; this . _drag . target = $ ( event . target ) ; this . _drag . stage . start = stage ; this . _drag . stage . current = stage ; this . _drag . pointer = this . pointer ( event ) ; $ ( document ) . on ( 'mouseup.owl.core touchend.owl.core' , $ . proxy ( this . onDragEnd , this ) ) ; $ ( document ) . one ( 'mousemove.owl.core touchmove.owl.core' , $ . proxy ( function ( event ) {
var delta = this . difference ( this . _drag . pointer , this . pointer ( event ) ) ; $ ( document ) . on ( 'mousemove.owl.core touchmove.owl.core' , $ . proxy ( this . onDragMove , this ) ) ; if ( Math . abs ( delta . x ) < Math . abs ( delta . y ) && this . is ( 'valid' ) ) { return }
event . preventDefault ( ) ; this . enter ( 'dragging' ) ; this . trigger ( 'drag' )
} , this ) )
} ; wpexOwl . prototype . onDragMove = function ( event ) {
var minimum = null , maximum = null , pull = null , delta = this . difference ( this . _drag . pointer , this . pointer ( event ) ) , stage = this . difference ( this . _drag . stage . start , delta ) ; if ( ! this . is ( 'dragging' ) ) { return }
event . preventDefault ( ) ; if ( this . settings . loop ) { minimum = this . coordinates ( this . minimum ( ) ) ; maximum = this . coordinates ( this . maximum ( ) + 1 ) - minimum ; stage . x = ( ( ( stage . x - minimum ) % maximum + maximum ) % maximum ) + minimum } else { minimum = this . settings . rtl ? this . coordinates ( this . maximum ( ) ) : this . coordinates ( this . minimum ( ) ) ; maximum = this . settings . rtl ? this . coordinates ( this . minimum ( ) ) : this . coordinates ( this . maximum ( ) ) ; pull = this . settings . pullDrag ? - 1 * delta . x / 5 : 0 ; stage . x = Math . max ( Math . min ( stage . x , minimum + pull ) , maximum + pull ) }
this . _drag . stage . current = stage ; this . animate ( stage . x )
} ; wpexOwl . prototype . onDragEnd = function ( event ) {
var delta = this . difference ( this . _drag . pointer , this . pointer ( event ) ) , stage = this . _drag . stage . current , direction = delta . x > 0 ^ this . settings . rtl ? 'left' : 'right' ; $ ( document ) . off ( '.owl.core' ) ; this . $element . removeClass ( this . options . grabClass ) ; if ( delta . x !== 0 && this . is ( 'dragging' ) || ! this . is ( 'valid' ) ) { this . speed ( this . settings . dragEndSpeed || this . settings . smartSpeed ) ; this . current ( this . closest ( stage . x , delta . x !== 0 ? direction : this . _drag . direction ) ) ; this . invalidate ( 'position' ) ; this . update ( ) ; this . _drag . direction = direction ; if ( Math . abs ( delta . x ) > 3 || new Date ( ) . getTime ( ) - this . _drag . time > 300 ) { this . _drag . target . one ( 'click.owl.core' , function ( ) { return false } ) } }
if ( ! this . is ( 'dragging' ) ) { return }
this . leave ( 'dragging' ) ; this . trigger ( 'dragged' )
} ; wpexOwl . prototype . closest = function ( coordinate , direction ) {
var position = - 1 , pull = 30 , width = this . width ( ) , coordinates = this . coordinates ( ) ; if ( ! this . settings . freeDrag ) {
$ . each ( coordinates , $ . proxy ( function ( index , value ) {
if ( coordinate > value - pull && coordinate < value + pull ) { position = index } else if ( this . op ( coordinate , '<' , value ) && this . op ( coordinate , '>' , coordinates [ index + 1 ] || value - width ) ) { position = direction === 'left' ? index + 1 : index }
return position === - 1
} , this ) )
}
if ( ! this . settings . loop ) { if ( this . op ( coordinate , '>' , coordinates [ this . minimum ( ) ] ) ) { position = coordinate = this . minimum ( ) } else if ( this . op ( coordinate , '<' , coordinates [ this . maximum ( ) ] ) ) { position = coordinate = this . maximum ( ) } }
return position
} ; wpexOwl . prototype . animate = function ( coordinate ) {
var animate = this . speed ( ) > 0 ; this . is ( 'animating' ) && this . onTransitionEnd ( ) ; if ( animate ) { this . enter ( 'animating' ) ; this . trigger ( 'translate' ) }
if ( $ . support . transform3d && $ . support . transition ) { this . $stage . css ( { transform : 'translate3d(' + coordinate + 'px,0px,0px)' , transition : ( this . speed ( ) / 1000 ) + 's' } ) } else if ( animate ) { this . $stage . animate ( { left : coordinate + 'px' } , this . speed ( ) , this . settings . fallbackEasing , $ . proxy ( this . onTransitionEnd , this ) ) } else { this . $stage . css ( { left : coordinate + 'px' } ) }
} ; wpexOwl . prototype . is = function ( state ) { return this . _states . current [ state ] && this . _states . current [ state ] > 0 } ; wpexOwl . prototype . current = function ( position ) {
if ( position === undefined ) { return this . _current }
if ( this . _items . length === 0 ) { return undefined }
position = this . normalize ( position ) ; if ( this . _current !== position ) {
var event = this . trigger ( 'change' , { property : { name : 'position' , value : position } } ) ; if ( event . data !== undefined ) { position = this . normalize ( event . data ) }
this . _current = position ; this . invalidate ( 'position' ) ; this . trigger ( 'changed' , { property : { name : 'position' , value : this . _current } } )
}
return this . _current
} ; wpexOwl . prototype . invalidate = function ( part ) {
if ( $ . type ( part ) === 'string' ) { this . _invalidated [ part ] = true ; this . is ( 'valid' ) && this . leave ( 'valid' ) }
return $ . map ( this . _invalidated , function ( v , i ) { return i } )
} ; wpexOwl . prototype . reset = function ( position ) {
position = this . normalize ( position ) ; if ( position === undefined ) { return }
this . _speed = 0 ; this . _current = position ; this . suppress ( [ 'translate' , 'translated' ] ) ; this . animate ( this . coordinates ( position ) ) ; this . release ( [ 'translate' , 'translated' ] )
} ; wpexOwl . prototype . normalize = function ( position , relative ) {
var n = this . _items . length , m = relative ? 0 : this . _clones . length ; if ( ! $ . isNumeric ( position ) || n < 1 ) { position = undefined } else if ( position < 0 || position >= n + m ) { position = ( ( position - m / 2 ) % n + n ) % n + m / 2 }
return position
} ; wpexOwl . prototype . relative = function ( position ) { position -= this . _clones . length / 2 ; return this . normalize ( position , true ) } ; wpexOwl . prototype . maximum = function ( relative ) {
var settings = this . settings , maximum = this . _coordinates . length , boundary = Math . abs ( this . _coordinates [ maximum - 1 ] ) - this . _width , i = - 1 , j ; if ( settings . loop ) { maximum = this . _clones . length / 2 + this . _items . length - 1 } else if ( settings . autoWidth || settings . merge ) { while ( maximum - i > 1 ) { Math . abs ( this . _coordinates [ j = maximum + i >> 1 ] ) < boundary ? i = j : maximum = j } } else if ( settings . center ) { maximum = this . _items . length - 1 } else { maximum = this . _items . length - settings . items }
if ( relative ) { maximum -= this . _clones . length / 2 }
return Math . max ( maximum , 0 )
} ; wpexOwl . prototype . minimum = function ( relative ) { return relative ? 0 : this . _clones . length / 2 } ; wpexOwl . prototype . items = function ( position ) {
if ( position === undefined ) { return this . _items . slice ( ) }
position = this . normalize ( position , true ) ; return this . _items [ position ]
} ; wpexOwl . prototype . mergers = function ( position ) {
if ( position === undefined ) { return this . _mergers . slice ( ) }
position = this . normalize ( position , true ) ; return this . _mergers [ position ]
} ; wpexOwl . prototype . clones = function ( position ) {
var odd = this . _clones . length / 2 , even = odd + this . _items . length , map = function ( index ) { return index % 2 === 0 ? even + index / 2 : odd - ( index + 1 ) / 2 } ; if ( position === undefined ) { return $ . map ( this . _clones , function ( v , i ) { return map ( i ) } ) }
return $ . map ( this . _clones , function ( v , i ) { return v === position ? map ( i ) : null } )
} ; wpexOwl . prototype . speed = function ( speed ) {
if ( speed !== undefined ) { this . _speed = speed }
return this . _speed
} ; wpexOwl . prototype . coordinates = function ( position ) {
var coordinate = null ; if ( position === undefined ) { return $ . map ( this . _coordinates , $ . proxy ( function ( coordinate , index ) { return this . coordinates ( index ) } , this ) ) }
if ( this . settings . center ) { coordinate = this . _coordinates [ position ] ; coordinate += ( this . width ( ) - coordinate + ( this . _coordinates [ position - 1 ] || 0 ) ) / 2 * ( this . settings . rtl ? - 1 : 1 ) } else { coordinate = this . _coordinates [ position - 1 ] || 0 }
return coordinate
} ; wpexOwl . prototype . duration = function ( from , to , factor ) { return Math . min ( Math . max ( Math . abs ( to - from ) , 1 ) , 6 ) * Math . abs ( ( factor || this . settings . smartSpeed ) ) } ; wpexOwl . prototype . to = function ( position , speed ) {
var current = this . current ( ) , revert = null , distance = position - this . relative ( current ) , direction = ( distance > 0 ) - ( distance < 0 ) , items = this . _items . length , minimum = this . minimum ( ) , maximum = this . maximum ( ) ; if ( this . settings . loop ) {
if ( ! this . settings . rewind && Math . abs ( distance ) > items / 2 ) { distance += direction * - 1 * items }
position = current + distance ; revert = ( ( position - minimum ) % items + items ) % items + minimum ; if ( revert !== position && revert - distance <= maximum && revert - distance > 0 ) { current = revert - distance ; position = revert ; this . reset ( current ) }
} else if ( this . settings . rewind ) { maximum += 1 ; position = ( position % maximum + maximum ) % maximum } else { position = Math . max ( minimum , Math . min ( maximum , position ) ) }
this . speed ( this . duration ( current , position , speed ) ) ; this . current ( position ) ; if ( this . $element . is ( ':visible' ) ) { this . update ( ) }
} ; wpexOwl . prototype . next = function ( speed ) { speed = speed || false ; this . to ( this . relative ( this . current ( ) ) + 1 , speed ) } ; wpexOwl . prototype . prev = function ( speed ) { speed = speed || false ; this . to ( this . relative ( this . current ( ) ) - 1 , speed ) } ; wpexOwl . prototype . onTransitionEnd = function ( event ) {
if ( event !== undefined ) { event . stopPropagation ( ) ; if ( ( event . target || event . srcElement || event . originalTarget ) !== this . $stage . get ( 0 ) ) { return false } }
this . leave ( 'animating' ) ; this . trigger ( 'translated' )
} ; wpexOwl . prototype . viewport = function ( ) {
var width ; if ( this . options . responsiveBaseElement !== window ) { width = $ ( this . options . responsiveBaseElement ) . width ( ) } else if ( window . innerWidth ) { width = window . innerWidth } else if ( document . documentElement && document . documentElement . clientWidth ) { width = document . documentElement . clientWidth } else { throw 'Can not detect viewport width.' }
return width
} ; wpexOwl . prototype . replace = function ( content ) {
this . $stage . empty ( ) ; this . _items = [ ] ; if ( content ) { content = ( content instanceof jQuery ) ? content : $ ( content ) }
if ( this . settings . nestedItemSelector ) { content = content . find ( '.' + this . settings . nestedItemSelector ) }
content . filter ( function ( ) { return this . nodeType === 1 } ) . each ( $ . proxy ( function ( index , item ) { item = this . prepare ( item ) ; this . $stage . append ( item ) ; this . _items . push ( item ) ; this . _mergers . push ( item . find ( '[data-merge]' ) . andSelf ( '[data-merge]' ) . attr ( 'data-merge' ) * 1 || 1 ) } , this ) ) ; this . reset ( $ . isNumeric ( this . settings . startPosition ) ? this . settings . startPosition : 0 ) ; this . invalidate ( 'items' )
} ; wpexOwl . prototype . add = function ( content , position ) {
var current = this . relative ( this . _current ) ; position = position === undefined ? this . _items . length : this . normalize ( position , true ) ; content = content instanceof jQuery ? content : $ ( content ) ; this . trigger ( 'add' , { content : content , position : position } ) ; content = this . prepare ( content ) ; if ( this . _items . length === 0 || position === this . _items . length ) { this . _items . length === 0 && this . $stage . append ( content ) ; this . _items . length !== 0 && this . _items [ position - 1 ] . after ( content ) ; this . _items . push ( content ) ; this . _mergers . push ( content . find ( '[data-merge]' ) . andSelf ( '[data-merge]' ) . attr ( 'data-merge' ) * 1 || 1 ) } else { this . _items [ position ] . before ( content ) ; this . _items . splice ( position , 0 , content ) ; this . _mergers . splice ( position , 0 , content . find ( '[data-merge]' ) . andSelf ( '[data-merge]' ) . attr ( 'data-merge' ) * 1 || 1 ) }
this . _items [ current ] && this . reset ( this . _items [ current ] . index ( ) ) ; this . invalidate ( 'items' ) ; this . trigger ( 'added' , { content : content , position : position } )
} ; wpexOwl . prototype . remove = function ( position ) {
position = this . normalize ( position , true ) ; if ( position === undefined ) { return }
this . trigger ( 'remove' , { content : this . _items [ position ] , position : position } ) ; this . _items [ position ] . remove ( ) ; this . _items . splice ( position , 1 ) ; this . _mergers . splice ( position , 1 ) ; this . invalidate ( 'items' ) ; this . trigger ( 'removed' , { content : null , position : position } )
} ; wpexOwl . prototype . preloadAutoWidthImages = function ( images ) { images . each ( $ . proxy ( function ( i , element ) { this . enter ( 'pre-loading' ) ; element = $ ( element ) ; $ ( new Image ( ) ) . one ( 'load' , $ . proxy ( function ( e ) { element . attr ( 'src' , e . target . src ) ; element . css ( 'opacity' , 1 ) ; this . leave ( 'pre-loading' ) ; ! this . is ( 'pre-loading' ) && ! this . is ( 'initializing' ) && this . refresh ( ) } , this ) ) . attr ( 'src' , element . attr ( 'src' ) || element . attr ( 'data-src' ) || element . attr ( 'data-src-retina' ) ) } , this ) ) } ; wpexOwl . prototype . destroy = function ( ) {
this . $element . off ( '.owl.core' ) ; this . $stage . off ( '.owl.core' ) ; $ ( document ) . off ( '.owl.core' ) ; if ( this . settings . responsive !== false ) { window . clearTimeout ( this . resizeTimer ) ; this . off ( window , 'resize' , this . _handlers . onThrottledResize ) }
for ( var i in this . _plugins ) { this . _plugins [ i ] . destroy ( ) }
this . $stage . children ( '.cloned' ) . remove ( ) ; this . $stage . unwrap ( ) ; this . $stage . children ( ) . contents ( ) . unwrap ( ) ; this . $stage . children ( ) . unwrap ( ) ; this . $element . removeClass ( this . options . refreshClass ) . removeClass ( this . options . loadingClass ) . removeClass ( this . options . loadedClass ) . removeClass ( this . options . rtlClass ) . removeClass ( this . options . dragClass ) . removeClass ( this . options . grabClass ) . attr ( 'class' , this . $element . attr ( 'class' ) . replace ( new RegExp ( this . options . responsiveClass + '-\\S+\\s' , 'g' ) , '' ) ) . removeData ( 'owl.carousel' )
} ; wpexOwl . prototype . op = function ( a , o , b ) { var rtl = this . settings . rtl ; switch ( o ) { case '<' : return rtl ? a > b : a < b ; case '>' : return rtl ? a < b : a > b ; case '>=' : return rtl ? a <= b : a >= b ; case '<=' : return rtl ? a >= b : a <= b ; default : break } } ; wpexOwl . prototype . on = function ( element , event , listener , capture ) { if ( element . addEventListener ) { element . addEventListener ( event , listener , capture ) } else if ( element . attachEvent ) { element . attachEvent ( 'on' + event , listener ) } } ; wpexOwl . prototype . off = function ( element , event , listener , capture ) { if ( element . removeEventListener ) { element . removeEventListener ( event , listener , capture ) } else if ( element . detachEvent ) { element . detachEvent ( 'on' + event , listener ) } } ; wpexOwl . prototype . trigger = function ( name , data , namespace , state , enter ) {
var status = { item : { count : this . _items . length , index : this . current ( ) } } , handler = $ . camelCase ( $ . grep ( [ 'on' , name , namespace ] , function ( v ) { return v } ) . join ( '-' ) . toLowerCase ( ) ) , event = $ . Event ( [ name , 'owl' , namespace || 'carousel' ] . join ( '.' ) . toLowerCase ( ) , $ . extend ( { relatedTarget : this } , status , data ) ) ; if ( ! this . _supress [ name ] ) { $ . each ( this . _plugins , function ( name , plugin ) { if ( plugin . onTrigger ) { plugin . onTrigger ( event ) } } ) ; this . register ( { type : wpexOwl . Type . Event , name : name } ) ; this . $element . trigger ( event ) ; if ( this . settings && typeof this . settings [ handler ] === 'function' ) { this . settings [ handler ] . call ( this , event ) } }
return event
} ; wpexOwl . prototype . enter = function ( name ) {
$ . each ( [ name ] . concat ( this . _states . tags [ name ] || [ ] ) , $ . proxy ( function ( i , name ) {
if ( this . _states . current [ name ] === undefined ) { this . _states . current [ name ] = 0 }
this . _states . current [ name ] ++
} , this ) )
} ; wpexOwl . prototype . leave = function ( name ) { $ . each ( [ name ] . concat ( this . _states . tags [ name ] || [ ] ) , $ . proxy ( function ( i , name ) { this . _states . current [ name ] -- } , this ) ) } ; wpexOwl . prototype . register = function ( object ) {
if ( object . type === wpexOwl . Type . Event ) {
if ( ! $ . event . special [ object . name ] ) { $ . event . special [ object . name ] = { } }
if ( ! $ . event . special [ object . name ] . owl ) {
var _default = $ . event . special [ object . name ] . _default ; $ . event . special [ object . name ] . _default = function ( e ) {
if ( _default && _default . apply && ( ! e . namespace || e . namespace . indexOf ( 'owl' ) === - 1 ) ) { return _default . apply ( this , arguments ) }
return e . namespace && e . namespace . indexOf ( 'owl' ) > - 1
} ; $ . event . special [ object . name ] . owl = true
}
} else if ( object . type === wpexOwl . Type . State ) {
if ( ! this . _states . tags [ object . name ] ) { this . _states . tags [ object . name ] = object . tags } else { this . _states . tags [ object . name ] = this . _states . tags [ object . name ] . concat ( object . tags ) }
this . _states . tags [ object . name ] = $ . grep ( this . _states . tags [ object . name ] , $ . proxy ( function ( tag , i ) { return $ . inArray ( tag , this . _states . tags [ object . name ] ) === i } , this ) )
}
} ; wpexOwl . prototype . suppress = function ( events ) { $ . each ( events , $ . proxy ( function ( index , event ) { this . _supress [ event ] = true } , this ) ) } ; wpexOwl . prototype . release = function ( events ) { $ . each ( events , $ . proxy ( function ( index , event ) { delete this . _supress [ event ] } , this ) ) } ; wpexOwl . prototype . pointer = function ( event ) {
var result = { x : null , y : null } ; event = event . originalEvent || event || window . event ; event = event . touches && event . touches . length ? event . touches [ 0 ] : event . changedTouches && event . changedTouches . length ? event . changedTouches [ 0 ] : event ; if ( event . pageX ) { result . x = event . pageX ; result . y = event . pageY } else { result . x = event . clientX ; result . y = event . clientY }
return result
} ; wpexOwl . prototype . difference = function ( first , second ) { return { x : first . x - second . x , y : first . y - second . y } } ; $ . fn . wpexOwlCarousel = function ( option ) {
var args = Array . prototype . slice . call ( arguments , 1 ) ; return this . each ( function ( ) {
var $this = $ ( this ) , data = $this . data ( 'owl.carousel' ) ; if ( ! data ) { data = new wpexOwl ( this , typeof option == 'object' && option ) ; $this . data ( 'owl.carousel' , data ) ; $ . each ( [ 'next' , 'prev' , 'to' , 'destroy' , 'refresh' , 'replace' , 'add' , 'remove' ] , function ( i , event ) { data . register ( { type : wpexOwl . Type . Event , name : event } ) ; data . $element . on ( event + '.owl.carousel.core' , $ . proxy ( function ( e ) { if ( e . namespace && e . relatedTarget !== this ) { this . suppress ( [ event ] ) ; data [ event ] . apply ( this , [ ] . slice . call ( arguments , 1 ) ) ; this . release ( [ event ] ) } } , data ) ) } ) }
if ( typeof option == 'string' && option . charAt ( 0 ) !== '_' ) { data [ option ] . apply ( data , args ) }
} )
} ; $ . fn . wpexOwlCarousel . Constructor = wpexOwl
} ) ( window . Zepto || window . jQuery , window , document ) ; ( function ( $ , window , document , undefined ) {
var AutoRefresh = function ( carousel ) { this . _core = carousel ; this . _interval = null ; this . _visible = null ; this . _handlers = { 'initialized.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . autoRefresh ) { this . watch ( ) } } , this ) } ; this . _core . options = $ . extend ( { } , AutoRefresh . Defaults , this . _core . options ) ; this . _core . $element . on ( this . _handlers ) } ; AutoRefresh . Defaults = { autoRefresh : true , autoRefreshInterval : 500 } ; AutoRefresh . prototype . watch = function ( ) {
if ( this . _interval ) { return }
this . _visible = this . _core . $element . is ( ':visible' ) ; this . _interval = window . setInterval ( $ . proxy ( this . refresh , this ) , this . _core . settings . autoRefreshInterval )
} ; AutoRefresh . prototype . refresh = function ( ) {
if ( this . _core . $element . is ( ':visible' ) === this . _visible ) { return }
this . _visible = ! this . _visible ; this . _core . $element . toggleClass ( 'owl-hidden' , ! this . _visible ) ; this . _visible && ( this . _core . invalidate ( 'width' ) && this . _core . refresh ( ) )
} ; AutoRefresh . prototype . destroy = function ( ) {
var handler , property ; window . clearInterval ( this . _interval ) ; for ( handler in this . _handlers ) { this . _core . $element . off ( handler , this . _handlers [ handler ] ) }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; $ . fn . wpexOwlCarousel . Constructor . Plugins . AutoRefresh = AutoRefresh
} ) ( window . Zepto || window . jQuery , window , document ) ; ( function ( $ , window , document , undefined ) {
var Lazy = function ( carousel ) {
this . _core = carousel ; this . _loaded = [ ] ; this . _handlers = {
'initialized.owl.carousel change.owl.carousel' : $ . proxy ( function ( e ) {
if ( ! e . namespace ) { return }
if ( ! this . _core . settings || ! this . _core . settings . lazyLoad ) { return }
if ( ( e . property && e . property . name == 'position' ) || e . type == 'initialized' ) { var settings = this . _core . settings , n = ( settings . center && Math . ceil ( settings . items / 2 ) || settings . items ) , i = ( ( settings . center && n * - 1 ) || 0 ) , position = ( ( e . property && e . property . value ) || this . _core . current ( ) ) + i , clones = this . _core . clones ( ) . length , load = $ . proxy ( function ( i , v ) { this . load ( v ) } , this ) ; while ( i ++ < n ) { this . load ( clones / 2 + this . _core . relative ( position ) ) ; clones && $ . each ( this . _core . clones ( this . _core . relative ( position ) ) , load ) ; position ++ } }
} , this )
} ; this . _core . options = $ . extend ( { } , Lazy . Defaults , this . _core . options ) ; this . _core . $element . on ( this . _handlers )
}
Lazy . Defaults = { lazyLoad : false }
Lazy . prototype . load = function ( position ) {
var $item = this . _core . $stage . children ( ) . eq ( position ) , $elements = $item && $item . find ( '.owl-lazy' ) ; if ( ! $elements || $ . inArray ( $item . get ( 0 ) , this . _loaded ) > - 1 ) { return }
$elements . each ( $ . proxy ( function ( index , element ) { var $element = $ ( element ) , image , url = ( window . devicePixelRatio > 1 && $element . attr ( 'data-src-retina' ) ) || $element . attr ( 'data-src' ) ; this . _core . trigger ( 'load' , { element : $element , url : url } , 'lazy' ) ; if ( $element . is ( 'img' ) ) { $element . one ( 'load.owl.lazy' , $ . proxy ( function ( ) { $element . css ( 'opacity' , 1 ) ; this . _core . trigger ( 'loaded' , { element : $element , url : url } , 'lazy' ) } , this ) ) . attr ( 'src' , url ) } else { image = new Image ( ) ; image . onload = $ . proxy ( function ( ) { $element . css ( { 'background-image' : 'url(' + url + ')' , 'opacity' : '1' } ) ; this . _core . trigger ( 'loaded' , { element : $element , url : url } , 'lazy' ) } , this ) ; image . src = url } } , this ) ) ; this . _loaded . push ( $item . get ( 0 ) )
}
Lazy . prototype . destroy = function ( ) {
var handler , property ; for ( handler in this . handlers ) { this . _core . $element . off ( handler , this . handlers [ handler ] ) }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; $ . fn . wpexOwlCarousel . Constructor . Plugins . Lazy = Lazy
} ) ( window . Zepto || window . jQuery , window , document ) ; ( function ( $ , window , document , undefined ) {
var AutoHeight = function ( carousel ) { this . _core = carousel ; this . _handlers = { 'initialized.owl.carousel refreshed.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . autoHeight ) { this . update ( ) } } , this ) , 'changed.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . autoHeight && e . property . name == 'position' ) { this . update ( ) } } , this ) , 'loaded.owl.lazy' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . autoHeight && e . element . closest ( '.' + this . _core . settings . itemClass ) . index ( ) === this . _core . current ( ) ) { this . update ( ) } } , this ) } ; this . _core . options = $ . extend ( { } , AutoHeight . Defaults , this . _core . options ) ; this . _core . $element . on ( this . _handlers ) } ; AutoHeight . Defaults = { autoHeight : false , autoHeightClass : 'owl-height' } ; AutoHeight . prototype . update = function ( ) { var start = this . _core . _current , end = start + this . _core . settings . items , visible = this . _core . $stage . children ( ) . toArray ( ) . slice ( start , end ) ; heights = [ ] , maxheight = 0 ; $ . each ( visible , function ( index , item ) { heights . push ( $ ( item ) . height ( ) ) } ) ; maxheight = Math . max . apply ( null , heights ) ; this . _core . $stage . parent ( ) . height ( maxheight ) . addClass ( this . _core . settings . autoHeightClass ) } ; AutoHeight . prototype . destroy = function ( ) {
var handler , property ; for ( handler in this . _handlers ) { this . _core . $element . off ( handler , this . _handlers [ handler ] ) }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; $ . fn . wpexOwlCarousel . Constructor . Plugins . AutoHeight = AutoHeight
} ) ( window . Zepto || window . jQuery , window , document ) ;
( function ( $ , window , document , undefined ) {
var Animate = function ( scope ) { this . core = scope ; this . core . options = $ . extend ( { } , Animate . Defaults , this . core . options ) ; this . swapping = true ; this . previous = undefined ; this . next = undefined ; this . handlers = { 'change.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && e . property . name == 'position' ) { this . previous = this . core . current ( ) ; this . next = e . property . value } } , this ) , 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace ) { this . swapping = e . type == 'translated' } } , this ) , 'translate.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . swapping && ( this . core . options . animateOut || this . core . options . animateIn ) ) { this . swap ( ) } } , this ) } ; this . core . $element . on ( this . handlers ) } ; Animate . Defaults = { animateOut : false , animateIn : false } ; Animate . prototype . swap = function ( ) {
if ( this . core . settings . items !== 1 ) { return }
if ( ! $ . support . animation || ! $ . support . transition ) { return }
this . core . speed ( 0 ) ; var left , clear = $ . proxy ( this . clear , this ) , previous = this . core . $stage . children ( ) . eq ( this . previous ) , next = this . core . $stage . children ( ) . eq ( this . next ) , incoming = this . core . settings . animateIn , outgoing = this . core . settings . animateOut ; if ( this . core . current ( ) === this . previous ) { return }
if ( outgoing ) { left = this . core . coordinates ( this . previous ) - this . core . coordinates ( this . next ) ; previous . one ( $ . support . animation . end , clear ) . css ( { 'left' : left + 'px' } ) . addClass ( 'animated owl-animated-out' ) . addClass ( outgoing ) }
if ( incoming ) { next . one ( $ . support . animation . end , clear ) . addClass ( 'animated owl-animated-in' ) . addClass ( incoming ) }
} ; Animate . prototype . clear = function ( e ) { $ ( e . target ) . css ( { 'left' : '' } ) . removeClass ( 'animated owl-animated-out owl-animated-in' ) . removeClass ( this . core . settings . animateIn ) . removeClass ( this . core . settings . animateOut ) ; this . core . onTransitionEnd ( ) } ; Animate . prototype . destroy = function ( ) {
var handler , property ; for ( handler in this . handlers ) { this . core . $element . off ( handler , this . handlers [ handler ] ) }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; $ . fn . wpexOwlCarousel . Constructor . Plugins . Animate = Animate
} ) ( window . Zepto || window . jQuery , window , document ) ; ( function ( $ , window , document , undefined ) {
var Autoplay = function ( carousel ) { this . _core = carousel ; this . _interval = null ; this . _paused = false ; this . _handlers = { 'changed.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && e . property . name === 'settings' ) { if ( this . _core . settings . autoplay ) { this . play ( ) } else { this . stop ( ) } } } , this ) , 'initialized.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . autoplay ) { this . play ( ) } } , this ) , 'play.owl.autoplay' : $ . proxy ( function ( e , t , s ) { if ( e . namespace ) { this . play ( t , s ) } } , this ) , 'stop.owl.autoplay' : $ . proxy ( function ( e ) { if ( e . namespace ) { this . stop ( ) } } , this ) , 'mouseover.owl.autoplay' : $ . proxy ( function ( ) { if ( this . _core . settings . autoplayHoverPause && this . _core . is ( 'rotating' ) ) { this . pause ( ) } } , this ) , 'mouseleave.owl.autoplay' : $ . proxy ( function ( ) { if ( this . _core . settings . autoplayHoverPause && this . _core . is ( 'rotating' ) ) { this . play ( ) } } , this ) } ; this . _core . $element . on ( this . _handlers ) ; this . _core . options = $ . extend ( { } , Autoplay . Defaults , this . _core . options ) } ; Autoplay . Defaults = { autoplay : false , autoplayTimeout : 5000 , autoplayHoverPause : false , autoplaySpeed : false } ; Autoplay . prototype . play = function ( timeout , speed ) {
this . _paused = false ; if ( this . _core . is ( 'rotating' ) ) { return }
this . _core . enter ( 'rotating' ) ; this . _interval = window . setInterval ( $ . proxy ( function ( ) {
if ( this . _paused || this . _core . is ( 'busy' ) || this . _core . is ( 'interacting' ) || document . hidden ) { return }
this . _core . next ( speed || this . _core . settings . autoplaySpeed )
} , this ) , timeout || this . _core . settings . autoplayTimeout )
} ; Autoplay . prototype . stop = function ( ) {
if ( ! this . _core . is ( 'rotating' ) ) { return }
window . clearInterval ( this . _interval ) ; this . _core . leave ( 'rotating' )
} ; Autoplay . prototype . pause = function ( ) {
if ( ! this . _core . is ( 'rotating' ) ) { return }
this . _paused = true
} ; Autoplay . prototype . destroy = function ( ) {
var handler , property ; this . stop ( ) ; for ( handler in this . _handlers ) { this . _core . $element . off ( handler , this . _handlers [ handler ] ) }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; $ . fn . wpexOwlCarousel . Constructor . Plugins . autoplay = Autoplay
} ) ( window . Zepto || window . jQuery , window , document ) ;
( function ( $ , window , document , undefined ) {
'use strict' ; var Navigation = function ( carousel ) { this . _core = carousel ; this . _initialized = false ; this . _pages = [ ] ; this . _controls = { } ; this . _templates = [ ] ; this . $element = this . _core . $element ; this . _overrides = { next : this . _core . next , prev : this . _core . prev , to : this . _core . to } ; this . _handlers = { 'prepared.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . dotsData ) { this . _templates . push ( '<div class="' + this . _core . settings . dotClass + '">' + $ ( e . content ) . find ( '[data-dot]' ) . andSelf ( '[data-dot]' ) . attr ( 'data-dot' ) + '</div>' ) } } , this ) , 'added.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . dotsData ) { this . _templates . splice ( e . position , 0 , this . _templates . pop ( ) ) } } , this ) , 'remove.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . dotsData ) { this . _templates . splice ( e . position , 1 ) } } , this ) , 'changed.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && e . property . name == 'position' ) { this . draw ( ) } } , this ) , 'initialized.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && ! this . _initialized ) { this . _core . trigger ( 'initialize' , null , 'navigation' ) ; this . initialize ( ) ; this . update ( ) ; this . draw ( ) ; this . _initialized = true ; this . _core . trigger ( 'initialized' , null , 'navigation' ) } } , this ) , 'refreshed.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _initialized ) { this . _core . trigger ( 'refresh' , null , 'navigation' ) ; this . update ( ) ; this . draw ( ) ; this . _core . trigger ( 'refreshed' , null , 'navigation' ) } } , this ) } ; this . _core . options = $ . extend ( { } , Navigation . Defaults , this . _core . options ) ; this . $element . on ( this . _handlers ) } ; Navigation . Defaults = { nav : false , navText : [ 'prev' , 'next' ] , navSpeed : false , navElement : 'div' , navContainer : false , navContainerClass : 'owl-nav' , navClass : [ 'owl-prev' , 'owl-next' ] , slideBy : 1 , dotClass : 'owl-dot' , dotsClass : 'owl-dots' , dots : true , dotsEach : false , dotsData : false , dotsSpeed : false , dotsContainer : false } ; Navigation . prototype . initialize = function ( ) {
var override , settings = this . _core . settings ; this . _controls . $relative = ( settings . navContainer ? $ ( settings . navContainer ) : $ ( '<div>' ) . addClass ( settings . navContainerClass ) . appendTo ( this . $element ) ) . addClass ( 'disabled' ) ; this . _controls . $previous = $ ( '<' + settings . navElement + '>' ) . addClass ( settings . navClass [ 0 ] ) . html ( settings . navText [ 0 ] ) . prependTo ( this . _controls . $relative ) . on ( 'click' , $ . proxy ( function ( e ) { this . prev ( settings . navSpeed ) } , this ) ) ; this . _controls . $next = $ ( '<' + settings . navElement + '>' ) . addClass ( settings . navClass [ 1 ] ) . html ( settings . navText [ 1 ] ) . appendTo ( this . _controls . $relative ) . on ( 'click' , $ . proxy ( function ( e ) { this . next ( settings . navSpeed ) } , this ) ) ; if ( ! settings . dotsData ) { this . _templates = [ $ ( '<div>' ) . addClass ( settings . dotClass ) . append ( $ ( '<span>' ) ) . prop ( 'outerHTML' ) ] }
this . _controls . $absolute = ( settings . dotsContainer ? $ ( settings . dotsContainer ) : $ ( '<div>' ) . addClass ( settings . dotsClass ) . appendTo ( this . $element ) ) . addClass ( 'disabled' ) ; this . _controls . $absolute . on ( 'click' , 'div' , $ . proxy ( function ( e ) { var index = $ ( e . target ) . parent ( ) . is ( this . _controls . $absolute ) ? $ ( e . target ) . index ( ) : $ ( e . target ) . parent ( ) . index ( ) ; e . preventDefault ( ) ; this . to ( index , settings . dotsSpeed ) } , this ) ) ; for ( override in this . _overrides ) { this . _core [ override ] = $ . proxy ( this [ override ] , this ) }
} ; Navigation . prototype . destroy = function ( ) {
var handler , control , property , override ; for ( handler in this . _handlers ) { this . $element . off ( handler , this . _handlers [ handler ] ) }
for ( control in this . _controls ) { this . _controls [ control ] . remove ( ) }
for ( override in this . overides ) { this . _core [ override ] = this . _overrides [ override ] }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; Navigation . prototype . update = function ( ) {
var i , j , k , lower = this . _core . clones ( ) . length / 2 , upper = lower + this . _core . items ( ) . length , maximum = this . _core . maximum ( true ) , settings = this . _core . settings , size = settings . center || settings . autoWidth || settings . dotsData ? 1 : settings . dotsEach || settings . items ; if ( settings . slideBy !== 'page' ) { settings . slideBy = Math . min ( settings . slideBy , settings . items ) }
if ( settings . dots || settings . slideBy == 'page' ) {
this . _pages = [ ] ; for ( i = lower , j = 0 , k = 0 ; i < upper ; i ++ ) {
if ( j >= size || j === 0 ) {
this . _pages . push ( { start : Math . min ( maximum , i - lower ) , end : i - lower + size - 1 } ) ; if ( Math . min ( maximum , i - lower ) === maximum ) { break }
j = 0 , ++ k
}
j += this . _core . mergers ( this . _core . relative ( i ) )
}
}
} ; Navigation . prototype . draw = function ( ) {
var difference , settings = this . _core . settings , disabled = this . _core . items ( ) . length <= settings . items , index = this . _core . relative ( this . _core . current ( ) ) , loop = settings . loop || settings . rewind ; this . _controls . $relative . toggleClass ( 'disabled' , ! settings . nav || disabled ) ; if ( settings . nav ) { this . _controls . $previous . toggleClass ( 'disabled' , ! loop && index <= this . _core . minimum ( true ) ) ; this . _controls . $next . toggleClass ( 'disabled' , ! loop && index >= this . _core . maximum ( true ) ) }
this . _controls . $absolute . toggleClass ( 'disabled' , ! settings . dots || disabled ) ; if ( settings . dots ) {
difference = this . _pages . length - this . _controls . $absolute . children ( ) . length ; if ( settings . dotsData && difference !== 0 ) { this . _controls . $absolute . html ( this . _templates . join ( '' ) ) } else if ( difference > 0 ) { this . _controls . $absolute . append ( new Array ( difference + 1 ) . join ( this . _templates [ 0 ] ) ) } else if ( difference < 0 ) { this . _controls . $absolute . children ( ) . slice ( difference ) . remove ( ) }
this . _controls . $absolute . find ( '.active' ) . removeClass ( 'active' ) ; this . _controls . $absolute . children ( ) . eq ( $ . inArray ( this . current ( ) , this . _pages ) ) . addClass ( 'active' )
}
} ; Navigation . prototype . onTrigger = function ( event ) { var settings = this . _core . settings ; event . page = { index : $ . inArray ( this . current ( ) , this . _pages ) , count : this . _pages . length , size : settings && ( settings . center || settings . autoWidth || settings . dotsData ? 1 : settings . dotsEach || settings . items ) } } ; Navigation . prototype . current = function ( ) { var current = this . _core . relative ( this . _core . current ( ) ) ; return $ . grep ( this . _pages , $ . proxy ( function ( page , index ) { return page . start <= current && page . end >= current } , this ) ) . pop ( ) } ; Navigation . prototype . getPosition = function ( successor ) {
var position , length , settings = this . _core . settings ; if ( settings . slideBy == 'page' ) { position = $ . inArray ( this . current ( ) , this . _pages ) ; length = this . _pages . length ; successor ? ++ position : -- position ; position = this . _pages [ ( ( position % length ) + length ) % length ] . start } else { position = this . _core . relative ( this . _core . current ( ) ) ; length = this . _core . items ( ) . length ; successor ? position += settings . slideBy : position -= settings . slideBy }
return position
} ; Navigation . prototype . next = function ( speed ) { $ . proxy ( this . _overrides . to , this . _core ) ( this . getPosition ( true ) , speed ) } ; Navigation . prototype . prev = function ( speed ) { $ . proxy ( this . _overrides . to , this . _core ) ( this . getPosition ( false ) , speed ) } ; Navigation . prototype . to = function ( position , speed , standard ) { var length ; if ( ! standard ) { length = this . _pages . length ; $ . proxy ( this . _overrides . to , this . _core ) ( this . _pages [ ( ( position % length ) + length ) % length ] . start , speed ) } else { $ . proxy ( this . _overrides . to , this . _core ) ( position , speed ) } } ; $ . fn . wpexOwlCarousel . Constructor . Plugins . Navigation = Navigation
} ) ( window . Zepto || window . jQuery , window , document ) ; ( function ( $ , window , document , undefined ) {
'use strict' ; var Hash = function ( carousel ) {
this . _core = carousel ; this . _hashes = { } ; this . $element = this . _core . $element ; this . _handlers = {
'initialized.owl.carousel' : $ . proxy ( function ( e ) { if ( e . namespace && this . _core . settings . startPosition === 'URLHash' ) { $ ( window ) . trigger ( 'hashchange.owl.navigation' ) } } , this ) , 'prepared.owl.carousel' : $ . proxy ( function ( e ) {
if ( e . namespace ) {
var hash = $ ( e . content ) . find ( '[data-hash]' ) . andSelf ( '[data-hash]' ) . attr ( 'data-hash' ) ; if ( ! hash ) { return }
this . _hashes [ hash ] = e . content
}
} , this ) , 'changed.owl.carousel' : $ . proxy ( function ( e ) {
if ( e . namespace && e . property . name === 'position' ) {
var current = this . _core . items ( this . _core . relative ( this . _core . current ( ) ) ) , hash = $ . map ( this . _hashes , function ( item , hash ) { return item === current ? hash : null } ) . join ( ) ; if ( ! hash || window . location . hash . slice ( 1 ) === hash ) { return }
window . location . hash = hash
}
} , this )
} ; this . _core . options = $ . extend ( { } , Hash . Defaults , this . _core . options ) ; this . $element . on ( this . _handlers ) ; $ ( window ) . on ( 'hashchange.owl.navigation' , $ . proxy ( function ( e ) {
var hash = window . location . hash . substring ( 1 ) , items = this . _core . $stage . children ( ) , position = this . _hashes [ hash ] && items . index ( this . _hashes [ hash ] ) ; if ( position === undefined || position === this . _core . current ( ) ) { return }
this . _core . to ( this . _core . relative ( position ) , false , true )
} , this ) )
} ; Hash . Defaults = { URLhashListener : false } ; Hash . prototype . destroy = function ( ) {
var handler , property ; $ ( window ) . off ( 'hashchange.owl.navigation' ) ; for ( handler in this . _handlers ) { this . _core . $element . off ( handler , this . _handlers [ handler ] ) }
for ( property in Object . getOwnPropertyNames ( this ) ) { typeof this [ property ] != 'function' && ( this [ property ] = null ) }
} ; $ . fn . wpexOwlCarousel . Constructor . Plugins . Hash = Hash
} ) ( window . Zepto || window . jQuery , window , document ) ; ( function ( $ , window , document , undefined ) {
var style = $ ( '<support>' ) . get ( 0 ) . style , prefixes = 'Webkit Moz O ms' . split ( ' ' ) , events = { transition : { end : { WebkitTransition : 'webkitTransitionEnd' , MozTransition : 'transitionend' , OTransition : 'oTransitionEnd' , transition : 'transitionend' } } , animation : { end : { WebkitAnimation : 'webkitAnimationEnd' , MozAnimation : 'animationend' , OAnimation : 'oAnimationEnd' , animation : 'animationend' } } } , tests = { csstransforms : function ( ) { return ! ! test ( 'transform' ) } , csstransforms3d : function ( ) { return ! ! test ( 'perspective' ) } , csstransitions : function ( ) { return ! ! test ( 'transition' ) } , cssanimations : function ( ) { return ! ! test ( 'animation' ) } } ; function test ( property , prefixed ) { var result = false , upper = property . charAt ( 0 ) . toUpperCase ( ) + property . slice ( 1 ) ; $ . each ( ( property + ' ' + prefixes . join ( upper + ' ' ) + upper ) . split ( ' ' ) , function ( i , property ) { if ( style [ property ] !== undefined ) { result = prefixed ? property : true ; return false } } ) ; return result }
function prefixed ( property ) { return test ( property , true ) }
if ( tests . csstransitions ( ) ) {
$ . support . transition = new String ( prefixed ( 'transition' ) )
$ . support . transition . end = events . transition . end [ $ . support . transition ]
}
if ( tests . cssanimations ( ) ) {
$ . support . animation = new String ( prefixed ( 'animation' ) )
$ . support . animation . end = events . animation . end [ $ . support . animation ]
}
if ( tests . csstransforms ( ) ) { $ . support . transform = new String ( prefixed ( 'transform' ) ) ; $ . support . transform3d = tests . csstransforms3d ( ) }
} ) ( window . Zepto || window . jQuery , window , document ) ;
var wpex = { } ;
( function ( $ ) {
'use strict' ; wpex = {
init : function ( ) { this . config _func ( ) ; this . bindEvents ( ) ; } ,
config _func : function ( ) {
this . config = {
$window : $ ( window ) ,
$document : $ ( document ) ,
$head : $ ( 'head' ) ,
windowWidth : $ ( window ) . width ( ) ,
windowHeight : $ ( window ) . height ( ) ,
windowTop : $ ( window ) . scrollTop ( ) ,
$body : $ ( 'body' ) , viewportWidth : '' ,
$wpAdminBar : null , isRetina : false ,
heightChanged : false , widthChanged : false ,
isRTL : false , iLightboxSettings : { } ,
vcActive : false , isMobile : false ,
mobileMenuStyle : null , mobileMenuToggleStyle : null ,
mobileMenuBreakpoint : 960 , $siteWrap : null ,
$siteMain : null , $siteHeader : null ,
siteHeaderStyle : null , siteHeaderHeight : 0 ,
siteHeaderTop : 0 , siteHeaderBottom : 0 ,
verticalHeaderActive : false , hasHeaderOverlay : false ,
hasStickyHeader : false , hasStickyMobileHeader : false ,
hasStickyNavbar : false , $siteLogo : null , siteLogoHeight : 0 ,
siteLogoSrc : null , $siteNavWrap : null , $siteNav : null ,
$siteNavDropdowns : null ,
$localScrollTargets : 'li.local-scroll a, a.local-scroll, .local-scroll-link, .local-scroll-link > a' ,
localScrollOffset : 0 , localScrollSpeed : 600 ,
localScrollEasing : 'easeInOutCubic' , localScrollSections : [ ] ,
hasTopBar : false , hasStickyTopBar : false , $stickyTopBar : null ,
hasStickyTopBarMobile : false
}
} ,
bindEvents : function ( ) {
var self = this ; self . config . $document . ready ( function ( ) {
self . initUpdateConfig ( ) ;
self . responsiveText ( ) ;
self . superfish ( ) ; self . mobileMenu ( ) ;
self . navNoClick ( ) ; self . hideEditLink ( ) ;
self . inlineHeaderLogo ( ) ;
self . menuSearch ( ) ; self . headerCart ( ) ;
self . backTopLink ( ) ; self . smoothCommentScroll ( ) ;
self . tipsyTooltips ( ) ; self . customHovers ( ) ; self . toggleBar ( ) ;
self . customSelects ( ) ; self . wpexOwlCarousel ( ) ;
self . autoLightbox ( ) ; self . iLightbox ( ) ;
self . skillbar ( ) ; self . milestone ( ) ; self . countdown ( ) ; self . typedText ( ) ;
self . archiveMasonryGrids ( ) ; self . isotopeGrids ( ) ;
self . responsiveCSS ( ) ; self . vcexFilterNav ( ) ; self . ctf7Preloader ( ) ;
self . vcAccessability ( ) ; self . rtlStretchRows ( ) ; self . vcPageEditable ( ) ;
self . wooGallery ( ) ; self . twentytwenty ( ) } ) ;
self . config . $window . on ( 'load' , function ( ) {
self . config . $body . addClass ( 'wpex-window-loaded' ) ;
self . windowLoadUpdateConfig ( ) ; self . megaMenusWidth ( ) ; self . megaMenusTop ( ) ;
self . flushDropdownsTop ( ) ; self . fadeIn ( ) ; self . parallax ( ) ;
self . sliderPro ( ) ; self . stickyTopBar ( ) ; self . vcTabsTogglesJS ( ) ;
if ( self . config . hasStickyHeader ) {
var $stickyStyle = wpexLocalize . stickyHeaderStyle ;
if ( 'standard' == $stickyStyle || 'shrink' == $stickyStyle || 'shrink_animated' == $stickyStyle ) {
self . stickyHeader ( ) ;
if ( 'shrink' == $stickyStyle || 'shrink_animated' == $stickyStyle ) {
self . shrinkStickyHeader ( )
}
}
}
self . stickyHeaderMenu ( ) ;
self . stickyVcexNavbar ( ) ;
self . headerOverlayOffset ( ) ;
self . footerReveal ( ) ;
self . titleBreadcrumbsFix ( ) ;
if ( $ . fn . infinitescroll !== undefined && $ ( 'div.infinite-scroll-nav' ) . length ) {
self . infiniteScrollInit ( )
}
self . loadMore ( ) ;
if ( wpexLocalize . scrollToHash ) {
window . setTimeout ( function ( ) {
self . scrollToHash ( self ) } , parseInt ( wpex . scrollToHashTimeout ) )
}
} ) ;
self . config . $window . on ( "load" , function ( ) {
self . equalHeights ( ) ;
self . bindEvents ( ) ;
} )
self . config . $window . resize ( function ( ) {
self . config . widthChanged = false ;
self . config . heightChanged = false ;
if ( self . config . $window . width ( ) != self . config . windowWidth ) {
self . config . widthChanged = true ; self . widthResizeUpdateConfig ( )
}
if ( self . config . $window . height ( ) != self . config . windowHeight ) {
self . config . windowHeight = self . config . $window . height ( ) ;
self . config . heightChanged = true
}
self . equalHeights ( ) ;
} ) ;
self . config . $window . scroll ( function ( ) {
self . config . $hasScrolled = false ;
if ( self . config . $window . scrollTop ( ) != self . config . windowTop ) {
self . config . $hasScrolled = true ; self . config . windowTop = self . config . $window . scrollTop ( ) ;
self . localScrollHighlight ( )
}
} ) ;
self . config . $window . on ( 'orientationchange' , function ( ) {
self . widthResizeUpdateConfig ( ) ; self . isotopeGrids ( ) ; self . vcexFilterNav ( ) ;
self . archiveMasonryGrids ( )
} )
} ,
initUpdateConfig : function ( ) {
var self = this ;
self . config . $body . addClass ( 'wpex-docready wpb-js-composer' ) ;
self . config . vcActive = this . config . $body . hasClass ( 'wpb-js-composer' ) ;
self . config . viewportWidth = self . viewportWidth ( ) ; self . config . isRetina = self . retinaCheck ( ) ; if ( self . config . isRetina ) { self . config . $body . addClass ( 'wpex-is-retina' ) }
if ( self . mobileCheck ( ) ) { self . config . isMobile = true ; self . config . $body . addClass ( 'wpex-is-mobile-device' ) }
var $wpAdminBar = $ ( '#wpadminbar' ) ; if ( $wpAdminBar . length ) { self . config . $wpAdminBar = $wpAdminBar }
var $siteWrap = $ ( '#wrap' ) ; if ( $siteWrap ) { self . config . $siteWrap = $siteWrap }
var $siteMain = $ ( '#main' ) ; if ( $siteMain ) { self . config . $siteMain = $siteMain }
var $siteHeader = $ ( '#site-header' ) ; if ( $siteHeader . length ) { self . config . siteHeaderStyle = wpexLocalize . siteHeaderStyle ; self . config . $siteHeader = $ ( '#site-header' ) }
var $siteLogo = $ ( '#site-logo img.logo-img' ) ; if ( $siteLogo . length ) { self . config . $siteLogo = $siteLogo ; self . config . siteLogoSrc = self . config . $siteLogo . attr ( 'src' ) }
var $siteNavWrap = $ ( '#site-navigation-wrap' ) ; if ( $siteNavWrap . length ) {
self . config . $siteNavWrap = $siteNavWrap ; var $siteNav = $ ( '#site-navigation' , $siteNavWrap ) ; if ( $siteNav . length ) { self . config . $siteNav = $siteNav }
if ( wpexLocalize . hasStickyNavbar ) { self . config . hasStickyNavbar = true }
var $siteNavDropdowns = $ ( '.dropdown-menu > .menu-item-has-children > ul' , $siteNavWrap ) ; if ( $siteNavWrap . length ) { self . config . $siteNavDropdowns = $siteNavDropdowns }
}
if ( wpexLocalize . hasMobileMenu ) { self . config . mobileMenuStyle = wpexLocalize . mobileMenuStyle ; self . config . mobileMenuToggleStyle = wpexLocalize . mobileMenuToggleStyle ; self . config . mobileMenuBreakpoint = wpexLocalize . mobileMenuBreakpoint }
self . config . $footerReveal = $ ( '.footer-reveal-visible' ) ; if ( self . config . $footerReveal . length && self . config . $siteWrap && self . config . $siteMain ) { self . config . $hasFooterReveal = true }
if ( self . config . $siteHeader && self . config . $body . hasClass ( 'has-overlay-header' ) ) { self . config . hasHeaderOverlay = true }
var $topBarWrap = $ ( '#top-bar-wrap' ) ; if ( $topBarWrap . length ) { self . config . hasTopBar = true ; if ( $topBarWrap . hasClass ( 'wpex-top-bar-sticky' ) ) { self . config . $stickyTopBar = $topBarWrap ; if ( self . config . $stickyTopBar . length ) { self . config . hasStickyTopBar = true ; self . config . hasStickyTopBarMobile = wpexLocalize . hasStickyTopBarMobile } } }
self . config . hasStickyMobileHeader = wpexLocalize . hasStickyMobileHeader ; if ( self . config . $siteHeader && wpexLocalize . hasStickyHeader ) { self . config . hasStickyHeader = true }
if ( this . config . $body . hasClass ( 'wpex-has-vertical-header' ) ) { self . config . verticalHeaderActive = true }
if ( wpexLocalize . localScrollSpeed ) { self . config . localScrollSpeed = parseInt ( wpexLocalize . localScrollSpeed ) }
if ( wpexLocalize . localScrollEasing ) { self . config . localScrollEasing = wpexLocalize . localScrollEasing ; if ( 'false' == self . config . localScrollEasing ) { self . config . localScrollEasing = 'swing' } }
self . config . localScrollSections = self . localScrollSections ( )
} , windowLoadUpdateConfig : function ( ) {
if ( this . config . $siteHeader ) { var siteHeaderTop = this . config . $siteHeader . offset ( ) . top ; this . config . windowHeight = this . config . $window . height ( ) ; this . config . siteHeaderHeight = this . config . $siteHeader . outerHeight ( ) ; this . config . siteHeaderBottom = siteHeaderTop + this . config . siteHeaderHeight ; this . config . siteHeaderTop = siteHeaderTop ; if ( this . config . $siteLogo ) { this . config . siteLogoHeight = this . config . $siteLogo . height ( ) } }
this . config . localScrollOffset = this . parseLocalScrollOffset ( 'init' )
} , widthResizeUpdateConfig : function ( ) {
this . config . windowHeight = this . config . $window . height ( ) ;
this . config . windowWidth = this . config . $window . width ( ) ;
this . config . windowTop = this . config . $window . scrollTop ( ) ;
this . config . viewportWidth = this . viewportWidth ( ) ;
if ( this . config . $siteHeader ) {
this . config . siteHeaderHeight = this . config . $siteHeader . outerHeight ( )
}
if ( this . config . $siteLogo ) {
this . config . siteLogoHeight = this . config . $siteLogo . height ( )
}
if ( this . config . windowWidth < 960 ) {
this . config . verticalHeaderActive = false
} else if ( this . config . $body . hasClass ( 'wpex-has-vertical-header' ) ) {
this . config . verticalHeaderActive = true
}
this . config . localScrollOffset = this . parseLocalScrollOffset ( 'resize' ) ;
this . megaMenusWidth ( ) ;
this . inlineHeaderLogo ( ) ;
this . responsiveText ( ) ;
} , retinaCheck : function ( ) {
var mediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)' ; if ( window . devicePixelRatio > 1 ) { return true }
if ( window . matchMedia && window . matchMedia ( mediaQuery ) . matches ) { return true }
return false
} , mobileCheck : function ( ) { if ( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i . test ( navigator . userAgent ) ) { return true } } , viewportWidth : function ( ) {
var e = window , a = 'inner' ; if ( ! ( 'innerWidth' in window ) ) { a = 'client' ; e = document . documentElement || document . body }
return e [ a + 'Width' ]
} , superfish : function ( ) {
if ( ! this . config . $siteNav || undefined === $ . fn . superfish ) { return }
$ ( 'ul.sf-menu' , this . config . $siteNav ) . superfish ( { delay : wpexLocalize . superfishDelay , speed : wpexLocalize . superfishSpeed , speedOut : wpexLocalize . superfishSpeedOut , cssArrows : false , disableHI : false , animation : { opacity : 'show' } , animationOut : { opacity : 'hide' } } )
} , megaMenusWidth : function ( ) {
if ( ! wpexLocalize . megaMenuJS || 'one' != this . config . siteHeaderStyle || ! this . config . $siteNavDropdowns || ! this . config . $siteNavWrap . is ( ':visible' ) ) { return }
var $megamenu = $ ( '.megamenu > ul' , this . config . $siteNavWrap ) ; if ( ! $megamenu . length ) { return }
var $headerContainerWidth = this . config . $siteHeader . find ( '.container' ) . outerWidth ( ) , $navWrapWidth = this . config . $siteNavWrap . outerWidth ( ) , $siteNavigationWrapPosition = parseInt ( this . config . $siteNavWrap . css ( 'right' ) ) ; if ( 'auto' == $siteNavigationWrapPosition ) { $siteNavigationWrapPosition = 0 }
var $megaMenuNegativeMargin = $headerContainerWidth - $navWrapWidth - $siteNavigationWrapPosition ; $megamenu . css ( { 'width' : $headerContainerWidth , 'margin-left' : - $megaMenuNegativeMargin } )
} , megaMenusTop : function ( ) {
var self = this ; if ( ! self . config . $siteNavDropdowns || 'one' != self . config . siteHeaderStyle ) { return }
var $megamenu = $ ( '.megamenu > ul' , self . config . $siteNavWrap ) ; if ( ! $megamenu . length ) return ; function setPosition ( ) { if ( self . config . $siteNavWrap . is ( ':visible' ) ) { var $headerHeight = self . config . $siteHeader . outerHeight ( ) ; var $navHeight = self . config . $siteNavWrap . outerHeight ( ) ; var $megaMenuTop = $headerHeight - $navHeight ; $megamenu . css ( { 'top' : $megaMenuTop / 2 + $navHeight } ) } }
setPosition ( ) ; this . config . $window . scroll ( function ( ) { setPosition ( ) } ) ; this . config . $window . resize ( function ( ) { setPosition ( ) } ) ; $ ( '.megamenu > a' , self . config . $siteNav ) . hover ( function ( ) { setPosition ( ) } )
} , flushDropdownsTop : function ( ) {
var self = this ; if ( ! self . config . $siteNavDropdowns || ! self . config . $siteNavWrap . hasClass ( 'wpex-flush-dropdowns' ) ) { return }
function setPosition ( ) { if ( self . config . $siteNavWrap . is ( ':visible' ) ) { var $headerHeight = self . config . $siteHeader . outerHeight ( ) ; var $siteNavWrapHeight = self . config . $siteNavWrap . outerHeight ( ) ; var $dropTop = $headerHeight - $siteNavWrapHeight ; self . config . $siteNavDropdowns . css ( 'top' , $dropTop / 2 + $siteNavWrapHeight ) } }
setPosition ( ) ; this . config . $window . scroll ( function ( ) { setPosition ( ) } ) ; this . config . $window . resize ( function ( ) { setPosition ( ) } ) ; $ ( '.wpex-flush-dropdowns li.menu-item-has-children > a' ) . hover ( function ( ) { setPosition ( ) } )
} , mobileMenu : function ( ) { if ( 'sidr' == this . config . mobileMenuStyle && typeof wpexLocalize . sidrSource !== 'undefined' ) { this . mobileMenuSidr ( ) } else if ( 'toggle' == this . config . mobileMenuStyle ) { this . mobileMenuToggle ( ) } else if ( 'full_screen' == this . config . mobileMenuStyle ) { this . mobileMenuFullScreen ( ) } } , mobileMenuSidr : function ( ) {
var self = this , $toggleBtn = $ ( 'a.mobile-menu-toggle, li.mobile-menu-toggle > a' ) ; self . config . $body . append ( '<div class="wpex-sidr-overlay wpex-hidden"></div>' ) ; var $sidrOverlay = $ ( '.wpex-sidr-overlay' ) ; $toggleBtn . click ( function ( ) { $ ( this ) . toggleClass ( 'wpex-active' ) } ) ; $toggleBtn . sidr ( {
name : 'sidr-main' , source : wpexLocalize . sidrSource , side : wpexLocalize . sidrSide , displace : wpexLocalize . sidrDisplace , speed : parseInt ( wpexLocalize . sidrSpeed ) , renaming : true , bind : 'click' , onOpen : function ( ) {
$ ( '#sidr-main' ) . addClass ( 'wpex-mobile-menu' ) ; if ( wpexLocalize . sidrBodyNoScroll ) { self . config . $body . addClass ( 'wpex-noscroll' ) }
$sidrOverlay . fadeIn ( wpexLocalize . sidrSpeed , function ( ) { $sidrOverlay . addClass ( 'wpex-custom-cursor' ) } ) ; $ ( '.wpex-sidr-overlay' ) . on ( 'click' , function ( event ) { $ . sidr ( 'close' , 'sidr-main' ) ; return false } )
} , onClose : function ( ) {
$toggleBtn . removeClass ( 'wpex-active' ) ; if ( wpexLocalize . sidrBodyNoScroll ) { self . config . $body . removeClass ( 'wpex-noscroll' ) }
$sidrOverlay . removeClass ( 'wpex-custom-cursor' ) . fadeOut ( wpexLocalize . sidrSpeed )
} , onCloseEnd : function ( ) { $ ( '.sidr-class-menu-item-has-children.active' ) . removeClass ( 'active' ) . find ( 'ul' ) . hide ( ) ; if ( $ . fn . vc _rowBehaviour !== undefined ) { vc _rowBehaviour ( ) } }
} ) ; var $sidrMain = $ ( '#sidr-main' ) ; var $sidrMenu = $ ( '.sidr-class-dropdown-menu' , $sidrMain ) , $sidrDropdownTargetEl = $ ( '.sidr-class-menu-item-has-children > a' , $sidrMenu ) ; $ ( '.sidr-class-menu-item-has-children' , $sidrMenu ) . children ( 'a' ) . append ( '<span class="sidr-class-dropdown-toggle"></span>' ) ; $sidrDropdownTargetEl . on ( 'click' , function ( event ) {
var $parentEl = $ ( this ) . parent ( 'li' ) ; if ( ! $parentEl . hasClass ( 'active' ) ) { var $allParentLis = $parentEl . parents ( 'li' ) ; $ ( '.sidr-class-menu-item-has-children' , $sidrMenu ) . not ( $allParentLis ) . removeClass ( 'active' ) . children ( 'ul' ) . stop ( true , true ) . slideUp ( 'fast' ) ; $parentEl . addClass ( 'active' ) . children ( 'ul' ) . stop ( true , true ) . slideDown ( 'fast' ) } else { $parentEl . removeClass ( 'active' ) ; $parentEl . find ( 'li' ) . removeClass ( 'active' ) ; $parentEl . find ( 'ul' ) . stop ( true , true ) . slideUp ( 'fast' ) }
return false
} ) ; var $parents = $ ( 'li.sidr-class-menu-item-has-children > a' , $sidrMenu ) ; $parents . each ( function ( ) { var $this = $ ( this ) ; if ( $this && $this . attr ( 'href' ) && '#' != $this . attr ( 'href' ) ) { var $parent = $this . parent ( 'li' ) , el = $parent . clone ( ) ; $this . removeAttr ( 'data-ls_linkto' ) ; $parent . removeClass ( 'sidr-class-local-scroll' ) ; el . removeClass ( 'sidr-class-menu-item-has-children sidr-class-dropdown' ) ; el . find ( 'a' ) . removeClass ( ) ; el . find ( 'ul, .sidr-class-dropdown-toggle' ) . remove ( ) . end ( ) . prependTo ( $this . next ( 'ul' ) ) } } ) ; $ ( "[class*='sidr-class-fa']" , $sidrMain ) . attr ( 'class' , function ( i , c ) { c = c . replace ( 'sidr-class-fa' , 'fa' ) ; c = c . replace ( 'sidr-class-fa-' , 'fa-' ) ; return c } ) ; $ ( '.sidr-class-wpex-close > a' , $sidrMain ) . on ( 'click' , function ( e ) { e . preventDefault ( ) ; $ . sidr ( 'close' , 'sidr-main' ) } ) ; self . config . $window . resize ( function ( ) { if ( self . config . viewportWidth >= self . config . mobileMenuBreakpoint ) { $ . sidr ( 'close' , 'sidr-main' ) } } ) ; $ ( 'li.sidr-class-local-scroll > a' , $sidrMain ) . click ( function ( ) { var $hash = this . hash ; if ( $ . inArray ( $hash , self . config . localScrollSections ) > - 1 ) { $ . sidr ( 'close' , 'sidr-main' ) ; self . scrollTo ( $hash ) ; return false } } )
} , mobileMenuToggle : function ( ) {
var self = this , $position = wpexLocalize . mobileToggleMenuPosition , $classes = 'mobile-toggle-nav wpex-mobile-menu wpex-clr wpex-togglep-' + $position , $mobileMenuContents = '' , $mobileSearch = $ ( '#mobile-menu-search' ) , $appendTo = self . config . $siteHeader , $toggleBtn = $ ( 'a.mobile-menu-toggle, li.mobile-menu-toggle > a' ) ; if ( 'fixed_top' == self . config . mobileMenuToggleStyle ) { $appendTo = $ ( '#wpex-mobile-menu-fixed-top' ) ; if ( $appendTo . length ) { $appendTo . append ( '<nav class="' + $classes + '"></nav>' ) } }
else if ( 'absolute' == $position ) { if ( 'navbar' == self . config . mobileMenuToggleStyle ) { $appendTo = $ ( '#wpex-mobile-menu-navbar' ) ; if ( $appendTo . length ) { $appendTo . append ( '<nav class="' + $classes + '"></nav>' ) } } else if ( $appendTo ) { $appendTo . append ( '<nav class="' + $classes + '"></nav>' ) } }
else if ( 'afterself' == $position ) { $appendTo = $ ( '#wpex-mobile-menu-navbar' ) ; $ ( '<nav class="' + $classes + '"></nav>' ) . insertAfter ( $appendTo ) } else { $ ( '<nav class="' + $classes + '"></nav>' ) . insertAfter ( $appendTo ) }
var $mobileToggleNav = $ ( '.mobile-toggle-nav' ) ; if ( $ ( '#mobile-menu-alternative' ) . length ) { $mobileMenuContents = $ ( '#mobile-menu-alternative .dropdown-menu' ) . html ( ) } else { $mobileMenuContents = $ ( '.dropdown-menu' , self . config . $siteNav ) . html ( ) }
$mobileToggleNav . html ( '<ul class="mobile-toggle-nav-ul">' + $mobileMenuContents + '</ul>' ) ; $ ( '.mobile-toggle-nav-ul, .mobile-toggle-nav-ul *' ) . children ( ) . each ( function ( ) { $ ( this ) . removeAttr ( 'style' ) } ) ; $ ( '.mobile-toggle-nav-ul' ) . addClass ( 'container' ) ; var parseDropParents = false ; if ( ! parseDropParents ) { var $parents = $mobileToggleNav . find ( 'li.menu-item-has-children > a' ) ; $parents . each ( function ( ) { var $this = $ ( this ) ; if ( $this && $this . attr ( 'href' ) && '#' != $this . attr ( 'href' ) ) { var $parent = $this . parent ( 'li' ) , el = $parent . clone ( ) ; $parent . removeClass ( 'local-scroll' ) ; $this . removeAttr ( 'data-ls_linkto' ) ; el . removeClass ( 'menu-item-has-children' ) ; el . find ( 'ul, .wpex-open-submenu' ) . remove ( ) . end ( ) . prependTo ( $this . next ( 'ul' ) ) } } ) ; parseDropParents = true }
var dropDownParents = $mobileToggleNav . find ( '.menu-item-has-children' ) ; dropDownParents . children ( 'a' ) . append ( '<span class="wpex-open-submenu" aria-haspopup="true"></span>' ) ; var $dropdownTargetEl = $dropdownTargetEl = $ ( '.menu-item-has-children > a' , $mobileToggleNav ) ; $dropdownTargetEl . on ( 'click' , function ( event ) {
var $parentEl = $ ( this ) . parent ( 'li' ) ; if ( ! $parentEl . hasClass ( 'active' ) ) { var $allParentLis = $parentEl . parents ( 'li' ) ; $ ( '.menu-item-has-children' , $mobileToggleNav ) . not ( $allParentLis ) . removeClass ( 'active' ) . children ( 'ul' ) . stop ( true , true ) . slideUp ( 'fast' ) ; $parentEl . addClass ( 'active' ) . children ( 'ul' ) . stop ( true , true ) . slideDown ( 'fast' ) } else { $parentEl . removeClass ( 'active' ) ; $parentEl . find ( 'li' ) . removeClass ( 'active' ) ; $parentEl . find ( 'ul' ) . stop ( true , true ) . slideUp ( 'fast' ) }
return false
} ) ; function openToggle ( $button ) {
if ( wpexLocalize . animateMobileToggle ) { $mobileToggleNav . stop ( true , true ) . slideDown ( 'fast' ) . addClass ( 'visible' ) } else { $mobileToggleNav . addClass ( 'visible' ) }
$button . addClass ( 'wpex-active' )
}
function closeToggle ( $button ) {
if ( wpexLocalize . animateMobileToggle ) { $mobileToggleNav . stop ( true , true ) . slideUp ( 'fast' ) . removeClass ( 'visible' ) } else { $mobileToggleNav . removeClass ( 'visible' ) }
$mobileToggleNav . find ( 'li.active > ul' ) . stop ( true , true ) . slideUp ( 'fast' ) ; $mobileToggleNav . find ( '.active' ) . removeClass ( 'active' ) ; $button . removeClass ( 'wpex-active' )
}
$toggleBtn . on ( 'click' , function ( e ) {
if ( $mobileToggleNav . hasClass ( 'visible' ) ) { closeToggle ( $ ( this ) ) } else { openToggle ( $ ( this ) ) }
return false
} ) ; self . config . $window . resize ( function ( ) { if ( self . config . viewportWidth >= self . config . mobileMenuBreakpoint && $mobileToggleNav . hasClass ( 'visible' ) ) { closeToggle ( $toggleBtn ) } } ) ; if ( $mobileSearch . length ) { $mobileToggleNav . append ( '<div class="mobile-toggle-nav-search container"></div>' ) ; $ ( '.mobile-toggle-nav-search' ) . append ( $mobileSearch ) }
} , mobileMenuFullScreen : function ( ) {
var self = this , $style = wpexLocalize . fullScreenMobileMenuStyle ? wpexLocalize . fullScreenMobileMenuStyle : false , $mobileSearch = $ ( '#mobile-menu-search' ) , $menuHTML = '' ; self . config . $body . append ( '<div class="full-screen-overlay-nav wpex-mobile-menu wpex-clr ' + $style + '"><span class="full-screen-overlay-nav-close">×</span><nav class="full-screen-overlay-nav-ul-wrapper"><ul class="full-screen-overlay-nav-ul"></ul></nav></div>' ) ; var $navUL = $ ( '.full-screen-overlay-nav-ul' ) ; if ( $ ( '#mobile-menu-alternative' ) . length ) { $menuHTML = $ ( '#mobile-menu-alternative .dropdown-menu' ) . html ( ) } else { $menuHTML = $ ( '#site-navigation .dropdown-menu' ) . html ( ) }
$navUL . html ( $menuHTML ) ; var $nav = $ ( '.full-screen-overlay-nav' ) ; $ ( '.full-screen-overlay-nav, .full-screen-overlay-nav *' ) . children ( ) . each ( function ( ) { $ ( this ) . removeAttr ( 'style' ) } ) ; var parseDropParents = false ; if ( ! parseDropParents ) { var $parents = $nav . find ( 'li.menu-item-has-children > a' ) ; $parents . each ( function ( ) { var $this = $ ( this ) ; if ( $this && $this . attr ( 'href' ) && '#' != $this . attr ( 'href' ) ) { var $parent = $this . parent ( 'li' ) , el = $parent . clone ( ) ; $parent . removeClass ( 'local-scroll' ) ; $this . removeAttr ( 'data-ls_linkto' ) ; el . removeClass ( 'menu-item-has-children' ) ; el . find ( 'ul' ) . remove ( ) . end ( ) . prependTo ( $this . next ( 'ul' ) ) } } ) ; parseDropParents = true }
var $dropdownTargetEl = $nav . find ( 'li.menu-item-has-children > a' ) ; $dropdownTargetEl . on ( 'click' , function ( event ) {
var $parentEl = $ ( this ) . parent ( 'li' ) ; if ( ! $parentEl . hasClass ( 'wpex-active' ) ) { var $allParentLis = $parentEl . parents ( 'li' ) ; $nav . find ( '.menu-item-has-children' ) . not ( $allParentLis ) . removeClass ( 'wpex-active' ) . children ( 'ul' ) . stop ( true , true ) . slideUp ( 'fast' ) ; $parentEl . addClass ( 'wpex-active' ) . children ( 'ul' ) . stop ( true , true ) . slideDown ( { duration : 'normal' , easing : 'easeInQuad' } ) } else { $parentEl . removeClass ( 'wpex-active' ) ; $parentEl . find ( 'li' ) . removeClass ( 'wpex-active' ) ; $parentEl . find ( 'ul' ) . stop ( true , true ) . slideUp ( 'fast' ) }
return false
} ) ; $ ( '.mobile-menu-toggle' ) . on ( 'click' , function ( ) { $nav . addClass ( 'visible' ) ; self . config . $body . addClass ( 'wpex-noscroll' ) ; return false } ) ; $ ( '.local-scroll > a' , $nav ) . click ( function ( ) { var $hash = this . hash ; if ( $ . inArray ( $hash , self . config . localScrollSections ) > - 1 ) { $nav . removeClass ( 'visible' ) ; self . config . $body . removeClass ( 'wpex-noscroll' ) ; return false } } ) ; $ ( '.full-screen-overlay-nav-close' ) . on ( 'click' , function ( ) { $nav . removeClass ( 'visible' ) ; $nav . find ( 'li.wpex-active > ul' ) . stop ( true , true ) . slideUp ( 'fast' ) ; $nav . find ( '.wpex-active' ) . removeClass ( 'wpex-active' ) ; self . config . $body . removeClass ( 'wpex-noscroll' ) ; return false } ) ; if ( $mobileSearch . length ) { $navUL . append ( $mobileSearch ) ; $ ( '#mobile-menu-search' ) . wrap ( '<li class="wpex-search"></li>' ) }
} , navNoClick : function ( ) { $ ( 'li.nav-no-click > a, li.sidr-class-nav-no-click > a' ) . on ( 'click' , function ( ) { return false } ) } , menuSearch : function ( ) {
var self = this ; var $toggleEl = '' ; var $wrapEl = $ ( '.header-searchform-wrap' ) ; if ( $wrapEl . length ) {
if ( $wrapEl . data ( 'placeholder' ) ) { $wrapEl . find ( 'input[type="search"]' ) . attr ( 'placeholder' , $wrapEl . data ( 'placeholder' ) ) }
if ( $wrapEl . data ( 'disable-autocomplete' ) ) { $wrapEl . find ( 'input[type="search"]' ) . attr ( 'autocomplete' , 'off' ) }
}
if ( 'drop_down' == wpexLocalize . menuSearchStyle ) {
$toggleEl = $ ( 'a.search-dropdown-toggle, a.mobile-menu-search' ) ; var $searchDropdownForm = $ ( '#searchform-dropdown' ) ; $toggleEl . click ( function ( event ) {
$searchDropdownForm . toggleClass ( 'show' ) ; $ ( this ) . parent ( 'li' ) . toggleClass ( 'active' ) ; var $transitionDuration = $searchDropdownForm . css ( 'transition-duration' ) ; $transitionDuration = $transitionDuration . replace ( 's' , '' ) * 1000 ; if ( $transitionDuration ) { setTimeout ( function ( ) { $searchDropdownForm . find ( 'input[type="search"]' ) . focus ( ) } , $transitionDuration ) }
$ ( 'div#current-shop-items-dropdown' ) . removeClass ( 'show' ) ; $ ( 'li.wcmenucart-toggle-dropdown' ) . removeClass ( 'active' ) ; return false
} ) ; self . config . $document . on ( 'click' , function ( event ) { if ( ! $ ( event . target ) . closest ( '#searchform-dropdown.show' ) . length ) { $toggleEl . parent ( 'li' ) . removeClass ( 'active' ) ; $searchDropdownForm . removeClass ( 'show' ) } } )
}
else if ( 'overlay' == wpexLocalize . menuSearchStyle ) {
$toggleEl = $ ( 'a.search-overlay-toggle, a.mobile-menu-search, li.search-overlay-toggle > a' ) ; var $overlayEl = $ ( '#wpex-searchform-overlay' ) ; var $inner = $overlayEl . find ( '.wpex-inner' ) ; $toggleEl . on ( 'click' , function ( event ) {
$overlayEl . toggleClass ( 'active' ) ; $overlayEl . find ( 'input[type="search"]' ) . val ( '' ) ; if ( $overlayEl . hasClass ( 'active' ) ) { var $overlayElTransitionDuration = $overlayEl . css ( 'transition-duration' ) ; $overlayElTransitionDuration = $overlayElTransitionDuration . replace ( 's' , '' ) * 1000 ; setTimeout ( function ( ) { $overlayEl . find ( 'input[type="search"]' ) . focus ( ) } , $overlayElTransitionDuration ) }
return false
} ) ; $inner . click ( function ( event ) { event . stopPropagation ( ) } ) ; $overlayEl . click ( function ( ) { $overlayEl . removeClass ( 'active' ) } )
}
else if ( 'header_replace' == wpexLocalize . menuSearchStyle ) {
$toggleEl = $ ( 'a.search-header-replace-toggle, a.mobile-menu-search' ) ; var $headerReplace = $ ( '#searchform-header-replace' ) ; $toggleEl . click ( function ( event ) {
$headerReplace . toggleClass ( 'show' ) ; var $transitionDuration = $headerReplace . css ( 'transition-duration' ) ; $transitionDuration = $transitionDuration . replace ( 's' , '' ) * 1000 ; if ( $transitionDuration ) { setTimeout ( function ( ) { $headerReplace . find ( 'input[type="search"]' ) . focus ( ) } , $transitionDuration ) }
return false
} ) ; $ ( '#searchform-header-replace-close' ) . click ( function ( ) { $headerReplace . removeClass ( 'show' ) ; return false } ) ; self . config . $document . on ( 'click' , function ( event ) { if ( ! $ ( event . target ) . closest ( $ ( '#searchform-header-replace.show' ) ) . length ) { $headerReplace . removeClass ( 'show' ) } } )
}
} , headerCart : function ( ) {
} , headerOverlayOffset : function ( ) {
} , hideEditLink : function ( ) {
} , inlineHeaderLogo : function ( ) {
var self = this ; if ( 'five' != self . config . siteHeaderStyle ) return ; var $headerLogo = $ ( '#site-header-inner > .header-five-logo' , self . config . $siteHeader ) ; var $headerNav = $ ( '.navbar-style-five' , self . config . $siteHeader ) ; var $navLiCount = $headerNav . children ( '#site-navigation' ) . children ( 'ul' ) . children ( 'li' ) . size ( ) ; var $navBeforeMiddleLi = Math . round ( $navLiCount / 2 ) - parseInt ( wpexLocalize . headerFiveSplitOffset ) ; var $centeredLogo = $ ( '.menu-item-logo .header-five-logo' ) ; if ( this . config . viewportWidth >= this . config . mobileMenuBreakpoint && $headerLogo . length && $headerNav . length ) { $ ( '<li class="menu-item-logo"></li>' ) . insertAfter ( $headerNav . find ( '#site-navigation > ul > li:nth( ' + $navBeforeMiddleLi + ' )' ) ) ; $headerLogo . appendTo ( $headerNav . find ( '.menu-item-logo' ) ) }
if ( this . config . viewportWidth < this . config . mobileMenuBreakpoint && $centeredLogo . length ) { $centeredLogo . prependTo ( $ ( '#site-header-inner' ) ) ; $ ( '.menu-item-logo' ) . remove ( ) }
$headerLogo . addClass ( 'display' )
} , backTopLink : function ( ) { var self = this ; var $scrollTopLink = $ ( 'a#site-scroll-top' ) ; if ( $scrollTopLink . length ) { var $speed = wpexLocalize . scrollTopSpeed ? parseInt ( wpexLocalize . scrollTopSpeed ) : 1000 ; var $offset = wpexLocalize . scrollTopOffset ? parseInt ( wpexLocalize . scrollTopOffset ) : 100 ; self . config . $window . scroll ( function ( ) { if ( $ ( this ) . scrollTop ( ) > $offset ) { $scrollTopLink . addClass ( 'show' ) } else { $scrollTopLink . removeClass ( 'show' ) } } ) ; $scrollTopLink . on ( 'click' , function ( event ) { $ ( 'html, body' ) . stop ( true , true ) . animate ( { scrollTop : 0 } , $speed , self . config . localScrollEasing ) ; return false } ) } } , smoothCommentScroll : function ( ) { var self = this ; $ ( '.single li.comment-scroll a' ) . click ( function ( event ) { var $target = $ ( '#comments' ) ; var $offset = $target . offset ( ) . top - self . config . localScrollOffset - 20 ; self . scrollTo ( $target , $offset ) ; return false } ) } , tipsyTooltips : function ( ) { $ ( 'a.tooltip-left' ) . tipsy ( { fade : true , gravity : 'e' } ) ; $ ( 'a.tooltip-right' ) . tipsy ( { fade : true , gravity : 'w' } ) ; $ ( 'a.tooltip-up' ) . tipsy ( { fade : true , gravity : 's' } ) ; $ ( 'a.tooltip-down' ) . tipsy ( { fade : true , gravity : 'n' } ) } , responsiveText : function ( ) { var self = this ; var $responsiveText = $ ( '.wpex-responsive-txt' ) ; $responsiveText . each ( function ( ) { var $this = $ ( this ) ; var $thisWidth = $this . width ( ) ; var $data = $this . data ( ) ; var $minFont = self . parseData ( $data . minFontSize , 13 ) ; var $maxFont = self . parseData ( $data . maxFontSize , 40 ) ; var $ratio = self . parseData ( $data . responsiveTextRatio , 10 ) ; var $fontBase = $thisWidth / $ratio ; var $fontSize = $fontBase > $maxFont ? $maxFont : $fontBase < $minFont ? $minFont : $fontBase ; $this . css ( 'font-size' , $fontSize + 'px' ) } ) } , toggleBar : function ( ) {
var self = this ; var $toggleBtn = $ ( 'a.toggle-bar-btn, a.togglebar-toggle, .togglebar-toggle > a' ) ; var $toggleBarWrap = $ ( '#toggle-bar-wrap' ) ; if ( $toggleBtn . length && $toggleBarWrap . length ) {
$toggleBtn . on ( 'click' , function ( event ) {
var $fa = $ ( '.toggle-bar-btn' ) . find ( '.fa' ) ; if ( $fa . length ) { $fa . toggleClass ( $toggleBtn . data ( 'icon' ) ) ; $fa . toggleClass ( $toggleBtn . data ( 'icon-hover' ) ) }
$toggleBarWrap . toggleClass ( 'active-bar' ) ; return false
} ) ; self . config . $document . on ( 'click' , function ( event ) { if ( ! $ ( event . target ) . closest ( '#toggle-bar-wrap.active-bar' ) . length ) { $toggleBarWrap . removeClass ( 'active-bar' ) ; var $fa = $toggleBtn . children ( '.fa' ) ; if ( $fa . length ) { $fa . removeClass ( $toggleBtn . data ( 'icon-hover' ) ) . addClass ( $toggleBtn . data ( 'icon' ) ) } } } )
}
} , skillbar : function ( $context ) {
} , milestone : function ( $context ) {
} , twentytwenty : function ( $context ) {
if ( undefined === $ . fn . twentytwenty || undefined === $ . fn . imagesLoaded ) { return }
$ ( '.vcex-image-ba' , $context ) . each ( function ( ) { var $this = $ ( this ) ; $this . imagesLoaded ( function ( ) { $this . twentytwenty ( $this . data ( 'options' ) ) } ) } )
} , countdown : function ( $context ) {
if ( undefined === $ . fn . countdown ) { return }
$ ( '.vcex-countdown' , $context ) . each ( function ( ) {
var $this = $ ( this ) , endDate = $this . data ( 'countdown' ) , days = $this . data ( 'days' ) , hours = $this . data ( 'hours' ) , minutes = $this . data ( 'minutes' ) , seconds = $this . data ( 'seconds' ) , timezone = $this . data ( 'timezone' ) ; if ( timezone && typeof moment . tz !== 'undefined' && $ . isFunction ( moment . tz ) ) { endDate = moment . tz ( endDate , timezone ) . toDate ( ) }
if ( ! endDate ) { return }
$this . countdown ( endDate , function ( event ) { $this . html ( event . strftime ( '<div class="wpex-days"><span>%-D</span> <small>' + days + '</small></div> <div class="wpex-hours"><span>%-H</span> <small>' + hours + '</small></div class="wpex-months"> <div class="wpex-minutes"><span>%-M</span> <small>' + minutes + '</small></div> <div class="wpex-seconds"><span>%-S</span> <small>' + seconds + '</small></div>' ) ) } )
} )
} , typedText : function ( $context ) {
} , parallax : function ( $context ) { $ ( '.wpex-parallax-bg' , $context ) . each ( function ( ) { var $this = $ ( this ) ; $this . scrolly2 ( ) . trigger ( 'scroll' ) ; $this . css ( { 'opacity' : 1 } ) } ) } , parseLocalScrollOffset : function ( instance ) {
var self = this ; var $offset = 0 ; if ( wpexLocalize . localScrollOffset ) { return wpexLocalize . localScrollOffset }
if ( wpexLocalize . localScrollExtraOffset ) { $offset = $offset + parseInt ( wpexLocalize . localScrollExtraOffset ) }
if ( $ ( '#wpadminbar' ) . is ( ':visible' ) ) { $offset = parseInt ( $offset ) + parseInt ( $ ( '#wpadminbar' ) . outerHeight ( ) ) }
if ( 'fixed_top' == self . config . mobileMenuToggleStyle ) { var $mmFixed = $ ( '#wpex-mobile-menu-fixed-top' ) ; if ( $mmFixed . length && $mmFixed . is ( ':visible' ) ) { $offset = parseInt ( $offset ) + parseInt ( $mmFixed . outerHeight ( ) ) } }
if ( self . config . hasStickyTopBar ) { $offset = parseInt ( $offset ) + parseInt ( self . config . $stickyTopBar . outerHeight ( ) ) }
if ( self . config . hasStickyHeader ) {
if ( ! self . config . hasStickyMobileHeader && self . config . windowWidth <= wpexLocalize . stickyHeaderBreakPoint ) { $offset = parseInt ( $offset ) + 0 }
else {
if ( self . config . $siteHeader . hasClass ( 'shrink-sticky-header' ) ) { if ( 'init' == instance || self . config . $siteHeader . is ( ':visible' ) ) { $offset = parseInt ( $offset ) + parseInt ( wpexLocalize . shrinkHeaderHeight ) } }
else { $offset = parseInt ( $offset ) + parseInt ( self . config . siteHeaderHeight ) }
}
}
if ( self . config . hasStickyNavbar ) { if ( self . config . viewportWidth >= wpexLocalize . stickyNavbarBreakPoint ) { $offset = parseInt ( $offset ) + parseInt ( self . config . $siteNavWrap . outerHeight ( ) ) } }
var $vcexNavbarSticky = $ ( '.vcex-navbar-sticky' ) ; if ( $vcexNavbarSticky . length ) { $offset = parseInt ( $offset ) + parseInt ( $vcexNavbarSticky . outerHeight ( ) ) }
$offset = $offset ? $offset - 1 : 0 ; return $offset
} , scrollTo : function ( hash , offset , callback ) {
if ( ! hash ) { return }
var self = this ; var $target = null ; var $page = $ ( 'html, body' ) ; var $isLsDataLink = false ; var $lsTarget = $ ( '[data-ls_id="' + hash + '"]' ) ; if ( $lsTarget . length ) { $target = $lsTarget ; $isLsDataLink = true }
else { if ( typeof hash == 'string' ) { $target = $ ( hash ) } else { $target = hash } }
if ( $target . length ) {
var $lsSpeed = self . config . localScrollSpeed ? parseInt ( self . config . localScrollSpeed ) : 1000 , $lsOffset = self . config . localScrollOffset , $lsEasing = self . config . localScrollEasing ; offset = offset ? offset : $target . offset ( ) . top - $lsOffset ; if ( hash && $isLsDataLink && wpexLocalize . localScrollUpdateHash ) { window . location . hash = hash }
var $mobileToggleNav = $ ( '.mobile-toggle-nav' ) ; if ( $mobileToggleNav . hasClass ( 'visible' ) ) { $ ( 'a.mobile-menu-toggle, li.mobile-menu-toggle > a' ) . removeClass ( 'wpex-active' ) ; if ( wpexLocalize . animateMobileToggle ) { $mobileToggleNav . slideUp ( 'fast' , function ( ) { $mobileToggleNav . removeClass ( 'visible' ) ; $page . stop ( true , true ) . animate ( { scrollTop : $target . offset ( ) . top - $lsOffset } , $lsSpeed ) } ) } else { $mobileToggleNav . hide ( ) . removeClass ( 'visible' ) ; $page . stop ( true , true ) . animate ( { scrollTop : $target . offset ( ) . top - $lsOffset } , $lsSpeed ) } }
else { $page . stop ( true , true ) . animate ( { scrollTop : offset } , $lsSpeed , $lsEasing ) }
}
} , scrollToHash : function ( self ) {
var hash = location . hash ; var $target = '' ; var $offset = '' ; if ( ! hash ) { return }
if ( '#view_comments' == hash || '#comments_reply' == hash ) {
$target = $ ( '#comments' ) ; $offset = $target . offset ( ) . top - self . config . localScrollOffset - 20 ; if ( $target . length ) { self . scrollTo ( $target , $offset ) }
return
}
if ( self . config . hasStickyHeader && hash . indexOf ( 'comment-' ) != - 1 ) { $target = $ ( hash ) ; $offset = $target . offset ( ) . top - self . config . localScrollOffset - 20 ; self . scrollTo ( $target , $offset ) ; return }
if ( hash . indexOf ( 'localscroll-' ) != - 1 ) { self . scrollTo ( hash . replace ( 'localscroll-' , '' ) ) ; return }
if ( $ ( '[data-ls_id="' + hash + '"]' ) . length ) { self . scrollTo ( hash ) ; return }
} , localScrollSections : function ( ) {
var self = this ; if ( self . config . $siteNav ) { var $navLinks = $ ( 'a' , this . config . $siteNav ) ; var $location = location ; var $currentPage = $location . href ; $currentPage = $location . hash ? $currentPage . substr ( 0 , $currentPage . indexOf ( '#' ) ) : $currentPage ; $navLinks . each ( function ( ) { var $this = $ ( this ) ; var $ref = $this . attr ( 'href' ) ; if ( $ref && $ref . indexOf ( 'localscroll-' ) != - 1 ) { $this . parent ( 'li' ) . addClass ( 'local-scroll' ) ; var $withoutHash = $ref . substr ( 0 , $ref . indexOf ( '#' ) ) ; if ( $withoutHash == $currentPage ) { var $hash = $ref . substring ( $ref . indexOf ( '#' ) + 1 ) ; var $parseHash = $hash . replace ( 'localscroll-' , '' ) ; $this . attr ( 'data-ls_linkto' , '#' + $parseHash ) } } } ) }
var $array = [ ] ; var $links = $ ( self . config . $localScrollTargets ) ; for ( var i = 0 ; i < $links . length ; i ++ ) {
var $link = $links [ i ] ; var $linkDom = $ ( $link ) ; var $href = $ ( $link ) . attr ( 'href' ) ; var $hash = $href ? '#' + $href . replace ( /^.*?(#|$)/ , '' ) : null ; if ( $hash && '#' != $hash ) {
if ( ! $linkDom . attr ( 'data-ls_linkto' ) ) { $linkDom . attr ( 'data-ls_linkto' , $hash ) }
if ( $ ( '[data-ls_id="' + $hash + '"]' ) . length ) { if ( $ . inArray ( $hash , $array ) == - 1 ) { $array . push ( $hash ) } }
else if ( $ ( $hash ) . length ) { if ( $ . inArray ( $hash , $array ) == - 1 ) { $array . push ( $hash ) } }
}
}
return $array
} ,
localScrollHighlight : function ( ) {
if ( ! wpexLocalize . localScrollHighlight ) { return }
var self = this , localScrollSections = self . config . localScrollSections ; if ( ! localScrollSections . length ) { return }
var $windowPos = this . config . $window . scrollTop ( ) , $divPos , $divHeight , $higlight _link ; for ( var i = 0 ; i < localScrollSections . length ; i ++ ) {
var $section = localScrollSections [ i ] ; if ( $ ( '[data-ls_id="' + $section + '"]' ) . length ) { var $targetDiv = $ ( '[data-ls_id="' + $section + '"]' ) ; $divPos = $targetDiv . offset ( ) . top - self . config . localScrollOffset - 1 ; $divHeight = $targetDiv . outerHeight ( ) ; $higlight _link = $ ( '[data-ls_linkto="' + $section + '"]' ) }
else if ( $ ( $section ) . length ) { $divPos = $ ( $section ) . offset ( ) . top - self . config . localScrollOffset - 1 ; $divHeight = $ ( $section ) . outerHeight ( ) ; $higlight _link = $ ( '[data-ls_linkto="' + $section + '"]' ) }
if ( $windowPos >= $divPos && $windowPos < ( $divPos + $divHeight ) ) { $higlight _link . addClass ( 'active' ) ; $higlight _link . parent ( 'li' ) . addClass ( 'current-menu-item' ) } else { $higlight _link . removeClass ( 'active' ) ; $higlight _link . parent ( 'li' ) . removeClass ( 'current-menu-item' ) }
}
} , equalHeights : function ( $context ) {
if ( $ . fn . wpexEqualHeights !== undefined ) {
var container _block = $ ( window . wpexAnimsition . linkElement ) . parents ( window . wpexAnimsition . container _block ) ;
$ ( container _block , $context ) . wpexEqualHeights ( { children : window . wpexAnimsition . children _text _block } ) ;
}
} , footerReveal : function ( ) {
var self = this ; if ( ! self . config . $hasFooterReveal ) { return }
var $footerReveal = self . config . $footerReveal ;
function showHide ( ) {
if ( self . config . viewportWidth < 960 ) {
if ( $footerReveal . hasClass ( 'footer-reveal' ) ) {
$footerReveal . toggleClass ( 'footer-reveal footer-reveal-visible' ) ;
self . config . $siteWrap . css ( 'margin-bottom' , '' )
}
return
}
var $hideFooter = false ,
$footerRevealHeight = $footerReveal . outerHeight ( ) ,
windowHeight = self . config . windowHeight , $heightCheck = 0 ;
if ( $footerReveal . hasClass ( 'footer-reveal' ) ) {
$heightCheck = self . config . $siteWrap . outerHeight ( ) + self . config . localScrollOffset
} else {
$heightCheck = self . config . $siteWrap . outerHeight ( ) + self . config . localScrollOffset - $footerRevealHeight
}
if ( ( windowHeight > $footerRevealHeight ) && ( $heightCheck > windowHeight ) ) {
$hideFooter = true
}
if ( $hideFooter && $footerReveal . hasClass ( 'footer-reveal-visible' ) ) {
self . config . $siteWrap . css ( { 'margin-bottom' : $footerRevealHeight } ) ; $footerReveal . removeClass ( 'footer-reveal-visible' ) ;
$footerReveal . addClass ( 'footer-reveal' )
}
if ( ! $hideFooter && $footerReveal . hasClass ( 'footer-reveal' ) ) { self . config . $siteWrap . css ( 'margin-bottom' , '' ) ; $footerReveal . removeClass ( 'footer-reveal' ) ; $footerReveal . removeClass ( 'wpex-visible' ) ; $footerReveal . addClass ( 'footer-reveal-visible' ) }
}
function reveal ( ) { if ( $footerReveal . hasClass ( 'footer-reveal' ) ) { if ( self . scrolledToBottom ( self . config . $siteMain ) ) { $footerReveal . addClass ( 'wpex-visible' ) } else { $footerReveal . removeClass ( 'wpex-visible' ) } } }
showHide ( ) ; self . config . $window . scroll ( function ( ) { reveal ( ) } ) ; self . config . $window . resize ( function ( ) { if ( self . config . widthChanged || self . config . heightChanged ) { showHide ( ) } } )
} , titleBreadcrumbsFix : function ( ) {
} , customSelects : function ( $context ) { $ ( wpexLocalize . customSelects , $context ) . each ( function ( ) { var $this = $ ( this ) ; var elID = $this . attr ( 'id' ) ; var elClass = elID ? ' wpex-' + elID : '' ; if ( $this . is ( ':visible' ) ) { if ( $this . attr ( 'multiple' ) ) { $this . wrap ( '<div class="wpex-multiselect-wrap' + elClass + '"></div>' ) } else { $this . wrap ( '<div class="wpex-select-wrap' + elClass + '"></div>' ) } } } ) ; $ ( '.wpex-select-wrap' , $context ) . append ( '<span class="fa fa-angle-down" aria-hidden="true"></span>' ) ; if ( $ . fn . select2 !== undefined ) { $ ( '#calc_shipping_country' ) . select2 ( ) } } , fadeIn : function ( ) { $ ( '.fade-in-image, .wpex-show-on-load' ) . addClass ( 'no-opacity' ) } , wpexOwlCarousel : function ( $context ) {
if ( undefined === $ . fn . wpexOwlCarousel ) { return }
var self = this ; $ ( '.wpex-carousel' , $context ) . each ( function ( ) { var $this = $ ( this ) , $data = $this . data ( ) ; var owl = $this . wpexOwlCarousel ( { animateIn : false , animateOut : false , lazyLoad : false , smartSpeed : $data . smartSpeed ? $data . smartSpeed : wpexLocalize . carouselSpeed , rtl : wpexLocalize . isRTL ? true : false , dots : $data . dots , nav : $data . nav , items : $data . items , slideBy : $data . slideby , center : $data . center , loop : $data . loop , margin : $data . margin , autoplay : $data . autoplay , autoplayTimeout : $data . autoplayTimeout , autoHeight : $data . autoHeight , autoWidth : $data . autoWidth , autoplayHoverPause : true , navText : [ '<span class="fa fa-chevron-left"><span>' , '<span class="fa fa-chevron-right"></span>' ] , responsive : { 0 : { items : $data . itemsMobilePortrait } , 480 : { items : $data . itemsMobileLandscape } , 768 : { items : $data . itemsTablet } , 960 : { items : $data . items } } } ) } )
} , sliderPro : function ( $context ) {
var self = this ; if ( undefined === $ . fn . sliderPro ) { return }
$ ( '.wpex-slider' , $context ) . each ( function ( ) {
var $slider = $ ( this ) ; var $data = $slider . data ( ) ; var $slides = $slider . find ( '.sp-slide' ) ; $slider . find ( '.wpex-slider-slide, .wpex-slider-thumbnails.sp-thumbnails' ) . css ( { 'opacity' : 1 , 'display' : 'block' } ) ; var $autoHeight = self . parseData ( $data . autoHeight , true ) ; var $preloader = $slider . prev ( '.wpex-slider-preloaderimg' ) ; var $height = ( $preloader . length && $autoHeight ) ? $preloader . outerHeight ( ) : null ; var $heightAnimationDuration = self . parseData ( $data . heightAnimationDuration , 600 ) ; var $loop = self . parseData ( $data . loop , false ) ; var $autoplay = self . parseData ( $data . autoPlay , true ) ; if ( ! $autoHeight && $slides . length ) { var $tallest = self . getTallestEl ( $slides ) ; $height = $tallest . height ( ) }
$slider . sliderPro ( { aspectRatio : - 1 , width : '100%' , height : $height , responsive : true , fade : self . parseData ( $data . fade , 600 ) , touchSwipe : self . parseData ( $data . touchSwipe , true ) , fadeDuration : self . parseData ( $data . animationSpeed , 600 ) , slideAnimationDuration : self . parseData ( $data . animationSpeed , 600 ) , autoHeight : $autoHeight , heightAnimationDuration : parseInt ( $heightAnimationDuration ) , arrows : self . parseData ( $data . arrows , true ) , fadeArrows : self . parseData ( $data . fadeArrows , true ) , autoplay : $autoplay , autoplayDelay : self . parseData ( $data . autoPlayDelay , 5000 ) , buttons : self . parseData ( $data . buttons , true ) , shuffle : self . parseData ( $data . shuffle , false ) , orientation : self . parseData ( $data . direction , 'horizontal' ) , loop : $loop , keyboard : false , fullScreen : self . parseData ( $data . fullscreen , false ) , slideDistance : self . parseData ( $data . slideDistance , 0 ) , thumbnailsPosition : 'bottom' , thumbnailHeight : self . parseData ( $data . thumbnailHeight , 70 ) , thumbnailWidth : self . parseData ( $data . thumbnailWidth , 70 ) , thumbnailPointer : self . parseData ( $data . thumbnailPointer , false ) , updateHash : self . parseData ( $data . updateHash , false ) , thumbnailArrows : false , fadeThumbnailArrows : false , thumbnailTouchSwipe : true , fadeCaption : self . parseData ( $data . fadeCaption , true ) , captionFadeDuration : 600 , waitForLayers : true , autoScaleLayers : true , forceSize : 'none' , reachVideoAction : 'playVideo' , leaveVideoAction : 'pauseVideo' , endVideoAction : 'nextSlide' , fadeOutPreviousSlide : true , autoplayOnHover : self . parseData ( $data . autoplayOnHover , 'pause' ) , init : function ( event ) { $slider . prev ( '.wpex-slider-preloaderimg' ) . remove ( ) } , gotoSlide : function ( event ) { if ( ! $loop && $autoplay && event . index === $slider . find ( '.sp-slide' ) . length - 1 ) { $slider . data ( 'sliderPro' ) . stopAutoplay ( ) } } } )
} ) ; $ ( '.woo-product-entry-slider' ) . click ( function ( ) { return false } ) ; if ( undefined === $ . fn . imagesLoaded ) { return }
var $sliderProThumbsNC = $ ( '.wpex-slider-thumbnails.sp-nc-thumbnails' , $context ) ; $sliderProThumbsNC . each ( function ( ) { var $this = $ ( this ) ; $this . imagesLoaded ( function ( ) { $this . css ( { 'opacity' : 1 , 'display' : 'block' } ) } ) } )
} , isotopeGrids : function ( $context ) {
var self = this ;
if ( undefined === $ . fn . imagesLoaded || undefined === $ . fn . isotope ) { return }
var containers = $ ( window . wpexAnimsition . linkElement ) . parents ( window . wpexAnimsition . container _block ) ;
2021-04-09 07:59:01 +00:00
function get _filter _constraint ( filterLink ) {
var filter _attr = window . wpexAnimsition . filter _attr ;
var filter _constraint = filterLink . attr ( filter _attr ) ;
var filter _attrs = filter _attr . split ( "," ) ;
if ( filter _attrs . length != 1 ) {
filter _constraint = [ ] ;
filter _attr = "" ;
filter _attrs . forEach ( function ( fa ) {
var tmp _filter _constraint = filterLink . attr ( fa ) ;
if ( tmp _filter _constraint != undefined ) {
if ( window . wpexAnimsition . use _attr _filter ) {
if ( tmp _filter _constraint == "all" ) {
filter _constraint . push ( "[" + fa + "]" ) ;
} else {
filter _constraint . push ( "[" + fa + ( fa [ fa . length - 1 ] == "s" ? '*' : '' ) + "=\"" + tmp _filter _constraint + "\"]" ) ;
}
} else {
filter _constraint . push ( tmp _filter _constraint ) ;
}
}
} )
if ( window . wpexAnimsition . use _attr _filter ) {
filter _constraint = filter _constraint . join ( "],[" ) ;
} else {
filter _constraint = filter _constraint . join ( "," ) ;
}
} else {
if ( window . wpexAnimsition . use _attr _filter ) {
if ( filter _constraint == "all" ) {
2021-04-09 08:47:29 +00:00
filter _constraint = "[" + filter _attr + "]" ;
2021-04-09 07:59:01 +00:00
} else {
2021-04-09 08:47:29 +00:00
filter _constraint = "[" + filter _attr + ( filter _attr [ filter _attr . length - 1 ] == "s" ? '*' : '' ) + "=\"" + filter _constraint + "\"]" ;
2021-04-09 07:59:01 +00:00
}
}
}
if ( filterLink . data ( "count_limit" ) != undefined ) {
filter _constraint = filter _constraint + ":nth-child(-n+" + filterLink . data ( "count_limit" ) + ")" ;
}
return filter _constraint ;
}
2021-04-07 08:12:42 +00:00
$ ( containers ) . each ( function ( i , v ) {
2021-04-09 07:59:01 +00:00
var $container = $ ( v ) ;
2021-04-07 08:12:42 +00:00
$container . imagesLoaded ( function ( ) {
var activeItems ;
var $filter = $container . parent ( ) . find ( window . wpexAnimsition . filter _bar ) ;
if ( $filter . length ) {
var $filterLinks = $filter . find ( window . wpexAnimsition . filter _option ) ;
activeItems = '' ;
2021-04-08 05:20:01 +00:00
if ( $filterLinks . length != 0 ) {
2021-04-09 07:59:01 +00:00
var filter _constraint = get _filter _constraint ( $filterLinks . eq ( 0 ) ) ;
2021-04-08 05:20:01 +00:00
activeItems = filter _constraint ;
}
2021-04-07 08:12:42 +00:00
$filterLinks . click ( function ( ) {
2021-04-09 07:59:01 +00:00
var filter _constraint = get _filter _constraint ( $ ( this ) ) ;
2021-04-07 08:12:42 +00:00
$grid . isotope ( { filter : filter _constraint } ) ;
self . equalHeights ( ) ;
return false ;
} )
}
var $grid = $container . isotope ( {
itemSelector : window . wpexAnimsition . linkElement ,
transformsEnabled : true ,
isOriginLeft : wpexLocalize . isRTL ? false : true ,
transitionDuration : $container . data ( 'transition-duration' ) ? $container . data ( 'transition-duration' ) + 's' : '0.4s' ,
layoutMode : $container . data ( 'layout-mode' ) ? $container . data ( 'layout-mode' ) : 'masonry' ,
filter : activeItems
} )
$grid . on ( 'arrangeComplete' , function ( ) {
/* something event to run after isotope */
} ) ;
} )
} )
} , customHovers : function ( ) {
} , responsiveCSS : function ( ) { var headCSS = '' ; var mediaObj = { } ; var bkPoints = { } ; $ ( '.wpex-vc-rcss' ) . remove ( ) ; bkPoints . d = '' ; bkPoints = $ . extend ( bkPoints , wpexLocalize . responsiveDataBreakpoints ) ; $ . each ( bkPoints , function ( key ) { mediaObj [ key ] = '' } ) ; $ ( '[data-wpex-rcss]' ) . each ( function ( index , value ) { var $this = $ ( this ) ; var uniqueClass = 'wpex-rcss-' + index ; var data = $this . data ( 'wpex-rcss' ) ; $this . addClass ( uniqueClass ) ; $ . each ( data , function ( key , val ) { var thisVal = val ; var target = key ; $ . each ( bkPoints , function ( key ) { if ( thisVal [ key ] ) { mediaObj [ key ] += '.' + uniqueClass + '{' + target + ':' + thisVal [ key ] + '!important;}' } } ) } ) } ) ; $ . each ( mediaObj , function ( key , val ) { if ( 'd' == key ) { headCSS += val } else { if ( val ) { headCSS += '@media (max-width: ' + bkPoints [ key ] + ') { ' + val + ' }' } } } ) ; if ( headCSS ) { headCSS = '<style class="wpex-vc-rcss">/** RESPONSIVE VC PARAMS **/' + headCSS + '</style>' ; this . config . $head . append ( headCSS ) } } , vcexFilterNav : function ( $context ) {
} , archiveMasonryGrids : function ( ) {
if ( undefined === $ . fn . imagesLoaded || undefined === $ . fn . isotope ) { return }
var self = this , $archives = $ ( '.blog-masonry-grid,div.wpex-row.portfolio-masonry,div.wpex-row.portfolio-no-margins,div.wpex-row.staff-masonry,div.wpex-row.staff-no-margins' ) ; $archives . each ( function ( ) { var $this = $ ( this ) ; var $data = $this . data ( ) ; $this . imagesLoaded ( function ( ) { var $grid = $this . isotope ( { itemSelector : '.isotope-entry' , transformsEnabled : true , isOriginLeft : wpexLocalize . isRTL ? false : true , transitionDuration : self . parseData ( $data . transitionDuration , '0.0' ) + 's' , layoutMode : self . parseData ( $data . layoutMode , 'masonry' ) } ) } ) } )
} , autoLightbox : function ( ) {
if ( ! wpexLocalize . iLightbox . auto ) { return }
var self = this , imageExt = [ 'bmp' , 'gif' , 'jpeg' , 'jpg' , 'png' , 'tiff' , 'tif' , 'jfif' , 'jpe' ] ; $ ( '.wpb_text_column a:has(img), body.no-composer .entry a:has(img)' ) . each ( function ( ) { var $this = $ ( this ) ; var href = $this . attr ( 'href' ) ; var ext = self . getUrlExtension ( href ) ; if ( href && imageExt . indexOf ( ext ) !== - 1 ) { if ( ! $this . parents ( '.woocommerce-product-gallery' ) . length ) { $this . addClass ( 'wpex-lightbox' ) } } } )
} ,
iLightbox : function ( $context ) {
} ,
overlayHovers : function ( ) {
} , stickyTopBar : function ( ) {
} , stickyOffset : function ( ) {
} , stickyHeader : function ( ) {
} , shrinkStickyHeader : function ( ) {
} , stickyHeaderMenu : function ( ) {
} , stickyVcexNavbar : function ( ) {
} , infiniteScrollInit : function ( ) {
} , loadMore : function ( ) {
} , ctf7Preloader : function ( ) {
if ( ! wpexLocalize . altercf7Prealoader ) { return }
var $forms = $ ( 'form.wpcf7-form' ) ; $forms . each ( function ( ) { var $this = $ ( this ) ; var $button = $this . find ( '.wpcf7-submit' ) ; if ( $button . length ) { $this . find ( '.ajax-loader' ) . remove ( ) ; var $customLoader = $ ( '<span class="fa fa-refresh fa-spin wpex-wpcf7-loader"></span>' ) ; $button . after ( $customLoader ) ; $button . on ( 'click' , function ( ) { $customLoader . addClass ( 'visible' ) } ) ; $ ( 'div.wpcf7' ) . on ( 'wpcf7:invalid wpcf7:spam wpcf7:mailsent wpcf7:mailfailed' , function ( ) { $customLoader . removeClass ( 'visible' ) } ) } } )
} , vcTabsTogglesJS : function ( ) {
} , vcAccessability : function ( ) {
} , rtlStretchRows : function ( ) {
} , vcexRemoveiFrameDups : function ( $context ) {
} , vcPageEditable : function ( ) {
} , vcPageEditableFuncs : function ( $context ) {
} , wooGallery : function ( ) {
} , parseData : function ( val , fallback ) { return ( typeof val !== 'undefined' ) ? val : fallback } , getUrlExtension : function ( url ) { var ext = url . split ( '.' ) . pop ( ) . toLowerCase ( ) ; var extra = ext . indexOf ( '?' ) !== - 1 ? ext . split ( '?' ) . pop ( ) : '' ; ext = ext . replace ( extra , '' ) ; return ext . replace ( '?' , '' ) } , scrolledToBottom : function ( elem ) { return this . config . windowTop >= elem . offset ( ) . top + elem . outerHeight ( ) - window . innerHeight } , isElementInWindowView : function ( elem ) { var docViewTop = this . config . $window . scrollTop ( ) ; var docViewBottom = docViewTop + this . config . windowHeight ; var elemTop = $ ( elem ) . offset ( ) . top ; var elemBottom = elemTop + $ ( elem ) . height ( ) ; return ( ( elemBottom <= docViewBottom ) && ( elemTop >= docViewTop ) ) } , getTallestEl : function ( el ) { var tallest ; var first = 1 ; el . each ( function ( ) { var $this = $ ( this ) ; if ( first == 1 ) { tallest = $this ; first = 0 } else { if ( tallest . height ( ) < $this . height ( ) ) { tallest = $this } } } ) ; return tallest } ,
} ; wpex . init ( )
} ) ( jQuery )