/* eslint-disable */
/* If a new version is imported from swiper the global.Swiper definition at around line
* 25 should be changed to global.SwiperVersionNo., eg. global.Swiper670, and the corresponding
* references in jetpack-carousel.js updated to match new version number. This is to prevent
* clashes with 3rd party plugin/themes usage of swiper
*/
/*!
* Swiper 6.7.0
* Most modern mobile touch slider and framework with hardware accelerated transitions
* https://swiperjs.com
*
* Copyright 2014-2021 Vladimir Kharlampidi
*
* Released under the MIT License
*
* Released on: June 22, 2021
*/
( function ( global, factory ) {
typeof exports === 'object' && typeof module !== 'undefined'
? ( module.exports = factory() )
: typeof define === 'function' && define.amd
? define( factory )
: ( ( global = typeof globalThis !== 'undefined' ? globalThis : global || self ),
( global.Swiper670 = factory() ) );
} )( this, function () {
'use strict';
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 );
}
}
function _createClass( Constructor, protoProps, staticProps ) {
if ( protoProps ) _defineProperties( Constructor.prototype, protoProps );
if ( staticProps ) _defineProperties( Constructor, staticProps );
return Constructor;
}
function _extends() {
_extends =
Object.assign ||
function ( target ) {
for ( var i = 1; i < arguments.length; i++ ) {
var source = arguments[ i ];
for ( var key in source ) {
if ( Object.prototype.hasOwnProperty.call( source, key ) ) {
target[ key ] = source[ key ];
}
}
}
return target;
};
return _extends.apply( this, arguments );
}
/*!
* SSR Window 3.0.0
* Better handling for window object in SSR environment
* https://github.com/nolimits4web/ssr-window
*
* Copyright 2020, Vladimir Kharlampidi
*
* Licensed under MIT
*
* Released on: November 9, 2020
*/
/* eslint-disable no-param-reassign */
function isObject$1( obj ) {
return (
obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object
);
}
function extend$1( target, src ) {
if ( target === void 0 ) {
target = {};
}
if ( src === void 0 ) {
src = {};
}
Object.keys( src ).forEach( function ( key ) {
if ( typeof target[ key ] === 'undefined' ) target[ key ] = src[ key ];
else if (
isObject$1( src[ key ] ) &&
isObject$1( target[ key ] ) &&
Object.keys( src[ key ] ).length > 0
) {
extend$1( target[ key ], src[ key ] );
}
} );
}
var ssrDocument = {
body: {},
addEventListener: function addEventListener() {},
removeEventListener: function removeEventListener() {},
activeElement: {
blur: function blur() {},
nodeName: '',
},
querySelector: function querySelector() {
return null;
},
querySelectorAll: function querySelectorAll() {
return [];
},
getElementById: function getElementById() {
return null;
},
createEvent: function createEvent() {
return {
initEvent: function initEvent() {},
};
},
createElement: function createElement() {
return {
children: [],
childNodes: [],
style: {},
setAttribute: function setAttribute() {},
getElementsByTagName: function getElementsByTagName() {
return [];
},
};
},
createElementNS: function createElementNS() {
return {};
},
importNode: function importNode() {
return null;
},
location: {
hash: '',
host: '',
hostname: '',
href: '',
origin: '',
pathname: '',
protocol: '',
search: '',
},
};
function getDocument() {
var doc = typeof document !== 'undefined' ? document : {};
extend$1( doc, ssrDocument );
return doc;
}
var ssrWindow = {
document: ssrDocument,
navigator: {
userAgent: '',
},
location: {
hash: '',
host: '',
hostname: '',
href: '',
origin: '',
pathname: '',
protocol: '',
search: '',
},
history: {
replaceState: function replaceState() {},
pushState: function pushState() {},
go: function go() {},
back: function back() {},
},
CustomEvent: function CustomEvent() {
return this;
},
addEventListener: function addEventListener() {},
removeEventListener: function removeEventListener() {},
getComputedStyle: function getComputedStyle() {
return {
getPropertyValue: function getPropertyValue() {
return '';
},
};
},
Image: function Image() {},
Date: function Date() {},
screen: {},
setTimeout: function setTimeout() {},
clearTimeout: function clearTimeout() {},
matchMedia: function matchMedia() {
return {};
},
requestAnimationFrame: function requestAnimationFrame( callback ) {
if ( typeof setTimeout === 'undefined' ) {
callback();
return null;
}
return setTimeout( callback, 0 );
},
cancelAnimationFrame: function cancelAnimationFrame( id ) {
if ( typeof setTimeout === 'undefined' ) {
return;
}
clearTimeout( id );
},
};
function getWindow() {
var win = typeof window !== 'undefined' ? window : {};
extend$1( win, ssrWindow );
return win;
}
/*!
* Dom7 3.0.0
* Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
* https://framework7.io/docs/dom7.html
*
* Copyright 2020, Vladimir Kharlampidi
*
* Licensed under MIT
*
* Released on: November 9, 2020
*/
function _inheritsLoose( subClass, superClass ) {
subClass.prototype = Object.create( superClass.prototype );
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _getPrototypeOf( o ) {
_getPrototypeOf = Object.setPrototypeOf
? Object.getPrototypeOf
: function _getPrototypeOf( o ) {
return o.__proto__ || Object.getPrototypeOf( o );
};
return _getPrototypeOf( o );
}
function _setPrototypeOf( o, p ) {
_setPrototypeOf =
Object.setPrototypeOf ||
function _setPrototypeOf( o, p ) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf( o, p );
}
function _isNativeReflectConstruct() {
if ( typeof Reflect === 'undefined' || ! Reflect.construct ) return false;
if ( Reflect.construct.sham ) return false;
if ( typeof Proxy === 'function' ) return true;
try {
Date.prototype.toString.call( Reflect.construct( Date, [], function () {} ) );
return true;
} catch ( e ) {
return false;
}
}
function _construct( Parent, args, Class ) {
if ( _isNativeReflectConstruct() ) {
_construct = Reflect.construct;
} else {
_construct = function _construct( Parent, args, Class ) {
var a = [ null ];
a.push.apply( a, args );
var Constructor = Function.bind.apply( Parent, a );
var instance = new Constructor();
if ( Class ) _setPrototypeOf( instance, Class.prototype );
return instance;
};
}
return _construct.apply( null, arguments );
}
function _isNativeFunction( fn ) {
return Function.toString.call( fn ).indexOf( '[native code]' ) !== -1;
}
function _wrapNativeSuper( Class ) {
var _cache = typeof Map === 'function' ? new Map() : undefined;
_wrapNativeSuper = function _wrapNativeSuper( Class ) {
if ( Class === null || ! _isNativeFunction( Class ) ) return Class;
if ( typeof Class !== 'function' ) {
throw new TypeError( 'Super expression must either be null or a function' );
}
if ( typeof _cache !== 'undefined' ) {
if ( _cache.has( Class ) ) return _cache.get( Class );
_cache.set( Class, Wrapper );
}
function Wrapper() {
return _construct( Class, arguments, _getPrototypeOf( this ).constructor );
}
Wrapper.prototype = Object.create( Class.prototype, {
constructor: {
value: Wrapper,
enumerable: false,
writable: true,
configurable: true,
},
} );
return _setPrototypeOf( Wrapper, Class );
};
return _wrapNativeSuper( Class );
}
function _assertThisInitialized( self ) {
if ( self === void 0 ) {
throw new ReferenceError( "this hasn't been initialised - super() hasn't been called" );
}
return self;
}
/* eslint-disable no-proto */
function makeReactive( obj ) {
var proto = obj.__proto__;
Object.defineProperty( obj, '__proto__', {
get: function get() {
return proto;
},
set: function set( value ) {
proto.__proto__ = value;
},
} );
}
var Dom7 = /*#__PURE__*/ ( function ( _Array ) {
_inheritsLoose( Dom7, _Array );
function Dom7( items ) {
var _this;
_this = _Array.call.apply( _Array, [ this ].concat( items ) ) || this;
makeReactive( _assertThisInitialized( _this ) );
return _this;
}
return Dom7;
} )( /*#__PURE__*/ _wrapNativeSuper( Array ) );
function arrayFlat( arr ) {
if ( arr === void 0 ) {
arr = [];
}
var res = [];
arr.forEach( function ( el ) {
if ( Array.isArray( el ) ) {
res.push.apply( res, arrayFlat( el ) );
} else {
res.push( el );
}
} );
return res;
}
function arrayFilter( arr, callback ) {
return Array.prototype.filter.call( arr, callback );
}
function arrayUnique( arr ) {
var uniqueArray = [];
for ( var i = 0; i < arr.length; i += 1 ) {
if ( uniqueArray.indexOf( arr[ i ] ) === -1 ) uniqueArray.push( arr[ i ] );
}
return uniqueArray;
}
function qsa( selector, context ) {
if ( typeof selector !== 'string' ) {
return [ selector ];
}
var a = [];
var res = context.querySelectorAll( selector );
for ( var i = 0; i < res.length; i += 1 ) {
a.push( res[ i ] );
}
return a;
}
function $( selector, context ) {
var window = getWindow();
var document = getDocument();
var arr = [];
if ( ! context && selector instanceof Dom7 ) {
return selector;
}
if ( ! selector ) {
return new Dom7( arr );
}
if ( typeof selector === 'string' ) {
var html = selector.trim();
if ( html.indexOf( '<' ) >= 0 && html.indexOf( '>' ) >= 0 ) {
var toCreate = 'div';
if ( html.indexOf( '<li' ) === 0 ) toCreate = 'ul';
if ( html.indexOf( '<tr' ) === 0 ) toCreate = 'tbody';
if ( html.indexOf( '<td' ) === 0 || html.indexOf( '<th' ) === 0 ) toCreate = 'tr';
if ( html.indexOf( '<tbody' ) === 0 ) toCreate = 'table';
if ( html.indexOf( '<option' ) === 0 ) toCreate = 'select';
var tempParent = document.createElement( toCreate );
tempParent.innerHTML = html;
for ( var i = 0; i < tempParent.childNodes.length; i += 1 ) {
arr.push( tempParent.childNodes[ i ] );
}
} else {
arr = qsa( selector.trim(), context || document );
} // arr = qsa(selector, document);
} else if ( selector.nodeType || selector === window || selector === document ) {
arr.push( selector );
} else if ( Array.isArray( selector ) ) {
if ( selector instanceof Dom7 ) return selector;
arr = selector;
}
return new Dom7( arrayUnique( arr ) );
}
$.fn = Dom7.prototype;
function addClass() {
for (
var _len = arguments.length, classes = new Array( _len ), _key = 0;
_key < _len;
_key++
) {
classes[ _key ] = arguments[ _key ];
}
var classNames = arrayFlat(
classes.map( function ( c ) {
return c.split( ' ' );
} )
);
this.forEach( function ( el ) {
var _el$classList;
( _el$classList = el.classList ).add.apply( _el$classList, classNames );
} );
return this;
}
function removeClass() {
for (
var _len2 = arguments.length, classes = new Array( _len2 ), _key2 = 0;
_key2 < _len2;
_key2++
) {
classes[ _key2 ] = arguments[ _key2 ];
}
var classNames = arrayFlat(
classes.map( function ( c ) {
return c.split( ' ' );
} )
);
this.forEach( function ( el ) {
var _el$classList2;
( _el$classList2 = el.classList ).remove.apply( _el$classList2, classNames );
} );
return this;
}
function toggleClass() {
for (
var _len3 = arguments.length, classes = new Array( _len3 ), _key3 = 0;
_key3 < _len3;
_key3++
) {
classes[ _key3 ] = arguments[ _key3 ];
}
var classNames = arrayFlat(
classes.map( function ( c ) {
return c.split( ' ' );
} )
);
this.forEach( function ( el ) {
classNames.forEach( function ( className ) {
el.classList.toggle( className );
} );
} );
}
function hasClass() {
for (
var _len4 = arguments.length, classes = new Array( _len4 ), _key4 = 0;
_key4 < _len4;
_key4++
) {
classes[ _key4 ] = arguments[ _key4 ];
}
var classNames = arrayFlat(
classes.map( function ( c ) {
return c.split( ' ' );
} )
);
return (
arrayFilter( this, function ( el ) {
return (
classNames.filter( function ( className ) {
return el.classList.contains( className );
} ).length > 0
);
} ).length > 0
);
}
function attr( attrs, value ) {
if ( arguments.length === 1 && typeof attrs === 'string' ) {
// Get attr
if ( this[ 0 ] ) return this[ 0 ].getAttribute( attrs );
return undefined;
} // Set attrs
for ( var i = 0; i < this.length; i += 1 ) {
if ( arguments.length === 2 ) {
// String
this[ i ].setAttribute( attrs, value );
} else {
// Object
for ( var attrName in attrs ) {
this[ i ][ attrName ] = attrs[ attrName ];
this[ i ].setAttribute( attrName, attrs[ attrName ] );
}
}
}
return this;
}
function removeAttr( attr ) {
for ( var i = 0; i < this.length; i += 1 ) {
this[ i ].removeAttribute( attr );
}
return this;
}
function transform( transform ) {
for ( var i = 0; i < this.length; i += 1 ) {
this[ i ].style.transform = transform;
}
return this;
}
function transition$1( duration ) {
for ( var i = 0; i < this.length; i += 1 ) {
this[ i ].style.transitionDuration =
typeof duration !== 'string' ? duration + 'ms' : duration;
}
return this;
}
function on() {
for (
var _len5 = arguments.length, args = new Array( _len5 ), _key5 = 0;
_key5 < _len5;
_key5++
) {
args[ _key5 ] = arguments[ _key5 ];
}
var eventType = args[ 0 ],
targetSelector = args[ 1 ],
listener = args[ 2 ],
capture = args[ 3 ];
if ( typeof args[ 1 ] === 'function' ) {
eventType = args[ 0 ];
listener = args[ 1 ];
capture = args[ 2 ];
targetSelector = undefined;
}
if ( ! capture ) capture = false;
function handleLiveEvent( e ) {
var target = e.target;
if ( ! target ) return;
var eventData = e.target.dom7EventData || [];
if ( eventData.indexOf( e ) < 0 ) {
eventData.unshift( e );
}
if ( $( target ).is( targetSelector ) ) listener.apply( target, eventData );
else {
var _parents = $( target ).parents(); // eslint-disable-line
for ( var k = 0; k < _parents.length; k += 1 ) {
if ( $( _parents[ k ] ).is( targetSelector ) ) listener.apply( _parents[ k ], eventData );
}
}
}
function handleEvent( e ) {
var eventData = e && e.target ? e.target.dom7EventData || [] : [];
if ( eventData.indexOf( e ) < 0 ) {
eventData.unshift( e );
}
listener.apply( this, eventData );
}
var events = eventType.split( ' ' );
var j;
for ( var i = 0; i < this.length; i += 1 ) {
var el = this[ i ];
if ( ! targetSelector ) {
for ( j = 0; j < events.length; j += 1 ) {
var event = events[ j ];
if ( ! el.dom7Listeners ) el.dom7Listeners = {};
if ( ! el.dom7Listeners[ event ] ) el.dom7Listeners[ event ] = [];
el.dom7Listeners[ event ].push( {
listener: listener,
proxyListener: handleEvent,
} );
el.addEventListener( event, handleEvent, capture );
}
} else {
// Live events
for ( j = 0; j < events.length; j += 1 ) {
var _event = events[ j ];
if ( ! el.dom7LiveListeners ) el.dom7LiveListeners = {};
if ( ! el.dom7LiveListeners[ _event ] ) el.dom7LiveListeners[ _event ] = [];
el.dom7LiveListeners[ _event ].push( {
listener: listener,
proxyListener: handleLiveEvent,
} );
el.addEventListener( _event, handleLiveEvent, capture );
}
}
}
return this;
}
function off() {
for (
var _len6 = arguments.length, args = new Array( _len6 ), _key6 = 0;
_key6 < _len6;
_key6++
) {
args[ _key6 ] = arguments[ _key6 ];
}
var eventType = args[ 0 ],
targetSelector = args[ 1 ],
listener = args[ 2 ],
capture = args[ 3 ];
if ( typeof args[ 1 ] === 'function' ) {
eventType = args[ 0 ];
listener = args[ 1 ];
capture = args[ 2 ];
targetSelector = undefined;
}
if ( ! capture ) capture = false;
var events = eventType.split( ' ' );
for ( var i = 0; i < events.length; i += 1 ) {
var event = events[ i ];
for ( var j = 0; j < this.length; j += 1 ) {
var el = this[ j ];
var handlers = void 0;
if ( ! targetSelector && el.dom7Listeners ) {
handlers = el.dom7Listeners[ event ];
} else if ( targetSelector && el.dom7LiveListeners ) {
handlers = el.dom7LiveListeners[ event ];
}
if ( handlers && handlers.length ) {
for ( var k = handlers.length - 1; k >= 0; k -= 1 ) {
var handler = handlers[ k ];
if ( listener && handler.listener === listener ) {
el.removeEventListener( event, handler.proxyListener, capture );
handlers.splice( k, 1 );
} else if (
listener &&
handler.listener &&
handler.listener.dom7proxy &&
handler.listener.dom7proxy === listener
) {
el.removeEventListener( event, handler.proxyListener, capture );
handlers.splice( k, 1 );
} else if ( ! listener ) {
el.removeEventListener( event, handler.proxyListener, capture );
handlers.splice( k, 1 );
}
}
}
}
}
return this;
}
function trigger() {
var window = getWindow();
for (
var _len9 = arguments.length, args = new Array( _len9 ), _key9 = 0;
_key9 < _len9;
_key9++
) {
args[ _key9 ] = arguments[ _key9 ];
}
var events = args[ 0 ].split( ' ' );
var eventData = args[ 1 ];
for ( var i = 0; i < events.length; i += 1 ) {
var event = events[ i ];
for ( var j = 0; j < this.length; j += 1 ) {
var el = this[ j ];
if ( window.CustomEvent ) {
var evt = new window.CustomEvent( event, {
detail: eventData,
bubbles: true,
cancelable: true,
} );
el.dom7EventData = args.filter( function ( data, dataIndex ) {
return dataIndex > 0;
} );
el.dispatchEvent( evt );
el.dom7EventData = [];
delete el.dom7EventData;
}
}
}
return this;
}
function transitionEnd$1( callback ) {
var dom = this;
function fireCallBack( e ) {
if ( e.target !== this ) return;
callback.call( this, e );
dom.off( 'transitionend', fireCallBack );
}
if ( callback ) {
dom.on( 'transitionend', fireCallBack );
}
return this;
}
function outerWidth( includeMargins ) {
if ( this.length > 0 ) {
if ( includeMargins ) {
var _styles = this.styles();
return (
this[ 0 ].offsetWidth +
parseFloat( _styles.getPropertyValue( 'margin-right' ) ) +
parseFloat( _styles.getPropertyValue( 'margin-left' ) )
);
}
return this[ 0 ].offsetWidth;
}
return null;
}
function outerHeight( includeMargins ) {
if ( this.length > 0 ) {
if ( includeMargins ) {
var _styles2 = this.styles();
return (
this[ 0 ].offsetHeight +
parseFloat( _styles2.getPropertyValue( 'margin-top' ) ) +
parseFloat( _styles2.getPropertyValue( 'margin-bottom' ) )
);
}
return this[ 0 ].offsetHeight;
}
return null;
}
function offset() {
if ( this.length > 0 ) {
var window = getWindow();
var document = getDocument();
var el = this[ 0 ];
var box = el.getBoundingClientRect();
var body = document.body;
var clientTop = el.clientTop || body.clientTop || 0;
var clientLeft = el.clientLeft || body.clientLeft || 0;
var scrollTop = el === window ? window.scrollY : el.scrollTop;
var scrollLeft = el === window ? window.scrollX : el.scrollLeft;
return {
top: box.top + scrollTop - clientTop,
left: box.left + scrollLeft - clientLeft,
};
}
return null;
}
function styles() {
var window = getWindow();
if ( this[ 0 ] ) return window.getComputedStyle( this[ 0 ], null );
return {};
}
function css( props, value ) {
var window = getWindow();
var i;
if ( arguments.length === 1 ) {
if ( typeof props === 'string' ) {
// .css('width')
if ( this[ 0 ] )
return window.getComputedStyle( this[ 0 ], null ).getPropertyValue( props );
} else {
// .css({ width: '100px' })
for ( i = 0; i < this.length; i += 1 ) {
for ( var _prop in props ) {
this[ i ].style[ _prop ] = props[ _prop ];
}
}
return this;
}
}
if ( arguments.length === 2 && typeof props === 'string' ) {
// .css('width', '100px')
for ( i = 0; i < this.length; i += 1 ) {
this[ i ].style[ props ] = value;
}
return this;
}
return this;
}
function each( callback ) {
if ( ! callback ) return this;
this.forEach( function ( el, index ) {
callback.apply( el, [ el, index ] );
} );
return this;
}
function filter( callback ) {
var result = arrayFilter( this, callback );
return $( result );
}
function html( html ) {
if ( typeof html === 'undefined' ) {
return this[ 0 ] ? this[ 0 ].innerHTML : null;
}
for ( var i = 0; i < this.length; i += 1 ) {
this[ i ].innerHTML = html;
}
return this;
}
function text( text ) {
if ( typeof text === 'undefined' ) {
return this[ 0 ] ? this[ 0 ].textContent.trim() : null;
}
for ( var i = 0; i < this.length; i += 1 ) {
this[ i ].textContent = text;
}
return this;
}
function is( selector ) {
var window = getWindow();
var document = getDocument();
var el = this[ 0 ];
var compareWith;
var i;
if ( ! el || typeof selector === 'undefined' ) return false;
if ( typeof selector === 'string' ) {
if ( el.matches ) return el.matches( selector );
if ( el.webkitMatchesSelector ) return el.webkitMatchesSelector( selector );
if ( el.msMatchesSelector ) return el.msMatchesSelector( selector );
compareWith = $( selector );
for ( i = 0; i < compareWith.length; i += 1 ) {
if ( compareWith[ i ] === el ) return true;
}
return false;
}
if ( selector === document ) {
return el === document;
}
if ( selector === window ) {
return el === window;
}
if ( selector.nodeType || selector instanceof Dom7 ) {
compareWith = selector.nodeType ? [ selector ] : selector;
for ( i = 0; i < compareWith.length; i += 1 ) {
if ( compareWith[ i ] === el ) return true;
}
return false;
}
return false;
}
function index() {
var child = this[ 0 ];
var i;
if ( child ) {
i = 0; // eslint-disable-next-line
while ( ( child = child.previousSibling ) !== null ) {
if ( child.nodeType === 1 ) i += 1;
}
return i;
}
return undefined;
}
function eq( index ) {
if ( typeof index === 'undefined' ) return this;
var length = this.length;
if ( index > length - 1 ) {
return $( [] );
}
if ( index < 0 ) {
var returnIndex = length + index;
if ( returnIndex < 0 ) return $( [] );
return $( [ this[ returnIndex ] ] );
}
return $( [ this[ index ] ] );
}
function append() {
var newChild;
var document = getDocument();
for ( var k = 0; k < arguments.length; k += 1 ) {
newChild = k < 0 || arguments.length <= k ? undefined : arguments[ k ];
for ( var i = 0; i < this.length; i += 1 ) {
if ( typeof newChild === 'string' ) {
var tempDiv = document.createElement( 'div' );
tempDiv.innerHTML = newChild;
while ( tempDiv.firstChild ) {
this[ i ].appendChild( tempDiv.firstChild );
}
} else if ( newChild instanceof Dom7 ) {
for ( var j = 0; j < newChild.length; j += 1 ) {
this[ i ].appendChild( newChild[ j ] );
}
} else {
this[ i ].appendChild( newChild );
}
}
}
return this;
}
function prepend( newChild ) {
var document = getDocument();
var i;
var j;
for ( i = 0; i < this.length; i += 1 ) {
if ( typeof newChild === 'string' ) {
var tempDiv = document.createElement( 'div' );
tempDiv.innerHTML = newChild;
for ( j = tempDiv.childNodes.length - 1; j >= 0; j -= 1 ) {
this[ i ].insertBefore( tempDiv.childNodes[ j ], this[ i ].childNodes[ 0 ] );
}
} else if ( newChild instanceof Dom7 ) {
for ( j = 0; j < newChild.length; j += 1 ) {
this[ i ].insertBefore( newChild[ j ], this[ i ].childNodes[ 0 ] );
}
} else {
this[ i ].insertBefore( newChild, this[ i ].childNodes[ 0 ] );
}
}
return this;
}
function next( selector ) {
if ( this.length > 0 ) {
if ( selector ) {
if ( this[ 0 ].nextElementSibling && $( this[ 0 ].nextElementSibling ).is( selector ) ) {
return $( [ this[ 0 ].nextElementSibling ] );
}
return $( [] );
}
if ( this[ 0 ].nextElementSibling ) return $( [ this[ 0 ].nextElementSibling ] );
return $( [] );
}
return $( [] );
}
function nextAll( selector ) {
var nextEls = [];
var el = this[ 0 ];
if ( ! el ) return $( [] );
while ( el.nextElementSibling ) {
var _next = el.nextElementSibling; // eslint-disable-line
if ( selector ) {
if ( $( _next ).is( selector ) ) nextEls.push( _next );
} else nextEls.push( _next );
el = _next;
}
return $( nextEls );
}
function prev( selector ) {
if ( this.length > 0 ) {
var el = this[ 0 ];
if ( selector ) {
if ( el.previousElementSibling && $( el.previousElementSibling ).is( selector ) ) {
return $( [ el.previousElementSibling ] );
}
return $( [] );
}
if ( el.previousElementSibling ) return $( [ el.previousElementSibling ] );
return $( [] );
}
return $( [] );
}
function prevAll( selector ) {
var prevEls = [];
var el = this[ 0 ];
if ( ! el ) return $( [] );
while ( el.previousElementSibling ) {
var _prev = el.previousElementSibling; // eslint-disable-line
if ( selector ) {
if ( $( _prev ).is( selector ) ) prevEls.push( _prev );
} else prevEls.push( _prev );
el = _prev;
}
return $( prevEls );
}
function parent( selector ) {
var parents = []; // eslint-disable-line
for ( var i = 0; i < this.length; i += 1 ) {
if ( this[ i ].parentNode !== null ) {
if ( selector ) {
if ( $( this[ i ].parentNode ).is( selector ) ) parents.push( this[ i ].parentNode );
} else {
parents.push( this[ i ].parentNode );
}
}
}
return $( parents );
}
function parents( selector ) {
var parents = []; // eslint-disable-line
for ( var i = 0; i < this.length; i += 1 ) {
var _parent = this[ i ].parentNode; // eslint-disable-line
while ( _parent ) {
if ( selector ) {
if ( $( _parent ).is( selector ) ) parents.push( _parent );
} else {
parents.push( _parent );
}
_parent = _parent.parentNode;
}
}
return $( parents );
}
function closest( selector ) {
var closest = this; // eslint-disable-line
if ( typeof selector === 'undefined' ) {
return $( [] );
}
if ( ! closest.is( selector ) ) {
closest = closest.parents( selector ).eq( 0 );
}
return closest;
}
function find( selector ) {
var foundElements = [];
for ( var i = 0; i < this.length; i += 1 ) {
var found = this[ i ].querySelectorAll( selector );
for ( var j = 0; j < found.length; j += 1 ) {
foundElements.push( found[ j ] );
}
}
return $( foundElements );
}
function children( selector ) {
var children = []; // eslint-disable-line
for ( var i = 0; i < this.length; i += 1 ) {
var childNodes = this[ i ].children;
for ( var j = 0; j < childNodes.length; j += 1 ) {
if ( ! selector || $( childNodes[ j ] ).is( selector ) ) {
children.push( childNodes[ j ] );
}
}
}
return $( children );
}
function remove() {
for ( var i = 0; i < this.length; i += 1 ) {
if ( this[ i ].parentNode ) this[ i ].parentNode.removeChild( this[ i ] );
}
return this;
}
var Methods = {
addClass: addClass,
removeClass: removeClass,
hasClass: hasClass,
toggleClass: toggleClass,
attr: attr,
removeAttr: removeAttr,
transform: transform,
transition: transition$1,
on: on,
off: off,
trigger: trigger,
transitionEnd: transitionEnd$1,
outerWidth: outerWidth,
outerHeight: outerHeight,
styles: styles,
offset: offset,
css: css,
each: each,
html: html,
text: text,
is: is,
index: index,
eq: eq,
append: append,
prepend: prepend,
next: next,
nextAll: nextAll,
prev: prev,
prevAll: prevAll,
parent: parent,
parents: parents,
closest: closest,
find: find,
children: children,
filter: filter,
remove: remove,
};
Object.keys( Methods ).forEach( function ( methodName ) {
Object.defineProperty( $.fn, methodName, {
value: Methods[ methodName ],
writable: true,
} );
} );
function deleteProps( obj ) {
var object = obj;
Object.keys( object ).forEach( function ( key ) {
try {
object[ key ] = null;
} catch ( e ) {
// no getter for object
}
try {
delete object[ key ];
} catch ( e ) {
// something got wrong
}
} );
}
function nextTick( callback, delay ) {
if ( delay === void 0 ) {
delay = 0;
}
return setTimeout( callback, delay );
}
function now() {
return Date.now();
}
function getComputedStyle$1( el ) {
var window = getWindow();
var style;
if ( window.getComputedStyle ) {
style = window.getComputedStyle( el, null );
}
if ( ! style && el.currentStyle ) {
style = el.currentStyle;
}
if ( ! style ) {
style = el.style;
}
return style;
}
function getTranslate( el, axis ) {
if ( axis === void 0 ) {
axis = 'x';
}
var window = getWindow();
var matrix;
var curTransform;
var transformMatrix;
var curStyle = getComputedStyle$1( el );
if ( window.WebKitCSSMatrix ) {
curTransform = curStyle.transform || curStyle.webkitTransform;
if ( curTransform.split( ',' ).length > 6 ) {
curTransform = curTransform
.split( ', ' )
.map( function ( a ) {
return a.replace( ',', '.' );
} )
.join( ', ' );
} // Some old versions of Webkit choke when 'none' is passed; pass
// empty string instead in this case
transformMatrix = new window.WebKitCSSMatrix( curTransform === 'none' ? '' : curTransform );
} else {
transformMatrix =
curStyle.MozTransform ||
curStyle.OTransform ||
curStyle.MsTransform ||
curStyle.msTransform ||
curStyle.transform ||
curStyle.getPropertyValue( 'transform' ).replace( 'translate(', 'matrix(1, 0, 0, 1,' );
matrix = transformMatrix.toString().split( ',' );
}
if ( axis === 'x' ) {
// Latest Chrome and webkits Fix
if ( window.WebKitCSSMatrix ) curTransform = transformMatrix.m41;
// Crazy IE10 Matrix
else if ( matrix.length === 16 ) curTransform = parseFloat( matrix[ 12 ] );
// Normal Browsers
else curTransform = parseFloat( matrix[ 4 ] );
}
if ( axis === 'y' ) {
// Latest Chrome and webkits Fix
if ( window.WebKitCSSMatrix ) curTransform = transformMatrix.m42;
// Crazy IE10 Matrix
else if ( matrix.length === 16 ) curTransform = parseFloat( matrix[ 13 ] );
// Normal Browsers
else curTransform = parseFloat( matrix[ 5 ] );
}
return curTransform || 0;
}
function isObject( o ) {
return (
typeof o === 'object' &&
o !== null &&
o.constructor &&
Object.prototype.toString.call( o ).slice( 8, -1 ) === 'Object'
);
}
function extend() {
var to = Object( arguments.length <= 0 ? undefined : arguments[ 0 ] );
var noExtend = [ '__proto__', 'constructor', 'prototype' ]; // eslint-disable-next-line
var HTMLElement = typeof window !== 'undefined' ? window.HTMLElement : undefined;
for ( var i = 1; i < arguments.length; i += 1 ) {
var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[ i ];
if (
nextSource !== undefined &&
nextSource !== null &&
! ( HTMLElement && nextSource instanceof HTMLElement )
) {
var keysArray = Object.keys( Object( nextSource ) ).filter( function ( key ) {
return noExtend.indexOf( key ) < 0;
} );
for ( var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1 ) {
var nextKey = keysArray[ nextIndex ];
var desc = Object.getOwnPropertyDescriptor( nextSource, nextKey );
if ( desc !== undefined && desc.enumerable ) {
if ( isObject( to[ nextKey ] ) && isObject( nextSource[ nextKey ] ) ) {
if ( nextSource[ nextKey ].__swiper__ ) {
to[ nextKey ] = nextSource[ nextKey ];
} else {
extend( to[ nextKey ], nextSource[ nextKey ] );
}
} else if ( ! isObject( to[ nextKey ] ) && isObject( nextSource[ nextKey ] ) ) {
to[ nextKey ] = {};
if ( nextSource[ nextKey ].__swiper__ ) {
to[ nextKey ] = nextSource[ nextKey ];
} else {
extend( to[ nextKey ], nextSource[ nextKey ] );
}
} else {
to[ nextKey ] = nextSource[ nextKey ];
}
}
}
}
}
return to;
}
function bindModuleMethods( instance, obj ) {
Object.keys( obj ).forEach( function ( key ) {
if ( isObject( obj[ key ] ) ) {
Object.keys( obj[ key ] ).forEach( function ( subKey ) {
if ( typeof obj[ key ][ subKey ] === 'function' ) {
obj[ key ][ subKey ] = obj[ key ][ subKey ].bind( instance );
}
} );
}
instance[ key ] = obj[ key ];
} );
}
function classesToSelector( classes ) {
if ( classes === void 0 ) {
classes = '';
}
return (
'.' +
classes
.trim()
.replace( /([\.:\/])/g, '\\$1' ) // eslint-disable-line
.replace( / /g, '.' )
);
}
function createElementIfNotDefined( $container, params, createElements, checkProps ) {
var document = getDocument();
if ( createElements ) {
Object.keys( checkProps ).forEach( function ( key ) {
if ( ! params[ key ] && params.auto === true ) {
var element = document.createElement( 'div' );
element.className = checkProps[ key ];
$container.append( element );
params[ key ] = element;
}
} );
}
return params;
}
var support;
function calcSupport() {
var window = getWindow();
var document = getDocument();
return {
touch: !! (
'ontouchstart' in window ||
( window.DocumentTouch && document instanceof window.DocumentTouch )
),
pointerEvents:
!! window.PointerEvent &&
'maxTouchPoints' in window.navigator &&
window.navigator.maxTouchPoints >= 0,
observer: ( function checkObserver() {
return 'MutationObserver' in window || 'WebkitMutationObserver' in window;
} )(),
passiveListener: ( function checkPassiveListener() {
var supportsPassive = false;
try {
var opts = Object.defineProperty( {}, 'passive', {
// eslint-disable-next-line
get: function get() {
supportsPassive = true;
},
} );
window.addEventListener( 'testPassiveListener', null, opts );
} catch ( e ) {
// No support
}
return supportsPassive;
} )(),
gestures: ( function checkGestures() {
return 'ongesturestart' in window;
} )(),
};
}
function getSupport() {
if ( ! support ) {
support = calcSupport();
}
return support;
}
var device;
function calcDevice( _temp ) {
var _ref = _temp === void 0 ? {} : _temp,
userAgent = _ref.userAgent;
var support = getSupport();
var window = getWindow();
var platform = window.navigator.platform;
var ua = userAgent || window.navigator.userAgent;
var device = {
ios: false,
android: false,
};
var screenWidth = window.screen.width;
var screenHeight = window.screen.height;
var android = ua.match( /(Android);?[\s\/]+([\d.]+)?/ ); // eslint-disable-line
var ipad = ua.match( /(iPad).*OS\s([\d_]+)/ );
var ipod = ua.match( /(iPod)(.*OS\s([\d_]+))?/ );
var iphone = ! ipad && ua.match( /(iPhone\sOS|iOS)\s([\d_]+)/ );
var windows = platform === 'Win32';
var macos = platform === 'MacIntel'; // iPadOs 13 fix
var iPadScreens = [
'1024x1366',
'1366x1024',
'834x1194',
'1194x834',
'834x1112',
'1112x834',
'768x1024',
'1024x768',
'820x1180',
'1180x820',
'810x1080',
'1080x810',
];
if (
! ipad &&
macos &&
support.touch &&
iPadScreens.indexOf( screenWidth + 'x' + screenHeight ) >= 0
) {
ipad = ua.match( /(Version)\/([\d.]+)/ );
if ( ! ipad ) ipad = [ 0, 1, '13_0_0' ];
macos = false;
} // Android
if ( android && ! windows ) {
device.os = 'android';
device.android = true;
}
if ( ipad || iphone || ipod ) {
device.os = 'ios';
device.ios = true;
} // Export object
return device;
}
function getDevice( overrides ) {
if ( overrides === void 0 ) {
overrides = {};
}
if ( ! device ) {
device = calcDevice( overrides );
}
return device;
}
var browser;
function calcBrowser() {
var window = getWindow();
function isSafari() {
var ua = window.navigator.userAgent.toLowerCase();
return (
ua.indexOf( 'safari' ) >= 0 && ua.indexOf( 'chrome' ) < 0 && ua.indexOf( 'android' ) < 0
);
}
return {
isEdge: !! window.navigator.userAgent.match( /Edge/g ),
isSafari: isSafari(),
isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test( window.navigator.userAgent ),
};
}
function getBrowser() {
if ( ! browser ) {
browser = calcBrowser();
}
return browser;
}
var supportsResizeObserver = function supportsResizeObserver() {
var window = getWindow();
return typeof window.ResizeObserver !== 'undefined';
};
var Resize = {
name: 'resize',
create: function create() {
var swiper = this;
extend( swiper, {
resize: {
observer: null,
createObserver: function createObserver() {
if ( ! swiper || swiper.destroyed || ! swiper.initialized ) return;
swiper.resize.observer = new ResizeObserver( function ( entries ) {
var width = swiper.width,
height = swiper.height;
var newWidth = width;
var newHeight = height;
entries.forEach( function ( _ref ) {
var contentBoxSize = _ref.contentBoxSize,
contentRect = _ref.contentRect,
target = _ref.target;
if ( target && target !== swiper.el ) return;
newWidth = contentRect
? contentRect.width
: ( contentBoxSize[ 0 ] || contentBoxSize ).inlineSize;
newHeight = contentRect
? contentRect.height
: ( contentBoxSize[ 0 ] || contentBoxSize ).blockSize;
} );
if ( newWidth !== width || newHeight !== height ) {
swiper.resize.resizeHandler();
}
} );
swiper.resize.observer.observe( swiper.el );
},
removeObserver: function removeObserver() {
if ( swiper.resize.observer && swiper.resize.observer.unobserve && swiper.el ) {
swiper.resize.observer.unobserve( swiper.el );
swiper.resize.observer = null;
}
},
resizeHandler: function resizeHandler() {
if ( ! swiper || swiper.destroyed || ! swiper.initialized ) return;
swiper.emit( 'beforeResize' );
swiper.emit( 'resize' );
},
orientationChangeHandler: function orientationChangeHandler() {
if ( ! swiper || swiper.destroyed || ! swiper.initialized ) return;
swiper.emit( 'orientationchange' );
},
},
} );
},
on: {
init: function init( swiper ) {
var window = getWindow();
if ( swiper.params.resizeObserver && supportsResizeObserver() ) {
swiper.resize.createObserver();
return;
} // Emit resize
window.addEventListener( 'resize', swiper.resize.resizeHandler ); // Emit orientationchange
window.addEventListener( 'orientationchange', swiper.resize.orientationChangeHandler );
},
destroy: function destroy( swiper ) {
var window = getWindow();
swiper.resize.removeObserver();
window.removeEventListener( 'resize', swiper.resize.resizeHandler );
window.removeEventListener( 'orientationchange', swiper.resize.orientationChangeHandler );
},
},
};
var Observer = {
attach: function attach( target, options ) {
if ( options === void 0 ) {
options = {};
}
var window = getWindow();
var swiper = this;
var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
var observer = new ObserverFunc( function ( mutations ) {
// The observerUpdate event should only be triggered
// once despite the number of mutations. Additional
// triggers are redundant and are very costly
if ( mutations.length === 1 ) {
swiper.emit( 'observerUpdate', mutations[ 0 ] );
return;
}
var observerUpdate = function observerUpdate() {
swiper.emit( 'observerUpdate', mutations[ 0 ] );
};
if ( window.requestAnimationFrame ) {
window.requestAnimationFrame( observerUpdate );
} else {
window.setTimeout( observerUpdate, 0 );
}
} );
observer.observe( target, {
attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
childList: typeof options.childList === 'undefined' ? true : options.childList,
characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
} );
swiper.observer.observers.push( observer );
},
init: function init() {
var swiper = this;
if ( ! swiper.support.observer || ! swiper.params.observer ) return;
if ( swiper.params.observeParents ) {
var containerParents = swiper.$el.parents();
for ( var i = 0; i < containerParents.length; i += 1 ) {
swiper.observer.attach( containerParents[ i ] );
}
} // Observe container
swiper.observer.attach( swiper.$el[ 0 ], {
childList: swiper.params.observeSlideChildren,
} ); // Observe wrapper
swiper.observer.attach( swiper.$wrapperEl[ 0 ], {
attributes: false,
} );
},
destroy: function destroy() {
var swiper = this;
swiper.observer.observers.forEach( function ( observer ) {
observer.disconnect();
} );
swiper.observer.observers = [];
},
};
var Observer$1 = {
name: 'observer',
params: {
observer: false,
observeParents: false,
observeSlideChildren: false,
},
create: function create() {
var swiper = this;
bindModuleMethods( swiper, {
observer: _extends( {}, Observer, {
observers: [],
} ),
} );
},
on: {
init: function init( swiper ) {
swiper.observer.init();
},
destroy: function destroy( swiper ) {
swiper.observer.destroy();
},
},
};
var modular = {
useParams: function useParams( instanceParams ) {
var instance = this;
if ( ! instance.modules ) return;
Object.keys( instance.modules ).forEach( function ( moduleName ) {
var module = instance.modules[ moduleName ]; // Extend params
if ( module.params ) {
extend( instanceParams, module.params );
}
} );
},
useModules: function useModules( modulesParams ) {
if ( modulesParams === void 0 ) {
modulesParams = {};
}
var instance = this;
if ( ! instance.modules ) return;
Object.keys( instance.modules ).forEach( function ( moduleName ) {
var module = instance.modules[ moduleName ];
var moduleParams = modulesParams[ moduleName ] || {}; // Add event listeners
if ( module.on && instance.on ) {
Object.keys( module.on ).forEach( function ( moduleEventName ) {
instance.on( moduleEventName, module.on[ moduleEventName ] );
} );
} // Module create callback
if ( module.create ) {
module.create.bind( instance )( moduleParams );
}
} );
},
};
/* eslint-disable no-underscore-dangle */
var eventsEmitter = {
on: function on( events, handler, priority ) {
var self = this;
if ( typeof handler !== 'function' ) return self;
var method = priority ? 'unshift' : 'push';
events.split( ' ' ).forEach( function ( event ) {
if ( ! self.eventsListeners[ event ] ) self.eventsListeners[ event ] = [];
self.eventsListeners[ event ][ method ]( handler );
} );
return self;
},
once: function once( events, handler, priority ) {
var self = this;
if ( typeof handler !== 'function' ) return self;
function onceHandler() {
self.off( events, onceHandler );
if ( onceHandler.__emitterProxy ) {
delete onceHandler.__emitterProxy;
}
for (
var _len = arguments.length, args = new Array( _len ), _key = 0;
_key < _len;
_key++
) {
args[ _key ] = arguments[ _key ];
}
handler.apply( self, args );
}
onceHandler.__emitterProxy = handler;
return self.on( events, onceHandler, priority );
},
onAny: function onAny( handler, priority ) {
var self = this;
if ( typeof handler !== 'function' ) return self;
var method = priority ? 'unshift' : 'push';
if ( self.eventsAnyListeners.indexOf( handler ) < 0 ) {
self.eventsAnyListeners[ method ]( handler );
}
return self;
},
offAny: function offAny( handler ) {
var self = this;
if ( ! self.eventsAnyListeners ) return self;
var index = self.eventsAnyListeners.indexOf( handler );
if ( index >= 0 ) {
self.eventsAnyListeners.splice( index, 1 );
}
return self;
},
off: function off( events, handler ) {
var self = this;
if ( ! self.eventsListeners ) return self;
events.split( ' ' ).forEach( function ( event ) {
if ( typeof handler === 'undefined' ) {
self.eventsListeners[ event ] = [];
} else if ( self.eventsListeners[ event ] ) {
self.eventsListeners[ event ].forEach( function ( eventHandler, index ) {
if (
eventHandler === handler ||
( eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler )
) {
self.eventsListeners[ event ].splice( index, 1 );
}
} );
}
} );
return self;
},
emit: function emit() {
var self = this;
if ( ! self.eventsListeners ) return self;
var events;
var data;
var context;
for (
var _len2 = arguments.length, args = new Array( _len2 ), _key2 = 0;
_key2 < _len2;
_key2++
) {
args[ _key2 ] = arguments[ _key2 ];
}
if ( typeof args[ 0 ] === 'string' || Array.isArray( args[ 0 ] ) ) {
events = args[ 0 ];
data = args.slice( 1, args.length );
context = self;
} else {
events = args[ 0 ].events;
data = args[ 0 ].data;
context = args[ 0 ].context || self;
}
data.unshift( context );
var eventsArray = Array.isArray( events ) ? events : events.split( ' ' );
eventsArray.forEach( function ( event ) {
if ( self.eventsAnyListeners && self.eventsAnyListeners.length ) {
self.eventsAnyListeners.forEach( function ( eventHandler ) {
eventHandler.apply( context, [ event ].concat( data ) );
} );
}
if ( self.eventsListeners && self.eventsListeners[ event ] ) {
self.eventsListeners[ event ].forEach( function ( eventHandler ) {
eventHandler.apply( context, data );
} );
}
} );
return self;
},
};
function updateSize() {
var swiper = this;
var width;
var height;
var $el = swiper.$el;
if ( typeof swiper.params.width !== 'undefined' && swiper.params.width !== null ) {
width = swiper.params.width;
} else {
width = $el[ 0 ].clientWidth;
}
if ( typeof swiper.params.height !== 'undefined' && swiper.params.height !== null ) {
height = swiper.params.height;
} else {
height = $el[ 0 ].clientHeight;
}
if ( ( width === 0 && swiper.isHorizontal() ) || ( height === 0 && swiper.isVertical() ) ) {
return;
} // Subtract paddings
width =
width -
parseInt( $el.css( 'padding-left' ) || 0, 10 ) -
parseInt( $el.css( 'padding-right' ) || 0, 10 );
height =
height -
parseInt( $el.css( 'padding-top' ) || 0, 10 ) -
parseInt( $el.css( 'padding-bottom' ) || 0, 10 );
if ( Number.isNaN( width ) ) width = 0;
if ( Number.isNaN( height ) ) height = 0;
extend( swiper, {
width: width,
height: height,
size: swiper.isHorizontal() ? width : height,
} );
}
function updateSlides() {
var swiper = this;
function getDirectionLabel( property ) {
if (swiper.isHorizontal()) {
return property;
} // prettier-ignore
return {
width: 'height',
'margin-top': 'margin-left',
'margin-bottom ': 'margin-right',
'margin-left': 'margin-top',
'margin-right': 'margin-bottom',
'padding-left': 'padding-top',
'padding-right': 'padding-bottom',
marginRight: 'marginBottom',
}[ property ];
}
function getDirectionPropertyValue( node, label ) {
return parseFloat( node.getPropertyValue( getDirectionLabel( label ) ) || 0 );
}
var params = swiper.params;
var $wrapperEl = swiper.$wrapperEl,
swiperSize = swiper.size,
rtl = swiper.rtlTranslate,
wrongRTL = swiper.wrongRTL;
var isVirtual = swiper.virtual && params.virtual.enabled;
var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
var slides = $wrapperEl.children( '.' + swiper.params.slideClass );
var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
var snapGrid = [];
var slidesGrid = [];
var slidesSizesGrid = [];
var offsetBefore = params.slidesOffsetBefore;
if ( typeof offsetBefore === 'function' ) {
offsetBefore = params.slidesOffsetBefore.call( swiper );
}
var offsetAfter = params.slidesOffsetAfter;
if ( typeof offsetAfter === 'function' ) {
offsetAfter = params.slidesOffsetAfter.call( swiper );
}
var previousSnapGridLength = swiper.snapGrid.length;
var previousSlidesGridLength = swiper.slidesGrid.length;
var spaceBetween = params.spaceBetween;
var slidePosition = -offsetBefore;
var prevSlideSize = 0;
var index = 0;
if ( typeof swiperSize === 'undefined' ) {
return;
}
if ( typeof spaceBetween === 'string' && spaceBetween.indexOf( '%' ) >= 0 ) {
spaceBetween = ( parseFloat( spaceBetween.replace( '%', '' ) ) / 100 ) * swiperSize;
}
swiper.virtualSize = -spaceBetween; // reset margins
if ( rtl )
slides.css( {
marginLeft: '',
marginTop: '',
} );
else
slides.css( {
marginRight: '',
marginBottom: '',
} );
var slidesNumberEvenToRows;
if ( params.slidesPerColumn > 1 ) {
if (
Math.floor( slidesLength / params.slidesPerColumn ) ===
slidesLength / swiper.params.slidesPerColumn
) {
slidesNumberEvenToRows = slidesLength;
} else {
slidesNumberEvenToRows =
Math.ceil( slidesLength / params.slidesPerColumn ) * params.slidesPerColumn;
}
if ( params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row' ) {
slidesNumberEvenToRows = Math.max(
slidesNumberEvenToRows,
params.slidesPerView * params.slidesPerColumn
);
}
} // Calc slides
var slideSize;
var slidesPerColumn = params.slidesPerColumn;
var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
var numFullColumns = Math.floor( slidesLength / params.slidesPerColumn );
for ( var i = 0; i < slidesLength; i += 1 ) {
slideSize = 0;
var slide = slides.eq( i );
if ( params.slidesPerColumn > 1 ) {
// Set slides order
var newSlideOrderIndex = void 0;
var column = void 0;
var row = void 0;
if ( params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1 ) {
var groupIndex = Math.floor( i / ( params.slidesPerGroup * params.slidesPerColumn ) );
var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
var columnsInGroup =
groupIndex === 0
? params.slidesPerGroup
: Math.min(
Math.ceil(
( slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup ) /
slidesPerColumn
),
params.slidesPerGroup
);
row = Math.floor( slideIndexInGroup / columnsInGroup );
column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;
newSlideOrderIndex = column + ( row * slidesNumberEvenToRows ) / slidesPerColumn;
slide.css( {
'-webkit-box-ordinal-group': newSlideOrderIndex,
'-moz-box-ordinal-group': newSlideOrderIndex,
'-ms-flex-order': newSlideOrderIndex,
'-webkit-order': newSlideOrderIndex,
order: newSlideOrderIndex,
} );
} else if ( params.slidesPerColumnFill === 'column' ) {
column = Math.floor( i / slidesPerColumn );
row = i - column * slidesPerColumn;
if (
column > numFullColumns ||
( column === numFullColumns && row === slidesPerColumn - 1 )
) {
row += 1;
if ( row >= slidesPerColumn ) {
row = 0;
column += 1;
}
}
} else {
row = Math.floor( i / slidesPerRow );
column = i - row * slidesPerRow;
}
slide.css(
getDirectionLabel( 'margin-top' ),
row !== 0 ? params.spaceBetween && params.spaceBetween + 'px' : ''
);
}
if ( slide.css( 'display' ) === 'none' ) continue; // eslint-disable-line
if ( params.slidesPerView === 'auto' ) {
var slideStyles = getComputedStyle( slide[ 0 ] );
var currentTransform = slide[ 0 ].style.transform;
var currentWebKitTransform = slide[ 0 ].style.webkitTransform;
if ( currentTransform ) {
slide[ 0 ].style.transform = 'none';
}
if ( currentWebKitTransform ) {
slide[ 0 ].style.webkitTransform = 'none';
}
if ( params.roundLengths ) {
slideSize = swiper.isHorizontal() ? slide.outerWidth( true ) : slide.outerHeight( true );
} else {
// eslint-disable-next-line
var width = getDirectionPropertyValue( slideStyles, 'width' );
var paddingLeft = getDirectionPropertyValue( slideStyles, 'padding-left' );
var paddingRight = getDirectionPropertyValue( slideStyles, 'padding-right' );
var marginLeft = getDirectionPropertyValue( slideStyles, 'margin-left' );
var marginRight = getDirectionPropertyValue( slideStyles, 'margin-right' );
var boxSizing = slideStyles.getPropertyValue( 'box-sizing' );
if ( boxSizing && boxSizing === 'border-box' ) {
slideSize = width + marginLeft + marginRight;
} else {
var _slide$ = slide[ 0 ],
clientWidth = _slide$.clientWidth,
offsetWidth = _slide$.offsetWidth;
slideSize =
width +
paddingLeft +
paddingRight +
marginLeft +
marginRight +
( offsetWidth - clientWidth );
}
}
if ( currentTransform ) {
slide[ 0 ].style.transform = currentTransform;
}
if ( currentWebKitTransform ) {
slide[ 0 ].style.webkitTransform = currentWebKitTransform;
}
if ( params.roundLengths ) slideSize = Math.floor( slideSize );
} else {
slideSize =
( swiperSize - ( params.slidesPerView - 1 ) * spaceBetween ) / params.slidesPerView;
if ( params.roundLengths ) slideSize = Math.floor( slideSize );
if ( slides[ i ] ) {
slides[ i ].style[ getDirectionLabel( 'width' ) ] = slideSize + 'px';
}
}
if ( slides[ i ] ) {
slides[ i ].swiperSlideSize = slideSize;
}
slidesSizesGrid.push( slideSize );
if ( params.centeredSlides ) {
slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
if ( prevSlideSize === 0 && i !== 0 )
slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
if ( i === 0 ) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
if ( Math.abs( slidePosition ) < 1 / 1000 ) slidePosition = 0;
if ( params.roundLengths ) slidePosition = Math.floor( slidePosition );
if ( index % params.slidesPerGroup === 0 ) snapGrid.push( slidePosition );
slidesGrid.push( slidePosition );
} else {
if ( params.roundLengths ) slidePosition = Math.floor( slidePosition );
if (
( index - Math.min( swiper.params.slidesPerGroupSkip, index ) ) %
swiper.params.slidesPerGroup ===
0
)
snapGrid.push( slidePosition );
slidesGrid.push( slidePosition );
slidePosition = slidePosition + slideSize + spaceBetween;
}
swiper.virtualSize += slideSize + spaceBetween;
prevSlideSize = slideSize;
index += 1;
}
swiper.virtualSize = Math.max( swiper.virtualSize, swiperSize ) + offsetAfter;
var newSlidesGrid;
if ( rtl && wrongRTL && ( params.effect === 'slide' || params.effect === 'coverflow' ) ) {
$wrapperEl.css( {
width: swiper.virtualSize + params.spaceBetween + 'px',
} );
}
if ( params.setWrapperSize ) {
var _$wrapperEl$css;
$wrapperEl.css(
( ( _$wrapperEl$css = {} ),
( _$wrapperEl$css[ getDirectionLabel( 'width' ) ] =
swiper.virtualSize + params.spaceBetween + 'px' ),
_$wrapperEl$css )
);
}
if ( params.slidesPerColumn > 1 ) {
var _$wrapperEl$css2;
swiper.virtualSize = ( slideSize + params.spaceBetween ) * slidesNumberEvenToRows;
swiper.virtualSize =
Math.ceil( swiper.virtualSize / params.slidesPerColumn ) - params.spaceBetween;
$wrapperEl.css(
( ( _$wrapperEl$css2 = {} ),
( _$wrapperEl$css2[ getDirectionLabel( 'width' ) ] =
swiper.virtualSize + params.spaceBetween + 'px' ),
_$wrapperEl$css2 )
);
if ( params.centeredSlides ) {
newSlidesGrid = [];
for ( var _i = 0; _i < snapGrid.length; _i += 1 ) {
var slidesGridItem = snapGrid[ _i ];
if ( params.roundLengths ) slidesGridItem = Math.floor( slidesGridItem );
if ( snapGrid[ _i ] < swiper.virtualSize + snapGrid[ 0 ] )
newSlidesGrid.push( slidesGridItem );
}
snapGrid = newSlidesGrid;
}
} // Remove last grid elements depending on width
if ( ! params.centeredSlides ) {
newSlidesGrid = [];
for ( var _i2 = 0; _i2 < snapGrid.length; _i2 += 1 ) {
var _slidesGridItem = snapGrid[ _i2 ];
if ( params.roundLengths ) _slidesGridItem = Math.floor( _slidesGridItem );
if ( snapGrid[ _i2 ] <= swiper.virtualSize - swiperSize ) {
newSlidesGrid.push( _slidesGridItem );
}
}
snapGrid = newSlidesGrid;
if (
Math.floor( swiper.virtualSize - swiperSize ) -
Math.floor( snapGrid[ snapGrid.length - 1 ] ) >
1
) {
snapGrid.push( swiper.virtualSize - swiperSize );
}
}
if ( snapGrid.length === 0 ) snapGrid = [ 0 ];
if ( params.spaceBetween !== 0 ) {
var _slides$filter$css;
var key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel( 'marginRight' );
slides
.filter( function ( _, slideIndex ) {
if ( ! params.cssMode ) return true;
if ( slideIndex === slides.length - 1 ) {
return false;
}
return true;
} )
.css(
( ( _slides$filter$css = {} ),
( _slides$filter$css[ key ] = spaceBetween + 'px' ),
_slides$filter$css )
);
}
if ( params.centeredSlides && params.centeredSlidesBounds ) {
var allSlidesSize = 0;
slidesSizesGrid.forEach( function ( slideSizeValue ) {
allSlidesSize += slideSizeValue + ( params.spaceBetween ? params.spaceBetween : 0 );
} );
allSlidesSize -= params.spaceBetween;
var maxSnap = allSlidesSize - swiperSize;
snapGrid = snapGrid.map( function ( snap ) {
if ( snap < 0 ) return -offsetBefore;
if ( snap > maxSnap ) return maxSnap + offsetAfter;
return snap;
} );
}
if ( params.centerInsufficientSlides ) {
var _allSlidesSize = 0;
slidesSizesGrid.forEach( function ( slideSizeValue ) {
_allSlidesSize += slideSizeValue + ( params.spaceBetween ? params.spaceBetween : 0 );
} );
_allSlidesSize -= params.spaceBetween;
if ( _allSlidesSize < swiperSize ) {
var allSlidesOffset = ( swiperSize - _allSlidesSize ) / 2;
snapGrid.forEach( function ( snap, snapIndex ) {
snapGrid[ snapIndex ] = snap - allSlidesOffset;
} );
slidesGrid.forEach( function ( snap, snapIndex ) {
slidesGrid[ snapIndex ] = snap + allSlidesOffset;
} );
}
}
extend( swiper, {
slides: slides,
snapGrid: snapGrid,
slidesGrid: slidesGrid,
slidesSizesGrid: slidesSizesGrid,
} );
if ( slidesLength !== previousSlidesLength ) {
swiper.emit( 'slidesLengthChange' );
}
if ( snapGrid.length !== previousSnapGridLength ) {
if ( swiper.params.watchOverflow ) swiper.checkOverflow();
swiper.emit( 'snapGridLengthChange' );
}
if ( slidesGrid.length !== previousSlidesGridLength ) {
swiper.emit( 'slidesGridLengthChange' );
}
if ( params.watchSlidesProgress || params.watchSlidesVisibility ) {
swiper.updateSlidesOffset();
}
}
function updateAutoHeight( speed ) {
var swiper = this;
var activeSlides = [];
var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
var newHeight = 0;
var i;
if ( typeof speed === 'number' ) {
swiper.setTransition( speed );
} else if ( speed === true ) {
swiper.setTransition( swiper.params.speed );
}
var getSlideByIndex = function getSlideByIndex( index ) {
if ( isVirtual ) {
return swiper.slides.filter( function ( el ) {
return parseInt( el.getAttribute( 'data-swiper-slide-index' ), 10 ) === index;
} )[ 0 ];
}
return swiper.slides.eq( index )[ 0 ];
}; // Find slides currently in view
if ( swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1 ) {
if ( swiper.params.centeredSlides ) {
swiper.visibleSlides.each( function ( slide ) {
activeSlides.push( slide );
} );
} else {
for ( i = 0; i < Math.ceil( swiper.params.slidesPerView ); i += 1 ) {
var index = swiper.activeIndex + i;
if ( index > swiper.slides.length && ! isVirtual ) break;
activeSlides.push( getSlideByIndex( index ) );
}
}
} else {
activeSlides.push( getSlideByIndex( swiper.activeIndex ) );
} // Find new height from highest slide in view
for ( i = 0; i < activeSlides.length; i += 1 ) {
if ( typeof activeSlides[ i ] !== 'undefined' ) {
var height = activeSlides[ i ].offsetHeight;
newHeight = height > newHeight ? height : newHeight;
}
} // Update Height
if ( newHeight ) swiper.$wrapperEl.css( 'height', newHeight + 'px' );
}
function updateSlidesOffset() {
var swiper = this;
var slides = swiper.slides;
for ( var i = 0; i < slides.length; i += 1 ) {
slides[ i ].swiperSlideOffset = swiper.isHorizontal()
? slides[ i ].offsetLeft
: slides[ i ].offsetTop;
}
}
function updateSlidesProgress( translate ) {
if ( translate === void 0 ) {
translate = ( this && this.translate ) || 0;
}
var swiper = this;
var params = swiper.params;
var slides = swiper.slides,
rtl = swiper.rtlTranslate;
if ( slides.length === 0 ) return;
if ( typeof slides[ 0 ].swiperSlideOffset === 'undefined' ) swiper.updateSlidesOffset();
var offsetCenter = -translate;
if ( rtl ) offsetCenter = translate; // Visible Slides
slides.removeClass( params.slideVisibleClass );
swiper.visibleSlidesIndexes = [];
swiper.visibleSlides = [];
for ( var i = 0; i < slides.length; i += 1 ) {
var slide = slides[ i ];
var slideProgress =
( offsetCenter +
( params.centeredSlides ? swiper.minTranslate() : 0 ) -
slide.swiperSlideOffset ) /
( slide.swiperSlideSize + params.spaceBetween );
if ( params.watchSlidesVisibility || ( params.centeredSlides && params.autoHeight ) ) {
var slideBefore = -( offsetCenter - slide.swiperSlideOffset );
var slideAfter = slideBefore + swiper.slidesSizesGrid[ i ];
var isVisible =
( slideBefore >= 0 && slideBefore < swiper.size - 1 ) ||
( slideAfter > 1 && slideAfter <= swiper.size ) ||
( slideBefore <= 0 && slideAfter >= swiper.size );
if ( isVisible ) {
swiper.visibleSlides.push( slide );
swiper.visibleSlidesIndexes.push( i );
slides.eq( i ).addClass( params.slideVisibleClass );
}
}
slide.progress = rtl ? -slideProgress : slideProgress;
}
swiper.visibleSlides = $( swiper.visibleSlides );
}
function updateProgress( translate ) {
var swiper = this;
if ( typeof translate === 'undefined' ) {
var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line
translate = ( swiper && swiper.translate && swiper.translate * multiplier ) || 0;
}
var params = swiper.params;
var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
var progress = swiper.progress,
isBeginning = swiper.isBeginning,
isEnd = swiper.isEnd;
var wasBeginning = isBeginning;
var wasEnd = isEnd;
if ( translatesDiff === 0 ) {
progress = 0;
isBeginning = true;
isEnd = true;
} else {
progress = ( translate - swiper.minTranslate() ) / translatesDiff;
isBeginning = progress <= 0;
isEnd = progress >= 1;
}
extend( swiper, {
progress: progress,
isBeginning: isBeginning,
isEnd: isEnd,
} );
if (
params.watchSlidesProgress ||
params.watchSlidesVisibility ||
( params.centeredSlides && params.autoHeight )
)
swiper.updateSlidesProgress( translate );
if ( isBeginning && ! wasBeginning ) {
swiper.emit( 'reachBeginning toEdge' );
}
if ( isEnd && ! wasEnd ) {
swiper.emit( 'reachEnd toEdge' );
}
if ( ( wasBeginning && ! isBeginning ) || ( wasEnd && ! isEnd ) ) {
swiper.emit( 'fromEdge' );
}
swiper.emit( 'progress', progress );
}
function updateSlidesClasses() {
var swiper = this;
var slides = swiper.slides,
params = swiper.params,
$wrapperEl = swiper.$wrapperEl,
activeIndex = swiper.activeIndex,
realIndex = swiper.realIndex;
var isVirtual = swiper.virtual && params.virtual.enabled;
slides.removeClass(
params.slideActiveClass +
' ' +
params.slideNextClass +
' ' +
params.slidePrevClass +
' ' +
params.slideDuplicateActiveClass +
' ' +
params.slideDuplicateNextClass +
' ' +
params.slideDuplicatePrevClass
);
var activeSlide;
if ( isVirtual ) {
activeSlide = swiper.$wrapperEl.find(
'.' + params.slideClass + '[data-swiper-slide-index="' + activeIndex + '"]'
);
} else {
activeSlide = slides.eq( activeIndex );
} // Active classes
activeSlide.addClass( params.slideActiveClass );
if ( params.loop ) {
// Duplicate to all looped slides
if ( activeSlide.hasClass( params.slideDuplicateClass ) ) {
$wrapperEl
.children(
'.' +
params.slideClass +
':not(.' +
params.slideDuplicateClass +
')[data-swiper-slide-index="' +
realIndex +
'"]'
)
.addClass( params.slideDuplicateActiveClass );
} else {
$wrapperEl
.children(
'.' +
params.slideClass +
'.' +
params.slideDuplicateClass +
'[data-swiper-slide-index="' +
realIndex +
'"]'
)
.addClass( params.slideDuplicateActiveClass );
}
} // Next Slide
var nextSlide = activeSlide
.nextAll( '.' + params.slideClass )
.eq( 0 )
.addClass( params.slideNextClass );
if ( params.loop && nextSlide.length === 0 ) {
nextSlide = slides.eq( 0 );
nextSlide.addClass( params.slideNextClass );
} // Prev Slide
var prevSlide = activeSlide
.prevAll( '.' + params.slideClass )
.eq( 0 )
.addClass( params.slidePrevClass );
if ( params.loop && prevSlide.length === 0 ) {
prevSlide = slides.eq( -1 );
prevSlide.addClass( params.slidePrevClass );
}
if ( params.loop ) {
// Duplicate to all looped slides
if ( nextSlide.hasClass( params.slideDuplicateClass ) ) {
$wrapperEl
.children(
'.' +
params.slideClass +
':not(.' +
params.slideDuplicateClass +
')[data-swiper-slide-index="' +
nextSlide.attr( 'data-swiper-slide-index' ) +
'"]'
)
.addClass( params.slideDuplicateNextClass );
} else {
$wrapperEl
.children(
'.' +
params.slideClass +
'.' +
params.slideDuplicateClass +
'[data-swiper-slide-index="' +
nextSlide.attr( 'data-swiper-slide-index' ) +
'"]'
)
.addClass( params.slideDuplicateNextClass );
}
if ( prevSlide.hasClass( params.slideDuplicateClass ) ) {
$wrapperEl
.children(
'.' +
params.slideClass +
':not(.' +
params.slideDuplicateClass +
')[data-swiper-slide-index="' +
prevSlide.attr( 'data-swiper-slide-index' ) +
'"]'
)
.addClass( params.slideDuplicatePrevClass );
} else {
$wrapperEl
.children(
'.' +
params.slideClass +
'.' +
params.slideDuplicateClass +
'[data-swiper-slide-index="' +
prevSlide.attr( 'data-swiper-slide-index' ) +
'"]'
)
.addClass( params.slideDuplicatePrevClass );
}
}
swiper.emitSlidesClasses();
}
function updateActiveIndex( newActiveIndex ) {
var swiper = this;
var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
var slidesGrid = swiper.slidesGrid,
snapGrid = swiper.snapGrid,
params = swiper.params,
previousIndex = swiper.activeIndex,
previousRealIndex = swiper.realIndex,
previousSnapIndex = swiper.snapIndex;
var activeIndex = newActiveIndex;
var snapIndex;
if ( typeof activeIndex === 'undefined' ) {
for ( var i = 0; i < slidesGrid.length; i += 1 ) {
if ( typeof slidesGrid[ i + 1 ] !== 'undefined' ) {
if (
translate >= slidesGrid[ i ] &&
translate < slidesGrid[ i + 1 ] - ( slidesGrid[ i + 1 ] - slidesGrid[ i ] ) / 2
) {
activeIndex = i;
} else if ( translate >= slidesGrid[ i ] && translate < slidesGrid[ i + 1 ] ) {
activeIndex = i + 1;
}
} else if ( translate >= slidesGrid[ i ] ) {
activeIndex = i;
}
} // Normalize slideIndex
if ( params.normalizeSlideIndex ) {
if ( activeIndex < 0 || typeof activeIndex === 'undefined' ) activeIndex = 0;
}
}
if ( snapGrid.indexOf( translate ) >= 0 ) {
snapIndex = snapGrid.indexOf( translate );
} else {
var skip = Math.min( params.slidesPerGroupSkip, activeIndex );
snapIndex = skip + Math.floor( ( activeIndex - skip ) / params.slidesPerGroup );
}
if ( snapIndex >= snapGrid.length ) snapIndex = snapGrid.length - 1;
if ( activeIndex === previousIndex ) {
if ( snapIndex !== previousSnapIndex ) {
swiper.snapIndex = snapIndex;
swiper.emit( 'snapIndexChange' );
}
return;
} // Get real index
var realIndex = parseInt(
swiper.slides.eq( activeIndex ).attr( 'data-swiper-slide-index' ) || activeIndex,
10
);
extend( swiper, {
snapIndex: snapIndex,
realIndex: realIndex,
previousIndex: previousIndex,
activeIndex: activeIndex,
} );
swiper.emit( 'activeIndexChange' );
swiper.emit( 'snapIndexChange' );
if ( previousRealIndex !== realIndex ) {
swiper.emit( 'realIndexChange' );
}
if ( swiper.initialized || swiper.params.runCallbacksOnInit ) {
swiper.emit( 'slideChange' );
}
}
function updateClickedSlide( e ) {
var swiper = this;
var params = swiper.params;
var slide = $( e.target ).closest( '.' + params.slideClass )[ 0 ];
var slideFound = false;
var slideIndex;
if ( slide ) {
for ( var i = 0; i < swiper.slides.length; i += 1 ) {
if ( swiper.slides[ i ] === slide ) {
slideFound = true;
slideIndex = i;
break;
}
}
}
if ( slide && slideFound ) {
swiper.clickedSlide = slide;
if ( swiper.virtual && swiper.params.virtual.enabled ) {
swiper.clickedIndex = parseInt( $( slide ).attr( 'data-swiper-slide-index' ), 10 );
} else {
swiper.clickedIndex = slideIndex;
}
} else {
swiper.clickedSlide = undefined;
swiper.clickedIndex = undefined;
return;
}
if (
params.slideToClickedSlide &&
swiper.clickedIndex !== undefined &&
swiper.clickedIndex !== swiper.activeIndex
) {
swiper.slideToClickedSlide();
}
}
var update = {
updateSize: updateSize,
updateSlides: updateSlides,
updateAutoHeight: updateAutoHeight,
updateSlidesOffset: updateSlidesOffset,
updateSlidesProgress: updateSlidesProgress,
updateProgress: updateProgress,
updateSlidesClasses: updateSlidesClasses,
updateActiveIndex: updateActiveIndex,
updateClickedSlide: updateClickedSlide,
};
function getSwiperTranslate( axis ) {
if ( axis === void 0 ) {
axis = this.isHorizontal() ? 'x' : 'y';
}
var swiper = this;
var params = swiper.params,
rtl = swiper.rtlTranslate,
translate = swiper.translate,
$wrapperEl = swiper.$wrapperEl;
if ( params.virtualTranslate ) {
return rtl ? -translate : translate;
}
if ( params.cssMode ) {
return translate;
}
var currentTranslate = getTranslate( $wrapperEl[ 0 ], axis );
if ( rtl ) currentTranslate = -currentTranslate;
return currentTranslate || 0;
}
function setTranslate( translate, byController ) {
var swiper = this;
var rtl = swiper.rtlTranslate,
params = swiper.params,
$wrapperEl = swiper.$wrapperEl,
wrapperEl = swiper.wrapperEl,
progress = swiper.progress;
var x = 0;
var y = 0;
var z = 0;
if ( swiper.isHorizontal() ) {
x = rtl ? -translate : translate;
} else {
y = translate;
}
if ( params.roundLengths ) {
x = Math.floor( x );
y = Math.floor( y );
}
if ( params.cssMode ) {
wrapperEl[ swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop' ] = swiper.isHorizontal()
? -x
: -y;
} else if ( ! params.virtualTranslate ) {
$wrapperEl.transform( 'translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)' );
}
swiper.previousTranslate = swiper.translate;
swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress
var newProgress;
var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
if ( translatesDiff === 0 ) {
newProgress = 0;
} else {
newProgress = ( translate - swiper.minTranslate() ) / translatesDiff;
}
if ( newProgress !== progress ) {
swiper.updateProgress( translate );
}
swiper.emit( 'setTranslate', swiper.translate, byController );
}
function minTranslate() {
return -this.snapGrid[ 0 ];
}
function maxTranslate() {
return -this.snapGrid[ this.snapGrid.length - 1 ];
}
function translateTo( translate, speed, runCallbacks, translateBounds, internal ) {
if ( translate === void 0 ) {
translate = 0;
}
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
if ( translateBounds === void 0 ) {
translateBounds = true;
}
var swiper = this;
var params = swiper.params,
wrapperEl = swiper.wrapperEl;
if ( swiper.animating && params.preventInteractionOnTransition ) {
return false;
}
var minTranslate = swiper.minTranslate();
var maxTranslate = swiper.maxTranslate();
var newTranslate;
if ( translateBounds && translate > minTranslate ) newTranslate = minTranslate;
else if ( translateBounds && translate < maxTranslate ) newTranslate = maxTranslate;
else newTranslate = translate; // Update progress
swiper.updateProgress( newTranslate );
if ( params.cssMode ) {
var isH = swiper.isHorizontal();
if ( speed === 0 ) {
wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = -newTranslate;
} else {
// eslint-disable-next-line
if ( wrapperEl.scrollTo ) {
var _wrapperEl$scrollTo;
wrapperEl.scrollTo(
( ( _wrapperEl$scrollTo = {} ),
( _wrapperEl$scrollTo[ isH ? 'left' : 'top' ] = -newTranslate ),
( _wrapperEl$scrollTo.behavior = 'smooth' ),
_wrapperEl$scrollTo )
);
} else {
wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = -newTranslate;
}
}
return true;
}
if ( speed === 0 ) {
swiper.setTransition( 0 );
swiper.setTranslate( newTranslate );
if ( runCallbacks ) {
swiper.emit( 'beforeTransitionStart', speed, internal );
swiper.emit( 'transitionEnd' );
}
} else {
swiper.setTransition( speed );
swiper.setTranslate( newTranslate );
if ( runCallbacks ) {
swiper.emit( 'beforeTransitionStart', speed, internal );
swiper.emit( 'transitionStart' );
}
if ( ! swiper.animating ) {
swiper.animating = true;
if ( ! swiper.onTranslateToWrapperTransitionEnd ) {
swiper.onTranslateToWrapperTransitionEnd = function transitionEnd( e ) {
if ( ! swiper || swiper.destroyed ) return;
if ( e.target !== this ) return;
swiper.$wrapperEl[ 0 ].removeEventListener(
'transitionend',
swiper.onTranslateToWrapperTransitionEnd
);
swiper.$wrapperEl[ 0 ].removeEventListener(
'webkitTransitionEnd',
swiper.onTranslateToWrapperTransitionEnd
);
swiper.onTranslateToWrapperTransitionEnd = null;
delete swiper.onTranslateToWrapperTransitionEnd;
if ( runCallbacks ) {
swiper.emit( 'transitionEnd' );
}
};
}
swiper.$wrapperEl[ 0 ].addEventListener(
'transitionend',
swiper.onTranslateToWrapperTransitionEnd
);
swiper.$wrapperEl[ 0 ].addEventListener(
'webkitTransitionEnd',
swiper.onTranslateToWrapperTransitionEnd
);
}
}
return true;
}
var translate = {
getTranslate: getSwiperTranslate,
setTranslate: setTranslate,
minTranslate: minTranslate,
maxTranslate: maxTranslate,
translateTo: translateTo,
};
function setTransition( duration, byController ) {
var swiper = this;
if ( ! swiper.params.cssMode ) {
swiper.$wrapperEl.transition( duration );
}
swiper.emit( 'setTransition', duration, byController );
}
function transitionStart( runCallbacks, direction ) {
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
var swiper = this;
var activeIndex = swiper.activeIndex,
params = swiper.params,
previousIndex = swiper.previousIndex;
if ( params.cssMode ) return;
if ( params.autoHeight ) {
swiper.updateAutoHeight();
}
var dir = direction;
if ( ! dir ) {
if ( activeIndex > previousIndex ) dir = 'next';
else if ( activeIndex < previousIndex ) dir = 'prev';
else dir = 'reset';
}
swiper.emit( 'transitionStart' );
if ( runCallbacks && activeIndex !== previousIndex ) {
if ( dir === 'reset' ) {
swiper.emit( 'slideResetTransitionStart' );
return;
}
swiper.emit( 'slideChangeTransitionStart' );
if ( dir === 'next' ) {
swiper.emit( 'slideNextTransitionStart' );
} else {
swiper.emit( 'slidePrevTransitionStart' );
}
}
}
function transitionEnd( runCallbacks, direction ) {
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
var swiper = this;
var activeIndex = swiper.activeIndex,
previousIndex = swiper.previousIndex,
params = swiper.params;
swiper.animating = false;
if ( params.cssMode ) return;
swiper.setTransition( 0 );
var dir = direction;
if ( ! dir ) {
if ( activeIndex > previousIndex ) dir = 'next';
else if ( activeIndex < previousIndex ) dir = 'prev';
else dir = 'reset';
}
swiper.emit( 'transitionEnd' );
if ( runCallbacks && activeIndex !== previousIndex ) {
if ( dir === 'reset' ) {
swiper.emit( 'slideResetTransitionEnd' );
return;
}
swiper.emit( 'slideChangeTransitionEnd' );
if ( dir === 'next' ) {
swiper.emit( 'slideNextTransitionEnd' );
} else {
swiper.emit( 'slidePrevTransitionEnd' );
}
}
}
var transition = {
setTransition: setTransition,
transitionStart: transitionStart,
transitionEnd: transitionEnd,
};
function slideTo( index, speed, runCallbacks, internal, initial ) {
if ( index === void 0 ) {
index = 0;
}
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
if ( typeof index !== 'number' && typeof index !== 'string' ) {
throw new Error(
"The 'index' argument cannot have type other than 'number' or 'string'. [" +
typeof index +
'] given.'
);
}
if ( typeof index === 'string' ) {
/**
* The `index` argument converted from `string` to `number`.
* @type {number}
*/
var indexAsNumber = parseInt( index, 10 );
/**
* Determines whether the `index` argument is a valid `number`
* after being converted from the `string` type.
* @type {boolean}
*/
var isValidNumber = isFinite( indexAsNumber );
if ( ! isValidNumber ) {
throw new Error(
"The passed-in 'index' (string) couldn't be converted to 'number'. [" + index + '] given.'
);
} // Knowing that the converted `index` is a valid number,
// we can update the original argument's value.
index = indexAsNumber;
}
var swiper = this;
var slideIndex = index;
if ( slideIndex < 0 ) slideIndex = 0;
var params = swiper.params,
snapGrid = swiper.snapGrid,
slidesGrid = swiper.slidesGrid,
previousIndex = swiper.previousIndex,
activeIndex = swiper.activeIndex,
rtl = swiper.rtlTranslate,
wrapperEl = swiper.wrapperEl,
enabled = swiper.enabled;
if (
( swiper.animating && params.preventInteractionOnTransition ) ||
( ! enabled && ! internal && ! initial )
) {
return false;
}
var skip = Math.min( swiper.params.slidesPerGroupSkip, slideIndex );
var snapIndex = skip + Math.floor( ( slideIndex - skip ) / swiper.params.slidesPerGroup );
if ( snapIndex >= snapGrid.length ) snapIndex = snapGrid.length - 1;
if ( ( activeIndex || params.initialSlide || 0 ) === ( previousIndex || 0 ) && runCallbacks ) {
swiper.emit( 'beforeSlideChangeStart' );
}
var translate = -snapGrid[ snapIndex ]; // Update progress
swiper.updateProgress( translate ); // Normalize slideIndex
if ( params.normalizeSlideIndex ) {
for ( var i = 0; i < slidesGrid.length; i += 1 ) {
var normalizedTranslate = -Math.floor( translate * 100 );
var normalizedGird = Math.floor( slidesGrid[ i ] * 100 );
var normalizedGridNext = Math.floor( slidesGrid[ i + 1 ] * 100 );
if ( typeof slidesGrid[ i + 1 ] !== 'undefined' ) {
if (
normalizedTranslate >= normalizedGird &&
normalizedTranslate < normalizedGridNext - ( normalizedGridNext - normalizedGird ) / 2
) {
slideIndex = i;
} else if (
normalizedTranslate >= normalizedGird &&
normalizedTranslate < normalizedGridNext
) {
slideIndex = i + 1;
}
} else if ( normalizedTranslate >= normalizedGird ) {
slideIndex = i;
}
}
} // Directions locks
if ( swiper.initialized && slideIndex !== activeIndex ) {
if (
! swiper.allowSlideNext &&
translate < swiper.translate &&
translate < swiper.minTranslate()
) {
return false;
}
if (
! swiper.allowSlidePrev &&
translate > swiper.translate &&
translate > swiper.maxTranslate()
) {
if ( ( activeIndex || 0 ) !== slideIndex ) return false;
}
}
var direction;
if ( slideIndex > activeIndex ) direction = 'next';
else if ( slideIndex < activeIndex ) direction = 'prev';
else direction = 'reset'; // Update Index
if (
( rtl && -translate === swiper.translate ) ||
( ! rtl && translate === swiper.translate )
) {
swiper.updateActiveIndex( slideIndex ); // Update Height
if ( params.autoHeight ) {
swiper.updateAutoHeight();
}
swiper.updateSlidesClasses();
if ( params.effect !== 'slide' ) {
swiper.setTranslate( translate );
}
if ( direction !== 'reset' ) {
swiper.transitionStart( runCallbacks, direction );
swiper.transitionEnd( runCallbacks, direction );
}
return false;
}
if ( params.cssMode ) {
var isH = swiper.isHorizontal();
var t = -translate;
if ( rtl ) {
t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
}
if ( speed === 0 ) {
wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = t;
} else {
// eslint-disable-next-line
if ( wrapperEl.scrollTo ) {
var _wrapperEl$scrollTo;
wrapperEl.scrollTo(
( ( _wrapperEl$scrollTo = {} ),
( _wrapperEl$scrollTo[ isH ? 'left' : 'top' ] = t ),
( _wrapperEl$scrollTo.behavior = 'smooth' ),
_wrapperEl$scrollTo )
);
} else {
wrapperEl[ isH ? 'scrollLeft' : 'scrollTop' ] = t;
}
}
return true;
}
if ( speed === 0 ) {
swiper.setTransition( 0 );
swiper.setTranslate( translate );
swiper.updateActiveIndex( slideIndex );
swiper.updateSlidesClasses();
swiper.emit( 'beforeTransitionStart', speed, internal );
swiper.transitionStart( runCallbacks, direction );
swiper.transitionEnd( runCallbacks, direction );
} else {
swiper.setTransition( speed );
swiper.setTranslate( translate );
swiper.updateActiveIndex( slideIndex );
swiper.updateSlidesClasses();
swiper.emit( 'beforeTransitionStart', speed, internal );
swiper.transitionStart( runCallbacks, direction );
if ( ! swiper.animating ) {
swiper.animating = true;
if ( ! swiper.onSlideToWrapperTransitionEnd ) {
swiper.onSlideToWrapperTransitionEnd = function transitionEnd( e ) {
if ( ! swiper || swiper.destroyed ) return;
if ( e.target !== this ) return;
swiper.$wrapperEl[ 0 ].removeEventListener(
'transitionend',
swiper.onSlideToWrapperTransitionEnd
);
swiper.$wrapperEl[ 0 ].removeEventListener(
'webkitTransitionEnd',
swiper.onSlideToWrapperTransitionEnd
);
swiper.onSlideToWrapperTransitionEnd = null;
delete swiper.onSlideToWrapperTransitionEnd;
swiper.transitionEnd( runCallbacks, direction );
};
}
swiper.$wrapperEl[ 0 ].addEventListener(
'transitionend',
swiper.onSlideToWrapperTransitionEnd
);
swiper.$wrapperEl[ 0 ].addEventListener(
'webkitTransitionEnd',
swiper.onSlideToWrapperTransitionEnd
);
}
}
return true;
}
function slideToLoop( index, speed, runCallbacks, internal ) {
if ( index === void 0 ) {
index = 0;
}
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
var swiper = this;
var newIndex = index;
if ( swiper.params.loop ) {
newIndex += swiper.loopedSlides;
}
return swiper.slideTo( newIndex, speed, runCallbacks, internal );
}
/* eslint no-unused-vars: "off" */
function slideNext( speed, runCallbacks, internal ) {
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
var swiper = this;
var params = swiper.params,
animating = swiper.animating,
enabled = swiper.enabled;
if ( ! enabled ) return swiper;
var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
if ( params.loop ) {
if ( animating && params.loopPreventsSlide ) return false;
swiper.loopFix(); // eslint-disable-next-line
swiper._clientLeft = swiper.$wrapperEl[ 0 ].clientLeft;
}
return swiper.slideTo( swiper.activeIndex + increment, speed, runCallbacks, internal );
}
/* eslint no-unused-vars: "off" */
function slidePrev( speed, runCallbacks, internal ) {
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
var swiper = this;
var params = swiper.params,
animating = swiper.animating,
snapGrid = swiper.snapGrid,
slidesGrid = swiper.slidesGrid,
rtlTranslate = swiper.rtlTranslate,
enabled = swiper.enabled;
if ( ! enabled ) return swiper;
if ( params.loop ) {
if ( animating && params.loopPreventsSlide ) return false;
swiper.loopFix(); // eslint-disable-next-line
swiper._clientLeft = swiper.$wrapperEl[ 0 ].clientLeft;
}
var translate = rtlTranslate ? swiper.translate : -swiper.translate;
function normalize( val ) {
if ( val < 0 ) return -Math.floor( Math.abs( val ) );
return Math.floor( val );
}
var normalizedTranslate = normalize( translate );
var normalizedSnapGrid = snapGrid.map( function ( val ) {
return normalize( val );
} );
var prevSnap = snapGrid[ normalizedSnapGrid.indexOf( normalizedTranslate ) - 1 ];
if ( typeof prevSnap === 'undefined' && params.cssMode ) {
snapGrid.forEach( function ( snap ) {
if ( ! prevSnap && normalizedTranslate >= snap ) prevSnap = snap;
} );
}
var prevIndex;
if ( typeof prevSnap !== 'undefined' ) {
prevIndex = slidesGrid.indexOf( prevSnap );
if ( prevIndex < 0 ) prevIndex = swiper.activeIndex - 1;
}
return swiper.slideTo( prevIndex, speed, runCallbacks, internal );
}
/* eslint no-unused-vars: "off" */
function slideReset( speed, runCallbacks, internal ) {
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
var swiper = this;
return swiper.slideTo( swiper.activeIndex, speed, runCallbacks, internal );
}
/* eslint no-unused-vars: "off" */
function slideToClosest( speed, runCallbacks, internal, threshold ) {
if ( speed === void 0 ) {
speed = this.params.speed;
}
if ( runCallbacks === void 0 ) {
runCallbacks = true;
}
if ( threshold === void 0 ) {
threshold = 0.5;
}
var swiper = this;
var index = swiper.activeIndex;
var skip = Math.min( swiper.params.slidesPerGroupSkip, index );
var snapIndex = skip + Math.floor( ( index - skip ) / swiper.params.slidesPerGroup );
var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
if ( translate >= swiper.snapGrid[ snapIndex ] ) {
// The current translate is on or after the current snap index, so the choice
// is between the current index and the one after it.
var currentSnap = swiper.snapGrid[ snapIndex ];
var nextSnap = swiper.snapGrid[ snapIndex + 1 ];
if ( translate - currentSnap > ( nextSnap - currentSnap ) * threshold ) {
index += swiper.params.slidesPerGroup;
}
} else {
// The current translate is before the current snap index, so the choice
// is between the current index and the one before it.
var prevSnap = swiper.snapGrid[ snapIndex - 1 ];
var _currentSnap = swiper.snapGrid[ snapIndex ];
if ( translate - prevSnap <= ( _currentSnap - prevSnap ) * threshold ) {
index -= swiper.params.slidesPerGroup;
}
}
index = Math.max( index, 0 );
index = Math.min( index, swiper.slidesGrid.length - 1 );
return swiper.slideTo( index, speed, runCallbacks, internal );
}
function slideToClickedSlide() {
var swiper = this;
var params = swiper.params,
$wrapperEl = swiper.$wrapperEl;
var slidesPerView =
params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
var slideToIndex = swiper.clickedIndex;
var realIndex;
if ( params.loop ) {
if ( swiper.animating ) return;
realIndex = parseInt( $( swiper.clickedSlide ).attr( 'data-swiper-slide-index' ), 10 );
if ( params.centeredSlides ) {
if (
slideToIndex < swiper.loopedSlides - slidesPerView / 2 ||
slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2
) {
swiper.loopFix();
slideToIndex = $wrapperEl
.children(
'.' +
params.slideClass +
'[data-swiper-slide-index="' +
realIndex +
'"]:not(.' +
params.slideDuplicateClass +
')'
)
.eq( 0 )
.index();
nextTick( function () {
swiper.slideTo( slideToIndex );
} );
} else {
swiper.slideTo( slideToIndex );
}
} else if ( slideToIndex > swiper.slides.length - slidesPerView ) {
swiper.loopFix();
slideToIndex = $wrapperEl
.children(
'.' +
params.slideClass +
'[data-swiper-slide-index="' +
realIndex +
'"]:not(.' +
params.slideDuplicateClass +
')'
)
.eq( 0 )
.index();
nextTick( function () {
swiper.slideTo( slideToIndex );
} );
} else {
swiper.slideTo( slideToIndex );
}
} else {
swiper.slideTo( slideToIndex );
}
}
var slide = {
slideTo: slideTo,
slideToLoop: slideToLoop,
slideNext: slideNext,
slidePrev: slidePrev,
slideReset: slideReset,
slideToClosest: slideToClosest,
slideToClickedSlide: slideToClickedSlide,
};
function loopCreate() {
var swiper = this;
var document = getDocument();
var params = swiper.params,
$wrapperEl = swiper.$wrapperEl; // Remove duplicated slides
$wrapperEl.children( '.' + params.slideClass + '.' + params.slideDuplicateClass ).remove();
var slides = $wrapperEl.children( '.' + params.slideClass );
if ( params.loopFillGroupWithBlank ) {
var blankSlidesNum = params.slidesPerGroup - ( slides.length % params.slidesPerGroup );
if ( blankSlidesNum !== params.slidesPerGroup ) {
for ( var i = 0; i < blankSlidesNum; i += 1 ) {
var blankNode = $( document.createElement( 'div' ) ).addClass(
params.slideClass + ' ' + params.slideBlankClass
);
$wrapperEl.append( blankNode );
}
slides = $wrapperEl.children( '.' + params.slideClass );
}
}
if ( params.slidesPerView === 'auto' && ! params.loopedSlides )
params.loopedSlides = slides.length;
swiper.loopedSlides = Math.ceil(
parseFloat( params.loopedSlides || params.slidesPerView, 10 )
);
swiper.loopedSlides += params.loopAdditionalSlides;
if ( swiper.loopedSlides > slides.length ) {
swiper.loopedSlides = slides.length;
}
var prependSlides = [];
var appendSlides = [];
slides.each( function ( el, index ) {
var slide = $( el );
if ( index < swiper.loopedSlides ) {
appendSlides.push( el );
}
if ( index < slides.length && index >= slides.length - swiper.loopedSlides ) {
prependSlides.push( el );
}
slide.attr( 'data-swiper-slide-index', index );
} );
for ( var _i = 0; _i < appendSlides.length; _i += 1 ) {
$wrapperEl.append(
$( appendSlides[ _i ].cloneNode( true ) ).addClass( params.slideDuplicateClass )
);
}
for ( var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1 ) {
$wrapperEl.prepend(
$( prependSlides[ _i2 ].cloneNode( true ) ).addClass( params.slideDuplicateClass )
);
}
}
function loopFix() {
var swiper = this;
swiper.emit( 'beforeLoopFix' );
var activeIndex = swiper.activeIndex,
slides = swiper.slides,
loopedSlides = swiper.loopedSlides,
allowSlidePrev = swiper.allowSlidePrev,
allowSlideNext = swiper.allowSlideNext,
snapGrid = swiper.snapGrid,
rtl = swiper.rtlTranslate;
var newIndex;
swiper.allowSlidePrev = true;
swiper.allowSlideNext = true;
var snapTranslate = -snapGrid[ activeIndex ];
var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding
if ( activeIndex < loopedSlides ) {
newIndex = slides.length - loopedSlides * 3 + activeIndex;
newIndex += loopedSlides;
var slideChanged = swiper.slideTo( newIndex, 0, false, true );
if ( slideChanged && diff !== 0 ) {
swiper.setTranslate( ( rtl ? -swiper.translate : swiper.translate ) - diff );
}
} else if ( activeIndex >= slides.length - loopedSlides ) {
// Fix For Positive Oversliding
newIndex = -slides.length + activeIndex + loopedSlides;
newIndex += loopedSlides;
var _slideChanged = swiper.slideTo( newIndex, 0, false, true );
if ( _slideChanged && diff !== 0 ) {
swiper.setTranslate( ( rtl ? -swiper.translate : swiper.translate ) - diff );
}
}
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
swiper.emit( 'loopFix' );
}
function loopDestroy() {
var swiper = this;
var $wrapperEl = swiper.$wrapperEl,
params = swiper.params,
slides = swiper.slides;
$wrapperEl
.children(
'.' +
params.slideClass +
'.' +
params.slideDuplicateClass +
',.' +
params.slideClass +
'.' +
params.slideBlankClass
)
.remove();
slides.removeAttr( 'data-swiper-slide-index' );
}
var loop = {
loopCreate: loopCreate,
loopFix: loopFix,
loopDestroy: loopDestroy,
};
function setGrabCursor( moving ) {
var swiper = this;
if (
swiper.support.touch ||
! swiper.params.simulateTouch ||
( swiper.params.watchOverflow && swiper.isLocked ) ||
swiper.params.cssMode
)
return;
var el = swiper.el;
el.style.cursor = 'move';
el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
el.style.cursor = moving ? 'grabbing' : 'grab';
}
function unsetGrabCursor() {
var swiper = this;
if (
swiper.support.touch ||
( swiper.params.watchOverflow && swiper.isLocked ) ||
swiper.params.cssMode
) {
return;
}
swiper.el.style.cursor = '';
}
var grabCursor = {
setGrabCursor: setGrabCursor,
unsetGrabCursor: unsetGrabCursor,
};
function appendSlide( slides ) {
var swiper = this;
var $wrapperEl = swiper.$wrapperEl,
params = swiper.params;
if ( params.loop ) {
swiper.loopDestroy();
}
if ( typeof slides === 'object' && 'length' in slides ) {
for ( var i = 0; i < slides.length; i += 1 ) {
if ( slides[ i ] ) $wrapperEl.append( slides[ i ] );
}
} else {
$wrapperEl.append( slides );
}
if ( params.loop ) {
swiper.loopCreate();
}
if ( ! ( params.observer && swiper.support.observer ) ) {
swiper.update();
}
}
function prependSlide( slides ) {
var swiper = this;
var params = swiper.params,
$wrapperEl = swiper.$wrapperEl,
activeIndex = swiper.activeIndex;
if ( params.loop ) {
swiper.loopDestroy();
}
var newActiveIndex = activeIndex + 1;
if ( typeof slides === 'object' && 'length' in slides ) {
for ( var i = 0; i < slides.length; i += 1 ) {
if ( slides[ i ] ) $wrapperEl.prepend( slides[ i ] );
}
newActiveIndex = activeIndex + slides.length;
} else {
$wrapperEl.prepend( slides );
}
if ( params.loop ) {
swiper.loopCreate();
}
if ( ! ( params.observer && swiper.support.observer ) ) {
swiper.update();
}
swiper.slideTo( newActiveIndex, 0, false );
}
function addSlide( index, slides ) {
var swiper = this;
var $wrapperEl = swiper.$wrapperEl,
params = swiper.params,
activeIndex = swiper.activeIndex;
var activeIndexBuffer = activeIndex;
if ( params.loop ) {
activeIndexBuffer -= swiper.loopedSlides;
swiper.loopDestroy();
swiper.slides = $wrapperEl.children( '.' + params.slideClass );
}
var baseLength = swiper.slides.length;
if ( index <= 0 ) {
swiper.prependSlide( slides );
return;
}
if ( index >= baseLength ) {
swiper.appendSlide( slides );
return;
}
var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
var slidesBuffer = [];
for ( var i = baseLength - 1; i >= index; i -= 1 ) {
var currentSlide = swiper.slides.eq( i );
currentSlide.remove();
slidesBuffer.unshift( currentSlide );
}
if ( typeof slides === 'object' && 'length' in slides ) {
for ( var _i = 0; _i < slides.length; _i += 1 ) {
if ( slides[ _i ] ) $wrapperEl.append( slides[ _i ] );
}
newActiveIndex =
activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
} else {
$wrapperEl.append( slides );
}
for ( var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1 ) {
$wrapperEl.append( slidesBuffer[ _i2 ] );
}
if ( params.loop ) {
swiper.loopCreate();
}
if ( ! ( params.observer && swiper.support.observer ) ) {
swiper.update();
}
if ( params.loop ) {
swiper.slideTo( newActiveIndex + swiper.loopedSlides, 0, false );
} else {
swiper.slideTo( newActiveIndex, 0, false );
}
}
function removeSlide( slidesIndexes ) {
var swiper = this;
var params = swiper.params,
$wrapperEl = swiper.$wrapperEl,
activeIndex = swiper.activeIndex;
var activeIndexBuffer = activeIndex;
if ( params.loop ) {
activeIndexBuffer -= swiper.loopedSlides;
swiper.loopDestroy();
swiper.slides = $wrapperEl.children( '.' + params.slideClass );
}
var newActiveIndex = activeIndexBuffer;
var indexToRemove;
if ( typeof slidesIndexes === 'object' && 'length' in slidesIndexes ) {
for ( var i = 0; i < slidesIndexes.length; i += 1 ) {
indexToRemove = slidesIndexes[ i ];
if ( swiper.slides[ indexToRemove ] ) swiper.slides.eq( indexToRemove ).remove();
if ( indexToRemove < newActiveIndex ) newActiveIndex -= 1;
}
newActiveIndex = Math.max( newActiveIndex, 0 );
} else {
indexToRemove = slidesIndexes;
if ( swiper.slides[ indexToRemove ] ) swiper.slides.eq( indexToRemove ).remove();
if ( indexToRemove < newActiveIndex ) newActiveIndex -= 1;
newActiveIndex = Math.max( newActiveIndex, 0 );
}
if ( params.loop ) {
swiper.loopCreate();
}
if ( ! ( params.observer && swiper.support.observer ) ) {
swiper.update();
}
if ( params.loop ) {
swiper.slideTo( newActiveIndex + swiper.loopedSlides, 0, false );
} else {
swiper.slideTo( newActiveIndex, 0, false );
}
}
function removeAllSlides() {
var swiper = this;
var slidesIndexes = [];
for ( var i = 0; i < swiper.slides.length; i += 1 ) {
slidesIndexes.push( i );
}
swiper.removeSlide( slidesIndexes );
}
var manipulation = {
appendSlide: appendSlide,
prependSlide: prependSlide,
addSlide: addSlide,
removeSlide: removeSlide,
removeAllSlides: removeAllSlides,
};
function onTouchStart( event ) {
var swiper = this;
var document = getDocument();
var window = getWindow();
var data = swiper.touchEventsData;
var params = swiper.params,
touches = swiper.touches,
enabled = swiper.enabled;
if ( ! enabled ) return;
if ( swiper.animating && params.preventInteractionOnTransition ) {
return;
}
var e = event;
if ( e.originalEvent ) e = e.originalEvent;
var $targetEl = $( e.target );
if ( params.touchEventsTarget === 'wrapper' ) {
if ( ! $targetEl.closest( swiper.wrapperEl ).length ) return;
}
data.isTouchEvent = e.type === 'touchstart';
if ( ! data.isTouchEvent && 'which' in e && e.which === 3 ) return;
if ( ! data.isTouchEvent && 'button' in e && e.button > 0 ) return;
if ( data.isTouched && data.isMoved ) return; // change target el for shadow root componenet
var swipingClassHasValue = !! params.noSwipingClass && params.noSwipingClass !== '';
if (
swipingClassHasValue &&
e.target &&
e.target.shadowRoot &&
event.path &&
event.path[ 0 ]
) {
$targetEl = $( event.path[ 0 ] );
}
if (
params.noSwiping &&
$targetEl.closest(
params.noSwipingSelector ? params.noSwipingSelector : '.' + params.noSwipingClass
)[ 0 ]
) {
swiper.allowClick = true;
return;
}
if ( params.swipeHandler ) {
if ( ! $targetEl.closest( params.swipeHandler )[ 0 ] ) return;
}
touches.currentX = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageX : e.pageX;
touches.currentY = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageY : e.pageY;
var startX = touches.currentX;
var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
if (
edgeSwipeDetection &&
( startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold )
) {
if ( edgeSwipeDetection === 'prevent' ) {
event.preventDefault();
} else {
return;
}
}
extend( data, {
isTouched: true,
isMoved: false,
allowTouchCallbacks: true,
isScrolling: undefined,
startMoving: undefined,
} );
touches.startX = startX;
touches.startY = startY;
data.touchStartTime = now();
swiper.allowClick = true;
swiper.updateSize();
swiper.swipeDirection = undefined;
if ( params.threshold > 0 ) data.allowThresholdMove = false;
if ( e.type !== 'touchstart' ) {
var preventDefault = true;
if ( $targetEl.is( data.focusableElements ) ) preventDefault = false;
if (
document.activeElement &&
$( document.activeElement ).is( data.focusableElements ) &&
document.activeElement !== $targetEl[ 0 ]
) {
document.activeElement.blur();
}
var shouldPreventDefault =
preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
if (
( params.touchStartForcePreventDefault || shouldPreventDefault ) &&
! $targetEl[ 0 ].isContentEditable
) {
e.preventDefault();
}
}
swiper.emit( 'touchStart', e );
}
function onTouchMove( event ) {
var document = getDocument();
var swiper = this;
var data = swiper.touchEventsData;
var params = swiper.params,
touches = swiper.touches,
rtl = swiper.rtlTranslate,
enabled = swiper.enabled;
if ( ! enabled ) return;
var e = event;
if ( e.originalEvent ) e = e.originalEvent;
if ( ! data.isTouched ) {
if ( data.startMoving && data.isScrolling ) {
swiper.emit( 'touchMoveOpposite', e );
}
return;
}
if ( data.isTouchEvent && e.type !== 'touchmove' ) return;
var targetTouch =
e.type === 'touchmove' &&
e.targetTouches &&
( e.targetTouches[ 0 ] || e.changedTouches[ 0 ] );
var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
if ( e.preventedByNestedSwiper ) {
touches.startX = pageX;
touches.startY = pageY;
return;
}
if ( ! swiper.allowTouchMove ) {
// isMoved = true;
swiper.allowClick = false;
if ( data.isTouched ) {
extend( touches, {
startX: pageX,
startY: pageY,
currentX: pageX,
currentY: pageY,
} );
data.touchStartTime = now();
}
return;
}
if ( data.isTouchEvent && params.touchReleaseOnEdges && ! params.loop ) {
if ( swiper.isVertical() ) {
// Vertical
if (
( pageY < touches.startY && swiper.translate <= swiper.maxTranslate() ) ||
( pageY > touches.startY && swiper.translate >= swiper.minTranslate() )
) {
data.isTouched = false;
data.isMoved = false;
return;
}
} else if (
( pageX < touches.startX && swiper.translate <= swiper.maxTranslate() ) ||
( pageX > touches.startX && swiper.translate >= swiper.minTranslate() )
) {
return;
}
}
if ( data.isTouchEvent && document.activeElement ) {
if ( e.target === document.activeElement && $( e.target ).is( data.focusableElements ) ) {
data.isMoved = true;
swiper.allowClick = false;
return;
}
}
if ( data.allowTouchCallbacks ) {
swiper.emit( 'touchMove', e );
}
if ( e.targetTouches && e.targetTouches.length > 1 ) return;
touches.currentX = pageX;
touches.currentY = pageY;
var diffX = touches.currentX - touches.startX;
var diffY = touches.currentY - touches.startY;
if (
swiper.params.threshold &&
Math.sqrt( Math.pow( diffX, 2 ) + Math.pow( diffY, 2 ) ) < swiper.params.threshold
)
return;
if ( typeof data.isScrolling === 'undefined' ) {
var touchAngle;
if (
( swiper.isHorizontal() && touches.currentY === touches.startY ) ||
( swiper.isVertical() && touches.currentX === touches.startX )
) {
data.isScrolling = false;
} else {
// eslint-disable-next-line
if ( diffX * diffX + diffY * diffY >= 25 ) {
touchAngle = ( Math.atan2( Math.abs( diffY ), Math.abs( diffX ) ) * 180 ) / Math.PI;
data.isScrolling = swiper.isHorizontal()
? touchAngle > params.touchAngle
: 90 - touchAngle > params.touchAngle;
}
}
}
if ( data.isScrolling ) {
swiper.emit( 'touchMoveOpposite', e );
}
if ( typeof data.startMoving === 'undefined' ) {
if ( touches.currentX !== touches.startX || touches.currentY !== touches.startY ) {
data.startMoving = true;
}
}
if ( data.isScrolling ) {
data.isTouched = false;
return;
}
if ( ! data.startMoving ) {
return;
}
swiper.allowClick = false;
if ( ! params.cssMode && e.cancelable ) {
e.preventDefault();
}
if ( params.touchMoveStopPropagation && ! params.nested ) {
e.stopPropagation();
}
if ( ! data.isMoved ) {
if ( params.loop ) {
swiper.loopFix();
}
data.startTranslate = swiper.getTranslate();
swiper.setTransition( 0 );
if ( swiper.animating ) {
swiper.$wrapperEl.trigger( 'webkitTransitionEnd transitionend' );
}
data.allowMomentumBounce = false; // Grab Cursor
if (
params.grabCursor &&
( swiper.allowSlideNext === true || swiper.allowSlidePrev === true )
) {
swiper.setGrabCursor( true );
}
swiper.emit( 'sliderFirstMove', e );
}
swiper.emit( 'sliderMove', e );
data.isMoved = true;
var diff = swiper.isHorizontal() ? diffX : diffY;
touches.diff = diff;
diff *= params.touchRatio;
if ( rtl ) diff = -diff;
swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
data.currentTranslate = diff + data.startTranslate;
var disableParentSwiper = true;
var resistanceRatio = params.resistanceRatio;
if ( params.touchReleaseOnEdges ) {
resistanceRatio = 0;
}
if ( diff > 0 && data.currentTranslate > swiper.minTranslate() ) {
disableParentSwiper = false;
if ( params.resistance )
data.currentTranslate =
swiper.minTranslate() -
1 +
Math.pow( -swiper.minTranslate() + data.startTranslate + diff, resistanceRatio );
} else if ( diff < 0 && data.currentTranslate < swiper.maxTranslate() ) {
disableParentSwiper = false;
if ( params.resistance )
data.currentTranslate =
swiper.maxTranslate() +
1 -
Math.pow( swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio );
}
if ( disableParentSwiper ) {
e.preventedByNestedSwiper = true;
} // Directions locks
if (
! swiper.allowSlideNext &&
swiper.swipeDirection === 'next' &&
data.currentTranslate < data.startTranslate
) {
data.currentTranslate = data.startTranslate;
}
if (
! swiper.allowSlidePrev &&
swiper.swipeDirection === 'prev' &&
data.currentTranslate > data.startTranslate
) {
data.currentTranslate = data.startTranslate;
}
if ( ! swiper.allowSlidePrev && ! swiper.allowSlideNext ) {
data.currentTranslate = data.startTranslate;
} // Threshold
if ( params.threshold > 0 ) {
if ( Math.abs( diff ) > params.threshold || data.allowThresholdMove ) {
if ( ! data.allowThresholdMove ) {
data.allowThresholdMove = true;
touches.startX = touches.currentX;
touches.startY = touches.currentY;
data.currentTranslate = data.startTranslate;
touches.diff = swiper.isHorizontal()
? touches.currentX - touches.startX
: touches.currentY - touches.startY;
return;
}
} else {
data.currentTranslate = data.startTranslate;
return;
}
}
if ( ! params.followFinger || params.cssMode ) return; // Update active index in free mode
if ( params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility ) {
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
if ( params.freeMode ) {
// Velocity
if ( data.velocities.length === 0 ) {
data.velocities.push( {
position: touches[ swiper.isHorizontal() ? 'startX' : 'startY' ],
time: data.touchStartTime,
} );
}
data.velocities.push( {
position: touches[ swiper.isHorizontal() ? 'currentX' : 'currentY' ],
time: now(),
} );
} // Update progress
swiper.updateProgress( data.currentTranslate ); // Update translate
swiper.setTranslate( data.currentTranslate );
}
function onTouchEnd( event ) {
var swiper = this;
var data = swiper.touchEventsData;
var params = swiper.params,
touches = swiper.touches,
rtl = swiper.rtlTranslate,
$wrapperEl = swiper.$wrapperEl,
slidesGrid = swiper.slidesGrid,
snapGrid = swiper.snapGrid,
enabled = swiper.enabled;
if ( ! enabled ) return;
var e = event;
if ( e.originalEvent ) e = e.originalEvent;
if ( data.allowTouchCallbacks ) {
swiper.emit( 'touchEnd', e );
}
data.allowTouchCallbacks = false;
if ( ! data.isTouched ) {
if ( data.isMoved && params.grabCursor ) {
swiper.setGrabCursor( false );
}
data.isMoved = false;
data.startMoving = false;
return;
} // Return Grab Cursor
if (
params.grabCursor &&
data.isMoved &&
data.isTouched &&
( swiper.allowSlideNext === true || swiper.allowSlidePrev === true )
) {
swiper.setGrabCursor( false );
} // Time diff
var touchEndTime = now();
var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click
if ( swiper.allowClick ) {
swiper.updateClickedSlide( e );
swiper.emit( 'tap click', e );
if ( timeDiff < 300 && touchEndTime - data.lastClickTime < 300 ) {
swiper.emit( 'doubleTap doubleClick', e );
}
}
data.lastClickTime = now();
nextTick( function () {
if ( ! swiper.destroyed ) swiper.allowClick = true;
} );
if (
! data.isTouched ||
! data.isMoved ||
! swiper.swipeDirection ||
touches.diff === 0 ||
data.currentTranslate === data.startTranslate
) {
data.isTouched = false;
data.isMoved = false;
data.startMoving = false;
return;
}
data.isTouched = false;
data.isMoved = false;
data.startMoving = false;
var currentPos;
if ( params.followFinger ) {
currentPos = rtl ? swiper.translate : -swiper.translate;
} else {
currentPos = -data.currentTranslate;
}
if ( params.cssMode ) {
return;
}
if ( params.freeMode ) {
if ( currentPos < -swiper.minTranslate() ) {
swiper.slideTo( swiper.activeIndex );
return;
}
if ( currentPos > -swiper.maxTranslate() ) {
if ( swiper.slides.length < snapGrid.length ) {
swiper.slideTo( snapGrid.length - 1 );
} else {
swiper.slideTo( swiper.slides.length - 1 );
}
return;
}
if ( params.freeModeMomentum ) {
if ( data.velocities.length > 1 ) {
var lastMoveEvent = data.velocities.pop();
var velocityEvent = data.velocities.pop();
var distance = lastMoveEvent.position - velocityEvent.position;
var time = lastMoveEvent.time - velocityEvent.time;
swiper.velocity = distance / time;
swiper.velocity /= 2;
if ( Math.abs( swiper.velocity ) < params.freeModeMinimumVelocity ) {
swiper.velocity = 0;
} // this implies that the user stopped moving a finger then released.
// There would be no events with distance zero, so the last event is stale.
if ( time > 150 || now() - lastMoveEvent.time > 300 ) {
swiper.velocity = 0;
}
} else {
swiper.velocity = 0;
}
swiper.velocity *= params.freeModeMomentumVelocityRatio;
data.velocities.length = 0;
var momentumDuration = 1000 * params.freeModeMomentumRatio;
var momentumDistance = swiper.velocity * momentumDuration;
var newPosition = swiper.translate + momentumDistance;
if ( rtl ) newPosition = -newPosition;
var doBounce = false;
var afterBouncePosition;
var bounceAmount = Math.abs( swiper.velocity ) * 20 * params.freeModeMomentumBounceRatio;
var needsLoopFix;
if ( newPosition < swiper.maxTranslate() ) {
if ( params.freeModeMomentumBounce ) {
if ( newPosition + swiper.maxTranslate() < -bounceAmount ) {
newPosition = swiper.maxTranslate() - bounceAmount;
}
afterBouncePosition = swiper.maxTranslate();
doBounce = true;
data.allowMomentumBounce = true;
} else {
newPosition = swiper.maxTranslate();
}
if ( params.loop && params.centeredSlides ) needsLoopFix = true;
} else if ( newPosition > swiper.minTranslate() ) {
if ( params.freeModeMomentumBounce ) {
if ( newPosition - swiper.minTranslate() > bounceAmount ) {
newPosition = swiper.minTranslate() + bounceAmount;
}
afterBouncePosition = swiper.minTranslate();
doBounce = true;
data.allowMomentumBounce = true;
} else {
newPosition = swiper.minTranslate();
}
if ( params.loop && params.centeredSlides ) needsLoopFix = true;
} else if ( params.freeModeSticky ) {
var nextSlide;
for ( var j = 0; j < snapGrid.length; j += 1 ) {
if ( snapGrid[ j ] > -newPosition ) {
nextSlide = j;
break;
}
}
if (
Math.abs( snapGrid[ nextSlide ] - newPosition ) <
Math.abs( snapGrid[ nextSlide - 1 ] - newPosition ) ||
swiper.swipeDirection === 'next'
) {
newPosition = snapGrid[ nextSlide ];
} else {
newPosition = snapGrid[ nextSlide - 1 ];
}
newPosition = -newPosition;
}
if ( needsLoopFix ) {
swiper.once( 'transitionEnd', function () {
swiper.loopFix();
} );
} // Fix duration
if ( swiper.velocity !== 0 ) {
if ( rtl ) {
momentumDuration = Math.abs( ( -newPosition - swiper.translate ) / swiper.velocity );
} else {
momentumDuration = Math.abs( ( newPosition - swiper.translate ) / swiper.velocity );
}
if ( params.freeModeSticky ) {
// If freeModeSticky is active and the user ends a swipe with a slow-velocity
// event, then durations can be 20+ seconds to slide one (or zero!) slides.
// It's easy to see this when simulating touch with mouse events. To fix this,
// limit single-slide swipes to the default slide duration. This also has the
// nice side effect of matching slide speed if the user stopped moving before
// lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
// For faster swipes, also apply limits (albeit higher ones).
var moveDistance = Math.abs( ( rtl ? -newPosition : newPosition ) - swiper.translate );
var currentSlideSize = swiper.slidesSizesGrid[ swiper.activeIndex ];
if ( moveDistance < currentSlideSize ) {
momentumDuration = params.speed;
} else if ( moveDistance < 2 * currentSlideSize ) {
momentumDuration = params.speed * 1.5;
} else {
momentumDuration = params.speed * 2.5;
}
}
} else if ( params.freeModeSticky ) {
swiper.slideToClosest();
return;
}
if ( params.freeModeMomentumBounce && doBounce ) {
swiper.updateProgress( afterBouncePosition );
swiper.setTransition( momentumDuration );
swiper.setTranslate( newPosition );
swiper.transitionStart( true, swiper.swipeDirection );
swiper.animating = true;
$wrapperEl.transitionEnd( function () {
if ( ! swiper || swiper.destroyed || ! data.allowMomentumBounce ) return;
swiper.emit( 'momentumBounce' );
swiper.setTransition( params.speed );
setTimeout( function () {
swiper.setTranslate( afterBouncePosition );
$wrapperEl.transitionEnd( function () {
if ( ! swiper || swiper.destroyed ) return;
swiper.transitionEnd();
} );
}, 0 );
} );
} else if ( swiper.velocity ) {
swiper.updateProgress( newPosition );
swiper.setTransition( momentumDuration );
swiper.setTranslate( newPosition );
swiper.transitionStart( true, swiper.swipeDirection );
if ( ! swiper.animating ) {
swiper.animating = true;
$wrapperEl.transitionEnd( function () {
if ( ! swiper || swiper.destroyed ) return;
swiper.transitionEnd();
} );
}
} else {
swiper.emit( '_freeModeNoMomentumRelease' );
swiper.updateProgress( newPosition );
}
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
} else if ( params.freeModeSticky ) {
swiper.slideToClosest();
return;
} else if ( params.freeMode ) {
swiper.emit( '_freeModeNoMomentumRelease' );
}
if ( ! params.freeModeMomentum || timeDiff >= params.longSwipesMs ) {
swiper.updateProgress();
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
return;
} // Find current slide
var stopIndex = 0;
var groupSize = swiper.slidesSizesGrid[ 0 ];
for (
var i = 0;
i < slidesGrid.length;
i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup
) {
var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
if ( typeof slidesGrid[ i + _increment ] !== 'undefined' ) {
if ( currentPos >= slidesGrid[ i ] && currentPos < slidesGrid[ i + _increment ] ) {
stopIndex = i;
groupSize = slidesGrid[ i + _increment ] - slidesGrid[ i ];
}
} else if ( currentPos >= slidesGrid[ i ] ) {
stopIndex = i;
groupSize = slidesGrid[ slidesGrid.length - 1 ] - slidesGrid[ slidesGrid.length - 2 ];
}
} // Find current slide size
var ratio = ( currentPos - slidesGrid[ stopIndex ] ) / groupSize;
var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
if ( timeDiff > params.longSwipesMs ) {
// Long touches
if ( ! params.longSwipes ) {
swiper.slideTo( swiper.activeIndex );
return;
}
if ( swiper.swipeDirection === 'next' ) {
if ( ratio >= params.longSwipesRatio ) swiper.slideTo( stopIndex + increment );
else swiper.slideTo( stopIndex );
}
if ( swiper.swipeDirection === 'prev' ) {
if ( ratio > 1 - params.longSwipesRatio ) swiper.slideTo( stopIndex + increment );
else swiper.slideTo( stopIndex );
}
} else {
// Short swipes
if ( ! params.shortSwipes ) {
swiper.slideTo( swiper.activeIndex );
return;
}
var isNavButtonTarget =
swiper.navigation &&
( e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl );
if ( ! isNavButtonTarget ) {
if ( swiper.swipeDirection === 'next' ) {
swiper.slideTo( stopIndex + increment );
}
if ( swiper.swipeDirection === 'prev' ) {
swiper.slideTo( stopIndex );
}
} else if ( e.target === swiper.navigation.nextEl ) {
swiper.slideTo( stopIndex + increment );
} else {
swiper.slideTo( stopIndex );
}
}
}
function onResize() {
var swiper = this;
var params = swiper.params,
el = swiper.el;
if ( el && el.offsetWidth === 0 ) return; // Breakpoints
if ( params.breakpoints ) {
swiper.setBreakpoint();
} // Save locks
var allowSlideNext = swiper.allowSlideNext,
allowSlidePrev = swiper.allowSlidePrev,
snapGrid = swiper.snapGrid; // Disable locks on resize
swiper.allowSlideNext = true;
swiper.allowSlidePrev = true;
swiper.updateSize();
swiper.updateSlides();
swiper.updateSlidesClasses();
if (
( params.slidesPerView === 'auto' || params.slidesPerView > 1 ) &&
swiper.isEnd &&
! swiper.isBeginning &&
! swiper.params.centeredSlides
) {
swiper.slideTo( swiper.slides.length - 1, 0, false, true );
} else {
swiper.slideTo( swiper.activeIndex, 0, false, true );
}
if ( swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused ) {
swiper.autoplay.run();
} // Return locks after resize
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
if ( swiper.params.watchOverflow && snapGrid !== swiper.snapGrid ) {
swiper.checkOverflow();
}
}
function onClick( e ) {
var swiper = this;
if ( ! swiper.enabled ) return;
if ( ! swiper.allowClick ) {
if ( swiper.params.preventClicks ) e.preventDefault();
if ( swiper.params.preventClicksPropagation && swiper.animating ) {
e.stopPropagation();
e.stopImmediatePropagation();
}
}
}
function onScroll() {
var swiper = this;
var wrapperEl = swiper.wrapperEl,
rtlTranslate = swiper.rtlTranslate,
enabled = swiper.enabled;
if ( ! enabled ) return;
swiper.previousTranslate = swiper.translate;
if ( swiper.isHorizontal() ) {
if ( rtlTranslate ) {
swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;
} else {
swiper.translate = -wrapperEl.scrollLeft;
}
} else {
swiper.translate = -wrapperEl.scrollTop;
} // eslint-disable-next-line
if ( swiper.translate === -0 ) swiper.translate = 0;
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
var newProgress;
var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
if ( translatesDiff === 0 ) {
newProgress = 0;
} else {
newProgress = ( swiper.translate - swiper.minTranslate() ) / translatesDiff;
}
if ( newProgress !== swiper.progress ) {
swiper.updateProgress( rtlTranslate ? -swiper.translate : swiper.translate );
}
swiper.emit( 'setTranslate', swiper.translate, false );
}
var dummyEventAttached = false;
function dummyEventListener() {}
function attachEvents() {
var swiper = this;
var document = getDocument();
var params = swiper.params,
touchEvents = swiper.touchEvents,
el = swiper.el,
wrapperEl = swiper.wrapperEl,
device = swiper.device,
support = swiper.support;
swiper.onTouchStart = onTouchStart.bind( swiper );
swiper.onTouchMove = onTouchMove.bind( swiper );
swiper.onTouchEnd = onTouchEnd.bind( swiper );
if ( params.cssMode ) {
swiper.onScroll = onScroll.bind( swiper );
}
swiper.onClick = onClick.bind( swiper );
var capture = !! params.nested; // Touch Events
if ( ! support.touch && support.pointerEvents ) {
el.addEventListener( touchEvents.start, swiper.onTouchStart, false );
document.addEventListener( touchEvents.move, swiper.onTouchMove, capture );
document.addEventListener( touchEvents.end, swiper.onTouchEnd, false );
} else {
if ( support.touch ) {
var passiveListener =
touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners
? {
passive: true,
capture: false,
}
: false;
el.addEventListener( touchEvents.start, swiper.onTouchStart, passiveListener );
el.addEventListener(
touchEvents.move,
swiper.onTouchMove,
support.passiveListener
? {
passive: false,
capture: capture,
}
: capture
);
el.addEventListener( touchEvents.end, swiper.onTouchEnd, passiveListener );
if ( touchEvents.cancel ) {
el.addEventListener( touchEvents.cancel, swiper.onTouchEnd, passiveListener );
}
if ( ! dummyEventAttached ) {
document.addEventListener( 'touchstart', dummyEventListener );
dummyEventAttached = true;
}
}
if (
( params.simulateTouch && ! device.ios && ! device.android ) ||
( params.simulateTouch && ! support.touch && device.ios )
) {
el.addEventListener( 'mousedown', swiper.onTouchStart, false );
document.addEventListener( 'mousemove', swiper.onTouchMove, capture );
document.addEventListener( 'mouseup', swiper.onTouchEnd, false );
}
} // Prevent Links Clicks
if ( params.preventClicks || params.preventClicksPropagation ) {
el.addEventListener( 'click', swiper.onClick, true );
}
if ( params.cssMode ) {
wrapperEl.addEventListener( 'scroll', swiper.onScroll );
} // Resize handler
if ( params.updateOnWindowResize ) {
swiper.on(
device.ios || device.android
? 'resize orientationchange observerUpdate'
: 'resize observerUpdate',
onResize,
true
);
} else {
swiper.on( 'observerUpdate', onResize, true );
}
}
function detachEvents() {
var swiper = this;
var document = getDocument();
var params = swiper.params,
touchEvents = swiper.touchEvents,
el = swiper.el,
wrapperEl = swiper.wrapperEl,
device = swiper.device,
support = swiper.support;
var capture = !! params.nested; // Touch Events
if ( ! support.touch && support.pointerEvents ) {
el.removeEventListener( touchEvents.start, swiper.onTouchStart, false );
document.removeEventListener( touchEvents.move, swiper.onTouchMove, capture );
document.removeEventListener( touchEvents.end, swiper.onTouchEnd, false );
} else {
if ( support.touch ) {
var passiveListener =
touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners
? {
passive: true,
capture: false,
}
: false;
el.removeEventListener( touchEvents.start, swiper.onTouchStart, passiveListener );
el.removeEventListener( touchEvents.move, swiper.onTouchMove, capture );
el.removeEventListener( touchEvents.end, swiper.onTouchEnd, passiveListener );
if ( touchEvents.cancel ) {
el.removeEventListener( touchEvents.cancel, swiper.onTouchEnd, passiveListener );
}
}
if (
( params.simulateTouch && ! device.ios && ! device.android ) ||
( params.simulateTouch && ! support.touch && device.ios )
) {
el.removeEventListener( 'mousedown', swiper.onTouchStart, false );
document.removeEventListener( 'mousemove', swiper.onTouchMove, capture );
document.removeEventListener( 'mouseup', swiper.onTouchEnd, false );
}
} // Prevent Links Clicks
if ( params.preventClicks || params.preventClicksPropagation ) {
el.removeEventListener( 'click', swiper.onClick, true );
}
if ( params.cssMode ) {
wrapperEl.removeEventListener( 'scroll', swiper.onScroll );
} // Resize handler
swiper.off(
device.ios || device.android
? 'resize orientationchange observerUpdate'
: 'resize observerUpdate',
onResize
);
}
var events = {
attachEvents: attachEvents,
detachEvents: detachEvents,
};
function setBreakpoint() {
var swiper = this;
var activeIndex = swiper.activeIndex,
initialized = swiper.initialized,
_swiper$loopedSlides = swiper.loopedSlides,
loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,
params = swiper.params,
$el = swiper.$el;
var breakpoints = params.breakpoints;
if ( ! breakpoints || ( breakpoints && Object.keys( breakpoints ).length === 0 ) ) return; // Get breakpoint for window width and update parameters
var breakpoint = swiper.getBreakpoint( breakpoints, swiper.params.breakpointsBase, swiper.el );
if ( ! breakpoint || swiper.currentBreakpoint === breakpoint ) return;
var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[ breakpoint ] : undefined;
if ( breakpointOnlyParams ) {
[
'slidesPerView',
'spaceBetween',
'slidesPerGroup',
'slidesPerGroupSkip',
'slidesPerColumn',
].forEach( function ( param ) {
var paramValue = breakpointOnlyParams[ param ];
if ( typeof paramValue === 'undefined' ) return;
if ( param === 'slidesPerView' && ( paramValue === 'AUTO' || paramValue === 'auto' ) ) {
breakpointOnlyParams[ param ] = 'auto';
} else if ( param === 'slidesPerView' ) {
breakpointOnlyParams[ param ] = parseFloat( paramValue );
} else {
breakpointOnlyParams[ param ] = parseInt( paramValue, 10 );
}
} );
}
var breakpointParams = breakpointOnlyParams || swiper.originalParams;
var wasMultiRow = params.slidesPerColumn > 1;
var isMultiRow = breakpointParams.slidesPerColumn > 1;
var wasEnabled = params.enabled;
if ( wasMultiRow && ! isMultiRow ) {
$el.removeClass(
params.containerModifierClass +
'multirow ' +
params.containerModifierClass +
'multirow-column'
);
swiper.emitContainerClasses();
} else if ( ! wasMultiRow && isMultiRow ) {
$el.addClass( params.containerModifierClass + 'multirow' );
if ( breakpointParams.slidesPerColumnFill === 'column' ) {
$el.addClass( params.containerModifierClass + 'multirow-column' );
}
swiper.emitContainerClasses();
}
var directionChanged =
breakpointParams.direction && breakpointParams.direction !== params.direction;
var needsReLoop =
params.loop &&
( breakpointParams.slidesPerView !== params.slidesPerView || directionChanged );
if ( directionChanged && initialized ) {
swiper.changeDirection();
}
extend( swiper.params, breakpointParams );
var isEnabled = swiper.params.enabled;
extend( swiper, {
allowTouchMove: swiper.params.allowTouchMove,
allowSlideNext: swiper.params.allowSlideNext,
allowSlidePrev: swiper.params.allowSlidePrev,
} );
if ( wasEnabled && ! isEnabled ) {
swiper.disable();
} else if ( ! wasEnabled && isEnabled ) {
swiper.enable();
}
swiper.currentBreakpoint = breakpoint;
swiper.emit( '_beforeBreakpoint', breakpointParams );
if ( needsReLoop && initialized ) {
swiper.loopDestroy();
swiper.loopCreate();
swiper.updateSlides();
swiper.slideTo( activeIndex - loopedSlides + swiper.loopedSlides, 0, false );
}
swiper.emit( 'breakpoint', breakpointParams );
}
function getBreakpoint( breakpoints, base, containerEl ) {
if ( base === void 0 ) {
base = 'window';
}
if ( ! breakpoints || ( base === 'container' && ! containerEl ) ) return undefined;
var breakpoint = false;
var window = getWindow();
var currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
var points = Object.keys( breakpoints ).map( function ( point ) {
if ( typeof point === 'string' && point.indexOf( '@' ) === 0 ) {
var minRatio = parseFloat( point.substr( 1 ) );
var value = currentHeight * minRatio;
return {
value: value,
point: point,
};
}
return {
value: point,
point: point,
};
} );
points.sort( function ( a, b ) {
return parseInt( a.value, 10 ) - parseInt( b.value, 10 );
} );
for ( var i = 0; i < points.length; i += 1 ) {
var _points$i = points[ i ],
point = _points$i.point,
value = _points$i.value;
if ( base === 'window' ) {
if ( window.matchMedia( '(min-width: ' + value + 'px)' ).matches ) {
breakpoint = point;
}
} else if ( value <= containerEl.clientWidth ) {
breakpoint = point;
}
}
return breakpoint || 'max';
}
var breakpoints = {
setBreakpoint: setBreakpoint,
getBreakpoint: getBreakpoint,
};
function prepareClasses( entries, prefix ) {
var resultClasses = [];
entries.forEach( function ( item ) {
if ( typeof item === 'object' ) {
Object.keys( item ).forEach( function ( classNames ) {
if ( item[ classNames ] ) {
resultClasses.push( prefix + classNames );
}
} );
} else if ( typeof item === 'string' ) {
resultClasses.push( prefix + item );
}
} );
return resultClasses;
}
function addClasses() {
var swiper = this;
var classNames = swiper.classNames,
params = swiper.params,
rtl = swiper.rtl,
$el = swiper.$el,
device = swiper.device,
support = swiper.support; // prettier-ignore
var suffixes = prepareClasses(
[
'initialized',
params.direction,
{
'pointer-events': support.pointerEvents && ! support.touch,
},
{
'free-mode': params.freeMode,
},
{
autoheight: params.autoHeight,
},
{
rtl: rtl,
},
{
multirow: params.slidesPerColumn > 1,
},
{
'multirow-column': params.slidesPerColumn > 1 && params.slidesPerColumnFill === 'column',
},
{
android: device.android,
},
{
ios: device.ios,
},
{
'css-mode': params.cssMode,
},
],
params.containerModifierClass
);
classNames.push.apply( classNames, suffixes );
$el.addClass( [].concat( classNames ).join( ' ' ) );
swiper.emitContainerClasses();
}
function removeClasses() {
var swiper = this;
var $el = swiper.$el,
classNames = swiper.classNames;
$el.removeClass( classNames.join( ' ' ) );
swiper.emitContainerClasses();
}
var classes = {
addClasses: addClasses,
removeClasses: removeClasses,
};
function loadImage( imageEl, src, srcset, sizes, checkForComplete, callback ) {
var window = getWindow();
var image;
function onReady() {
if ( callback ) callback();
}
var isPicture = $( imageEl ).parent( 'picture' )[ 0 ];
if ( ! isPicture && ( ! imageEl.complete || ! checkForComplete ) ) {
if ( src ) {
image = new window.Image();
image.onload = onReady;
image.onerror = onReady;
if ( sizes ) {
image.sizes = sizes;
}
if ( srcset ) {
image.srcset = srcset;
}
if ( src ) {
image.src = src;
}
} else {
onReady();
}
} else {
// image already loaded...
onReady();
}
}
function preloadImages() {
var swiper = this;
swiper.imagesToLoad = swiper.$el.find( 'img' );
function onReady() {
if ( typeof swiper === 'undefined' || swiper === null || ! swiper || swiper.destroyed )
return;
if ( swiper.imagesLoaded !== undefined ) swiper.imagesLoaded += 1;
if ( swiper.imagesLoaded === swiper.imagesToLoad.length ) {
if ( swiper.params.updateOnImagesReady ) swiper.update();
swiper.emit( 'imagesReady' );
}
}
for ( var i = 0; i < swiper.imagesToLoad.length; i += 1 ) {
var imageEl = swiper.imagesToLoad[ i ];
swiper.loadImage(
imageEl,
imageEl.currentSrc || imageEl.getAttribute( 'src' ),
imageEl.srcset || imageEl.getAttribute( 'srcset' ),
imageEl.sizes || imageEl.getAttribute( 'sizes' ),
true,
onReady
);
}
}
var images = {
loadImage: loadImage,
preloadImages: preloadImages,
};
function checkOverflow() {
var swiper = this;
var params = swiper.params;
var wasLocked = swiper.isLocked;
var lastSlidePosition =
swiper.slides.length > 0 &&
params.slidesOffsetBefore +
params.spaceBetween * ( swiper.slides.length - 1 ) +
swiper.slides[ 0 ].offsetWidth * swiper.slides.length;
if ( params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition ) {
swiper.isLocked = lastSlidePosition <= swiper.size;
} else {
swiper.isLocked = swiper.snapGrid.length === 1;
}
swiper.allowSlideNext = ! swiper.isLocked;
swiper.allowSlidePrev = ! swiper.isLocked; // events
if ( wasLocked !== swiper.isLocked ) swiper.emit( swiper.isLocked ? 'lock' : 'unlock' );
if ( wasLocked && wasLocked !== swiper.isLocked ) {
swiper.isEnd = false;
if ( swiper.navigation ) swiper.navigation.update();
}
}
var checkOverflow$1 = {
checkOverflow: checkOverflow,
};
var defaults = {
init: true,
direction: 'horizontal',
touchEventsTarget: 'container',
initialSlide: 0,
speed: 300,
cssMode: false,
updateOnWindowResize: true,
resizeObserver: false,
nested: false,
createElements: false,
enabled: true,
focusableElements: 'input, select, option, textarea, button, video, label',
// Overrides
width: null,
height: null,
//
preventInteractionOnTransition: false,
// ssr
userAgent: null,
url: null,
// To support iOS's swipe-to-go-back gesture (when being used in-app).
edgeSwipeDetection: false,
edgeSwipeThreshold: 20,
// Free mode
freeMode: false,
freeModeMomentum: true,
freeModeMomentumRatio: 1,
freeModeMomentumBounce: true,
freeModeMomentumBounceRatio: 1,
freeModeMomentumVelocityRatio: 1,
freeModeSticky: false,
freeModeMinimumVelocity: 0.02,
// Autoheight
autoHeight: false,
// Set wrapper width
setWrapperSize: false,
// Virtual Translate
virtualTranslate: false,
// Effects
effect: 'slide',
// 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
// Breakpoints
breakpoints: undefined,
breakpointsBase: 'window',
// Slides grid
spaceBetween: 0,
slidesPerView: 1,
slidesPerColumn: 1,
slidesPerColumnFill: 'column',
slidesPerGroup: 1,
slidesPerGroupSkip: 0,
centeredSlides: false,
centeredSlidesBounds: false,
slidesOffsetBefore: 0,
// in px
slidesOffsetAfter: 0,
// in px
normalizeSlideIndex: true,
centerInsufficientSlides: false,
// Disable swiper and hide navigation when container not overflow
watchOverflow: false,
// Round length
roundLengths: false,
// Touches
touchRatio: 1,
touchAngle: 45,
simulateTouch: true,
shortSwipes: true,
longSwipes: true,
longSwipesRatio: 0.5,
longSwipesMs: 300,
followFinger: true,
allowTouchMove: true,
threshold: 0,
touchMoveStopPropagation: false,
touchStartPreventDefault: true,
touchStartForcePreventDefault: false,
touchReleaseOnEdges: false,
// Unique Navigation Elements
uniqueNavElements: true,
// Resistance
resistance: true,
resistanceRatio: 0.85,
// Progress
watchSlidesProgress: false,
watchSlidesVisibility: false,
// Cursor
grabCursor: false,
// Clicks
preventClicks: true,
preventClicksPropagation: true,
slideToClickedSlide: false,
// Images
preloadImages: true,
updateOnImagesReady: true,
// loop
loop: false,
loopAdditionalSlides: 0,
loopedSlides: null,
loopFillGroupWithBlank: false,
loopPreventsSlide: true,
// Swiping/no swiping
allowSlidePrev: true,
allowSlideNext: true,
swipeHandler: null,
// '.swipe-handler',
noSwiping: true,
noSwipingClass: 'swiper-no-swiping',
noSwipingSelector: null,
// Passive Listeners
passiveListeners: true,
// NS
containerModifierClass: 'swiper-container-',
// NEW
slideClass: 'swiper-slide',
slideBlankClass: 'swiper-slide-invisible-blank',
slideActiveClass: 'swiper-slide-active',
slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
slideVisibleClass: 'swiper-slide-visible',
slideDuplicateClass: 'swiper-slide-duplicate',
slideNextClass: 'swiper-slide-next',
slideDuplicateNextClass: 'swiper-slide-duplicate-next',
slidePrevClass: 'swiper-slide-prev',
slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
wrapperClass: 'swiper-wrapper',
// Callbacks
runCallbacksOnInit: true,
// Internals
_emitClasses: false,
};
var prototypes = {
modular: modular,
eventsEmitter: eventsEmitter,
update: update,
translate: translate,
transition: transition,
slide: slide,
loop: loop,
grabCursor: grabCursor,
manipulation: manipulation,
events: events,
breakpoints: breakpoints,
checkOverflow: checkOverflow$1,
classes: classes,
images: images,
};
var extendedDefaults = {};
var Swiper = /*#__PURE__*/ ( function () {
function Swiper() {
var el;
var params;
for ( var _len = arguments.length, args = new Array( _len ), _key = 0; _key < _len; _key++ ) {
args[ _key ] = arguments[ _key ];
}
if (
args.length === 1 &&
args[ 0 ].constructor &&
Object.prototype.toString.call( args[ 0 ] ).slice( 8, -1 ) === 'Object'
) {
params = args[ 0 ];
} else {
el = args[ 0 ];
params = args[ 1 ];
}
if ( ! params ) params = {};
params = extend( {}, params );
if ( el && ! params.el ) params.el = el;
if ( params.el && $( params.el ).length > 1 ) {
var swipers = [];
$( params.el ).each( function ( containerEl ) {
var newParams = extend( {}, params, {
el: containerEl,
} );
swipers.push( new Swiper( newParams ) );
} );
return swipers;
} // Swiper Instance
var swiper = this;
swiper.__swiper__ = true;
swiper.support = getSupport();
swiper.device = getDevice( {
userAgent: params.userAgent,
} );
swiper.browser = getBrowser();
swiper.eventsListeners = {};
swiper.eventsAnyListeners = [];
if ( typeof swiper.modules === 'undefined' ) {
swiper.modules = {};
}
Object.keys( swiper.modules ).forEach( function ( moduleName ) {
var module = swiper.modules[ moduleName ];
if ( module.params ) {
var moduleParamName = Object.keys( module.params )[ 0 ];
var moduleParams = module.params[ moduleParamName ];
if ( typeof moduleParams !== 'object' || moduleParams === null ) return;
if (
[ 'navigation', 'pagination', 'scrollbar' ].indexOf( moduleParamName ) >= 0 &&
params[ moduleParamName ] === true
) {
params[ moduleParamName ] = {
auto: true,
};
}
if ( ! ( moduleParamName in params && 'enabled' in moduleParams ) ) return;
if ( params[ moduleParamName ] === true ) {
params[ moduleParamName ] = {
enabled: true,
};
}
if (
typeof params[ moduleParamName ] === 'object' &&
! ( 'enabled' in params[ moduleParamName ] )
) {
params[ moduleParamName ].enabled = true;
}
if ( ! params[ moduleParamName ] )
params[ moduleParamName ] = {
enabled: false,
};
}
} ); // Extend defaults with modules params
var swiperParams = extend( {}, defaults );
swiper.useParams( swiperParams ); // Extend defaults with passed params
swiper.params = extend( {}, swiperParams, extendedDefaults, params );
swiper.originalParams = extend( {}, swiper.params );
swiper.passedParams = extend( {}, params ); // add event listeners
if ( swiper.params && swiper.params.on ) {
Object.keys( swiper.params.on ).forEach( function ( eventName ) {
swiper.on( eventName, swiper.params.on[ eventName ] );
} );
}
if ( swiper.params && swiper.params.onAny ) {
swiper.onAny( swiper.params.onAny );
} // Save Dom lib
swiper.$ = $; // Extend Swiper
extend( swiper, {
enabled: swiper.params.enabled,
el: el,
// Classes
classNames: [],
// Slides
slides: $(),
slidesGrid: [],
snapGrid: [],
slidesSizesGrid: [],
// isDirection
isHorizontal: function isHorizontal() {
return swiper.params.direction === 'horizontal';
},
isVertical: function isVertical() {
return swiper.params.direction === 'vertical';
},
// Indexes
activeIndex: 0,
realIndex: 0,
//
isBeginning: true,
isEnd: false,
// Props
translate: 0,
previousTranslate: 0,
progress: 0,
velocity: 0,
animating: false,
// Locks
allowSlideNext: swiper.params.allowSlideNext,
allowSlidePrev: swiper.params.allowSlidePrev,
// Touch Events
touchEvents: ( function touchEvents() {
var touch = [ 'touchstart', 'touchmove', 'touchend', 'touchcancel' ];
var desktop = [ 'mousedown', 'mousemove', 'mouseup' ];
if ( swiper.support.pointerEvents ) {
desktop = [ 'pointerdown', 'pointermove', 'pointerup' ];
}
swiper.touchEventsTouch = {
start: touch[ 0 ],
move: touch[ 1 ],
end: touch[ 2 ],
cancel: touch[ 3 ],
};
swiper.touchEventsDesktop = {
start: desktop[ 0 ],
move: desktop[ 1 ],
end: desktop[ 2 ],
};
return swiper.support.touch || ! swiper.params.simulateTouch
? swiper.touchEventsTouch
: swiper.touchEventsDesktop;
} )(),
touchEventsData: {
isTouched: undefined,
isMoved: undefined,
allowTouchCallbacks: undefined,
touchStartTime: undefined,
isScrolling: undefined,
currentTranslate: undefined,
startTranslate: undefined,
allowThresholdMove: undefined,
// Form elements to match
focusableElements: swiper.params.focusableElements,
// Last click time
lastClickTime: now(),
clickTimeout: undefined,
// Velocities
velocities: [],
allowMomentumBounce: undefined,
isTouchEvent: undefined,
startMoving: undefined,
},
// Clicks
allowClick: true,
// Touches
allowTouchMove: swiper.params.allowTouchMove,
touches: {
startX: 0,
startY: 0,
currentX: 0,
currentY: 0,
diff: 0,
},
// Images
imagesToLoad: [],
imagesLoaded: 0,
} ); // Install Modules
swiper.useModules();
swiper.emit( '_swiper' ); // Init
if ( swiper.params.init ) {
swiper.init();
} // Return app instance
return swiper;
}
var _proto = Swiper.prototype;
_proto.enable = function enable() {
var swiper = this;
if ( swiper.enabled ) return;
swiper.enabled = true;
if ( swiper.params.grabCursor ) {
swiper.setGrabCursor();
}
swiper.emit( 'enable' );
};
_proto.disable = function disable() {
var swiper = this;
if ( ! swiper.enabled ) return;
swiper.enabled = false;
if ( swiper.params.grabCursor ) {
swiper.unsetGrabCursor();
}
swiper.emit( 'disable' );
};
_proto.setProgress = function setProgress( progress, speed ) {
var swiper = this;
progress = Math.min( Math.max( progress, 0 ), 1 );
var min = swiper.minTranslate();
var max = swiper.maxTranslate();
var current = ( max - min ) * progress + min;
swiper.translateTo( current, typeof speed === 'undefined' ? 0 : speed );
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
};
_proto.emitContainerClasses = function emitContainerClasses() {
var swiper = this;
if ( ! swiper.params._emitClasses || ! swiper.el ) return;
var classes = swiper.el.className.split( ' ' ).filter( function ( className ) {
return (
className.indexOf( 'swiper-container' ) === 0 ||
className.indexOf( swiper.params.containerModifierClass ) === 0
);
} );
swiper.emit( '_containerClasses', classes.join( ' ' ) );
};
_proto.getSlideClasses = function getSlideClasses( slideEl ) {
var swiper = this;
return slideEl.className
.split( ' ' )
.filter( function ( className ) {
return (
className.indexOf( 'swiper-slide' ) === 0 ||
className.indexOf( swiper.params.slideClass ) === 0
);
} )
.join( ' ' );
};
_proto.emitSlidesClasses = function emitSlidesClasses() {
var swiper = this;
if ( ! swiper.params._emitClasses || ! swiper.el ) return;
var updates = [];
swiper.slides.each( function ( slideEl ) {
var classNames = swiper.getSlideClasses( slideEl );
updates.push( {
slideEl: slideEl,
classNames: classNames,
} );
swiper.emit( '_slideClass', slideEl, classNames );
} );
swiper.emit( '_slideClasses', updates );
};
_proto.slidesPerViewDynamic = function slidesPerViewDynamic() {
var swiper = this;
var params = swiper.params,
slides = swiper.slides,
slidesGrid = swiper.slidesGrid,
swiperSize = swiper.size,
activeIndex = swiper.activeIndex;
var spv = 1;
if ( params.centeredSlides ) {
var slideSize = slides[ activeIndex ].swiperSlideSize;
var breakLoop;
for ( var i = activeIndex + 1; i < slides.length; i += 1 ) {
if ( slides[ i ] && ! breakLoop ) {
slideSize += slides[ i ].swiperSlideSize;
spv += 1;
if ( slideSize > swiperSize ) breakLoop = true;
}
}
for ( var _i = activeIndex - 1; _i >= 0; _i -= 1 ) {
if ( slides[ _i ] && ! breakLoop ) {
slideSize += slides[ _i ].swiperSlideSize;
spv += 1;
if ( slideSize > swiperSize ) breakLoop = true;
}
}
} else {
for ( var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1 ) {
if ( slidesGrid[ _i2 ] - slidesGrid[ activeIndex ] < swiperSize ) {
spv += 1;
}
}
}
return spv;
};
_proto.update = function update() {
var swiper = this;
if ( ! swiper || swiper.destroyed ) return;
var snapGrid = swiper.snapGrid,
params = swiper.params; // Breakpoints
if ( params.breakpoints ) {
swiper.setBreakpoint();
}
swiper.updateSize();
swiper.updateSlides();
swiper.updateProgress();
swiper.updateSlidesClasses();
function setTranslate() {
var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
var newTranslate = Math.min(
Math.max( translateValue, swiper.maxTranslate() ),
swiper.minTranslate()
);
swiper.setTranslate( newTranslate );
swiper.updateActiveIndex();
swiper.updateSlidesClasses();
}
var translated;
if ( swiper.params.freeMode ) {
setTranslate();
if ( swiper.params.autoHeight ) {
swiper.updateAutoHeight();
}
} else {
if (
( swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1 ) &&
swiper.isEnd &&
! swiper.params.centeredSlides
) {
translated = swiper.slideTo( swiper.slides.length - 1, 0, false, true );
} else {
translated = swiper.slideTo( swiper.activeIndex, 0, false, true );
}
if ( ! translated ) {
setTranslate();
}
}
if ( params.watchOverflow && snapGrid !== swiper.snapGrid ) {
swiper.checkOverflow();
}
swiper.emit( 'update' );
};
_proto.changeDirection = function changeDirection( newDirection, needUpdate ) {
if ( needUpdate === void 0 ) {
needUpdate = true;
}
var swiper = this;
var currentDirection = swiper.params.direction;
if ( ! newDirection ) {
// eslint-disable-next-line
newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
}
if (
newDirection === currentDirection ||
( newDirection !== 'horizontal' && newDirection !== 'vertical' )
) {
return swiper;
}
swiper.$el
.removeClass( '' + swiper.params.containerModifierClass + currentDirection )
.addClass( '' + swiper.params.containerModifierClass + newDirection );
swiper.emitContainerClasses();
swiper.params.direction = newDirection;
swiper.slides.each( function ( slideEl ) {
if ( newDirection === 'vertical' ) {
slideEl.style.width = '';
} else {
slideEl.style.height = '';
}
} );
swiper.emit( 'changeDirection' );
if ( needUpdate ) swiper.update();
return swiper;
};
_proto.mount = function mount( el ) {
var swiper = this;
if ( swiper.mounted ) return true; // Find el
var $el = $( el || swiper.params.el );
el = $el[ 0 ];
if ( ! el ) {
return false;
}
el.swiper = swiper;
var getWrapperSelector = function getWrapperSelector() {
return '.' + ( swiper.params.wrapperClass || '' ).trim().split( ' ' ).join( '.' );
};
var getWrapper = function getWrapper() {
if ( el && el.shadowRoot && el.shadowRoot.querySelector ) {
var res = $( el.shadowRoot.querySelector( getWrapperSelector() ) ); // Children needs to return slot items
res.children = function ( options ) {
return $el.children( options );
};
return res;
}
return $el.children( getWrapperSelector() );
}; // Find Wrapper
var $wrapperEl = getWrapper();
if ( $wrapperEl.length === 0 && swiper.params.createElements ) {
var document = getDocument();
var wrapper = document.createElement( 'div' );
$wrapperEl = $( wrapper );
wrapper.className = swiper.params.wrapperClass;
$el.append( wrapper );
$el.children( '.' + swiper.params.slideClass ).each( function ( slideEl ) {
$wrapperEl.append( slideEl );
} );
}
extend( swiper, {
$el: $el,
el: el,
$wrapperEl: $wrapperEl,
wrapperEl: $wrapperEl[ 0 ],
mounted: true,
// RTL
rtl: el.dir.toLowerCase() === 'rtl' || $el.css( 'direction' ) === 'rtl',
rtlTranslate:
swiper.params.direction === 'horizontal' &&
( el.dir.toLowerCase() === 'rtl' || $el.css( 'direction' ) === 'rtl' ),
wrongRTL: $wrapperEl.css( 'display' ) === '-webkit-box',
} );
return true;
};
_proto.init = function init( el ) {
var swiper = this;
if ( swiper.initialized ) return swiper;
var mounted = swiper.mount( el );
if ( mounted === false ) return swiper;
swiper.emit( 'beforeInit' ); // Set breakpoint
if ( swiper.params.breakpoints ) {
swiper.setBreakpoint();
} // Add Classes
swiper.addClasses(); // Create loop
if ( swiper.params.loop ) {
swiper.loopCreate();
} // Update size
swiper.updateSize(); // Update slides
swiper.updateSlides();
if ( swiper.params.watchOverflow ) {
swiper.checkOverflow();
} // Set Grab Cursor
if ( swiper.params.grabCursor && swiper.enabled ) {
swiper.setGrabCursor();
}
if ( swiper.params.preloadImages ) {
swiper.preloadImages();
} // Slide To Initial Slide
if ( swiper.params.loop ) {
swiper.slideTo(
swiper.params.initialSlide + swiper.loopedSlides,
0,
swiper.params.runCallbacksOnInit,
false,
true
);
} else {
swiper.slideTo(
swiper.params.initialSlide,
0,
swiper.params.runCallbacksOnInit,
false,
true
);
} // Attach events
swiper.attachEvents(); // Init Flag
swiper.initialized = true; // Emit
swiper.emit( 'init' );
swiper.emit( 'afterInit' );
return swiper;
};
_proto.destroy = function destroy( deleteInstance, cleanStyles ) {
if ( deleteInstance === void 0 ) {
deleteInstance = true;
}
if ( cleanStyles === void 0 ) {
cleanStyles = true;
}
var swiper = this;
var params = swiper.params,
$el = swiper.$el,
$wrapperEl = swiper.$wrapperEl,
slides = swiper.slides;
if ( typeof swiper.params === 'undefined' || swiper.destroyed ) {
return null;
}
swiper.emit( 'beforeDestroy' ); // Init Flag
swiper.initialized = false; // Detach events
swiper.detachEvents(); // Destroy loop
if ( params.loop ) {
swiper.loopDestroy();
} // Cleanup styles
if ( cleanStyles ) {
swiper.removeClasses();
$el.removeAttr( 'style' );
$wrapperEl.removeAttr( 'style' );
if ( slides && slides.length ) {
slides
.removeClass(
[
params.slideVisibleClass,
params.slideActiveClass,
params.slideNextClass,
params.slidePrevClass,
].join( ' ' )
)
.removeAttr( 'style' )
.removeAttr( 'data-swiper-slide-index' );
}
}
swiper.emit( 'destroy' ); // Detach emitter events
Object.keys( swiper.eventsListeners ).forEach( function ( eventName ) {
swiper.off( eventName );
} );
if ( deleteInstance !== false ) {
swiper.$el[ 0 ].swiper = null;
deleteProps( swiper );
}
swiper.destroyed = true;
return null;
};
Swiper.extendDefaults = function extendDefaults( newDefaults ) {
extend( extendedDefaults, newDefaults );
};
Swiper.installModule = function installModule( module ) {
if ( ! Swiper.prototype.modules ) Swiper.prototype.modules = {};
var name = module.name || Object.keys( Swiper.prototype.modules ).length + '_' + now();
Swiper.prototype.modules[ name ] = module;
};
Swiper.use = function use( module ) {
if ( Array.isArray( module ) ) {
module.forEach( function ( m ) {
return Swiper.installModule( m );
} );
return Swiper;
}
Swiper.installModule( module );
return Swiper;
};
_createClass( Swiper, null, [
{
key: 'extendedDefaults',
get: function get() {
return extendedDefaults;
},
},
{
key: 'defaults',
get: function get() {
return defaults;
},
},
] );
return Swiper;
} )();
Object.keys( prototypes ).forEach( function ( prototypeGroup ) {
Object.keys( prototypes[ prototypeGroup ] ).forEach( function ( protoMethod ) {
Swiper.prototype[ protoMethod ] = prototypes[ prototypeGroup ][ protoMethod ];
} );
} );
Swiper.use( [ Resize, Observer$1 ] );
var Navigation = {
toggleEl: function toggleEl( $el, disabled ) {
$el[ disabled ? 'addClass' : 'removeClass' ]( this.params.navigation.disabledClass );
if ( $el[ 0 ] && $el[ 0 ].tagName === 'BUTTON' ) $el[ 0 ].disabled = disabled;
},
update: function update() {
// Update Navigation Buttons
var swiper = this;
var params = swiper.params.navigation;
var toggleEl = swiper.navigation.toggleEl;
if ( swiper.params.loop ) return;
var _swiper$navigation = swiper.navigation,
$nextEl = _swiper$navigation.$nextEl,
$prevEl = _swiper$navigation.$prevEl;
if ( $prevEl && $prevEl.length > 0 ) {
if ( swiper.isBeginning ) {
toggleEl( $prevEl, true );
} else {
toggleEl( $prevEl, false );
}
if ( swiper.params.watchOverflow && swiper.enabled ) {
$prevEl[ swiper.isLocked ? 'addClass' : 'removeClass' ]( params.lockClass );
}
}
if ( $nextEl && $nextEl.length > 0 ) {
if ( swiper.isEnd ) {
toggleEl( $nextEl, true );
} else {
toggleEl( $nextEl, false );
}
if ( swiper.params.watchOverflow && swiper.enabled ) {
$nextEl[ swiper.isLocked ? 'addClass' : 'removeClass' ]( params.lockClass );
}
}
},
onPrevClick: function onPrevClick( e ) {
var swiper = this;
e.preventDefault();
if ( swiper.isBeginning && ! swiper.params.loop ) return;
swiper.slidePrev();
},
onNextClick: function onNextClick( e ) {
var swiper = this;
e.preventDefault();
if ( swiper.isEnd && ! swiper.params.loop ) return;
swiper.slideNext();
},
init: function init() {
var swiper = this;
var params = swiper.params.navigation;
swiper.params.navigation = createElementIfNotDefined(
swiper.$el,
swiper.params.navigation,
swiper.params.createElements,
{
nextEl: 'swiper-button-next',
prevEl: 'swiper-button-prev',
}
);
if ( ! ( params.nextEl || params.prevEl ) ) return;
var $nextEl;
var $prevEl;
if ( params.nextEl ) {
$nextEl = $( params.nextEl );
if (
swiper.params.uniqueNavElements &&
typeof params.nextEl === 'string' &&
$nextEl.length > 1 &&
swiper.$el.find( params.nextEl ).length === 1
) {
$nextEl = swiper.$el.find( params.nextEl );
}
}
if ( params.prevEl ) {
$prevEl = $( params.prevEl );
if (
swiper.params.uniqueNavElements &&
typeof params.prevEl === 'string' &&
$prevEl.length > 1 &&
swiper.$el.find( params.prevEl ).length === 1
) {
$prevEl = swiper.$el.find( params.prevEl );
}
}
if ( $nextEl && $nextEl.length > 0 ) {
$nextEl.on( 'click', swiper.navigation.onNextClick );
}
if ( $prevEl && $prevEl.length > 0 ) {
$prevEl.on( 'click', swiper.navigation.onPrevClick );
}
extend( swiper.navigation, {
$nextEl: $nextEl,
nextEl: $nextEl && $nextEl[ 0 ],
$prevEl: $prevEl,
prevEl: $prevEl && $prevEl[ 0 ],
} );
if ( ! swiper.enabled ) {
if ( $nextEl ) $nextEl.addClass( params.lockClass );
if ( $prevEl ) $prevEl.addClass( params.lockClass );
}
},
destroy: function destroy() {
var swiper = this;
var _swiper$navigation2 = swiper.navigation,
$nextEl = _swiper$navigation2.$nextEl,
$prevEl = _swiper$navigation2.$prevEl;
if ( $nextEl && $nextEl.length ) {
$nextEl.off( 'click', swiper.navigation.onNextClick );
$nextEl.removeClass( swiper.params.navigation.disabledClass );
}
if ( $prevEl && $prevEl.length ) {
$prevEl.off( 'click', swiper.navigation.onPrevClick );
$prevEl.removeClass( swiper.params.navigation.disabledClass );
}
},
};
var Navigation$1 = {
name: 'navigation',
params: {
navigation: {
nextEl: null,
prevEl: null,
hideOnClick: false,
disabledClass: 'swiper-button-disabled',
hiddenClass: 'swiper-button-hidden',
lockClass: 'swiper-button-lock',
},
},
create: function create() {
var swiper = this;
bindModuleMethods( swiper, {
navigation: _extends( {}, Navigation ),
} );
},
on: {
init: function init( swiper ) {
swiper.navigation.init();
swiper.navigation.update();
},
toEdge: function toEdge( swiper ) {
swiper.navigation.update();
},
fromEdge: function fromEdge( swiper ) {
swiper.navigation.update();
},
destroy: function destroy( swiper ) {
swiper.navigation.destroy();
},
'enable disable': function enableDisable( swiper ) {
var _swiper$navigation3 = swiper.navigation,
$nextEl = _swiper$navigation3.$nextEl,
$prevEl = _swiper$navigation3.$prevEl;
if ( $nextEl ) {
$nextEl[ swiper.enabled ? 'removeClass' : 'addClass' ](
swiper.params.navigation.lockClass
);
}
if ( $prevEl ) {
$prevEl[ swiper.enabled ? 'removeClass' : 'addClass' ](
swiper.params.navigation.lockClass
);
}
},
click: function click( swiper, e ) {
var _swiper$navigation4 = swiper.navigation,
$nextEl = _swiper$navigation4.$nextEl,
$prevEl = _swiper$navigation4.$prevEl;
var targetEl = e.target;
if (
swiper.params.navigation.hideOnClick &&
! $( targetEl ).is( $prevEl ) &&
! $( targetEl ).is( $nextEl )
) {
if (
swiper.pagination &&
swiper.params.pagination &&
swiper.params.pagination.clickable &&
( swiper.pagination.el === targetEl || swiper.pagination.el.contains( targetEl ) )
)
return;
var isHidden;
if ( $nextEl ) {
isHidden = $nextEl.hasClass( swiper.params.navigation.hiddenClass );
} else if ( $prevEl ) {
isHidden = $prevEl.hasClass( swiper.params.navigation.hiddenClass );
}
if ( isHidden === true ) {
swiper.emit( 'navigationShow' );
} else {
swiper.emit( 'navigationHide' );
}
if ( $nextEl ) {
$nextEl.toggleClass( swiper.params.navigation.hiddenClass );
}
if ( $prevEl ) {
$prevEl.toggleClass( swiper.params.navigation.hiddenClass );
}
}
},
},
};
var Pagination = {
update: function update() {
// Render || Update Pagination bullets/items
var swiper = this;
var rtl = swiper.rtl;
var params = swiper.params.pagination;
if (
! params.el ||
! swiper.pagination.el ||
! swiper.pagination.$el ||
swiper.pagination.$el.length === 0
)
return;
var slidesLength =
swiper.virtual && swiper.params.virtual.enabled
? swiper.virtual.slides.length
: swiper.slides.length;
var $el = swiper.pagination.$el; // Current/Total
var current;
var total = swiper.params.loop
? Math.ceil( ( slidesLength - swiper.loopedSlides * 2 ) / swiper.params.slidesPerGroup )
: swiper.snapGrid.length;
if ( swiper.params.loop ) {
current = Math.ceil(
( swiper.activeIndex - swiper.loopedSlides ) / swiper.params.slidesPerGroup
);
if ( current > slidesLength - 1 - swiper.loopedSlides * 2 ) {
current -= slidesLength - swiper.loopedSlides * 2;
}
if ( current > total - 1 ) current -= total;
if ( current < 0 && swiper.params.paginationType !== 'bullets' ) current = total + current;
} else if ( typeof swiper.snapIndex !== 'undefined' ) {
current = swiper.snapIndex;
} else {
current = swiper.activeIndex || 0;
} // Types
if (
params.type === 'bullets' &&
swiper.pagination.bullets &&
swiper.pagination.bullets.length > 0
) {
var bullets = swiper.pagination.bullets;
var firstIndex;
var lastIndex;
var midIndex;
if ( params.dynamicBullets ) {
swiper.pagination.bulletSize = bullets
.eq( 0 )
[ swiper.isHorizontal() ? 'outerWidth' : 'outerHeight' ]( true );
$el.css(
swiper.isHorizontal() ? 'width' : 'height',
swiper.pagination.bulletSize * ( params.dynamicMainBullets + 4 ) + 'px'
);
if ( params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined ) {
swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;
if ( swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1 ) {
swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
} else if ( swiper.pagination.dynamicBulletIndex < 0 ) {
swiper.pagination.dynamicBulletIndex = 0;
}
}
firstIndex = current - swiper.pagination.dynamicBulletIndex;
lastIndex = firstIndex + ( Math.min( bullets.length, params.dynamicMainBullets ) - 1 );
midIndex = ( lastIndex + firstIndex ) / 2;
}
bullets.removeClass(
params.bulletActiveClass +
' ' +
params.bulletActiveClass +
'-next ' +
params.bulletActiveClass +
'-next-next ' +
params.bulletActiveClass +
'-prev ' +
params.bulletActiveClass +
'-prev-prev ' +
params.bulletActiveClass +
'-main'
);
if ( $el.length > 1 ) {
bullets.each( function ( bullet ) {
var $bullet = $( bullet );
var bulletIndex = $bullet.index();
if ( bulletIndex === current ) {
$bullet.addClass( params.bulletActiveClass );
}
if ( params.dynamicBullets ) {
if ( bulletIndex >= firstIndex && bulletIndex <= lastIndex ) {
$bullet.addClass( params.bulletActiveClass + '-main' );
}
if ( bulletIndex === firstIndex ) {
$bullet
.prev()
.addClass( params.bulletActiveClass + '-prev' )
.prev()
.addClass( params.bulletActiveClass + '-prev-prev' );
}
if ( bulletIndex === lastIndex ) {
$bullet
.next()
.addClass( params.bulletActiveClass + '-next' )
.next()
.addClass( params.bulletActiveClass + '-next-next' );
}
}
} );
} else {
var $bullet = bullets.eq( current );
var bulletIndex = $bullet.index();
$bullet.addClass( params.bulletActiveClass );
if ( params.dynamicBullets ) {
var $firstDisplayedBullet = bullets.eq( firstIndex );
var $lastDisplayedBullet = bullets.eq( lastIndex );
for ( var i = firstIndex; i <= lastIndex; i += 1 ) {
bullets.eq( i ).addClass( params.bulletActiveClass + '-main' );
}
if ( swiper.params.loop ) {
if ( bulletIndex >= bullets.length - params.dynamicMainBullets ) {
for ( var _i = params.dynamicMainBullets; _i >= 0; _i -= 1 ) {
bullets.eq( bullets.length - _i ).addClass( params.bulletActiveClass + '-main' );
}
bullets
.eq( bullets.length - params.dynamicMainBullets - 1 )
.addClass( params.bulletActiveClass + '-prev' );
} else {
$firstDisplayedBullet
.prev()
.addClass( params.bulletActiveClass + '-prev' )
.prev()
.addClass( params.bulletActiveClass + '-prev-prev' );
$lastDisplayedBullet
.next()
.addClass( params.bulletActiveClass + '-next' )
.next()
.addClass( params.bulletActiveClass + '-next-next' );
}
} else {
$firstDisplayedBullet
.prev()
.addClass( params.bulletActiveClass + '-prev' )
.prev()
.addClass( params.bulletActiveClass + '-prev-prev' );
$lastDisplayedBullet
.next()
.addClass( params.bulletActiveClass + '-next' )
.next()
.addClass( params.bulletActiveClass + '-next-next' );
}
}
}
if ( params.dynamicBullets ) {
var dynamicBulletsLength = Math.min( bullets.length, params.dynamicMainBullets + 4 );
var bulletsOffset =
( swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize ) /
2 -
midIndex * swiper.pagination.bulletSize;
var offsetProp = rtl ? 'right' : 'left';
bullets.css( swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + 'px' );
}
}
if ( params.type === 'fraction' ) {
$el
.find( classesToSelector( params.currentClass ) )
.text( params.formatFractionCurrent( current + 1 ) );
$el
.find( classesToSelector( params.totalClass ) )
.text( params.formatFractionTotal( total ) );
}
if ( params.type === 'progressbar' ) {
var progressbarDirection;
if ( params.progressbarOpposite ) {
progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
} else {
progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
}
var scale = ( current + 1 ) / total;
var scaleX = 1;
var scaleY = 1;
if ( progressbarDirection === 'horizontal' ) {
scaleX = scale;
} else {
scaleY = scale;
}
$el
.find( classesToSelector( params.progressbarFillClass ) )
.transform( 'translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')' )
.transition( swiper.params.speed );
}
if ( params.type === 'custom' && params.renderCustom ) {
$el.html( params.renderCustom( swiper, current + 1, total ) );
swiper.emit( 'paginationRender', $el[ 0 ] );
} else {
swiper.emit( 'paginationUpdate', $el[ 0 ] );
}
if ( swiper.params.watchOverflow && swiper.enabled ) {
$el[ swiper.isLocked ? 'addClass' : 'removeClass' ]( params.lockClass );
}
},
render: function render() {
// Render Container
var swiper = this;
var params = swiper.params.pagination;
if (
! params.el ||
! swiper.pagination.el ||
! swiper.pagination.$el ||
swiper.pagination.$el.length === 0
)
return;
var slidesLength =
swiper.virtual && swiper.params.virtual.enabled
? swiper.virtual.slides.length
: swiper.slides.length;
var $el = swiper.pagination.$el;
var paginationHTML = '';
if ( params.type === 'bullets' ) {
var numberOfBullets = swiper.params.loop
? Math.ceil( ( slidesLength - swiper.loopedSlides * 2 ) / swiper.params.slidesPerGroup )
: swiper.snapGrid.length;
if ( swiper.params.freeMode && ! swiper.params.loop && numberOfBullets > slidesLength ) {
numberOfBullets = slidesLength;
}
for ( var i = 0; i < numberOfBullets; i += 1 ) {
if ( params.renderBullet ) {
paginationHTML += params.renderBullet.call( swiper, i, params.bulletClass );
} else {
paginationHTML +=
'<' +
params.bulletElement +
' class="' +
params.bulletClass +
'"></' +
params.bulletElement +
'>';
}
}
$el.html( paginationHTML );
swiper.pagination.bullets = $el.find( classesToSelector( params.bulletClass ) );
}
if ( params.type === 'fraction' ) {
if ( params.renderFraction ) {
paginationHTML = params.renderFraction.call(
swiper,
params.currentClass,
params.totalClass
);
} else {
paginationHTML =
'<span class="' +
params.currentClass +
'"></span>' +
' / ' +
( '<span class="' + params.totalClass + '"></span>' );
}
$el.html( paginationHTML );
}
if ( params.type === 'progressbar' ) {
if ( params.renderProgressbar ) {
paginationHTML = params.renderProgressbar.call( swiper, params.progressbarFillClass );
} else {
paginationHTML = '<span class="' + params.progressbarFillClass + '"></span>';
}
$el.html( paginationHTML );
}
if ( params.type !== 'custom' ) {
swiper.emit( 'paginationRender', swiper.pagination.$el[ 0 ] );
}
},
init: function init() {
var swiper = this;
swiper.params.pagination = createElementIfNotDefined(
swiper.$el,
swiper.params.pagination,
swiper.params.createElements,
{
el: 'swiper-pagination',
}
);
var params = swiper.params.pagination;
if ( ! params.el ) return;
var $el = $( params.el );
if ( $el.length === 0 ) return;
if ( swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 ) {
$el = swiper.$el.find( params.el );
}
if ( params.type === 'bullets' && params.clickable ) {
$el.addClass( params.clickableClass );
}
$el.addClass( params.modifierClass + params.type );
if ( params.type === 'bullets' && params.dynamicBullets ) {
$el.addClass( '' + params.modifierClass + params.type + '-dynamic' );
swiper.pagination.dynamicBulletIndex = 0;
if ( params.dynamicMainBullets < 1 ) {
params.dynamicMainBullets = 1;
}
}
if ( params.type === 'progressbar' && params.progressbarOpposite ) {
$el.addClass( params.progressbarOppositeClass );
}
if ( params.clickable ) {
$el.on( 'click', classesToSelector( params.bulletClass ), function onClick( e ) {
e.preventDefault();
var index = $( this ).index() * swiper.params.slidesPerGroup;
if ( swiper.params.loop ) index += swiper.loopedSlides;
swiper.slideTo( index );
} );
}
extend( swiper.pagination, {
$el: $el,
el: $el[ 0 ],
} );
if ( ! swiper.enabled ) {
$el.addClass( params.lockClass );
}
},
destroy: function destroy() {
var swiper = this;
var params = swiper.params.pagination;
if (
! params.el ||
! swiper.pagination.el ||
! swiper.pagination.$el ||
swiper.pagination.$el.length === 0
)
return;
var $el = swiper.pagination.$el;
$el.removeClass( params.hiddenClass );
$el.removeClass( params.modifierClass + params.type );
if ( swiper.pagination.bullets )
swiper.pagination.bullets.removeClass( params.bulletActiveClass );
if ( params.clickable ) {
$el.off( 'click', classesToSelector( params.bulletClass ) );
}
},
};
var Pagination$1 = {
name: 'pagination',
params: {
pagination: {
el: null,
bulletElement: 'span',
clickable: false,
hideOnClick: false,
renderBullet: null,
renderProgressbar: null,
renderFraction: null,
renderCustom: null,
progressbarOpposite: false,
type: 'bullets',
// 'bullets' or 'progressbar' or 'fraction' or 'custom'
dynamicBullets: false,
dynamicMainBullets: 1,
formatFractionCurrent: function formatFractionCurrent( number ) {
return number;
},
formatFractionTotal: function formatFractionTotal( number ) {
return number;
},
bulletClass: 'swiper-pagination-bullet',
bulletActiveClass: 'swiper-pagination-bullet-active',
modifierClass: 'swiper-pagination-',
// NEW
currentClass: 'swiper-pagination-current',
totalClass: 'swiper-pagination-total',
hiddenClass: 'swiper-pagination-hidden',
progressbarFillClass: 'swiper-pagination-progressbar-fill',
progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
clickableClass: 'swiper-pagination-clickable',
// NEW
lockClass: 'swiper-pagination-lock',
},
},
create: function create() {
var swiper = this;
bindModuleMethods( swiper, {
pagination: _extends(
{
dynamicBulletIndex: 0,
},
Pagination
),
} );
},
on: {
init: function init( swiper ) {
swiper.pagination.init();
swiper.pagination.render();
swiper.pagination.update();
},
activeIndexChange: function activeIndexChange( swiper ) {
if ( swiper.params.loop ) {
swiper.pagination.update();
} else if ( typeof swiper.snapIndex === 'undefined' ) {
swiper.pagination.update();
}
},
snapIndexChange: function snapIndexChange( swiper ) {
if ( ! swiper.params.loop ) {
swiper.pagination.update();
}
},
slidesLengthChange: function slidesLengthChange( swiper ) {
if ( swiper.params.loop ) {
swiper.pagination.render();
swiper.pagination.update();
}
},
snapGridLengthChange: function snapGridLengthChange( swiper ) {
if ( ! swiper.params.loop ) {
swiper.pagination.render();
swiper.pagination.update();
}
},
destroy: function destroy( swiper ) {
swiper.pagination.destroy();
},
'enable disable': function enableDisable( swiper ) {
var $el = swiper.pagination.$el;
if ( $el ) {
$el[ swiper.enabled ? 'removeClass' : 'addClass' ]( swiper.params.pagination.lockClass );
}
},
click: function click( swiper, e ) {
var targetEl = e.target;
if (
swiper.params.pagination.el &&
swiper.params.pagination.hideOnClick &&
swiper.pagination.$el.length > 0 &&
! $( targetEl ).hasClass( swiper.params.pagination.bulletClass )
) {
if (
swiper.navigation &&
( ( swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl ) ||
( swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl ) )
)
return;
var isHidden = swiper.pagination.$el.hasClass( swiper.params.pagination.hiddenClass );
if ( isHidden === true ) {
swiper.emit( 'paginationShow' );
} else {
swiper.emit( 'paginationHide' );
}
swiper.pagination.$el.toggleClass( swiper.params.pagination.hiddenClass );
}
},
},
};
var Zoom = {
// Calc Scale From Multi-touches
getDistanceBetweenTouches: function getDistanceBetweenTouches( e ) {
if ( e.targetTouches.length < 2 ) return 1;
var x1 = e.targetTouches[ 0 ].pageX;
var y1 = e.targetTouches[ 0 ].pageY;
var x2 = e.targetTouches[ 1 ].pageX;
var y2 = e.targetTouches[ 1 ].pageY;
var distance = Math.sqrt( Math.pow( x2 - x1, 2 ) + Math.pow( y2 - y1, 2 ) );
return distance;
},
// Events
onGestureStart: function onGestureStart( e ) {
var swiper = this;
var support = swiper.support;
var params = swiper.params.zoom;
var zoom = swiper.zoom;
var gesture = zoom.gesture;
zoom.fakeGestureTouched = false;
zoom.fakeGestureMoved = false;
if ( ! support.gestures ) {
if (
e.type !== 'touchstart' ||
( e.type === 'touchstart' && e.targetTouches.length < 2 )
) {
return;
}
zoom.fakeGestureTouched = true;
gesture.scaleStart = Zoom.getDistanceBetweenTouches( e );
}
if ( ! gesture.$slideEl || ! gesture.$slideEl.length ) {
gesture.$slideEl = $( e.target ).closest( '.' + swiper.params.slideClass );
if ( gesture.$slideEl.length === 0 )
gesture.$slideEl = swiper.slides.eq( swiper.activeIndex );
gesture.$imageEl = gesture.$slideEl.find(
'img, svg, canvas, picture, .swiper-zoom-target'
);
gesture.$imageWrapEl = gesture.$imageEl.parent( '.' + params.containerClass );
gesture.maxRatio = gesture.$imageWrapEl.attr( 'data-swiper-zoom' ) || params.maxRatio;
if ( gesture.$imageWrapEl.length === 0 ) {
gesture.$imageEl = undefined;
return;
}
}
if ( gesture.$imageEl ) {
gesture.$imageEl.transition( 0 );
}
swiper.zoom.isScaling = true;
},
onGestureChange: function onGestureChange( e ) {
var swiper = this;
var support = swiper.support;
var params = swiper.params.zoom;
var zoom = swiper.zoom;
var gesture = zoom.gesture;
if ( ! support.gestures ) {
if ( e.type !== 'touchmove' || ( e.type === 'touchmove' && e.targetTouches.length < 2 ) ) {
return;
}
zoom.fakeGestureMoved = true;
gesture.scaleMove = Zoom.getDistanceBetweenTouches( e );
}
if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) {
if ( e.type === 'gesturechange' ) zoom.onGestureStart( e );
return;
}
if ( support.gestures ) {
zoom.scale = e.scale * zoom.currentScale;
} else {
zoom.scale = ( gesture.scaleMove / gesture.scaleStart ) * zoom.currentScale;
}
if ( zoom.scale > gesture.maxRatio ) {
zoom.scale = gesture.maxRatio - 1 + Math.pow( zoom.scale - gesture.maxRatio + 1, 0.5 );
}
if ( zoom.scale < params.minRatio ) {
zoom.scale = params.minRatio + 1 - Math.pow( params.minRatio - zoom.scale + 1, 0.5 );
}
gesture.$imageEl.transform( 'translate3d(0,0,0) scale(' + zoom.scale + ')' );
},
onGestureEnd: function onGestureEnd( e ) {
var swiper = this;
var device = swiper.device;
var support = swiper.support;
var params = swiper.params.zoom;
var zoom = swiper.zoom;
var gesture = zoom.gesture;
if ( ! support.gestures ) {
if ( ! zoom.fakeGestureTouched || ! zoom.fakeGestureMoved ) {
return;
}
if (
e.type !== 'touchend' ||
( e.type === 'touchend' && e.changedTouches.length < 2 && ! device.android )
) {
return;
}
zoom.fakeGestureTouched = false;
zoom.fakeGestureMoved = false;
}
if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
zoom.scale = Math.max( Math.min( zoom.scale, gesture.maxRatio ), params.minRatio );
gesture.$imageEl
.transition( swiper.params.speed )
.transform( 'translate3d(0,0,0) scale(' + zoom.scale + ')' );
zoom.currentScale = zoom.scale;
zoom.isScaling = false;
if ( zoom.scale === 1 ) gesture.$slideEl = undefined;
},
onTouchStart: function onTouchStart( e ) {
var swiper = this;
var device = swiper.device;
var zoom = swiper.zoom;
var gesture = zoom.gesture,
image = zoom.image;
if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
if ( image.isTouched ) return;
if ( device.android && e.cancelable ) e.preventDefault();
image.isTouched = true;
image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageX : e.pageX;
image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[ 0 ].pageY : e.pageY;
},
onTouchMove: function onTouchMove( e ) {
var swiper = this;
var zoom = swiper.zoom;
var gesture = zoom.gesture,
image = zoom.image,
velocity = zoom.velocity;
if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
swiper.allowClick = false;
if ( ! image.isTouched || ! gesture.$slideEl ) return;
if ( ! image.isMoved ) {
image.width = gesture.$imageEl[ 0 ].offsetWidth;
image.height = gesture.$imageEl[ 0 ].offsetHeight;
image.startX = getTranslate( gesture.$imageWrapEl[ 0 ], 'x' ) || 0;
image.startY = getTranslate( gesture.$imageWrapEl[ 0 ], 'y' ) || 0;
gesture.slideWidth = gesture.$slideEl[ 0 ].offsetWidth;
gesture.slideHeight = gesture.$slideEl[ 0 ].offsetHeight;
gesture.$imageWrapEl.transition( 0 );
if ( swiper.rtl ) {
image.startX = -image.startX;
image.startY = -image.startY;
}
} // Define if we need image drag
var scaledWidth = image.width * zoom.scale;
var scaledHeight = image.height * zoom.scale;
if ( scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight ) return;
image.minX = Math.min( gesture.slideWidth / 2 - scaledWidth / 2, 0 );
image.maxX = -image.minX;
image.minY = Math.min( gesture.slideHeight / 2 - scaledHeight / 2, 0 );
image.maxY = -image.minY;
image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[ 0 ].pageX : e.pageX;
image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[ 0 ].pageY : e.pageY;
if ( ! image.isMoved && ! zoom.isScaling ) {
if (
swiper.isHorizontal() &&
( ( Math.floor( image.minX ) === Math.floor( image.startX ) &&
image.touchesCurrent.x < image.touchesStart.x ) ||
( Math.floor( image.maxX ) === Math.floor( image.startX ) &&
image.touchesCurrent.x > image.touchesStart.x ) )
) {
image.isTouched = false;
return;
}
if (
! swiper.isHorizontal() &&
( ( Math.floor( image.minY ) === Math.floor( image.startY ) &&
image.touchesCurrent.y < image.touchesStart.y ) ||
( Math.floor( image.maxY ) === Math.floor( image.startY ) &&
image.touchesCurrent.y > image.touchesStart.y ) )
) {
image.isTouched = false;
return;
}
}
if ( e.cancelable ) {
e.preventDefault();
}
e.stopPropagation();
image.isMoved = true;
image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;
if ( image.currentX < image.minX ) {
image.currentX = image.minX + 1 - Math.pow( image.minX - image.currentX + 1, 0.8 );
}
if ( image.currentX > image.maxX ) {
image.currentX = image.maxX - 1 + Math.pow( image.currentX - image.maxX + 1, 0.8 );
}
if ( image.currentY < image.minY ) {
image.currentY = image.minY + 1 - Math.pow( image.minY - image.currentY + 1, 0.8 );
}
if ( image.currentY > image.maxY ) {
image.currentY = image.maxY - 1 + Math.pow( image.currentY - image.maxY + 1, 0.8 );
} // Velocity
if ( ! velocity.prevPositionX ) velocity.prevPositionX = image.touchesCurrent.x;
if ( ! velocity.prevPositionY ) velocity.prevPositionY = image.touchesCurrent.y;
if ( ! velocity.prevTime ) velocity.prevTime = Date.now();
velocity.x =
( image.touchesCurrent.x - velocity.prevPositionX ) /
( Date.now() - velocity.prevTime ) /
2;
velocity.y =
( image.touchesCurrent.y - velocity.prevPositionY ) /
( Date.now() - velocity.prevTime ) /
2;
if ( Math.abs( image.touchesCurrent.x - velocity.prevPositionX ) < 2 ) velocity.x = 0;
if ( Math.abs( image.touchesCurrent.y - velocity.prevPositionY ) < 2 ) velocity.y = 0;
velocity.prevPositionX = image.touchesCurrent.x;
velocity.prevPositionY = image.touchesCurrent.y;
velocity.prevTime = Date.now();
gesture.$imageWrapEl.transform(
'translate3d(' + image.currentX + 'px, ' + image.currentY + 'px,0)'
);
},
onTouchEnd: function onTouchEnd() {
var swiper = this;
var zoom = swiper.zoom;
var gesture = zoom.gesture,
image = zoom.image,
velocity = zoom.velocity;
if ( ! gesture.$imageEl || gesture.$imageEl.length === 0 ) return;
if ( ! image.isTouched || ! image.isMoved ) {
image.isTouched = false;
image.isMoved = false;
return;
}
image.isTouched = false;
image.isMoved = false;
var momentumDurationX = 300;
var momentumDurationY = 300;
var momentumDistanceX = velocity.x * momentumDurationX;
var newPositionX = image.currentX + momentumDistanceX;
var momentumDistanceY = velocity.y * momentumDurationY;
var newPositionY = image.currentY + momentumDistanceY; // Fix duration
if ( velocity.x !== 0 )
momentumDurationX = Math.abs( ( newPositionX - image.currentX ) / velocity.x );
if ( velocity.y !== 0 )
momentumDurationY = Math.abs( ( newPositionY - image.currentY ) / velocity.y );
var momentumDuration = Math.max( momentumDurationX, momentumDurationY );
image.currentX = newPositionX;
image.currentY = newPositionY; // Define if we need image drag
var scaledWidth = image.width * zoom.scale;
var scaledHeight = image.height * zoom.scale;
image.minX = Math.min( gesture.slideWidth / 2 - scaledWidth / 2, 0 );
image.maxX = -image.minX;
image.minY = Math.min( gesture.slideHeight / 2 - scaledHeight / 2, 0 );
image.maxY = -image.minY;
image.currentX = Math.max( Math.min( image.currentX, image.maxX ), image.minX );
image.currentY = Math.max( Math.min( image.currentY, image.maxY ), image.minY );
gesture.$imageWrapEl
.transition( momentumDuration )
.transform( 'translate3d(' + image.currentX + 'px, ' + image.currentY + 'px,0)' );
},
onTransitionEnd: function onTransitionEnd() {
var swiper = this;
var zoom = swiper.zoom;
var gesture = zoom.gesture;
if ( gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex ) {
if ( gesture.$imageEl ) {
gesture.$imageEl.transform( 'translate3d(0,0,0) scale(1)' );
}
if ( gesture.$imageWrapEl ) {
gesture.$imageWrapEl.transform( 'translate3d(0,0,0)' );
}
zoom.scale = 1;
zoom.currentScale = 1;
gesture.$slideEl = undefined;
gesture.$imageEl = undefined;
gesture.$imageWrapEl = undefined;
}
},
// Toggle Zoom
toggle: function toggle( e ) {
var swiper = this;
var zoom = swiper.zoom;
if ( zoom.scale && zoom.scale !== 1 ) {
// Zoom Out
zoom.out();
} else {
// Zoom In
zoom.in( e );
}
},
in: function _in( e ) {
var swiper = this;
var window = getWindow();
var zoom = swiper.zoom;
var params = swiper.params.zoom;
var gesture = zoom.gesture,
image = zoom.image;
if ( ! gesture.$slideEl ) {
if ( swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ) {
gesture.$slideEl = swiper.$wrapperEl.children( '.' + swiper.params.slideActiveClass );
} else {
gesture.$slideEl = swiper.slides.eq( swiper.activeIndex );
}
gesture.$imageEl = gesture.$slideEl.find(
'img, svg, canvas, picture, .swiper-zoom-target'
);
gesture.$imageWrapEl = gesture.$imageEl.parent( '.' + params.containerClass );
}
if (
! gesture.$imageEl ||
gesture.$imageEl.length === 0 ||
! gesture.$imageWrapEl ||
gesture.$imageWrapEl.length === 0
)
return;
gesture.$slideEl.addClass( '' + params.zoomedSlideClass );
var touchX;
var touchY;
var offsetX;
var offsetY;
var diffX;
var diffY;
var translateX;
var translateY;
var imageWidth;
var imageHeight;
var scaledWidth;
var scaledHeight;
var translateMinX;
var translateMinY;
var translateMaxX;
var translateMaxY;
var slideWidth;
var slideHeight;
if ( typeof image.touchesStart.x === 'undefined' && e ) {
touchX = e.type === 'touchend' ? e.changedTouches[ 0 ].pageX : e.pageX;
touchY = e.type === 'touchend' ? e.changedTouches[ 0 ].pageY : e.pageY;
} else {
touchX = image.touchesStart.x;
touchY = image.touchesStart.y;
}
zoom.scale = gesture.$imageWrapEl.attr( 'data-swiper-zoom' ) || params.maxRatio;
zoom.currentScale = gesture.$imageWrapEl.attr( 'data-swiper-zoom' ) || params.maxRatio;
if ( e ) {
slideWidth = gesture.$slideEl[ 0 ].offsetWidth;
slideHeight = gesture.$slideEl[ 0 ].offsetHeight;
offsetX = gesture.$slideEl.offset().left + window.scrollX;
offsetY = gesture.$slideEl.offset().top + window.scrollY;
diffX = offsetX + slideWidth / 2 - touchX;
diffY = offsetY + slideHeight / 2 - touchY;
imageWidth = gesture.$imageEl[ 0 ].offsetWidth;
imageHeight = gesture.$imageEl[ 0 ].offsetHeight;
scaledWidth = imageWidth * zoom.scale;
scaledHeight = imageHeight * zoom.scale;
translateMinX = Math.min( slideWidth / 2 - scaledWidth / 2, 0 );
translateMinY = Math.min( slideHeight / 2 - scaledHeight / 2, 0 );
translateMaxX = -translateMinX;
translateMaxY = -translateMinY;
translateX = diffX * zoom.scale;
translateY = diffY * zoom.scale;
if ( translateX < translateMinX ) {
translateX = translateMinX;
}
if ( translateX > translateMaxX ) {
translateX = translateMaxX;
}
if ( translateY < translateMinY ) {
translateY = translateMinY;
}
if ( translateY > translateMaxY ) {
translateY = translateMaxY;
}
} else {
translateX = 0;
translateY = 0;
}
gesture.$imageWrapEl
.transition( 300 )
.transform( 'translate3d(' + translateX + 'px, ' + translateY + 'px,0)' );
gesture.$imageEl
.transition( 300 )
.transform( 'translate3d(0,0,0) scale(' + zoom.scale + ')' );
},
out: function out() {
var swiper = this;
var zoom = swiper.zoom;
var params = swiper.params.zoom;
var gesture = zoom.gesture;
if ( ! gesture.$slideEl ) {
if ( swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ) {
gesture.$slideEl = swiper.$wrapperEl.children( '.' + swiper.params.slideActiveClass );
} else {
gesture.$slideEl = swiper.slides.eq( swiper.activeIndex );
}
gesture.$imageEl = gesture.$slideEl.find(
'img, svg, canvas, picture, .swiper-zoom-target'
);
gesture.$imageWrapEl = gesture.$imageEl.parent( '.' + params.containerClass );
}
if (
! gesture.$imageEl ||
gesture.$imageEl.length === 0 ||
! gesture.$imageWrapEl ||
gesture.$imageWrapEl.length === 0
)
return;
zoom.scale = 1;
zoom.currentScale = 1;
gesture.$imageWrapEl.transition( 300 ).transform( 'translate3d(0,0,0)' );
gesture.$imageEl.transition( 300 ).transform( 'translate3d(0,0,0) scale(1)' );
gesture.$slideEl.removeClass( '' + params.zoomedSlideClass );
gesture.$slideEl = undefined;
},
toggleGestures: function toggleGestures( method ) {
var swiper = this;
var zoom = swiper.zoom;
var selector = zoom.slideSelector,
passive = zoom.passiveListener;
swiper.$wrapperEl[ method ]( 'gesturestart', selector, zoom.onGestureStart, passive );
swiper.$wrapperEl[ method ]( 'gesturechange', selector, zoom.onGestureChange, passive );
swiper.$wrapperEl[ method ]( 'gestureend', selector, zoom.onGestureEnd, passive );
},
enableGestures: function enableGestures() {
if ( this.zoom.gesturesEnabled ) return;
this.zoom.gesturesEnabled = true;
this.zoom.toggleGestures( 'on' );
},
disableGestures: function disableGestures() {
if ( ! this.zoom.gesturesEnabled ) return;
this.zoom.gesturesEnabled = false;
this.zoom.toggleGestures( 'off' );
},
// Attach/Detach Events
enable: function enable() {
var swiper = this;
var support = swiper.support;
var zoom = swiper.zoom;
if ( zoom.enabled ) return;
zoom.enabled = true;
var passiveListener =
swiper.touchEvents.start === 'touchstart' &&
support.passiveListener &&
swiper.params.passiveListeners
? {
passive: true,
capture: false,
}
: false;
var activeListenerWithCapture = support.passiveListener
? {
passive: false,
capture: true,
}
: true;
var slideSelector = '.' + swiper.params.slideClass;
swiper.zoom.passiveListener = passiveListener;
swiper.zoom.slideSelector = slideSelector; // Scale image
if ( support.gestures ) {
swiper.$wrapperEl.on(
swiper.touchEvents.start,
swiper.zoom.enableGestures,
passiveListener
);
swiper.$wrapperEl.on(
swiper.touchEvents.end,
swiper.zoom.disableGestures,
passiveListener
);
} else if ( swiper.touchEvents.start === 'touchstart' ) {
swiper.$wrapperEl.on(
swiper.touchEvents.start,
slideSelector,
zoom.onGestureStart,
passiveListener
);
swiper.$wrapperEl.on(
swiper.touchEvents.move,
slideSelector,
zoom.onGestureChange,
activeListenerWithCapture
);
swiper.$wrapperEl.on(
swiper.touchEvents.end,
slideSelector,
zoom.onGestureEnd,
passiveListener
);
if ( swiper.touchEvents.cancel ) {
swiper.$wrapperEl.on(
swiper.touchEvents.cancel,
slideSelector,
zoom.onGestureEnd,
passiveListener
);
}
} // Move image
swiper.$wrapperEl.on(
swiper.touchEvents.move,
'.' + swiper.params.zoom.containerClass,
zoom.onTouchMove,
activeListenerWithCapture
);
},
disable: function disable() {
var swiper = this;
var zoom = swiper.zoom;
if ( ! zoom.enabled ) return;
var support = swiper.support;
swiper.zoom.enabled = false;
var passiveListener =
swiper.touchEvents.start === 'touchstart' &&
support.passiveListener &&
swiper.params.passiveListeners
? {
passive: true,
capture: false,
}
: false;
var activeListenerWithCapture = support.passiveListener
? {
passive: false,
capture: true,
}
: true;
var slideSelector = '.' + swiper.params.slideClass; // Scale image
if ( support.gestures ) {
swiper.$wrapperEl.off(
swiper.touchEvents.start,
swiper.zoom.enableGestures,
passiveListener
);
swiper.$wrapperEl.off(
swiper.touchEvents.end,
swiper.zoom.disableGestures,
passiveListener
);
} else if ( swiper.touchEvents.start === 'touchstart' ) {
swiper.$wrapperEl.off(
swiper.touchEvents.start,
slideSelector,
zoom.onGestureStart,
passiveListener
);
swiper.$wrapperEl.off(
swiper.touchEvents.move,
slideSelector,
zoom.onGestureChange,
activeListenerWithCapture
);
swiper.$wrapperEl.off(
swiper.touchEvents.end,
slideSelector,
zoom.onGestureEnd,
passiveListener
);
if ( swiper.touchEvents.cancel ) {
swiper.$wrapperEl.off(
swiper.touchEvents.cancel,
slideSelector,
zoom.onGestureEnd,
passiveListener
);
}
} // Move image
swiper.$wrapperEl.off(
swiper.touchEvents.move,
'.' + swiper.params.zoom.containerClass,
zoom.onTouchMove,
activeListenerWithCapture
);
},
};
var Zoom$1 = {
name: 'zoom',
params: {
zoom: {
enabled: false,
maxRatio: 3,
minRatio: 1,
toggle: true,
containerClass: 'swiper-zoom-container',
zoomedSlideClass: 'swiper-slide-zoomed',
},
},
create: function create() {
var swiper = this;
bindModuleMethods( swiper, {
zoom: _extends(
{
enabled: false,
scale: 1,
currentScale: 1,
isScaling: false,
gesture: {
$slideEl: undefined,
slideWidth: undefined,
slideHeight: undefined,
$imageEl: undefined,
$imageWrapEl: undefined,
maxRatio: 3,
},
image: {
isTouched: undefined,
isMoved: undefined,
currentX: undefined,
currentY: undefined,
minX: undefined,
minY: undefined,
maxX: undefined,
maxY: undefined,
width: undefined,
height: undefined,
startX: undefined,
startY: undefined,
touchesStart: {},
touchesCurrent: {},
},
velocity: {
x: undefined,
y: undefined,
prevPositionX: undefined,
prevPositionY: undefined,
prevTime: undefined,
},
},
Zoom
),
} );
var scale = 1;
Object.defineProperty( swiper.zoom, 'scale', {
get: function get() {
return scale;
},
set: function set( value ) {
if ( scale !== value ) {
var imageEl = swiper.zoom.gesture.$imageEl
? swiper.zoom.gesture.$imageEl[ 0 ]
: undefined;
var slideEl = swiper.zoom.gesture.$slideEl
? swiper.zoom.gesture.$slideEl[ 0 ]
: undefined;
swiper.emit( 'zoomChange', value, imageEl, slideEl );
}
scale = value;
},
} );
},
on: {
init: function init( swiper ) {
if ( swiper.params.zoom.enabled ) {
swiper.zoom.enable();
}
},
destroy: function destroy( swiper ) {
swiper.zoom.disable();
},
touchStart: function touchStart( swiper, e ) {
if ( ! swiper.zoom.enabled ) return;
swiper.zoom.onTouchStart( e );
},
touchEnd: function touchEnd( swiper, e ) {
if ( ! swiper.zoom.enabled ) return;
swiper.zoom.onTouchEnd( e );
},
doubleTap: function doubleTap( swiper, e ) {
if (
! swiper.animating &&
swiper.params.zoom.enabled &&
swiper.zoom.enabled &&
swiper.params.zoom.toggle
) {
swiper.zoom.toggle( e );
}
},
transitionEnd: function transitionEnd( swiper ) {
if ( swiper.zoom.enabled && swiper.params.zoom.enabled ) {
swiper.zoom.onTransitionEnd();
}
},
slideChange: function slideChange( swiper ) {
if ( swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode ) {
swiper.zoom.onTransitionEnd();
}
},
},
};
var A11y = {
getRandomNumber: function getRandomNumber( size ) {
if ( size === void 0 ) {
size = 16;
}
var randomChar = function randomChar() {
return Math.round( 16 * Math.random() ).toString( 16 );
};
return 'x'.repeat( size ).replace( /x/g, randomChar );
},
makeElFocusable: function makeElFocusable( $el ) {
$el.attr( 'tabIndex', '0' );
return $el;
},
makeElNotFocusable: function makeElNotFocusable( $el ) {
$el.attr( 'tabIndex', '-1' );
return $el;
},
addElRole: function addElRole( $el, role ) {
$el.attr( 'role', role );
return $el;
},
addElRoleDescription: function addElRoleDescription( $el, description ) {
$el.attr( 'aria-roledescription', description );
return $el;
},
addElControls: function addElControls( $el, controls ) {
$el.attr( 'aria-controls', controls );
return $el;
},
addElLabel: function addElLabel( $el, label ) {
$el.attr( 'aria-label', label );
return $el;
},
addElId: function addElId( $el, id ) {
$el.attr( 'id', id );
return $el;
},
addElLive: function addElLive( $el, live ) {
$el.attr( 'aria-live', live );
return $el;
},
disableEl: function disableEl( $el ) {
$el.attr( 'aria-disabled', true );
return $el;
},
enableEl: function enableEl( $el ) {
$el.attr( 'aria-disabled', false );
return $el;
},
onEnterOrSpaceKey: function onEnterOrSpaceKey( e ) {
if ( e.keyCode !== 13 && e.keyCode !== 32 ) return;
var swiper = this;
var params = swiper.params.a11y;
var $targetEl = $( e.target );
if (
swiper.navigation &&
swiper.navigation.$nextEl &&
$targetEl.is( swiper.navigation.$nextEl )
) {
if ( ! ( swiper.isEnd && ! swiper.params.loop ) ) {
swiper.slideNext();
}
if ( swiper.isEnd ) {
swiper.a11y.notify( params.lastSlideMessage );
} else {
swiper.a11y.notify( params.nextSlideMessage );
}
}
if (
swiper.navigation &&
swiper.navigation.$prevEl &&
$targetEl.is( swiper.navigation.$prevEl )
) {
if ( ! ( swiper.isBeginning && ! swiper.params.loop ) ) {
swiper.slidePrev();
}
if ( swiper.isBeginning ) {
swiper.a11y.notify( params.firstSlideMessage );
} else {
swiper.a11y.notify( params.prevSlideMessage );
}
}
if (
swiper.pagination &&
$targetEl.is( classesToSelector( swiper.params.pagination.bulletClass ) )
) {
$targetEl[ 0 ].click();
}
},
notify: function notify( message ) {
var swiper = this;
var notification = swiper.a11y.liveRegion;
if ( notification.length === 0 ) return;
notification.html( '' );
notification.html( message );
},
updateNavigation: function updateNavigation() {
var swiper = this;
if ( swiper.params.loop || ! swiper.navigation ) return;
var _swiper$navigation = swiper.navigation,
$nextEl = _swiper$navigation.$nextEl,
$prevEl = _swiper$navigation.$prevEl;
if ( $prevEl && $prevEl.length > 0 ) {
if ( swiper.isBeginning ) {
swiper.a11y.disableEl( $prevEl );
swiper.a11y.makeElNotFocusable( $prevEl );
} else {
swiper.a11y.enableEl( $prevEl );
swiper.a11y.makeElFocusable( $prevEl );
}
}
if ( $nextEl && $nextEl.length > 0 ) {
if ( swiper.isEnd ) {
swiper.a11y.disableEl( $nextEl );
swiper.a11y.makeElNotFocusable( $nextEl );
} else {
swiper.a11y.enableEl( $nextEl );
swiper.a11y.makeElFocusable( $nextEl );
}
}
},
updatePagination: function updatePagination() {
var swiper = this;
var params = swiper.params.a11y;
if (
swiper.pagination &&
swiper.params.pagination.clickable &&
swiper.pagination.bullets &&
swiper.pagination.bullets.length
) {
swiper.pagination.bullets.each( function ( bulletEl ) {
var $bulletEl = $( bulletEl );
swiper.a11y.makeElFocusable( $bulletEl );
if ( ! swiper.params.pagination.renderBullet ) {
swiper.a11y.addElRole( $bulletEl, 'button' );
swiper.a11y.addElLabel(
$bulletEl,
params.paginationBulletMessage.replace( /\{\{index\}\}/, $bulletEl.index() + 1 )
);
}
} );
}
},
init: function init() {
var swiper = this;
var params = swiper.params.a11y;
swiper.$el.append( swiper.a11y.liveRegion ); // Container
var $containerEl = swiper.$el;
if ( params.containerRoleDescriptionMessage ) {
swiper.a11y.addElRoleDescription( $containerEl, params.containerRoleDescriptionMessage );
}
if ( params.containerMessage ) {
swiper.a11y.addElLabel( $containerEl, params.containerMessage );
} // Wrapper
var $wrapperEl = swiper.$wrapperEl;
var wrapperId =
$wrapperEl.attr( 'id' ) || 'swiper-wrapper-' + swiper.a11y.getRandomNumber( 16 );
var live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';
swiper.a11y.addElId( $wrapperEl, wrapperId );
swiper.a11y.addElLive( $wrapperEl, live ); // Slide
if ( params.itemRoleDescriptionMessage ) {
swiper.a11y.addElRoleDescription( $( swiper.slides ), params.itemRoleDescriptionMessage );
}
swiper.a11y.addElRole( $( swiper.slides ), params.slideRole );
swiper.slides.each( function ( slideEl ) {
var $slideEl = $( slideEl );
var ariaLabelMessage = params.slideLabelMessage
.replace( /\{\{index\}\}/, $slideEl.index() + 1 )
.replace( /\{\{slidesLength\}\}/, swiper.slides.length );
swiper.a11y.addElLabel( $slideEl, ariaLabelMessage );
} ); // Navigation
var $nextEl;
var $prevEl;
if ( swiper.navigation && swiper.navigation.$nextEl ) {
$nextEl = swiper.navigation.$nextEl;
}
if ( swiper.navigation && swiper.navigation.$prevEl ) {
$prevEl = swiper.navigation.$prevEl;
}
if ( $nextEl && $nextEl.length ) {
swiper.a11y.makeElFocusable( $nextEl );
if ( $nextEl[ 0 ].tagName !== 'BUTTON' ) {
swiper.a11y.addElRole( $nextEl, 'button' );
$nextEl.on( 'keydown', swiper.a11y.onEnterOrSpaceKey );
}
swiper.a11y.addElLabel( $nextEl, params.nextSlideMessage );
swiper.a11y.addElControls( $nextEl, wrapperId );
}
if ( $prevEl && $prevEl.length ) {
swiper.a11y.makeElFocusable( $prevEl );
if ( $prevEl[ 0 ].tagName !== 'BUTTON' ) {
swiper.a11y.addElRole( $prevEl, 'button' );
$prevEl.on( 'keydown', swiper.a11y.onEnterOrSpaceKey );
}
swiper.a11y.addElLabel( $prevEl, params.prevSlideMessage );
swiper.a11y.addElControls( $prevEl, wrapperId );
} // Pagination
if (
swiper.pagination &&
swiper.params.pagination.clickable &&
swiper.pagination.bullets &&
swiper.pagination.bullets.length
) {
swiper.pagination.$el.on(
'keydown',
classesToSelector( swiper.params.pagination.bulletClass ),
swiper.a11y.onEnterOrSpaceKey
);
}
},
destroy: function destroy() {
var swiper = this;
if ( swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0 )
swiper.a11y.liveRegion.remove();
var $nextEl;
var $prevEl;
if ( swiper.navigation && swiper.navigation.$nextEl ) {
$nextEl = swiper.navigation.$nextEl;
}
if ( swiper.navigation && swiper.navigation.$prevEl ) {
$prevEl = swiper.navigation.$prevEl;
}
if ( $nextEl ) {
$nextEl.off( 'keydown', swiper.a11y.onEnterOrSpaceKey );
}
if ( $prevEl ) {
$prevEl.off( 'keydown', swiper.a11y.onEnterOrSpaceKey );
} // Pagination
if (
swiper.pagination &&
swiper.params.pagination.clickable &&
swiper.pagination.bullets &&
swiper.pagination.bullets.length
) {
swiper.pagination.$el.off(
'keydown',
classesToSelector( swiper.params.pagination.bulletClass ),
swiper.a11y.onEnterOrSpaceKey
);
}
},
};
var A11y$1 = {
name: 'a11y',
params: {
a11y: {
enabled: true,
notificationClass: 'swiper-notification',
prevSlideMessage: 'Previous slide',
nextSlideMessage: 'Next slide',
firstSlideMessage: 'This is the first slide',
lastSlideMessage: 'This is the last slide',
paginationBulletMessage: 'Go to slide {{index}}',
slideLabelMessage: '{{index}} / {{slidesLength}}',
containerMessage: null,
containerRoleDescriptionMessage: null,
itemRoleDescriptionMessage: null,
slideRole: 'group',
},
},
create: function create() {
var swiper = this;
bindModuleMethods( swiper, {
a11y: _extends( {}, A11y, {
liveRegion: $(
'<span class="' +
swiper.params.a11y.notificationClass +
'" aria-live="assertive" aria-atomic="true"></span>'
),
} ),
} );
},
on: {
afterInit: function afterInit( swiper ) {
if ( ! swiper.params.a11y.enabled ) return;
swiper.a11y.init();
swiper.a11y.updateNavigation();
},
toEdge: function toEdge( swiper ) {
if ( ! swiper.params.a11y.enabled ) return;
swiper.a11y.updateNavigation();
},
fromEdge: function fromEdge( swiper ) {
if ( ! swiper.params.a11y.enabled ) return;
swiper.a11y.updateNavigation();
},
paginationUpdate: function paginationUpdate( swiper ) {
if ( ! swiper.params.a11y.enabled ) return;
swiper.a11y.updatePagination();
},
destroy: function destroy( swiper ) {
if ( ! swiper.params.a11y.enabled ) return;
swiper.a11y.destroy();
},
},
};
// Swiper Class
var components = [ Navigation$1, Pagination$1, Zoom$1, A11y$1 ];
Swiper.use( components );
return Swiper;
} );
//# sourceMappingURL=swiper-bundle.js.map