/* * attention: the "eval" devtool has been used (maybe by default in mode: "development"). * this devtool is neither made for production nor for readable output files. * it uses "eval()" calls to create a separate source file in the browser devtools. * if you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * if you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (function() { // webpackbootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./js/build/module/count/index.js": /*!****************************************!*\ !*** ./js/build/module/count/index.js ***! \****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ count; }\n/* harmony export */ });\nfunction count(_ref) {\n var node = _ref.node,\n _ref$start = _ref.start,\n start = _ref$start === void 0 ? 0 : _ref$start,\n _ref$end = _ref.end,\n end = _ref$end === void 0 ? node.innerhtml : _ref$end,\n _ref$interval = _ref.interval,\n interval = _ref$interval === void 0 ? 0 : _ref$interval,\n _ref$limittime = _ref.limittime,\n limittime = _ref$limittime === void 0 ? 0 : _ref$limittime;\n // 每帧所需的时间(ms)\n // 按照mdn介绍,通常是每秒60帧\n var frametime = 1000 / 60; // 帧数\n\n var frameamount; // 步长\n // 即每次的累加值,默认: 1\n\n var framestep = 1; // 计数器\n // 当指定interval时,计数器才起作用\n // 作用:用于与interval比较,等于interval时,执行回调,然后清零重新计数,达到控制速度的效果\n\n var counter = 0; // 如果指定了limittime,则重新计算步长\n\n if (limittime && !interval) {\n var length = end - start; // 指定时间内可以完成多少帧\n\n frameamount = limittime / frametime; // 帧数与真实长度取两者之间最小值\n\n if (frameamount > length) {\n frameamount = length;\n }\n\n framestep = math.round((end - start) / frameamount);\n } // 帧的回调函数\n\n\n function step() {\n var req; // 方式1和2的公共逻辑部分\n\n function commonlogic() {\n start += framestep; // 防止最后一次累加时出现数字越界的情况\n\n if (start >= end) {\n node.innerhtml = end;\n } else {\n node.innerhtml = start;\n window.cancelanimationframe(req);\n req = window.requestanimationframe(step);\n }\n } // 方式1:按时间间隔\n\n\n if (interval !== 0) {\n counter++;\n\n if (counter === interval) {\n commonlogic();\n counter = 0;\n } else {\n window.cancelanimationframe(req);\n req = window.requestanimationframe(step);\n } // 方式2:按指定时间\n\n } else {\n if (start < end) {\n commonlogic();\n }\n }\n }\n\n window.requestanimationframe(step);\n}\n\n//# sourceurl=webpack://xiangtoujituan2022/./js/build/module/count/index.js?"); /***/ }), /***/ "./js/build/module/swiper5/index.js": /*!******************************************!*\ !*** ./js/build/module/swiper5/index.js ***! \******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return __webpack_default_export__; }\n/* harmony export */ });\nfunction _inherits(subclass, superclass) { if (typeof superclass !== \"function\" && superclass !== null) { throw new typeerror(\"super expression must either be null or a function\"); } subclass.prototype = object.create(superclass && superclass.prototype, { constructor: { value: subclass, writable: true, configurable: true } }); object.defineproperty(subclass, \"prototype\", { writable: false }); if (superclass) _setprototypeof(subclass, superclass); }\n\nfunction _setprototypeof(o, p) { _setprototypeof = object.setprototypeof ? object.setprototypeof.bind() : function _setprototypeof(o, p) { o.__proto__ = p; return o; }; return _setprototypeof(o, p); }\n\nfunction _createsuper(derived) { var hasnativereflectconstruct = _isnativereflectconstruct(); return function _createsuperinternal() { var super = _getprototypeof(derived), result; if (hasnativereflectconstruct) { var newtarget = _getprototypeof(this).constructor; result = reflect.construct(super, arguments, newtarget); } else { result = super.apply(this, arguments); } return _possibleconstructorreturn(this, result); }; }\n\nfunction _possibleconstructorreturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new typeerror(\"derived constructors may only return object or undefined\"); } return _assertthisinitialized(self); }\n\nfunction _assertthisinitialized(self) { if (self === void 0) { throw new referenceerror(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isnativereflectconstruct() { if (typeof reflect === \"undefined\" || !reflect.construct) return false; if (reflect.construct.sham) return false; if (typeof proxy === \"function\") return true; try { boolean.prototype.valueof.call(reflect.construct(boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getprototypeof(o) { _getprototypeof = object.setprototypeof ? object.getprototypeof.bind() : function _getprototypeof(o) { return o.__proto__ || object.getprototypeof(o); }; return _getprototypeof(o); }\n\nfunction _defineproperty(obj, key, value) { if (key in obj) { object.defineproperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _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); } }\n\nfunction _createclass(constructor, protoprops, staticprops) { if (protoprops) _defineproperties(constructor.prototype, protoprops); if (staticprops) _defineproperties(constructor, staticprops); object.defineproperty(constructor, \"prototype\", { writable: false }); return constructor; }\n\nfunction _classcallcheck(instance, constructor) { if (!(instance instanceof constructor)) { throw new typeerror(\"cannot call a class as a function\"); } }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof symbol && \"symbol\" == typeof symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof symbol && obj.constructor === symbol && obj !== symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * swiper 5.4.5\n * most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * copyright 2014-2020 vladimir kharlampidi\n *\n * released under the mit license\n *\n * released on: june 16, 2020\n */\n\n/**\n * ssr window 2.0.0\n * better handling for window object in ssr environment\n * https://github.com/nolimits4web/ssr-window\n *\n * copyright 2020, vladimir kharlampidi\n *\n * licensed under mit\n *\n * released on: may 12, 2020\n */\n\n/* eslint-disable no-param-reassign */\nfunction isobject(obj) {\n return obj !== null && _typeof(obj) === 'object' && 'constructor' in obj && obj.constructor === object;\n}\n\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n\n if (src === void 0) {\n src = {};\n }\n\n object.keys(src).foreach(function (key) {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isobject(src[key]) && isobject(target[key]) && object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrdocument = {\n body: {},\n addeventlistener: function addeventlistener() {},\n removeeventlistener: function removeeventlistener() {},\n activeelement: {\n blur: function blur() {},\n nodename: ''\n },\n queryselector: function queryselector() {\n return null;\n },\n queryselectorall: function queryselectorall() {\n return [];\n },\n getelementbyid: function getelementbyid() {\n return null;\n },\n createevent: function createevent() {\n return {\n initevent: function initevent() {}\n };\n },\n createelement: function createelement() {\n return {\n children: [],\n childnodes: [],\n style: {},\n setattribute: function setattribute() {},\n getelementsbytagname: function getelementsbytagname() {\n return [];\n }\n };\n },\n createelementns: function createelementns() {\n return {};\n },\n importnode: function importnode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nextend(doc, ssrdocument);\nvar win = typeof window !== 'undefined' ? window : {};\nvar ssrwindow = {\n document: ssrdocument,\n navigator: {\n useragent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replacestate: function replacestate() {},\n pushstate: function pushstate() {},\n go: function go() {},\n back: function back() {}\n },\n customevent: function customevent() {\n return this;\n },\n addeventlistener: function addeventlistener() {},\n removeeventlistener: function removeeventlistener() {},\n getcomputedstyle: function getcomputedstyle() {\n return {\n getpropertyvalue: function getpropertyvalue() {\n return '';\n }\n };\n },\n image: function image() {},\n date: function date() {},\n screen: {},\n settimeout: function settimeout() {},\n cleartimeout: function cleartimeout() {},\n matchmedia: function matchmedia() {\n return {};\n }\n};\nextend(win, ssrwindow);\n/**\n * dom7 2.1.5\n * minimalistic javascript library for dom manipulation, with a jquery-compatible api\n * http://framework7.io/docs/dom.html\n *\n * copyright 2020, vladimir kharlampidi\n * the idangero.us\n * http://www.idangero.us/\n *\n * licensed under mit\n *\n * released on: may 15, 2020\n */\n\nvar dom7 = /*#__pure__*/_createclass(function dom7(arr) {\n _classcallcheck(this, dom7);\n\n var self = this; // create array-like object\n\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n\n self.length = arr.length; // return collection with methods\n\n return this;\n});\n\nfunction $(selector, context) {\n var arr = [];\n var i = 0;\n\n if (selector && !context) {\n if (selector instanceof dom7) {\n return selector;\n }\n }\n\n if (selector) {\n // string\n if (typeof selector === 'string') {\n var els;\n var tempparent;\n\n var _html = selector.trim();\n\n if (_html.indexof('<') >= 0 && _html.indexof('>') >= 0) {\n var tocreate = 'div';\n if (_html.indexof(':~]/)) {\n // pure id selector\n els = [doc.getelementbyid(selector.trim().split('#')[1])];\n } else {\n // other selectors\n els = (context || doc).queryselectorall(selector.trim());\n }\n\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) arr.push(els[i]);\n }\n }\n } else if (selector.nodetype || selector === win || selector === doc) {\n // node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodetype) {\n // array of elements or instance of dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n\n return new dom7(arr);\n}\n\n$.fn = dom7.prototype;\n$.class = dom7;\n$.dom7 = dom7;\n\nfunction unique(arr) {\n var uniquearray = [];\n\n for (var i = 0; i < arr.length; i += 1) {\n if (uniquearray.indexof(arr[i]) === -1) uniquearray.push(arr[i]);\n }\n\n return uniquearray;\n} // classes and attributes\n\n\nfunction addclass(classname) {\n if (typeof classname === 'undefined') {\n return this;\n }\n\n var classes = classname.split(' ');\n\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classlist !== 'undefined') this[j].classlist.add(classes[i]);\n }\n }\n\n return this;\n}\n\nfunction removeclass(classname) {\n var classes = classname.split(' ');\n\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classlist !== 'undefined') this[j].classlist.remove(classes[i]);\n }\n }\n\n return this;\n}\n\nfunction hasclass(classname) {\n if (!this[0]) return false;\n return this[0].classlist.contains(classname);\n}\n\nfunction toggleclass(classname) {\n var classes = classname.split(' ');\n\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classlist !== 'undefined') this[j].classlist.toggle(classes[i]);\n }\n }\n\n return this;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // get attr\n if (this[0]) return this[0].getattribute(attrs);\n return undefined;\n } // set attrs\n\n\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // string\n this[i].setattribute(attrs, value);\n } else {\n // object\n // eslint-disable-next-line\n for (var attrname in attrs) {\n this[i][attrname] = attrs[attrname];\n this[i].setattribute(attrname, attrs[attrname]);\n }\n }\n }\n\n return this;\n} // eslint-disable-next-line\n\n\nfunction removeattr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeattribute(attr);\n }\n\n return this;\n}\n\nfunction data(key, value) {\n var el;\n\n if (typeof value === 'undefined') {\n el = this[0]; // get value\n\n if (el) {\n if (el.dom7elementdatastorage && key in el.dom7elementdatastorage) {\n return el.dom7elementdatastorage[key];\n }\n\n var datakey = el.getattribute(\"data-\".concat(key));\n\n if (datakey) {\n return datakey;\n }\n\n return undefined;\n }\n\n return undefined;\n } // set value\n\n\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7elementdatastorage) el.dom7elementdatastorage = {};\n el.dom7elementdatastorage[key] = value;\n }\n\n return this;\n} // transforms\n// eslint-disable-next-line\n\n\nfunction transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n var elstyle = this[i].style;\n elstyle.webkittransform = transform;\n elstyle.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n if (typeof duration !== 'string') {\n duration = \"\".concat(duration, \"ms\"); // eslint-disable-line\n }\n\n for (var i = 0; i < this.length; i += 1) {\n var elstyle = this[i].style;\n elstyle.webkittransitionduration = duration;\n elstyle.transitionduration = duration;\n }\n\n return this;\n} // events\n\n\nfunction on() {\n for (var _len = arguments.length, args = new array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var eventtype = args[0],\n targetselector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventtype = args[0];\n listener = args[1];\n capture = args[2];\n targetselector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleliveevent(e) {\n var target = e.target;\n if (!target) return;\n var eventdata = e.target.dom7eventdata || [];\n\n if (eventdata.indexof(e) < 0) {\n eventdata.unshift(e);\n }\n\n if ($(target).is(targetselector)) listener.apply(target, eventdata);else {\n var _parents = $(target).parents(); // eslint-disable-line\n\n\n for (var k = 0; k < _parents.length; k += 1) {\n if ($(_parents[k]).is(targetselector)) listener.apply(_parents[k], eventdata);\n }\n }\n }\n\n function handleevent(e) {\n var eventdata = e && e.target ? e.target.dom7eventdata || [] : [];\n\n if (eventdata.indexof(e) < 0) {\n eventdata.unshift(e);\n }\n\n listener.apply(this, eventdata);\n }\n\n var events = eventtype.split(' ');\n var j;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (!targetselector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7listeners) el.dom7listeners = {};\n if (!el.dom7listeners[event]) el.dom7listeners[event] = [];\n el.dom7listeners[event].push({\n listener: listener,\n proxylistener: handleevent\n });\n el.addeventlistener(event, handleevent, capture);\n }\n } else {\n // live events\n for (j = 0; j < events.length; j += 1) {\n var _event = events[j];\n if (!el.dom7livelisteners) el.dom7livelisteners = {};\n if (!el.dom7livelisteners[_event]) el.dom7livelisteners[_event] = [];\n\n el.dom7livelisteners[_event].push({\n listener: listener,\n proxylistener: handleliveevent\n });\n\n el.addeventlistener(_event, handleliveevent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off() {\n for (var _len2 = arguments.length, args = new array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var eventtype = args[0],\n targetselector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventtype = args[0];\n listener = args[1];\n capture = args[2];\n targetselector = undefined;\n }\n\n if (!capture) capture = false;\n var events = eventtype.split(' ');\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = void 0;\n\n if (!targetselector && el.dom7listeners) {\n handlers = el.dom7listeners[event];\n } else if (targetselector && el.dom7livelisteners) {\n handlers = el.dom7livelisteners[event];\n }\n\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeeventlistener(event, handler.proxylistener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeeventlistener(event, handler.proxylistener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeeventlistener(event, handler.proxylistener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction trigger() {\n for (var _len3 = arguments.length, args = new array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var events = args[0].split(' ');\n var eventdata = args[1];\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var evt = void 0;\n\n try {\n evt = new win.customevent(event, {\n detail: eventdata,\n bubbles: true,\n cancelable: true\n });\n } catch (e) {\n evt = doc.createevent('event');\n evt.initevent(event, true, true);\n evt.detail = eventdata;\n } // eslint-disable-next-line\n\n\n el.dom7eventdata = args.filter(function (data, dataindex) {\n return dataindex > 0;\n });\n el.dispatchevent(evt);\n el.dom7eventdata = [];\n delete el.dom7eventdata;\n }\n }\n\n return this;\n}\n\nfunction transitionend(callback) {\n var events = ['webkittransitionend', 'transitionend'];\n var dom = this;\n var i;\n\n function firecallback(e) {\n /* jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], firecallback);\n }\n }\n\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], firecallback);\n }\n }\n\n return this;\n}\n\nfunction outerwidth(includemargins) {\n if (this.length > 0) {\n if (includemargins) {\n // eslint-disable-next-line\n var _styles = this.styles();\n\n return this[0].offsetwidth + parsefloat(_styles.getpropertyvalue('margin-right')) + parsefloat(_styles.getpropertyvalue('margin-left'));\n }\n\n return this[0].offsetwidth;\n }\n\n return null;\n}\n\nfunction outerheight(includemargins) {\n if (this.length > 0) {\n if (includemargins) {\n // eslint-disable-next-line\n var _styles2 = this.styles();\n\n return this[0].offsetheight + parsefloat(_styles2.getpropertyvalue('margin-top')) + parsefloat(_styles2.getpropertyvalue('margin-bottom'));\n }\n\n return this[0].offsetheight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getboundingclientrect();\n var body = doc.body;\n var clienttop = el.clienttop || body.clienttop || 0;\n var clientleft = el.clientleft || body.clientleft || 0;\n var scrolltop = el === win ? win.scrolly : el.scrolltop;\n var scrollleft = el === win ? win.scrollx : el.scrollleft;\n return {\n top: box.top + scrolltop - clienttop,\n left: box.left + scrollleft - clientleft\n };\n }\n\n return null;\n}\n\nfunction styles() {\n if (this[0]) return win.getcomputedstyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n var i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return win.getcomputedstyle(this[0], null).getpropertyvalue(props);\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n} // iterate over the collection passing elements to `callback`\n\n\nfunction each(callback) {\n // don't bother continuing without a callback\n if (!callback) return this; // iterate over the current collection\n\n for (var i = 0; i < this.length; i += 1) {\n // if the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // end the loop early\n return this;\n }\n } // return `this` to allow chained dom operations\n\n\n return this;\n}\n\nfunction filter(callback) {\n var matcheditems = [];\n var dom = this;\n\n for (var i = 0; i < dom.length; i += 1) {\n if (callback.call(dom[i], i, dom[i])) matcheditems.push(dom[i]);\n }\n\n return new dom7(matcheditems);\n} // eslint-disable-next-line\n\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerhtml : undefined;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerhtml = html;\n }\n\n return this;\n} // eslint-disable-next-line\n\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textcontent.trim();\n }\n\n return null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textcontent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n var el = this[0];\n var comparewith;\n var i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);else if (el.webkitmatchesselector) return el.webkitmatchesselector(selector);else if (el.msmatchesselector) return el.msmatchesselector(selector);\n comparewith = $(selector);\n\n for (i = 0; i < comparewith.length; i += 1) {\n if (comparewith[i] === el) return true;\n }\n\n return false;\n } else if (selector === doc) return el === doc;else if (selector === win) return el === win;\n\n if (selector.nodetype || selector instanceof dom7) {\n comparewith = selector.nodetype ? [selector] : selector;\n\n for (i = 0; i < comparewith.length; i += 1) {\n if (comparewith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n var child = this[0];\n var i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previoussibling) !== null) {\n if (child.nodetype === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n} // eslint-disable-next-line\n\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n var returnindex;\n\n if (index > length - 1) {\n return new dom7([]);\n }\n\n if (index < 0) {\n returnindex = length + index;\n if (returnindex < 0) return new dom7([]);\n return new dom7([this[returnindex]]);\n }\n\n return new dom7([this[index]]);\n}\n\nfunction append() {\n var newchild;\n\n for (var k = 0; k < arguments.length; k += 1) {\n newchild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newchild === 'string') {\n var tempdiv = doc.createelement('div');\n tempdiv.innerhtml = newchild;\n\n while (tempdiv.firstchild) {\n this[i].appendchild(tempdiv.firstchild);\n }\n } else if (newchild instanceof dom7) {\n for (var j = 0; j < newchild.length; j += 1) {\n this[i].appendchild(newchild[j]);\n }\n } else {\n this[i].appendchild(newchild);\n }\n }\n }\n\n return this;\n}\n\nfunction prepend(newchild) {\n var i;\n var j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newchild === 'string') {\n var tempdiv = doc.createelement('div');\n tempdiv.innerhtml = newchild;\n\n for (j = tempdiv.childnodes.length - 1; j >= 0; j -= 1) {\n this[i].insertbefore(tempdiv.childnodes[j], this[i].childnodes[0]);\n }\n } else if (newchild instanceof dom7) {\n for (j = 0; j < newchild.length; j += 1) {\n this[i].insertbefore(newchild[j], this[i].childnodes[0]);\n }\n } else {\n this[i].insertbefore(newchild, this[i].childnodes[0]);\n }\n }\n\n return this;\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextelementsibling && $(this[0].nextelementsibling).is(selector)) {\n return new dom7([this[0].nextelementsibling]);\n }\n\n return new dom7([]);\n }\n\n if (this[0].nextelementsibling) return new dom7([this[0].nextelementsibling]);\n return new dom7([]);\n }\n\n return new dom7([]);\n}\n\nfunction nextall(selector) {\n var nextels = [];\n var el = this[0];\n if (!el) return new dom7([]);\n\n while (el.nextelementsibling) {\n var _next = el.nextelementsibling; // eslint-disable-line\n\n if (selector) {\n if ($(_next).is(selector)) nextels.push(_next);\n } else nextels.push(_next);\n\n el = _next;\n }\n\n return new dom7(nextels);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n\n if (selector) {\n if (el.previouselementsibling && $(el.previouselementsibling).is(selector)) {\n return new dom7([el.previouselementsibling]);\n }\n\n return new dom7([]);\n }\n\n if (el.previouselementsibling) return new dom7([el.previouselementsibling]);\n return new dom7([]);\n }\n\n return new dom7([]);\n}\n\nfunction prevall(selector) {\n var prevels = [];\n var el = this[0];\n if (!el) return new dom7([]);\n\n while (el.previouselementsibling) {\n var _prev = el.previouselementsibling; // eslint-disable-line\n\n if (selector) {\n if ($(_prev).is(selector)) prevels.push(_prev);\n } else prevels.push(_prev);\n\n el = _prev;\n }\n\n return new dom7(prevels);\n}\n\nfunction parent(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentnode !== null) {\n if (selector) {\n if ($(this[i].parentnode).is(selector)) parents.push(this[i].parentnode);\n } else {\n parents.push(this[i].parentnode);\n }\n }\n }\n\n return $(unique(parents));\n}\n\nfunction parents(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var _parent = this[i].parentnode; // eslint-disable-line\n\n while (_parent) {\n if (selector) {\n if ($(_parent).is(selector)) parents.push(_parent);\n } else {\n parents.push(_parent);\n }\n\n _parent = _parent.parentnode;\n }\n }\n\n return $(unique(parents));\n}\n\nfunction closest(selector) {\n var closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return new dom7([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n var foundelements = [];\n\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].queryselectorall(selector);\n\n for (var j = 0; j < found.length; j += 1) {\n foundelements.push(found[j]);\n }\n }\n\n return new dom7(foundelements);\n}\n\nfunction children(selector) {\n var children = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var childnodes = this[i].childnodes;\n\n for (var j = 0; j < childnodes.length; j += 1) {\n if (!selector) {\n if (childnodes[j].nodetype === 1) children.push(childnodes[j]);\n } else if (childnodes[j].nodetype === 1 && $(childnodes[j]).is(selector)) {\n children.push(childnodes[j]);\n }\n }\n }\n\n return new dom7(unique(children));\n}\n\nfunction remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentnode) this[i].parentnode.removechild(this[i]);\n }\n\n return this;\n}\n\nfunction add() {\n var dom = this;\n var i;\n var j;\n\n for (var _len4 = arguments.length, args = new array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n for (i = 0; i < args.length; i += 1) {\n var toadd = $(args[i]);\n\n for (j = 0; j < toadd.length; j += 1) {\n dom[dom.length] = toadd[j];\n dom.length += 1;\n }\n }\n\n return dom;\n}\n\nvar methods = {\n addclass: addclass,\n removeclass: removeclass,\n hasclass: hasclass,\n toggleclass: toggleclass,\n attr: attr,\n removeattr: removeattr,\n data: data,\n transform: transform,\n transition: transition,\n on: on,\n off: off,\n trigger: trigger,\n transitionend: transitionend,\n outerwidth: outerwidth,\n outerheight: outerheight,\n offset: offset,\n css: css,\n each: each,\n html: html,\n text: text,\n is: is,\n index: index,\n eq: eq,\n append: append,\n prepend: prepend,\n next: next,\n nextall: nextall,\n prev: prev,\n prevall: prevall,\n parent: parent,\n parents: parents,\n closest: closest,\n find: find,\n children: children,\n filter: filter,\n remove: remove,\n add: add,\n styles: styles\n};\nobject.keys(methods).foreach(function (methodname) {\n $.fn[methodname] = $.fn[methodname] || methods[methodname];\n});\nvar utils = {\n deleteprops: function deleteprops(obj) {\n var object = obj;\n object.keys(object).foreach(function (key) {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n },\n nexttick: function nexttick(callback) {\n var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return settimeout(callback, delay);\n },\n now: function now() {\n return date.now();\n },\n gettranslate: function gettranslate(el) {\n var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n var matrix;\n var curtransform;\n var transformmatrix;\n var curstyle = win.getcomputedstyle(el, null);\n\n if (win.webkitcssmatrix) {\n curtransform = curstyle.transform || curstyle.webkittransform;\n\n if (curtransform.split(',').length > 6) {\n curtransform = curtransform.split(', ').map(function (a) {\n return a.replace(',', '.');\n }).join(', ');\n } // some old versions of webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformmatrix = new win.webkitcssmatrix(curtransform === 'none' ? '' : curtransform);\n } else {\n transformmatrix = curstyle.moztransform || curstyle.otransform || curstyle.mstransform || curstyle.mstransform || curstyle.transform || curstyle.getpropertyvalue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformmatrix.tostring().split(',');\n }\n\n if (axis === 'x') {\n // latest chrome and webkits fix\n if (win.webkitcssmatrix) curtransform = transformmatrix.m41; // crazy ie10 matrix\n else if (matrix.length === 16) curtransform = parsefloat(matrix[12]); // normal browsers\n else curtransform = parsefloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // latest chrome and webkits fix\n if (win.webkitcssmatrix) curtransform = transformmatrix.m42; // crazy ie10 matrix\n else if (matrix.length === 16) curtransform = parsefloat(matrix[13]); // normal browsers\n else curtransform = parsefloat(matrix[5]);\n }\n\n return curtransform || 0;\n },\n parseurlquery: function parseurlquery(url) {\n var query = {};\n var urltoparse = url || win.location.href;\n var i;\n var params;\n var param;\n var length;\n\n if (typeof urltoparse === 'string' && urltoparse.length) {\n urltoparse = urltoparse.indexof('?') > -1 ? urltoparse.replace(/\\s*\\?/, '') : '';\n params = urltoparse.split('&').filter(function (paramspart) {\n return paramspart !== '';\n });\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\s+/g, '').split('=');\n query[decodeuricomponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeuricomponent(param[1]) || '';\n }\n }\n\n return query;\n },\n isobject: function isobject(o) {\n return _typeof(o) === 'object' && o !== null && o.constructor && o.constructor === object;\n },\n extend: function extend() {\n var to = object(arguments.length <= 0 ? undefined : arguments[0]);\n\n for (var i = 1; i < arguments.length; i += 1) {\n var nextsource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextsource !== undefined && nextsource !== null) {\n var keysarray = object.keys(object(nextsource));\n\n for (var nextindex = 0, len = keysarray.length; nextindex < len; nextindex += 1) {\n var nextkey = keysarray[nextindex];\n var desc = object.getownpropertydescriptor(nextsource, nextkey);\n\n if (desc !== undefined && desc.enumerable) {\n if (utils.isobject(to[nextkey]) && utils.isobject(nextsource[nextkey])) {\n utils.extend(to[nextkey], nextsource[nextkey]);\n } else if (!utils.isobject(to[nextkey]) && utils.isobject(nextsource[nextkey])) {\n to[nextkey] = {};\n utils.extend(to[nextkey], nextsource[nextkey]);\n } else {\n to[nextkey] = nextsource[nextkey];\n }\n }\n }\n }\n }\n\n return to;\n }\n};\n\nvar support = function support() {\n return {\n touch: !!('ontouchstart' in win || win.documenttouch && doc instanceof win.documenttouch),\n pointerevents: !!win.pointerevent && 'maxtouchpoints' in win.navigator && win.navigator.maxtouchpoints >= 0,\n observer: function checkobserver() {\n return 'mutationobserver' in win || 'webkitmutationobserver' in win;\n }(),\n passivelistener: function checkpassivelistener() {\n var supportspassive = false;\n\n try {\n var opts = object.defineproperty({}, 'passive', {\n // eslint-disable-next-line\n get: function get() {\n supportspassive = true;\n }\n });\n win.addeventlistener('testpassivelistener', null, opts);\n } catch (e) {// no support\n }\n\n return supportspassive;\n }(),\n gestures: function checkgestures() {\n return 'ongesturestart' in win;\n }()\n };\n}();\n\nvar swiperclass = /*#__pure__*/function () {\n function swiperclass() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classcallcheck(this, swiperclass);\n\n var self = this;\n self.params = params; // events\n\n self.eventslisteners = {};\n\n if (self.params && self.params.on) {\n object.keys(self.params.on).foreach(function (eventname) {\n self.on(eventname, self.params.on[eventname]);\n });\n }\n }\n\n _createclass(swiperclass, [{\n key: \"on\",\n value: function on(events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n var method = priority ? 'unshift' : 'push';\n events.split(' ').foreach(function (event) {\n if (!self.eventslisteners[event]) self.eventslisteners[event] = [];\n self.eventslisteners[event][method](handler);\n });\n return self;\n }\n }, {\n key: \"once\",\n value: function once(events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n\n function oncehandler() {\n self.off(events, oncehandler);\n\n if (oncehandler.f7proxy) {\n delete oncehandler.f7proxy;\n }\n\n for (var _len5 = arguments.length, args = new array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n handler.apply(self, args);\n }\n\n oncehandler.f7proxy = handler;\n return self.on(events, oncehandler, priority);\n }\n }, {\n key: \"off\",\n value: function off(events, handler) {\n var self = this;\n if (!self.eventslisteners) return self;\n events.split(' ').foreach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventslisteners[event] = [];\n } else if (self.eventslisteners[event] && self.eventslisteners[event].length) {\n self.eventslisteners[event].foreach(function (eventhandler, index) {\n if (eventhandler === handler || eventhandler.f7proxy && eventhandler.f7proxy === handler) {\n self.eventslisteners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n }\n }, {\n key: \"emit\",\n value: function emit() {\n var self = this;\n if (!self.eventslisteners) return self;\n var events;\n var data;\n var context;\n\n for (var _len6 = arguments.length, args = new array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n if (typeof args[0] === 'string' || array.isarray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n var eventsarray = array.isarray(events) ? events : events.split(' ');\n eventsarray.foreach(function (event) {\n if (self.eventslisteners && self.eventslisteners[event]) {\n var handlers = [];\n self.eventslisteners[event].foreach(function (eventhandler) {\n handlers.push(eventhandler);\n });\n handlers.foreach(function (eventhandler) {\n eventhandler.apply(context, data);\n });\n }\n });\n return self;\n }\n }, {\n key: \"usemodulesparams\",\n value: function usemodulesparams(instanceparams) {\n var instance = this;\n if (!instance.modules) return;\n object.keys(instance.modules).foreach(function (modulename) {\n var module = instance.modules[modulename]; // extend params\n\n if (module.params) {\n utils.extend(instanceparams, module.params);\n }\n });\n }\n }, {\n key: \"usemodules\",\n value: function usemodules() {\n var modulesparams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var instance = this;\n if (!instance.modules) return;\n object.keys(instance.modules).foreach(function (modulename) {\n var module = instance.modules[modulename];\n var moduleparams = modulesparams[modulename] || {}; // extend instance methods and props\n\n if (module.instance) {\n object.keys(module.instance).foreach(function (modulepropname) {\n var moduleprop = module.instance[modulepropname];\n\n if (typeof moduleprop === 'function') {\n instance[modulepropname] = moduleprop.bind(instance);\n } else {\n instance[modulepropname] = moduleprop;\n }\n });\n } // add event listeners\n\n\n if (module.on && instance.on) {\n object.keys(module.on).foreach(function (moduleeventname) {\n instance.on(moduleeventname, module.on[moduleeventname]);\n });\n } // module create callback\n\n\n if (module.create) {\n module.create.bind(instance)(moduleparams);\n }\n });\n }\n }], [{\n key: \"components\",\n set: function set(components) {\n var class = this;\n if (!class.use) return;\n class.use(components);\n }\n }, {\n key: \"installmodule\",\n value: function installmodule(module) {\n var class = this;\n if (!class.prototype.modules) class.prototype.modules = {};\n var name = module.name || \"\".concat(object.keys(class.prototype.modules).length, \"_\").concat(utils.now());\n class.prototype.modules[name] = module; // prototype\n\n if (module.proto) {\n object.keys(module.proto).foreach(function (key) {\n class.prototype[key] = module.proto[key];\n });\n } // class\n\n\n if (module.static) {\n object.keys(module.static).foreach(function (key) {\n class[key] = module.static[key];\n });\n } // callback\n\n\n if (module.install) {\n for (var _len7 = arguments.length, params = new array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n params[_key7 - 1] = arguments[_key7];\n }\n\n module.install.apply(class, params);\n }\n\n return class;\n }\n }, {\n key: \"use\",\n value: function use(module) {\n var class = this;\n\n if (array.isarray(module)) {\n module.foreach(function (m) {\n return class.installmodule(m);\n });\n return class;\n }\n\n for (var _len8 = arguments.length, params = new array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {\n params[_key8 - 1] = arguments[_key8];\n }\n\n return class.installmodule.apply(class, [module].concat(params));\n }\n }]);\n\n return swiperclass;\n}();\n\nfunction updatesize() {\n var swiper = this;\n var width;\n var height;\n var $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientwidth;\n }\n\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientheight;\n }\n\n if (width === 0 && swiper.ishorizontal() || height === 0 && swiper.isvertical()) {\n return;\n } // subtract paddings\n\n\n width = width - parseint($el.css('padding-left'), 10) - parseint($el.css('padding-right'), 10);\n height = height - parseint($el.css('padding-top'), 10) - parseint($el.css('padding-bottom'), 10);\n utils.extend(swiper, {\n width: width,\n height: height,\n size: swiper.ishorizontal() ? width : height\n });\n}\n\nfunction updateslides() {\n var swiper = this;\n var params = swiper.params;\n var $wrapperel = swiper.$wrapperel,\n swipersize = swiper.size,\n rtl = swiper.rtltranslate,\n wrongrtl = swiper.wrongrtl;\n var isvirtual = swiper.virtual && params.virtual.enabled;\n var previousslideslength = isvirtual ? swiper.virtual.slides.length : swiper.slides.length;\n var slides = $wrapperel.children(\".\".concat(swiper.params.slideclass));\n var slideslength = isvirtual ? swiper.virtual.slides.length : slides.length;\n var snapgrid = [];\n var slidesgrid = [];\n var slidessizesgrid = [];\n\n function slidesformargin(slideindex) {\n if (!params.cssmode) return true;\n\n if (slideindex === slides.length - 1) {\n return false;\n }\n\n return true;\n }\n\n var offsetbefore = params.slidesoffsetbefore;\n\n if (typeof offsetbefore === 'function') {\n offsetbefore = params.slidesoffsetbefore.call(swiper);\n }\n\n var offsetafter = params.slidesoffsetafter;\n\n if (typeof offsetafter === 'function') {\n offsetafter = params.slidesoffsetafter.call(swiper);\n }\n\n var previoussnapgridlength = swiper.snapgrid.length;\n var previousslidesgridlength = swiper.snapgrid.length;\n var spacebetween = params.spacebetween;\n var slideposition = -offsetbefore;\n var prevslidesize = 0;\n var index = 0;\n\n if (typeof swipersize === 'undefined') {\n return;\n }\n\n if (typeof spacebetween === 'string' && spacebetween.indexof('%') >= 0) {\n spacebetween = parsefloat(spacebetween.replace('%', '')) / 100 * swipersize;\n }\n\n swiper.virtualsize = -spacebetween; // reset margins\n\n if (rtl) slides.css({\n marginleft: '',\n margintop: ''\n });else slides.css({\n marginright: '',\n marginbottom: ''\n });\n var slidesnumbereventorows;\n\n if (params.slidespercolumn > 1) {\n if (math.floor(slideslength / params.slidespercolumn) === slideslength / swiper.params.slidespercolumn) {\n slidesnumbereventorows = slideslength;\n } else {\n slidesnumbereventorows = math.ceil(slideslength / params.slidespercolumn) * params.slidespercolumn;\n }\n\n if (params.slidesperview !== 'auto' && params.slidespercolumnfill === 'row') {\n slidesnumbereventorows = math.max(slidesnumbereventorows, params.slidesperview * params.slidespercolumn);\n }\n } // calc slides\n\n\n var slidesize;\n var slidespercolumn = params.slidespercolumn;\n var slidesperrow = slidesnumbereventorows / slidespercolumn;\n var numfullcolumns = math.floor(slideslength / params.slidespercolumn);\n\n for (var i = 0; i < slideslength; i += 1) {\n slidesize = 0;\n\n var _slide = slides.eq(i);\n\n if (params.slidespercolumn > 1) {\n // set slides order\n var newslideorderindex = void 0;\n var column = void 0;\n var row = void 0;\n\n if (params.slidespercolumnfill === 'row' && params.slidespergroup > 1) {\n var groupindex = math.floor(i / (params.slidespergroup * params.slidespercolumn));\n var slideindexingroup = i - params.slidespercolumn * params.slidespergroup * groupindex;\n var columnsingroup = groupindex === 0 ? params.slidespergroup : math.min(math.ceil((slideslength - groupindex * slidespercolumn * params.slidespergroup) / slidespercolumn), params.slidespergroup);\n row = math.floor(slideindexingroup / columnsingroup);\n column = slideindexingroup - row * columnsingroup + groupindex * params.slidespergroup;\n newslideorderindex = column + row * slidesnumbereventorows / slidespercolumn;\n\n _slide.css({\n '-webkit-box-ordinal-group': newslideorderindex,\n '-moz-box-ordinal-group': newslideorderindex,\n '-ms-flex-order': newslideorderindex,\n '-webkit-order': newslideorderindex,\n order: newslideorderindex\n });\n } else if (params.slidespercolumnfill === 'column') {\n column = math.floor(i / slidespercolumn);\n row = i - column * slidespercolumn;\n\n if (column > numfullcolumns || column === numfullcolumns && row === slidespercolumn - 1) {\n row += 1;\n\n if (row >= slidespercolumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = math.floor(i / slidesperrow);\n column = i - row * slidesperrow;\n }\n\n _slide.css(\"margin-\".concat(swiper.ishorizontal() ? 'top' : 'left'), row !== 0 && params.spacebetween && \"\".concat(params.spacebetween, \"px\"));\n }\n\n if (_slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesperview === 'auto') {\n var slidestyles = win.getcomputedstyle(_slide[0], null);\n var currenttransform = _slide[0].style.transform;\n var currentwebkittransform = _slide[0].style.webkittransform;\n\n if (currenttransform) {\n _slide[0].style.transform = 'none';\n }\n\n if (currentwebkittransform) {\n _slide[0].style.webkittransform = 'none';\n }\n\n if (params.roundlengths) {\n slidesize = swiper.ishorizontal() ? _slide.outerwidth(true) : _slide.outerheight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.ishorizontal()) {\n var width = parsefloat(slidestyles.getpropertyvalue('width'));\n var paddingleft = parsefloat(slidestyles.getpropertyvalue('padding-left'));\n var paddingright = parsefloat(slidestyles.getpropertyvalue('padding-right'));\n var marginleft = parsefloat(slidestyles.getpropertyvalue('margin-left'));\n var marginright = parsefloat(slidestyles.getpropertyvalue('margin-right'));\n var boxsizing = slidestyles.getpropertyvalue('box-sizing');\n\n if (boxsizing && boxsizing === 'border-box') {\n slidesize = width + marginleft + marginright;\n } else {\n slidesize = width + paddingleft + paddingright + marginleft + marginright;\n }\n } else {\n var height = parsefloat(slidestyles.getpropertyvalue('height'));\n var paddingtop = parsefloat(slidestyles.getpropertyvalue('padding-top'));\n var paddingbottom = parsefloat(slidestyles.getpropertyvalue('padding-bottom'));\n var margintop = parsefloat(slidestyles.getpropertyvalue('margin-top'));\n var marginbottom = parsefloat(slidestyles.getpropertyvalue('margin-bottom'));\n\n var _boxsizing = slidestyles.getpropertyvalue('box-sizing');\n\n if (_boxsizing && _boxsizing === 'border-box') {\n slidesize = height + margintop + marginbottom;\n } else {\n slidesize = height + paddingtop + paddingbottom + margintop + marginbottom;\n }\n }\n }\n\n if (currenttransform) {\n _slide[0].style.transform = currenttransform;\n }\n\n if (currentwebkittransform) {\n _slide[0].style.webkittransform = currentwebkittransform;\n }\n\n if (params.roundlengths) slidesize = math.floor(slidesize);\n } else {\n slidesize = (swipersize - (params.slidesperview - 1) * spacebetween) / params.slidesperview;\n if (params.roundlengths) slidesize = math.floor(slidesize);\n\n if (slides[i]) {\n if (swiper.ishorizontal()) {\n slides[i].style.width = \"\".concat(slidesize, \"px\");\n } else {\n slides[i].style.height = \"\".concat(slidesize, \"px\");\n }\n }\n }\n\n if (slides[i]) {\n slides[i].swiperslidesize = slidesize;\n }\n\n slidessizesgrid.push(slidesize);\n\n if (params.centeredslides) {\n slideposition = slideposition + slidesize / 2 + prevslidesize / 2 + spacebetween;\n if (prevslidesize === 0 && i !== 0) slideposition = slideposition - swipersize / 2 - spacebetween;\n if (i === 0) slideposition = slideposition - swipersize / 2 - spacebetween;\n if (math.abs(slideposition) < 1 / 1000) slideposition = 0;\n if (params.roundlengths) slideposition = math.floor(slideposition);\n if (index % params.slidespergroup === 0) snapgrid.push(slideposition);\n slidesgrid.push(slideposition);\n } else {\n if (params.roundlengths) slideposition = math.floor(slideposition);\n if ((index - math.min(swiper.params.slidespergroupskip, index)) % swiper.params.slidespergroup === 0) snapgrid.push(slideposition);\n slidesgrid.push(slideposition);\n slideposition = slideposition + slidesize + spacebetween;\n }\n\n swiper.virtualsize += slidesize + spacebetween;\n prevslidesize = slidesize;\n index += 1;\n }\n\n swiper.virtualsize = math.max(swiper.virtualsize, swipersize) + offsetafter;\n var newslidesgrid;\n\n if (rtl && wrongrtl && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperel.css({\n width: \"\".concat(swiper.virtualsize + params.spacebetween, \"px\")\n });\n }\n\n if (params.setwrappersize) {\n if (swiper.ishorizontal()) $wrapperel.css({\n width: \"\".concat(swiper.virtualsize + params.spacebetween, \"px\")\n });else $wrapperel.css({\n height: \"\".concat(swiper.virtualsize + params.spacebetween, \"px\")\n });\n }\n\n if (params.slidespercolumn > 1) {\n swiper.virtualsize = (slidesize + params.spacebetween) * slidesnumbereventorows;\n swiper.virtualsize = math.ceil(swiper.virtualsize / params.slidespercolumn) - params.spacebetween;\n if (swiper.ishorizontal()) $wrapperel.css({\n width: \"\".concat(swiper.virtualsize + params.spacebetween, \"px\")\n });else $wrapperel.css({\n height: \"\".concat(swiper.virtualsize + params.spacebetween, \"px\")\n });\n\n if (params.centeredslides) {\n newslidesgrid = [];\n\n for (var _i = 0; _i < snapgrid.length; _i += 1) {\n var slidesgriditem = snapgrid[_i];\n if (params.roundlengths) slidesgriditem = math.floor(slidesgriditem);\n if (snapgrid[_i] < swiper.virtualsize + snapgrid[0]) newslidesgrid.push(slidesgriditem);\n }\n\n snapgrid = newslidesgrid;\n }\n } // remove last grid elements depending on width\n\n\n if (!params.centeredslides) {\n newslidesgrid = [];\n\n for (var _i2 = 0; _i2 < snapgrid.length; _i2 += 1) {\n var _slidesgriditem = snapgrid[_i2];\n if (params.roundlengths) _slidesgriditem = math.floor(_slidesgriditem);\n\n if (snapgrid[_i2] <= swiper.virtualsize - swipersize) {\n newslidesgrid.push(_slidesgriditem);\n }\n }\n\n snapgrid = newslidesgrid;\n\n if (math.floor(swiper.virtualsize - swipersize) - math.floor(snapgrid[snapgrid.length - 1]) > 1) {\n snapgrid.push(swiper.virtualsize - swipersize);\n }\n }\n\n if (snapgrid.length === 0) snapgrid = [0];\n\n if (params.spacebetween !== 0) {\n if (swiper.ishorizontal()) {\n if (rtl) slides.filter(slidesformargin).css({\n marginleft: \"\".concat(spacebetween, \"px\")\n });else slides.filter(slidesformargin).css({\n marginright: \"\".concat(spacebetween, \"px\")\n });\n } else slides.filter(slidesformargin).css({\n marginbottom: \"\".concat(spacebetween, \"px\")\n });\n }\n\n if (params.centeredslides && params.centeredslidesbounds) {\n var allslidessize = 0;\n slidessizesgrid.foreach(function (slidesizevalue) {\n allslidessize += slidesizevalue + (params.spacebetween ? params.spacebetween : 0);\n });\n allslidessize -= params.spacebetween;\n var maxsnap = allslidessize - swipersize;\n snapgrid = snapgrid.map(function (snap) {\n if (snap < 0) return -offsetbefore;\n if (snap > maxsnap) return maxsnap + offsetafter;\n return snap;\n });\n }\n\n if (params.centerinsufficientslides) {\n var _allslidessize = 0;\n slidessizesgrid.foreach(function (slidesizevalue) {\n _allslidessize += slidesizevalue + (params.spacebetween ? params.spacebetween : 0);\n });\n _allslidessize -= params.spacebetween;\n\n if (_allslidessize < swipersize) {\n var allslidesoffset = (swipersize - _allslidessize) / 2;\n snapgrid.foreach(function (snap, snapindex) {\n snapgrid[snapindex] = snap - allslidesoffset;\n });\n slidesgrid.foreach(function (snap, snapindex) {\n slidesgrid[snapindex] = snap + allslidesoffset;\n });\n }\n }\n\n utils.extend(swiper, {\n slides: slides,\n snapgrid: snapgrid,\n slidesgrid: slidesgrid,\n slidessizesgrid: slidessizesgrid\n });\n\n if (slideslength !== previousslideslength) {\n swiper.emit('slideslengthchange');\n }\n\n if (snapgrid.length !== previoussnapgridlength) {\n if (swiper.params.watchoverflow) swiper.checkoverflow();\n swiper.emit('snapgridlengthchange');\n }\n\n if (slidesgrid.length !== previousslidesgridlength) {\n swiper.emit('slidesgridlengthchange');\n }\n\n if (params.watchslidesprogress || params.watchslidesvisibility) {\n swiper.updateslidesoffset();\n }\n}\n\nfunction updateautoheight(speed) {\n var swiper = this;\n var activeslides = [];\n var newheight = 0;\n var i;\n\n if (typeof speed === 'number') {\n swiper.settransition(speed);\n } else if (speed === true) {\n swiper.settransition(swiper.params.speed);\n } // find slides currently in view\n\n\n if (swiper.params.slidesperview !== 'auto' && swiper.params.slidesperview > 1) {\n if (swiper.params.centeredslides) {\n swiper.visibleslides.each(function (index, slide) {\n activeslides.push(slide);\n });\n } else {\n for (i = 0; i < math.ceil(swiper.params.slidesperview); i += 1) {\n var _index = swiper.activeindex + i;\n\n if (_index > swiper.slides.length) break;\n activeslides.push(swiper.slides.eq(_index)[0]);\n }\n }\n } else {\n activeslides.push(swiper.slides.eq(swiper.activeindex)[0]);\n } // find new height from highest slide in view\n\n\n for (i = 0; i < activeslides.length; i += 1) {\n if (typeof activeslides[i] !== 'undefined') {\n var height = activeslides[i].offsetheight;\n newheight = height > newheight ? height : newheight;\n }\n } // update height\n\n\n if (newheight) swiper.$wrapperel.css('height', \"\".concat(newheight, \"px\"));\n}\n\nfunction updateslidesoffset() {\n var swiper = this;\n var slides = swiper.slides;\n\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperslideoffset = swiper.ishorizontal() ? slides[i].offsetleft : slides[i].offsettop;\n }\n}\n\nfunction updateslidesprogress() {\n var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this && this.translate || 0;\n var swiper = this;\n var params = swiper.params;\n var slides = swiper.slides,\n rtl = swiper.rtltranslate;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperslideoffset === 'undefined') swiper.updateslidesoffset();\n var offsetcenter = -translate;\n if (rtl) offsetcenter = translate; // visible slides\n\n slides.removeclass(params.slidevisibleclass);\n swiper.visibleslidesindexes = [];\n swiper.visibleslides = [];\n\n for (var i = 0; i < slides.length; i += 1) {\n var _slide2 = slides[i];\n var slideprogress = (offsetcenter + (params.centeredslides ? swiper.mintranslate() : 0) - _slide2.swiperslideoffset) / (_slide2.swiperslidesize + params.spacebetween);\n\n if (params.watchslidesvisibility || params.centeredslides && params.autoheight) {\n var slidebefore = -(offsetcenter - _slide2.swiperslideoffset);\n var slideafter = slidebefore + swiper.slidessizesgrid[i];\n var isvisible = slidebefore >= 0 && slidebefore < swiper.size - 1 || slideafter > 1 && slideafter <= swiper.size || slidebefore <= 0 && slideafter >= swiper.size;\n\n if (isvisible) {\n swiper.visibleslides.push(_slide2);\n swiper.visibleslidesindexes.push(i);\n slides.eq(i).addclass(params.slidevisibleclass);\n }\n }\n\n _slide2.progress = rtl ? -slideprogress : slideprogress;\n }\n\n swiper.visibleslides = $(swiper.visibleslides);\n}\n\nfunction updateprogress(translate) {\n var swiper = this;\n\n if (typeof translate === 'undefined') {\n var multiplier = swiper.rtltranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n var params = swiper.params;\n var translatesdiff = swiper.maxtranslate() - swiper.mintranslate();\n var progress = swiper.progress,\n isbeginning = swiper.isbeginning,\n isend = swiper.isend;\n var wasbeginning = isbeginning;\n var wasend = isend;\n\n if (translatesdiff === 0) {\n progress = 0;\n isbeginning = true;\n isend = true;\n } else {\n progress = (translate - swiper.mintranslate()) / translatesdiff;\n isbeginning = progress <= 0;\n isend = progress >= 1;\n }\n\n utils.extend(swiper, {\n progress: progress,\n isbeginning: isbeginning,\n isend: isend\n });\n if (params.watchslidesprogress || params.watchslidesvisibility || params.centeredslides && params.autoheight) swiper.updateslidesprogress(translate);\n\n if (isbeginning && !wasbeginning) {\n swiper.emit('reachbeginning toedge');\n }\n\n if (isend && !wasend) {\n swiper.emit('reachend toedge');\n }\n\n if (wasbeginning && !isbeginning || wasend && !isend) {\n swiper.emit('fromedge');\n }\n\n swiper.emit('progress', progress);\n}\n\nfunction updateslidesclasses() {\n var swiper = this;\n var slides = swiper.slides,\n params = swiper.params,\n $wrapperel = swiper.$wrapperel,\n activeindex = swiper.activeindex,\n realindex = swiper.realindex;\n var isvirtual = swiper.virtual && params.virtual.enabled;\n slides.removeclass(\"\".concat(params.slideactiveclass, \" \").concat(params.slidenextclass, \" \").concat(params.slideprevclass, \" \").concat(params.slideduplicateactiveclass, \" \").concat(params.slideduplicatenextclass, \" \").concat(params.slideduplicateprevclass));\n var activeslide;\n\n if (isvirtual) {\n activeslide = swiper.$wrapperel.find(\".\".concat(params.slideclass, \"[data-swiper-slide-index=\\\"\").concat(activeindex, \"\\\"]\"));\n } else {\n activeslide = slides.eq(activeindex);\n } // active classes\n\n\n activeslide.addclass(params.slideactiveclass);\n\n if (params.loop) {\n // duplicate to all looped slides\n if (activeslide.hasclass(params.slideduplicateclass)) {\n $wrapperel.children(\".\".concat(params.slideclass, \":not(.\").concat(params.slideduplicateclass, \")[data-swiper-slide-index=\\\"\").concat(realindex, \"\\\"]\")).addclass(params.slideduplicateactiveclass);\n } else {\n $wrapperel.children(\".\".concat(params.slideclass, \".\").concat(params.slideduplicateclass, \"[data-swiper-slide-index=\\\"\").concat(realindex, \"\\\"]\")).addclass(params.slideduplicateactiveclass);\n }\n } // next slide\n\n\n var nextslide = activeslide.nextall(\".\".concat(params.slideclass)).eq(0).addclass(params.slidenextclass);\n\n if (params.loop && nextslide.length === 0) {\n nextslide = slides.eq(0);\n nextslide.addclass(params.slidenextclass);\n } // prev slide\n\n\n var prevslide = activeslide.prevall(\".\".concat(params.slideclass)).eq(0).addclass(params.slideprevclass);\n\n if (params.loop && prevslide.length === 0) {\n prevslide = slides.eq(-1);\n prevslide.addclass(params.slideprevclass);\n }\n\n if (params.loop) {\n // duplicate to all looped slides\n if (nextslide.hasclass(params.slideduplicateclass)) {\n $wrapperel.children(\".\".concat(params.slideclass, \":not(.\").concat(params.slideduplicateclass, \")[data-swiper-slide-index=\\\"\").concat(nextslide.attr('data-swiper-slide-index'), \"\\\"]\")).addclass(params.slideduplicatenextclass);\n } else {\n $wrapperel.children(\".\".concat(params.slideclass, \".\").concat(params.slideduplicateclass, \"[data-swiper-slide-index=\\\"\").concat(nextslide.attr('data-swiper-slide-index'), \"\\\"]\")).addclass(params.slideduplicatenextclass);\n }\n\n if (prevslide.hasclass(params.slideduplicateclass)) {\n $wrapperel.children(\".\".concat(params.slideclass, \":not(.\").concat(params.slideduplicateclass, \")[data-swiper-slide-index=\\\"\").concat(prevslide.attr('data-swiper-slide-index'), \"\\\"]\")).addclass(params.slideduplicateprevclass);\n } else {\n $wrapperel.children(\".\".concat(params.slideclass, \".\").concat(params.slideduplicateclass, \"[data-swiper-slide-index=\\\"\").concat(prevslide.attr('data-swiper-slide-index'), \"\\\"]\")).addclass(params.slideduplicateprevclass);\n }\n }\n}\n\nfunction updateactiveindex(newactiveindex) {\n var swiper = this;\n var translate = swiper.rtltranslate ? swiper.translate : -swiper.translate;\n var slidesgrid = swiper.slidesgrid,\n snapgrid = swiper.snapgrid,\n params = swiper.params,\n previousindex = swiper.activeindex,\n previousrealindex = swiper.realindex,\n previoussnapindex = swiper.snapindex;\n var activeindex = newactiveindex;\n var snapindex;\n\n if (typeof activeindex === 'undefined') {\n for (var i = 0; i < slidesgrid.length; i += 1) {\n if (typeof slidesgrid[i + 1] !== 'undefined') {\n if (translate >= slidesgrid[i] && translate < slidesgrid[i + 1] - (slidesgrid[i + 1] - slidesgrid[i]) / 2) {\n activeindex = i;\n } else if (translate >= slidesgrid[i] && translate < slidesgrid[i + 1]) {\n activeindex = i + 1;\n }\n } else if (translate >= slidesgrid[i]) {\n activeindex = i;\n }\n } // normalize slideindex\n\n\n if (params.normalizeslideindex) {\n if (activeindex < 0 || typeof activeindex === 'undefined') activeindex = 0;\n }\n }\n\n if (snapgrid.indexof(translate) >= 0) {\n snapindex = snapgrid.indexof(translate);\n } else {\n var skip = math.min(params.slidespergroupskip, activeindex);\n snapindex = skip + math.floor((activeindex - skip) / params.slidespergroup);\n }\n\n if (snapindex >= snapgrid.length) snapindex = snapgrid.length - 1;\n\n if (activeindex === previousindex) {\n if (snapindex !== previoussnapindex) {\n swiper.snapindex = snapindex;\n swiper.emit('snapindexchange');\n }\n\n return;\n } // get real index\n\n\n var realindex = parseint(swiper.slides.eq(activeindex).attr('data-swiper-slide-index') || activeindex, 10);\n utils.extend(swiper, {\n snapindex: snapindex,\n realindex: realindex,\n previousindex: previousindex,\n activeindex: activeindex\n });\n swiper.emit('activeindexchange');\n swiper.emit('snapindexchange');\n\n if (previousrealindex !== realindex) {\n swiper.emit('realindexchange');\n }\n\n if (swiper.initialized || swiper.params.runcallbacksoninit) {\n swiper.emit('slidechange');\n }\n}\n\nfunction updateclickedslide(e) {\n var swiper = this;\n var params = swiper.params;\n var slide = $(e.target).closest(\".\".concat(params.slideclass))[0];\n var slidefound = false;\n\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) slidefound = true;\n }\n }\n\n if (slide && slidefound) {\n swiper.clickedslide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedindex = parseint($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedindex = $(slide).index();\n }\n } else {\n swiper.clickedslide = undefined;\n swiper.clickedindex = undefined;\n return;\n }\n\n if (params.slidetoclickedslide && swiper.clickedindex !== undefined && swiper.clickedindex !== swiper.activeindex) {\n swiper.slidetoclickedslide();\n }\n}\n\nvar update = {\n updatesize: updatesize,\n updateslides: updateslides,\n updateautoheight: updateautoheight,\n updateslidesoffset: updateslidesoffset,\n updateslidesprogress: updateslidesprogress,\n updateprogress: updateprogress,\n updateslidesclasses: updateslidesclasses,\n updateactiveindex: updateactiveindex,\n updateclickedslide: updateclickedslide\n};\n\nfunction gettranslate() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.ishorizontal() ? 'x' : 'y';\n var swiper = this;\n var params = swiper.params,\n rtl = swiper.rtltranslate,\n translate = swiper.translate,\n $wrapperel = swiper.$wrapperel;\n\n if (params.virtualtranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssmode) {\n return translate;\n }\n\n var currenttranslate = utils.gettranslate($wrapperel[0], axis);\n if (rtl) currenttranslate = -currenttranslate;\n return currenttranslate || 0;\n}\n\nfunction settranslate(translate, bycontroller) {\n var swiper = this;\n var rtl = swiper.rtltranslate,\n params = swiper.params,\n $wrapperel = swiper.$wrapperel,\n wrapperel = swiper.wrapperel,\n progress = swiper.progress;\n var x = 0;\n var y = 0;\n var z = 0;\n\n if (swiper.ishorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundlengths) {\n x = math.floor(x);\n y = math.floor(y);\n }\n\n if (params.cssmode) {\n wrapperel[swiper.ishorizontal() ? 'scrollleft' : 'scrolltop'] = swiper.ishorizontal() ? -x : -y;\n } else if (!params.virtualtranslate) {\n $wrapperel.transform(\"translate3d(\".concat(x, \"px, \").concat(y, \"px, \").concat(z, \"px)\"));\n }\n\n swiper.previoustranslate = swiper.translate;\n swiper.translate = swiper.ishorizontal() ? x : y; // check if we need to update progress\n\n var newprogress;\n var translatesdiff = swiper.maxtranslate() - swiper.mintranslate();\n\n if (translatesdiff === 0) {\n newprogress = 0;\n } else {\n newprogress = (translate - swiper.mintranslate()) / translatesdiff;\n }\n\n if (newprogress !== progress) {\n swiper.updateprogress(translate);\n }\n\n swiper.emit('settranslate', swiper.translate, bycontroller);\n}\n\nfunction mintranslate() {\n return -this.snapgrid[0];\n}\n\nfunction maxtranslate() {\n return -this.snapgrid[this.snapgrid.length - 1];\n}\n\nfunction translateto() {\n var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;\n var runcallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var translatebounds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var internal = arguments.length > 4 ? arguments[4] : undefined;\n var swiper = this;\n var params = swiper.params,\n wrapperel = swiper.wrapperel;\n\n if (swiper.animating && params.preventinteractionontransition) {\n return false;\n }\n\n var mintranslate = swiper.mintranslate();\n var maxtranslate = swiper.maxtranslate();\n var newtranslate;\n if (translatebounds && translate > mintranslate) newtranslate = mintranslate;else if (translatebounds && translate < maxtranslate) newtranslate = maxtranslate;else newtranslate = translate; // update progress\n\n swiper.updateprogress(newtranslate);\n\n if (params.cssmode) {\n var ish = swiper.ishorizontal();\n\n if (speed === 0) {\n wrapperel[ish ? 'scrollleft' : 'scrolltop'] = -newtranslate;\n } else {\n // eslint-disable-next-line\n if (wrapperel.scrollto) {\n var _wrapperel$scrollto;\n\n wrapperel.scrollto((_wrapperel$scrollto = {}, _defineproperty(_wrapperel$scrollto, ish ? 'left' : 'top', -newtranslate), _defineproperty(_wrapperel$scrollto, \"behavior\", 'smooth'), _wrapperel$scrollto));\n } else {\n wrapperel[ish ? 'scrollleft' : 'scrolltop'] = -newtranslate;\n }\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.settransition(0);\n swiper.settranslate(newtranslate);\n\n if (runcallbacks) {\n swiper.emit('beforetransitionstart', speed, internal);\n swiper.emit('transitionend');\n }\n } else {\n swiper.settransition(speed);\n swiper.settranslate(newtranslate);\n\n if (runcallbacks) {\n swiper.emit('beforetransitionstart', speed, internal);\n swiper.emit('transitionstart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.ontranslatetowrappertransitionend) {\n swiper.ontranslatetowrappertransitionend = function transitionend(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperel[0].removeeventlistener('transitionend', swiper.ontranslatetowrappertransitionend);\n swiper.$wrapperel[0].removeeventlistener('webkittransitionend', swiper.ontranslatetowrappertransitionend);\n swiper.ontranslatetowrappertransitionend = null;\n delete swiper.ontranslatetowrappertransitionend;\n\n if (runcallbacks) {\n swiper.emit('transitionend');\n }\n };\n }\n\n swiper.$wrapperel[0].addeventlistener('transitionend', swiper.ontranslatetowrappertransitionend);\n swiper.$wrapperel[0].addeventlistener('webkittransitionend', swiper.ontranslatetowrappertransitionend);\n }\n }\n\n return true;\n}\n\nvar translate = {\n gettranslate: gettranslate,\n settranslate: settranslate,\n mintranslate: mintranslate,\n maxtranslate: maxtranslate,\n translateto: translateto\n};\n\nfunction settransition(duration, bycontroller) {\n var swiper = this;\n\n if (!swiper.params.cssmode) {\n swiper.$wrapperel.transition(duration);\n }\n\n swiper.emit('settransition', duration, bycontroller);\n}\n\nfunction transitionstart() {\n var runcallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var direction = arguments.length > 1 ? arguments[1] : undefined;\n var swiper = this;\n var activeindex = swiper.activeindex,\n params = swiper.params,\n previousindex = swiper.previousindex;\n if (params.cssmode) return;\n\n if (params.autoheight) {\n swiper.updateautoheight();\n }\n\n var dir = direction;\n\n if (!dir) {\n if (activeindex > previousindex) dir = 'next';else if (activeindex < previousindex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit('transitionstart');\n\n if (runcallbacks && activeindex !== previousindex) {\n if (dir === 'reset') {\n swiper.emit('slideresettransitionstart');\n return;\n }\n\n swiper.emit('slidechangetransitionstart');\n\n if (dir === 'next') {\n swiper.emit('slidenexttransitionstart');\n } else {\n swiper.emit('slideprevtransitionstart');\n }\n }\n}\n\nfunction transitionend$1() {\n var runcallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var direction = arguments.length > 1 ? arguments[1] : undefined;\n var swiper = this;\n var activeindex = swiper.activeindex,\n previousindex = swiper.previousindex,\n params = swiper.params;\n swiper.animating = false;\n if (params.cssmode) return;\n swiper.settransition(0);\n var dir = direction;\n\n if (!dir) {\n if (activeindex > previousindex) dir = 'next';else if (activeindex < previousindex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit('transitionend');\n\n if (runcallbacks && activeindex !== previousindex) {\n if (dir === 'reset') {\n swiper.emit('slideresettransitionend');\n return;\n }\n\n swiper.emit('slidechangetransitionend');\n\n if (dir === 'next') {\n swiper.emit('slidenexttransitionend');\n } else {\n swiper.emit('slideprevtransitionend');\n }\n }\n}\n\nvar transition$1 = {\n settransition: settransition,\n transitionstart: transitionstart,\n transitionend: transitionend$1\n};\n\nfunction slideto() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;\n var runcallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var internal = arguments.length > 3 ? arguments[3] : undefined;\n var swiper = this;\n var slideindex = index;\n if (slideindex < 0) slideindex = 0;\n var params = swiper.params,\n snapgrid = swiper.snapgrid,\n slidesgrid = swiper.slidesgrid,\n previousindex = swiper.previousindex,\n activeindex = swiper.activeindex,\n rtl = swiper.rtltranslate,\n wrapperel = swiper.wrapperel;\n\n if (swiper.animating && params.preventinteractionontransition) {\n return false;\n }\n\n var skip = math.min(swiper.params.slidespergroupskip, slideindex);\n var snapindex = skip + math.floor((slideindex - skip) / swiper.params.slidespergroup);\n if (snapindex >= snapgrid.length) snapindex = snapgrid.length - 1;\n\n if ((activeindex || params.initialslide || 0) === (previousindex || 0) && runcallbacks) {\n swiper.emit('beforeslidechangestart');\n }\n\n var translate = -snapgrid[snapindex]; // update progress\n\n swiper.updateprogress(translate); // normalize slideindex\n\n if (params.normalizeslideindex) {\n for (var i = 0; i < slidesgrid.length; i += 1) {\n if (-math.floor(translate * 100) >= math.floor(slidesgrid[i] * 100)) {\n slideindex = i;\n }\n }\n } // directions locks\n\n\n if (swiper.initialized && slideindex !== activeindex) {\n if (!swiper.allowslidenext && translate < swiper.translate && translate < swiper.mintranslate()) {\n return false;\n }\n\n if (!swiper.allowslideprev && translate > swiper.translate && translate > swiper.maxtranslate()) {\n if ((activeindex || 0) !== slideindex) return false;\n }\n }\n\n var direction;\n if (slideindex > activeindex) direction = 'next';else if (slideindex < activeindex) direction = 'prev';else direction = 'reset'; // update index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateactiveindex(slideindex); // update height\n\n if (params.autoheight) {\n swiper.updateautoheight();\n }\n\n swiper.updateslidesclasses();\n\n if (params.effect !== 'slide') {\n swiper.settranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionstart(runcallbacks, direction);\n swiper.transitionend(runcallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssmode) {\n var ish = swiper.ishorizontal();\n var t = -translate;\n\n if (rtl) {\n t = wrapperel.scrollwidth - wrapperel.offsetwidth - t;\n }\n\n if (speed === 0) {\n wrapperel[ish ? 'scrollleft' : 'scrolltop'] = t;\n } else {\n // eslint-disable-next-line\n if (wrapperel.scrollto) {\n var _wrapperel$scrollto2;\n\n wrapperel.scrollto((_wrapperel$scrollto2 = {}, _defineproperty(_wrapperel$scrollto2, ish ? 'left' : 'top', t), _defineproperty(_wrapperel$scrollto2, \"behavior\", 'smooth'), _wrapperel$scrollto2));\n } else {\n wrapperel[ish ? 'scrollleft' : 'scrolltop'] = t;\n }\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.settransition(0);\n swiper.settranslate(translate);\n swiper.updateactiveindex(slideindex);\n swiper.updateslidesclasses();\n swiper.emit('beforetransitionstart', speed, internal);\n swiper.transitionstart(runcallbacks, direction);\n swiper.transitionend(runcallbacks, direction);\n } else {\n swiper.settransition(speed);\n swiper.settranslate(translate);\n swiper.updateactiveindex(slideindex);\n swiper.updateslidesclasses();\n swiper.emit('beforetransitionstart', speed, internal);\n swiper.transitionstart(runcallbacks, direction);\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onslidetowrappertransitionend) {\n swiper.onslidetowrappertransitionend = function transitionend(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperel[0].removeeventlistener('transitionend', swiper.onslidetowrappertransitionend);\n swiper.$wrapperel[0].removeeventlistener('webkittransitionend', swiper.onslidetowrappertransitionend);\n swiper.onslidetowrappertransitionend = null;\n delete swiper.onslidetowrappertransitionend;\n swiper.transitionend(runcallbacks, direction);\n };\n }\n\n swiper.$wrapperel[0].addeventlistener('transitionend', swiper.onslidetowrappertransitionend);\n swiper.$wrapperel[0].addeventlistener('webkittransitionend', swiper.onslidetowrappertransitionend);\n }\n }\n\n return true;\n}\n\nfunction slidetoloop() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;\n var runcallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var internal = arguments.length > 3 ? arguments[3] : undefined;\n var swiper = this;\n var newindex = index;\n\n if (swiper.params.loop) {\n newindex += swiper.loopedslides;\n }\n\n return swiper.slideto(newindex, speed, runcallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */\n\n\nfunction slidenext() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runcallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var swiper = this;\n var params = swiper.params,\n animating = swiper.animating;\n var increment = swiper.activeindex < params.slidespergroupskip ? 1 : params.slidespergroup;\n\n if (params.loop) {\n if (animating) return false;\n swiper.loopfix(); // eslint-disable-next-line\n\n swiper._clientleft = swiper.$wrapperel[0].clientleft;\n }\n\n return swiper.slideto(swiper.activeindex + increment, speed, runcallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */\n\n\nfunction slideprev() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runcallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var swiper = this;\n var params = swiper.params,\n animating = swiper.animating,\n snapgrid = swiper.snapgrid,\n slidesgrid = swiper.slidesgrid,\n rtltranslate = swiper.rtltranslate;\n\n if (params.loop) {\n if (animating) return false;\n swiper.loopfix(); // eslint-disable-next-line\n\n swiper._clientleft = swiper.$wrapperel[0].clientleft;\n }\n\n var translate = rtltranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -math.floor(math.abs(val));\n return math.floor(val);\n }\n\n var normalizedtranslate = normalize(translate);\n var normalizedsnapgrid = snapgrid.map(function (val) {\n return normalize(val);\n });\n var normalizedslidesgrid = slidesgrid.map(function (val) {\n return normalize(val);\n });\n var currentsnap = snapgrid[normalizedsnapgrid.indexof(normalizedtranslate)];\n var prevsnap = snapgrid[normalizedsnapgrid.indexof(normalizedtranslate) - 1];\n\n if (typeof prevsnap === 'undefined' && params.cssmode) {\n snapgrid.foreach(function (snap) {\n if (!prevsnap && normalizedtranslate >= snap) prevsnap = snap;\n });\n }\n\n var previndex;\n\n if (typeof prevsnap !== 'undefined') {\n previndex = slidesgrid.indexof(prevsnap);\n if (previndex < 0) previndex = swiper.activeindex - 1;\n }\n\n return swiper.slideto(previndex, speed, runcallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */\n\n\nfunction slidereset() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runcallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var swiper = this;\n return swiper.slideto(swiper.activeindex, speed, runcallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */\n\n\nfunction slidetoclosest() {\n var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var runcallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var threshold = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5;\n var swiper = this;\n var index = swiper.activeindex;\n var skip = math.min(swiper.params.slidespergroupskip, index);\n var snapindex = skip + math.floor((index - skip) / swiper.params.slidespergroup);\n var translate = swiper.rtltranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapgrid[snapindex]) {\n // the current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n var currentsnap = swiper.snapgrid[snapindex];\n var nextsnap = swiper.snapgrid[snapindex + 1];\n\n if (translate - currentsnap > (nextsnap - currentsnap) * threshold) {\n index += swiper.params.slidespergroup;\n }\n } else {\n // the current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n var prevsnap = swiper.snapgrid[snapindex - 1];\n var _currentsnap = swiper.snapgrid[snapindex];\n\n if (translate - prevsnap <= (_currentsnap - prevsnap) * threshold) {\n index -= swiper.params.slidespergroup;\n }\n }\n\n index = math.max(index, 0);\n index = math.min(index, swiper.slidesgrid.length - 1);\n return swiper.slideto(index, speed, runcallbacks, internal);\n}\n\nfunction slidetoclickedslide() {\n var swiper = this;\n var params = swiper.params,\n $wrapperel = swiper.$wrapperel;\n var slidesperview = params.slidesperview === 'auto' ? swiper.slidesperviewdynamic() : params.slidesperview;\n var slidetoindex = swiper.clickedindex;\n var realindex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realindex = parseint($(swiper.clickedslide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredslides) {\n if (slidetoindex < swiper.loopedslides - slidesperview / 2 || slidetoindex > swiper.slides.length - swiper.loopedslides + slidesperview / 2) {\n swiper.loopfix();\n slidetoindex = $wrapperel.children(\".\".concat(params.slideclass, \"[data-swiper-slide-index=\\\"\").concat(realindex, \"\\\"]:not(.\").concat(params.slideduplicateclass, \")\")).eq(0).index();\n utils.nexttick(function () {\n swiper.slideto(slidetoindex);\n });\n } else {\n swiper.slideto(slidetoindex);\n }\n } else if (slidetoindex > swiper.slides.length - slidesperview) {\n swiper.loopfix();\n slidetoindex = $wrapperel.children(\".\".concat(params.slideclass, \"[data-swiper-slide-index=\\\"\").concat(realindex, \"\\\"]:not(.\").concat(params.slideduplicateclass, \")\")).eq(0).index();\n utils.nexttick(function () {\n swiper.slideto(slidetoindex);\n });\n } else {\n swiper.slideto(slidetoindex);\n }\n } else {\n swiper.slideto(slidetoindex);\n }\n}\n\nvar slide = {\n slideto: slideto,\n slidetoloop: slidetoloop,\n slidenext: slidenext,\n slideprev: slideprev,\n slidereset: slidereset,\n slidetoclosest: slidetoclosest,\n slidetoclickedslide: slidetoclickedslide\n};\n\nfunction loopcreate() {\n var swiper = this;\n var params = swiper.params,\n $wrapperel = swiper.$wrapperel; // remove duplicated slides\n\n $wrapperel.children(\".\".concat(params.slideclass, \".\").concat(params.slideduplicateclass)).remove();\n var slides = $wrapperel.children(\".\".concat(params.slideclass));\n\n if (params.loopfillgroupwithblank) {\n var blankslidesnum = params.slidespergroup - slides.length % params.slidespergroup;\n\n if (blankslidesnum !== params.slidespergroup) {\n for (var i = 0; i < blankslidesnum; i += 1) {\n var blanknode = $(doc.createelement('div')).addclass(\"\".concat(params.slideclass, \" \").concat(params.slideblankclass));\n $wrapperel.append(blanknode);\n }\n\n slides = $wrapperel.children(\".\".concat(params.slideclass));\n }\n }\n\n if (params.slidesperview === 'auto' && !params.loopedslides) params.loopedslides = slides.length;\n swiper.loopedslides = math.ceil(parsefloat(params.loopedslides || params.slidesperview, 10));\n swiper.loopedslides += params.loopadditionalslides;\n\n if (swiper.loopedslides > slides.length) {\n swiper.loopedslides = slides.length;\n }\n\n var prependslides = [];\n var appendslides = [];\n slides.each(function (index, el) {\n var slide = $(el);\n if (index < swiper.loopedslides) appendslides.push(el);\n if (index < slides.length && index >= slides.length - swiper.loopedslides) prependslides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (var _i3 = 0; _i3 < appendslides.length; _i3 += 1) {\n $wrapperel.append($(appendslides[_i3].clonenode(true)).addclass(params.slideduplicateclass));\n }\n\n for (var _i4 = prependslides.length - 1; _i4 >= 0; _i4 -= 1) {\n $wrapperel.prepend($(prependslides[_i4].clonenode(true)).addclass(params.slideduplicateclass));\n }\n}\n\nfunction loopfix() {\n var swiper = this;\n swiper.emit('beforeloopfix');\n var activeindex = swiper.activeindex,\n slides = swiper.slides,\n loopedslides = swiper.loopedslides,\n allowslideprev = swiper.allowslideprev,\n allowslidenext = swiper.allowslidenext,\n snapgrid = swiper.snapgrid,\n rtl = swiper.rtltranslate;\n var newindex;\n swiper.allowslideprev = true;\n swiper.allowslidenext = true;\n var snaptranslate = -snapgrid[activeindex];\n var diff = snaptranslate - swiper.gettranslate(); // fix for negative oversliding\n\n if (activeindex < loopedslides) {\n newindex = slides.length - loopedslides * 3 + activeindex;\n newindex += loopedslides;\n var slidechanged = swiper.slideto(newindex, 0, false, true);\n\n if (slidechanged && diff !== 0) {\n swiper.settranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeindex >= slides.length - loopedslides) {\n // fix for positive oversliding\n newindex = -slides.length + activeindex + loopedslides;\n newindex += loopedslides;\n\n var _slidechanged = swiper.slideto(newindex, 0, false, true);\n\n if (_slidechanged && diff !== 0) {\n swiper.settranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowslideprev = allowslideprev;\n swiper.allowslidenext = allowslidenext;\n swiper.emit('loopfix');\n}\n\nfunction loopdestroy() {\n var swiper = this;\n var $wrapperel = swiper.$wrapperel,\n params = swiper.params,\n slides = swiper.slides;\n $wrapperel.children(\".\".concat(params.slideclass, \".\").concat(params.slideduplicateclass, \",.\").concat(params.slideclass, \".\").concat(params.slideblankclass)).remove();\n slides.removeattr('data-swiper-slide-index');\n}\n\nvar loop = {\n loopcreate: loopcreate,\n loopfix: loopfix,\n loopdestroy: loopdestroy\n};\n\nfunction setgrabcursor(moving) {\n var swiper = this;\n if (support.touch || !swiper.params.simulatetouch || swiper.params.watchoverflow && swiper.islocked || swiper.params.cssmode) return;\n var el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n\nfunction unsetgrabcursor() {\n var swiper = this;\n if (support.touch || swiper.params.watchoverflow && swiper.islocked || swiper.params.cssmode) return;\n swiper.el.style.cursor = '';\n}\n\nvar grabcursor = {\n setgrabcursor: setgrabcursor,\n unsetgrabcursor: unsetgrabcursor\n};\n\nfunction appendslide(slides) {\n var swiper = this;\n var $wrapperel = swiper.$wrapperel,\n params = swiper.params;\n\n if (params.loop) {\n swiper.loopdestroy();\n }\n\n if (_typeof(slides) === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperel.append(slides[i]);\n }\n } else {\n $wrapperel.append(slides);\n }\n\n if (params.loop) {\n swiper.loopcreate();\n }\n\n if (!(params.observer && support.observer)) {\n swiper.update();\n }\n}\n\nfunction prependslide(slides) {\n var swiper = this;\n var params = swiper.params,\n $wrapperel = swiper.$wrapperel,\n activeindex = swiper.activeindex;\n\n if (params.loop) {\n swiper.loopdestroy();\n }\n\n var newactiveindex = activeindex + 1;\n\n if (_typeof(slides) === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperel.prepend(slides[i]);\n }\n\n newactiveindex = activeindex + slides.length;\n } else {\n $wrapperel.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopcreate();\n }\n\n if (!(params.observer && support.observer)) {\n swiper.update();\n }\n\n swiper.slideto(newactiveindex, 0, false);\n}\n\nfunction addslide(index, slides) {\n var swiper = this;\n var $wrapperel = swiper.$wrapperel,\n params = swiper.params,\n activeindex = swiper.activeindex;\n var activeindexbuffer = activeindex;\n\n if (params.loop) {\n activeindexbuffer -= swiper.loopedslides;\n swiper.loopdestroy();\n swiper.slides = $wrapperel.children(\".\".concat(params.slideclass));\n }\n\n var baselength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependslide(slides);\n return;\n }\n\n if (index >= baselength) {\n swiper.appendslide(slides);\n return;\n }\n\n var newactiveindex = activeindexbuffer > index ? activeindexbuffer + 1 : activeindexbuffer;\n var slidesbuffer = [];\n\n for (var i = baselength - 1; i >= index; i -= 1) {\n var currentslide = swiper.slides.eq(i);\n currentslide.remove();\n slidesbuffer.unshift(currentslide);\n }\n\n if (_typeof(slides) === 'object' && 'length' in slides) {\n for (var _i5 = 0; _i5 < slides.length; _i5 += 1) {\n if (slides[_i5]) $wrapperel.append(slides[_i5]);\n }\n\n newactiveindex = activeindexbuffer > index ? activeindexbuffer + slides.length : activeindexbuffer;\n } else {\n $wrapperel.append(slides);\n }\n\n for (var _i6 = 0; _i6 < slidesbuffer.length; _i6 += 1) {\n $wrapperel.append(slidesbuffer[_i6]);\n }\n\n if (params.loop) {\n swiper.loopcreate();\n }\n\n if (!(params.observer && support.observer)) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideto(newactiveindex + swiper.loopedslides, 0, false);\n } else {\n swiper.slideto(newactiveindex, 0, false);\n }\n}\n\nfunction removeslide(slidesindexes) {\n var swiper = this;\n var params = swiper.params,\n $wrapperel = swiper.$wrapperel,\n activeindex = swiper.activeindex;\n var activeindexbuffer = activeindex;\n\n if (params.loop) {\n activeindexbuffer -= swiper.loopedslides;\n swiper.loopdestroy();\n swiper.slides = $wrapperel.children(\".\".concat(params.slideclass));\n }\n\n var newactiveindex = activeindexbuffer;\n var indextoremove;\n\n if (_typeof(slidesindexes) === 'object' && 'length' in slidesindexes) {\n for (var i = 0; i < slidesindexes.length; i += 1) {\n indextoremove = slidesindexes[i];\n if (swiper.slides[indextoremove]) swiper.slides.eq(indextoremove).remove();\n if (indextoremove < newactiveindex) newactiveindex -= 1;\n }\n\n newactiveindex = math.max(newactiveindex, 0);\n } else {\n indextoremove = slidesindexes;\n if (swiper.slides[indextoremove]) swiper.slides.eq(indextoremove).remove();\n if (indextoremove < newactiveindex) newactiveindex -= 1;\n newactiveindex = math.max(newactiveindex, 0);\n }\n\n if (params.loop) {\n swiper.loopcreate();\n }\n\n if (!(params.observer && support.observer)) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideto(newactiveindex + swiper.loopedslides, 0, false);\n } else {\n swiper.slideto(newactiveindex, 0, false);\n }\n}\n\nfunction removeallslides() {\n var swiper = this;\n var slidesindexes = [];\n\n for (var i = 0; i < swiper.slides.length; i += 1) {\n slidesindexes.push(i);\n }\n\n swiper.removeslide(slidesindexes);\n}\n\nvar manipulation = {\n appendslide: appendslide,\n prependslide: prependslide,\n addslide: addslide,\n removeslide: removeslide,\n removeallslides: removeallslides\n};\n\nvar device = function device() {\n var platform = win.navigator.platform;\n var ua = win.navigator.useragent;\n var device = {\n ios: false,\n android: false,\n androidchrome: false,\n desktop: false,\n iphone: false,\n ipod: false,\n ipad: false,\n edge: false,\n ie: false,\n firefox: false,\n macos: false,\n windows: false,\n cordova: !!(win.cordova || win.phonegap),\n phonegap: !!(win.cordova || win.phonegap),\n electron: false\n };\n var screenwidth = win.screen.width;\n var screenheight = win.screen.height;\n var android = ua.match(/(android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n var ipad = ua.match(/(ipad).*os\\s([\\d_]+)/);\n var ipod = ua.match(/(ipod)(.*os\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iphone\\sos|ios)\\s([\\d_]+)/);\n var ie = ua.indexof('msie ') >= 0 || ua.indexof('trident/') >= 0;\n var edge = ua.indexof('edge/') >= 0;\n var firefox = ua.indexof('gecko/') >= 0 && ua.indexof('firefox/') >= 0;\n var windows = platform === 'win32';\n var electron = ua.tolowercase().indexof('electron') >= 0;\n var macos = platform === 'macintel'; // ipados 13 fix\n\n if (!ipad && macos && support.touch && (screenwidth === 1024 && screenheight === 1366 // pro 12.9\n || screenwidth === 834 && screenheight === 1194 // pro 11\n || screenwidth === 834 && screenheight === 1112 // pro 10.5\n || screenwidth === 768 && screenheight === 1024 // other\n )) {\n ipad = ua.match(/(version)\\/([\\d.]+)/);\n macos = false;\n }\n\n device.ie = ie;\n device.edge = edge;\n device.firefox = firefox; // android\n\n if (android && !windows) {\n device.os = 'android';\n device.osversion = android[2];\n device.android = true;\n device.androidchrome = ua.tolowercase().indexof('chrome') >= 0;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // ios\n\n\n if (iphone && !ipod) {\n device.osversion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n\n if (ipad) {\n device.osversion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n\n if (ipod) {\n device.osversion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.ipod = true;\n } // ios 8+ changed ua\n\n\n if (device.ios && device.osversion && ua.indexof('version/') >= 0) {\n if (device.osversion.split('.')[0] === '10') {\n device.osversion = ua.tolowercase().split('version/')[1].split(' ')[0];\n }\n } // webview\n\n\n device.webview = !!((iphone || ipad || ipod) && (ua.match(/.*applewebkit(?!.*safari)/i) || win.navigator.standalone)) || win.matchmedia && win.matchmedia('(display-mode: standalone)').matches;\n device.webview = device.webview;\n device.standalone = device.webview; // desktop\n\n device.desktop = !(device.ios || device.android) || electron;\n\n if (device.desktop) {\n device.electron = electron;\n device.macos = macos;\n device.windows = windows;\n\n if (device.macos) {\n device.os = 'macos';\n }\n\n if (device.windows) {\n device.os = 'windows';\n }\n } // pixel ratio\n\n\n device.pixelratio = win.devicepixelratio || 1; // export object\n\n return device;\n}();\n\nfunction ontouchstart(event) {\n var swiper = this;\n var data = swiper.toucheventsdata;\n var params = swiper.params,\n touches = swiper.touches;\n\n if (swiper.animating && params.preventinteractionontransition) {\n return;\n }\n\n var e = event;\n if (e.originalevent) e = e.originalevent;\n var $targetel = $(e.target);\n\n if (params.toucheventstarget === 'wrapper') {\n if (!$targetel.closest(swiper.wrapperel).length) return;\n }\n\n data.istouchevent = e.type === 'touchstart';\n if (!data.istouchevent && 'which' in e && e.which === 3) return;\n if (!data.istouchevent && 'button' in e && e.button > 0) return;\n if (data.istouched && data.ismoved) return;\n\n if (params.noswiping && $targetel.closest(params.noswipingselector ? params.noswipingselector : \".\".concat(params.noswipingclass))[0]) {\n swiper.allowclick = true;\n return;\n }\n\n if (params.swipehandler) {\n if (!$targetel.closest(params.swipehandler)[0]) return;\n }\n\n touches.currentx = e.type === 'touchstart' ? e.targettouches[0].pagex : e.pagex;\n touches.currenty = e.type === 'touchstart' ? e.targettouches[0].pagey : e.pagey;\n var startx = touches.currentx;\n var starty = touches.currenty; // do not start if ios edge swipe is detected. otherwise ios app cannot swipe-to-go-back anymore\n\n var edgeswipedetection = params.edgeswipedetection || params.iosedgeswipedetection;\n var edgeswipethreshold = params.edgeswipethreshold || params.iosedgeswipethreshold;\n\n if (edgeswipedetection && (startx <= edgeswipethreshold || startx >= win.screen.width - edgeswipethreshold)) {\n return;\n }\n\n utils.extend(data, {\n istouched: true,\n ismoved: false,\n allowtouchcallbacks: true,\n isscrolling: undefined,\n startmoving: undefined\n });\n touches.startx = startx;\n touches.starty = starty;\n data.touchstarttime = utils.now();\n swiper.allowclick = true;\n swiper.updatesize();\n swiper.swipedirection = undefined;\n if (params.threshold > 0) data.allowthresholdmove = false;\n\n if (e.type !== 'touchstart') {\n var preventdefault = true;\n if ($targetel.is(data.formelements)) preventdefault = false;\n\n if (doc.activeelement && $(doc.activeelement).is(data.formelements) && doc.activeelement !== $targetel[0]) {\n doc.activeelement.blur();\n }\n\n var shouldpreventdefault = preventdefault && swiper.allowtouchmove && params.touchstartpreventdefault;\n\n if (params.touchstartforcepreventdefault || shouldpreventdefault) {\n e.preventdefault();\n }\n }\n\n swiper.emit('touchstart', e);\n}\n\nfunction ontouchmove(event) {\n var swiper = this;\n var data = swiper.toucheventsdata;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtltranslate;\n var e = event;\n if (e.originalevent) e = e.originalevent;\n\n if (!data.istouched) {\n if (data.startmoving && data.isscrolling) {\n swiper.emit('touchmoveopposite', e);\n }\n\n return;\n }\n\n if (data.istouchevent && e.type !== 'touchmove') return;\n var targettouch = e.type === 'touchmove' && e.targettouches && (e.targettouches[0] || e.changedtouches[0]);\n var pagex = e.type === 'touchmove' ? targettouch.pagex : e.pagex;\n var pagey = e.type === 'touchmove' ? targettouch.pagey : e.pagey;\n\n if (e.preventedbynestedswiper) {\n touches.startx = pagex;\n touches.starty = pagey;\n return;\n }\n\n if (!swiper.allowtouchmove) {\n // ismoved = true;\n swiper.allowclick = false;\n\n if (data.istouched) {\n utils.extend(touches, {\n startx: pagex,\n starty: pagey,\n currentx: pagex,\n currenty: pagey\n });\n data.touchstarttime = utils.now();\n }\n\n return;\n }\n\n if (data.istouchevent && params.touchreleaseonedges && !params.loop) {\n if (swiper.isvertical()) {\n // vertical\n if (pagey < touches.starty && swiper.translate <= swiper.maxtranslate() || pagey > touches.starty && swiper.translate >= swiper.mintranslate()) {\n data.istouched = false;\n data.ismoved = false;\n return;\n }\n } else if (pagex < touches.startx && swiper.translate <= swiper.maxtranslate() || pagex > touches.startx && swiper.translate >= swiper.mintranslate()) {\n return;\n }\n }\n\n if (data.istouchevent && doc.activeelement) {\n if (e.target === doc.activeelement && $(e.target).is(data.formelements)) {\n data.ismoved = true;\n swiper.allowclick = false;\n return;\n }\n }\n\n if (data.allowtouchcallbacks) {\n swiper.emit('touchmove', e);\n }\n\n if (e.targettouches && e.targettouches.length > 1) return;\n touches.currentx = pagex;\n touches.currenty = pagey;\n var diffx = touches.currentx - touches.startx;\n var diffy = touches.currenty - touches.starty;\n if (swiper.params.threshold && math.sqrt(math.pow(diffx, 2) + math.pow(diffy, 2)) < swiper.params.threshold) return;\n\n if (typeof data.isscrolling === 'undefined') {\n var touchangle;\n\n if (swiper.ishorizontal() && touches.currenty === touches.starty || swiper.isvertical() && touches.currentx === touches.startx) {\n data.isscrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffx * diffx + diffy * diffy >= 25) {\n touchangle = math.atan2(math.abs(diffy), math.abs(diffx)) * 180 / math.pi;\n data.isscrolling = swiper.ishorizontal() ? touchangle > params.touchangle : 90 - touchangle > params.touchangle;\n }\n }\n }\n\n if (data.isscrolling) {\n swiper.emit('touchmoveopposite', e);\n }\n\n if (typeof data.startmoving === 'undefined') {\n if (touches.currentx !== touches.startx || touches.currenty !== touches.starty) {\n data.startmoving = true;\n }\n }\n\n if (data.isscrolling) {\n data.istouched = false;\n return;\n }\n\n if (!data.startmoving) {\n return;\n }\n\n swiper.allowclick = false;\n\n if (!params.cssmode && e.cancelable) {\n e.preventdefault();\n }\n\n if (params.touchmovestoppropagation && !params.nested) {\n e.stoppropagation();\n }\n\n if (!data.ismoved) {\n if (params.loop) {\n swiper.loopfix();\n }\n\n data.starttranslate = swiper.gettranslate();\n swiper.settransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperel.trigger('webkittransitionend transitionend');\n }\n\n data.allowmomentumbounce = false; // grab cursor\n\n if (params.grabcursor && (swiper.allowslidenext === true || swiper.allowslideprev === true)) {\n swiper.setgrabcursor(true);\n }\n\n swiper.emit('sliderfirstmove', e);\n }\n\n swiper.emit('slidermove', e);\n data.ismoved = true;\n var diff = swiper.ishorizontal() ? diffx : diffy;\n touches.diff = diff;\n diff *= params.touchratio;\n if (rtl) diff = -diff;\n swiper.swipedirection = diff > 0 ? 'prev' : 'next';\n data.currenttranslate = diff + data.starttranslate;\n var disableparentswiper = true;\n var resistanceratio = params.resistanceratio;\n\n if (params.touchreleaseonedges) {\n resistanceratio = 0;\n }\n\n if (diff > 0 && data.currenttranslate > swiper.mintranslate()) {\n disableparentswiper = false;\n if (params.resistance) data.currenttranslate = swiper.mintranslate() - 1 + math.pow(-swiper.mintranslate() + data.starttranslate + diff, resistanceratio);\n } else if (diff < 0 && data.currenttranslate < swiper.maxtranslate()) {\n disableparentswiper = false;\n if (params.resistance) data.currenttranslate = swiper.maxtranslate() + 1 - math.pow(swiper.maxtranslate() - data.starttranslate - diff, resistanceratio);\n }\n\n if (disableparentswiper) {\n e.preventedbynestedswiper = true;\n } // directions locks\n\n\n if (!swiper.allowslidenext && swiper.swipedirection === 'next' && data.currenttranslate < data.starttranslate) {\n data.currenttranslate = data.starttranslate;\n }\n\n if (!swiper.allowslideprev && swiper.swipedirection === 'prev' && data.currenttranslate > data.starttranslate) {\n data.currenttranslate = data.starttranslate;\n } // threshold\n\n\n if (params.threshold > 0) {\n if (math.abs(diff) > params.threshold || data.allowthresholdmove) {\n if (!data.allowthresholdmove) {\n data.allowthresholdmove = true;\n touches.startx = touches.currentx;\n touches.starty = touches.currenty;\n data.currenttranslate = data.starttranslate;\n touches.diff = swiper.ishorizontal() ? touches.currentx - touches.startx : touches.currenty - touches.starty;\n return;\n }\n } else {\n data.currenttranslate = data.starttranslate;\n return;\n }\n }\n\n if (!params.followfinger || params.cssmode) return; // update active index in free mode\n\n if (params.freemode || params.watchslidesprogress || params.watchslidesvisibility) {\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n }\n\n if (params.freemode) {\n // velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.ishorizontal() ? 'startx' : 'starty'],\n time: data.touchstarttime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.ishorizontal() ? 'currentx' : 'currenty'],\n time: utils.now()\n });\n } // update progress\n\n\n swiper.updateprogress(data.currenttranslate); // update translate\n\n swiper.settranslate(data.currenttranslate);\n}\n\nfunction ontouchend(event) {\n var swiper = this;\n var data = swiper.toucheventsdata;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtltranslate,\n $wrapperel = swiper.$wrapperel,\n slidesgrid = swiper.slidesgrid,\n snapgrid = swiper.snapgrid;\n var e = event;\n if (e.originalevent) e = e.originalevent;\n\n if (data.allowtouchcallbacks) {\n swiper.emit('touchend', e);\n }\n\n data.allowtouchcallbacks = false;\n\n if (!data.istouched) {\n if (data.ismoved && params.grabcursor) {\n swiper.setgrabcursor(false);\n }\n\n data.ismoved = false;\n data.startmoving = false;\n return;\n } // return grab cursor\n\n\n if (params.grabcursor && data.ismoved && data.istouched && (swiper.allowslidenext === true || swiper.allowslideprev === true)) {\n swiper.setgrabcursor(false);\n } // time diff\n\n\n var touchendtime = utils.now();\n var timediff = touchendtime - data.touchstarttime; // tap, doubletap, click\n\n if (swiper.allowclick) {\n swiper.updateclickedslide(e);\n swiper.emit('tap click', e);\n\n if (timediff < 300 && touchendtime - data.lastclicktime < 300) {\n swiper.emit('doubletap doubleclick', e);\n }\n }\n\n data.lastclicktime = utils.now();\n utils.nexttick(function () {\n if (!swiper.destroyed) swiper.allowclick = true;\n });\n\n if (!data.istouched || !data.ismoved || !swiper.swipedirection || touches.diff === 0 || data.currenttranslate === data.starttranslate) {\n data.istouched = false;\n data.ismoved = false;\n data.startmoving = false;\n return;\n }\n\n data.istouched = false;\n data.ismoved = false;\n data.startmoving = false;\n var currentpos;\n\n if (params.followfinger) {\n currentpos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentpos = -data.currenttranslate;\n }\n\n if (params.cssmode) {\n return;\n }\n\n if (params.freemode) {\n if (currentpos < -swiper.mintranslate()) {\n swiper.slideto(swiper.activeindex);\n return;\n }\n\n if (currentpos > -swiper.maxtranslate()) {\n if (swiper.slides.length < snapgrid.length) {\n swiper.slideto(snapgrid.length - 1);\n } else {\n swiper.slideto(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freemodemomentum) {\n if (data.velocities.length > 1) {\n var lastmoveevent = data.velocities.pop();\n var velocityevent = data.velocities.pop();\n var distance = lastmoveevent.position - velocityevent.position;\n var time = lastmoveevent.time - velocityevent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (math.abs(swiper.velocity) < params.freemodeminimumvelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // there would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || utils.now() - lastmoveevent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freemodemomentumvelocityratio;\n data.velocities.length = 0;\n var momentumduration = 1000 * params.freemodemomentumratio;\n var momentumdistance = swiper.velocity * momentumduration;\n var newposition = swiper.translate + momentumdistance;\n if (rtl) newposition = -newposition;\n var dobounce = false;\n var afterbounceposition;\n var bounceamount = math.abs(swiper.velocity) * 20 * params.freemodemomentumbounceratio;\n var needsloopfix;\n\n if (newposition < swiper.maxtranslate()) {\n if (params.freemodemomentumbounce) {\n if (newposition + swiper.maxtranslate() < -bounceamount) {\n newposition = swiper.maxtranslate() - bounceamount;\n }\n\n afterbounceposition = swiper.maxtranslate();\n dobounce = true;\n data.allowmomentumbounce = true;\n } else {\n newposition = swiper.maxtranslate();\n }\n\n if (params.loop && params.centeredslides) needsloopfix = true;\n } else if (newposition > swiper.mintranslate()) {\n if (params.freemodemomentumbounce) {\n if (newposition - swiper.mintranslate() > bounceamount) {\n newposition = swiper.mintranslate() + bounceamount;\n }\n\n afterbounceposition = swiper.mintranslate();\n dobounce = true;\n data.allowmomentumbounce = true;\n } else {\n newposition = swiper.mintranslate();\n }\n\n if (params.loop && params.centeredslides) needsloopfix = true;\n } else if (params.freemodesticky) {\n var nextslide;\n\n for (var j = 0; j < snapgrid.length; j += 1) {\n if (snapgrid[j] > -newposition) {\n nextslide = j;\n break;\n }\n }\n\n if (math.abs(snapgrid[nextslide] - newposition) < math.abs(snapgrid[nextslide - 1] - newposition) || swiper.swipedirection === 'next') {\n newposition = snapgrid[nextslide];\n } else {\n newposition = snapgrid[nextslide - 1];\n }\n\n newposition = -newposition;\n }\n\n if (needsloopfix) {\n swiper.once('transitionend', function () {\n swiper.loopfix();\n });\n } // fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumduration = math.abs((-newposition - swiper.translate) / swiper.velocity);\n } else {\n momentumduration = math.abs((newposition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freemodesticky) {\n // if freemodesticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // it's easy to see this when simulating touch with mouse events. to fix this,\n // limit single-slide swipes to the default slide duration. this also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // for faster swipes, also apply limits (albeit higher ones).\n var movedistance = math.abs((rtl ? -newposition : newposition) - swiper.translate);\n var currentslidesize = swiper.slidessizesgrid[swiper.activeindex];\n\n if (movedistance < currentslidesize) {\n momentumduration = params.speed;\n } else if (movedistance < 2 * currentslidesize) {\n momentumduration = params.speed * 1.5;\n } else {\n momentumduration = params.speed * 2.5;\n }\n }\n } else if (params.freemodesticky) {\n swiper.slidetoclosest();\n return;\n }\n\n if (params.freemodemomentumbounce && dobounce) {\n swiper.updateprogress(afterbounceposition);\n swiper.settransition(momentumduration);\n swiper.settranslate(newposition);\n swiper.transitionstart(true, swiper.swipedirection);\n swiper.animating = true;\n $wrapperel.transitionend(function () {\n if (!swiper || swiper.destroyed || !data.allowmomentumbounce) return;\n swiper.emit('momentumbounce');\n swiper.settransition(params.speed);\n settimeout(function () {\n swiper.settranslate(afterbounceposition);\n $wrapperel.transitionend(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionend();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n swiper.updateprogress(newposition);\n swiper.settransition(momentumduration);\n swiper.settranslate(newposition);\n swiper.transitionstart(true, swiper.swipedirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperel.transitionend(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionend();\n });\n }\n } else {\n swiper.updateprogress(newposition);\n }\n\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n } else if (params.freemodesticky) {\n swiper.slidetoclosest();\n return;\n }\n\n if (!params.freemodemomentum || timediff >= params.longswipesms) {\n swiper.updateprogress();\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n }\n\n return;\n } // find current slide\n\n\n var stopindex = 0;\n var groupsize = swiper.slidessizesgrid[0];\n\n for (var i = 0; i < slidesgrid.length; i += i < params.slidespergroupskip ? 1 : params.slidespergroup) {\n var _increment = i < params.slidespergroupskip - 1 ? 1 : params.slidespergroup;\n\n if (typeof slidesgrid[i + _increment] !== 'undefined') {\n if (currentpos >= slidesgrid[i] && currentpos < slidesgrid[i + _increment]) {\n stopindex = i;\n groupsize = slidesgrid[i + _increment] - slidesgrid[i];\n }\n } else if (currentpos >= slidesgrid[i]) {\n stopindex = i;\n groupsize = slidesgrid[slidesgrid.length - 1] - slidesgrid[slidesgrid.length - 2];\n }\n } // find current slide size\n\n\n var ratio = (currentpos - slidesgrid[stopindex]) / groupsize;\n var increment = stopindex < params.slidespergroupskip - 1 ? 1 : params.slidespergroup;\n\n if (timediff > params.longswipesms) {\n // long touches\n if (!params.longswipes) {\n swiper.slideto(swiper.activeindex);\n return;\n }\n\n if (swiper.swipedirection === 'next') {\n if (ratio >= params.longswipesratio) swiper.slideto(stopindex + increment);else swiper.slideto(stopindex);\n }\n\n if (swiper.swipedirection === 'prev') {\n if (ratio > 1 - params.longswipesratio) swiper.slideto(stopindex + increment);else swiper.slideto(stopindex);\n }\n } else {\n // short swipes\n if (!params.shortswipes) {\n swiper.slideto(swiper.activeindex);\n return;\n }\n\n var isnavbuttontarget = swiper.navigation && (e.target === swiper.navigation.nextel || e.target === swiper.navigation.prevel);\n\n if (!isnavbuttontarget) {\n if (swiper.swipedirection === 'next') {\n swiper.slideto(stopindex + increment);\n }\n\n if (swiper.swipedirection === 'prev') {\n swiper.slideto(stopindex);\n }\n } else if (e.target === swiper.navigation.nextel) {\n swiper.slideto(stopindex + increment);\n } else {\n swiper.slideto(stopindex);\n }\n }\n}\n\nfunction onresize() {\n var swiper = this;\n var params = swiper.params,\n el = swiper.el;\n if (el && el.offsetwidth === 0) return; // breakpoints\n\n if (params.breakpoints) {\n swiper.setbreakpoint();\n } // save locks\n\n\n var allowslidenext = swiper.allowslidenext,\n allowslideprev = swiper.allowslideprev,\n snapgrid = swiper.snapgrid; // disable locks on resize\n\n swiper.allowslidenext = true;\n swiper.allowslideprev = true;\n swiper.updatesize();\n swiper.updateslides();\n swiper.updateslidesclasses();\n\n if ((params.slidesperview === 'auto' || params.slidesperview > 1) && swiper.isend && !swiper.isbeginning && !swiper.params.centeredslides) {\n swiper.slideto(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideto(swiper.activeindex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // return locks after resize\n\n\n swiper.allowslideprev = allowslideprev;\n swiper.allowslidenext = allowslidenext;\n\n if (swiper.params.watchoverflow && snapgrid !== swiper.snapgrid) {\n swiper.checkoverflow();\n }\n}\n\nfunction onclick(e) {\n var swiper = this;\n\n if (!swiper.allowclick) {\n if (swiper.params.preventclicks) e.preventdefault();\n\n if (swiper.params.preventclickspropagation && swiper.animating) {\n e.stoppropagation();\n e.stopimmediatepropagation();\n }\n }\n}\n\nfunction onscroll() {\n var swiper = this;\n var wrapperel = swiper.wrapperel,\n rtltranslate = swiper.rtltranslate;\n swiper.previoustranslate = swiper.translate;\n\n if (swiper.ishorizontal()) {\n if (rtltranslate) {\n swiper.translate = wrapperel.scrollwidth - wrapperel.offsetwidth - wrapperel.scrollleft;\n } else {\n swiper.translate = -wrapperel.scrollleft;\n }\n } else {\n swiper.translate = -wrapperel.scrolltop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n var newprogress;\n var translatesdiff = swiper.maxtranslate() - swiper.mintranslate();\n\n if (translatesdiff === 0) {\n newprogress = 0;\n } else {\n newprogress = (swiper.translate - swiper.mintranslate()) / translatesdiff;\n }\n\n if (newprogress !== swiper.progress) {\n swiper.updateprogress(rtltranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('settranslate', swiper.translate, false);\n}\n\nvar dummyeventattached = false;\n\nfunction dummyeventlistener() {}\n\nfunction attachevents() {\n var swiper = this;\n var params = swiper.params,\n touchevents = swiper.touchevents,\n el = swiper.el,\n wrapperel = swiper.wrapperel;\n swiper.ontouchstart = ontouchstart.bind(swiper);\n swiper.ontouchmove = ontouchmove.bind(swiper);\n swiper.ontouchend = ontouchend.bind(swiper);\n\n if (params.cssmode) {\n swiper.onscroll = onscroll.bind(swiper);\n }\n\n swiper.onclick = onclick.bind(swiper);\n var capture = !!params.nested; // touch events\n\n if (!support.touch && support.pointerevents) {\n el.addeventlistener(touchevents.start, swiper.ontouchstart, false);\n doc.addeventlistener(touchevents.move, swiper.ontouchmove, capture);\n doc.addeventlistener(touchevents.end, swiper.ontouchend, false);\n } else {\n if (support.touch) {\n var passivelistener = touchevents.start === 'touchstart' && support.passivelistener && params.passivelisteners ? {\n passive: true,\n capture: false\n } : false;\n el.addeventlistener(touchevents.start, swiper.ontouchstart, passivelistener);\n el.addeventlistener(touchevents.move, swiper.ontouchmove, support.passivelistener ? {\n passive: false,\n capture: capture\n } : capture);\n el.addeventlistener(touchevents.end, swiper.ontouchend, passivelistener);\n\n if (touchevents.cancel) {\n el.addeventlistener(touchevents.cancel, swiper.ontouchend, passivelistener);\n }\n\n if (!dummyeventattached) {\n doc.addeventlistener('touchstart', dummyeventlistener);\n dummyeventattached = true;\n }\n }\n\n if (params.simulatetouch && !device.ios && !device.android || params.simulatetouch && !support.touch && device.ios) {\n el.addeventlistener('mousedown', swiper.ontouchstart, false);\n doc.addeventlistener('mousemove', swiper.ontouchmove, capture);\n doc.addeventlistener('mouseup', swiper.ontouchend, false);\n }\n } // prevent links clicks\n\n\n if (params.preventclicks || params.preventclickspropagation) {\n el.addeventlistener('click', swiper.onclick, true);\n }\n\n if (params.cssmode) {\n wrapperel.addeventlistener('scroll', swiper.onscroll);\n } // resize handler\n\n\n if (params.updateonwindowresize) {\n swiper.on(device.ios || device.android ? 'resize orientationchange observerupdate' : 'resize observerupdate', onresize, true);\n } else {\n swiper.on('observerupdate', onresize, true);\n }\n}\n\nfunction detachevents() {\n var swiper = this;\n var params = swiper.params,\n touchevents = swiper.touchevents,\n el = swiper.el,\n wrapperel = swiper.wrapperel;\n var capture = !!params.nested; // touch events\n\n if (!support.touch && support.pointerevents) {\n el.removeeventlistener(touchevents.start, swiper.ontouchstart, false);\n doc.removeeventlistener(touchevents.move, swiper.ontouchmove, capture);\n doc.removeeventlistener(touchevents.end, swiper.ontouchend, false);\n } else {\n if (support.touch) {\n var passivelistener = touchevents.start === 'ontouchstart' && support.passivelistener && params.passivelisteners ? {\n passive: true,\n capture: false\n } : false;\n el.removeeventlistener(touchevents.start, swiper.ontouchstart, passivelistener);\n el.removeeventlistener(touchevents.move, swiper.ontouchmove, capture);\n el.removeeventlistener(touchevents.end, swiper.ontouchend, passivelistener);\n\n if (touchevents.cancel) {\n el.removeeventlistener(touchevents.cancel, swiper.ontouchend, passivelistener);\n }\n }\n\n if (params.simulatetouch && !device.ios && !device.android || params.simulatetouch && !support.touch && device.ios) {\n el.removeeventlistener('mousedown', swiper.ontouchstart, false);\n doc.removeeventlistener('mousemove', swiper.ontouchmove, capture);\n doc.removeeventlistener('mouseup', swiper.ontouchend, false);\n }\n } // prevent links clicks\n\n\n if (params.preventclicks || params.preventclickspropagation) {\n el.removeeventlistener('click', swiper.onclick, true);\n }\n\n if (params.cssmode) {\n wrapperel.removeeventlistener('scroll', swiper.onscroll);\n } // resize handler\n\n\n swiper.off(device.ios || device.android ? 'resize orientationchange observerupdate' : 'resize observerupdate', onresize);\n}\n\nvar events = {\n attachevents: attachevents,\n detachevents: detachevents\n};\n\nfunction setbreakpoint() {\n var swiper = this;\n var activeindex = swiper.activeindex,\n initialized = swiper.initialized,\n _swiper$loopedslides = swiper.loopedslides,\n loopedslides = _swiper$loopedslides === void 0 ? 0 : _swiper$loopedslides,\n params = swiper.params,\n $el = swiper.$el;\n var breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && object.keys(breakpoints).length === 0) return; // get breakpoint for window width and update parameters\n\n var breakpoint = swiper.getbreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentbreakpoint !== breakpoint) {\n var breakpointonlyparams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n\n if (breakpointonlyparams) {\n ['slidesperview', 'spacebetween', 'slidespergroup', 'slidespergroupskip', 'slidespercolumn'].foreach(function (param) {\n var paramvalue = breakpointonlyparams[param];\n if (typeof paramvalue === 'undefined') return;\n\n if (param === 'slidesperview' && (paramvalue === 'auto' || paramvalue === 'auto')) {\n breakpointonlyparams[param] = 'auto';\n } else if (param === 'slidesperview') {\n breakpointonlyparams[param] = parsefloat(paramvalue);\n } else {\n breakpointonlyparams[param] = parseint(paramvalue, 10);\n }\n });\n }\n\n var breakpointparams = breakpointonlyparams || swiper.originalparams;\n var wasmultirow = params.slidespercolumn > 1;\n var ismultirow = breakpointparams.slidespercolumn > 1;\n\n if (wasmultirow && !ismultirow) {\n $el.removeclass(\"\".concat(params.containermodifierclass, \"multirow \").concat(params.containermodifierclass, \"multirow-column\"));\n } else if (!wasmultirow && ismultirow) {\n $el.addclass(\"\".concat(params.containermodifierclass, \"multirow\"));\n\n if (breakpointparams.slidespercolumnfill === 'column') {\n $el.addclass(\"\".concat(params.containermodifierclass, \"multirow-column\"));\n }\n }\n\n var directionchanged = breakpointparams.direction && breakpointparams.direction !== params.direction;\n var needsreloop = params.loop && (breakpointparams.slidesperview !== params.slidesperview || directionchanged);\n\n if (directionchanged && initialized) {\n swiper.changedirection();\n }\n\n utils.extend(swiper.params, breakpointparams);\n utils.extend(swiper, {\n allowtouchmove: swiper.params.allowtouchmove,\n allowslidenext: swiper.params.allowslidenext,\n allowslideprev: swiper.params.allowslideprev\n });\n swiper.currentbreakpoint = breakpoint;\n\n if (needsreloop && initialized) {\n swiper.loopdestroy();\n swiper.loopcreate();\n swiper.updateslides();\n swiper.slideto(activeindex - loopedslides + swiper.loopedslides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointparams);\n }\n}\n\nfunction getbreakpoint(breakpoints) {\n // get breakpoint for window width\n if (!breakpoints) return undefined;\n var breakpoint = false;\n var points = object.keys(breakpoints).map(function (point) {\n if (typeof point === 'string' && point.indexof('@') === 0) {\n var minratio = parsefloat(point.substr(1));\n var value = win.innerheight * minratio;\n return {\n value: value,\n point: point\n };\n }\n\n return {\n value: point,\n point: point\n };\n });\n points.sort(function (a, b) {\n return parseint(a.value, 10) - parseint(b.value, 10);\n });\n\n for (var i = 0; i < points.length; i += 1) {\n var _points$i = points[i],\n point = _points$i.point,\n value = _points$i.value;\n\n if (value <= win.innerwidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setbreakpoint: setbreakpoint,\n getbreakpoint: getbreakpoint\n};\n\nfunction addclasses() {\n var swiper = this;\n var classnames = swiper.classnames,\n params = swiper.params,\n rtl = swiper.rtl,\n $el = swiper.$el;\n var suffixes = [];\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (params.freemode) {\n suffixes.push('free-mode');\n }\n\n if (params.autoheight) {\n suffixes.push('autoheight');\n }\n\n if (rtl) {\n suffixes.push('rtl');\n }\n\n if (params.slidespercolumn > 1) {\n suffixes.push('multirow');\n\n if (params.slidespercolumnfill === 'column') {\n suffixes.push('multirow-column');\n }\n }\n\n if (device.android) {\n suffixes.push('android');\n }\n\n if (device.ios) {\n suffixes.push('ios');\n }\n\n if (params.cssmode) {\n suffixes.push('css-mode');\n }\n\n suffixes.foreach(function (suffix) {\n classnames.push(params.containermodifierclass + suffix);\n });\n $el.addclass(classnames.join(' '));\n}\n\nfunction removeclasses() {\n var swiper = this;\n var $el = swiper.$el,\n classnames = swiper.classnames;\n $el.removeclass(classnames.join(' '));\n}\n\nvar classes = {\n addclasses: addclasses,\n removeclasses: removeclasses\n};\n\nfunction loadimage(imageel, src, srcset, sizes, checkforcomplete, callback) {\n var image;\n\n function onready() {\n if (callback) callback();\n }\n\n var ispicture = $(imageel).parent('picture')[0];\n\n if (!ispicture && (!imageel.complete || !checkforcomplete)) {\n if (src) {\n image = new win.image();\n image.onload = onready;\n image.onerror = onready;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onready();\n }\n } else {\n // image already loaded...\n onready();\n }\n}\n\nfunction preloadimages() {\n var swiper = this;\n swiper.imagestoload = swiper.$el.find('img');\n\n function onready() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesloaded !== undefined) swiper.imagesloaded += 1;\n\n if (swiper.imagesloaded === swiper.imagestoload.length) {\n if (swiper.params.updateonimagesready) swiper.update();\n swiper.emit('imagesready');\n }\n }\n\n for (var i = 0; i < swiper.imagestoload.length; i += 1) {\n var imageel = swiper.imagestoload[i];\n swiper.loadimage(imageel, imageel.currentsrc || imageel.getattribute('src'), imageel.srcset || imageel.getattribute('srcset'), imageel.sizes || imageel.getattribute('sizes'), true, onready);\n }\n}\n\nvar images = {\n loadimage: loadimage,\n preloadimages: preloadimages\n};\n\nfunction checkoverflow() {\n var swiper = this;\n var params = swiper.params;\n var waslocked = swiper.islocked;\n var lastslideposition = swiper.slides.length > 0 && params.slidesoffsetbefore + params.spacebetween * (swiper.slides.length - 1) + swiper.slides[0].offsetwidth * swiper.slides.length;\n\n if (params.slidesoffsetbefore && params.slidesoffsetafter && lastslideposition) {\n swiper.islocked = lastslideposition <= swiper.size;\n } else {\n swiper.islocked = swiper.snapgrid.length === 1;\n }\n\n swiper.allowslidenext = !swiper.islocked;\n swiper.allowslideprev = !swiper.islocked; // events\n\n if (waslocked !== swiper.islocked) swiper.emit(swiper.islocked ? 'lock' : 'unlock');\n\n if (waslocked && waslocked !== swiper.islocked) {\n swiper.isend = false;\n if (swiper.navigation) swiper.navigation.update();\n }\n}\n\nvar checkoverflow$1 = {\n checkoverflow: checkoverflow\n};\nvar defaults = {\n init: true,\n direction: 'horizontal',\n toucheventstarget: 'container',\n initialslide: 0,\n speed: 300,\n cssmode: false,\n updateonwindowresize: true,\n //\n preventinteractionontransition: false,\n // to support ios's swipe-to-go-back gesture (when being used in-app).\n edgeswipedetection: false,\n edgeswipethreshold: 20,\n // free mode\n freemode: false,\n freemodemomentum: true,\n freemodemomentumratio: 1,\n freemodemomentumbounce: true,\n freemodemomentumbounceratio: 1,\n freemodemomentumvelocityratio: 1,\n freemodesticky: false,\n freemodeminimumvelocity: 0.02,\n // autoheight\n autoheight: false,\n // set wrapper width\n setwrappersize: false,\n // virtual translate\n virtualtranslate: false,\n // effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // breakpoints\n breakpoints: undefined,\n // slides grid\n spacebetween: 0,\n slidesperview: 1,\n slidespercolumn: 1,\n slidespercolumnfill: 'column',\n slidespergroup: 1,\n slidespergroupskip: 0,\n centeredslides: false,\n centeredslidesbounds: false,\n slidesoffsetbefore: 0,\n // in px\n slidesoffsetafter: 0,\n // in px\n normalizeslideindex: true,\n centerinsufficientslides: false,\n // disable swiper and hide navigation when container not overflow\n watchoverflow: false,\n // round length\n roundlengths: false,\n // touches\n touchratio: 1,\n touchangle: 45,\n simulatetouch: true,\n shortswipes: true,\n longswipes: true,\n longswipesratio: 0.5,\n longswipesms: 300,\n followfinger: true,\n allowtouchmove: true,\n threshold: 0,\n touchmovestoppropagation: false,\n touchstartpreventdefault: true,\n touchstartforcepreventdefault: false,\n touchreleaseonedges: false,\n // unique navigation elements\n uniquenavelements: true,\n // resistance\n resistance: true,\n resistanceratio: 0.85,\n // progress\n watchslidesprogress: false,\n watchslidesvisibility: false,\n // cursor\n grabcursor: false,\n // clicks\n preventclicks: true,\n preventclickspropagation: true,\n slidetoclickedslide: false,\n // images\n preloadimages: true,\n updateonimagesready: true,\n // loop\n loop: false,\n loopadditionalslides: 0,\n loopedslides: null,\n loopfillgroupwithblank: false,\n // swiping/no swiping\n allowslideprev: true,\n allowslidenext: true,\n swipehandler: null,\n // '.swipe-handler',\n noswiping: true,\n noswipingclass: 'swiper-no-swiping',\n noswipingselector: null,\n // passive listeners\n passivelisteners: true,\n // ns\n containermodifierclass: 'swiper-container-',\n // new\n slideclass: 'swiper-slide',\n slideblankclass: 'swiper-slide-invisible-blank',\n slideactiveclass: 'swiper-slide-active',\n slideduplicateactiveclass: 'swiper-slide-duplicate-active',\n slidevisibleclass: 'swiper-slide-visible',\n slideduplicateclass: 'swiper-slide-duplicate',\n slidenextclass: 'swiper-slide-next',\n slideduplicatenextclass: 'swiper-slide-duplicate-next',\n slideprevclass: 'swiper-slide-prev',\n slideduplicateprevclass: 'swiper-slide-duplicate-prev',\n wrapperclass: 'swiper-wrapper',\n // callbacks\n runcallbacksoninit: true\n};\n/* eslint no-param-reassign: \"off\" */\n\nvar prototypes = {\n update: update,\n translate: translate,\n transition: transition$1,\n slide: slide,\n loop: loop,\n grabcursor: grabcursor,\n manipulation: manipulation,\n events: events,\n breakpoints: breakpoints,\n checkoverflow: checkoverflow$1,\n classes: classes,\n images: images\n};\nvar extendeddefaults = {};\n\nvar swiper = /*#__pure__*/function (_swiperclass) {\n _inherits(swiper, _swiperclass);\n\n var _super = _createsuper(swiper);\n\n function swiper() {\n var _this;\n\n _classcallcheck(this, swiper);\n\n var el;\n var params;\n\n for (var _len9 = arguments.length, args = new array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n if (args.length === 1 && args[0].constructor && args[0].constructor === object) {\n params = args[0];\n } else {\n el = args[0];\n params = args[1];\n }\n\n if (!params) params = {};\n params = utils.extend({}, params);\n if (el && !params.el) params.el = el;\n _this = _super.call(this, params);\n object.keys(prototypes).foreach(function (prototypegroup) {\n object.keys(prototypes[prototypegroup]).foreach(function (protomethod) {\n if (!swiper.prototype[protomethod]) {\n swiper.prototype[protomethod] = prototypes[prototypegroup][protomethod];\n }\n });\n }); // swiper instance\n\n var swiper = _assertthisinitialized(_this);\n\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n\n object.keys(swiper.modules).foreach(function (modulename) {\n var module = swiper.modules[modulename];\n\n if (module.params) {\n var moduleparamname = object.keys(module.params)[0];\n var moduleparams = module.params[moduleparamname];\n if (_typeof(moduleparams) !== 'object' || moduleparams === null) return;\n if (!(moduleparamname in params && 'enabled' in moduleparams)) return;\n\n if (params[moduleparamname] === true) {\n params[moduleparamname] = {\n enabled: true\n };\n }\n\n if (_typeof(params[moduleparamname]) === 'object' && !('enabled' in params[moduleparamname])) {\n params[moduleparamname].enabled = true;\n }\n\n if (!params[moduleparamname]) params[moduleparamname] = {\n enabled: false\n };\n }\n }); // extend defaults with modules params\n\n var swiperparams = utils.extend({}, defaults);\n swiper.usemodulesparams(swiperparams); // extend defaults with passed params\n\n swiper.params = utils.extend({}, swiperparams, extendeddefaults, params);\n swiper.originalparams = utils.extend({}, swiper.params);\n swiper.passedparams = utils.extend({}, params); // save dom lib\n\n swiper.$ = $; // find el\n\n var $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return _possibleconstructorreturn(_this, undefined);\n }\n\n if ($el.length > 1) {\n var swipers = [];\n $el.each(function (index, containerel) {\n var newparams = utils.extend({}, params, {\n el: containerel\n });\n swipers.push(new swiper(newparams));\n });\n return _possibleconstructorreturn(_this, swipers);\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper); // find wrapper\n\n var $wrapperel;\n\n if (el && el.shadowroot && el.shadowroot.queryselector) {\n $wrapperel = $(el.shadowroot.queryselector(\".\".concat(swiper.params.wrapperclass))); // children needs to return slot items\n\n $wrapperel.children = function (options) {\n return $el.children(options);\n };\n } else {\n $wrapperel = $el.children(\".\".concat(swiper.params.wrapperclass));\n } // extend swiper\n\n\n utils.extend(swiper, {\n $el: $el,\n el: el,\n $wrapperel: $wrapperel,\n wrapperel: $wrapperel[0],\n // classes\n classnames: [],\n // slides\n slides: $(),\n slidesgrid: [],\n snapgrid: [],\n slidessizesgrid: [],\n // isdirection\n ishorizontal: function ishorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isvertical: function isvertical() {\n return swiper.params.direction === 'vertical';\n },\n // rtl\n rtl: el.dir.tolowercase() === 'rtl' || $el.css('direction') === 'rtl',\n rtltranslate: swiper.params.direction === 'horizontal' && (el.dir.tolowercase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongrtl: $wrapperel.css('display') === '-webkit-box',\n // indexes\n activeindex: 0,\n realindex: 0,\n //\n isbeginning: true,\n isend: false,\n // props\n translate: 0,\n previoustranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // locks\n allowslidenext: swiper.params.allowslidenext,\n allowslideprev: swiper.params.allowslideprev,\n // touch events\n touchevents: function touchevents() {\n var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n var desktop = ['mousedown', 'mousemove', 'mouseup'];\n\n if (support.pointerevents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n }\n\n swiper.toucheventstouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.toucheventsdesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return support.touch || !swiper.params.simulatetouch ? swiper.toucheventstouch : swiper.toucheventsdesktop;\n }(),\n toucheventsdata: {\n istouched: undefined,\n ismoved: undefined,\n allowtouchcallbacks: undefined,\n touchstarttime: undefined,\n isscrolling: undefined,\n currenttranslate: undefined,\n starttranslate: undefined,\n allowthresholdmove: undefined,\n // form elements to match\n formelements: 'input, select, option, textarea, button, video, label',\n // last click time\n lastclicktime: utils.now(),\n clicktimeout: undefined,\n // velocities\n velocities: [],\n allowmomentumbounce: undefined,\n istouchevent: undefined,\n startmoving: undefined\n },\n // clicks\n allowclick: true,\n // touches\n allowtouchmove: swiper.params.allowtouchmove,\n touches: {\n startx: 0,\n starty: 0,\n currentx: 0,\n currenty: 0,\n diff: 0\n },\n // images\n imagestoload: [],\n imagesloaded: 0\n }); // install modules\n\n swiper.usemodules(); // init\n\n if (swiper.params.init) {\n swiper.init();\n } // return app instance\n\n\n return _possibleconstructorreturn(_this, swiper);\n }\n\n _createclass(swiper, [{\n key: \"slidesperviewdynamic\",\n value: function slidesperviewdynamic() {\n var swiper = this;\n var params = swiper.params,\n slides = swiper.slides,\n slidesgrid = swiper.slidesgrid,\n swipersize = swiper.size,\n activeindex = swiper.activeindex;\n var spv = 1;\n\n if (params.centeredslides) {\n var slidesize = slides[activeindex].swiperslidesize;\n var breakloop;\n\n for (var i = activeindex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakloop) {\n slidesize += slides[i].swiperslidesize;\n spv += 1;\n if (slidesize > swipersize) breakloop = true;\n }\n }\n\n for (var _i7 = activeindex - 1; _i7 >= 0; _i7 -= 1) {\n if (slides[_i7] && !breakloop) {\n slidesize += slides[_i7].swiperslidesize;\n spv += 1;\n if (slidesize > swipersize) breakloop = true;\n }\n }\n } else {\n for (var _i8 = activeindex + 1; _i8 < slides.length; _i8 += 1) {\n if (slidesgrid[_i8] - slidesgrid[activeindex] < swipersize) {\n spv += 1;\n }\n }\n }\n\n return spv;\n }\n }, {\n key: \"update\",\n value: function update() {\n var swiper = this;\n if (!swiper || swiper.destroyed) return;\n var snapgrid = swiper.snapgrid,\n params = swiper.params; // breakpoints\n\n if (params.breakpoints) {\n swiper.setbreakpoint();\n }\n\n swiper.updatesize();\n swiper.updateslides();\n swiper.updateprogress();\n swiper.updateslidesclasses();\n\n function settranslate() {\n var translatevalue = swiper.rtltranslate ? swiper.translate * -1 : swiper.translate;\n var newtranslate = math.min(math.max(translatevalue, swiper.maxtranslate()), swiper.mintranslate());\n swiper.settranslate(newtranslate);\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n }\n\n var translated;\n\n if (swiper.params.freemode) {\n settranslate();\n\n if (swiper.params.autoheight) {\n swiper.updateautoheight();\n }\n } else {\n if ((swiper.params.slidesperview === 'auto' || swiper.params.slidesperview > 1) && swiper.isend && !swiper.params.centeredslides) {\n translated = swiper.slideto(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideto(swiper.activeindex, 0, false, true);\n }\n\n if (!translated) {\n settranslate();\n }\n }\n\n if (params.watchoverflow && snapgrid !== swiper.snapgrid) {\n swiper.checkoverflow();\n }\n\n swiper.emit('update');\n }\n }, {\n key: \"changedirection\",\n value: function changedirection(newdirection) {\n var needupdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var swiper = this;\n var currentdirection = swiper.params.direction;\n\n if (!newdirection) {\n // eslint-disable-next-line\n newdirection = currentdirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newdirection === currentdirection || newdirection !== 'horizontal' && newdirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeclass(\"\".concat(swiper.params.containermodifierclass).concat(currentdirection)).addclass(\"\".concat(swiper.params.containermodifierclass).concat(newdirection));\n swiper.params.direction = newdirection;\n swiper.slides.each(function (slideindex, slideel) {\n if (newdirection === 'vertical') {\n slideel.style.width = '';\n } else {\n slideel.style.height = '';\n }\n });\n swiper.emit('changedirection');\n if (needupdate) swiper.update();\n return swiper;\n }\n }, {\n key: \"init\",\n value: function init() {\n var swiper = this;\n if (swiper.initialized) return;\n swiper.emit('beforeinit'); // set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setbreakpoint();\n } // add classes\n\n\n swiper.addclasses(); // create loop\n\n if (swiper.params.loop) {\n swiper.loopcreate();\n } // update size\n\n\n swiper.updatesize(); // update slides\n\n swiper.updateslides();\n\n if (swiper.params.watchoverflow) {\n swiper.checkoverflow();\n } // set grab cursor\n\n\n if (swiper.params.grabcursor) {\n swiper.setgrabcursor();\n }\n\n if (swiper.params.preloadimages) {\n swiper.preloadimages();\n } // slide to initial slide\n\n\n if (swiper.params.loop) {\n swiper.slideto(swiper.params.initialslide + swiper.loopedslides, 0, swiper.params.runcallbacksoninit);\n } else {\n swiper.slideto(swiper.params.initialslide, 0, swiper.params.runcallbacksoninit);\n } // attach events\n\n\n swiper.attachevents(); // init flag\n\n swiper.initialized = true; // emit\n\n swiper.emit('init');\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var deleteinstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var cleanstyles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var swiper = this;\n var params = swiper.params,\n $el = swiper.$el,\n $wrapperel = swiper.$wrapperel,\n slides = swiper.slides;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforedestroy'); // init flag\n\n swiper.initialized = false; // detach events\n\n swiper.detachevents(); // destroy loop\n\n if (params.loop) {\n swiper.loopdestroy();\n } // cleanup styles\n\n\n if (cleanstyles) {\n swiper.removeclasses();\n $el.removeattr('style');\n $wrapperel.removeattr('style');\n\n if (slides && slides.length) {\n slides.removeclass([params.slidevisibleclass, params.slideactiveclass, params.slidenextclass, params.slideprevclass].join(' ')).removeattr('style').removeattr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // detach emitter events\n\n object.keys(swiper.eventslisteners).foreach(function (eventname) {\n swiper.off(eventname);\n });\n\n if (deleteinstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n utils.deleteprops(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n }], [{\n key: \"extenddefaults\",\n value: function extenddefaults(newdefaults) {\n utils.extend(extendeddefaults, newdefaults);\n }\n }, {\n key: \"extendeddefaults\",\n get: function get() {\n return extendeddefaults;\n }\n }, {\n key: \"defaults\",\n get: function get() {\n return defaults;\n }\n }, {\n key: \"class\",\n get: function get() {\n return swiperclass;\n }\n }, {\n key: \"$\",\n get: function get() {\n return $;\n }\n }]);\n\n return swiper;\n}(swiperclass);\n\nvar device$1 = {\n name: 'device',\n proto: {\n device: device\n },\n static: {\n device: device\n }\n};\nvar support$1 = {\n name: 'support',\n proto: {\n support: support\n },\n static: {\n support: support\n }\n};\n\nvar browser = function browser() {\n function issafari() {\n var ua = win.navigator.useragent.tolowercase();\n return ua.indexof('safari') >= 0 && ua.indexof('chrome') < 0 && ua.indexof('android') < 0;\n }\n\n return {\n isedge: !!win.navigator.useragent.match(/edge/g),\n issafari: issafari(),\n iswebview: /(iphone|ipod|ipad).*applewebkit(?!.*safari)/i.test(win.navigator.useragent)\n };\n}();\n\nvar browser$1 = {\n name: 'browser',\n proto: {\n browser: browser\n },\n static: {\n browser: browser\n }\n};\nvar resize = {\n name: 'resize',\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n resize: {\n resizehandler: function resizehandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('beforeresize');\n swiper.emit('resize');\n },\n orientationchangehandler: function orientationchangehandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('orientationchange');\n }\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this; // emit resize\n\n win.addeventlistener('resize', swiper.resize.resizehandler); // emit orientationchange\n\n win.addeventlistener('orientationchange', swiper.resize.orientationchangehandler);\n },\n destroy: function destroy() {\n var swiper = this;\n win.removeeventlistener('resize', swiper.resize.resizehandler);\n win.removeeventlistener('orientationchange', swiper.resize.orientationchangehandler);\n }\n }\n};\nvar observer = {\n func: win.mutationobserver || win.webkitmutationobserver,\n attach: function attach(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var swiper = this;\n var observerfunc = observer.func;\n var observer = new observerfunc(function (mutations) {\n // the observerupdate event should only be triggered\n // once despite the number of mutations. additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerupdate', mutations[0]);\n return;\n }\n\n var observerupdate = function observerupdate() {\n swiper.emit('observerupdate', mutations[0]);\n };\n\n if (win.requestanimationframe) {\n win.requestanimationframe(observerupdate);\n } else {\n win.settimeout(observerupdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childlist: typeof options.childlist === 'undefined' ? true : options.childlist,\n characterdata: typeof options.characterdata === 'undefined' ? true : options.characterdata\n });\n swiper.observer.observers.push(observer);\n },\n init: function init() {\n var swiper = this;\n if (!support.observer || !swiper.params.observer) return;\n\n if (swiper.params.observeparents) {\n var containerparents = swiper.$el.parents();\n\n for (var i = 0; i < containerparents.length; i += 1) {\n swiper.observer.attach(containerparents[i]);\n }\n } // observe container\n\n\n swiper.observer.attach(swiper.$el[0], {\n childlist: swiper.params.observeslidechildren\n }); // observe wrapper\n\n swiper.observer.attach(swiper.$wrapperel[0], {\n attributes: false\n });\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.observers.foreach(function (observer) {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n }\n};\nvar observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeparents: false,\n observeslidechildren: false\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n observer: {\n init: observer.init.bind(swiper),\n attach: observer.attach.bind(swiper),\n destroy: observer.destroy.bind(swiper),\n observers: []\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.observer.init();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.destroy();\n }\n }\n};\nvar virtual = {\n update: function update(force) {\n var swiper = this;\n var _swiper$params = swiper.params,\n slidesperview = _swiper$params.slidesperview,\n slidespergroup = _swiper$params.slidespergroup,\n centeredslides = _swiper$params.centeredslides;\n var _swiper$params$virtua = swiper.params.virtual,\n addslidesbefore = _swiper$params$virtua.addslidesbefore,\n addslidesafter = _swiper$params$virtua.addslidesafter;\n var _swiper$virtual = swiper.virtual,\n previousfrom = _swiper$virtual.from,\n previousto = _swiper$virtual.to,\n slides = _swiper$virtual.slides,\n previousslidesgrid = _swiper$virtual.slidesgrid,\n renderslide = _swiper$virtual.renderslide,\n previousoffset = _swiper$virtual.offset;\n swiper.updateactiveindex();\n var activeindex = swiper.activeindex || 0;\n var offsetprop;\n if (swiper.rtltranslate) offsetprop = 'right';else offsetprop = swiper.ishorizontal() ? 'left' : 'top';\n var slidesafter;\n var slidesbefore;\n\n if (centeredslides) {\n slidesafter = math.floor(slidesperview / 2) + slidespergroup + addslidesbefore;\n slidesbefore = math.floor(slidesperview / 2) + slidespergroup + addslidesafter;\n } else {\n slidesafter = slidesperview + (slidespergroup - 1) + addslidesbefore;\n slidesbefore = slidespergroup + addslidesafter;\n }\n\n var from = math.max((activeindex || 0) - slidesbefore, 0);\n var to = math.min((activeindex || 0) + slidesafter, slides.length - 1);\n var offset = (swiper.slidesgrid[from] || 0) - (swiper.slidesgrid[0] || 0);\n utils.extend(swiper.virtual, {\n from: from,\n to: to,\n offset: offset,\n slidesgrid: swiper.slidesgrid\n });\n\n function onrendered() {\n swiper.updateslides();\n swiper.updateprogress();\n swiper.updateslidesclasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousfrom === from && previousto === to && !force) {\n if (swiper.slidesgrid !== previousslidesgrid && offset !== previousoffset) {\n swiper.slides.css(offsetprop, \"\".concat(offset, \"px\"));\n }\n\n swiper.updateprogress();\n return;\n }\n\n if (swiper.params.virtual.renderexternal) {\n swiper.params.virtual.renderexternal.call(swiper, {\n offset: offset,\n from: from,\n to: to,\n slides: function getslides() {\n var slidestorender = [];\n\n for (var i = from; i <= to; i += 1) {\n slidestorender.push(slides[i]);\n }\n\n return slidestorender;\n }()\n });\n onrendered();\n return;\n }\n\n var prependindexes = [];\n var appendindexes = [];\n\n if (force) {\n swiper.$wrapperel.find(\".\".concat(swiper.params.slideclass)).remove();\n } else {\n for (var i = previousfrom; i <= previousto; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperel.find(\".\".concat(swiper.params.slideclass, \"[data-swiper-slide-index=\\\"\").concat(i, \"\\\"]\")).remove();\n }\n }\n }\n\n for (var _i9 = 0; _i9 < slides.length; _i9 += 1) {\n if (_i9 >= from && _i9 <= to) {\n if (typeof previousto === 'undefined' || force) {\n appendindexes.push(_i9);\n } else {\n if (_i9 > previousto) appendindexes.push(_i9);\n if (_i9 < previousfrom) prependindexes.push(_i9);\n }\n }\n }\n\n appendindexes.foreach(function (index) {\n swiper.$wrapperel.append(renderslide(slides[index], index));\n });\n prependindexes.sort(function (a, b) {\n return b - a;\n }).foreach(function (index) {\n swiper.$wrapperel.prepend(renderslide(slides[index], index));\n });\n swiper.$wrapperel.children('.swiper-slide').css(offsetprop, \"\".concat(offset, \"px\"));\n onrendered();\n },\n renderslide: function renderslide(slide, index) {\n var swiper = this;\n var params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n var $slideel = params.renderslide ? $(params.renderslide.call(swiper, slide, index)) : $(\"
\").concat(slide, \"
\"));\n if (!$slideel.attr('data-swiper-slide-index')) $slideel.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideel;\n return $slideel;\n },\n appendslide: function appendslide(slides) {\n var swiper = this;\n\n if (_typeof(slides) === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n\n swiper.virtual.update(true);\n },\n prependslide: function prependslide(slides) {\n var swiper = this;\n var activeindex = swiper.activeindex;\n var newactiveindex = activeindex + 1;\n var numberofnewslides = 1;\n\n if (array.isarray(slides)) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n\n newactiveindex = activeindex + slides.length;\n numberofnewslides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n\n if (swiper.params.virtual.cache) {\n var cache = swiper.virtual.cache;\n var newcache = {};\n object.keys(cache).foreach(function (cachedindex) {\n var $cachedel = cache[cachedindex];\n var cachedelindex = $cachedel.attr('data-swiper-slide-index');\n\n if (cachedelindex) {\n $cachedel.attr('data-swiper-slide-index', parseint(cachedelindex, 10) + 1);\n }\n\n newcache[parseint(cachedindex, 10) + numberofnewslides] = $cachedel;\n });\n swiper.virtual.cache = newcache;\n }\n\n swiper.virtual.update(true);\n swiper.slideto(newactiveindex, 0);\n },\n removeslide: function removeslide(slidesindexes) {\n var swiper = this;\n if (typeof slidesindexes === 'undefined' || slidesindexes === null) return;\n var activeindex = swiper.activeindex;\n\n if (array.isarray(slidesindexes)) {\n for (var i = slidesindexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesindexes[i], 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesindexes[i]];\n }\n\n if (slidesindexes[i] < activeindex) activeindex -= 1;\n activeindex = math.max(activeindex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesindexes, 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesindexes];\n }\n\n if (slidesindexes < activeindex) activeindex -= 1;\n activeindex = math.max(activeindex, 0);\n }\n\n swiper.virtual.update(true);\n swiper.slideto(activeindex, 0);\n },\n removeallslides: function removeallslides() {\n var swiper = this;\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n swiper.virtual.update(true);\n swiper.slideto(0, 0);\n }\n};\nvar virtual$1 = {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderslide: null,\n renderexternal: null,\n addslidesbefore: 0,\n addslidesafter: 0\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n virtual: {\n update: virtual.update.bind(swiper),\n appendslide: virtual.appendslide.bind(swiper),\n prependslide: virtual.prependslide.bind(swiper),\n removeslide: virtual.removeslide.bind(swiper),\n removeallslides: virtual.removeallslides.bind(swiper),\n renderslide: virtual.renderslide.bind(swiper),\n slides: swiper.params.virtual.slides,\n cache: {}\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"virtual\"));\n var overwriteparams = {\n watchslidesprogress: true\n };\n utils.extend(swiper.params, overwriteparams);\n utils.extend(swiper.originalparams, overwriteparams);\n\n if (!swiper.params.initialslide) {\n swiper.virtual.update();\n }\n },\n settranslate: function settranslate() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.update();\n }\n }\n};\nvar keyboard = {\n handle: function handle(event) {\n var swiper = this;\n var rtl = swiper.rtltranslate;\n var e = event;\n if (e.originalevent) e = e.originalevent; // jquery fix\n\n var kc = e.keycode || e.charcode;\n var pageupdown = swiper.params.keyboard.pageupdown;\n var ispageup = pageupdown && kc === 33;\n var ispagedown = pageupdown && kc === 34;\n var isarrowleft = kc === 37;\n var isarrowright = kc === 39;\n var isarrowup = kc === 38;\n var isarrowdown = kc === 40; // directions locks\n\n if (!swiper.allowslidenext && (swiper.ishorizontal() && isarrowright || swiper.isvertical() && isarrowdown || ispagedown)) {\n return false;\n }\n\n if (!swiper.allowslideprev && (swiper.ishorizontal() && isarrowleft || swiper.isvertical() && isarrowup || ispageup)) {\n return false;\n }\n\n if (e.shiftkey || e.altkey || e.ctrlkey || e.metakey) {\n return undefined;\n }\n\n if (doc.activeelement && doc.activeelement.nodename && (doc.activeelement.nodename.tolowercase() === 'input' || doc.activeelement.nodename.tolowercase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyinviewport && (ispageup || ispagedown || isarrowleft || isarrowright || isarrowup || isarrowdown)) {\n var inview = false; // check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(\".\".concat(swiper.params.slideclass)).length > 0 && swiper.$el.parents(\".\".concat(swiper.params.slideactiveclass)).length === 0) {\n return undefined;\n }\n\n var windowwidth = win.innerwidth;\n var windowheight = win.innerheight;\n var swiperoffset = swiper.$el.offset();\n if (rtl) swiperoffset.left -= swiper.$el[0].scrollleft;\n var swipercoord = [[swiperoffset.left, swiperoffset.top], [swiperoffset.left + swiper.width, swiperoffset.top], [swiperoffset.left, swiperoffset.top + swiper.height], [swiperoffset.left + swiper.width, swiperoffset.top + swiper.height]];\n\n for (var i = 0; i < swipercoord.length; i += 1) {\n var point = swipercoord[i];\n\n if (point[0] >= 0 && point[0] <= windowwidth && point[1] >= 0 && point[1] <= windowheight) {\n inview = true;\n }\n }\n\n if (!inview) return undefined;\n }\n\n if (swiper.ishorizontal()) {\n if (ispageup || ispagedown || isarrowleft || isarrowright) {\n if (e.preventdefault) e.preventdefault();else e.returnvalue = false;\n }\n\n if ((ispagedown || isarrowright) && !rtl || (ispageup || isarrowleft) && rtl) swiper.slidenext();\n if ((ispageup || isarrowleft) && !rtl || (ispagedown || isarrowright) && rtl) swiper.slideprev();\n } else {\n if (ispageup || ispagedown || isarrowup || isarrowdown) {\n if (e.preventdefault) e.preventdefault();else e.returnvalue = false;\n }\n\n if (ispagedown || isarrowdown) swiper.slidenext();\n if (ispageup || isarrowup) swiper.slideprev();\n }\n\n swiper.emit('keypress', kc);\n return undefined;\n },\n enable: function enable() {\n var swiper = this;\n if (swiper.keyboard.enabled) return;\n $(doc).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable: function disable() {\n var swiper = this;\n if (!swiper.keyboard.enabled) return;\n $(doc).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n }\n};\nvar keyboard$1 = {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyinviewport: true,\n pageupdown: true\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n keyboard: {\n enabled: false,\n enable: keyboard.enable.bind(swiper),\n disable: keyboard.disable.bind(swiper),\n handle: keyboard.handle.bind(swiper)\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n }\n }\n};\n\nfunction iseventsupported() {\n var eventname = 'onwheel';\n var issupported = (eventname in doc);\n\n if (!issupported) {\n var element = doc.createelement('div');\n element.setattribute(eventname, 'return;');\n issupported = typeof element[eventname] === 'function';\n }\n\n if (!issupported && doc.implementation && doc.implementation.hasfeature // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n && doc.implementation.hasfeature('', '') !== true) {\n // this is the only way to test support for the `wheel` event in ie9+.\n issupported = doc.implementation.hasfeature('events.wheel', '3.0');\n }\n\n return issupported;\n}\n\nvar mousewheel = {\n lastscrolltime: utils.now(),\n lasteventbeforesnap: undefined,\n recentwheelevents: [],\n event: function event() {\n if (win.navigator.useragent.indexof('firefox') > -1) return 'dommousescroll';\n return iseventsupported() ? 'wheel' : 'mousewheel';\n },\n normalize: function normalize(e) {\n // reasonable defaults\n var pixel_step = 10;\n var line_height = 40;\n var page_height = 800;\n var sx = 0;\n var sy = 0; // spinx, spiny\n\n var px = 0;\n var py = 0; // pixelx, pixely\n // legacy\n\n if ('detail' in e) {\n sy = e.detail;\n }\n\n if ('wheeldelta' in e) {\n sy = -e.wheeldelta / 120;\n }\n\n if ('wheeldeltay' in e) {\n sy = -e.wheeldeltay / 120;\n }\n\n if ('wheeldeltax' in e) {\n sx = -e.wheeldeltax / 120;\n } // side scrolling on ff with dommousescroll\n\n\n if ('axis' in e && e.axis === e.horizontal_axis) {\n sx = sy;\n sy = 0;\n }\n\n px = sx * pixel_step;\n py = sy * pixel_step;\n\n if ('deltay' in e) {\n py = e.deltay;\n }\n\n if ('deltax' in e) {\n px = e.deltax;\n }\n\n if (e.shiftkey && !px) {\n // if user scrolls with shift he wants horizontal scroll\n px = py;\n py = 0;\n }\n\n if ((px || py) && e.deltamode) {\n if (e.deltamode === 1) {\n // delta in line units\n px *= line_height;\n py *= line_height;\n } else {\n // delta in page units\n px *= page_height;\n py *= page_height;\n }\n } // fall-back if spin cannot be determined\n\n\n if (px && !sx) {\n sx = px < 1 ? -1 : 1;\n }\n\n if (py && !sy) {\n sy = py < 1 ? -1 : 1;\n }\n\n return {\n spinx: sx,\n spiny: sy,\n pixelx: px,\n pixely: py\n };\n },\n handlemouseenter: function handlemouseenter() {\n var swiper = this;\n swiper.mouseentered = true;\n },\n handlemouseleave: function handlemouseleave() {\n var swiper = this;\n swiper.mouseentered = false;\n },\n handle: function handle(event) {\n var e = event;\n var swiper = this;\n var params = swiper.params.mousewheel;\n\n if (swiper.params.cssmode) {\n e.preventdefault();\n }\n\n var target = swiper.$el;\n\n if (swiper.params.mousewheel.eventstarged !== 'container') {\n target = $(swiper.params.mousewheel.eventstarged);\n }\n\n if (!swiper.mouseentered && !target[0].contains(e.target) && !params.releaseonedges) return true;\n if (e.originalevent) e = e.originalevent; // jquery fix\n\n var delta = 0;\n var rtlfactor = swiper.rtltranslate ? -1 : 1;\n var data = mousewheel.normalize(e);\n\n if (params.forcetoaxis) {\n if (swiper.ishorizontal()) {\n if (math.abs(data.pixelx) > math.abs(data.pixely)) delta = -data.pixelx * rtlfactor;else return true;\n } else if (math.abs(data.pixely) > math.abs(data.pixelx)) delta = -data.pixely;else return true;\n } else {\n delta = math.abs(data.pixelx) > math.abs(data.pixely) ? -data.pixelx * rtlfactor : -data.pixely;\n }\n\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n if (!swiper.params.freemode) {\n // register the new event in a variable which stores the relevant data\n var newevent = {\n time: utils.now(),\n delta: math.abs(delta),\n direction: math.sign(delta),\n raw: event\n }; // keep the most recent events\n\n var recentwheelevents = swiper.mousewheel.recentwheelevents;\n\n if (recentwheelevents.length >= 2) {\n recentwheelevents.shift(); // only store the last n events\n }\n\n var prevevent = recentwheelevents.length ? recentwheelevents[recentwheelevents.length - 1] : undefined;\n recentwheelevents.push(newevent); // if there is at least one previous recorded event:\n // if direction has changed or\n // if the scroll is quicker than the previous one:\n // animate the slider.\n // else (this is the first time the wheel is moved):\n // animate the slider.\n\n if (prevevent) {\n if (newevent.direction !== prevevent.direction || newevent.delta > prevevent.delta || newevent.time > prevevent.time + 150) {\n swiper.mousewheel.animateslider(newevent);\n }\n } else {\n swiper.mousewheel.animateslider(newevent);\n } // if it's time to release the scroll:\n // return now so you don't hit the preventdefault.\n\n\n if (swiper.mousewheel.releasescroll(newevent)) {\n return true;\n }\n } else {\n // freemode or scrollcontainer:\n // if we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n var _newevent = {\n time: utils.now(),\n delta: math.abs(delta),\n direction: math.sign(delta)\n };\n var lasteventbeforesnap = swiper.mousewheel.lasteventbeforesnap;\n var ignorewheelevents = lasteventbeforesnap && _newevent.time < lasteventbeforesnap.time + 500 && _newevent.delta <= lasteventbeforesnap.delta && _newevent.direction === lasteventbeforesnap.direction;\n\n if (!ignorewheelevents) {\n swiper.mousewheel.lasteventbeforesnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopfix();\n }\n\n var position = swiper.gettranslate() + delta * params.sensitivity;\n var wasbeginning = swiper.isbeginning;\n var wasend = swiper.isend;\n if (position >= swiper.mintranslate()) position = swiper.mintranslate();\n if (position <= swiper.maxtranslate()) position = swiper.maxtranslate();\n swiper.settransition(0);\n swiper.settranslate(position);\n swiper.updateprogress();\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n\n if (!wasbeginning && swiper.isbeginning || !wasend && swiper.isend) {\n swiper.updateslidesclasses();\n }\n\n if (swiper.params.freemodesticky) {\n // when wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (n=15?) wheel events.\n // 1. do all n events have decreasing or same (absolute value) delta?\n // 2. did all n events arrive in the last m (m=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least p (p=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than q (q=6?) pixels?\n // if 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n // snap immediately and ignore remaining wheel events in this scroll.\n // see comment above for \"remaining wheel events in this scroll\" determination.\n // if 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n cleartimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = undefined;\n var _recentwheelevents = swiper.mousewheel.recentwheelevents;\n\n if (_recentwheelevents.length >= 15) {\n _recentwheelevents.shift(); // only store the last n events\n\n }\n\n var _prevevent = _recentwheelevents.length ? _recentwheelevents[_recentwheelevents.length - 1] : undefined;\n\n var firstevent = _recentwheelevents[0];\n\n _recentwheelevents.push(_newevent);\n\n if (_prevevent && (_newevent.delta > _prevevent.delta || _newevent.direction !== _prevevent.direction)) {\n // increasing or reverse-sign delta means the user started scrolling again. clear the wheel event log.\n _recentwheelevents.splice(0);\n } else if (_recentwheelevents.length >= 15 && _newevent.time - firstevent.time < 500 && firstevent.delta - _newevent.delta >= 1 && _newevent.delta <= 6) {\n // we're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. snap asap on the next tick.\n // also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better ux for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n var snaptothreshold = delta > 0 ? 0.8 : 0.2;\n swiper.mousewheel.lasteventbeforesnap = _newevent;\n\n _recentwheelevents.splice(0);\n\n swiper.mousewheel.timeout = utils.nexttick(function () {\n swiper.slidetoclosest(swiper.params.speed, true, undefined, snaptothreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!swiper.mousewheel.timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n swiper.mousewheel.timeout = utils.nexttick(function () {\n var snaptothreshold = 0.5;\n swiper.mousewheel.lasteventbeforesnap = _newevent;\n\n _recentwheelevents.splice(0);\n\n swiper.slidetoclosest(swiper.params.speed, true, undefined, snaptothreshold);\n }, 500);\n }\n } // emit event\n\n\n if (!ignorewheelevents) swiper.emit('scroll', e); // stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplaydisableoninteraction) swiper.autoplay.stop(); // return page scroll on edge positions\n\n if (position === swiper.mintranslate() || position === swiper.maxtranslate()) return true;\n }\n }\n\n if (e.preventdefault) e.preventdefault();else e.returnvalue = false;\n return false;\n },\n animateslider: function animateslider(newevent) {\n var swiper = this; // if the movement is not big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // don't go any further (avoid insignificant scroll movement).\n\n if (newevent.delta >= 6 && utils.now() - swiper.mousewheel.lastscrolltime < 60) {\n // return false as a default\n return true;\n } // if user is scrolling towards the end:\n // if the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // go to next slide and\n // emit a scroll event.\n // else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // go to prev slide and\n // emit a scroll event.\n\n\n if (newevent.direction < 0) {\n if ((!swiper.isend || swiper.params.loop) && !swiper.animating) {\n swiper.slidenext();\n swiper.emit('scroll', newevent.raw);\n }\n } else if ((!swiper.isbeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slideprev();\n swiper.emit('scroll', newevent.raw);\n } // if you got here is because an animation has been triggered so store the current time\n\n\n swiper.mousewheel.lastscrolltime = new win.date().gettime(); // return false as a default\n\n return false;\n },\n releasescroll: function releasescroll(newevent) {\n var swiper = this;\n var params = swiper.params.mousewheel;\n\n if (newevent.direction < 0) {\n if (swiper.isend && !swiper.params.loop && params.releaseonedges) {\n // return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isbeginning && !swiper.params.loop && params.releaseonedges) {\n // return true to animate scroll on edges\n return true;\n }\n\n return false;\n },\n enable: function enable() {\n var swiper = this;\n var event = mousewheel.event();\n\n if (swiper.params.cssmode) {\n swiper.wrapperel.removeeventlistener(event, swiper.mousewheel.handle);\n return true;\n }\n\n if (!event) return false;\n if (swiper.mousewheel.enabled) return false;\n var target = swiper.$el;\n\n if (swiper.params.mousewheel.eventstarged !== 'container') {\n target = $(swiper.params.mousewheel.eventstarged);\n }\n\n target.on('mouseenter', swiper.mousewheel.handlemouseenter);\n target.on('mouseleave', swiper.mousewheel.handlemouseleave);\n target.on(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable: function disable() {\n var swiper = this;\n var event = mousewheel.event();\n\n if (swiper.params.cssmode) {\n swiper.wrapperel.addeventlistener(event, swiper.mousewheel.handle);\n return true;\n }\n\n if (!event) return false;\n if (!swiper.mousewheel.enabled) return false;\n var target = swiper.$el;\n\n if (swiper.params.mousewheel.eventstarged !== 'container') {\n target = $(swiper.params.mousewheel.eventstarged);\n }\n\n target.off(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n }\n};\nvar mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseonedges: false,\n invert: false,\n forcetoaxis: false,\n sensitivity: 1,\n eventstarged: 'container'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: mousewheel.enable.bind(swiper),\n disable: mousewheel.disable.bind(swiper),\n handle: mousewheel.handle.bind(swiper),\n handlemouseenter: mousewheel.handlemouseenter.bind(swiper),\n handlemouseleave: mousewheel.handlemouseleave.bind(swiper),\n animateslider: mousewheel.animateslider.bind(swiper),\n releasescroll: mousewheel.releasescroll.bind(swiper),\n lastscrolltime: utils.now(),\n lasteventbeforesnap: undefined,\n recentwheelevents: []\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n\n if (!swiper.params.mousewheel.enabled && swiper.params.cssmode) {\n swiper.mousewheel.disable();\n }\n\n if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (swiper.params.cssmode) {\n swiper.mousewheel.enable();\n }\n\n if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n }\n }\n};\nvar navigation = {\n update: function update() {\n // update navigation buttons\n var swiper = this;\n var params = swiper.params.navigation;\n if (swiper.params.loop) return;\n var _swiper$navigation = swiper.navigation,\n $nextel = _swiper$navigation.$nextel,\n $prevel = _swiper$navigation.$prevel;\n\n if ($prevel && $prevel.length > 0) {\n if (swiper.isbeginning) {\n $prevel.addclass(params.disabledclass);\n } else {\n $prevel.removeclass(params.disabledclass);\n }\n\n $prevel[swiper.params.watchoverflow && swiper.islocked ? 'addclass' : 'removeclass'](params.lockclass);\n }\n\n if ($nextel && $nextel.length > 0) {\n if (swiper.isend) {\n $nextel.addclass(params.disabledclass);\n } else {\n $nextel.removeclass(params.disabledclass);\n }\n\n $nextel[swiper.params.watchoverflow && swiper.islocked ? 'addclass' : 'removeclass'](params.lockclass);\n }\n },\n onprevclick: function onprevclick(e) {\n var swiper = this;\n e.preventdefault();\n if (swiper.isbeginning && !swiper.params.loop) return;\n swiper.slideprev();\n },\n onnextclick: function onnextclick(e) {\n var swiper = this;\n e.preventdefault();\n if (swiper.isend && !swiper.params.loop) return;\n swiper.slidenext();\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.navigation;\n if (!(params.nextel || params.prevel)) return;\n var $nextel;\n var $prevel;\n\n if (params.nextel) {\n $nextel = $(params.nextel);\n\n if (swiper.params.uniquenavelements && typeof params.nextel === 'string' && $nextel.length > 1 && swiper.$el.find(params.nextel).length === 1) {\n $nextel = swiper.$el.find(params.nextel);\n }\n }\n\n if (params.prevel) {\n $prevel = $(params.prevel);\n\n if (swiper.params.uniquenavelements && typeof params.prevel === 'string' && $prevel.length > 1 && swiper.$el.find(params.prevel).length === 1) {\n $prevel = swiper.$el.find(params.prevel);\n }\n }\n\n if ($nextel && $nextel.length > 0) {\n $nextel.on('click', swiper.navigation.onnextclick);\n }\n\n if ($prevel && $prevel.length > 0) {\n $prevel.on('click', swiper.navigation.onprevclick);\n }\n\n utils.extend(swiper.navigation, {\n $nextel: $nextel,\n nextel: $nextel && $nextel[0],\n $prevel: $prevel,\n prevel: $prevel && $prevel[0]\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var _swiper$navigation2 = swiper.navigation,\n $nextel = _swiper$navigation2.$nextel,\n $prevel = _swiper$navigation2.$prevel;\n\n if ($nextel && $nextel.length) {\n $nextel.off('click', swiper.navigation.onnextclick);\n $nextel.removeclass(swiper.params.navigation.disabledclass);\n }\n\n if ($prevel && $prevel.length) {\n $prevel.off('click', swiper.navigation.onprevclick);\n $prevel.removeclass(swiper.params.navigation.disabledclass);\n }\n }\n};\nvar navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextel: null,\n prevel: null,\n hideonclick: false,\n disabledclass: 'swiper-button-disabled',\n hiddenclass: 'swiper-button-hidden',\n lockclass: 'swiper-button-lock'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n navigation: {\n init: navigation.init.bind(swiper),\n update: navigation.update.bind(swiper),\n destroy: navigation.destroy.bind(swiper),\n onnextclick: navigation.onnextclick.bind(swiper),\n onprevclick: navigation.onprevclick.bind(swiper)\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toedge: function toedge() {\n var swiper = this;\n swiper.navigation.update();\n },\n fromedge: function fromedge() {\n var swiper = this;\n swiper.navigation.update();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.navigation.destroy();\n },\n click: function click(e) {\n var swiper = this;\n var _swiper$navigation3 = swiper.navigation,\n $nextel = _swiper$navigation3.$nextel,\n $prevel = _swiper$navigation3.$prevel;\n\n if (swiper.params.navigation.hideonclick && !$(e.target).is($prevel) && !$(e.target).is($nextel)) {\n var ishidden;\n\n if ($nextel) {\n ishidden = $nextel.hasclass(swiper.params.navigation.hiddenclass);\n } else if ($prevel) {\n ishidden = $prevel.hasclass(swiper.params.navigation.hiddenclass);\n }\n\n if (ishidden === true) {\n swiper.emit('navigationshow', swiper);\n } else {\n swiper.emit('navigationhide', swiper);\n }\n\n if ($nextel) {\n $nextel.toggleclass(swiper.params.navigation.hiddenclass);\n }\n\n if ($prevel) {\n $prevel.toggleclass(swiper.params.navigation.hiddenclass);\n }\n }\n }\n }\n};\nvar pagination = {\n update: function update() {\n // render || update pagination bullets/items\n var swiper = this;\n var rtl = swiper.rtl;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n var slideslength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n var $el = swiper.pagination.$el; // current/total\n\n var current;\n var total = swiper.params.loop ? math.ceil((slideslength - swiper.loopedslides * 2) / swiper.params.slidespergroup) : swiper.snapgrid.length;\n\n if (swiper.params.loop) {\n current = math.ceil((swiper.activeindex - swiper.loopedslides) / swiper.params.slidespergroup);\n\n if (current > slideslength - 1 - swiper.loopedslides * 2) {\n current -= slideslength - swiper.loopedslides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationtype !== 'bullets') current = total + current;\n } else if (typeof swiper.snapindex !== 'undefined') {\n current = swiper.snapindex;\n } else {\n current = swiper.activeindex || 0;\n } // types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n var bullets = swiper.pagination.bullets;\n var firstindex;\n var lastindex;\n var midindex;\n\n if (params.dynamicbullets) {\n swiper.pagination.bulletsize = bullets.eq(0)[swiper.ishorizontal() ? 'outerwidth' : 'outerheight'](true);\n $el.css(swiper.ishorizontal() ? 'width' : 'height', \"\".concat(swiper.pagination.bulletsize * (params.dynamicmainbullets + 4), \"px\"));\n\n if (params.dynamicmainbullets > 1 && swiper.previousindex !== undefined) {\n swiper.pagination.dynamicbulletindex += current - swiper.previousindex;\n\n if (swiper.pagination.dynamicbulletindex > params.dynamicmainbullets - 1) {\n swiper.pagination.dynamicbulletindex = params.dynamicmainbullets - 1;\n } else if (swiper.pagination.dynamicbulletindex < 0) {\n swiper.pagination.dynamicbulletindex = 0;\n }\n }\n\n firstindex = current - swiper.pagination.dynamicbulletindex;\n lastindex = firstindex + (math.min(bullets.length, params.dynamicmainbullets) - 1);\n midindex = (lastindex + firstindex) / 2;\n }\n\n bullets.removeclass(\"\".concat(params.bulletactiveclass, \" \").concat(params.bulletactiveclass, \"-next \").concat(params.bulletactiveclass, \"-next-next \").concat(params.bulletactiveclass, \"-prev \").concat(params.bulletactiveclass, \"-prev-prev \").concat(params.bulletactiveclass, \"-main\"));\n\n if ($el.length > 1) {\n bullets.each(function (index, bullet) {\n var $bullet = $(bullet);\n var bulletindex = $bullet.index();\n\n if (bulletindex === current) {\n $bullet.addclass(params.bulletactiveclass);\n }\n\n if (params.dynamicbullets) {\n if (bulletindex >= firstindex && bulletindex <= lastindex) {\n $bullet.addclass(\"\".concat(params.bulletactiveclass, \"-main\"));\n }\n\n if (bulletindex === firstindex) {\n $bullet.prev().addclass(\"\".concat(params.bulletactiveclass, \"-prev\")).prev().addclass(\"\".concat(params.bulletactiveclass, \"-prev-prev\"));\n }\n\n if (bulletindex === lastindex) {\n $bullet.next().addclass(\"\".concat(params.bulletactiveclass, \"-next\")).next().addclass(\"\".concat(params.bulletactiveclass, \"-next-next\"));\n }\n }\n });\n } else {\n var $bullet = bullets.eq(current);\n var bulletindex = $bullet.index();\n $bullet.addclass(params.bulletactiveclass);\n\n if (params.dynamicbullets) {\n var $firstdisplayedbullet = bullets.eq(firstindex);\n var $lastdisplayedbullet = bullets.eq(lastindex);\n\n for (var i = firstindex; i <= lastindex; i += 1) {\n bullets.eq(i).addclass(\"\".concat(params.bulletactiveclass, \"-main\"));\n }\n\n if (swiper.params.loop) {\n if (bulletindex >= bullets.length - params.dynamicmainbullets) {\n for (var _i10 = params.dynamicmainbullets; _i10 >= 0; _i10 -= 1) {\n bullets.eq(bullets.length - _i10).addclass(\"\".concat(params.bulletactiveclass, \"-main\"));\n }\n\n bullets.eq(bullets.length - params.dynamicmainbullets - 1).addclass(\"\".concat(params.bulletactiveclass, \"-prev\"));\n } else {\n $firstdisplayedbullet.prev().addclass(\"\".concat(params.bulletactiveclass, \"-prev\")).prev().addclass(\"\".concat(params.bulletactiveclass, \"-prev-prev\"));\n $lastdisplayedbullet.next().addclass(\"\".concat(params.bulletactiveclass, \"-next\")).next().addclass(\"\".concat(params.bulletactiveclass, \"-next-next\"));\n }\n } else {\n $firstdisplayedbullet.prev().addclass(\"\".concat(params.bulletactiveclass, \"-prev\")).prev().addclass(\"\".concat(params.bulletactiveclass, \"-prev-prev\"));\n $lastdisplayedbullet.next().addclass(\"\".concat(params.bulletactiveclass, \"-next\")).next().addclass(\"\".concat(params.bulletactiveclass, \"-next-next\"));\n }\n }\n }\n\n if (params.dynamicbullets) {\n var dynamicbulletslength = math.min(bullets.length, params.dynamicmainbullets + 4);\n var bulletsoffset = (swiper.pagination.bulletsize * dynamicbulletslength - swiper.pagination.bulletsize) / 2 - midindex * swiper.pagination.bulletsize;\n var offsetprop = rtl ? 'right' : 'left';\n bullets.css(swiper.ishorizontal() ? offsetprop : 'top', \"\".concat(bulletsoffset, \"px\"));\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(\".\".concat(params.currentclass)).text(params.formatfractioncurrent(current + 1));\n $el.find(\".\".concat(params.totalclass)).text(params.formatfractiontotal(total));\n }\n\n if (params.type === 'progressbar') {\n var progressbardirection;\n\n if (params.progressbaropposite) {\n progressbardirection = swiper.ishorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbardirection = swiper.ishorizontal() ? 'horizontal' : 'vertical';\n }\n\n var scale = (current + 1) / total;\n var scalex = 1;\n var scaley = 1;\n\n if (progressbardirection === 'horizontal') {\n scalex = scale;\n } else {\n scaley = scale;\n }\n\n $el.find(\".\".concat(params.progressbarfillclass)).transform(\"translate3d(0,0,0) scalex(\".concat(scalex, \") scaley(\").concat(scaley, \")\")).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.rendercustom) {\n $el.html(params.rendercustom(swiper, current + 1, total));\n swiper.emit('paginationrender', swiper, $el[0]);\n } else {\n swiper.emit('paginationupdate', swiper, $el[0]);\n }\n\n $el[swiper.params.watchoverflow && swiper.islocked ? 'addclass' : 'removeclass'](params.lockclass);\n },\n render: function render() {\n // render container\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n var slideslength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n var $el = swiper.pagination.$el;\n var paginationhtml = '';\n\n if (params.type === 'bullets') {\n var numberofbullets = swiper.params.loop ? math.ceil((slideslength - swiper.loopedslides * 2) / swiper.params.slidespergroup) : swiper.snapgrid.length;\n\n for (var i = 0; i < numberofbullets; i += 1) {\n if (params.renderbullet) {\n paginationhtml += params.renderbullet.call(swiper, i, params.bulletclass);\n } else {\n paginationhtml += \"<\".concat(params.bulletelement, \" class=\\\"\").concat(params.bulletclass, \"\\\">\");\n }\n }\n\n $el.html(paginationhtml);\n swiper.pagination.bullets = $el.find(\".\".concat(params.bulletclass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderfraction) {\n paginationhtml = params.renderfraction.call(swiper, params.currentclass, params.totalclass);\n } else {\n paginationhtml = \"\") + ' / ' + \"\");\n }\n\n $el.html(paginationhtml);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderprogressbar) {\n paginationhtml = params.renderprogressbar.call(swiper, params.progressbarfillclass);\n } else {\n paginationhtml = \"\");\n }\n\n $el.html(paginationhtml);\n }\n\n if (params.type !== 'custom') {\n swiper.emit('paginationrender', swiper.pagination.$el[0]);\n }\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el) return;\n var $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniquenavelements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addclass(params.clickableclass);\n }\n\n $el.addclass(params.modifierclass + params.type);\n\n if (params.type === 'bullets' && params.dynamicbullets) {\n $el.addclass(\"\".concat(params.modifierclass).concat(params.type, \"-dynamic\"));\n swiper.pagination.dynamicbulletindex = 0;\n\n if (params.dynamicmainbullets < 1) {\n params.dynamicmainbullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbaropposite) {\n $el.addclass(params.progressbaroppositeclass);\n }\n\n if (params.clickable) {\n $el.on('click', \".\".concat(params.bulletclass), function onclick(e) {\n e.preventdefault();\n var index = $(this).index() * swiper.params.slidespergroup;\n if (swiper.params.loop) index += swiper.loopedslides;\n swiper.slideto(index);\n });\n }\n\n utils.extend(swiper.pagination, {\n $el: $el,\n el: $el[0]\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n var $el = swiper.pagination.$el;\n $el.removeclass(params.hiddenclass);\n $el.removeclass(params.modifierclass + params.type);\n if (swiper.pagination.bullets) swiper.pagination.bullets.removeclass(params.bulletactiveclass);\n\n if (params.clickable) {\n $el.off('click', \".\".concat(params.bulletclass));\n }\n }\n};\nvar pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletelement: 'span',\n clickable: false,\n hideonclick: false,\n renderbullet: null,\n renderprogressbar: null,\n renderfraction: null,\n rendercustom: null,\n progressbaropposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicbullets: false,\n dynamicmainbullets: 1,\n formatfractioncurrent: function formatfractioncurrent(number) {\n return number;\n },\n formatfractiontotal: function formatfractiontotal(number) {\n return number;\n },\n bulletclass: 'swiper-pagination-bullet',\n bulletactiveclass: 'swiper-pagination-bullet-active',\n modifierclass: 'swiper-pagination-',\n // new\n currentclass: 'swiper-pagination-current',\n totalclass: 'swiper-pagination-total',\n hiddenclass: 'swiper-pagination-hidden',\n progressbarfillclass: 'swiper-pagination-progressbar-fill',\n progressbaroppositeclass: 'swiper-pagination-progressbar-opposite',\n clickableclass: 'swiper-pagination-clickable',\n // new\n lockclass: 'swiper-pagination-lock'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n pagination: {\n init: pagination.init.bind(swiper),\n render: pagination.render.bind(swiper),\n update: pagination.update.bind(swiper),\n destroy: pagination.destroy.bind(swiper),\n dynamicbulletindex: 0\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeindexchange: function activeindexchange() {\n var swiper = this;\n\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapindex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapindexchange: function snapindexchange() {\n var swiper = this;\n\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slideslengthchange: function slideslengthchange() {\n var swiper = this;\n\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapgridlengthchange: function snapgridlengthchange() {\n var swiper = this;\n\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.pagination.destroy();\n },\n click: function click(e) {\n var swiper = this;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideonclick && swiper.pagination.$el.length > 0 && !$(e.target).hasclass(swiper.params.pagination.bulletclass)) {\n var ishidden = swiper.pagination.$el.hasclass(swiper.params.pagination.hiddenclass);\n\n if (ishidden === true) {\n swiper.emit('paginationshow', swiper);\n } else {\n swiper.emit('paginationhide', swiper);\n }\n\n swiper.pagination.$el.toggleclass(swiper.params.pagination.hiddenclass);\n }\n }\n }\n};\nvar scrollbar = {\n settranslate: function settranslate() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n rtl = swiper.rtltranslate,\n progress = swiper.progress;\n var dragsize = scrollbar.dragsize,\n tracksize = scrollbar.tracksize,\n $dragel = scrollbar.$dragel,\n $el = scrollbar.$el;\n var params = swiper.params.scrollbar;\n var newsize = dragsize;\n var newpos = (tracksize - dragsize) * progress;\n\n if (rtl) {\n newpos = -newpos;\n\n if (newpos > 0) {\n newsize = dragsize - newpos;\n newpos = 0;\n } else if (-newpos + dragsize > tracksize) {\n newsize = tracksize + newpos;\n }\n } else if (newpos < 0) {\n newsize = dragsize + newpos;\n newpos = 0;\n } else if (newpos + dragsize > tracksize) {\n newsize = tracksize - newpos;\n }\n\n if (swiper.ishorizontal()) {\n $dragel.transform(\"translate3d(\".concat(newpos, \"px, 0, 0)\"));\n $dragel[0].style.width = \"\".concat(newsize, \"px\");\n } else {\n $dragel.transform(\"translate3d(0px, \".concat(newpos, \"px, 0)\"));\n $dragel[0].style.height = \"\".concat(newsize, \"px\");\n }\n\n if (params.hide) {\n cleartimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = settimeout(function () {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n settransition: function settransition(duration) {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragel.transition(duration);\n },\n updatesize: function updatesize() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n var scrollbar = swiper.scrollbar;\n var $dragel = scrollbar.$dragel,\n $el = scrollbar.$el;\n $dragel[0].style.width = '';\n $dragel[0].style.height = '';\n var tracksize = swiper.ishorizontal() ? $el[0].offsetwidth : $el[0].offsetheight;\n var divider = swiper.size / swiper.virtualsize;\n var movedivider = divider * (tracksize / swiper.size);\n var dragsize;\n\n if (swiper.params.scrollbar.dragsize === 'auto') {\n dragsize = tracksize * divider;\n } else {\n dragsize = parseint(swiper.params.scrollbar.dragsize, 10);\n }\n\n if (swiper.ishorizontal()) {\n $dragel[0].style.width = \"\".concat(dragsize, \"px\");\n } else {\n $dragel[0].style.height = \"\".concat(dragsize, \"px\");\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n utils.extend(scrollbar, {\n tracksize: tracksize,\n divider: divider,\n movedivider: movedivider,\n dragsize: dragsize\n });\n scrollbar.$el[swiper.params.watchoverflow && swiper.islocked ? 'addclass' : 'removeclass'](swiper.params.scrollbar.lockclass);\n },\n getpointerposition: function getpointerposition(e) {\n var swiper = this;\n\n if (swiper.ishorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targettouches[0].clientx : e.clientx;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targettouches[0].clienty : e.clienty;\n },\n setdragposition: function setdragposition(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar,\n rtl = swiper.rtltranslate;\n var $el = scrollbar.$el,\n dragsize = scrollbar.dragsize,\n tracksize = scrollbar.tracksize,\n dragstartpos = scrollbar.dragstartpos;\n var positionratio;\n positionratio = (scrollbar.getpointerposition(e) - $el.offset()[swiper.ishorizontal() ? 'left' : 'top'] - (dragstartpos !== null ? dragstartpos : dragsize / 2)) / (tracksize - dragsize);\n positionratio = math.max(math.min(positionratio, 1), 0);\n\n if (rtl) {\n positionratio = 1 - positionratio;\n }\n\n var position = swiper.mintranslate() + (swiper.maxtranslate() - swiper.mintranslate()) * positionratio;\n swiper.updateprogress(position);\n swiper.settranslate(position);\n swiper.updateactiveindex();\n swiper.updateslidesclasses();\n },\n ondragstart: function ondragstart(e) {\n var swiper = this;\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar,\n $wrapperel = swiper.$wrapperel;\n var $el = scrollbar.$el,\n $dragel = scrollbar.$dragel;\n swiper.scrollbar.istouched = true;\n swiper.scrollbar.dragstartpos = e.target === $dragel[0] || e.target === $dragel ? scrollbar.getpointerposition(e) - e.target.getboundingclientrect()[swiper.ishorizontal() ? 'left' : 'top'] : null;\n e.preventdefault();\n e.stoppropagation();\n $wrapperel.transition(100);\n $dragel.transition(100);\n scrollbar.setdragposition(e);\n cleartimeout(swiper.scrollbar.dragtimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssmode) {\n swiper.$wrapperel.css('scroll-snap-type', 'none');\n }\n\n swiper.emit('scrollbardragstart', e);\n },\n ondragmove: function ondragmove(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar,\n $wrapperel = swiper.$wrapperel;\n var $el = scrollbar.$el,\n $dragel = scrollbar.$dragel;\n if (!swiper.scrollbar.istouched) return;\n if (e.preventdefault) e.preventdefault();else e.returnvalue = false;\n scrollbar.setdragposition(e);\n $wrapperel.transition(0);\n $el.transition(0);\n $dragel.transition(0);\n swiper.emit('scrollbardragmove', e);\n },\n ondragend: function ondragend(e) {\n var swiper = this;\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar,\n $wrapperel = swiper.$wrapperel;\n var $el = scrollbar.$el;\n if (!swiper.scrollbar.istouched) return;\n swiper.scrollbar.istouched = false;\n\n if (swiper.params.cssmode) {\n swiper.$wrapperel.css('scroll-snap-type', '');\n $wrapperel.transition('');\n }\n\n if (params.hide) {\n cleartimeout(swiper.scrollbar.dragtimeout);\n swiper.scrollbar.dragtimeout = utils.nexttick(function () {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n swiper.emit('scrollbardragend', e);\n\n if (params.snaponrelease) {\n swiper.slidetoclosest();\n }\n },\n enabledraggable: function enabledraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n toucheventstouch = swiper.toucheventstouch,\n toucheventsdesktop = swiper.toucheventsdesktop,\n params = swiper.params;\n var $el = scrollbar.$el;\n var target = $el[0];\n var activelistener = support.passivelistener && params.passivelisteners ? {\n passive: false,\n capture: false\n } : false;\n var passivelistener = support.passivelistener && params.passivelisteners ? {\n passive: true,\n capture: false\n } : false;\n\n if (!support.touch) {\n target.addeventlistener(toucheventsdesktop.start, swiper.scrollbar.ondragstart, activelistener);\n doc.addeventlistener(toucheventsdesktop.move, swiper.scrollbar.ondragmove, activelistener);\n doc.addeventlistener(toucheventsdesktop.end, swiper.scrollbar.ondragend, passivelistener);\n } else {\n target.addeventlistener(toucheventstouch.start, swiper.scrollbar.ondragstart, activelistener);\n target.addeventlistener(toucheventstouch.move, swiper.scrollbar.ondragmove, activelistener);\n target.addeventlistener(toucheventstouch.end, swiper.scrollbar.ondragend, passivelistener);\n }\n },\n disabledraggable: function disabledraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n toucheventstouch = swiper.toucheventstouch,\n toucheventsdesktop = swiper.toucheventsdesktop,\n params = swiper.params;\n var $el = scrollbar.$el;\n var target = $el[0];\n var activelistener = support.passivelistener && params.passivelisteners ? {\n passive: false,\n capture: false\n } : false;\n var passivelistener = support.passivelistener && params.passivelisteners ? {\n passive: true,\n capture: false\n } : false;\n\n if (!support.touch) {\n target.removeeventlistener(toucheventsdesktop.start, swiper.scrollbar.ondragstart, activelistener);\n doc.removeeventlistener(toucheventsdesktop.move, swiper.scrollbar.ondragmove, activelistener);\n doc.removeeventlistener(toucheventsdesktop.end, swiper.scrollbar.ondragend, passivelistener);\n } else {\n target.removeeventlistener(toucheventstouch.start, swiper.scrollbar.ondragstart, activelistener);\n target.removeeventlistener(toucheventstouch.move, swiper.scrollbar.ondragmove, activelistener);\n target.removeeventlistener(toucheventstouch.end, swiper.scrollbar.ondragend, passivelistener);\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) return;\n var scrollbar = swiper.scrollbar,\n $swiperel = swiper.$el;\n var params = swiper.params.scrollbar;\n var $el = $(params.el);\n\n if (swiper.params.uniquenavelements && typeof params.el === 'string' && $el.length > 1 && $swiperel.find(params.el).length === 1) {\n $el = $swiperel.find(params.el);\n }\n\n var $dragel = $el.find(\".\".concat(swiper.params.scrollbar.dragclass));\n\n if ($dragel.length === 0) {\n $dragel = $(\"
\"));\n $el.append($dragel);\n }\n\n utils.extend(scrollbar, {\n $el: $el,\n el: $el[0],\n $dragel: $dragel,\n dragel: $dragel[0]\n });\n\n if (params.draggable) {\n scrollbar.enabledraggable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.disabledraggable();\n }\n};\nvar scrollbar$1 = {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragsize: 'auto',\n hide: false,\n draggable: false,\n snaponrelease: true,\n lockclass: 'swiper-scrollbar-lock',\n dragclass: 'swiper-scrollbar-drag'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n scrollbar: {\n init: scrollbar.init.bind(swiper),\n destroy: scrollbar.destroy.bind(swiper),\n updatesize: scrollbar.updatesize.bind(swiper),\n settranslate: scrollbar.settranslate.bind(swiper),\n settransition: scrollbar.settransition.bind(swiper),\n enabledraggable: scrollbar.enabledraggable.bind(swiper),\n disabledraggable: scrollbar.disabledraggable.bind(swiper),\n setdragposition: scrollbar.setdragposition.bind(swiper),\n getpointerposition: scrollbar.getpointerposition.bind(swiper),\n ondragstart: scrollbar.ondragstart.bind(swiper),\n ondragmove: scrollbar.ondragmove.bind(swiper),\n ondragend: scrollbar.ondragend.bind(swiper),\n istouched: false,\n timeout: null,\n dragtimeout: null\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.scrollbar.init();\n swiper.scrollbar.updatesize();\n swiper.scrollbar.settranslate();\n },\n update: function update() {\n var swiper = this;\n swiper.scrollbar.updatesize();\n },\n resize: function resize() {\n var swiper = this;\n swiper.scrollbar.updatesize();\n },\n observerupdate: function observerupdate() {\n var swiper = this;\n swiper.scrollbar.updatesize();\n },\n settranslate: function settranslate() {\n var swiper = this;\n swiper.scrollbar.settranslate();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n swiper.scrollbar.settransition(duration);\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.destroy();\n }\n }\n};\nvar parallax = {\n settransform: function settransform(el, progress) {\n var swiper = this;\n var rtl = swiper.rtl;\n var $el = $(el);\n var rtlfactor = rtl ? -1 : 1;\n var p = $el.attr('data-swiper-parallax') || '0';\n var x = $el.attr('data-swiper-parallax-x');\n var y = $el.attr('data-swiper-parallax-y');\n var scale = $el.attr('data-swiper-parallax-scale');\n var opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.ishorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexof('%') >= 0) {\n x = \"\".concat(parseint(x, 10) * progress * rtlfactor, \"%\");\n } else {\n x = \"\".concat(x * progress * rtlfactor, \"px\");\n }\n\n if (y.indexof('%') >= 0) {\n y = \"\".concat(parseint(y, 10) * progress, \"%\");\n } else {\n y = \"\".concat(y * progress, \"px\");\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n var currentopacity = opacity - (opacity - 1) * (1 - math.abs(progress));\n $el[0].style.opacity = currentopacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(\"translate3d(\".concat(x, \", \").concat(y, \", 0px)\"));\n } else {\n var currentscale = scale - (scale - 1) * (1 - math.abs(progress));\n $el.transform(\"translate3d(\".concat(x, \", \").concat(y, \", 0px) scale(\").concat(currentscale, \")\"));\n }\n },\n settranslate: function settranslate() {\n var swiper = this;\n var $el = swiper.$el,\n slides = swiper.slides,\n progress = swiper.progress,\n snapgrid = swiper.snapgrid;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {\n swiper.parallax.settransform(el, progress);\n });\n slides.each(function (slideindex, slideel) {\n var slideprogress = slideel.progress;\n\n if (swiper.params.slidespergroup > 1 && swiper.params.slidesperview !== 'auto') {\n slideprogress += math.ceil(slideindex / 2) - progress * (snapgrid.length - 1);\n }\n\n slideprogress = math.min(math.max(slideprogress, -1), 1);\n $(slideel).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {\n swiper.parallax.settransform(el, slideprogress);\n });\n });\n },\n settransition: function settransition() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;\n var swiper = this;\n var $el = swiper.$el;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, parallaxel) {\n var $parallaxel = $(parallaxel);\n var parallaxduration = parseint($parallaxel.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxduration = 0;\n $parallaxel.transition(parallaxduration);\n });\n }\n};\nvar parallax$1 = {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n parallax: {\n settransform: parallax.settransform.bind(swiper),\n settranslate: parallax.settranslate.bind(swiper),\n settransition: parallax.settransition.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchslidesprogress = true;\n swiper.originalparams.watchslidesprogress = true;\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.settranslate();\n },\n settranslate: function settranslate() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.settranslate();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.settransition(duration);\n }\n }\n};\nvar zoom = {\n // calc scale from multi-touches\n getdistancebetweentouches: function getdistancebetweentouches(e) {\n if (e.targettouches.length < 2) return 1;\n var x1 = e.targettouches[0].pagex;\n var y1 = e.targettouches[0].pagey;\n var x2 = e.targettouches[1].pagex;\n var y2 = e.targettouches[1].pagey;\n var distance = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2));\n return distance;\n },\n // events\n ongesturestart: function ongesturestart(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n zoom.fakegesturetouched = false;\n zoom.fakegesturemoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targettouches.length < 2) {\n return;\n }\n\n zoom.fakegesturetouched = true;\n gesture.scalestart = zoom.getdistancebetweentouches(e);\n }\n\n if (!gesture.$slideel || !gesture.$slideel.length) {\n gesture.$slideel = $(e.target).closest(\".\".concat(swiper.params.slideclass));\n if (gesture.$slideel.length === 0) gesture.$slideel = swiper.slides.eq(swiper.activeindex);\n gesture.$imageel = gesture.$slideel.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imagewrapel = gesture.$imageel.parent(\".\".concat(params.containerclass));\n gesture.maxratio = gesture.$imagewrapel.attr('data-swiper-zoom') || params.maxratio;\n\n if (gesture.$imagewrapel.length === 0) {\n gesture.$imageel = undefined;\n return;\n }\n }\n\n if (gesture.$imageel) {\n gesture.$imageel.transition(0);\n }\n\n swiper.zoom.isscaling = true;\n },\n ongesturechange: function ongesturechange(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targettouches.length < 2) {\n return;\n }\n\n zoom.fakegesturemoved = true;\n gesture.scalemove = zoom.getdistancebetweentouches(e);\n }\n\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n\n if (support.gestures) {\n zoom.scale = e.scale * zoom.currentscale;\n } else {\n zoom.scale = gesture.scalemove / gesture.scalestart * zoom.currentscale;\n }\n\n if (zoom.scale > gesture.maxratio) {\n zoom.scale = gesture.maxratio - 1 + math.pow(zoom.scale - gesture.maxratio + 1, 0.5);\n }\n\n if (zoom.scale < params.minratio) {\n zoom.scale = params.minratio + 1 - math.pow(params.minratio - zoom.scale + 1, 0.5);\n }\n\n gesture.$imageel.transform(\"translate3d(0,0,0) scale(\".concat(zoom.scale, \")\"));\n },\n ongestureend: function ongestureend(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n if (!support.gestures) {\n if (!zoom.fakegesturetouched || !zoom.fakegesturemoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedtouches.length < 2 && !device.android) {\n return;\n }\n\n zoom.fakegesturetouched = false;\n zoom.fakegesturemoved = false;\n }\n\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n zoom.scale = math.max(math.min(zoom.scale, gesture.maxratio), params.minratio);\n gesture.$imageel.transition(swiper.params.speed).transform(\"translate3d(0,0,0) scale(\".concat(zoom.scale, \")\"));\n zoom.currentscale = zoom.scale;\n zoom.isscaling = false;\n if (zoom.scale === 1) gesture.$slideel = undefined;\n },\n ontouchstart: function ontouchstart(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture,\n image = zoom.image;\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n if (image.istouched) return;\n if (device.android && e.cancelable) e.preventdefault();\n image.istouched = true;\n image.touchesstart.x = e.type === 'touchstart' ? e.targettouches[0].pagex : e.pagex;\n image.touchesstart.y = e.type === 'touchstart' ? e.targettouches[0].pagey : e.pagey;\n },\n ontouchmove: function ontouchmove(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture,\n image = zoom.image,\n velocity = zoom.velocity;\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n swiper.allowclick = false;\n if (!image.istouched || !gesture.$slideel) return;\n\n if (!image.ismoved) {\n image.width = gesture.$imageel[0].offsetwidth;\n image.height = gesture.$imageel[0].offsetheight;\n image.startx = utils.gettranslate(gesture.$imagewrapel[0], 'x') || 0;\n image.starty = utils.gettranslate(gesture.$imagewrapel[0], 'y') || 0;\n gesture.slidewidth = gesture.$slideel[0].offsetwidth;\n gesture.slideheight = gesture.$slideel[0].offsetheight;\n gesture.$imagewrapel.transition(0);\n\n if (swiper.rtl) {\n image.startx = -image.startx;\n image.starty = -image.starty;\n }\n } // define if we need image drag\n\n\n var scaledwidth = image.width * zoom.scale;\n var scaledheight = image.height * zoom.scale;\n if (scaledwidth < gesture.slidewidth && scaledheight < gesture.slideheight) return;\n image.minx = math.min(gesture.slidewidth / 2 - scaledwidth / 2, 0);\n image.maxx = -image.minx;\n image.miny = math.min(gesture.slideheight / 2 - scaledheight / 2, 0);\n image.maxy = -image.miny;\n image.touchescurrent.x = e.type === 'touchmove' ? e.targettouches[0].pagex : e.pagex;\n image.touchescurrent.y = e.type === 'touchmove' ? e.targettouches[0].pagey : e.pagey;\n\n if (!image.ismoved && !zoom.isscaling) {\n 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)) {\n image.istouched = false;\n return;\n }\n\n 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)) {\n image.istouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventdefault();\n }\n\n e.stoppropagation();\n image.ismoved = true;\n image.currentx = image.touchescurrent.x - image.touchesstart.x + image.startx;\n image.currenty = image.touchescurrent.y - image.touchesstart.y + image.starty;\n\n if (image.currentx < image.minx) {\n image.currentx = image.minx + 1 - math.pow(image.minx - image.currentx + 1, 0.8);\n }\n\n if (image.currentx > image.maxx) {\n image.currentx = image.maxx - 1 + math.pow(image.currentx - image.maxx + 1, 0.8);\n }\n\n if (image.currenty < image.miny) {\n image.currenty = image.miny + 1 - math.pow(image.miny - image.currenty + 1, 0.8);\n }\n\n if (image.currenty > image.maxy) {\n image.currenty = image.maxy - 1 + math.pow(image.currenty - image.maxy + 1, 0.8);\n } // velocity\n\n\n if (!velocity.prevpositionx) velocity.prevpositionx = image.touchescurrent.x;\n if (!velocity.prevpositiony) velocity.prevpositiony = image.touchescurrent.y;\n if (!velocity.prevtime) velocity.prevtime = date.now();\n velocity.x = (image.touchescurrent.x - velocity.prevpositionx) / (date.now() - velocity.prevtime) / 2;\n velocity.y = (image.touchescurrent.y - velocity.prevpositiony) / (date.now() - velocity.prevtime) / 2;\n if (math.abs(image.touchescurrent.x - velocity.prevpositionx) < 2) velocity.x = 0;\n if (math.abs(image.touchescurrent.y - velocity.prevpositiony) < 2) velocity.y = 0;\n velocity.prevpositionx = image.touchescurrent.x;\n velocity.prevpositiony = image.touchescurrent.y;\n velocity.prevtime = date.now();\n gesture.$imagewrapel.transform(\"translate3d(\".concat(image.currentx, \"px, \").concat(image.currenty, \"px,0)\"));\n },\n ontouchend: function ontouchend() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture,\n image = zoom.image,\n velocity = zoom.velocity;\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n\n if (!image.istouched || !image.ismoved) {\n image.istouched = false;\n image.ismoved = false;\n return;\n }\n\n image.istouched = false;\n image.ismoved = false;\n var momentumdurationx = 300;\n var momentumdurationy = 300;\n var momentumdistancex = velocity.x * momentumdurationx;\n var newpositionx = image.currentx + momentumdistancex;\n var momentumdistancey = velocity.y * momentumdurationy;\n var newpositiony = image.currenty + momentumdistancey; // fix duration\n\n if (velocity.x !== 0) momentumdurationx = math.abs((newpositionx - image.currentx) / velocity.x);\n if (velocity.y !== 0) momentumdurationy = math.abs((newpositiony - image.currenty) / velocity.y);\n var momentumduration = math.max(momentumdurationx, momentumdurationy);\n image.currentx = newpositionx;\n image.currenty = newpositiony; // define if we need image drag\n\n var scaledwidth = image.width * zoom.scale;\n var scaledheight = image.height * zoom.scale;\n image.minx = math.min(gesture.slidewidth / 2 - scaledwidth / 2, 0);\n image.maxx = -image.minx;\n image.miny = math.min(gesture.slideheight / 2 - scaledheight / 2, 0);\n image.maxy = -image.miny;\n image.currentx = math.max(math.min(image.currentx, image.maxx), image.minx);\n image.currenty = math.max(math.min(image.currenty, image.maxy), image.miny);\n gesture.$imagewrapel.transition(momentumduration).transform(\"translate3d(\".concat(image.currentx, \"px, \").concat(image.currenty, \"px,0)\"));\n },\n ontransitionend: function ontransitionend() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n\n if (gesture.$slideel && swiper.previousindex !== swiper.activeindex) {\n if (gesture.$imageel) {\n gesture.$imageel.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imagewrapel) {\n gesture.$imagewrapel.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n zoom.currentscale = 1;\n gesture.$slideel = undefined;\n gesture.$imageel = undefined;\n gesture.$imagewrapel = undefined;\n }\n },\n // toggle zoom\n toggle: function toggle(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // zoom out\n zoom.out();\n } else {\n // zoom in\n zoom.in(e);\n }\n },\n in: function _in(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture,\n image = zoom.image;\n\n if (!gesture.$slideel) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideel = swiper.$wrapperel.children(\".\".concat(swiper.params.slideactiveclass));\n } else {\n gesture.$slideel = swiper.slides.eq(swiper.activeindex);\n }\n\n gesture.$imageel = gesture.$slideel.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imagewrapel = gesture.$imageel.parent(\".\".concat(params.containerclass));\n }\n\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n gesture.$slideel.addclass(\"\".concat(params.zoomedslideclass));\n var touchx;\n var touchy;\n var offsetx;\n var offsety;\n var diffx;\n var diffy;\n var translatex;\n var translatey;\n var imagewidth;\n var imageheight;\n var scaledwidth;\n var scaledheight;\n var translateminx;\n var translateminy;\n var translatemaxx;\n var translatemaxy;\n var slidewidth;\n var slideheight;\n\n if (typeof image.touchesstart.x === 'undefined' && e) {\n touchx = e.type === 'touchend' ? e.changedtouches[0].pagex : e.pagex;\n touchy = e.type === 'touchend' ? e.changedtouches[0].pagey : e.pagey;\n } else {\n touchx = image.touchesstart.x;\n touchy = image.touchesstart.y;\n }\n\n zoom.scale = gesture.$imagewrapel.attr('data-swiper-zoom') || params.maxratio;\n zoom.currentscale = gesture.$imagewrapel.attr('data-swiper-zoom') || params.maxratio;\n\n if (e) {\n slidewidth = gesture.$slideel[0].offsetwidth;\n slideheight = gesture.$slideel[0].offsetheight;\n offsetx = gesture.$slideel.offset().left;\n offsety = gesture.$slideel.offset().top;\n diffx = offsetx + slidewidth / 2 - touchx;\n diffy = offsety + slideheight / 2 - touchy;\n imagewidth = gesture.$imageel[0].offsetwidth;\n imageheight = gesture.$imageel[0].offsetheight;\n scaledwidth = imagewidth * zoom.scale;\n scaledheight = imageheight * zoom.scale;\n translateminx = math.min(slidewidth / 2 - scaledwidth / 2, 0);\n translateminy = math.min(slideheight / 2 - scaledheight / 2, 0);\n translatemaxx = -translateminx;\n translatemaxy = -translateminy;\n translatex = diffx * zoom.scale;\n translatey = diffy * zoom.scale;\n\n if (translatex < translateminx) {\n translatex = translateminx;\n }\n\n if (translatex > translatemaxx) {\n translatex = translatemaxx;\n }\n\n if (translatey < translateminy) {\n translatey = translateminy;\n }\n\n if (translatey > translatemaxy) {\n translatey = translatemaxy;\n }\n } else {\n translatex = 0;\n translatey = 0;\n }\n\n gesture.$imagewrapel.transition(300).transform(\"translate3d(\".concat(translatex, \"px, \").concat(translatey, \"px,0)\"));\n gesture.$imageel.transition(300).transform(\"translate3d(0,0,0) scale(\".concat(zoom.scale, \")\"));\n },\n out: function out() {\n var swiper = this;\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture;\n\n if (!gesture.$slideel) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideel = swiper.$wrapperel.children(\".\".concat(swiper.params.slideactiveclass));\n } else {\n gesture.$slideel = swiper.slides.eq(swiper.activeindex);\n }\n\n gesture.$imageel = gesture.$slideel.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imagewrapel = gesture.$imageel.parent(\".\".concat(params.containerclass));\n }\n\n if (!gesture.$imageel || gesture.$imageel.length === 0) return;\n zoom.scale = 1;\n zoom.currentscale = 1;\n gesture.$imagewrapel.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageel.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideel.removeclass(\"\".concat(params.zoomedslideclass));\n gesture.$slideel = undefined;\n },\n // attach/detach events\n enable: function enable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n var passivelistener = swiper.touchevents.start === 'touchstart' && support.passivelistener && swiper.params.passivelisteners ? {\n passive: true,\n capture: false\n } : false;\n var activelistenerwithcapture = support.passivelistener ? {\n passive: false,\n capture: true\n } : true;\n var slideselector = \".\".concat(swiper.params.slideclass); // scale image\n\n if (support.gestures) {\n swiper.$wrapperel.on('gesturestart', slideselector, zoom.ongesturestart, passivelistener);\n swiper.$wrapperel.on('gesturechange', slideselector, zoom.ongesturechange, passivelistener);\n swiper.$wrapperel.on('gestureend', slideselector, zoom.ongestureend, passivelistener);\n } else if (swiper.touchevents.start === 'touchstart') {\n swiper.$wrapperel.on(swiper.touchevents.start, slideselector, zoom.ongesturestart, passivelistener);\n swiper.$wrapperel.on(swiper.touchevents.move, slideselector, zoom.ongesturechange, activelistenerwithcapture);\n swiper.$wrapperel.on(swiper.touchevents.end, slideselector, zoom.ongestureend, passivelistener);\n\n if (swiper.touchevents.cancel) {\n swiper.$wrapperel.on(swiper.touchevents.cancel, slideselector, zoom.ongestureend, passivelistener);\n }\n } // move image\n\n\n swiper.$wrapperel.on(swiper.touchevents.move, \".\".concat(swiper.params.zoom.containerclass), zoom.ontouchmove, activelistenerwithcapture);\n },\n disable: function disable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (!zoom.enabled) return;\n swiper.zoom.enabled = false;\n var passivelistener = swiper.touchevents.start === 'touchstart' && support.passivelistener && swiper.params.passivelisteners ? {\n passive: true,\n capture: false\n } : false;\n var activelistenerwithcapture = support.passivelistener ? {\n passive: false,\n capture: true\n } : true;\n var slideselector = \".\".concat(swiper.params.slideclass); // scale image\n\n if (support.gestures) {\n swiper.$wrapperel.off('gesturestart', slideselector, zoom.ongesturestart, passivelistener);\n swiper.$wrapperel.off('gesturechange', slideselector, zoom.ongesturechange, passivelistener);\n swiper.$wrapperel.off('gestureend', slideselector, zoom.ongestureend, passivelistener);\n } else if (swiper.touchevents.start === 'touchstart') {\n swiper.$wrapperel.off(swiper.touchevents.start, slideselector, zoom.ongesturestart, passivelistener);\n swiper.$wrapperel.off(swiper.touchevents.move, slideselector, zoom.ongesturechange, activelistenerwithcapture);\n swiper.$wrapperel.off(swiper.touchevents.end, slideselector, zoom.ongestureend, passivelistener);\n\n if (swiper.touchevents.cancel) {\n swiper.$wrapperel.off(swiper.touchevents.cancel, slideselector, zoom.ongestureend, passivelistener);\n }\n } // move image\n\n\n swiper.$wrapperel.off(swiper.touchevents.move, \".\".concat(swiper.params.zoom.containerclass), zoom.ontouchmove, activelistenerwithcapture);\n }\n};\nvar zoom$1 = {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxratio: 3,\n minratio: 1,\n toggle: true,\n containerclass: 'swiper-zoom-container',\n zoomedslideclass: 'swiper-slide-zoomed'\n }\n },\n create: function create() {\n var swiper = this;\n var zoom = {\n enabled: false,\n scale: 1,\n currentscale: 1,\n isscaling: false,\n gesture: {\n $slideel: undefined,\n slidewidth: undefined,\n slideheight: undefined,\n $imageel: undefined,\n $imagewrapel: undefined,\n maxratio: 3\n },\n image: {\n istouched: undefined,\n ismoved: undefined,\n currentx: undefined,\n currenty: undefined,\n minx: undefined,\n miny: undefined,\n maxx: undefined,\n maxy: undefined,\n width: undefined,\n height: undefined,\n startx: undefined,\n starty: undefined,\n touchesstart: {},\n touchescurrent: {}\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevpositionx: undefined,\n prevpositiony: undefined,\n prevtime: undefined\n }\n };\n 'ongesturestart ongesturechange ongestureend ontouchstart ontouchmove ontouchend ontransitionend toggle enable disable in out'.split(' ').foreach(function (methodname) {\n zoom[methodname] = zoom[methodname].bind(swiper);\n });\n utils.extend(swiper, {\n zoom: zoom\n });\n var scale = 1;\n object.defineproperty(swiper.zoom, 'scale', {\n get: function get() {\n return scale;\n },\n set: function set(value) {\n if (scale !== value) {\n var imageel = swiper.zoom.gesture.$imageel ? swiper.zoom.gesture.$imageel[0] : undefined;\n var slideel = swiper.zoom.gesture.$slideel ? swiper.zoom.gesture.$slideel[0] : undefined;\n swiper.emit('zoomchange', value, imageel, slideel);\n }\n\n scale = value;\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.zoom.disable();\n },\n touchstart: function touchstart(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.ontouchstart(e);\n },\n touchend: function touchend(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) return;\n swiper.zoom.ontouchend(e);\n },\n doubletap: function doubletap(e) {\n var swiper = this;\n\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionend: function transitionend() {\n var swiper = this;\n\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.ontransitionend();\n }\n },\n slidechange: function slidechange() {\n var swiper = this;\n\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssmode) {\n swiper.zoom.ontransitionend();\n }\n }\n }\n};\nvar lazy = {\n loadinslide: function loadinslide(index) {\n var loadinduplicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var swiper = this;\n var params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n var isvirtual = swiper.virtual && swiper.params.virtual.enabled;\n var $slideel = isvirtual ? swiper.$wrapperel.children(\".\".concat(swiper.params.slideclass, \"[data-swiper-slide-index=\\\"\").concat(index, \"\\\"]\")) : swiper.slides.eq(index);\n var $images = $slideel.find(\".\".concat(params.elementclass, \":not(.\").concat(params.loadedclass, \"):not(.\").concat(params.loadingclass, \")\"));\n\n if ($slideel.hasclass(params.elementclass) && !$slideel.hasclass(params.loadedclass) && !$slideel.hasclass(params.loadingclass)) {\n $images = $images.add($slideel[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(function (imageindex, imageel) {\n var $imageel = $(imageel);\n $imageel.addclass(params.loadingclass);\n var background = $imageel.attr('data-background');\n var src = $imageel.attr('data-src');\n var srcset = $imageel.attr('data-srcset');\n var sizes = $imageel.attr('data-sizes');\n var $pictureel = $imageel.parent('picture');\n swiper.loadimage($imageel[0], src || background, srcset, sizes, false, function () {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageel.css('background-image', \"url(\\\"\".concat(background, \"\\\")\"));\n $imageel.removeattr('data-background');\n } else {\n if (srcset) {\n $imageel.attr('srcset', srcset);\n $imageel.removeattr('data-srcset');\n }\n\n if (sizes) {\n $imageel.attr('sizes', sizes);\n $imageel.removeattr('data-sizes');\n }\n\n if ($pictureel.length) {\n $pictureel.children('source').each(function (sourceindex, sourceel) {\n var $source = $(sourceel);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeattr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageel.attr('src', src);\n $imageel.removeattr('data-src');\n }\n }\n\n $imageel.addclass(params.loadedclass).removeclass(params.loadingclass);\n $slideel.find(\".\".concat(params.preloaderclass)).remove();\n\n if (swiper.params.loop && loadinduplicate) {\n var slideoriginalindex = $slideel.attr('data-swiper-slide-index');\n\n if ($slideel.hasclass(swiper.params.slideduplicateclass)) {\n var originalslide = swiper.$wrapperel.children(\"[data-swiper-slide-index=\\\"\".concat(slideoriginalindex, \"\\\"]:not(.\").concat(swiper.params.slideduplicateclass, \")\"));\n swiper.lazy.loadinslide(originalslide.index(), false);\n } else {\n var duplicatedslide = swiper.$wrapperel.children(\".\".concat(swiper.params.slideduplicateclass, \"[data-swiper-slide-index=\\\"\").concat(slideoriginalindex, \"\\\"]\"));\n swiper.lazy.loadinslide(duplicatedslide.index(), false);\n }\n }\n\n swiper.emit('lazyimageready', $slideel[0], $imageel[0]);\n\n if (swiper.params.autoheight) {\n swiper.updateautoheight();\n }\n });\n swiper.emit('lazyimageload', $slideel[0], $imageel[0]);\n });\n },\n load: function load() {\n var swiper = this;\n var $wrapperel = swiper.$wrapperel,\n swiperparams = swiper.params,\n slides = swiper.slides,\n activeindex = swiper.activeindex;\n var isvirtual = swiper.virtual && swiperparams.virtual.enabled;\n var params = swiperparams.lazy;\n var slidesperview = swiperparams.slidesperview;\n\n if (slidesperview === 'auto') {\n slidesperview = 0;\n }\n\n function slideexist(index) {\n if (isvirtual) {\n if ($wrapperel.children(\".\".concat(swiperparams.slideclass, \"[data-swiper-slide-index=\\\"\").concat(index, \"\\\"]\")).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideindex(slideel) {\n if (isvirtual) {\n return $(slideel).attr('data-swiper-slide-index');\n }\n\n return $(slideel).index();\n }\n\n if (!swiper.lazy.initialimageloaded) swiper.lazy.initialimageloaded = true;\n\n if (swiper.params.watchslidesvisibility) {\n $wrapperel.children(\".\".concat(swiperparams.slidevisibleclass)).each(function (elindex, slideel) {\n var index = isvirtual ? $(slideel).attr('data-swiper-slide-index') : $(slideel).index();\n swiper.lazy.loadinslide(index);\n });\n } else if (slidesperview > 1) {\n for (var i = activeindex; i < activeindex + slidesperview; i += 1) {\n if (slideexist(i)) swiper.lazy.loadinslide(i);\n }\n } else {\n swiper.lazy.loadinslide(activeindex);\n }\n\n if (params.loadprevnext) {\n if (slidesperview > 1 || params.loadprevnextamount && params.loadprevnextamount > 1) {\n var amount = params.loadprevnextamount;\n var spv = slidesperview;\n var maxindex = math.min(activeindex + spv + math.max(amount, spv), slides.length);\n var minindex = math.max(activeindex - math.max(spv, amount), 0); // next slides\n\n for (var _i11 = activeindex + slidesperview; _i11 < maxindex; _i11 += 1) {\n if (slideexist(_i11)) swiper.lazy.loadinslide(_i11);\n } // prev slides\n\n\n for (var _i12 = minindex; _i12 < activeindex; _i12 += 1) {\n if (slideexist(_i12)) swiper.lazy.loadinslide(_i12);\n }\n } else {\n var nextslide = $wrapperel.children(\".\".concat(swiperparams.slidenextclass));\n if (nextslide.length > 0) swiper.lazy.loadinslide(slideindex(nextslide));\n var prevslide = $wrapperel.children(\".\".concat(swiperparams.slideprevclass));\n if (prevslide.length > 0) swiper.lazy.loadinslide(slideindex(prevslide));\n }\n }\n }\n};\nvar lazy$1 = {\n name: 'lazy',\n params: {\n lazy: {\n enabled: false,\n loadprevnext: false,\n loadprevnextamount: 1,\n loadontransitionstart: false,\n elementclass: 'swiper-lazy',\n loadingclass: 'swiper-lazy-loading',\n loadedclass: 'swiper-lazy-loaded',\n preloaderclass: 'swiper-lazy-preloader'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n lazy: {\n initialimageloaded: false,\n load: lazy.load.bind(swiper),\n loadinslide: lazy.loadinslide.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled && swiper.params.preloadimages) {\n swiper.params.preloadimages = false;\n }\n },\n init: function init() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialslide === 0) {\n swiper.lazy.load();\n }\n },\n scroll: function scroll() {\n var swiper = this;\n\n if (swiper.params.freemode && !swiper.params.freemodesticky) {\n swiper.lazy.load();\n }\n },\n resize: function resize() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbardragmove: function scrollbardragmove() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionstart: function transitionstart() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadontransitionstart || !swiper.params.lazy.loadontransitionstart && !swiper.lazy.initialimageloaded) {\n swiper.lazy.load();\n }\n }\n },\n transitionend: function transitionend() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadontransitionstart) {\n swiper.lazy.load();\n }\n },\n slidechange: function slidechange() {\n var swiper = this;\n\n if (swiper.params.lazy.enabled && swiper.params.cssmode) {\n swiper.lazy.load();\n }\n }\n }\n};\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\nvar controller = {\n linearspline: function linearspline(x, y) {\n var binarysearch = function search() {\n var maxindex;\n var minindex;\n var guess;\n return function (array, val) {\n minindex = -1;\n maxindex = array.length;\n\n while (maxindex - minindex > 1) {\n guess = maxindex + minindex >> 1;\n\n if (array[guess] <= val) {\n minindex = guess;\n } else {\n maxindex = guess;\n }\n }\n\n return maxindex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastindex = x.length - 1; // given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n var i1;\n var i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarysearch(this.x, x2);\n i1 = i3 - 1; // we have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getinterpolatefunction: function getinterpolatefunction(c) {\n var swiper = this;\n\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new controller.linearspline(swiper.slidesgrid, c.slidesgrid) : new controller.linearspline(swiper.snapgrid, c.snapgrid);\n }\n },\n settranslate: function settranslate(_settranslate, bycontroller) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var multiplier;\n var controlledtranslate;\n\n function setcontrolledtranslate(c) {\n // this will create an interpolate function based on the snapgrids\n // x is the grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n var translate = swiper.rtltranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getinterpolatefunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapgrid\n // but it did not work out\n\n controlledtranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledtranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxtranslate() - c.mintranslate()) / (swiper.maxtranslate() - swiper.mintranslate());\n controlledtranslate = (translate - swiper.mintranslate()) * multiplier + c.mintranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledtranslate = c.maxtranslate() - controlledtranslate;\n }\n\n c.updateprogress(controlledtranslate);\n c.settranslate(controlledtranslate, swiper);\n c.updateactiveindex();\n c.updateslidesclasses();\n }\n\n if (array.isarray(controlled)) {\n for (var i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== bycontroller && controlled[i] instanceof swiper) {\n setcontrolledtranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof swiper && bycontroller !== controlled) {\n setcontrolledtranslate(controlled);\n }\n },\n settransition: function settransition(duration, bycontroller) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var i;\n\n function setcontrolledtransition(c) {\n c.settransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionstart();\n\n if (c.params.autoheight) {\n utils.nexttick(function () {\n c.updateautoheight();\n });\n }\n\n c.$wrapperel.transitionend(function () {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopfix();\n }\n\n c.transitionend();\n });\n }\n }\n\n if (array.isarray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== bycontroller && controlled[i] instanceof swiper) {\n setcontrolledtransition(controlled[i]);\n }\n }\n } else if (controlled instanceof swiper && bycontroller !== controlled) {\n setcontrolledtransition(controlled);\n }\n }\n};\nvar controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getinterpolatefunction: controller.getinterpolatefunction.bind(swiper),\n settranslate: controller.settranslate.bind(swiper),\n settransition: controller.settransition.bind(swiper)\n }\n });\n },\n on: {\n update: function update() {\n var swiper = this;\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerupdate: function observerupdate() {\n var swiper = this;\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n settranslate: function settranslate(translate, bycontroller) {\n var swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.settranslate(translate, bycontroller);\n },\n settransition: function settransition(duration, bycontroller) {\n var swiper = this;\n if (!swiper.controller.control) return;\n swiper.controller.settransition(duration, bycontroller);\n }\n }\n};\nvar a11y = {\n makeelfocusable: function makeelfocusable($el) {\n $el.attr('tabindex', '0');\n return $el;\n },\n makeelnotfocusable: function makeelnotfocusable($el) {\n $el.attr('tabindex', '-1');\n return $el;\n },\n addelrole: function addelrole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addellabel: function addellabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableel: function disableel($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableel: function enableel($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onenterkey: function onenterkey(e) {\n var swiper = this;\n var params = swiper.params.a11y;\n if (e.keycode !== 13) return;\n var $targetel = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextel && $targetel.is(swiper.navigation.$nextel)) {\n if (!(swiper.isend && !swiper.params.loop)) {\n swiper.slidenext();\n }\n\n if (swiper.isend) {\n swiper.a11y.notify(params.lastslidemessage);\n } else {\n swiper.a11y.notify(params.nextslidemessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevel && $targetel.is(swiper.navigation.$prevel)) {\n if (!(swiper.isbeginning && !swiper.params.loop)) {\n swiper.slideprev();\n }\n\n if (swiper.isbeginning) {\n swiper.a11y.notify(params.firstslidemessage);\n } else {\n swiper.a11y.notify(params.prevslidemessage);\n }\n }\n\n if (swiper.pagination && $targetel.is(\".\".concat(swiper.params.pagination.bulletclass))) {\n $targetel[0].click();\n }\n },\n notify: function notify(message) {\n var swiper = this;\n var notification = swiper.a11y.liveregion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n updatenavigation: function updatenavigation() {\n var swiper = this;\n if (swiper.params.loop || !swiper.navigation) return;\n var _swiper$navigation4 = swiper.navigation,\n $nextel = _swiper$navigation4.$nextel,\n $prevel = _swiper$navigation4.$prevel;\n\n if ($prevel && $prevel.length > 0) {\n if (swiper.isbeginning) {\n swiper.a11y.disableel($prevel);\n swiper.a11y.makeelnotfocusable($prevel);\n } else {\n swiper.a11y.enableel($prevel);\n swiper.a11y.makeelfocusable($prevel);\n }\n }\n\n if ($nextel && $nextel.length > 0) {\n if (swiper.isend) {\n swiper.a11y.disableel($nextel);\n swiper.a11y.makeelnotfocusable($nextel);\n } else {\n swiper.a11y.enableel($nextel);\n swiper.a11y.makeelfocusable($nextel);\n }\n }\n },\n updatepagination: function updatepagination() {\n var swiper = this;\n var params = swiper.params.a11y;\n\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each(function (bulletindex, bulletel) {\n var $bulletel = $(bulletel);\n swiper.a11y.makeelfocusable($bulletel);\n swiper.a11y.addelrole($bulletel, 'button');\n swiper.a11y.addellabel($bulletel, params.paginationbulletmessage.replace(/\\{\\{index\\}\\}/, $bulletel.index() + 1));\n });\n }\n },\n init: function init() {\n var swiper = this;\n swiper.$el.append(swiper.a11y.liveregion); // navigation\n\n var params = swiper.params.a11y;\n var $nextel;\n var $prevel;\n\n if (swiper.navigation && swiper.navigation.$nextel) {\n $nextel = swiper.navigation.$nextel;\n }\n\n if (swiper.navigation && swiper.navigation.$prevel) {\n $prevel = swiper.navigation.$prevel;\n }\n\n if ($nextel) {\n swiper.a11y.makeelfocusable($nextel);\n swiper.a11y.addelrole($nextel, 'button');\n swiper.a11y.addellabel($nextel, params.nextslidemessage);\n $nextel.on('keydown', swiper.a11y.onenterkey);\n }\n\n if ($prevel) {\n swiper.a11y.makeelfocusable($prevel);\n swiper.a11y.addelrole($prevel, 'button');\n swiper.a11y.addellabel($prevel, params.prevslidemessage);\n $prevel.on('keydown', swiper.a11y.onenterkey);\n } // pagination\n\n\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', \".\".concat(swiper.params.pagination.bulletclass), swiper.a11y.onenterkey);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.a11y.liveregion && swiper.a11y.liveregion.length > 0) swiper.a11y.liveregion.remove();\n var $nextel;\n var $prevel;\n\n if (swiper.navigation && swiper.navigation.$nextel) {\n $nextel = swiper.navigation.$nextel;\n }\n\n if (swiper.navigation && swiper.navigation.$prevel) {\n $prevel = swiper.navigation.$prevel;\n }\n\n if ($nextel) {\n $nextel.off('keydown', swiper.a11y.onenterkey);\n }\n\n if ($prevel) {\n $prevel.off('keydown', swiper.a11y.onenterkey);\n } // pagination\n\n\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', \".\".concat(swiper.params.pagination.bulletclass), swiper.a11y.onenterkey);\n }\n }\n};\nvar a11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationclass: 'swiper-notification',\n prevslidemessage: 'previous slide',\n nextslidemessage: 'next slide',\n firstslidemessage: 'this is the first slide',\n lastslidemessage: 'this is the last slide',\n paginationbulletmessage: 'go to slide {{index}}'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n a11y: {\n liveregion: $(\"\"))\n }\n });\n object.keys(a11y).foreach(function (methodname) {\n swiper.a11y[methodname] = a11y[methodname].bind(swiper);\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.init();\n swiper.a11y.updatenavigation();\n },\n toedge: function toedge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatenavigation();\n },\n fromedge: function fromedge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatenavigation();\n },\n paginationupdate: function paginationupdate() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatepagination();\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.destroy();\n }\n }\n};\nvar history = {\n init: function init() {\n var swiper = this;\n if (!swiper.params.history) return;\n\n if (!win.history || !win.history.pushstate) {\n swiper.params.history.enabled = false;\n swiper.params.hashnavigation.enabled = true;\n return;\n }\n\n var history = swiper.history;\n history.initialized = true;\n history.paths = history.getpathvalues();\n if (!history.paths.key && !history.paths.value) return;\n history.scrolltoslide(0, history.paths.value, swiper.params.runcallbacksoninit);\n\n if (!swiper.params.history.replacestate) {\n win.addeventlistener('popstate', swiper.history.sethistorypopstate);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (!swiper.params.history.replacestate) {\n win.removeeventlistener('popstate', swiper.history.sethistorypopstate);\n }\n },\n sethistorypopstate: function sethistorypopstate() {\n var swiper = this;\n swiper.history.paths = history.getpathvalues();\n swiper.history.scrolltoslide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getpathvalues: function getpathvalues() {\n var patharray = win.location.pathname.slice(1).split('/').filter(function (part) {\n return part !== '';\n });\n var total = patharray.length;\n var key = patharray[total - 2];\n var value = patharray[total - 1];\n return {\n key: key,\n value: value\n };\n },\n sethistory: function sethistory(key, index) {\n var swiper = this;\n if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n var slide = swiper.slides.eq(index);\n var value = history.slugify(slide.attr('data-history'));\n\n if (!win.location.pathname.includes(key)) {\n value = \"\".concat(key, \"/\").concat(value);\n }\n\n var currentstate = win.history.state;\n\n if (currentstate && currentstate.value === value) {\n return;\n }\n\n if (swiper.params.history.replacestate) {\n win.history.replacestate({\n value: value\n }, null, value);\n } else {\n win.history.pushstate({\n value: value\n }, null, value);\n }\n },\n slugify: function slugify(text) {\n return text.tostring().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n },\n scrolltoslide: function scrolltoslide(speed, value, runcallbacks) {\n var swiper = this;\n\n if (value) {\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var _slide3 = swiper.slides.eq(i);\n\n var slidehistory = history.slugify(_slide3.attr('data-history'));\n\n if (slidehistory === value && !_slide3.hasclass(swiper.params.slideduplicateclass)) {\n var _index2 = _slide3.index();\n\n swiper.slideto(_index2, speed, runcallbacks);\n }\n }\n } else {\n swiper.slideto(0, speed, runcallbacks);\n }\n }\n};\nvar history$1 = {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replacestate: false,\n key: 'slides'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n history: {\n init: history.init.bind(swiper),\n sethistory: history.sethistory.bind(swiper),\n sethistorypopstate: history.sethistorypopstate.bind(swiper),\n scrolltoslide: history.scrolltoslide.bind(swiper),\n destroy: history.destroy.bind(swiper)\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionend: function transitionend() {\n var swiper = this;\n\n if (swiper.history.initialized) {\n swiper.history.sethistory(swiper.params.history.key, swiper.activeindex);\n }\n },\n slidechange: function slidechange() {\n var swiper = this;\n\n if (swiper.history.initialized && swiper.params.cssmode) {\n swiper.history.sethistory(swiper.params.history.key, swiper.activeindex);\n }\n }\n }\n};\nvar hashnavigation = {\n onhashcange: function onhashcange() {\n var swiper = this;\n swiper.emit('hashchange');\n var newhash = doc.location.hash.replace('#', '');\n var activeslidehash = swiper.slides.eq(swiper.activeindex).attr('data-hash');\n\n if (newhash !== activeslidehash) {\n var newindex = swiper.$wrapperel.children(\".\".concat(swiper.params.slideclass, \"[data-hash=\\\"\").concat(newhash, \"\\\"]\")).index();\n if (typeof newindex === 'undefined') return;\n swiper.slideto(newindex);\n }\n },\n sethash: function sethash() {\n var swiper = this;\n if (!swiper.hashnavigation.initialized || !swiper.params.hashnavigation.enabled) return;\n\n if (swiper.params.hashnavigation.replacestate && win.history && win.history.replacestate) {\n win.history.replacestate(null, null, \"#\".concat(swiper.slides.eq(swiper.activeindex).attr('data-hash')) || 0);\n swiper.emit('hashset');\n } else {\n var _slide4 = swiper.slides.eq(swiper.activeindex);\n\n var hash = _slide4.attr('data-hash') || _slide4.attr('data-history');\n\n doc.location.hash = hash || '';\n swiper.emit('hashset');\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.hashnavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n swiper.hashnavigation.initialized = true;\n var hash = doc.location.hash.replace('#', '');\n\n if (hash) {\n var speed = 0;\n\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var _slide5 = swiper.slides.eq(i);\n\n var slidehash = _slide5.attr('data-hash') || _slide5.attr('data-history');\n\n if (slidehash === hash && !_slide5.hasclass(swiper.params.slideduplicateclass)) {\n var _index3 = _slide5.index();\n\n swiper.slideto(_index3, speed, swiper.params.runcallbacksoninit, true);\n }\n }\n }\n\n if (swiper.params.hashnavigation.watchstate) {\n $(win).on('hashchange', swiper.hashnavigation.onhashcange);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (swiper.params.hashnavigation.watchstate) {\n $(win).off('hashchange', swiper.hashnavigation.onhashcange);\n }\n }\n};\nvar hashnavigation$1 = {\n name: 'hash-navigation',\n params: {\n hashnavigation: {\n enabled: false,\n replacestate: false,\n watchstate: false\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n hashnavigation: {\n initialized: false,\n init: hashnavigation.init.bind(swiper),\n destroy: hashnavigation.destroy.bind(swiper),\n sethash: hashnavigation.sethash.bind(swiper),\n onhashcange: hashnavigation.onhashcange.bind(swiper)\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n\n if (swiper.params.hashnavigation.enabled) {\n swiper.hashnavigation.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (swiper.params.hashnavigation.enabled) {\n swiper.hashnavigation.destroy();\n }\n },\n transitionend: function transitionend() {\n var swiper = this;\n\n if (swiper.hashnavigation.initialized) {\n swiper.hashnavigation.sethash();\n }\n },\n slidechange: function slidechange() {\n var swiper = this;\n\n if (swiper.hashnavigation.initialized && swiper.params.cssmode) {\n swiper.hashnavigation.sethash();\n }\n }\n }\n};\n/* eslint no-underscore-dangle: \"off\" */\n\nvar autoplay = {\n run: function run() {\n var swiper = this;\n var $activeslideel = swiper.slides.eq(swiper.activeindex);\n var delay = swiper.params.autoplay.delay;\n\n if ($activeslideel.attr('data-swiper-autoplay')) {\n delay = $activeslideel.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n cleartimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = utils.nexttick(function () {\n if (swiper.params.autoplay.reversedirection) {\n if (swiper.params.loop) {\n swiper.loopfix();\n swiper.slideprev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isbeginning) {\n swiper.slideprev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stoponlastslide) {\n swiper.slideto(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopfix();\n swiper.slidenext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isend) {\n swiper.slidenext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stoponlastslide) {\n swiper.slideto(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n\n if (swiper.params.cssmode && swiper.autoplay.running) swiper.autoplay.run();\n }, delay);\n },\n start: function start() {\n var swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n swiper.emit('autoplaystart');\n swiper.autoplay.run();\n return true;\n },\n stop: function stop() {\n var swiper = this;\n if (!swiper.autoplay.running) return false;\n if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n if (swiper.autoplay.timeout) {\n cleartimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n swiper.emit('autoplaystop');\n return true;\n },\n pause: function pause(speed) {\n var swiper = this;\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (swiper.autoplay.timeout) cleartimeout(swiper.autoplay.timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitfortransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperel[0].addeventlistener('transitionend', swiper.autoplay.ontransitionend);\n swiper.$wrapperel[0].addeventlistener('webkittransitionend', swiper.autoplay.ontransitionend);\n }\n }\n};\nvar autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitfortransition: true,\n disableoninteraction: true,\n stoponlastslide: false,\n reversedirection: false\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: autoplay.run.bind(swiper),\n start: autoplay.start.bind(swiper),\n stop: autoplay.stop.bind(swiper),\n pause: autoplay.pause.bind(swiper),\n onvisibilitychange: function onvisibilitychange() {\n if (document.visibilitystate === 'hidden' && swiper.autoplay.running) {\n swiper.autoplay.pause();\n }\n\n if (document.visibilitystate === 'visible' && swiper.autoplay.paused) {\n swiper.autoplay.run();\n swiper.autoplay.paused = false;\n }\n },\n ontransitionend: function ontransitionend(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperel) return;\n if (e.target !== this) return;\n swiper.$wrapperel[0].removeeventlistener('transitionend', swiper.autoplay.ontransitionend);\n swiper.$wrapperel[0].removeeventlistener('webkittransitionend', swiper.autoplay.ontransitionend);\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n }\n }\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n document.addeventlistener('visibilitychange', swiper.autoplay.onvisibilitychange);\n }\n },\n beforetransitionstart: function beforetransitionstart(speed, internal) {\n var swiper = this;\n\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableoninteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderfirstmove: function sliderfirstmove() {\n var swiper = this;\n\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableoninteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n touchend: function touchend() {\n var swiper = this;\n\n if (swiper.params.cssmode && swiper.autoplay.paused && !swiper.params.autoplay.disableoninteraction) {\n swiper.autoplay.run();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n\n document.removeeventlistener('visibilitychange', swiper.autoplay.onvisibilitychange);\n }\n }\n};\nvar fade = {\n settranslate: function settranslate() {\n var swiper = this;\n var slides = swiper.slides;\n\n for (var i = 0; i < slides.length; i += 1) {\n var $slideel = swiper.slides.eq(i);\n var _offset = $slideel[0].swiperslideoffset;\n var tx = -_offset;\n if (!swiper.params.virtualtranslate) tx -= swiper.translate;\n var ty = 0;\n\n if (!swiper.ishorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n var slideopacity = swiper.params.fadeeffect.crossfade ? math.max(1 - math.abs($slideel[0].progress), 0) : 1 + math.min(math.max($slideel[0].progress, -1), 0);\n $slideel.css({\n opacity: slideopacity\n }).transform(\"translate3d(\".concat(tx, \"px, \").concat(ty, \"px, 0px)\"));\n }\n },\n settransition: function settransition(duration) {\n var swiper = this;\n var slides = swiper.slides,\n $wrapperel = swiper.$wrapperel;\n slides.transition(duration);\n\n if (swiper.params.virtualtranslate && duration !== 0) {\n var eventtriggered = false;\n slides.transitionend(function () {\n if (eventtriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventtriggered = true;\n swiper.animating = false;\n var triggerevents = ['webkittransitionend', 'transitionend'];\n\n for (var i = 0; i < triggerevents.length; i += 1) {\n $wrapperel.trigger(triggerevents[i]);\n }\n });\n }\n }\n};\nvar effectfade = {\n name: 'effect-fade',\n params: {\n fadeeffect: {\n crossfade: false\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n fadeeffect: {\n settranslate: fade.settranslate.bind(swiper),\n settransition: fade.settransition.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"fade\"));\n var overwriteparams = {\n slidesperview: 1,\n slidespercolumn: 1,\n slidespergroup: 1,\n watchslidesprogress: true,\n spacebetween: 0,\n virtualtranslate: true\n };\n utils.extend(swiper.params, overwriteparams);\n utils.extend(swiper.originalparams, overwriteparams);\n },\n settranslate: function settranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeeffect.settranslate();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeeffect.settransition(duration);\n }\n }\n};\nvar cube = {\n settranslate: function settranslate() {\n var swiper = this;\n var $el = swiper.$el,\n $wrapperel = swiper.$wrapperel,\n slides = swiper.slides,\n swiperwidth = swiper.width,\n swiperheight = swiper.height,\n rtl = swiper.rtltranslate,\n swipersize = swiper.size;\n var params = swiper.params.cubeeffect;\n var ishorizontal = swiper.ishorizontal();\n var isvirtual = swiper.virtual && swiper.params.virtual.enabled;\n var wrapperrotate = 0;\n var $cubeshadowel;\n\n if (params.shadow) {\n if (ishorizontal) {\n $cubeshadowel = $wrapperel.find('.swiper-cube-shadow');\n\n if ($cubeshadowel.length === 0) {\n $cubeshadowel = $('
');\n $wrapperel.append($cubeshadowel);\n }\n\n $cubeshadowel.css({\n height: \"\".concat(swiperwidth, \"px\")\n });\n } else {\n $cubeshadowel = $el.find('.swiper-cube-shadow');\n\n if ($cubeshadowel.length === 0) {\n $cubeshadowel = $('
');\n $el.append($cubeshadowel);\n }\n }\n }\n\n for (var i = 0; i < slides.length; i += 1) {\n var $slideel = slides.eq(i);\n var slideindex = i;\n\n if (isvirtual) {\n slideindex = parseint($slideel.attr('data-swiper-slide-index'), 10);\n }\n\n var slideangle = slideindex * 90;\n var round = math.floor(slideangle / 360);\n\n if (rtl) {\n slideangle = -slideangle;\n round = math.floor(-slideangle / 360);\n }\n\n var progress = math.max(math.min($slideel[0].progress, 1), -1);\n var tx = 0;\n var ty = 0;\n var tz = 0;\n\n if (slideindex % 4 === 0) {\n tx = -round * 4 * swipersize;\n tz = 0;\n } else if ((slideindex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swipersize;\n } else if ((slideindex - 2) % 4 === 0) {\n tx = swipersize + round * 4 * swipersize;\n tz = swipersize;\n } else if ((slideindex - 3) % 4 === 0) {\n tx = -swipersize;\n tz = 3 * swipersize + swipersize * 4 * round;\n }\n\n if (rtl) {\n tx = -tx;\n }\n\n if (!ishorizontal) {\n ty = tx;\n tx = 0;\n }\n\n var _transform = \"rotatex(\".concat(ishorizontal ? 0 : -slideangle, \"deg) rotatey(\").concat(ishorizontal ? slideangle : 0, \"deg) translate3d(\").concat(tx, \"px, \").concat(ty, \"px, \").concat(tz, \"px)\");\n\n if (progress <= 1 && progress > -1) {\n wrapperrotate = slideindex * 90 + progress * 90;\n if (rtl) wrapperrotate = -slideindex * 90 - progress * 90;\n }\n\n $slideel.transform(_transform);\n\n if (params.slideshadows) {\n // set shadows\n var shadowbefore = ishorizontal ? $slideel.find('.swiper-slide-shadow-left') : $slideel.find('.swiper-slide-shadow-top');\n var shadowafter = ishorizontal ? $slideel.find('.swiper-slide-shadow-right') : $slideel.find('.swiper-slide-shadow-bottom');\n\n if (shadowbefore.length === 0) {\n shadowbefore = $(\"
\"));\n $slideel.append(shadowbefore);\n }\n\n if (shadowafter.length === 0) {\n shadowafter = $(\"
\"));\n $slideel.append(shadowafter);\n }\n\n if (shadowbefore.length) shadowbefore[0].style.opacity = math.max(-progress, 0);\n if (shadowafter.length) shadowafter[0].style.opacity = math.max(progress, 0);\n }\n }\n\n $wrapperel.css({\n '-webkit-transform-origin': \"50% 50% -\".concat(swipersize / 2, \"px\"),\n '-moz-transform-origin': \"50% 50% -\".concat(swipersize / 2, \"px\"),\n '-ms-transform-origin': \"50% 50% -\".concat(swipersize / 2, \"px\"),\n 'transform-origin': \"50% 50% -\".concat(swipersize / 2, \"px\")\n });\n\n if (params.shadow) {\n if (ishorizontal) {\n $cubeshadowel.transform(\"translate3d(0px, \".concat(swiperwidth / 2 + params.shadowoffset, \"px, \").concat(-swiperwidth / 2, \"px) rotatex(90deg) rotatez(0deg) scale(\").concat(params.shadowscale, \")\"));\n } else {\n var shadowangle = math.abs(wrapperrotate) - math.floor(math.abs(wrapperrotate) / 90) * 90;\n var multiplier = 1.5 - (math.sin(shadowangle * 2 * math.pi / 360) / 2 + math.cos(shadowangle * 2 * math.pi / 360) / 2);\n var scale1 = params.shadowscale;\n var scale2 = params.shadowscale / multiplier;\n var _offset2 = params.shadowoffset;\n $cubeshadowel.transform(\"scale3d(\".concat(scale1, \", 1, \").concat(scale2, \") translate3d(0px, \").concat(swiperheight / 2 + _offset2, \"px, \").concat(-swiperheight / 2 / scale2, \"px) rotatex(-90deg)\"));\n }\n }\n\n var zfactor = browser.issafari || browser.iswebview ? -swipersize / 2 : 0;\n $wrapperel.transform(\"translate3d(0px,0,\".concat(zfactor, \"px) rotatex(\").concat(swiper.ishorizontal() ? 0 : wrapperrotate, \"deg) rotatey(\").concat(swiper.ishorizontal() ? -wrapperrotate : 0, \"deg)\"));\n },\n settransition: function settransition(duration) {\n var swiper = this;\n var $el = swiper.$el,\n slides = swiper.slides;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeeffect.shadow && !swiper.ishorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n }\n};\nvar effectcube = {\n name: 'effect-cube',\n params: {\n cubeeffect: {\n slideshadows: true,\n shadow: true,\n shadowoffset: 20,\n shadowscale: 0.94\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n cubeeffect: {\n settranslate: cube.settranslate.bind(swiper),\n settransition: cube.settransition.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"cube\"));\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"3d\"));\n var overwriteparams = {\n slidesperview: 1,\n slidespercolumn: 1,\n slidespergroup: 1,\n watchslidesprogress: true,\n resistanceratio: 0,\n spacebetween: 0,\n centeredslides: false,\n virtualtranslate: true\n };\n utils.extend(swiper.params, overwriteparams);\n utils.extend(swiper.originalparams, overwriteparams);\n },\n settranslate: function settranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeeffect.settranslate();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeeffect.settransition(duration);\n }\n }\n};\nvar flip = {\n settranslate: function settranslate() {\n var swiper = this;\n var slides = swiper.slides,\n rtl = swiper.rtltranslate;\n\n for (var i = 0; i < slides.length; i += 1) {\n var $slideel = slides.eq(i);\n var progress = $slideel[0].progress;\n\n if (swiper.params.flipeffect.limitrotation) {\n progress = math.max(math.min($slideel[0].progress, 1), -1);\n }\n\n var _offset3 = $slideel[0].swiperslideoffset;\n var rotate = -180 * progress;\n var rotatey = rotate;\n var rotatex = 0;\n var tx = -_offset3;\n var ty = 0;\n\n if (!swiper.ishorizontal()) {\n ty = tx;\n tx = 0;\n rotatex = -rotatey;\n rotatey = 0;\n } else if (rtl) {\n rotatey = -rotatey;\n }\n\n $slideel[0].style.zindex = -math.abs(math.round(progress)) + slides.length;\n\n if (swiper.params.flipeffect.slideshadows) {\n // set shadows\n var shadowbefore = swiper.ishorizontal() ? $slideel.find('.swiper-slide-shadow-left') : $slideel.find('.swiper-slide-shadow-top');\n var shadowafter = swiper.ishorizontal() ? $slideel.find('.swiper-slide-shadow-right') : $slideel.find('.swiper-slide-shadow-bottom');\n\n if (shadowbefore.length === 0) {\n shadowbefore = $(\"
\"));\n $slideel.append(shadowbefore);\n }\n\n if (shadowafter.length === 0) {\n shadowafter = $(\"
\"));\n $slideel.append(shadowafter);\n }\n\n if (shadowbefore.length) shadowbefore[0].style.opacity = math.max(-progress, 0);\n if (shadowafter.length) shadowafter[0].style.opacity = math.max(progress, 0);\n }\n\n $slideel.transform(\"translate3d(\".concat(tx, \"px, \").concat(ty, \"px, 0px) rotatex(\").concat(rotatex, \"deg) rotatey(\").concat(rotatey, \"deg)\"));\n }\n },\n settransition: function settransition(duration) {\n var swiper = this;\n var slides = swiper.slides,\n activeindex = swiper.activeindex,\n $wrapperel = swiper.$wrapperel;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.virtualtranslate && duration !== 0) {\n var eventtriggered = false; // eslint-disable-next-line\n\n slides.eq(activeindex).transitionend(function ontransitionend() {\n if (eventtriggered) return;\n if (!swiper || swiper.destroyed) return; // if (!$(this).hasclass(swiper.params.slideactiveclass)) return;\n\n eventtriggered = true;\n swiper.animating = false;\n var triggerevents = ['webkittransitionend', 'transitionend'];\n\n for (var i = 0; i < triggerevents.length; i += 1) {\n $wrapperel.trigger(triggerevents[i]);\n }\n });\n }\n }\n};\nvar effectflip = {\n name: 'effect-flip',\n params: {\n flipeffect: {\n slideshadows: true,\n limitrotation: true\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n flipeffect: {\n settranslate: flip.settranslate.bind(swiper),\n settransition: flip.settransition.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"flip\"));\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"3d\"));\n var overwriteparams = {\n slidesperview: 1,\n slidespercolumn: 1,\n slidespergroup: 1,\n watchslidesprogress: true,\n spacebetween: 0,\n virtualtranslate: true\n };\n utils.extend(swiper.params, overwriteparams);\n utils.extend(swiper.originalparams, overwriteparams);\n },\n settranslate: function settranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipeffect.settranslate();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'flip') return;\n swiper.flipeffect.settransition(duration);\n }\n }\n};\nvar coverflow = {\n settranslate: function settranslate() {\n var swiper = this;\n var swiperwidth = swiper.width,\n swiperheight = swiper.height,\n slides = swiper.slides,\n $wrapperel = swiper.$wrapperel,\n slidessizesgrid = swiper.slidessizesgrid;\n var params = swiper.params.coverfloweffect;\n var ishorizontal = swiper.ishorizontal();\n var transform = swiper.translate;\n var center = ishorizontal ? -transform + swiperwidth / 2 : -transform + swiperheight / 2;\n var rotate = ishorizontal ? params.rotate : -params.rotate;\n var translate = params.depth; // each slide offset from center\n\n for (var i = 0, length = slides.length; i < length; i += 1) {\n var $slideel = slides.eq(i);\n var slidesize = slidessizesgrid[i];\n var slideoffset = $slideel[0].swiperslideoffset;\n var offsetmultiplier = (center - slideoffset - slidesize / 2) / slidesize * params.modifier;\n var rotatey = ishorizontal ? rotate * offsetmultiplier : 0;\n var rotatex = ishorizontal ? 0 : rotate * offsetmultiplier; // var rotatez = 0\n\n var translatez = -translate * math.abs(offsetmultiplier);\n var stretch = params.stretch; // allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexof('%') !== -1) {\n stretch = parsefloat(params.stretch) / 100 * slidesize;\n }\n\n var translatey = ishorizontal ? 0 : stretch * offsetmultiplier;\n var translatex = ishorizontal ? stretch * offsetmultiplier : 0;\n var scale = 1 - (1 - params.scale) * math.abs(offsetmultiplier); // fix for ultra small values\n\n if (math.abs(translatex) < 0.001) translatex = 0;\n if (math.abs(translatey) < 0.001) translatey = 0;\n if (math.abs(translatez) < 0.001) translatez = 0;\n if (math.abs(rotatey) < 0.001) rotatey = 0;\n if (math.abs(rotatex) < 0.001) rotatex = 0;\n if (math.abs(scale) < 0.001) scale = 0;\n var slidetransform = \"translate3d(\".concat(translatex, \"px,\").concat(translatey, \"px,\").concat(translatez, \"px) rotatex(\").concat(rotatex, \"deg) rotatey(\").concat(rotatey, \"deg) scale(\").concat(scale, \")\");\n $slideel.transform(slidetransform);\n $slideel[0].style.zindex = -math.abs(math.round(offsetmultiplier)) + 1;\n\n if (params.slideshadows) {\n // set shadows\n var $shadowbeforeel = ishorizontal ? $slideel.find('.swiper-slide-shadow-left') : $slideel.find('.swiper-slide-shadow-top');\n var $shadowafterel = ishorizontal ? $slideel.find('.swiper-slide-shadow-right') : $slideel.find('.swiper-slide-shadow-bottom');\n\n if ($shadowbeforeel.length === 0) {\n $shadowbeforeel = $(\"
\"));\n $slideel.append($shadowbeforeel);\n }\n\n if ($shadowafterel.length === 0) {\n $shadowafterel = $(\"
\"));\n $slideel.append($shadowafterel);\n }\n\n if ($shadowbeforeel.length) $shadowbeforeel[0].style.opacity = offsetmultiplier > 0 ? offsetmultiplier : 0;\n if ($shadowafterel.length) $shadowafterel[0].style.opacity = -offsetmultiplier > 0 ? -offsetmultiplier : 0;\n }\n } // set correct perspective for ie10\n\n\n if (support.pointerevents || support.prefixedpointerevents) {\n var ws = $wrapperel[0].style;\n ws.perspectiveorigin = \"\".concat(center, \"px 50%\");\n }\n },\n settransition: function settransition(duration) {\n var swiper = this;\n swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n};\nvar effectcoverflow = {\n name: 'effect-coverflow',\n params: {\n coverfloweffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideshadows: true\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n coverfloweffect: {\n settranslate: coverflow.settranslate.bind(swiper),\n settransition: coverflow.settransition.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"coverflow\"));\n swiper.classnames.push(\"\".concat(swiper.params.containermodifierclass, \"3d\"));\n swiper.params.watchslidesprogress = true;\n swiper.originalparams.watchslidesprogress = true;\n },\n settranslate: function settranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverfloweffect.settranslate();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverfloweffect.settransition(duration);\n }\n }\n};\nvar thumbs = {\n init: function init() {\n var swiper = this;\n var thumbsparams = swiper.params.thumbs;\n var swiperclass = swiper.constructor;\n\n if (thumbsparams.swiper instanceof swiperclass) {\n swiper.thumbs.swiper = thumbsparams.swiper;\n utils.extend(swiper.thumbs.swiper.originalparams, {\n watchslidesprogress: true,\n slidetoclickedslide: false\n });\n utils.extend(swiper.thumbs.swiper.params, {\n watchslidesprogress: true,\n slidetoclickedslide: false\n });\n } else if (utils.isobject(thumbsparams.swiper)) {\n swiper.thumbs.swiper = new swiperclass(utils.extend({}, thumbsparams.swiper, {\n watchslidesvisibility: true,\n watchslidesprogress: true,\n slidetoclickedslide: false\n }));\n swiper.thumbs.swipercreated = true;\n }\n\n swiper.thumbs.swiper.$el.addclass(swiper.params.thumbs.thumbscontainerclass);\n swiper.thumbs.swiper.on('tap', swiper.thumbs.onthumbclick);\n },\n onthumbclick: function onthumbclick() {\n var swiper = this;\n var thumbsswiper = swiper.thumbs.swiper;\n if (!thumbsswiper) return;\n var clickedindex = thumbsswiper.clickedindex;\n var clickedslide = thumbsswiper.clickedslide;\n if (clickedslide && $(clickedslide).hasclass(swiper.params.thumbs.slidethumbactiveclass)) return;\n if (typeof clickedindex === 'undefined' || clickedindex === null) return;\n var slidetoindex;\n\n if (thumbsswiper.params.loop) {\n slidetoindex = parseint($(thumbsswiper.clickedslide).attr('data-swiper-slide-index'), 10);\n } else {\n slidetoindex = clickedindex;\n }\n\n if (swiper.params.loop) {\n var currentindex = swiper.activeindex;\n\n if (swiper.slides.eq(currentindex).hasclass(swiper.params.slideduplicateclass)) {\n swiper.loopfix(); // eslint-disable-next-line\n\n swiper._clientleft = swiper.$wrapperel[0].clientleft;\n currentindex = swiper.activeindex;\n }\n\n var previndex = swiper.slides.eq(currentindex).prevall(\"[data-swiper-slide-index=\\\"\".concat(slidetoindex, \"\\\"]\")).eq(0).index();\n var nextindex = swiper.slides.eq(currentindex).nextall(\"[data-swiper-slide-index=\\\"\".concat(slidetoindex, \"\\\"]\")).eq(0).index();\n if (typeof previndex === 'undefined') slidetoindex = nextindex;else if (typeof nextindex === 'undefined') slidetoindex = previndex;else if (nextindex - currentindex < currentindex - previndex) slidetoindex = nextindex;else slidetoindex = previndex;\n }\n\n swiper.slideto(slidetoindex);\n },\n update: function update(initial) {\n var swiper = this;\n var thumbsswiper = swiper.thumbs.swiper;\n if (!thumbsswiper) return;\n var slidesperview = thumbsswiper.params.slidesperview === 'auto' ? thumbsswiper.slidesperviewdynamic() : thumbsswiper.params.slidesperview;\n var autoscrolloffset = swiper.params.thumbs.autoscrolloffset;\n var useoffset = autoscrolloffset && !thumbsswiper.params.loop;\n\n if (swiper.realindex !== thumbsswiper.realindex || useoffset) {\n var currentthumbsindex = thumbsswiper.activeindex;\n var newthumbsindex;\n var direction;\n\n if (thumbsswiper.params.loop) {\n if (thumbsswiper.slides.eq(currentthumbsindex).hasclass(thumbsswiper.params.slideduplicateclass)) {\n thumbsswiper.loopfix(); // eslint-disable-next-line\n\n thumbsswiper._clientleft = thumbsswiper.$wrapperel[0].clientleft;\n currentthumbsindex = thumbsswiper.activeindex;\n } // find actual thumbs index to slide to\n\n\n var prevthumbsindex = thumbsswiper.slides.eq(currentthumbsindex).prevall(\"[data-swiper-slide-index=\\\"\".concat(swiper.realindex, \"\\\"]\")).eq(0).index();\n var nextthumbsindex = thumbsswiper.slides.eq(currentthumbsindex).nextall(\"[data-swiper-slide-index=\\\"\".concat(swiper.realindex, \"\\\"]\")).eq(0).index();\n if (typeof prevthumbsindex === 'undefined') newthumbsindex = nextthumbsindex;else if (typeof nextthumbsindex === 'undefined') newthumbsindex = prevthumbsindex;else if (nextthumbsindex - currentthumbsindex === currentthumbsindex - prevthumbsindex) newthumbsindex = currentthumbsindex;else if (nextthumbsindex - currentthumbsindex < currentthumbsindex - prevthumbsindex) newthumbsindex = nextthumbsindex;else newthumbsindex = prevthumbsindex;\n direction = swiper.activeindex > swiper.previousindex ? 'next' : 'prev';\n } else {\n newthumbsindex = swiper.realindex;\n direction = newthumbsindex > swiper.previousindex ? 'next' : 'prev';\n }\n\n if (useoffset) {\n newthumbsindex += direction === 'next' ? autoscrolloffset : -1 * autoscrolloffset;\n }\n\n if (thumbsswiper.visibleslidesindexes && thumbsswiper.visibleslidesindexes.indexof(newthumbsindex) < 0) {\n if (thumbsswiper.params.centeredslides) {\n if (newthumbsindex > currentthumbsindex) {\n newthumbsindex = newthumbsindex - math.floor(slidesperview / 2) + 1;\n } else {\n newthumbsindex = newthumbsindex + math.floor(slidesperview / 2) - 1;\n }\n } else if (newthumbsindex > currentthumbsindex) {\n newthumbsindex = newthumbsindex - slidesperview + 1;\n }\n\n thumbsswiper.slideto(newthumbsindex, initial ? 0 : undefined);\n }\n } // activate thumbs\n\n\n var thumbstoactivate = 1;\n var thumbactiveclass = swiper.params.thumbs.slidethumbactiveclass;\n\n if (swiper.params.slidesperview > 1 && !swiper.params.centeredslides) {\n thumbstoactivate = swiper.params.slidesperview;\n }\n\n if (!swiper.params.thumbs.multipleactivethumbs) {\n thumbstoactivate = 1;\n }\n\n thumbstoactivate = math.floor(thumbstoactivate);\n thumbsswiper.slides.removeclass(thumbactiveclass);\n\n if (thumbsswiper.params.loop || thumbsswiper.params.virtual && thumbsswiper.params.virtual.enabled) {\n for (var i = 0; i < thumbstoactivate; i += 1) {\n thumbsswiper.$wrapperel.children(\"[data-swiper-slide-index=\\\"\".concat(swiper.realindex + i, \"\\\"]\")).addclass(thumbactiveclass);\n }\n } else {\n for (var _i13 = 0; _i13 < thumbstoactivate; _i13 += 1) {\n thumbsswiper.slides.eq(swiper.realindex + _i13).addclass(thumbactiveclass);\n }\n }\n }\n};\nvar thumbs$1 = {\n name: 'thumbs',\n params: {\n thumbs: {\n swiper: null,\n multipleactivethumbs: true,\n autoscrolloffset: 0,\n slidethumbactiveclass: 'swiper-slide-thumb-active',\n thumbscontainerclass: 'swiper-container-thumbs'\n }\n },\n create: function create() {\n var swiper = this;\n utils.extend(swiper, {\n thumbs: {\n swiper: null,\n init: thumbs.init.bind(swiper),\n update: thumbs.update.bind(swiper),\n onthumbclick: thumbs.onthumbclick.bind(swiper)\n }\n });\n },\n on: {\n beforeinit: function beforeinit() {\n var swiper = this;\n var thumbs = swiper.params.thumbs;\n if (!thumbs || !thumbs.swiper) return;\n swiper.thumbs.init();\n swiper.thumbs.update(true);\n },\n slidechange: function slidechange() {\n var swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n update: function update() {\n var swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n observerupdate: function observerupdate() {\n var swiper = this;\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n settransition: function settransition(duration) {\n var swiper = this;\n var thumbsswiper = swiper.thumbs.swiper;\n if (!thumbsswiper) return;\n thumbsswiper.settransition(duration);\n },\n beforedestroy: function beforedestroy() {\n var swiper = this;\n var thumbsswiper = swiper.thumbs.swiper;\n if (!thumbsswiper) return;\n\n if (swiper.thumbs.swipercreated && thumbsswiper) {\n thumbsswiper.destroy();\n }\n }\n }\n}; // swiper class\n\nvar components = [device$1, support$1, browser$1, resize, observer$1, virtual$1, keyboard$1, mousewheel$1, navigation$1, pagination$1, scrollbar$1, parallax$1, zoom$1, lazy$1, controller$1, a11y, history$1, hashnavigation$1, autoplay$1, effectfade, effectcube, effectflip, effectcoverflow, thumbs$1];\n\nif (typeof swiper.use === 'undefined') {\n swiper.use = swiper.class.use;\n swiper.installmodule = swiper.class.installmodule;\n}\n\nswiper.use(components);\n/* harmony default export */ const __webpack_default_export__ = (swiper);\n\n//# sourceurl=webpack://xiangtoujituan2022/./js/build/module/swiper5/index.js?"); /***/ }), /***/ "./js/build/src/home.js": /*!******************************!*\ !*** ./js/build/src/home.js ***! \******************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _module_swiper5_index_js__webpack_imported_module_0__ = __webpack_require__(/*! ../module/swiper5/index.js */ \"./js/build/module/swiper5/index.js\");\n/* harmony import */ var _module_count_index_js__webpack_imported_module_1__ = __webpack_require__(/*! ../module/count/index.js */ \"./js/build/module/count/index.js\");\nfunction _toconsumablearray(arr) { return _arraywithoutholes(arr) || _iterabletoarray(arr) || _unsupportediterabletoarray(arr) || _noniterablespread(); }\n\nfunction _noniterablespread() { throw new typeerror(\"invalid attempt to spread non-iterable instance.\\nin order to be iterable, non-array objects must have a [symbol.iterator]() method.\"); }\n\nfunction _unsupportediterabletoarray(o, minlen) { if (!o) return; if (typeof o === \"string\") return _arrayliketoarray(o, minlen); var n = object.prototype.tostring.call(o).slice(8, -1); if (n === \"object\" && o.constructor) n = o.constructor.name; if (n === \"map\" || n === \"set\") return array.from(o); if (n === \"arguments\" || /^(?:ui|i)nt(?:8|16|32)(?:clamped)?array$/.test(n)) return _arrayliketoarray(o, minlen); }\n\nfunction _iterabletoarray(iter) { if (typeof symbol !== \"undefined\" && iter[symbol.iterator] != null || iter[\"@@iterator\"] != null) return array.from(iter); }\n\nfunction _arraywithoutholes(arr) { if (array.isarray(arr)) return _arrayliketoarray(arr); }\n\nfunction _arrayliketoarray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\nvar countfc = function countfc() {\n _$(\".count\").foreach(function (el) {\n new _module_count_index_js__webpack_imported_module_1__[\"default\"]({\n node: el,\n limittime: 2000\n });\n });\n}; // -------------------------------------------------------\n\n\nvar indexswipernavinit = function indexswipernavinit(len, myswiper) {\n var indexswipernav = _(\".indexswipernav\");\n\n var html = \"\";\n\n for (var i = 0; i < len; i++) {\n html += \"\");\n }\n\n indexswipernav.innerhtml = html;\n indexswipernav.addeventlistener(\"click\", function (e) {\n var target = e.target;\n\n while (target !== indexswipernav) {\n if (target.classlist.contains(\"indexswipernavspan\")) {\n _toconsumablearray(indexswipernav.children).foreach(function (el) {\n el.classlist.remove(\"active\");\n });\n\n target.classlist.add(\"active\");\n myswiper.slideto(target.dataset.index, 1000, true);\n break;\n }\n\n target = target.parentnode;\n }\n });\n};\n\nvar myswiper = new _module_swiper5_index_js__webpack_imported_module_0__[\"default\"](\".swiper-app\", {\n watchslidesprogress: true,\n slidesperview: \"auto\",\n speed: 1000,\n mousewheel: true,\n direction: \"vertical\",\n on: {\n transitionstart: function transitionstart() {\n var item = _$(\".indexswipernav span\");\n\n item.foreach(function (el) {\n inactive(el, \"active\");\n });\n active(item[this.activeindex], \"active\");\n\n if (this.activeindex === 1) {\n countfc();\n }\n },\n progress: function progress() {\n var slide = this.slides;\n var len = slide.length;\n\n for (var i = 0; i < len-2; i++) {\n var slideprogress = slide[i].progress;\n var offset = this.width * 0.4;\n var translate = slideprogress * offset;\n slide[i].queryselector(\".wrapper\").style.transform = \"translate3d(0,\".concat(translate, \"px,0)\");\n }\n },\n settransition: function settransition(speed) {\n var slide = this.slides;\n var len = slide.length;\n\n for (var i = 0; i < len; i++) {\n slide[i].style.transition = speed + \"ms\";\n slide[i].queryselector(\".wrapper\").style.transition = speed + \"ms\";\n }\n }\n }\n});\n\n_(\".poplink\").addeventlistener(\"click\", function () {\n myswiper.mousewheel.disable();\n});\n\n_(\".poplink .selectitem\").addeventlistener(\"mouseleave\", function () {\n myswiper.mousewheel.enable();\n inactive(_(\".poplink .selectitem\"), \"active\");\n});\n\nindexswipernavinit(myswiper.slides.length, myswiper);\n\nif (w < 1024) {\n myswiper.destroy(false, false);\n} // -------------------------------------------------------\n\n\nvar indexslide = new _module_swiper5_index_js__webpack_imported_module_0__[\"default\"](\".swiper-indexslide\", {\n centeredslides: true,\n loop: true,\n speed: 1000,\n autoplay: {\n loop: true,\n delay: 3000,\n stoponlastslide: false,\n disableoninteraction: false\n },\n navigation: {\n nextel: \".next\",\n prevel: \".prev\"\n },\n breakpoints: {\n 1024: {\n slidesperview: \"5\",\n spacebetween: 24\n },\n 768: {\n slidesperview: \"3\",\n spacebetween: 24\n },\n 320: {\n slidesperview: \"1\",\n spacebetween: 24\n }\n }\n});\n\n//# sourceurl=webpack://xiangtoujituan2022/./js/build/src/home.js?"); /***/ }) /******/ }); /************************************************************************/ /******/ // the module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // the require function /******/ function __webpack_require__(moduleid) { /******/ // check if module is in cache /******/ var cachedmodule = __webpack_module_cache__[moduleid]; /******/ if (cachedmodule !== undefined) { /******/ return cachedmodule.exports; /******/ } /******/ // create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleid] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // execute the module function /******/ __webpack_modules__[moduleid](module, module.exports, __webpack_require__); /******/ /******/ // return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ object.defineproperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasownproperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return object.prototype.hasownproperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esmodule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof symbol !== 'undefined' && symbol.tostringtag) { /******/ object.defineproperty(exports, symbol.tostringtag, { value: 'module' }); /******/ } /******/ object.defineproperty(exports, '__esmodule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // load entry module and return exports /******/ // this entry module can't be inlined because the eval devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./js/build/src/home.js"); /******/ /******/ })() ;